From e2c6026b47c7722575b83b7329b8b495848b14c7 Mon Sep 17 00:00:00 2001 From: Gregor Vostrak Date: Thu, 16 May 2024 13:08:10 +0200 Subject: [PATCH] add aggregation/grouping of time entries with same attributes in time view --- package-lock.json | 8 +- package.json | 2 +- .../Common/Member/MemberTableRow.vue | 4 +- .../TimeEntry/TimeEntryAggregateRow.vue | 195 ++++++++++++++++++ .../TimeEntry/TimeEntryDescriptionInput.vue | 6 +- .../TimeEntry/TimeEntryRangeSelector.vue | 9 +- .../Common/TimeEntry/TimeEntryRow.vue | 12 +- .../TimeTrackerProjectTaskDropdown.vue | 51 +++-- .../Common/TimeTrackerStartStop.vue | 4 +- resources/js/Components/Dropdown.vue | 10 +- resources/js/Components/TimeTracker.vue | 2 +- resources/js/Pages/Time.vue | 87 ++++++-- resources/js/utils/time.ts | 8 + resources/js/utils/useMembers.ts | 22 +- resources/js/utils/useTimeEntries.ts | 1 + 15 files changed, 355 insertions(+), 66 deletions(-) create mode 100644 resources/js/Components/Common/TimeEntry/TimeEntryAggregateRow.vue diff --git a/package-lock.json b/package-lock.json index f063c924..508cfc1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@vue/eslint-config-prettier": "^9.0.0", "@vue/eslint-config-typescript": "^13.0.0", "@vueuse/core": "^10.9.0", - "dayjs": "^1.11.10", + "dayjs": "^1.11.11", "echarts": "^5.5.0", "parse-duration": "^1.1.0", "pinia": "^2.1.7", @@ -2549,9 +2549,9 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" }, "node_modules/de-indent": { "version": "1.0.2", diff --git a/package.json b/package.json index 95b4798e..835beac3 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@vue/eslint-config-prettier": "^9.0.0", "@vue/eslint-config-typescript": "^13.0.0", "@vueuse/core": "^10.9.0", - "dayjs": "^1.11.10", + "dayjs": "^1.11.11", "echarts": "^5.5.0", "parse-duration": "^1.1.0", "pinia": "^2.1.7", diff --git a/resources/js/Components/Common/Member/MemberTableRow.vue b/resources/js/Components/Common/Member/MemberTableRow.vue index 8f898eba..56c4d3ab 100644 --- a/resources/js/Components/Common/Member/MemberTableRow.vue +++ b/resources/js/Components/Common/Member/MemberTableRow.vue @@ -1,7 +1,6 @@ + + + + diff --git a/resources/js/Components/Common/TimeEntry/TimeEntryDescriptionInput.vue b/resources/js/Components/Common/TimeEntry/TimeEntryDescriptionInput.vue index fec1ad82..e69ac473 100644 --- a/resources/js/Components/Common/TimeEntry/TimeEntryDescriptionInput.vue +++ b/resources/js/Components/Common/TimeEntry/TimeEntryDescriptionInput.vue @@ -4,7 +4,9 @@ const emit = defineEmits(['changed']); function onChange(event: Event) { const target = event.target as HTMLInputElement; - emit('changed', target.value); + if (target.value !== value.value) { + emit('changed', target.value); + } } @@ -13,7 +15,7 @@ function onChange(event: Event) {