generalized settings store
This commit is contained in:
83
src/stores/settings.ts
Normal file
83
src/stores/settings.ts
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
import { defineStore } from "pinia";
|
||||||
|
import type { StateTree } from 'pinia'
|
||||||
|
import { useEmployees } from "./employees";
|
||||||
|
import { useUser } from "./user";
|
||||||
|
import axios from '@/axios'
|
||||||
|
import _clone from "lodash/clone";
|
||||||
|
import _difference from "lodash/difference";
|
||||||
|
import _pull from "lodash/pull";
|
||||||
|
import _has from 'lodash/has'
|
||||||
|
import _toPairs from 'lodash/toPairs'
|
||||||
|
import _kebabCase from 'lodash/kebabCase'
|
||||||
|
import _camelCase from 'lodash/camelCase'
|
||||||
|
import { useNotifications } from "./notifications";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export const useSettings = defineStore({
|
||||||
|
|
||||||
|
id: "settings",
|
||||||
|
|
||||||
|
state: (): {
|
||||||
|
[index: string]: {
|
||||||
|
[index: string]: any
|
||||||
|
}
|
||||||
|
} => {
|
||||||
|
return {
|
||||||
|
settings: {
|
||||||
|
employeesIndexColumnsSelected: Array<string>(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
actions: {
|
||||||
|
async fetchFromApi(key: string = '') {
|
||||||
|
const user = useUser()
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = await axios.get<{key: string, value: string}[]>('settings/'+key,{
|
||||||
|
headers: user.header
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log(result)
|
||||||
|
|
||||||
|
result.data.forEach((element) => {
|
||||||
|
this.settings[_camelCase(element.key)] = JSON.parse(element.value)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
catch(error){
|
||||||
|
useNotifications().add('danger', String(error),-1)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Persist columnsSelected to API
|
||||||
|
*/
|
||||||
|
async persist(key: string = '') {
|
||||||
|
const user = useUser()
|
||||||
|
|
||||||
|
let settings: Array<{
|
||||||
|
key: string,
|
||||||
|
value: string | undefined
|
||||||
|
}> = []
|
||||||
|
|
||||||
|
if(key && _has(this.settings, key)) {
|
||||||
|
settings = [{key, value: this.settings[key]}]
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for(const [key, value] of Object.entries(this.settings)){
|
||||||
|
settings.push({key: _kebabCase(key), value: JSON.stringify(value)})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(settings)
|
||||||
|
const result = await axios.post('settings',
|
||||||
|
{
|
||||||
|
settings
|
||||||
|
},
|
||||||
|
{
|
||||||
|
headers: user.header
|
||||||
|
})
|
||||||
|
console.log(result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user