feat(sidebar): tallet ved et projekt er opgaver, og folden har en tast
"Hvorfor står der 2 ud for et tomt projekt?" Fordi tallet var member_count — hvor mange mennesker. Den samme grå kolonne betød tre ting: personer ved projekter, projekter ved grupper, opgaver ved etiketter. I en opgaveapp læses et tal ved siden af et projekt som opgaver, og det gjorde manden, der har skrevet appen. Nu er det åbne opgaver, og det vises når der er noget tilbage frem for når projektet er delt — som var den gamle betingelse, og grunden til at netop de tre delte havde et tal. Hvem der ellers er med står på projektets egen side. Tællingen hentes fra serveren igen, når opgaver flytter sig. Det ville være hurtigere at lægge til og trække fra lokalt, og det ville være forkert inden for en dag: en opgave flyttet mellem projekter, en lukket i en anden fane, en gentagende der lukker og åbner sig selv. Og sidebjælken kunne allerede foldes — der var bare kun en knap med et rektangel med en streg i, og det er ikke et ord. Nu gør ⌘B det samme, knappen siger det, og genvejssiden nævner det. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
997dffe01c
commit
62498c2765
@@ -1846,3 +1846,47 @@ test('en postkasse kan tilføjes, og værtens afvisning når frem til skærmen',
|
||||
// watcher caught still has to be empty.
|
||||
expect(trouble.filter((t) => !t.includes('/mailboxes → 422'))).toEqual([]);
|
||||
});
|
||||
|
||||
test('tallet ved et projekt er opgaver, og sidebjælken kan foldes med tastaturet', async ({ page }) => {
|
||||
const trouble = watchForTrouble(page);
|
||||
await page.goto('/');
|
||||
|
||||
const sidebar = page.getByRole('navigation', { name: 'Hovedmenu' });
|
||||
await sidebar.getByRole('button', { name: 'Nyt projekt' }).click();
|
||||
await sidebar.getByLabel('Projektnavn').fill('Tallene');
|
||||
await sidebar.getByLabel('Projektnavn').press('Enter');
|
||||
|
||||
const row = sidebar.getByRole('link', { name: /^Tallene/ });
|
||||
await expect(row).toBeVisible();
|
||||
// Nothing in it yet, so no number at all: a nought beside every empty project
|
||||
// is a column of noughts.
|
||||
await expect(row).toHaveText('Tallene');
|
||||
|
||||
await row.click();
|
||||
const box = page.getByLabel('Ny opgave');
|
||||
await box.fill('første i dag');
|
||||
await box.press('Enter');
|
||||
|
||||
// One task, one in the sidebar — live, without a reload.
|
||||
await expect(sidebar.getByRole('link', { name: /^Tallene/ })).toContainText('1', {
|
||||
timeout: 10000
|
||||
});
|
||||
|
||||
// And it counts what is left, not what has been: finishing it takes the number
|
||||
// away entirely, which is the whole reason it is not member_count any more —
|
||||
// that one said 2 on an empty project and meant two people.
|
||||
await page.getByRole('button', { name: 'Markér som færdig' }).first().click();
|
||||
await expect(sidebar.getByRole('link', { name: /^Tallene/ })).toHaveText('Tallene', {
|
||||
timeout: 10000
|
||||
});
|
||||
|
||||
// The fold has a button, but a rectangle with a line down it is not a word.
|
||||
const width = () => sidebar.evaluate((el) => el.getBoundingClientRect().width);
|
||||
expect(await width()).toBeGreaterThan(100);
|
||||
await page.keyboard.press('ControlOrMeta+b');
|
||||
await expect.poll(width).toBeLessThan(5);
|
||||
await page.keyboard.press('ControlOrMeta+b');
|
||||
await expect.poll(width).toBeGreaterThan(100);
|
||||
|
||||
expect(trouble).toEqual([]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user