diff --git a/documentation/08-dashboard-widgety.md b/documentation/08-dashboard-widgety.md index 6d43d6d..fe06d5a 100644 --- a/documentation/08-dashboard-widgety.md +++ b/documentation/08-dashboard-widgety.md @@ -24,6 +24,11 @@ Klic je `${userId}:${tenantId}`, uloziste je `src/data/dashboardLayouts.ts` dostane vychozi rozlozeni a `custom: false`. Ulozene rozlozeni si drzi `createdAt` i po uprave. +Vychozi rozlozeni dostava stejne `hasPerson` jako katalog: kdo ve firme neni +veden jako resitel, nema v katalogu `list.myTickets`, a tak ho nesmi mit ani +ve vychozi sade (misto nej jsou nezarazene tickety pres celou sirku). Jinak +by novy ucet videl jako prvni vec hlasku o widgetu, ktery "uz v katalogu neni". + ## Katalog widgetu `src/data/widgets.ts`, stejny princip jako katalog konektoru: server je zdroj diff --git a/documentation/99-zmeny.md b/documentation/99-zmeny.md index 35abbf6..5995db9 100644 --- a/documentation/99-zmeny.md +++ b/documentation/99-zmeny.md @@ -2,6 +2,20 @@ Nejnovejsi nahore. +## 2026-09-09 - Novy ucet videl na dashboardu chybejici widget + +Kdo se prihlasil do nove firmy (nebo jako nove zalozeny ucet), videl jako +prvni vec na prehledu hlasku "Widget list.myTickets uz v katalogu neni". +Katalog widgetu tenhle widget schovava tomu, kdo ve firme neni veden jako +resitel (nema co ukazat), ale **vychozi rozlozeni ho obsahovalo vzdy**. +Dve pravidla o jedne veci na dvou mistech. + +`getLayout` a `resetLayout` v `dashboardLayouts.ts` dostavaji stejne +`hasPerson` jako katalog a vychozi rozlozeni bez resitele `list.myTickets` +nema; misto nej jsou nezarazene tickety pres celou sirku. Ulozene rozlozeni +se nemeni - kdyz nekomu resitele zrusi, hlaska s tlacitkem "Odebrat" je +spravna, protoze si ten widget na dashboard dal sam. + ## 2026-09-09 - Revize projektu: prava, vykon, runtime, portal a ARES Velka sada oprav napric celym projektem. Zadna nova obrazovka, ale skoro kazda diff --git a/src/data/dashboardLayouts.ts b/src/data/dashboardLayouts.ts index c3413ea..94ab191 100644 --- a/src/data/dashboardLayouts.ts +++ b/src/data/dashboardLayouts.ts @@ -68,8 +68,23 @@ export async function initLayouts(): Promise { } } -export function getLayout(userId: string, tenantId: string): LayoutItem[] { - return layouts.get(key(userId, tenantId))?.items ?? defaultLayout.map((item) => ({ ...item })); +/** + * Rozlozeni uzivatele, nebo vychozi. + * + * `hasPerson` musi byt stejne, jako dostava katalog (`widgetCatalog`): kdo + * neni ve firme veden jako resitel, nema v katalogu `list.myTickets`, a tak + * nesmi byt ani ve vychozim rozlozeni. Jinak novy ucet uvidel jako prvni vec + * na dashboardu hlasku, ze widget "uz v katalogu neni". Misto nej dostane + * nezarazene tickety pres celou sirku, aby radek nezustal poloprazdny. + */ +export function getLayout(userId: string, tenantId: string, hasPerson: boolean): LayoutItem[] { + const saved = layouts.get(key(userId, tenantId))?.items; + if (saved) return saved; + return defaultLayout + .filter((item) => hasPerson || item.widgetId !== 'list.myTickets') + .map((item) => + !hasPerson && item.widgetId === 'list.unassigned' ? { ...item, size: 'full' as const } : { ...item }, + ); } /** true = uzivatel si rozlozeni uz upravil, nekouka na vychozi. */ @@ -91,13 +106,13 @@ export function saveLayout(userId: string, tenantId: string, items: LayoutItem[] } /** Vrati dashboard do vychoziho stavu. */ -export function resetLayout(userId: string, tenantId: string): LayoutItem[] { +export function resetLayout(userId: string, tenantId: string, hasPerson: boolean): LayoutItem[] { const id = key(userId, tenantId); layouts.delete(id); // Vychozi rozlozeni se neuklada, takze vraceni znamena smazat zaznam. mirror.drop(id); console.info(`[layout] ${userId}@${tenantId}: vraceno na vychozi`); - return getLayout(userId, tenantId); + return getLayout(userId, tenantId, hasPerson); } /** diff --git a/src/routes/dashboard.ts b/src/routes/dashboard.ts index f5a5a59..f724948 100644 --- a/src/routes/dashboard.ts +++ b/src/routes/dashboard.ts @@ -299,7 +299,7 @@ dashboardRouter.get('/layout', (req, res) => { return res.json({ tenantId, - items: getLayout(req.user!.id, tenantId), + items: getLayout(req.user!.id, tenantId, accessOf(req).personId !== null), custom: hasCustomLayout(req.user!.id, tenantId), }); }); @@ -341,7 +341,7 @@ dashboardRouter.delete('/layout', (req, res) => { return res.json({ tenantId, - items: resetLayout(req.user!.id, tenantId), + items: resetLayout(req.user!.id, tenantId, accessOf(req).personId !== null), custom: false, }); });