adminforth 1.0.76 → 1.0.78
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 +4 -4
- package/dist/modules/codeInjector.js +3 -0
- package/dist/spa/spa/src/components/ValueRenderer.vue +9 -3
- package/dist/spa/spa/src/router/index.ts +4 -4
- package/dist/spa/spa/src/spa_types/core.ts +51 -0
- package/dist/spa/spa/src/stores/core.ts +1 -2
- package/dist/spa/spa/src/utils.ts +16 -9
- package/documentation/docusaurus.config.ts +1 -1
- package/documentation/static/img/favicon.png +0 -0
- package/documentation/static/img/logo.svg +19 -1
- package/index.ts +5 -5
- package/modules/codeInjector.ts +3 -1
- package/package.json +1 -1
- package/spa/src/components/ValueRenderer.vue +9 -3
- package/spa/src/router/index.ts +4 -4
- package/spa/src/spa_types/core.ts +51 -0
- package/spa/src/stores/core.ts +1 -2
- package/spa/src/utils.ts +16 -9
- package/types/AdminForthConfig.ts +3 -4
- package/documentation/static/img/docusaurus.png +0 -0
- package/documentation/static/img/favicon.ico +0 -0
package/dist/index.js
CHANGED
|
@@ -73,6 +73,9 @@ class AdminForth {
|
|
|
73
73
|
}
|
|
74
74
|
console.log('\n ⚠️⚠️⚠️ [INSECURE ALERT] config.rootUser is set, please create a new user and remove config.rootUser from config before going to production\n');
|
|
75
75
|
}
|
|
76
|
+
if (!this.config.customization.customComponentsDir) {
|
|
77
|
+
this.config.customization.customComponentsDir = './custom';
|
|
78
|
+
}
|
|
76
79
|
if (this.config.auth) {
|
|
77
80
|
if (!this.config.auth.resourceId) {
|
|
78
81
|
throw new Error('No config.auth.resourceId defined');
|
|
@@ -94,9 +97,6 @@ class AdminForth {
|
|
|
94
97
|
if (!this.config.customization) {
|
|
95
98
|
this.config.customization = {};
|
|
96
99
|
}
|
|
97
|
-
if (!this.config.customization.customComponentsDir) {
|
|
98
|
-
this.config.customization.customComponentsDir = './custom';
|
|
99
|
-
}
|
|
100
100
|
if (!this.config.baseUrl) {
|
|
101
101
|
this.config.baseUrl = '';
|
|
102
102
|
}
|
|
@@ -484,7 +484,7 @@ class AdminForth {
|
|
|
484
484
|
auth: this.config.auth,
|
|
485
485
|
usernameField: this.config.auth.usernameField,
|
|
486
486
|
title: (_h = this.config.customization) === null || _h === void 0 ? void 0 : _h.title,
|
|
487
|
-
|
|
487
|
+
emptyFieldPlaceholder: (_j = this.config.customization) === null || _j === void 0 ? void 0 : _j.emptyFieldPlaceholder,
|
|
488
488
|
},
|
|
489
489
|
adminUser,
|
|
490
490
|
version: ADMINFORTH_VERSION,
|
|
@@ -394,6 +394,9 @@ class CodeInjector {
|
|
|
394
394
|
watchCustomComponentsForCopy(_a) {
|
|
395
395
|
return __awaiter(this, arguments, void 0, function* ({ verbose }) {
|
|
396
396
|
const customComponentsDir = this.adminforth.config.customization.customComponentsDir;
|
|
397
|
+
if (!customComponentsDir) {
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
397
400
|
// check if folder exists
|
|
398
401
|
try {
|
|
399
402
|
yield fs.promises.access(customComponentsDir, fs.constants.F_OK);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
|
+
|
|
3
4
|
<span v-if="column.foreignResource">
|
|
4
5
|
<RouterLink v-if="row[column.name]" class="font-medium text-blue-600 dark:text-blue-500 hover:brightness-110"
|
|
5
6
|
:to="{ name: 'resource-show', params: { resourceId: column.foreignResource.resourceId, primaryKey: row[column.name].pk } }">
|
|
@@ -15,14 +16,14 @@
|
|
|
15
16
|
<span v-else class="bg-red-100 text-red-800 text-xs font-medium me-2 px-2.5 py-0.5 rounded dark:bg-gray-700 dark:text-red-400 border border-red-400">No</span>
|
|
16
17
|
</span>
|
|
17
18
|
<span v-else-if="column.enum">
|
|
18
|
-
{{ column.enum.find(e => e.value === row[column.name])?.label }}
|
|
19
|
+
{{ checkEmptyValues(column.enum.find(e => e.value === row[column.name])?.label,route.meta.type) }}
|
|
19
20
|
</span>
|
|
20
21
|
<span v-else-if="column.type === 'datetime'">
|
|
21
|
-
{{ formatDate(row[column.name]) }}
|
|
22
|
+
{{ checkEmptyValues(formatDate(row[column.name]),route.meta.type) }}
|
|
22
23
|
|
|
23
24
|
</span>
|
|
24
25
|
<span v-else>
|
|
25
|
-
{{ row[column.name] }}
|
|
26
|
+
{{ checkEmptyValues(row[column.name],route.meta.type) }}
|
|
26
27
|
</span>
|
|
27
28
|
</div>
|
|
28
29
|
</template>
|
|
@@ -33,10 +34,15 @@
|
|
|
33
34
|
import dayjs from 'dayjs';
|
|
34
35
|
import utc from 'dayjs/plugin/utc';
|
|
35
36
|
import timezone from 'dayjs/plugin/timezone';
|
|
37
|
+
import {checkEmptyValues} from '@/utils';
|
|
38
|
+
import { useRoute, useRouter } from 'vue-router';
|
|
39
|
+
|
|
36
40
|
|
|
37
41
|
import { useCoreStore } from '@/stores/core';
|
|
38
42
|
|
|
39
43
|
const coreStore = useCoreStore();
|
|
44
|
+
const route = useRoute();
|
|
45
|
+
|
|
40
46
|
|
|
41
47
|
dayjs.extend(utc);
|
|
42
48
|
dayjs.extend(timezone);
|
|
@@ -20,26 +20,26 @@ const router = createRouter({
|
|
|
20
20
|
path: '',
|
|
21
21
|
component: () => import('@/views/ListView.vue'),
|
|
22
22
|
name: 'resource-list',
|
|
23
|
-
meta: { title: 'list' }
|
|
23
|
+
meta: { title: 'list',type: 'list' }
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
26
|
path: 'show/:primaryKey',
|
|
27
27
|
component: () => import('@/views/ShowView.vue'),
|
|
28
28
|
name: 'resource-show',
|
|
29
|
-
meta: { title: 'show' }
|
|
29
|
+
meta: { title: 'show', type: 'show'}
|
|
30
30
|
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
path: 'edit/:primaryKey',
|
|
34
34
|
component: () => import('@/views/EditView.vue'),
|
|
35
35
|
name: 'resource-edit',
|
|
36
|
-
meta: { title: 'edit' }
|
|
36
|
+
meta: { title: 'edit', type: 'edit'}
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
path: 'create',
|
|
40
40
|
component: () => import('@/views/CreateView.vue'),
|
|
41
41
|
name: 'resource-create',
|
|
42
|
-
meta: { title: 'create' }
|
|
42
|
+
meta: { title: 'create', type: 'create'}
|
|
43
43
|
|
|
44
44
|
},
|
|
45
45
|
]
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { AdminForthResource, AdminForthResourceColumn } from '../types/AdminForthConfig';
|
|
2
|
+
|
|
3
|
+
export type resourceById = {
|
|
4
|
+
[key: string]: AdminForthResource;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export type Menu = {
|
|
8
|
+
label: string,
|
|
9
|
+
icon: string,
|
|
10
|
+
resourceId: string,
|
|
11
|
+
children?: Array<Menu>,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type Record = {
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type ResourceColumns = {
|
|
19
|
+
[key: string]: Array<AdminForthResourceColumn>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type CoreConfig = {
|
|
23
|
+
brandName: string,
|
|
24
|
+
brandLogo: string,
|
|
25
|
+
title: string,
|
|
26
|
+
datesFormat: string,
|
|
27
|
+
usernameField: string,
|
|
28
|
+
usernameFieldName?: string,
|
|
29
|
+
deleteConfirmation?: boolean,
|
|
30
|
+
auth?: {
|
|
31
|
+
resourceId: string,
|
|
32
|
+
usernameField: string,
|
|
33
|
+
passwordHashField: string,
|
|
34
|
+
loginBackgroundImage: string,
|
|
35
|
+
userFullnameField: string,
|
|
36
|
+
},
|
|
37
|
+
emptyFieldPlaceholder?: {
|
|
38
|
+
show: string,
|
|
39
|
+
list: string,
|
|
40
|
+
|
|
41
|
+
} | string,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
export type AllowedActions = {
|
|
46
|
+
show: boolean,
|
|
47
|
+
create: boolean,
|
|
48
|
+
edit: boolean,
|
|
49
|
+
delete: boolean,
|
|
50
|
+
}
|
|
51
|
+
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { onMounted, ref, resolveComponent } from 'vue';
|
|
2
|
+
import type { CoreConfig } from './spa_types/core';
|
|
2
3
|
|
|
3
4
|
import router from "./router";
|
|
4
5
|
import { useCoreStore } from './stores/core';
|
|
@@ -64,12 +65,18 @@ export const loadFile = (file: string) => {
|
|
|
64
65
|
return baseUrl;
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
export function checkEmptyValues(value: any, viewType:'show' | 'list' ) {
|
|
69
|
+
const config: CoreConfig | {} = useCoreStore().config;
|
|
70
|
+
let emptyFieldPlaceholder = '';
|
|
71
|
+
if (config.emptyFieldPlaceholder) {
|
|
72
|
+
if(typeof config.emptyFieldPlaceholder === 'string') {
|
|
73
|
+
emptyFieldPlaceholder = config.emptyFieldPlaceholder;
|
|
74
|
+
} else {
|
|
75
|
+
emptyFieldPlaceholder = config.emptyFieldPlaceholder?.[viewType] || '';
|
|
76
|
+
}
|
|
77
|
+
if (value === null || value === undefined || value === '') {
|
|
78
|
+
return emptyFieldPlaceholder;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
@@ -5,7 +5,7 @@ import type * as Preset from '@docusaurus/preset-classic';
|
|
|
5
5
|
const config: Config = {
|
|
6
6
|
title: 'AdminForth',
|
|
7
7
|
tagline: 'AdminForth Open-Source Vue-driven Next-Gen Admin Panel',
|
|
8
|
-
favicon: 'img/favicon.
|
|
8
|
+
favicon: 'img/favicon.png',
|
|
9
9
|
|
|
10
10
|
// Set the production url of your site here
|
|
11
11
|
url: 'https://adminforth.devforth.io',
|
|
Binary file
|
|
@@ -1 +1,19 @@
|
|
|
1
|
-
<svg width="
|
|
1
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g clip-path="url(#clip0_1_8)">
|
|
3
|
+
<path d="M8.034 6.006V13H6.097V12.194C5.59433 12.8007 4.86633 13.104 3.913 13.104C3.25433 13.104 2.65633 12.9567 2.119 12.662C1.59033 12.3673 1.17433 11.947 0.871 11.401C0.567667 10.855 0.416 10.2223 0.416 9.503C0.416 8.78367 0.567667 8.151 0.871 7.605C1.17433 7.059 1.59033 6.63867 2.119 6.344C2.65633 6.04933 3.25433 5.902 3.913 5.902C4.80567 5.902 5.50333 6.18367 6.006 6.747V6.006H8.034ZM4.264 11.44C4.77533 11.44 5.2 11.2667 5.538 10.92C5.876 10.5647 6.045 10.0923 6.045 9.503C6.045 8.91367 5.876 8.44567 5.538 8.099C5.2 7.74367 4.77533 7.566 4.264 7.566C3.744 7.566 3.315 7.74367 2.977 8.099C2.639 8.44567 2.47 8.91367 2.47 9.503C2.47 10.0923 2.639 10.5647 2.977 10.92C3.315 11.2667 3.744 11.44 4.264 11.44Z" fill="url(#paint0_linear_1_8)"/>
|
|
4
|
+
<path d="M13.317 5.538C12.589 5.538 12.0387 5.69833 11.666 6.019C11.2933 6.331 11.107 6.80333 11.107 7.436V7.995H14.851V9.685H11.107V13H9.001V7.449C9.001 6.279 9.365 5.369 10.093 4.719C10.8297 4.069 11.8567 3.744 13.174 3.744C13.694 3.744 14.1837 3.80033 14.643 3.913C15.1023 4.017 15.501 4.173 15.839 4.381L15.189 6.045C14.669 5.707 14.045 5.538 13.317 5.538Z" fill="url(#paint1_linear_1_8)"/>
|
|
5
|
+
</g>
|
|
6
|
+
<defs>
|
|
7
|
+
<linearGradient id="paint0_linear_1_8" x1="1.5" y1="6.93333" x2="7.31883" y2="11.8926" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop stop-color="#656E7A"/>
|
|
9
|
+
<stop offset="1" stop-color="#99A6B8"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<linearGradient id="paint1_linear_1_8" x1="12.5" y1="3.73333" x2="9.68642" y2="12.7016" gradientUnits="userSpaceOnUse">
|
|
12
|
+
<stop stop-color="#48C5FF"/>
|
|
13
|
+
<stop offset="1" stop-color="#A1E1FF"/>
|
|
14
|
+
</linearGradient>
|
|
15
|
+
<clipPath id="clip0_1_8">
|
|
16
|
+
<rect width="16" height="16" fill="white"/>
|
|
17
|
+
</clipPath>
|
|
18
|
+
</defs>
|
|
19
|
+
</svg>
|
package/index.ts
CHANGED
|
@@ -93,6 +93,10 @@ class AdminForth implements AdminForthClass {
|
|
|
93
93
|
|
|
94
94
|
console.log('\n ⚠️⚠️⚠️ [INSECURE ALERT] config.rootUser is set, please create a new user and remove config.rootUser from config before going to production\n');
|
|
95
95
|
}
|
|
96
|
+
|
|
97
|
+
if (!this.config.customization.customComponentsDir) {
|
|
98
|
+
this.config.customization.customComponentsDir = './custom';
|
|
99
|
+
}
|
|
96
100
|
|
|
97
101
|
if (this.config.auth) {
|
|
98
102
|
if (!this.config.auth.resourceId) {
|
|
@@ -117,10 +121,6 @@ class AdminForth implements AdminForthClass {
|
|
|
117
121
|
this.config.customization = {};
|
|
118
122
|
}
|
|
119
123
|
|
|
120
|
-
if (!this.config.customization.customComponentsDir) {
|
|
121
|
-
this.config.customization.customComponentsDir = './custom';
|
|
122
|
-
}
|
|
123
|
-
|
|
124
124
|
|
|
125
125
|
if (!this.config.baseUrl) {
|
|
126
126
|
this.config.baseUrl = '';
|
|
@@ -557,7 +557,7 @@ class AdminForth implements AdminForthClass {
|
|
|
557
557
|
auth: this.config.auth,
|
|
558
558
|
usernameField: this.config.auth.usernameField,
|
|
559
559
|
title: this.config.customization?.title,
|
|
560
|
-
|
|
560
|
+
emptyFieldPlaceholder: this.config.customization?.emptyFieldPlaceholder,
|
|
561
561
|
},
|
|
562
562
|
adminUser,
|
|
563
563
|
version: ADMINFORTH_VERSION,
|
package/modules/codeInjector.ts
CHANGED
|
@@ -456,7 +456,9 @@ async watchForReprepare({ verbose }) {
|
|
|
456
456
|
|
|
457
457
|
async watchCustomComponentsForCopy({ verbose }) {
|
|
458
458
|
const customComponentsDir = this.adminforth.config.customization.customComponentsDir;
|
|
459
|
-
|
|
459
|
+
if (!customComponentsDir) {
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
460
462
|
// check if folder exists
|
|
461
463
|
try {
|
|
462
464
|
await fs.promises.access(customComponentsDir, fs.constants.F_OK);
|
package/package.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
|
+
|
|
3
4
|
<span v-if="column.foreignResource">
|
|
4
5
|
<RouterLink v-if="row[column.name]" class="font-medium text-blue-600 dark:text-blue-500 hover:brightness-110"
|
|
5
6
|
:to="{ name: 'resource-show', params: { resourceId: column.foreignResource.resourceId, primaryKey: row[column.name].pk } }">
|
|
@@ -15,14 +16,14 @@
|
|
|
15
16
|
<span v-else class="bg-red-100 text-red-800 text-xs font-medium me-2 px-2.5 py-0.5 rounded dark:bg-gray-700 dark:text-red-400 border border-red-400">No</span>
|
|
16
17
|
</span>
|
|
17
18
|
<span v-else-if="column.enum">
|
|
18
|
-
{{ column.enum.find(e => e.value === row[column.name])?.label }}
|
|
19
|
+
{{ checkEmptyValues(column.enum.find(e => e.value === row[column.name])?.label,route.meta.type) }}
|
|
19
20
|
</span>
|
|
20
21
|
<span v-else-if="column.type === 'datetime'">
|
|
21
|
-
{{ formatDate(row[column.name]) }}
|
|
22
|
+
{{ checkEmptyValues(formatDate(row[column.name]),route.meta.type) }}
|
|
22
23
|
|
|
23
24
|
</span>
|
|
24
25
|
<span v-else>
|
|
25
|
-
{{ row[column.name] }}
|
|
26
|
+
{{ checkEmptyValues(row[column.name],route.meta.type) }}
|
|
26
27
|
</span>
|
|
27
28
|
</div>
|
|
28
29
|
</template>
|
|
@@ -33,10 +34,15 @@
|
|
|
33
34
|
import dayjs from 'dayjs';
|
|
34
35
|
import utc from 'dayjs/plugin/utc';
|
|
35
36
|
import timezone from 'dayjs/plugin/timezone';
|
|
37
|
+
import {checkEmptyValues} from '@/utils';
|
|
38
|
+
import { useRoute, useRouter } from 'vue-router';
|
|
39
|
+
|
|
36
40
|
|
|
37
41
|
import { useCoreStore } from '@/stores/core';
|
|
38
42
|
|
|
39
43
|
const coreStore = useCoreStore();
|
|
44
|
+
const route = useRoute();
|
|
45
|
+
|
|
40
46
|
|
|
41
47
|
dayjs.extend(utc);
|
|
42
48
|
dayjs.extend(timezone);
|
package/spa/src/router/index.ts
CHANGED
|
@@ -20,26 +20,26 @@ const router = createRouter({
|
|
|
20
20
|
path: '',
|
|
21
21
|
component: () => import('@/views/ListView.vue'),
|
|
22
22
|
name: 'resource-list',
|
|
23
|
-
meta: { title: 'list' }
|
|
23
|
+
meta: { title: 'list',type: 'list' }
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
26
|
path: 'show/:primaryKey',
|
|
27
27
|
component: () => import('@/views/ShowView.vue'),
|
|
28
28
|
name: 'resource-show',
|
|
29
|
-
meta: { title: 'show' }
|
|
29
|
+
meta: { title: 'show', type: 'show'}
|
|
30
30
|
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
path: 'edit/:primaryKey',
|
|
34
34
|
component: () => import('@/views/EditView.vue'),
|
|
35
35
|
name: 'resource-edit',
|
|
36
|
-
meta: { title: 'edit' }
|
|
36
|
+
meta: { title: 'edit', type: 'edit'}
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
path: 'create',
|
|
40
40
|
component: () => import('@/views/CreateView.vue'),
|
|
41
41
|
name: 'resource-create',
|
|
42
|
-
meta: { title: 'create' }
|
|
42
|
+
meta: { title: 'create', type: 'create'}
|
|
43
43
|
|
|
44
44
|
},
|
|
45
45
|
]
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { AdminForthResource, AdminForthResourceColumn } from '../types/AdminForthConfig';
|
|
2
|
+
|
|
3
|
+
export type resourceById = {
|
|
4
|
+
[key: string]: AdminForthResource;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export type Menu = {
|
|
8
|
+
label: string,
|
|
9
|
+
icon: string,
|
|
10
|
+
resourceId: string,
|
|
11
|
+
children?: Array<Menu>,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type Record = {
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type ResourceColumns = {
|
|
19
|
+
[key: string]: Array<AdminForthResourceColumn>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type CoreConfig = {
|
|
23
|
+
brandName: string,
|
|
24
|
+
brandLogo: string,
|
|
25
|
+
title: string,
|
|
26
|
+
datesFormat: string,
|
|
27
|
+
usernameField: string,
|
|
28
|
+
usernameFieldName?: string,
|
|
29
|
+
deleteConfirmation?: boolean,
|
|
30
|
+
auth?: {
|
|
31
|
+
resourceId: string,
|
|
32
|
+
usernameField: string,
|
|
33
|
+
passwordHashField: string,
|
|
34
|
+
loginBackgroundImage: string,
|
|
35
|
+
userFullnameField: string,
|
|
36
|
+
},
|
|
37
|
+
emptyFieldPlaceholder?: {
|
|
38
|
+
show: string,
|
|
39
|
+
list: string,
|
|
40
|
+
|
|
41
|
+
} | string,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
export type AllowedActions = {
|
|
46
|
+
show: boolean,
|
|
47
|
+
create: boolean,
|
|
48
|
+
edit: boolean,
|
|
49
|
+
delete: boolean,
|
|
50
|
+
}
|
|
51
|
+
|
package/spa/src/stores/core.ts
CHANGED
package/spa/src/utils.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { onMounted, ref, resolveComponent } from 'vue';
|
|
2
|
+
import type { CoreConfig } from './spa_types/core';
|
|
2
3
|
|
|
3
4
|
import router from "./router";
|
|
4
5
|
import { useCoreStore } from './stores/core';
|
|
@@ -64,12 +65,18 @@ export const loadFile = (file: string) => {
|
|
|
64
65
|
return baseUrl;
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
export function checkEmptyValues(value: any, viewType:'show' | 'list' ) {
|
|
69
|
+
const config: CoreConfig | {} = useCoreStore().config;
|
|
70
|
+
let emptyFieldPlaceholder = '';
|
|
71
|
+
if (config.emptyFieldPlaceholder) {
|
|
72
|
+
if(typeof config.emptyFieldPlaceholder === 'string') {
|
|
73
|
+
emptyFieldPlaceholder = config.emptyFieldPlaceholder;
|
|
74
|
+
} else {
|
|
75
|
+
emptyFieldPlaceholder = config.emptyFieldPlaceholder?.[viewType] || '';
|
|
76
|
+
}
|
|
77
|
+
if (value === null || value === undefined || value === '') {
|
|
78
|
+
return emptyFieldPlaceholder;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
@@ -134,12 +134,11 @@ export type AdminForthConfig = {
|
|
|
134
134
|
datesFormat?: string,
|
|
135
135
|
title?: string,
|
|
136
136
|
brandLogo?: string,
|
|
137
|
-
|
|
137
|
+
emptyFieldPlaceholder?: {
|
|
138
138
|
show?: string,
|
|
139
139
|
list?: string,
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
},
|
|
140
|
+
|
|
141
|
+
} | string,
|
|
143
142
|
},
|
|
144
143
|
baseUrl?: string,
|
|
145
144
|
|
|
Binary file
|
|
Binary file
|