mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-27 19:51:09 -04:00
170 lines
4.8 KiB
JavaScript
170 lines
4.8 KiB
JavaScript
import axios from 'axios'
|
|
import { defineStore } from 'pinia'
|
|
import { useNotificationStore } from './notification'
|
|
import _ from 'lodash'
|
|
import { handleError } from '@/scripts/helpers/error-handling'
|
|
|
|
export const useRoleStore = (useWindow = false) => {
|
|
const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore
|
|
const { global } = window.i18n
|
|
|
|
return defineStoreFunc({
|
|
id: 'role',
|
|
state: () => ({
|
|
roles: [],
|
|
allAbilities: [],
|
|
selectedRoles: [],
|
|
currentRole: {
|
|
id: null,
|
|
name: '',
|
|
abilities: [],
|
|
},
|
|
}),
|
|
|
|
getters: {
|
|
isEdit: (state) => (state.currentRole.id ? true : false),
|
|
abilitiesList: (state) => {
|
|
let abilities = state.allAbilities.map((a) => ({
|
|
modelName: a.model
|
|
? a.model.substring(a.model.lastIndexOf('\\') + 1)
|
|
: 'Common',
|
|
disabled: false,
|
|
...a,
|
|
}))
|
|
return _.groupBy(abilities, 'modelName')
|
|
},
|
|
},
|
|
|
|
actions: {
|
|
fetchRoles(params) {
|
|
return new Promise((resolve, reject) => {
|
|
axios
|
|
.get(`/api/v1/roles`, { params })
|
|
.then((response) => {
|
|
this.roles = response.data.data
|
|
resolve(response)
|
|
})
|
|
.catch((err) => {
|
|
handleError(err)
|
|
reject(err)
|
|
})
|
|
})
|
|
},
|
|
|
|
fetchRole(id) {
|
|
return new Promise((resolve, reject) => {
|
|
axios
|
|
.get(`/api/v1/roles/${id}`)
|
|
.then((response) => {
|
|
this.currentRole.name = response.data.data.name
|
|
this.currentRole.id = response.data.data.id
|
|
|
|
response.data.data.abilities.forEach((_ra) => {
|
|
for (const property in this.abilitiesList) {
|
|
this.abilitiesList[property].forEach((_p) => {
|
|
if (_p.ability === _ra.name) {
|
|
this.currentRole.abilities.push(_p)
|
|
}
|
|
})
|
|
}
|
|
})
|
|
|
|
resolve(response)
|
|
})
|
|
.catch((err) => {
|
|
handleError(err)
|
|
reject(err)
|
|
})
|
|
})
|
|
},
|
|
|
|
addRole(data) {
|
|
const notificationStore = useNotificationStore()
|
|
return new Promise((resolve, reject) => {
|
|
axios
|
|
.post('/api/v1/roles', data)
|
|
.then((response) => {
|
|
this.roles.push(response.data.role)
|
|
notificationStore.showNotification({
|
|
type: 'success',
|
|
message: global.t('settings.roles.created_message'),
|
|
})
|
|
resolve(response)
|
|
})
|
|
.catch((err) => {
|
|
handleError(err)
|
|
reject(err)
|
|
})
|
|
})
|
|
},
|
|
|
|
updateRole(data) {
|
|
const notificationStore = useNotificationStore()
|
|
return new Promise((resolve, reject) => {
|
|
axios
|
|
.put(`/api/v1/roles/${data.id}`, data)
|
|
.then((response) => {
|
|
if (response.data) {
|
|
let pos = this.roles.findIndex(
|
|
(role) => role.id === response.data.data.id
|
|
)
|
|
this.roles[pos] = data.role
|
|
notificationStore.showNotification({
|
|
type: 'success',
|
|
message: global.t('settings.roles.updated_message'),
|
|
})
|
|
}
|
|
resolve(response)
|
|
})
|
|
.catch((err) => {
|
|
handleError(err)
|
|
reject(err)
|
|
})
|
|
})
|
|
},
|
|
|
|
fetchAbilities(params) {
|
|
return new Promise((resolve, reject) => {
|
|
if (this.allAbilities.length) {
|
|
resolve(this.allAbilities)
|
|
} else {
|
|
axios
|
|
.get(`/api/v1/abilities`, { params })
|
|
.then((response) => {
|
|
this.allAbilities = response.data.abilities
|
|
|
|
resolve(response)
|
|
})
|
|
.catch((err) => {
|
|
handleError(err)
|
|
reject(err)
|
|
})
|
|
}
|
|
})
|
|
},
|
|
|
|
deleteRole(id) {
|
|
const notificationStore = useNotificationStore()
|
|
return new Promise((resolve, reject) => {
|
|
axios
|
|
.delete(`/api/v1/roles/${id}`)
|
|
.then((response) => {
|
|
let index = this.roles.findIndex((role) => role.id === id)
|
|
this.roles.splice(index, 1)
|
|
|
|
notificationStore.showNotification({
|
|
type: 'success',
|
|
message: global.t('settings.roles.deleted_message'),
|
|
})
|
|
resolve(response)
|
|
})
|
|
.catch((err) => {
|
|
handleError(err)
|
|
reject(err)
|
|
})
|
|
})
|
|
},
|
|
},
|
|
})()
|
|
}
|