When replying to CW content, CW will be added

This commit is contained in:
Zhiyuan Zheng 2021-02-27 17:25:01 +01:00
parent f3fa6bc662
commit 4eea2bf58c
No known key found for this signature in database
GPG Key ID: 078A93AB607D85E0
6 changed files with 45 additions and 24 deletions

View File

@ -1,4 +1,3 @@
import apiInstance from '@api/instance'
import { toast, toastConfig } from '@components/toast' import { toast, toastConfig } from '@components/toast'
import { import {
NavigationContainer, NavigationContainer,
@ -9,6 +8,7 @@ import ScreenAnnouncements from '@screens/Announcements'
import ScreenCompose from '@screens/Compose' import ScreenCompose from '@screens/Compose'
import ScreenImagesViewer from '@screens/ImagesViewer' import ScreenImagesViewer from '@screens/ImagesViewer'
import ScreenTabs from '@screens/Tabs' import ScreenTabs from '@screens/Tabs'
import { useAnnouncementQuery } from '@utils/queryHooks/announcement'
import { updatePreviousTab } from '@utils/slices/contextsSlice' import { updatePreviousTab } from '@utils/slices/contextsSlice'
import { updateAccountPreferences } from '@utils/slices/instances/updateAccountPreferences' import { updateAccountPreferences } from '@utils/slices/instances/updateAccountPreferences'
import { getInstanceActive } from '@utils/slices/instancesSlice' import { getInstanceActive } from '@utils/slices/instancesSlice'
@ -117,28 +117,28 @@ const Screens: React.FC<Props> = ({ localCorrupt }) => {
}, [localCorrupt]) }, [localCorrupt])
// On launch check if there is any unread announcements // On launch check if there is any unread announcements
useEffect(() => { useAnnouncementQuery({
instanceActive !== -1 && showAll: false,
apiInstance<Mastodon.Announcement[]>({ options: {
method: 'get', notifyOnChangeProps: [],
url: `announcements` select: announcements =>
}) announcements.filter(announcement => !announcement.read),
.then(res => { onSuccess: data => {
if (res.body.filter(announcement => !announcement.read).length) { if (data.length) {
navigationRef.current?.navigate('Screen-Announcements', { navigationRef.current?.navigate('Screen-Announcements', {
showAll: false showAll: false
}) })
} }
}) }
.catch(() => {}) }
}, []) })
// Lazily update users's preferences, for e.g. composing default visibility // Lazily update users's preferences, for e.g. composing default visibility
useEffect(() => { useEffect(() => {
if (instanceActive !== -1) { if (instanceActive !== -1) {
dispatch(updateAccountPreferences()) dispatch(updateAccountPreferences())
} }
}, []) }, [instanceActive])
// Callbacks // Callbacks
const navigationContainerOnReady = useCallback( const navigationContainerOnReady = useCallback(

View File

@ -28,7 +28,8 @@ const HeaderCenter = React.memo(
const styles = StyleSheet.create({ const styles = StyleSheet.create({
text: { text: {
...StyleConstants.FontStyle.M fontSize: 18,
fontWeight: StyleConstants.Font.Weight.Bold
} }
}) })

View File

@ -204,13 +204,13 @@ const ScreenAnnouncements: React.FC<ScreenAnnouncementsProp> = ({
style={styles.base} style={styles.base}
reducedTransparencyFallbackColor={theme.background} reducedTransparencyFallbackColor={theme.background}
> >
<SafeAreaView style={styles.base} edges={['bottom']}> <SafeAreaView style={styles.base}>
<View <View
style={{ style={{
flex: 1,
flexDirection: 'row', flexDirection: 'row',
justifyContent: 'space-between', justifyContent: 'space-between',
alignItems: 'center' alignItems: 'center',
flexBasis: 44
}} }}
> >
<HeaderLeft <HeaderLeft
@ -236,7 +236,7 @@ const ScreenAnnouncements: React.FC<ScreenAnnouncementsProp> = ({
onMomentumScrollEnd={onMomentumScrollEnd} onMomentumScrollEnd={onMomentumScrollEnd}
ListEmptyComponent={ListEmptyComponent} ListEmptyComponent={ListEmptyComponent}
/> />
<View style={[styles.indicators]}> <View style={styles.indicators}>
{query.data && query.data.length > 1 ? ( {query.data && query.data.length > 1 ? (
<> <>
{query.data.map((d, i) => ( {query.data.map((d, i) => (

View File

@ -145,6 +145,23 @@ const ScreenCompose: React.FC<ScreenComposeProp> = ({
}) })
break break
case 'reply': case 'reply':
const actualStatus =
params.incomingStatus.reblog || params.incomingStatus
if (actualStatus.spoiler_text) {
formatText({
textInput: 'spoiler',
composeDispatch,
content: actualStatus.spoiler_text,
disableDebounce: true
})
}
formatText({
textInput: 'text',
composeDispatch,
content: params.accts.map(acct => `@${acct}`).join(' ') + ' ',
disableDebounce: true
})
break
case 'conversation': case 'conversation':
formatText({ formatText({
textInput: 'text', textInput: 'text',

View File

@ -39,7 +39,7 @@ const composeParseState = (
}), }),
visibility: visibility:
params.incomingStatus.visibility || params.incomingStatus.visibility ||
getInstanceAccount(store.getState()).preferences[ getInstanceAccount(store.getState())?.preferences[
'posting:default:visibility' 'posting:default:visibility'
] || ] ||
'public', 'public',
@ -53,6 +53,9 @@ const composeParseState = (
...composeInitialState, ...composeInitialState,
dirty: true, dirty: true,
timestamp: Date.now(), timestamp: Date.now(),
...(actualStatus.spoiler_text && {
spoiler: { ...composeInitialState.spoiler, active: true }
}),
visibility: actualStatus.visibility, visibility: actualStatus.visibility,
visibilityLock: actualStatus.visibility === 'direct', visibilityLock: actualStatus.visibility === 'direct',
replyToStatus: actualStatus replyToStatus: actualStatus

View File

@ -302,7 +302,7 @@ export const getInstanceMaxTootChar = ({
instances: { instances } instances: { instances }
}: RootState) => { }: RootState) => {
const instanceActive = findInstanceActive(instances) const instanceActive = findInstanceActive(instances)
return instanceActive !== -1 ? instances[instanceActive].max_toot_chars : null return instanceActive !== -1 ? instances[instanceActive].max_toot_chars : 500
} }
export const getInstanceAccount = ({ instances: { instances } }: RootState) => { export const getInstanceAccount = ({ instances: { instances } }: RootState) => {