diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-08-16 10:46:52 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-16 10:46:52 -0700 |
commit | 5e63d3164b58552f81b597eff83cba991bea958e (patch) | |
tree | 1fb8ac4d1405a19c6c261f3da7b10244ae83502a | |
parent | 819340dd3c34e89e8cd7126c6f1172aba7a8ebec (diff) | |
download | voidsky-5e63d3164b58552f81b597eff83cba991bea958e.tar.zst |
A set of composer fixes (#1187)
* Don't insert a newline on cmd+entrl (close #1173) * Don't linkify selected text on url-paste (close #1149) * Disable the adult content controls if there is no media on the post (close #1169)
-rw-r--r-- | src/state/models/ui/shell.ts | 1 | ||||
-rw-r--r-- | src/view/com/composer/Composer.tsx | 3 | ||||
-rw-r--r-- | src/view/com/composer/labels/LabelsBtn.tsx | 9 | ||||
-rw-r--r-- | src/view/com/composer/text-input/TextInput.web.tsx | 2 | ||||
-rw-r--r-- | src/view/com/modals/SelfLabel.tsx | 93 |
5 files changed, 66 insertions, 42 deletions
diff --git a/src/state/models/ui/shell.ts b/src/state/models/ui/shell.ts index e5fd5d426..92d028c79 100644 --- a/src/state/models/ui/shell.ts +++ b/src/state/models/ui/shell.ts @@ -102,6 +102,7 @@ export interface RepostModal { export interface SelfLabelModal { name: 'self-label' labels: string[] + hasMedia: boolean onChange: (labels: string[]) => void } diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx index f9629797a..fe9cc834f 100644 --- a/src/view/com/composer/Composer.tsx +++ b/src/view/com/composer/Composer.tsx @@ -218,6 +218,7 @@ export const ComposePost = observer(function ComposePost({ const selectTextInputPlaceholder = replyTo ? 'Write your reply' : `What's up?` const canSelectImages = useMemo(() => gallery.size < 4, [gallery.size]) + const hasMedia = gallery.size > 0 || Boolean(extLink) return ( <KeyboardAvoidingView @@ -236,7 +237,7 @@ export const ComposePost = observer(function ComposePost({ <Text style={[pal.link, s.f18]}>Cancel</Text> </TouchableOpacity> <View style={s.flex1} /> - <LabelsBtn labels={labels} onChange={setLabels} /> + <LabelsBtn labels={labels} onChange={setLabels} hasMedia={hasMedia} /> {isProcessing ? ( <View style={styles.postBtn}> <ActivityIndicator /> diff --git a/src/view/com/composer/labels/LabelsBtn.tsx b/src/view/com/composer/labels/LabelsBtn.tsx index 1abcbe036..96908d47f 100644 --- a/src/view/com/composer/labels/LabelsBtn.tsx +++ b/src/view/com/composer/labels/LabelsBtn.tsx @@ -11,9 +11,11 @@ import {isNative} from 'platform/detection' export const LabelsBtn = observer(function LabelsBtn({ labels, + hasMedia, onChange, }: { labels: string[] + hasMedia: boolean onChange: (v: string[]) => void }) { const pal = usePalette('default') @@ -23,7 +25,7 @@ export const LabelsBtn = observer(function LabelsBtn({ <Button type="default-light" testID="labelsBtn" - style={styles.button} + style={[styles.button, !hasMedia && styles.dimmed]} accessibilityLabel="Content warnings" accessibilityHint="" onPress={() => { @@ -32,7 +34,7 @@ export const LabelsBtn = observer(function LabelsBtn({ Keyboard.dismiss() } } - store.shell.openModal({name: 'self-label', labels, onChange}) + store.shell.openModal({name: 'self-label', labels, hasMedia, onChange}) }}> <ShieldExclamation style={pal.link} size={26} /> {labels.length > 0 ? ( @@ -53,6 +55,9 @@ const styles = StyleSheet.create({ paddingHorizontal: 14, marginRight: 4, }, + dimmed: { + opacity: 0.4, + }, label: { maxWidth: 100, }, diff --git a/src/view/com/composer/text-input/TextInput.web.tsx b/src/view/com/composer/text-input/TextInput.web.tsx index da34a5b9a..152bb50ea 100644 --- a/src/view/com/composer/text-input/TextInput.web.tsx +++ b/src/view/com/composer/text-input/TextInput.web.tsx @@ -60,6 +60,7 @@ export const TextInput = React.forwardRef( Link.configure({ protocols: ['http', 'https'], autolink: true, + linkOnPaste: false, }), Mention.configure({ HTMLAttributes: { @@ -96,6 +97,7 @@ export const TextInput = React.forwardRef( onPressPublish(state) return state }) + return true } }, }, diff --git a/src/view/com/modals/SelfLabel.tsx b/src/view/com/modals/SelfLabel.tsx index 87fc8fde6..42863fd33 100644 --- a/src/view/com/modals/SelfLabel.tsx +++ b/src/view/com/modals/SelfLabel.tsx @@ -16,9 +16,11 @@ export const snapPoints = ['50%'] export const Component = observer(function Component({ labels, + hasMedia, onChange, }: { labels: string[] + hasMedia: boolean onChange: (labels: string[]) => void }) { const pal = usePalette('default') @@ -74,46 +76,59 @@ export const Component = observer(function Component({ </Button> ) : null} </View> - <View style={s.flexRow}> - <SelectableBtn - testID="sexualLabelBtn" - selected={selected.includes('sexual')} - left - label="Suggestive" - onSelect={() => toggleAdultLabel('sexual')} - accessibilityHint="" - style={s.flex1} - /> - <SelectableBtn - testID="nudityLabelBtn" - selected={selected.includes('nudity')} - label="Nudity" - onSelect={() => toggleAdultLabel('nudity')} - accessibilityHint="" - style={s.flex1} - /> - <SelectableBtn - testID="pornLabelBtn" - selected={selected.includes('porn')} - label="Porn" - right - onSelect={() => toggleAdultLabel('porn')} - accessibilityHint="" - style={s.flex1} - /> - </View> + {hasMedia ? ( + <> + <View style={s.flexRow}> + <SelectableBtn + testID="sexualLabelBtn" + selected={selected.includes('sexual')} + left + label="Suggestive" + onSelect={() => toggleAdultLabel('sexual')} + accessibilityHint="" + style={s.flex1} + /> + <SelectableBtn + testID="nudityLabelBtn" + selected={selected.includes('nudity')} + label="Nudity" + onSelect={() => toggleAdultLabel('nudity')} + accessibilityHint="" + style={s.flex1} + /> + <SelectableBtn + testID="pornLabelBtn" + selected={selected.includes('porn')} + label="Porn" + right + onSelect={() => toggleAdultLabel('porn')} + accessibilityHint="" + style={s.flex1} + /> + </View> - <Text style={[pal.text, styles.adultExplainer]}> - {selected.includes('sexual') ? ( - <>Pictures meant for adults.</> - ) : selected.includes('nudity') ? ( - <>Artistic or non-erotic nudity.</> - ) : selected.includes('porn') ? ( - <>Sexual activity or erotic nudity.</> - ) : ( - <>If none are selected, suitable for all ages.</> - )} - </Text> + <Text style={[pal.text, styles.adultExplainer]}> + {selected.includes('sexual') ? ( + <>Pictures meant for adults.</> + ) : selected.includes('nudity') ? ( + <>Artistic or non-erotic nudity.</> + ) : selected.includes('porn') ? ( + <>Sexual activity or erotic nudity.</> + ) : ( + <>If none are selected, suitable for all ages.</> + )} + </Text> + </> + ) : ( + <View> + <Text style={[pal.textLight]}> + <Text type="md-bold" style={[pal.textLight]}> + Not Applicable + </Text> + . This warning is only available for posts with media attached. + </Text> + </View> + )} </View> </ScrollView> |