-
Notifications
You must be signed in to change notification settings - Fork 0
/
store.js
120 lines (102 loc) · 3.22 KB
/
store.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import { getStoreLayout } from "../layout"
import ajax from "../../plugins/AjaxService"
import { ref, validateAll, resetAll } from "@priolo/jon"
import i18n from "i18next";
import { DIALOG_TYPES } from "../layout/utils";
import { USER_ROLES } from "./utils";
import { getStoreRoute } from "../route";
/**
* MODEL
email: string //obbligatory
role: ROLE_TYPE
*/
const store = {
state: {
all: [],
dialogEditIsOpen: false,
select: null,
selectOrigin: null,
},
getters: {
getList: (state, _, store) => {
const { getSearchUrl, getSorted } = getStoreRoute()
let users = [...state.all]
let txt = getSearchUrl("search").trim().toLowerCase()
if (txt.length > 0) {
users = users.filter(user =>
user.username.toLowerCase().indexOf(txt) != -1
|| user.email.toLowerCase().indexOf(txt) != -1
)
}
users = getSorted({items: users})
return users
},
canSave: (state, _, store) => {
const { select: user, selectOrigin: original } = state
return user && !ref.isEqualDeep(user, original)
},
getById: (state, id, store) => {
return state.all.find( user => user.id == id )
}
},
actions: {
// get alla USER
fetchAll: async (state, _, store) => {
const data = await ajax.get(`users`);
store.setAll(data)
//store.setQueryUrl(document.location.search)
},
edit: async (state, user, store) => {
if (!user) user = {
username: "",
email: "",
role: USER_ROLES.CUSTOMER
}
store.setSelect(user)
resetAll()
store.setDialogEditIsOpen(true)
},
save: async (state, _, store) => {
const { dialogOpen } = getStoreLayout()
const { select: user } = state
if (!user) return false
// validation
const errs = validateAll()
if ( errs.length > 0 ) return false
if (!user.id) {
await ajax.post(`users`, user);
} else {
await ajax.put(`users/${user.id}`, user);
}
store.setDialogEditIsOpen(false)
store.setSelect(null)
dialogOpen({ type: DIALOG_TYPES.SUCCESS, text: i18n.t("dialog.feedback.create"), modal: false })
//window.history.back()
return true
},
destroy: async (state, user, store) => {
const { dialogOpen } = getStoreLayout()
if (!user) return
const res = await dialogOpen({
type: DIALOG_TYPES.WARNING,
title: i18n.t("dialog.feedback.delete.confirm.title"),
text: i18n.t("dialog.feedback.delete.confirm.text"),
labelOk: i18n.t("dialog.feedback.delete.confirm.yes"),
labelCancel: i18n.t("dialog.feedback.delete.confirm.no"),
})
if (!res) return
await ajax.delete(`users/${user.id}`);
dialogOpen({ type: DIALOG_TYPES.SUCCESS, text: i18n.t("dialog.feedback.delete.success"), modal: false })
store.fetchAll()
},
},
mutators: {
setAll: (state, all) => ({ all }),
setDialogEditIsOpen: (state, dialogEditIsOpen) => ({ dialogEditIsOpen }),
setSelect: (state, selectOrigin) => ({ selectOrigin, select: { ...selectOrigin } }),
setEmail: (state, email) => ({ select: { ...state.select, email } }),
setUsername: (state, username) => ({ select: { ...state.select, username } }),
setRole: (state, role) => ({ select: { ...state.select, role } }),
},
}
export default store