From f794696e9003a8ad8a63f9999f6434515dd9f60b Mon Sep 17 00:00:00 2001 From: Usman Baig Date: Wed, 25 Mar 2026 21:55:14 +0100 Subject: [PATCH] fix: script features save with Save Changes instead of instantly --- .../settings/unified/tabs/SiteGeneralTab.tsx | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/components/settings/unified/tabs/SiteGeneralTab.tsx b/components/settings/unified/tabs/SiteGeneralTab.tsx index 086f227..6087289 100644 --- a/components/settings/unified/tabs/SiteGeneralTab.tsx +++ b/components/settings/unified/tabs/SiteGeneralTab.tsx @@ -35,6 +35,7 @@ export default function SiteGeneralTab({ siteId, onDirtyChange, onRegisterSave } const { data: site, mutate } = useSite(siteId) const [name, setName] = useState('') const [timezone, setTimezone] = useState('UTC') + const [scriptFeatures, setScriptFeatures] = useState>({}) const [showDeleteModal, setShowDeleteModal] = useState(false) const [showVerificationModal, setShowVerificationModal] = useState(false) @@ -46,30 +47,30 @@ export default function SiteGeneralTab({ siteId, onDirtyChange, onRegisterSave } if (!site || hasInitialized.current) return setName(site.name || '') setTimezone(site.timezone || 'UTC') - initialRef.current = JSON.stringify({ name: site.name || '', timezone: site.timezone || 'UTC' }) + setScriptFeatures(site.script_features || {}) + initialRef.current = JSON.stringify({ name: site.name || '', timezone: site.timezone || 'UTC', scriptFeatures: JSON.stringify(site.script_features || {}) }) hasInitialized.current = true }, [site]) // Track dirty state useEffect(() => { if (!initialRef.current) return - const current = JSON.stringify({ name, timezone }) - const dirty = current !== initialRef.current - onDirtyChange?.(dirty) - }, [name, timezone, onDirtyChange]) + const current = JSON.stringify({ name, timezone, scriptFeatures: JSON.stringify(scriptFeatures) }) + onDirtyChange?.(current !== initialRef.current) + }, [name, timezone, scriptFeatures, onDirtyChange]) const handleSave = useCallback(async () => { if (!site) return try { - await updateSite(siteId, { name, timezone }) + await updateSite(siteId, { name, timezone, script_features: scriptFeatures }) await mutate() - initialRef.current = JSON.stringify({ name, timezone }) + initialRef.current = JSON.stringify({ name, timezone, scriptFeatures: JSON.stringify(scriptFeatures) }) onDirtyChange?.(false) toast.success('Site updated') } catch { toast.error('Failed to save') } - }, [site, siteId, name, timezone, mutate, onDirtyChange]) + }, [site, siteId, name, timezone, scriptFeatures, mutate, onDirtyChange]) useEffect(() => { onRegisterSave?.(handleSave) @@ -134,17 +135,10 @@ export default function SiteGeneralTab({ siteId, onDirtyChange, onRegisterSave } { - try { - await updateSite(siteId, { name: site.name, timezone: site.timezone, script_features: features }) - await mutate() - } catch { - toast.error('Failed to update script features') - } - }} + onFeaturesChange={(features) => setScriptFeatures(features)} /> {/* Verify Installation */}