From 7c4ec38dfa11eade6f3faa6b49b0543762cbd2c4 Mon Sep 17 00:00:00 2001 From: Eliezer Steinbock <3090527+elie222@users.noreply.github.com> Date: Tue, 4 Nov 2025 13:23:50 +0200 Subject: [PATCH] Faster toggling with optimistic updates --- .../assistant/settings/MultiRuleSetting.tsx | 19 ++++++++++++++++++- .../settings/ReferralSignatureSetting.tsx | 13 +++++++++++-- version.txt | 2 +- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/apps/web/app/(app)/[emailAccountId]/assistant/settings/MultiRuleSetting.tsx b/apps/web/app/(app)/[emailAccountId]/assistant/settings/MultiRuleSetting.tsx index e03b4a9f58..357743aad3 100644 --- a/apps/web/app/(app)/[emailAccountId]/assistant/settings/MultiRuleSetting.tsx +++ b/apps/web/app/(app)/[emailAccountId]/assistant/settings/MultiRuleSetting.tsx @@ -1,5 +1,6 @@ "use client"; +import { useCallback } from "react"; import { Toggle } from "@/components/Toggle"; import { enableMultiRuleSelectionAction } from "@/utils/actions/rule"; import { toastError } from "@/components/Toast"; @@ -19,6 +20,7 @@ export function MultiRuleSetting() { mutate(); }, onError: (error) => { + mutate(); toastError({ description: `There was an error: ${error.error.serverError || "Unknown error"}`, }); @@ -28,6 +30,21 @@ export function MultiRuleSetting() { const enabled = data?.multiRuleSelectionEnabled ?? false; + const handleToggle = useCallback( + (enable: boolean) => { + if (!data) return; + + const optimisticData = { + ...data, + multiRuleSelectionEnabled: enable, + }; + mutate(optimisticData, false); + + execute({ enable }); + }, + [data, mutate, execute], + ); + return ( execute({ enable })} + onChange={handleToggle} disabled={isLoading} /> diff --git a/apps/web/app/(app)/[emailAccountId]/assistant/settings/ReferralSignatureSetting.tsx b/apps/web/app/(app)/[emailAccountId]/assistant/settings/ReferralSignatureSetting.tsx index e405f671ac..b4b0734249 100644 --- a/apps/web/app/(app)/[emailAccountId]/assistant/settings/ReferralSignatureSetting.tsx +++ b/apps/web/app/(app)/[emailAccountId]/assistant/settings/ReferralSignatureSetting.tsx @@ -25,6 +25,7 @@ export function ReferralSignatureSetting() { }); }, onError: (error) => { + mutate(); toastError({ description: error.error.serverError || @@ -38,10 +39,18 @@ export function ReferralSignatureSetting() { ); const handleToggle = useCallback( - async (enabled: boolean) => { + (enabled: boolean) => { + if (!data) return; + + const optimisticData = { + ...data, + includeReferralSignature: enabled, + }; + mutate(optimisticData, false); + execute({ enabled }); }, - [execute], + [data, mutate, execute], ); if (env.NEXT_PUBLIC_DISABLE_REFERRAL_SIGNATURE) { diff --git a/version.txt b/version.txt index e7a3a8850d..76e9b418a3 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -v2.17.34 +v2.17.35