Files
kandev/apps/web/hooks/use-sidebar-views-sync.ts
T
Carlos Florêncio b9eb6ae058 refactor(web): remove legacy settings migration (#1704)
* refactor(web): remove legacy settings migration

* fix(web): hydrate portable settings from boot state

* fix(web): preserve sidebar sync contracts

* fix(web): retain portable settings filters

* fix(web): retry sidebar settings writes

* fix(web): retain sidebar boot settings

* fix(websocket): avoid shutdown teardown leaks

* fix(boot): normalize sidebar task preferences

* fix(settings): preserve saved views during hydration

* fix(jira): avoid duplicate saved-view syncs

* fix(jira): preserve saved views on fetch failure

* fix(jira): retry saved-view hydration failures

* refactor(jira): simplify hydration request cleanup

* fix(websocket): close late clients after hub shutdown
2026-07-16 00:06:41 +01:00

27 lines
1.0 KiB
TypeScript

"use client";
import { useEffect } from "react";
import { useAppStore } from "@/components/state-provider";
import { useToast } from "@/components/toast-provider";
/** Surfaces sidebar preference sync errors. Mount once inside the app's ToastProvider. */
export function useSidebarViewsSync() {
const syncError = useAppStore((s) => s.sidebarViews.syncError);
const taskPrefsSyncError = useAppStore((s) => s.sidebarTaskPrefs.syncError);
const clearError = useAppStore((s) => s.clearSidebarSyncError);
const clearTaskPrefsError = useAppStore((s) => s.clearSidebarTaskPrefsSyncError);
const { toast } = useToast();
useEffect(() => {
if (!syncError) return;
toast({ title: "Sidebar views", description: syncError, variant: "error" });
clearError();
}, [syncError, toast, clearError]);
useEffect(() => {
if (!taskPrefsSyncError) return;
toast({ title: "Sidebar task preferences", description: taskPrefsSyncError, variant: "error" });
clearTaskPrefsError();
}, [taskPrefsSyncError, toast, clearTaskPrefsError]);
}