From 655723db495f8f1086e2ea80740c478ff9ea263f Mon Sep 17 00:00:00 2001 From: Gregor Vostrak Date: Mon, 15 Jul 2024 17:20:07 +0200 Subject: [PATCH] refactor tag components and tagCreate events, change global week_start and timezone settings, fix pie charts --- e2e/time.spec.ts | 8 +-- e2e/timetracker.spec.ts | 16 ++++-- .../js/Components/Common/DaySectionHeader.vue | 4 +- .../Common/Reporting/ReportingPieChart.vue | 7 --- .../Components/Common/Tag/TagCreateModal.vue | 14 +++-- .../js/Components/Common/Tag/TagDropdown.vue | 56 +++++++++---------- .../TimeEntry/TimeEntryAggregateRow.vue | 45 ++++++++------- .../Common/TimeEntry/TimeEntryCreateModal.vue | 11 ++++ .../TimeEntry/TimeEntryDescriptionInput.vue | 4 +- .../TimeEntry/TimeEntryGroupedTable.vue | 32 +++++++++-- .../Common/TimeEntry/TimeEntryRow.vue | 13 ++++- .../Common/TimeEntry/TimeEntryRowHeading.vue | 2 +- .../TimeEntry/TimeEntryRowTagDropdown.vue | 23 +++++--- .../TimeTrackerProjectTaskDropdown.vue | 4 +- .../TimeTracker/TimeTrackerTagDropdown.vue | 16 +++++- .../Dashboard/ProjectsChartCard.vue | 7 --- .../js/Components/MoreOptionsDropdown.vue | 2 +- resources/js/Components/TimeTracker.vue | 12 ++++ resources/js/Pages/MainContainer.vue | 2 +- resources/js/Pages/Reporting.vue | 15 ++++- resources/js/Pages/Tags.vue | 16 +++++- resources/js/Pages/Time.vue | 39 +++++++------ resources/js/app.ts | 21 ++++++- resources/js/types/global.d.ts | 2 + resources/js/utils/useUser.ts | 17 +++++- 25 files changed, 255 insertions(+), 133 deletions(-) diff --git a/e2e/time.spec.ts b/e2e/time.spec.ts index 49edeb90..faf06737 100644 --- a/e2e/time.spec.ts +++ b/e2e/time.spec.ts @@ -145,7 +145,8 @@ test('test that adding a new tag to an existing time entry works', async ({ const newTagName = Math.floor(Math.random() * 1000000).toString(); await newTimeEntry.getByTestId('time_entry_tag_dropdown').click(); - await page.getByTestId('tag_dropdown_search').fill(newTagName); + await page.getByText('Create new tag').click(); + await page.getByPlaceholder('Tag Name').fill(newTagName); const [tagReponse] = await Promise.all([ page.waitForResponse(async (response) => { @@ -156,7 +157,7 @@ test('test that adding a new tag to an existing time entry works', async ({ (await response.json()).data.name === newTagName ); }), - page.getByTestId('tag_dropdown_search').press('Enter'), + page.getByRole('button', { name: 'Create Tag' }).click(), ]); await page.waitForResponse(async (response) => { @@ -172,8 +173,7 @@ test('test that adding a new tag to an existing time entry works', async ({ ); }); - await expect(page.getByTestId('tag_dropdown_search')).toHaveValue(''); - await expect(page.getByRole('option', { name: newTagName })).toBeVisible(); + await expect(newTimeEntry.getByText(newTagName)).toBeVisible(); }); // Test that Start / End Time Update Works diff --git a/e2e/timetracker.spec.ts b/e2e/timetracker.spec.ts index a4d016d0..f449fa6f 100644 --- a/e2e/timetracker.spec.ts +++ b/e2e/timetracker.spec.ts @@ -226,15 +226,17 @@ test('test that entering a time starts the timer on enter', async ({ test('test that adding a new tag works', async ({ page }) => { const newTagName = 'New Tag' + Math.floor(Math.random() * 10000); await goToDashboard(page); + await page.getByTestId('tag_dropdown').click(); - await page.getByTestId('tag_dropdown_search').fill(newTagName); + await page.getByText('Create new tag').click(); + await page.getByPlaceholder('Tag Name').fill(newTagName); await Promise.all([ newTagResponse(page, { name: newTagName }), - page.getByTestId('tag_dropdown_search').press('Enter'), + page.getByRole('button', { name: 'Create Tag' }).click(), ]); - await expect(page.getByTestId('tag_dropdown_search')).toHaveValue(''); + await page.getByTestId('tag_dropdown').click(); await expect(page.getByRole('option', { name: newTagName })).toBeVisible(); }); @@ -249,14 +251,16 @@ test('test that adding a new tag when the timer is running', async ({ ]); await assertThatTimerHasStarted(page); await page.getByTestId('tag_dropdown').click(); - await page.getByTestId('tag_dropdown_search').fill(newTagName); + await page.getByText('Create new tag').click(); + await page.getByPlaceholder('Tag Name').fill(newTagName); + const [tagCreateResponse] = await Promise.all([ newTagResponse(page, { name: newTagName }), - page.getByTestId('tag_dropdown_search').press('Enter'), + page.getByRole('button', { name: 'Create Tag' }).click(), ]); const tagId = (await tagCreateResponse.json()).data.id; await newTimeEntryResponse(page, { status: 200, tags: [tagId] }); - await expect(page.getByTestId('tag_dropdown_search')).toHaveValue(''); + await page.getByTestId('tag_dropdown').click(); await expect(page.getByRole('option', { name: newTagName })).toBeVisible(); await page.getByTestId('tag_dropdown_search').press('Escape'); await page.waitForTimeout(1000); diff --git a/resources/js/Components/Common/DaySectionHeader.vue b/resources/js/Components/Common/DaySectionHeader.vue index fee8d984..0a69ebdd 100644 --- a/resources/js/Components/Common/DaySectionHeader.vue +++ b/resources/js/Components/Common/DaySectionHeader.vue @@ -9,7 +9,7 @@ defineProps<{