From 9cd4f92027774029234e38980fac3a12f136166f Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Thu, 6 Feb 2025 11:51:40 -0600 Subject: [PATCH] [APP-1013] Configure and apply default post interaction settings from user preferences (#7664) * Add interaction settings screen * Move header out of interaction settings form * WIP hook it up * Thread through default settings into composer * Update copy pasta * Handle edited state * Copy feedback * Sentence case Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update copy * Bump SDK * Fix new type error * Less in your face * Remove new dep * Add slot * Copy edit --------- Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> --- package.json | 2 +- src/Navigation.tsx | 9 ++ .../dialogs/PostInteractionSettingsDialog.tsx | 82 +++++++---- src/lib/routes/types.ts | 1 + src/routes.ts | 1 + src/screens/Moderation/index.tsx | 16 +++ .../ModerationInteractionSettings/index.tsx | 127 ++++++++++++++++++ .../Settings/components/ExportCarDialog.tsx | 2 +- .../queries/post-interaction-settings.ts | 20 +++ src/state/queries/preferences/const.ts | 4 + src/view/com/composer/Composer.tsx | 10 +- src/view/com/composer/state/composer.ts | 25 +++- yarn.lock | 97 +++++-------- 13 files changed, 298 insertions(+), 98 deletions(-) create mode 100644 src/screens/ModerationInteractionSettings/index.tsx create mode 100644 src/state/queries/post-interaction-settings.ts diff --git a/package.json b/package.json index 2c64fe78ba..51289dd8d6 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "icons:optimize": "svgo -f ./assets/icons" }, "dependencies": { - "@atproto/api": "^0.13.31", + "@atproto/api": "^0.13.33", "@bitdrift/react-native": "^0.6.2", "@braintree/sanitize-url": "^6.0.2", "@discord/bottom-sheet": "bluesky-social/react-native-bottom-sheet", diff --git a/src/Navigation.tsx b/src/Navigation.tsx index a6332c5d88..0dcce98bf3 100644 --- a/src/Navigation.tsx +++ b/src/Navigation.tsx @@ -70,6 +70,7 @@ import {MessagesScreen} from '#/screens/Messages/ChatList' import {MessagesConversationScreen} from '#/screens/Messages/Conversation' import {MessagesSettingsScreen} from '#/screens/Messages/Settings' import {ModerationScreen} from '#/screens/Moderation' +import {Screen as ModerationInteractionSettings} from '#/screens/ModerationInteractionSettings' import {PostLikedByScreen} from '#/screens/Post/PostLikedBy' import {PostQuotesScreen} from '#/screens/Post/PostQuotes' import {PostRepostedByScreen} from '#/screens/Post/PostRepostedBy' @@ -155,6 +156,14 @@ function commonScreens(Stack: typeof HomeTab, unreadCountLabel?: string) { getComponent={() => ModerationBlockedAccounts} options={{title: title(msg`Blocked Accounts`), requireAuth: true}} /> + ModerationInteractionSettings} + options={{ + title: title(msg`Post Interaction Settings`), + requireAuth: true, + }} + /> SettingsScreen} diff --git a/src/components/dialogs/PostInteractionSettingsDialog.tsx b/src/components/dialogs/PostInteractionSettingsDialog.tsx index a698574a49..b443d59f22 100644 --- a/src/components/dialogs/PostInteractionSettingsDialog.tsx +++ b/src/components/dialogs/PostInteractionSettingsDialog.tsx @@ -40,6 +40,7 @@ import {Loader} from '#/components/Loader' import {Text} from '#/components/Typography' export type PostInteractionSettingsFormProps = { + canSave?: boolean onSave: () => void isSaving?: boolean @@ -58,20 +59,53 @@ export function PostInteractionSettingsControlledDialog({ }: PostInteractionSettingsFormProps & { control: Dialog.DialogControlProps }) { + const t = useTheme() const {_} = useLingui() + return ( - + +
+ + + + You can set default interaction settings in{' '} + + Settings → Moderation → Interaction settings. + + + + ) } +export function Header() { + return ( + + + Post interaction settings + + + Customize who can interact with this post. + + + + ) +} + export type PostInteractionSettingsDialogProps = { control: Dialog.DialogControlProps /** @@ -203,26 +237,31 @@ export function PostInteractionSettingsDialogControlledInner( - {isLoading ? ( - - - - ) : ( - - )} + +
+ + {isLoading ? ( + + + + ) : ( + + )} + ) } export function PostInteractionSettingsForm({ + canSave = true, onSave, isSaving, postgate, @@ -283,17 +322,7 @@ export function PostInteractionSettingsForm({ return ( - - Post interaction settings - - - - Customize who can interact with this post. - - - - Quote settings @@ -435,6 +464,7 @@ export function PostInteractionSettingsForm({