homebox/frontend/stores/locations.ts
Hayden b77c9be36f
chore: bump deps (#810)
* bump prettier/eslint-plugin

* bump nuxt pwa

* use typed imports

* set vue version to fix layout errors

* disable import
2024-03-01 09:08:14 -09:00

74 lines
2.1 KiB
TypeScript

import { defineStore } from "pinia";
import type { LocationsApi } from "~~/lib/api/classes/locations";
import type { LocationOutCount, TreeItem } from "~~/lib/api/types/data-contracts";
export const useLocationStore = defineStore("locations", {
state: () => ({
parents: null as LocationOutCount[] | null,
Locations: null as LocationOutCount[] | null,
client: useUserApi(),
tree: null as TreeItem[] | null,
}),
getters: {
/**
* locations represents the locations that are currently in the store. The store is
* synched with the server by intercepting the API calls and updating on the
* response
*/
parentLocations(state): LocationOutCount[] {
if (state.parents === null) {
this.client.locations.getAll({ filterChildren: true }).then(result => {
if (result.error) {
console.error(result.error);
return;
}
this.parents = result.data;
});
}
return state.parents ?? [];
},
allLocations(state): LocationOutCount[] {
if (state.Locations === null) {
this.client.locations.getAll({ filterChildren: false }).then(result => {
if (result.error) {
console.error(result.error);
return;
}
this.Locations = result.data;
});
}
return state.Locations ?? [];
},
},
actions: {
async refreshParents(): ReturnType<LocationsApi["getAll"]> {
const result = await this.client.locations.getAll({ filterChildren: true });
if (result.error) {
return result;
}
this.parents = result.data;
return result;
},
async refreshChildren(): ReturnType<LocationsApi["getAll"]> {
const result = await this.client.locations.getAll({ filterChildren: false });
if (result.error) {
return result;
}
this.Locations = result.data;
return result;
},
async refreshTree(): ReturnType<LocationsApi["getTree"]> {
const result = await this.client.locations.getTree();
if (result.error) {
return result;
}
this.tree = result.data;
return result;
},
},
});