From 7833ddd0831b047934fe787bce22ba9dd7da9580 Mon Sep 17 00:00:00 2001 From: Nic D Date: Wed, 4 Feb 2026 10:55:23 -0500 Subject: [PATCH 1/2] refactor(approvals): optimize approval page UI/UX for mobile --- .../components/details-dialog.vue | 17 ++- .../mobile/overview-list-top-mobile.vue | 81 +++++++++++ .../components/overview-list-filters.vue | 6 +- .../components/overview-list-top.vue | 102 ++++++++++++++ .../components/overview-list.vue | 127 +++++------------- .../expense-dialog-list-item-mobile.vue | 6 +- .../timesheets/components/shift-list.vue | 20 ++- .../components/timesheet-wrapper.vue | 20 +-- 8 files changed, 264 insertions(+), 115 deletions(-) create mode 100644 src/modules/timesheet-approval/components/mobile/overview-list-top-mobile.vue create mode 100644 src/modules/timesheet-approval/components/overview-list-top.vue diff --git a/src/modules/timesheet-approval/components/details-dialog.vue b/src/modules/timesheet-approval/components/details-dialog.vue index 07e3afe..3baabb9 100644 --- a/src/modules/timesheet-approval/components/details-dialog.vue +++ b/src/modules/timesheet-approval/components/details-dialog.vue @@ -23,6 +23,9 @@ t('timesheet_approvals.table.unverified') ); const approveButtonIcon = computed(() => isApproved.value ? 'lock' : 'lock_open'); + const hasExpenses = computed(() => timesheet_store.timesheets.some(timesheet => + Object.values(timesheet.weekly_expenses).some(hours => hours > 0)) + ); const onClickApproveAll = async () => { const employeeEmail = timesheet_store.current_pay_period_overview?.email; @@ -69,7 +72,10 @@ class="q-px-xl" @click="onClickApproveAll" > - +
- +
@@ -96,7 +105,7 @@
-
+
+ import PayPeriodNavigator from 'src/modules/shared/components/pay-period-navigator.vue'; + import OverviewListFilters from 'src/modules/timesheet-approval/components/overview-list-filters.vue'; + import QTableFilters from 'src/modules/shared/components/q-table-filters.vue'; + + import { useQuasar } from 'quasar'; + import { computed, ref } from 'vue'; + import { useTimesheetStore } from 'src/stores/timesheet-store'; + import { useTimesheetApprovalApi } from '../../composables/use-timesheet-approval-api'; + import type { + OverviewColumns, + PayPeriodOverviewFilters + } from 'src/modules/timesheet-approval/models/timesheet-overview.models'; + + const overviewFilters = defineModel('filters', { required: true }); + const visibleColumns = defineModel('visibleColumns', { required: true }); + + const q = useQuasar(); + const timesheetStore = useTimesheetStore(); + const timesheetApprovalApi = useTimesheetApprovalApi(); + + const isShowingFilters = ref(false); + + const filterButtonBgColor = computed(() => q.dark.isActive ? 'dark' : 'primary') + + + \ No newline at end of file diff --git a/src/modules/timesheet-approval/components/overview-list-filters.vue b/src/modules/timesheet-approval/components/overview-list-filters.vue index fb82c72..7b945cc 100644 --- a/src/modules/timesheet-approval/components/overview-list-filters.vue +++ b/src/modules/timesheet-approval/components/overview-list-filters.vue @@ -18,14 +18,14 @@