adminforth 1.5.4-next.13 → 1.5.4-next.15

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.
Files changed (48) hide show
  1. package/dist/auth.js +4 -4
  2. package/dist/auth.js.map +1 -1
  3. package/dist/dataConnectors/clickhouse.d.ts.map +1 -1
  4. package/dist/dataConnectors/clickhouse.js +0 -1
  5. package/dist/dataConnectors/clickhouse.js.map +1 -1
  6. package/dist/index.d.ts +0 -2
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +3 -13
  9. package/dist/index.js.map +1 -1
  10. package/dist/modules/codeInjector.d.ts.map +1 -1
  11. package/dist/modules/codeInjector.js +7 -5
  12. package/dist/modules/codeInjector.js.map +1 -1
  13. package/dist/modules/configValidator.d.ts +11 -5
  14. package/dist/modules/configValidator.d.ts.map +1 -1
  15. package/dist/modules/configValidator.js +387 -379
  16. package/dist/modules/configValidator.js.map +1 -1
  17. package/dist/modules/restApi.d.ts.map +1 -1
  18. package/dist/modules/restApi.js +10 -9
  19. package/dist/modules/restApi.js.map +1 -1
  20. package/dist/servers/express.js +2 -2
  21. package/dist/servers/express.js.map +1 -1
  22. package/dist/spa/src/App.vue +8 -6
  23. package/dist/spa/src/afcl/Input.vue +1 -1
  24. package/dist/spa/src/afcl/Link.vue +9 -1
  25. package/dist/spa/src/afcl/LinkButton.vue +5 -3
  26. package/dist/spa/src/afcl/VerticalTabs.vue +1 -1
  27. package/dist/spa/src/components/AcceptModal.vue +1 -2
  28. package/dist/spa/src/components/ResourceListTable.vue +4 -3
  29. package/dist/spa/src/components/SkeleteLoader.vue +5 -10
  30. package/dist/spa/src/components/ValueRenderer.vue +13 -14
  31. package/dist/spa/src/spa_types/core.ts +2 -4
  32. package/dist/spa/src/stores/core.ts +15 -16
  33. package/dist/spa/src/types/Back.ts +310 -327
  34. package/dist/spa/src/types/Common.ts +219 -10
  35. package/dist/spa/src/types/FrontendAPI.ts +5 -4
  36. package/dist/spa/src/utils.ts +5 -1
  37. package/dist/types/Back.d.ts +262 -287
  38. package/dist/types/Back.d.ts.map +1 -1
  39. package/dist/types/Back.js +1 -46
  40. package/dist/types/Back.js.map +1 -1
  41. package/dist/types/Common.d.ts +193 -9
  42. package/dist/types/Common.d.ts.map +1 -1
  43. package/dist/types/Common.js +46 -0
  44. package/dist/types/Common.js.map +1 -1
  45. package/dist/types/FrontendAPI.d.ts +4 -4
  46. package/dist/types/FrontendAPI.d.ts.map +1 -1
  47. package/dist/types/FrontendAPI.js.map +1 -1
  48. package/package.json +1 -1
@@ -18,13 +18,13 @@
18
18
  {{ checkEmptyValues(column.enum.find(e => e.value === record[column.name])?.label || record[column.name], route.meta.type) }}
19
19
  </span>
20
20
  <span v-else-if="column.type === 'datetime'" class="whitespace-nowrap">
21
- {{ checkEmptyValues(formatDateTime(record[column.name]),route.meta.type) }}
21
+ {{ checkEmptyValues(formatDateTime(record[column.name]), route.meta.type) }}
22
22
  </span>
23
23
  <span v-else-if="column.type === 'date'" class="whitespace-nowrap">
24
- {{ checkEmptyValues(formatDate(record[column.name]),route.meta.type) }}
24
+ {{ checkEmptyValues(formatDate(record[column.name]), route.meta.type) }}
25
25
  </span>
26
26
  <span v-else-if="column.type === 'time'" class="whitespace-nowrap">
