adminforth 1.1.62 → 1.1.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3 -0
- package/dist/plugins/AccessControl/index.js +66 -0
- package/dist/plugins/AccessControl/types.js +1 -0
- package/dist/spa/index.html +2 -2
- package/dist/spa/package-lock.json +4 -17
- package/dist/spa/package.json +1 -2
- package/dist/spa/public/favicon.ico +0 -0
- package/dist/spa/spa/public/favicon.ico +0 -0
- package/dist/spa/src/App.vue +45 -125
- package/dist/spa/src/assets/logo.svg +1 -19
- package/dist/spa/src/components/AcceptModal.vue +9 -2
- package/dist/spa/src/components/BreadcrumbsWithButtons.vue +1 -1
- package/dist/spa/src/components/CustomDatePicker.vue +3 -16
- package/dist/spa/src/components/CustomDateRangePicker.vue +2 -11
- package/dist/spa/src/components/Dropdown.vue +1 -6
- package/dist/spa/src/components/Filters.vue +19 -40
- package/dist/spa/src/components/ResourceForm.vue +24 -26
- package/dist/spa/src/components/ValueRenderer.vue +8 -14
- package/dist/spa/src/main.ts +1 -1
- package/dist/spa/src/router/index.ts +20 -30
- package/dist/spa/src/stores/core.ts +31 -48
- package/dist/spa/src/stores/modal.ts +3 -13
- package/dist/spa/src/utils.ts +7 -62
- package/dist/spa/src/views/CreateView.vue +15 -67
- package/dist/spa/src/views/EditView.vue +11 -45
- package/dist/spa/src/views/ListView.vue +366 -82
- package/dist/spa/src/views/LoginView.vue +4 -16
- package/dist/spa/src/views/ShowView.vue +21 -105
- package/dist/spa/tailwind.config.js +1 -1
- package/dist/spa/vite.config.ts +0 -6
- package/dist/types.js +30 -0
- package/index.ts +3 -0
- package/package.json +1 -1
- package/dist/spa/src/components/ResourceListTable.vue +0 -419
- package/dist/spa/src/components/Toast.vue +0 -66
- package/dist/spa/src/composables/useFrontendApi.ts +0 -26
- package/dist/spa/src/composables/useStores.ts +0 -113
- package/dist/spa/src/spa_types/core.ts +0 -51
- package/dist/spa/src/stores/filters.ts +0 -22
- package/dist/spa/src/stores/toast.ts +0 -15
- package/dist/spa/src/stores/user.ts +0 -54
- /package/dist/spa/{public/assets → spa/public}/favicon.png +0 -0
|
@@ -1,38 +1,21 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="relative">
|
|
3
|
-
<component
|
|
4
|
-
v-for="c in coreStore?.resourceOptions?.pageInjections?.show?.beforeBreadcrumbs || []"
|
|
5
|
-
:is="getCustomComponent(c)"
|
|
6
|
-
:meta="c.meta"
|
|
7
|
-
:record="coreStore.record"
|
|
8
|
-
:resource="coreStore.resource"
|
|
9
|
-
:adminUser="coreStore.adminUser"
|
|
10
|
-
/>
|
|
11
3
|
<BreadcrumbsWithButtons>
|
|
12
|
-
<RouterLink
|
|
13
|
-
class="flex items-center py-1 px-3 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded
|
|
4
|
+
<RouterLink :to="{ name: 'resource-edit', params: { resourceId: $route.params.resourceId, primaryKey: $route.params.primaryKey } }"
|
|
5
|
+
class="flex items-center py-1 px-3 me-2 mb-2 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded border border-gray-300 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700"
|
|
14
6
|
>
|
|
15
7
|
<IconPenSolid class="w-4 h-4" />
|
|
16
8
|
Edit
|
|
17
9
|
</RouterLink>
|
|
18
10
|
|
|
19
|
-
<button
|
|
20
|
-
class="flex items-center py-1 px-3 text-sm font-medium
|
|
11
|
+
<button @click="deleteRecord"
|
|
12
|
+
class="flex items-center py-1 px-3 mb-2 text-sm font-medium text-red-600 focus:outline-none bg-white rounded border border-gray-300 hover:bg-gray-100 hover:text-red-700 focus:z-10 focus:ring-4 focus:ring-gray-100 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-red-500 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700"
|
|
21
13
|
>
|
|
22
14
|
<IconTrashBinSolid class="w-4 h-4" />
|
|
23
15
|
Delete
|
|
24
16
|
</button>
|
|
25
17
|
</BreadcrumbsWithButtons>
|
|
26
18
|
|
|
27
|
-
<component
|
|
28
|
-
v-for="c in coreStore?.resourceOptions?.pageInjections?.show?.afterBreadcrumbs || []"
|
|
29
|
-
:is="getCustomComponent(c)"
|
|
30
|
-
:meta="c.meta"
|
|
31
|
-
:record="coreStore.record"
|
|
32
|
-
:resource="coreStore.resource"
|
|
33
|
-
:adminUser="coreStore.adminUser"
|
|
34
|
-
/>
|
|
35
|
-
|
|
36
19
|
<div v-if="loading" role="status" class="max-w-sm animate-pulse">
|
|
37
20
|
<div class="h-2.5 bg-gray-200 rounded-full dark:bg-gray-700 w-48 mb-4"></div>
|
|
38
21
|
<div class="h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[360px] mb-2.5"></div>
|
|
@@ -46,7 +29,7 @@
|
|
|
46
29
|
v-else
|
|
47
30
|
class="relative overflow-x-auto shadow-resourse-form-shadow "
|
|
48
31
|
>
|
|
49
|
-
<table class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400
|
|
32
|
+
<table class="w-full text-sm text-left rtl:text-right text-gray-500 dark:text-gray-400">
|
|
50
33
|
<thead class="text-xs text-gray-700 uppercase bg-form-view-heading dark:bg-gray-700 dark:text-gray-400">
|
|
51
34
|
<tr>
|
|
52
35
|
<th scope="col" class="px-6 py-3">
|
|
@@ -58,49 +41,23 @@
|
|
|
58
41
|
</tr>
|
|
59
42
|
</thead>
|
|
60
43
|
<tbody>
|
|
61
|
-
<tr v-for="column in coreStore.
|
|
44
|
+
<tr v-for="column in coreStore.resourceColumns?.filter(c => c.showIn.includes('show'))" :key="column.name"
|
|
62
45
|
class="bg-form-view-bg odd:dark:bg-gray-900 even:dark:bg-gray-800 border-b dark:border-gray-700"
|
|
63
46
|
>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
:is="getCustomComponent(column.components.showRow)"
|
|
67
|
-
:meta="column.components.showRow.meta"
|
|
68
|
-
:column="column"
|
|
69
|
-
:resource="coreStore.resource"
|
|
70
|
-
:record="coreStore.record"
|
|
71
|
-
/>
|
|
72
|
-
<template v-else>
|
|
73
|
-
<td class="px-6 py-4 whitespace-nowrap "> <!--align-top-->
|
|
74
|
-
{{ column.label }}
|
|
47
|
+
<td class="px-6 py-4 whitespace-nowrap">
|
|
48
|
+
{{ column.label }}
|
|
75
49
|
</td>
|
|
76
50
|
<td class="px-6 py-4 whitespace-nowrap whitespace-pre-wrap">
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
:column="column"
|
|
83
|
-
:record="coreStore.record"
|
|
84
|
-
/>
|
|
85
|
-
<ValueRenderer v-else
|
|
86
|
-
:column="column"
|
|
87
|
-
:record="coreStore.record"
|
|
88
|
-
/>
|
|
51
|
+
<component
|
|
52
|
+
:is="showComponentsPerColumn[column.name] || ValueRenderer"
|
|
53
|
+
:column="column"
|
|
54
|
+
:row="coreStore.record"
|
|
55
|
+
/>
|
|
89
56
|
</td>
|
|
90
|
-
</template>
|
|
91
57
|
</tr>
|
|
58
|
+
|
|
92
59
|
</tbody>
|
|
93
60
|
</table>
|
|
94
|
-
|
|
95
|
-
<component
|
|
96
|
-
v-for="c in coreStore?.resourceOptions?.pageInjections?.show?.bottom || []"
|
|
97
|
-
:is="getCustomComponent(c)"
|
|
98
|
-
:meta="c.meta"
|
|
99
|
-
:column="column"
|
|
100
|
-
:record="coreStore.record"
|
|
101
|
-
:resource="coreStore.resource"
|
|
102
|
-
:adminUser="coreStore.adminUser"
|
|
103
|
-
/>
|
|
104
61
|
</div>
|
|
105
62
|
|
|
106
63
|
|
|
@@ -111,78 +68,37 @@
|
|
|
111
68
|
<script setup>
|
|
112
69
|
|
|
113
70
|
import BreadcrumbsWithButtons from '@/components/BreadcrumbsWithButtons.vue';
|
|
114
|
-
|
|
115
71
|
import ValueRenderer from '@/components/ValueRenderer.vue';
|
|
116
72
|
import { useCoreStore } from '@/stores/core';
|
|
117
|
-
import {
|
|
118
|
-
import { getCustomComponent, checkAcessByAllowedActions } from '@/utils';
|
|
73
|
+
import { getCustomComponent } from '@/utils';
|
|
119
74
|
import { IconPenSolid, IconTrashBinSolid } from '@iconify-prerendered/vue-flowbite';
|
|
120
75
|
import { onMounted, ref } from 'vue';
|
|
121
|
-
import { useRoute
|
|
122
|
-
import {callAdminForthApi} from '@/utils';
|
|
123
|
-
import {showSuccesTost} from '@/composables/useFrontendApi';
|
|
76
|
+
import { useRoute } from 'vue-router';
|
|
124
77
|
|
|
125
78
|
|
|
126
79
|
const item = ref(null);
|
|
127
80
|
const route = useRoute();
|
|
128
|
-
const router = useRouter();
|
|
129
81
|
const loading = ref(false);
|
|
130
82
|
let showComponentsPerColumn = {};
|
|
131
83
|
|
|
132
|
-
console.log(route.params,'showWiev');
|
|
133
|
-
|
|
134
|
-
|
|
135
84
|
const coreStore = useCoreStore();
|
|
136
|
-
const modalStore = useModalStore();
|
|
137
85
|
|
|
138
86
|
onMounted(async () => {
|
|
139
87
|
loading.value = true;
|
|
140
|
-
await coreStore.
|
|
88
|
+
await coreStore.fetchColumns({
|
|
141
89
|
resourceId: route.params.resourceId
|
|
142
90
|
});
|
|
143
91
|
await coreStore.fetchRecord({
|
|
144
92
|
resourceId: route.params.resourceId,
|
|
145
93
|
primaryKey: route.params.primaryKey,
|
|
146
94
|
});
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
if (column.components?.show) {
|
|
151
|
-
acc[column.name] = getCustomComponent(column.components.show);
|
|
95
|
+
showComponentsPerColumn = coreStore.resourceColumns.reduce((acc, column) => {
|
|
96
|
+
if (column.component?.show) {
|
|
97
|
+
acc[column.name] = getCustomComponent(column.component.show);
|
|
152
98
|
}
|
|
153
99
|
return acc;
|
|
154
|
-
|
|
100
|
+
}, {});
|
|
155
101
|
loading.value = false;
|
|
156
102
|
});
|
|
157
103
|
|
|
158
|
-
async function deleteRecord(row) {
|
|
159
|
-
const data = await window.adminforth.confirm({
|
|
160
|
-
message: 'Are you sure you want to delete this item?',
|
|
161
|
-
yes: 'Delete',
|
|
162
|
-
no: 'Cancel',
|
|
163
|
-
});
|
|
164
|
-
if (data) {
|
|
165
|
-
try {
|
|
166
|
-
const res = await callAdminForthApi({
|
|
167
|
-
path: '/delete_record',
|
|
168
|
-
method: 'POST',
|
|
169
|
-
body: {
|
|
170
|
-
resourceId: route.params.resourceId,
|
|
171
|
-
primaryKey: route.params.primaryKey,
|
|
172
|
-
}});
|
|
173
|
-
if (!res.error){
|
|
174
|
-
router.push({ name: 'resource-list', params: { resourceId: route.params.resourceId } });
|
|
175
|
-
showSuccesTost('Record deleted successfully')
|
|
176
|
-
} else {
|
|
177
|
-
console.error(res.error)
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
} catch (e) {
|
|
181
|
-
console.error(e);
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
|
|
188
104
|
</script>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @type {import('tailwindcss').Config} */
|
|
2
2
|
export default {
|
|
3
|
-
content: ["./src/**/*.{vue, js
|
|
3
|
+
content: ["./src/**/*.{vue, js}","./src/*.{vue, js}", "./index.html", "./node_modules/flowbite/**/*.js"],
|
|
4
4
|
theme: {
|
|
5
5
|
extend: {
|
|
6
6
|
/* IMPORTANT:ADMINFORTH TAILWIND STYLES */
|
package/dist/spa/vite.config.ts
CHANGED
package/dist/types.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// typical types which AdminForth supports
|
|
2
|
+
//
|
|
3
|
+
export const AdminForthTypes = {
|
|
4
|
+
STRING: 'string',
|
|
5
|
+
INTEGER: 'integer',
|
|
6
|
+
FLOAT: 'float',
|
|
7
|
+
DECIMAL: 'decimal',
|
|
8
|
+
BOOLEAN: 'boolean',
|
|
9
|
+
DATE: 'date',
|
|
10
|
+
DATETIME: 'datetime',
|
|
11
|
+
TIME: 'time',
|
|
12
|
+
TEXT: 'text',
|
|
13
|
+
JSON: 'json',
|
|
14
|
+
};
|
|
15
|
+
export const AdminForthFilterOperators = {
|
|
16
|
+
EQ: 'eq',
|
|
17
|
+
NE: 'ne',
|
|
18
|
+
GT: 'gt',
|
|
19
|
+
LT: 'lt',
|
|
20
|
+
GTE: 'gte',
|
|
21
|
+
LTE: 'lte',
|
|
22
|
+
LIKE: 'like',
|
|
23
|
+
ILIKE: 'ilike',
|
|
24
|
+
IN: 'in',
|
|
25
|
+
NIN: 'nin',
|
|
26
|
+
};
|
|
27
|
+
export const AdminForthSortDirections = {
|
|
28
|
+
ASC: 'asc',
|
|
29
|
+
DESC: 'desc',
|
|
30
|
+
};
|
package/index.ts
CHANGED
|
@@ -725,8 +725,10 @@ class AdminForth implements AdminForthClass {
|
|
|
725
725
|
let userFullName = ''
|
|
726
726
|
if (adminUser.isRoot) {
|
|
727
727
|
username = this.config.rootUser.username;
|
|
728
|
+
console.log(username, 'this is the root')
|
|
728
729
|
} else {
|
|
729
730
|
const dbUser = adminUser.dbUser;
|
|
731
|
+
console.log(dbUser,'this is the db user',adminUser,'this is the admin user')
|
|
730
732
|
username = dbUser[this.config.auth.usernameField];
|
|
731
733
|
userFullName =dbUser[this.config.auth.userFullNameField];
|
|
732
734
|
}
|
|
@@ -766,6 +768,7 @@ class AdminForth implements AdminForthClass {
|
|
|
766
768
|
}
|
|
767
769
|
newMenu.push(newMenuItem)
|
|
768
770
|
}
|
|
771
|
+
console.log(userData,'this is the user data')
|
|
769
772
|
|
|
770
773
|
return {
|
|
771
774
|
user: userData,
|