mirror of
https://github.com/sysadminsmedia/homebox.git
synced 2025-12-24 06:28:34 +01:00
* feat: implement example of data table * feat: load item data into table * chore: begin switching dialogs * feat: implement old dialog for controlling headers and page size * feat: get table into relatively usable state * feat: enhance dropdown actions for multi-selection and CSV download * feat: enhance table cell and dropdown button styles for better usability * feat: json download for table * feat: add expanded row component for item details in data table * chore: add translation support * feat: restore table on home page * fix: oops need ids * feat: move card view to use tanstack to allow for pagination * feat: switch the items search to use ItemViewSelectable * fix: update pagination handling and improve button click logic * feat: improve selectable table * feat: add indeterminate to checkbox * feat: overhaul maintenance dialog to use new system and add maintenance options to table * feat: add label ids and location id to item patch api * feat: change location and labels in table view * feat: add quick actions preference and enable toggle in table settings * fix: lint * fix: remove sized 1 pages * fix: attempt to fix type error * fix: various issues * fix: remove * fix: refactor item fetching logic to use useAsyncData for improved reactivity and improve use confirm * fix: sort backend issues * fix: enhance CSV export functionality by escaping fields to prevent formula injection * fix: put aria sort on th not button * chore: update api types
70 lines
1.9 KiB
TypeScript
70 lines
1.9 KiB
TypeScript
import type { Ref } from "vue";
|
|
import type { ItemSummary } from "~/lib/api/types/data-contracts";
|
|
import type { DaisyTheme } from "~~/lib/data/themes";
|
|
|
|
export type ViewType = "table" | "card";
|
|
|
|
export type DuplicateSettings = {
|
|
copyMaintenance: boolean;
|
|
copyAttachments: boolean;
|
|
copyCustomFields: boolean;
|
|
copyPrefixOverride: string | null;
|
|
};
|
|
|
|
export type LocationViewPreferences = {
|
|
showDetails: boolean;
|
|
showEmpty: boolean;
|
|
editorAdvancedView: boolean;
|
|
itemDisplayView: ViewType;
|
|
theme: DaisyTheme;
|
|
itemsPerTablePage: number;
|
|
tableHeaders?: {
|
|
value: keyof ItemSummary;
|
|
enabled: boolean;
|
|
}[];
|
|
displayLegacyHeader: boolean;
|
|
language?: string;
|
|
overrideFormatLocale?: string;
|
|
duplicateSettings: DuplicateSettings;
|
|
shownMultiTabWarning: boolean;
|
|
quickActions: {
|
|
enabled: boolean;
|
|
};
|
|
};
|
|
|
|
/**
|
|
* useViewPreferences loads the view preferences from local storage and hydrates
|
|
* them. These are reactive and will update the local storage when changed.
|
|
*/
|
|
export function useViewPreferences(): Ref<LocationViewPreferences> {
|
|
const results = useLocalStorage(
|
|
"homebox/preferences/location",
|
|
{
|
|
showDetails: true,
|
|
showEmpty: true,
|
|
editorAdvancedView: false,
|
|
itemDisplayView: "card",
|
|
theme: "homebox",
|
|
itemsPerTablePage: 10,
|
|
displayLegacyHeader: false,
|
|
language: null,
|
|
overrideFormatLocale: null,
|
|
duplicateSettings: {
|
|
copyMaintenance: false,
|
|
copyAttachments: true,
|
|
copyCustomFields: true,
|
|
copyPrefixOverride: null,
|
|
},
|
|
shownMultiTabWarning: false,
|
|
quickActions: {
|
|
enabled: true,
|
|
},
|
|
},
|
|
{ mergeDefaults: true }
|
|
);
|
|
|
|
// casting is required because the type returned is removable, however since we
|
|
// use `mergeDefaults` the result _should_ always be present.
|
|
return results as unknown as Ref<LocationViewPreferences>;
|
|
}
|