27
- {{ checkEmptyValues(formatTime(record[column.name]),route.meta.type) }}
27
+ {{ checkEmptyValues(formatTime(record[column.name]), route.meta.type) }}
28
28
  </span>
29
29
  <span v-else-if="column.type === 'richtext'">
30
30
  <div v-html="protectAgainstXSS(record[column.name])" class="allow-lists"></div>
@@ -42,7 +42,7 @@
42
42
  </template>
43
43
 
44
44
 
45
- <script setup>
45
+ <script setup lang="ts">
46
46
 
47
47
  import dayjs from 'dayjs';
48
48
  import utc from 'dayjs/plugin/utc';
@@ -52,10 +52,9 @@ import { useRoute, useRouter } from 'vue-router';
52
52
  import sanitizeHtml from 'sanitize-html';
53
53
  import { JsonViewer } from "vue3-json-viewer";
54
54
  import "vue3-json-viewer/dist/index.css";
55
-
55
+ import type { AdminForthResourceColumnCommon } from '@/types/Common';
56
56
 
57
57
  import { useCoreStore } from '@/stores/core';
58
- import { computed } from 'vue';
59
58
 
60
59
  const coreStore = useCoreStore();
61
60
  const route = useRoute();
@@ -64,13 +63,13 @@ const route = useRoute();
64
63
  dayjs.extend(utc);
65
64
  dayjs.extend(timezone);
66
65
 
67
- const props = defineProps({
68
- column: Object,
69
- record: Object
70
- });
66
+ const props = defineProps<{
67
+ column: AdminForthResourceColumnCommon,
68
+ record: any
69
+ }>();
71
70
 
72
71
 
