Novy ucet videl na dashboardu chybejici widget
Katalog widgetu schovava list.myTickets tomu, kdo ve firme neni veden jako resitel, ale vychozi rozlozeni ho obsahovalo vzdy. Novy ucet nebo nova firma tak videly jako prvni vec hlasku "Widget list.myTickets uz v katalogu neni". getLayout a resetLayout dostavaji stejne hasPerson jako katalog; bez resitele je misto nej list.unassigned pres celou sirku. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
104ae36783
commit
6eed909a0d
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -68,8 +68,23 @@ export async function initLayouts(): Promise<void> {
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user