mirror of
https://github.com/tooot-app/app
synced 2025-04-15 02:42:04 +02:00
commit
f776b477f0
1
.github/workflows/build.yml
vendored
1
.github/workflows/build.yml
vendored
@ -29,6 +29,7 @@ jobs:
|
||||
- name: -- Step 4 -- Install node dependencies
|
||||
run: yarn install
|
||||
- name: -- Step 5 -- Install native dependencies
|
||||
if: github.ref != 'refs/heads/main'
|
||||
run: npx pod-install
|
||||
- name: -- Step 6 -- Install ruby dependencies
|
||||
run: bundle install
|
||||
|
@ -56,7 +56,8 @@ private_lane :github_release do |options|
|
||||
tag_name: GITHUB_RELEASE,
|
||||
description: "No changelog provided",
|
||||
commitish: git_branch,
|
||||
is_prerelease: options[:prerelease]
|
||||
is_prerelease: options[:prerelease],
|
||||
upload_assets: ["#{File.expand_path('..', Dir.pwd)}/tooot-#{GITHUB_RELEASE}.apk"]
|
||||
)
|
||||
end
|
||||
|
||||
@ -125,6 +126,22 @@ private_lane :build_android do
|
||||
skip_upload_images: true,
|
||||
skip_upload_screenshots: true
|
||||
)
|
||||
build_android_app(
|
||||
task: 'assemble',
|
||||
build_type: 'release',
|
||||
project_dir: "./android",
|
||||
print_command: false,
|
||||
print_command_output: false,
|
||||
properties: {
|
||||
"expoSDK" => VERSIONS[:expo],
|
||||
"releaseChannel" => RELEASE_CHANNEL,
|
||||
"android.injected.signing.store.file" => "#{File.expand_path('..', Dir.pwd)}/android/tooot.jks",
|
||||
"android.injected.signing.store.password" => ENV["ANDROID_KEYSTORE_PASSWORD"],
|
||||
"android.injected.signing.key.alias" => ENV["ANDROID_KEYSTORE_ALIAS"],
|
||||
"android.injected.signing.key.password" => ENV["ANDROID_KEYSTORE_KEY_PASSWORD"],
|
||||
}
|
||||
)
|
||||
sh "mv #{lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]} #{File.expand_path('..', Dir.pwd)}/tooot-#{GITHUB_RELEASE}.apk"
|
||||
when "release"
|
||||
else
|
||||
if !is_ci
|
||||
|
@ -4,7 +4,7 @@
|
||||
"native": "210317",
|
||||
"major": 0,
|
||||
"minor": 7,
|
||||
"patch": 0,
|
||||
"patch": 1,
|
||||
"expo": "40.0.0"
|
||||
},
|
||||
"description": "tooot app for Mastodon",
|
||||
|
@ -29,7 +29,7 @@ audio()
|
||||
push()
|
||||
|
||||
log('log', 'react-query', 'initializing')
|
||||
const queryClient = new QueryClient()
|
||||
export const queryClient = new QueryClient()
|
||||
|
||||
log('log', 'react-native-screens', 'initializing')
|
||||
enableScreens()
|
||||
|
@ -128,6 +128,7 @@ const Timeline: React.FC<Props> = ({
|
||||
return (
|
||||
<>
|
||||
<TimelineRefresh
|
||||
flRef={flRef}
|
||||
queryKey={queryKey}
|
||||
scrollY={scrollY}
|
||||
fetchingType={fetchingType}
|
||||
|
@ -7,9 +7,9 @@ import {
|
||||
} from '@utils/queryHooks/timeline'
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import { useTheme } from '@utils/styles/ThemeManager'
|
||||
import React, { useCallback, useRef, useState } from 'react'
|
||||
import React, { RefObject, useCallback, useRef, useState } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import { Platform, StyleSheet, Text, View } from 'react-native'
|
||||
import { FlatList, Platform, StyleSheet, Text, View } from 'react-native'
|
||||
import { Circle } from 'react-native-animated-spinkit'
|
||||
import Animated, {
|
||||
Extrapolate,
|
||||
@ -23,6 +23,7 @@ import Animated, {
|
||||
import { InfiniteData, useQueryClient } from 'react-query'
|
||||
|
||||
export interface Props {
|
||||
flRef: RefObject<FlatList<any>>
|
||||
queryKey: QueryKeyTimeline
|
||||
scrollY: Animated.SharedValue<number>
|
||||
fetchingType: Animated.SharedValue<0 | 1 | 2>
|
||||
@ -40,6 +41,7 @@ export const SEPARATION_Y_2 = -(
|
||||
)
|
||||
|
||||
const TimelineRefresh: React.FC<Props> = ({
|
||||
flRef,
|
||||
queryKey,
|
||||
scrollY,
|
||||
fetchingType,
|
||||
@ -137,6 +139,10 @@ const TimelineRefresh: React.FC<Props> = ({
|
||||
}
|
||||
)
|
||||
}
|
||||
const callRefetch = async () => {
|
||||
await refetch()
|
||||
setTimeout(() => flRef.current?.scrollToOffset({ offset: 1 }), 50)
|
||||
}
|
||||
|
||||
const [textRight, setTextRight] = useState(0)
|
||||
const arrowY = useAnimatedStyle(() => ({
|
||||
@ -225,7 +231,7 @@ const TimelineRefresh: React.FC<Props> = ({
|
||||
break
|
||||
case 2:
|
||||
runOnJS(prepareRefetch)()
|
||||
runOnJS(refetch)()
|
||||
runOnJS(callRefetch)()
|
||||
break
|
||||
}
|
||||
},
|
||||
|
@ -23,18 +23,21 @@ export interface Props {
|
||||
reblog: boolean
|
||||
}
|
||||
|
||||
const TimelineActions = React.memo(
|
||||
({ queryKey, rootQueryKey, highlighted, status, accts, reblog }: Props) => {
|
||||
const TimelineActions: React.FC<Props> = ({
|
||||
queryKey,
|
||||
rootQueryKey,
|
||||
highlighted,
|
||||
status,
|
||||
accts,
|
||||
reblog
|
||||
}) => {
|
||||
const navigation = useNavigation()
|
||||
const { t } = useTranslation('componentTimeline')
|
||||
const { mode, theme } = useTheme()
|
||||
const iconColor = theme.secondary
|
||||
const iconColorAction = (state: boolean) =>
|
||||
state ? theme.primaryDefault : theme.secondary
|
||||
|
||||
const queryClient = useQueryClient()
|
||||
const mutation = useTimelineMutation({
|
||||
queryClient,
|
||||
onMutate: true,
|
||||
onSuccess: (_, params) => {
|
||||
const theParams = params as MutationVarsTimelineUpdateStatusProperty
|
||||
@ -294,9 +297,7 @@ const TimelineActions = React.memo(
|
||||
</View>
|
||||
</View>
|
||||
)
|
||||
},
|
||||
() => true
|
||||
)
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
actions: {
|
||||
|
@ -54,7 +54,6 @@ const HeaderConversation = React.memo(
|
||||
|
||||
const queryClient = useQueryClient()
|
||||
const mutation = useTimelineMutation({
|
||||
queryClient,
|
||||
onMutate: true,
|
||||
onError: (err: any, _, oldData) => {
|
||||
displayMessage({
|
||||
|
@ -45,7 +45,6 @@ const TimelinePoll: React.FC<Props> = ({
|
||||
|
||||
const queryClient = useQueryClient()
|
||||
const mutation = useTimelineMutation({
|
||||
queryClient,
|
||||
onSuccess: ({ body }, params) => {
|
||||
const theParams = params as MutationVarsTimelineUpdateStatusProperty
|
||||
queryClient.cancelQueries(queryKey)
|
||||
@ -55,7 +54,7 @@ const TimelinePoll: React.FC<Props> = ({
|
||||
switch (theParams.payload.property) {
|
||||
case 'poll':
|
||||
theParams.payload.data = (body as unknown) as Mastodon.Poll
|
||||
updateStatusProperty({ queryClient, ...theParams })
|
||||
updateStatusProperty(theParams)
|
||||
break
|
||||
}
|
||||
},
|
||||
|
@ -29,7 +29,6 @@ const ActionsAccount: React.FC<Props> = ({
|
||||
|
||||
const queryClient = useQueryClient()
|
||||
const mutateion = useTimelineMutation({
|
||||
queryClient,
|
||||
onSuccess: (_, params) => {
|
||||
const theParams = params as MutationVarsTimelineUpdateAccountProperty
|
||||
displayMessage({
|
||||
|
@ -30,7 +30,6 @@ const ActionsDomain: React.FC<Props> = ({
|
||||
const { t } = useTranslation('componentTimeline')
|
||||
const queryClient = useQueryClient()
|
||||
const mutation = useTimelineMutation({
|
||||
queryClient,
|
||||
onSettled: () => {
|
||||
displayMessage({
|
||||
mode,
|
||||
|
@ -34,7 +34,6 @@ const ActionsStatus: React.FC<Props> = ({
|
||||
|
||||
const queryClient = useQueryClient()
|
||||
const mutation = useTimelineMutation({
|
||||
queryClient,
|
||||
onMutate: true,
|
||||
onError: (err: any, params, oldData) => {
|
||||
const theFunction = (params as MutationVarsTimelineUpdateStatusProperty)
|
||||
|
@ -1,15 +1,12 @@
|
||||
import apiInstance from '@api/instance'
|
||||
import haptics from '@components/haptics'
|
||||
import { queryClient } from '@root/App'
|
||||
import { store } from '@root/store'
|
||||
import {
|
||||
getInstanceActive,
|
||||
getInstanceNotificationsFilter
|
||||
} from '@utils/slices/instancesSlice'
|
||||
import { getInstanceNotificationsFilter } from '@utils/slices/instancesSlice'
|
||||
import { AxiosError } from 'axios'
|
||||
import { uniqBy } from 'lodash'
|
||||
import {
|
||||
MutationOptions,
|
||||
QueryClient,
|
||||
useInfiniteQuery,
|
||||
UseInfiniteQueryOptions,
|
||||
useMutation
|
||||
@ -356,13 +353,11 @@ type MutationOptionsTimeline = MutationOptions<
|
||||
>
|
||||
|
||||
const useTimelineMutation = ({
|
||||
queryClient,
|
||||
onError,
|
||||
onMutate,
|
||||
onSettled,
|
||||
onSuccess
|
||||
}: {
|
||||
queryClient: QueryClient
|
||||
onError?: MutationOptionsTimeline['onError']
|
||||
onMutate?: boolean
|
||||
onSettled?: MutationOptionsTimeline['onSettled']
|
||||
@ -385,10 +380,10 @@ const useTimelineMutation = ({
|
||||
haptics('Light')
|
||||
switch (params.type) {
|
||||
case 'updateStatusProperty':
|
||||
updateStatusProperty({ queryClient, ...params })
|
||||
updateStatusProperty(params)
|
||||
break
|
||||
case 'deleteItem':
|
||||
deleteItem({ queryClient, ...params })
|
||||
deleteItem(params)
|
||||
break
|
||||
}
|
||||
return oldData
|
||||
|
@ -1,13 +1,12 @@
|
||||
import { InfiniteData, QueryClient } from 'react-query'
|
||||
import { queryClient } from '@root/App'
|
||||
import { InfiniteData } from 'react-query'
|
||||
import { MutationVarsTimelineDeleteItem } from '../timeline'
|
||||
|
||||
const deleteItem = ({
|
||||
queryClient,
|
||||
queryKey,
|
||||
rootQueryKey,
|
||||
id
|
||||
}: {
|
||||
queryClient: QueryClient
|
||||
queryKey?: MutationVarsTimelineDeleteItem['queryKey']
|
||||
rootQueryKey?: MutationVarsTimelineDeleteItem['rootQueryKey']
|
||||
id: MutationVarsTimelineDeleteItem['id']
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { queryClient } from '@root/App'
|
||||
import { findIndex } from 'lodash'
|
||||
import { InfiniteData, QueryClient } from 'react-query'
|
||||
import { InfiniteData } from 'react-query'
|
||||
import {
|
||||
MutationVarsTimelineUpdateStatusProperty,
|
||||
TimelineData
|
||||
@ -9,14 +10,12 @@ import updateNotification from './update/notification'
|
||||
import updateStatus from './update/status'
|
||||
|
||||
const updateStatusProperty = ({
|
||||
queryClient,
|
||||
queryKey,
|
||||
rootQueryKey,
|
||||
id,
|
||||
reblog,
|
||||
payload
|
||||
}: {
|
||||
queryClient: QueryClient
|
||||
queryKey: MutationVarsTimelineUpdateStatusProperty['queryKey']
|
||||
rootQueryKey?: MutationVarsTimelineUpdateStatusProperty['rootQueryKey']
|
||||
id: MutationVarsTimelineUpdateStatusProperty['id']
|
||||
|
Loading…
x
Reference in New Issue
Block a user