From 2e863c1f8bf0ccb3b5569aff4f7c0d9f7b812710 Mon Sep 17 00:00:00 2001 From: JiriUhlir <149317995+JiriUhlir@users.noreply.github.com> Date: Wed, 26 Aug 2026 08:04:22 +0200 Subject: [PATCH] Prepinac firmy do sidebaru a prepnuti prekresli obsah cely Dodelavka. Tvrzeni "prepinac plati pro cely system" nebylo pravdive: useApiQuery se na zmenu firmy zeptat umel, ale komponenty volajici apiFetch primo - EntityAdmin, a tim cele Nastaveni a zalozky Resitele a Skupiny v Lidech - o zmene nevedely a zustala na nich data predchozi firmy. Presne ta vada, kvuli ktere se to delalo, jen o patro vedle. - obsah dashboardu ma key podle vybrane firmy, takze prepnuti prestavi cely strom komponent. Zadny dotaz nemuze zustat stary, protoze zadna stara komponenta nezustane. Doplnovat zavislost do kazde komponenty zvlast je totez zapomenuti, jen o patro niz. - prepinac je v sidebaru nad navigaci, ne v hlavicce, a vypada jako ovladaci prvek: ram, ikona firmy, sipka. Predchozi verze mela pruhledny ram a splyvala s popiskem. - v hlavicce zustal jen nazev aktivni firmy. Driv tam stalo natvrdo tenants[0], takze po prepnuti ukazovala porad prvni firmu ze seznamu. Co-Authored-By: Claude Opus 5 (1M context) --- documentation/07-firmy-a-prava.md | 16 ++++- documentation/99-zmeny.md | 25 +++++++ .../components/dashboard/DashboardLayout.tsx | 72 ++++++++++++++----- 3 files changed, 95 insertions(+), 18 deletions(-) diff --git a/documentation/07-firmy-a-prava.md b/documentation/07-firmy-a-prava.md index 0e82eb5..9ada8db 100644 --- a/documentation/07-firmy-a-prava.md +++ b/documentation/07-firmy-a-prava.md @@ -48,8 +48,9 @@ muze mit vic. Bez `tenantId` se pouzije prvni. ## Prepinac firmy je nad celym portalem Vybrana firma je **jedna hodnota pro cely dashboard** (`web/src/lib/tenant.ts`), -ne stav jedne stranky. Prepinac je v hlavicce nad obsahem a `apiFetch` doplnuje -`tenantId` do kazdeho dotazu na `/api/dashboard`. +ne stav jedne stranky. Prepinac je v sidebaru nad navigaci, tedy nad vsim, co se +pod nim kresli, a `apiFetch` doplnuje `tenantId` do kazdeho dotazu +na `/api/dashboard`. Doplnuje se to v API vrstve schvalne, ne na strankach. Kdyz si to mela pridavat kazda stranka sama, vetsina na to zapomnela a server sahnul po vychozi firme - @@ -65,6 +66,17 @@ Vyjimky, kdy se nedoplnuje: | Neni vybrano | server pouzije vychozi firmu uctu | | Cesta mimo `/api/dashboard` | prihlaseni a verejny web s firmou nepracuji | +**Prepnuti prekresli obsah cely.** Obsah dashboardu ma `key` podle vybrane +firmy, takze jina firma znamena novy strom komponent. + +Bez toho to nestacilo: `useApiQuery` se sice zeptat umi, ale komponenty, ktere +volaji `apiFetch` primo - `EntityAdmin`, a tim cele Nastaveni a zalozky +Resitele a Skupiny - o zmene nevi a zustala by na nich data predchozi firmy. +Doplnovat zavislost do kazde z nich je totez zapomenuti, jen o patro niz. + +Ztrata rozepsaneho stavu je pritom spravne: filtr na cloveka z firmy A nema +ve firme B co znamenat. + Volba prezije obnoveni stranky (localStorage). Kdyz ulozena firma uz mezi `access.tenants` neni - clovek z ni odesel, prihlasil se nekdo jiny na tomtez pocitaci - spadne se na vychozi firmu uctu, aby kazdy dotaz nekoncil na 403. diff --git a/documentation/99-zmeny.md b/documentation/99-zmeny.md index e0a1137..b8eb961 100644 --- a/documentation/99-zmeny.md +++ b/documentation/99-zmeny.md @@ -2,6 +2,31 @@ Nejnovejsi nahore. +## 2026-08-26 - prepinac firmy: do sidebaru a prekresli obsah cely + +Dodelavka predchoziho bodu. Tvrzeni "prepinac plati pro cely system" nebylo +pravdive: `useApiQuery` se na zmenu firmy zeptat umel, ale komponenty, ktere +volaji `apiFetch` primo - `EntityAdmin`, a tim cele Nastaveni a zalozky +Resitele a Skupiny v Lidech - o zmene nevedely a zustala na nich data +predchozi firmy. + +### Opraveno + +- **Obsah dashboardu ma `key` podle vybrane firmy**, takze prepnuti prestavi + cely strom komponent. Zadny dotaz nemuze zustat stary, protoze zadna stara + komponenta nezustane. Doplnovat zavislost do kazde komponenty zvlast je + totez zapomenuti, jen o patro niz. + +### Zmeneno + +- **Prepinac je v sidebaru nad navigaci**, ne v hlavicce. Vypada jako ovladaci + prvek: ram, ikona firmy, sipka. Predchozi verze mela pruhledny ram a splyvala + s popiskem - prepinac, ktery neni videt, je k nicemu. +- **V hlavicce zustal jen nazev aktivni firmy.** Driv tam stalo natvrdo + `tenants[0]`, takze po prepnuti ukazovala porad prvni firmu ze seznamu. +- Kdo patri do jedne firmy, vidi misto prepinace jeji nazev. Vyber z jedne + moznosti neni vyber. + ## 2026-08-26 - prava plati za firmu, ne za cloveka `permissionsOf(user)` scitalo role pres vsechna clenstvi. Kdo byl spravce diff --git a/web/src/components/dashboard/DashboardLayout.tsx b/web/src/components/dashboard/DashboardLayout.tsx index 72f7c28..1040979 100644 --- a/web/src/components/dashboard/DashboardLayout.tsx +++ b/web/src/components/dashboard/DashboardLayout.tsx @@ -1,13 +1,15 @@ import { AlarmClock, Blocks, + Building2, + ChevronDown, ExternalLink, LayoutDashboard, LayoutGrid, LifeBuoy, - MessageSquarePlus, LogOut, Menu, + MessageSquarePlus, MousePointerClick, Plug, ScrollText, @@ -92,27 +94,36 @@ function TenantSwitch({ access }: { access: Access | null }) { const current = tenants.find((tenant) => tenant.id === activeTenant); + // Vyber z jedne moznosti neni vyber, tak se vykresli jen nazev. if (tenants.length <= 1) { return ( -

+

{current?.name ?? tenants[0]?.name ?? 'Klientský portál'}

); } + /* + Vypada jako ovladaci prvek, ne jako popisek. Predchozi verze mela pruhledny + ram a splyvala s textem - prepinac, ktery neni videt, je k nicemu. + */ return ( - +
+ + + +
); } @@ -145,6 +156,8 @@ function DashboardShell() { setSidebarOpen(false); }, [location.pathname]); + const activeTenant = useActiveTenant(); + async function handleLogout() { await logout(); navigate('/', { replace: true }); @@ -171,6 +184,15 @@ function DashboardShell() { + {/* + Prepinac firmy nad navigaci, tedy nad vsim, co se pod nim kresli. + Vybrana firma plati pro cely portal, ne pro jednu stranku, takze + patri do ramu portalu a ne dovnitr obsahu. + */} +
+ +
+