Files
radicall/resources/js/Admin/store/Role.js
T

165 lines
5.0 KiB
JavaScript

import { defineStore } from 'pinia'
import axios from "axios";
import { Inertia } from '@inertiajs/inertia'
export const useRoleStore = defineStore('roleStore', {
state: () => ({
createForm: {
datetime: '',
name : '',
label : '',
selectedPermissionIds : {},
},
loaderCreateForm: false,
is_edit_form: false,
errorsCreateForm: [],
is_edit_id: null,
columns: [
{
key: 'id',
title: 'شناسه',
style: '!font-bold !text-sm',
width: 60,
},
{
key: 'name',
title: 'نام مقام',
},
{
key: 'label',
title: 'نام فارسی',
},
{
key: 'created_at',
title: 'تاریخ ایجاد مقام',
hasSort: true,
width: 200,
},
{
key: 'actions',
title: 'عملیات',
hasSort: false,
slot: true,
width: 120
},
],
endpoints: {
index: '/admin/roles',
create: '/admin/roles/create',
store: '/admin/roles',
edit: (id) => `/admin/roles/${id}/edit`,
update: (id) => `/admin/roles/${id}`,
delete: (id) => `/admin/roles/${id}`,
bulkDelete: '/admin/roles-bulk-delete',
export: '/admin/roles-export-data'
}
}),
getters: {
buttonLabel: (state) => {
return state.is_edit_id ? 'ویرایش مقام' : 'ثبت و ایجاد مقام جدید';
},
pageTitle: (state) => {
return state.is_edit_id ? 'ویرایش مقام' : 'افزودن مقام جدید';
},
indexPageTitle: (state) => {
return 'نمایش همه مقام ها';
}
},
actions: {
update_and_store() {
const url = this.is_edit_id ?
this.endpoints.update(this.is_edit_id) :
this.endpoints.store;
const method = this.is_edit_id ? 'patch' : 'post';
this.loaderCreateForm = true;
axios({
method: method,
url: url,
data: this.createForm
}).then(res => {
this.errorsCreateForm = []
this.loaderCreateForm = false;
if (this.is_edit_id) {
Inertia.get(this.endpoints.edit(this.is_edit_id));
} else {
this.resetCreateForm();
Inertia.get(this.endpoints.create);
}
}).catch(error => {
this.loaderCreateForm = false;
this.errorsCreateForm = error.response.data?.errors ?? [];
});
},
resetCreateForm() {
this.createForm = {
datetime: '',
name : '',
label : '',
selectedPermissionIds : {},
}
this.is_edit_id = null;
this.errorsCreateForm = [];
},
setEditData(data) {
this.is_edit_id = data.id;
Object.keys(this.createForm).forEach(field => {
if (field === 'image' && data.profile_url) {
this.createForm[field] = { url: data.profile_url };
} else if (field === 'datetime' && data.created_at) {
this.createForm[field] = data.created_at;
} else {
this.createForm[field] = data[field] || '';
}
});
},
deleteRecord(id) {
return new Promise((resolve, reject) => {
axios.delete(this.endpoints.delete(id))
.then(response => {
Inertia.get(this.endpoints.index);
resolve(response);
})
.catch(error => {
reject(error);
});
});
},
bulkDelete(ids) {
return new Promise((resolve, reject) => {
axios.post(this.endpoints.bulkDelete, { ids })
.then(response => {
Inertia.get(this.endpoints.index);
resolve(response);
})
.catch(error => {
reject(error);
});
});
},
exportData(filters = {}) {
const query = new URLSearchParams(filters).toString();
window.open(`${this.endpoints.export}?${query}`, '_blank');
},
search(params) {
return Inertia.get(this.endpoints.index, params, {
preserveState: false
});
},
navigateToPage(page) {
return Inertia.get(this.endpoints.index, { page }, { preserveState: true });
}
}
})