diff --git a/src/components/DateDaySelect.vue b/src/components/DateDaySelect.vue index 13f31b0..2ba0eb4 100644 --- a/src/components/DateDaySelect.vue +++ b/src/components/DateDaySelect.vue @@ -14,6 +14,21 @@ :val="opt.value" :label="opt.label" /> + + + + + +
@@ -22,7 +37,7 @@ diff --git a/src/localstorage/localStorage.ts b/src/localstorage/localStorage.ts index 1b02464..2c20ad8 100644 --- a/src/localstorage/localStorage.ts +++ b/src/localstorage/localStorage.ts @@ -1,6 +1,5 @@ import { Dark } from 'quasar'; import { appName, databaseName, type Settings } from 'src/vueLib/models/settings'; -import { updateOrAddObject } from 'src/vueLib/utils/utils'; import { ref } from 'vue'; export function setLocalSettings(settings: Settings) { @@ -79,30 +78,19 @@ export function getLocalLanguage(): string | null { type pageDefault = { page: string; - stringValue: string; - filteredValues: string[]; + data: unknown; }; type pageDefaults = pageDefault[]; const pageDefaults = ref([]); -export function setLocalPageDefaults( - page: string, - filteredColumn?: string, - filteredValue?: string[], -) { - updateOrAddObject( - pageDefaults.value, - { page: page, stringValue: filteredColumn, filteredValues: filteredValue }, - 'page', - ); - localStorage.setItem('pageDefaults', JSON.stringify(pageDefaults.value)); +export function setLocalPageDefaults(page: string, data: unknown) { + localStorage.setItem(page + 'Defaults', JSON.stringify(data)); } -export function getLocalPageDefaults(page: string): pageDefault | null { - const defaults = localStorage.getItem('pageDefaults'); +export function getLocalPageDefaults(page: string): unknown { + const defaults = localStorage.getItem(page + 'Defaults'); if (!defaults) return null; - pageDefaults.value = JSON.parse(defaults); - return pageDefaults.value.find((e) => e.page === page) || null; + return JSON.parse(defaults); } diff --git a/src/vueLib/models/pageDefaults.ts b/src/vueLib/models/pageDefaults.ts new file mode 100644 index 0000000..2f6086b --- /dev/null +++ b/src/vueLib/models/pageDefaults.ts @@ -0,0 +1,8 @@ +import type { Group } from './group'; + +export type PageDefault = { + groups?: Group[]; + selectedColumnFilter?: string; + selectedColumnOptions?: string[]; + weekdays?: number[]; +}; diff --git a/src/vueLib/tables/attendees/AttendeesTableDialog.vue b/src/vueLib/tables/attendees/AttendeesTableDialog.vue index fc729da..d65b42d 100644 --- a/src/vueLib/tables/attendees/AttendeesTableDialog.vue +++ b/src/vueLib/tables/attendees/AttendeesTableDialog.vue @@ -66,6 +66,7 @@ import { ref } from 'vue'; import { useAttendeesTable } from './AttendeesTable'; import { useMemberTable } from '../members/MembersTable'; import { getLocalPageDefaults } from 'src/localstorage/localStorage'; +import type { PageDefault } from 'src/vueLib/models/pagedefaults'; //use constants and function of imports const { attendees, updateAttendees } = useAttendeesTable(); @@ -95,8 +96,10 @@ const open = async (eventArray: number, event: Event) => { await updateMembers(event.attendees); // set custom filter - const defaults = getLocalPageDefaults('attendance'); - setNewFilter(defaults?.stringValue || '', ...(defaults?.filteredValues ?? [])); + const settings = getLocalPageDefaults('attendance') as PageDefault; + if (settings) { + setNewFilter(settings.selectedColumnFilter || '', ...(settings.selectedColumnOptions ?? [])); + } // set amount of missing attendace missingAttendanceAmount.value = filteredMembers.value.length; diff --git a/src/vueLib/tables/members/MembersTable.vue b/src/vueLib/tables/members/MembersTable.vue index 791e7fa..120e1c5 100644 --- a/src/vueLib/tables/members/MembersTable.vue +++ b/src/vueLib/tables/members/MembersTable.vue @@ -209,12 +209,13 @@ import AddToEvent from 'src/components/AddToEvent.vue'; import { databaseName } from 'src/vueLib/models/settings'; import { useUserStore } from 'src/vueLib/login/userStore'; import { i18n } from 'src/boot/lang'; -import { getLocalPageDefaults, setLocalPageDefaults } from 'src/localstorage/localStorage'; import type { Responsible } from 'src/vueLib/models/responsible'; import type { QTableColumn } from 'quasar'; import SearchableInput from '../components/SearchableInput.vue'; import FilterSelect from '../components/FilterSelect.vue'; import TopButtonGroup from '../components/TopButtonGroup.vue'; +import { getLocalPageDefaults, setLocalPageDefaults } from 'src/localstorage/localStorage'; +import type { PageDefault } from 'src/vueLib/models/pagedefaults'; const inProps = defineProps({ addAttendees: { type: Boolean }, @@ -285,9 +286,11 @@ onMounted(() => { loading.value = true; localCompareMembers.value = inProps.compareMembers; - const defaults = getLocalPageDefaults(page.value); - selectedColumnFilter.value = defaults?.stringValue || ''; - selectedColumnOptions.value = defaults?.filteredValues ?? []; + const settings = getLocalPageDefaults(page.value) as PageDefault; + if (settings) { + selectedColumnFilter.value = settings.selectedColumnFilter || ''; + selectedColumnOptions.value = settings.selectedColumnOptions || []; + } // set custom filter setNewFilter(selectedColumnFilter.value, ...selectedColumnOptions.value); @@ -369,7 +372,11 @@ function setColumnOptions(columnName: string) { async function filterMembers() { setNewFilter(selectedColumnFilter.value, ...(selectedColumnOptions.value || [])); - setLocalPageDefaults(page.value, selectedColumnFilter.value, selectedColumnOptions.value || []); + const settings = { + selectedColumnFilter: selectedColumnFilter.value, + selectedColumnOptions: selectedColumnOptions.value, + }; + setLocalPageDefaults(page.value, settings); await updateTable(); }