73
- function protectAgainstXSS(value) {
72
+ function protectAgainstXSS(value: string) {
74
73
  return sanitizeHtml(value, {
75
74
  allowedTags: [
76
75
  "address", "article", "aside", "footer", "header", "h1", "h2", "h3", "h4",
@@ -89,17 +88,17 @@ function protectAgainstXSS(value) {
89
88
  }
90
89
 
91
90
 
92
- function formatDateTime(date) {
91
+ function formatDateTime(date: string) {
93
92
  if (!date) return '';
94
93
  return dayjs.utc(date).local().format(`${coreStore.config?.datesFormat} ${coreStore.config?.timeFormat}` || 'YYYY-MM-DD HH:mm:ss');
95
94
  }
96
95
 
97
- function formatDate(date) {
96
+ function formatDate(date: string) {
98
97
  if (!date) return '';
99
98
  return dayjs.utc(date).local().format(coreStore.config?.datesFormat || 'YYYY-MM-DD');
100
99
  }
101
100
 
102
- function formatTime(time) {
101
+ function formatTime(time: string) {
103
102
  if (!time) return '';
104
103
  return dayjs(`0000-00-00 ${time}`).format(coreStore.config?.timeFormat || 'HH:mm:ss');
105
104
  }
@@ -27,7 +27,6 @@ export type CoreConfig = {
27
27
  timeFormat: string,
28
28
  usernameField: string,
29
29
  usernameFieldName?: string,
30
- deleteConfirmation?: boolean,
31
30
  auth?: {
32
31
  resourceId: string,
33
32
  usernameField: string,
@@ -37,9 +36,8 @@ export type CoreConfig = {
37
36
  userFullnameField: string,
38
37
  },
39
38
  emptyFieldPlaceholder?: {
40
- show: string,
41
- list: string,
42
-
39
+ show?: string,
40
+ list?: string,
43
41
  } | string,
44
42
  }
45
43
 
@@ -1,19 +1,18 @@
1
1
  import { ref, computed } from 'vue'
2
2
  import { defineStore } from 'pinia'
3
3
  import { callAdminForthApi } from '@/utils';
4
- import type { AdminForthResourceCommon, AdminForthResourceColumnCommon } from '@/types/Common';
4
+ import type { AdminForthResourceCommon, AdminForthResourceColumnCommon, GetBaseConfigResponse, ResourceVeryShort, AdminUser, UserData, AdminForthConfigMenuItem, AdminForthConfigForFrontend } from '@/types/Common';
5
5
  import type { Ref } from 'vue'
6
- import type { AdminForthConfigMenuItem } from '@/types/Back';
7
6
 
8
7
  export const useCoreStore = defineStore('core', () => {
9
- const resourceById: Ref<Object> = ref({});
8
+ const resourceById: Ref<Record<string, ResourceVeryShort>> = ref({});
10
9
  const theme: Ref<'light'| 'dark'> = ref(window.localStorage.getItem('af__theme') as ('light'|'dark') || 'light');
11
10
 
12
- const menu = ref([]);
13
- const config = ref({});
11
+ const menu: Ref<AdminForthConfigMenuItem[]> = ref([]);
12
+ const config: Ref<AdminForthConfigForFrontend | null> = ref(null);
14
13
  const record: Ref<any | null> = ref({});
15
14
  const resource: Ref<AdminForthResourceCommon | null> = ref(null);
16
- const userData = ref(null);
15
+ const userData: Ref<UserData | null> = ref(null);
17
16
 
18
17
  const resourceColumnsWithFilters = computed(() => {
19
18
  if (!resource.value) {
@@ -23,9 +22,9 @@ export const useCoreStore = defineStore('core', () => {
23
22
  })
24
23
 
25
24
  const resourceOptions: Ref<AdminForthResourceCommon['options'] | null> = ref(null);
26
- const resourceColumnsError = ref('');
27
- const resourceColumnsId = ref(null);
28
- const adminUser = ref(null);
25
+ const resourceColumnsError: Ref<string> = ref('');
26
+ const resourceColumnsId: Ref<string | null> = ref(null);
27
+ const adminUser: Ref<null | AdminUser> = ref(null);
29
28
 
30
29
 
31
30
  async function resetAdminUser() {
@@ -46,7 +45,7 @@ export const useCoreStore = defineStore('core', () => {
46
45
  }
47
46
 
48
47
  async function fetchMenuAndResource() {
49
- const resp = await callAdminForthApi({
48
+ const resp: GetBaseConfigResponse = await callAdminForthApi({
50
49
  path: '/get_base_config',
51
50
  method: 'GET',
52
51
  });
@@ -54,7 +53,7 @@ export const useCoreStore = defineStore('core', () => {
54
53
  return
55
54
  }
56
55
  menu.value = resp.menu;
57
- resourceById.value = resp.resources.reduce((acc: Object, resource: AdminForthResource) => {
56
+ resourceById.value = resp.resources.reduce((acc: Record<string, ResourceVeryShort>, resource: ResourceVeryShort) => {
58
57
  acc[resource.resourceId] = resource;
59
58
  return acc;
60
59
  }, {});
@@ -100,7 +99,7 @@ export const useCoreStore = defineStore('core', () => {
100
99
  if (!resource.value) {
101
100
  throw new Error('Columns not fetched yet');
102
101
  }
103
- const col = resource.value.columns.find((col: AdminForthResourceColumn) => col.primaryKey);
102
+ const col = resource.value.columns.find((col: AdminForthResourceColumnCommon) => col.primaryKey);
104
103
  if (!col) {
105
104
  throw new Error(`Primary key not found in resource ${resourceId}`);
106
105
  }
@@ -170,13 +169,13 @@ export const useCoreStore = defineStore('core', () => {
170
169
 
171
170
 
172
171
  const username = computed(() => {
173
- const usernameField = config.value.usernameField;
174
- return userData.value && userData.value[usernameField];
172
+ const usernameField = config.value?.usernameField;
173
+ return userData.value && usernameField && userData.value[usernameField];
175
174
  });
176
175
 
177
176
  const userFullname = computed(() => {
178
- const userFullnameField = config.value.userFullnameField;
179
- return userData.value && userData.value[userFullnameField];
177
+ const userFullnameField = config.value?.userFullnameField;
178
+ return userData.value && userFullnameField && userData.value[userFullnameField];
180
179
  })
181
180
 
182
181