From ffdb744d1644c0c4e57f76fd3328ae089647e0cb Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 13 Feb 2024 23:20:18 -0600 Subject: [PATCH] Refactor useSettings hook, parse with zod schema --- src/components/animated-number.tsx | 2 +- src/components/announcements/emoji.tsx | 2 +- .../announcements/reactions-bar.tsx | 2 +- src/components/helmet.tsx | 2 +- src/components/media-gallery.tsx | 3 +- src/components/navlinks.tsx | 3 +- src/components/quoted-status.tsx | 3 +- src/components/scroll-top-button.tsx | 7 ++- src/components/scrollable-list.tsx | 3 +- src/components/sidebar-navigation.tsx | 4 +- src/components/site-logo.tsx | 4 +- src/components/status-action-bar.tsx | 4 +- src/components/status.tsx | 4 +- .../statuses/sensitive-content-overlay.tsx | 4 +- src/components/still-image.tsx | 3 +- src/contexts/chat-context.tsx | 7 +-- src/features/about/index.tsx | 2 +- .../account-gallery/components/media-item.tsx | 5 +-- src/features/account-timeline/index.tsx | 2 +- .../components/registration-form.tsx | 3 +- src/features/community-timeline/index.tsx | 2 +- .../event/components/event-header.tsx | 3 +- src/features/event/event-information.tsx | 3 +- .../notifications/components/filter-bar.tsx | 4 +- .../components/setting-toggle.tsx | 8 ++-- src/features/notifications/index.tsx | 4 +- src/features/preferences/index.tsx | 8 ++-- src/features/public-timeline/index.tsx | 6 +-- .../components/pinned-hosts-picker.tsx | 4 +- src/features/remote-timeline/index.tsx | 4 +- src/features/status/components/thread.tsx | 5 +-- .../ui/components/instance-info-panel.tsx | 2 +- src/features/ui/components/promo-panel.tsx | 3 +- src/features/ui/components/theme-toggle.tsx | 2 +- src/features/ui/util/optional-motion.tsx | 2 +- src/features/ui/util/react-router-helpers.tsx | 4 +- src/hooks/useSettings.ts | 8 ++-- src/hooks/useTheme.ts | 6 +-- src/init/soapbox-head.tsx | 9 ++-- src/schemas/soapbox/settings.ts | 44 +++++++++++++++++++ 40 files changed, 108 insertions(+), 92 deletions(-) diff --git a/src/components/animated-number.tsx b/src/components/animated-number.tsx index 86a2603da..ea5a82411 100644 --- a/src/components/animated-number.tsx +++ b/src/components/animated-number.tsx @@ -20,7 +20,7 @@ interface IAnimatedNumber { } const AnimatedNumber: React.FC = ({ value, obfuscate }) => { - const reduceMotion = useSettings().get('reduceMotion'); + const { reduceMotion } = useSettings(); const [direction, setDirection] = useState(1); const [displayedValue, setDisplayedValue] = useState(value); diff --git a/src/components/announcements/emoji.tsx b/src/components/announcements/emoji.tsx index b3dd0fcc5..1f6f8ed18 100644 --- a/src/components/announcements/emoji.tsx +++ b/src/components/announcements/emoji.tsx @@ -13,7 +13,7 @@ interface IEmoji { } const Emoji: React.FC = ({ emoji, emojiMap, hovered }) => { - const autoPlayGif = useSettings().get('autoPlayGif'); + const { autoPlayGif } = useSettings(); // @ts-ignore if (unicodeMapping[emoji]) { diff --git a/src/components/announcements/reactions-bar.tsx b/src/components/announcements/reactions-bar.tsx index 97324b89e..4ae41f030 100644 --- a/src/components/announcements/reactions-bar.tsx +++ b/src/components/announcements/reactions-bar.tsx @@ -20,7 +20,7 @@ interface IReactionsBar { } const ReactionsBar: React.FC = ({ announcementId, reactions, addReaction, removeReaction, emojiMap }) => { - const reduceMotion = useSettings().get('reduceMotion'); + const { reduceMotion } = useSettings(); const handleEmojiPick = (data: Emoji) => { addReaction(announcementId, (data as NativeEmoji).native.replace(/:/g, '')); diff --git a/src/components/helmet.tsx b/src/components/helmet.tsx index ee2ce3317..131e4c470 100644 --- a/src/components/helmet.tsx +++ b/src/components/helmet.tsx @@ -23,7 +23,7 @@ const Helmet: React.FC = ({ children }) => { const instance = useInstance(); const { unreadChatsCount } = useStatContext(); const unreadCount = useAppSelector((state) => getNotifTotals(state) + unreadChatsCount); - const demetricator = useSettings().get('demetricator'); + const { demetricator } = useSettings(); const hasUnreadNotifications = React.useMemo(() => !(unreadCount < 1 || demetricator), [unreadCount, demetricator]); diff --git a/src/components/media-gallery.tsx b/src/components/media-gallery.tsx index 368afc6e4..eb4f1988a 100644 --- a/src/components/media-gallery.tsx +++ b/src/components/media-gallery.tsx @@ -72,8 +72,7 @@ const Item: React.FC = ({ last, total, }) => { - const settings = useSettings(); - const autoPlayGif = settings.get('autoPlayGif') === true; + const { autoPlayGif } = useSettings(); const { mediaPreview } = useSoapboxConfig(); const handleMouseEnter: React.MouseEventHandler = ({ currentTarget: video }) => { diff --git a/src/components/navlinks.tsx b/src/components/navlinks.tsx index 4670f8015..448bfff2b 100644 --- a/src/components/navlinks.tsx +++ b/src/components/navlinks.tsx @@ -9,9 +9,8 @@ interface INavlinks { } const Navlinks: React.FC = ({ type }) => { - const settings = useSettings(); + const { locale } = useSettings(); const { copyright, navlinks } = useSoapboxConfig(); - const locale = settings.get('locale') as string; return (