@vc-shell/create-vc-app 1.0.326 → 1.0.328-0

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 (84) hide show
  1. package/CHANGELOG.md +1216 -1143
  2. package/README.md +30 -30
  3. package/dist/index.js +154 -186
  4. package/dist/templates/base/LICENSE +12 -12
  5. package/dist/templates/base/README.md +54 -54
  6. package/dist/templates/base/_browserslistrc +3 -3
  7. package/dist/templates/base/_commitlintrc.json +3 -3
  8. package/dist/templates/base/_editorconfig +22 -22
  9. package/dist/templates/base/_env +3 -3
  10. package/dist/templates/base/_env.local +1 -1
  11. package/dist/templates/base/_eslintignore +3 -3
  12. package/dist/templates/base/_eslintrc.js +41 -41
  13. package/dist/templates/base/_github/COMMIT_CONVENTION.md +91 -91
  14. package/dist/templates/base/_github/PULL_REQUEST_TEMPLATE.md +8 -8
  15. package/dist/templates/base/_gitignore +71 -71
  16. package/dist/templates/base/_husky/commit-msg +4 -4
  17. package/dist/templates/base/_husky/pre-commit +4 -4
  18. package/dist/templates/base/_package.json +5 -6
  19. package/dist/templates/base/_prettierignore +4 -4
  20. package/dist/templates/base/_prettierrc +4 -4
  21. package/dist/templates/base/_vscode/extensions.json +14 -14
  22. package/dist/templates/base/_vscode/settings.json +14 -14
  23. package/dist/templates/base/_yarn/releases/yarn-4.0.2.cjs +893 -893
  24. package/dist/templates/base/_yarnrc.yml +7 -7
  25. package/dist/templates/base/index.html +26 -26
  26. package/dist/templates/base/postcss.config.cjs +6 -6
  27. package/dist/templates/base/public/assets/app-select.svg +11 -11
  28. package/dist/templates/base/public/assets/logo-white.svg +21 -21
  29. package/dist/templates/base/public/assets/logo.svg +8 -8
  30. package/dist/templates/base/public/img/icons/safari-pinned-tab.svg +32 -32
  31. package/dist/templates/base/scripts/release.ts +18 -18
  32. package/dist/templates/base/src/api_client/README.md +78 -78
  33. package/dist/templates/base/src/composables/index.ts +1 -1
  34. package/dist/templates/base/src/env.d.ts +9 -9
  35. package/dist/templates/base/src/locales/en.json +3 -3
  36. package/dist/templates/base/src/locales/index.ts +2 -2
  37. package/dist/templates/base/src/router/index.ts +10 -10
  38. package/dist/templates/base/src/router/routes.ts +78 -78
  39. package/dist/templates/base/src/shims-vue.d.ts +63 -63
  40. package/dist/templates/base/src/styles/base.scss +38 -38
  41. package/dist/templates/base/src/styles/colors.scss +10 -10
  42. package/dist/templates/base/src/styles/custom.scss +2 -2
  43. package/dist/templates/base/tailwind.config.ts +7 -7
  44. package/dist/templates/base/tsconfig.json +16 -16
  45. package/dist/templates/base/vite.config.mts +5 -5
  46. package/dist/templates/mocks/sample-data/constants.ts +86 -86
  47. package/dist/templates/mocks/sample-data/index.ts +2 -2
  48. package/dist/templates/mocks/sample-data/methods.ts +65 -65
  49. package/dist/templates/modules/classic-module/composables/index.ts +2 -2
  50. package/dist/templates/modules/classic-module/composables/use{{ModuleNamePascalCase}}Details/index.ts +19 -19
  51. package/dist/templates/modules/classic-module/composables/use{{ModuleNamePascalCase}}List/index.ts +23 -23
  52. package/dist/templates/modules/classic-module/index.ts +8 -8
  53. package/dist/templates/modules/classic-module/locales/en.json +28 -28
  54. package/dist/templates/modules/classic-module/locales/index.ts +2 -2
  55. package/dist/templates/modules/classic-module/pages/details.vue +61 -61
  56. package/dist/templates/modules/classic-module/pages/index.ts +2 -2
  57. package/dist/templates/modules/classic-module/pages/list.vue +162 -162
  58. package/dist/templates/modules/dynamic-module/composables/index.ts +2 -2
  59. package/dist/templates/modules/dynamic-module/composables/use{{ModuleNamePascalCase}}Details/index.ts +37 -37
  60. package/dist/templates/modules/dynamic-module/composables/use{{ModuleNamePascalCase}}List/index.ts +49 -49
  61. package/dist/templates/modules/dynamic-module/index.ts +8 -8
  62. package/dist/templates/modules/dynamic-module/locales/en.json +35 -35
  63. package/dist/templates/modules/dynamic-module/locales/index.ts +2 -2
  64. package/dist/templates/modules/dynamic-module/pages/details.ts +20 -20
  65. package/dist/templates/modules/dynamic-module/pages/index.ts +4 -4
  66. package/dist/templates/modules/dynamic-module/pages/list.ts +35 -35
  67. package/dist/templates/sample/classic-module/composables/index.ts +2 -2
  68. package/dist/templates/sample/classic-module/composables/useDetails/index.ts +41 -41
  69. package/dist/templates/sample/classic-module/composables/useList/index.ts +41 -41
  70. package/dist/templates/sample/classic-module/index.ts +8 -8
  71. package/dist/templates/sample/classic-module/locales/en.json +59 -59
  72. package/dist/templates/sample/classic-module/locales/index.ts +2 -2
  73. package/dist/templates/sample/classic-module/pages/details.vue +257 -257
  74. package/dist/templates/sample/classic-module/pages/index.ts +2 -2
  75. package/dist/templates/sample/dynamic-module/composables/index.ts +2 -2
  76. package/dist/templates/sample/dynamic-module/composables/useDetails/index.ts +46 -46
  77. package/dist/templates/sample/dynamic-module/composables/useList/index.ts +50 -50
  78. package/dist/templates/sample/dynamic-module/index.ts +8 -8
  79. package/dist/templates/sample/dynamic-module/locales/en.json +69 -69
  80. package/dist/templates/sample/dynamic-module/locales/index.ts +2 -2
  81. package/dist/templates/sample/dynamic-module/pages/details.ts +100 -100
  82. package/dist/templates/sample/dynamic-module/pages/index.ts +4 -4
  83. package/dist/templates/sample/dynamic-module/pages/list.ts +81 -81
  84. package/package.json +4 -3
@@ -1,162 +1,162 @@
1
- <template>
2
- <VcBlade
3
- :title="$t('{{ModuleNameUppercaseSnakeCase}}.PAGES.LIST.TITLE')"
4
- width="50%"
5
- :expanded="expanded"
6
- :closable="closable"
7
- :toolbar-items="bladeToolbar"
8
- @close="$emit('close:blade')"
9
- @expand="$emit('expand:blade')"
10
- @collapse="$emit('collapse:blade')"
11
- >
12
- <!-- Blade contents -->
13
- <VcTable
14
- :expanded="expanded"
15
- class="tw-grow tw-basis-0"
16
- multiselect
17
- :loading="loading"
18
- :columns="columns"
19
- :sort="sort"
20
- :pages="pages"
21
- :total-count="totalCount"
22
- :search-value="searchValue"
23
- :current-page="currentPage"
24
- :search-placeholder="$t('{{ModuleNameUppercaseSnakeCase}}.PAGES.LIST.SEARCH.PLACEHOLDER')"
25
- :total-label="$t('{{ModuleNameUppercaseSnakeCase}}.PAGES.LIST.TABLE.TOTALS')"
26
- :selected-item-id="selectedItemId"
27
- state-key="{{ModuleNameUppercaseSnakeCase}}"
28
- :items="data"
29
- @item-click="onItemClick"
30
- @header-click="onHeaderClick"
31
- >
32
- </VcTable>
33
- </VcBlade>
34
- </template>
35
-
36
- <script lang="ts" setup>
37
- import { computed, ref, markRaw, onMounted, watch } from "vue";
38
- import { IBladeEvent, IBladeToolbar, IParentCallArgs, ITableColumns, useBladeNavigation } from "@vc-shell/framework";
39
- import { useI18n } from "vue-i18n";
40
- import { use{{ModuleNamePascalCase}}List } from "./../composables";
41
- import Details from "./details.vue";
42
-
43
- export interface Props {
44
- expanded?: boolean;
45
- closable?: boolean;
46
- param?: string;
47
- options?: Record<string, unknown>;
48
- }
49
-
50
- export interface Emits {
51
- (event: "parent:call", args: IParentCallArgs): void;
52
- (event: "collapse:blade"): void;
53
- (event: "expand:blade"): void;
54
- (event: "open:blade", blade: IBladeEvent): void;
55
- (event: "close:blade"): void;
56
- }
57
-
58
- defineOptions({
59
- url: "/{{ModuleName}}",
60
- name: "{{ModuleNamePascalCase}}List",
61
- isWorkspace: true,
62
- menuItem: {
63
- title: "{{ModuleNameUppercaseSnakeCase}}.MENU.TITLE",
64
- icon: "fas fa-file-alt",
65
- priority: 1,
66
- },
67
- });
68
-
69
- const props = withDefaults(defineProps<Props>(), {
70
- expanded: true,
71
- closable: true,
72
- });
73
-
74
- defineEmits<Emits>();
75
-
76
- const { t } = useI18n({ useScope: "global" });
77
- const { openBlade } = useBladeNavigation();
78
- const { getItems, data, loading, totalCount, pages, currentPage } = use{{ModuleNamePascalCase}}List();
79
-
80
- const sort = ref("createdDate:DESC");
81
- const searchValue = ref();
82
- const selectedItemId = ref<string>();
83
-
84
- watch(
85
- () => props.param,
86
- (newVal) => {
87
- selectedItemId.value = newVal;
88
- },
89
- { immediate: true },
90
- );
91
-
92
- onMounted(async () => {
93
- await getItems();
94
- });
95
-
96
- const bladeToolbar = ref<IBladeToolbar[]>([
97
- {
98
- id: "refresh",
99
- title: computed(() => t("{{ModuleNameUppercaseSnakeCase}}.PAGES.LIST.TOOLBAR.REFRESH")),
100
- icon: "fas fa-sync-alt",
101
- async clickHandler() {
102
- await reload();
103
- },
104
- },
105
- ]);
106
-
107
- const columns = ref<ITableColumns[]>([
108
- // You can add columns here
109
- ]);
110
-
111
- const title = computed(() => t("{{ModuleNameUppercaseSnakeCase}}.PAGES.LIST.TITLE"));
112
-
113
- const reload = async () => {
114
- await getItems();
115
- };
116
-
117
- const onItemClick = (item: { id: string }) => {
118
- openBlade({
119
- blade: markRaw(Details),
120
- param: item.id,
121
- onOpen() {
122
- selectedItemId.value = item.id;
123
- },
124
- onClose() {
125
- selectedItemId.value = undefined;
126
- },
127
- });
128
- };
129
-
130
- const onHeaderClick = (item: ITableColumns) => {
131
- const sortOptions = ["DESC", "ASC", ""];
132
-
133
- if (item.sortable) {
134
- if (sort.value.split(":")[0] === item.id) {
135
- const index = sortOptions.findIndex((x) => {
136
- const sorting = sort.value.split(":")[1];
137
- if (sorting) {
138
- return x === sorting;
139
- } else {
140
- return x === "";
141
- }
142
- });
143
-
144
- if (index !== -1) {
145
- const newSort = sortOptions[(index + 1) % sortOptions.length];
146
-
147
- if (newSort === "") {
148
- sort.value = `${item.id}`;
149
- } else {
150
- sort.value = `${item.id}:${newSort}`;
151
- }
152
- }
153
- } else {
154
- sort.value = `${item.id}:${sortOptions[0]}`;
155
- }
156
- }
157
- };
158
-
159
- defineExpose({
160
- title,
161
- });
162
- </script>
1
+ <template>
2
+ <VcBlade
3
+ :title="$t('{{ModuleNameUppercaseSnakeCase}}.PAGES.LIST.TITLE')"
4
+ width="50%"
5
+ :expanded="expanded"
6
+ :closable="closable"
7
+ :toolbar-items="bladeToolbar"
8
+ @close="$emit('close:blade')"
9
+ @expand="$emit('expand:blade')"
10
+ @collapse="$emit('collapse:blade')"
11
+ >
12
+ <!-- Blade contents -->
13
+ <VcTable
14
+ :expanded="expanded"
15
+ class="tw-grow tw-basis-0"
16
+ multiselect
17
+ :loading="loading"
18
+ :columns="columns"
19
+ :sort="sort"
20
+ :pages="pages"
21
+ :total-count="totalCount"
22
+ :search-value="searchValue"
23
+ :current-page="currentPage"
24
+ :search-placeholder="$t('{{ModuleNameUppercaseSnakeCase}}.PAGES.LIST.SEARCH.PLACEHOLDER')"
25
+ :total-label="$t('{{ModuleNameUppercaseSnakeCase}}.PAGES.LIST.TABLE.TOTALS')"
26
+ :selected-item-id="selectedItemId"
27
+ state-key="{{ModuleNameUppercaseSnakeCase}}"
28
+ :items="data"
29
+ @item-click="onItemClick"
30
+ @header-click="onHeaderClick"
31
+ >
32
+ </VcTable>
33
+ </VcBlade>
34
+ </template>
35
+
36
+ <script lang="ts" setup>
37
+ import { computed, ref, markRaw, onMounted, watch } from "vue";
38
+ import { IBladeEvent, IBladeToolbar, IParentCallArgs, ITableColumns, useBladeNavigation } from "@vc-shell/framework";
39
+ import { useI18n } from "vue-i18n";
40
+ import { use{{ModuleNamePascalCase}}List } from "./../composables";
41
+ import Details from "./details.vue";
42
+
43
+ export interface Props {
44
+ expanded?: boolean;
45
+ closable?: boolean;
46
+ param?: string;
47
+ options?: Record<string, unknown>;
48
+ }
49
+
50
+ export interface Emits {
51
+ (event: "parent:call", args: IParentCallArgs): void;
52
+ (event: "collapse:blade"): void;
53
+ (event: "expand:blade"): void;
54
+ (event: "open:blade", blade: IBladeEvent): void;
55
+ (event: "close:blade"): void;
56
+ }
57
+
58
+ defineOptions({
59
+ url: "/{{ModuleName}}",
60
+ name: "{{ModuleNamePascalCase}}List",
61
+ isWorkspace: true,
62
+ menuItem: {
63
+ title: "{{ModuleNameUppercaseSnakeCase}}.MENU.TITLE",
64
+ icon: "fas fa-file-alt",
65
+ priority: 1,
66
+ },
67
+ });
68
+
69
+ const props = withDefaults(defineProps<Props>(), {
70
+ expanded: true,
71
+ closable: true,
72
+ });
73
+
74
+ defineEmits<Emits>();
75
+
76
+ const { t } = useI18n({ useScope: "global" });
77
+ const { openBlade } = useBladeNavigation();
78
+ const { getItems, data, loading, totalCount, pages, currentPage } = use{{ModuleNamePascalCase}}List();
79
+
80
+ const sort = ref("createdDate:DESC");
81
+ const searchValue = ref();
82
+ const selectedItemId = ref<string>();
83
+
84
+ watch(
85
+ () => props.param,
86
+ (newVal) => {
87
+ selectedItemId.value = newVal;
88
+ },
89
+ { immediate: true },
90
+ );
91
+
92
+ onMounted(async () => {
93
+ await getItems();
94
+ });
95
+
96
+ const bladeToolbar = ref<IBladeToolbar[]>([
97
+ {
98
+ id: "refresh",
99
+ title: computed(() => t("{{ModuleNameUppercaseSnakeCase}}.PAGES.LIST.TOOLBAR.REFRESH")),
100
+ icon: "fas fa-sync-alt",
101
+ async clickHandler() {
102
+ await reload();
103
+ },
104
+ },
105
+ ]);
106
+
107
+ const columns = ref<ITableColumns[]>([
108
+ // You can add columns here
109
+ ]);
110
+
111
+ const title = computed(() => t("{{ModuleNameUppercaseSnakeCase}}.PAGES.LIST.TITLE"));
112
+
113
+ const reload = async () => {
114
+ await getItems();
115
+ };
116
+
117
+ const onItemClick = (item: { id: string }) => {
118
+ openBlade({
119
+ blade: markRaw(Details),
120
+ param: item.id,
121
+ onOpen() {
122
+ selectedItemId.value = item.id;
123
+ },
124
+ onClose() {
125
+ selectedItemId.value = undefined;
126
+ },
127
+ });
128
+ };
129
+
130
+ const onHeaderClick = (item: ITableColumns) => {
131
+ const sortOptions = ["DESC", "ASC", ""];
132
+
133
+ if (item.sortable) {
134
+ if (sort.value.split(":")[0] === item.id) {
135
+ const index = sortOptions.findIndex((x) => {
136
+ const sorting = sort.value.split(":")[1];
137
+ if (sorting) {
138
+ return x === sorting;
139
+ } else {
140
+ return x === "";
141
+ }
142
+ });
143
+
144
+ if (index !== -1) {
145
+ const newSort = sortOptions[(index + 1) % sortOptions.length];
146
+
147
+ if (newSort === "") {
148
+ sort.value = `${item.id}`;
149
+ } else {
150
+ sort.value = `${item.id}:${newSort}`;
151
+ }
152
+ }
153
+ } else {
154
+ sort.value = `${item.id}:${sortOptions[0]}`;
155
+ }
156
+ }
157
+ };
158
+
159
+ defineExpose({
160
+ title,
161
+ });
162
+ </script>
@@ -1,2 +1,2 @@
1
- export { default as use{{ModuleNamePascalCase}}List } from "./use{{ModuleNamePascalCase}}List";
2
- export { default as use{{ModuleNamePascalCase}}Details } from "./use{{ModuleNamePascalCase}}Details";
1
+ export { default as use{{ModuleNamePascalCase}}List } from "./use{{ModuleNamePascalCase}}List";
2
+ export { default as use{{ModuleNamePascalCase}}Details } from "./use{{ModuleNamePascalCase}}Details";
@@ -1,37 +1,37 @@
1
- import { computed, ref, Ref } from "vue";
2
- import { DetailsBaseBladeScope, IBladeToolbar, useDetailsFactory, DetailsComposableArgs } from "@vc-shell/framework";
3
-
4
- export interface DynamicItemScope extends DetailsBaseBladeScope {}
5
-
6
- export default (args: DetailsComposableArgs) => {
7
- const factory = useDetailsFactory({
8
- load: async () => {
9
- return {};
10
- },
11
- saveChanges: () => {
12
- throw new Error("Function not implemented.");
13
- },
14
- remove: () => {
15
- throw new Error("Function not implemented.");
16
- },
17
- });
18
-
19
- const { load, saveChanges, remove, loading, item, validationState } = factory();
20
-
21
- const scope: DynamicItemScope = {};
22
-
23
- const bladeTitle = computed(() => {
24
- return "{{ModuleNameSentenceCase}} details";
25
- });
26
-
27
- return {
28
- load,
29
- saveChanges,
30
- remove,
31
- loading,
32
- item,
33
- validationState,
34
- bladeTitle,
35
- scope,
36
- };
37
- };
1
+ import { computed, ref, Ref } from "vue";
2
+ import { DetailsBaseBladeScope, IBladeToolbar, useDetailsFactory, DetailsComposableArgs } from "@vc-shell/framework";
3
+
4
+ export interface DynamicItemScope extends DetailsBaseBladeScope {}
5
+
6
+ export default (args: DetailsComposableArgs) => {
7
+ const factory = useDetailsFactory({
8
+ load: async () => {
9
+ return {};
10
+ },
11
+ saveChanges: () => {
12
+ throw new Error("Function not implemented.");
13
+ },
14
+ remove: () => {
15
+ throw new Error("Function not implemented.");
16
+ },
17
+ });
18
+
19
+ const { load, saveChanges, remove, loading, item, validationState } = factory();
20
+
21
+ const scope: DynamicItemScope = {};
22
+
23
+ const bladeTitle = computed(() => {
24
+ return "{{ModuleNameSentenceCase}} details";
25
+ });
26
+
27
+ return {
28
+ load,
29
+ saveChanges,
30
+ remove,
31
+ loading,
32
+ item,
33
+ validationState,
34
+ bladeTitle,
35
+ scope,
36
+ };
37
+ };
@@ -1,49 +1,49 @@
1
- import { computed, ref, Ref } from "vue";
2
- import {
3
- ListComposableArgs,
4
- ListBaseBladeScope,
5
- useBladeNavigation,
6
- useListFactory,
7
- type TOpenBladeArgs,
8
- } from "@vc-shell/framework";
9
-
10
- // eslint-disable-next-line @typescript-eslint/no-empty-interface
11
- export interface DynamicItemsScope extends ListBaseBladeScope {}
12
-
13
- export default (args: ListComposableArgs) => {
14
- const factory = useListFactory({
15
- load: async () => {
16
- return {
17
- totalCount: 0,
18
- results: [],
19
- };
20
- },
21
- remove: () => {
22
- throw new Error("Function not implemented.");
23
- },
24
- });
25
-
26
- const { load, remove, items, pagination, loading, query } = factory();
27
- const { openBlade, resolveBladeByName } = useBladeNavigation();
28
-
29
- async function openDetailsBlade(data?: TOpenBladeArgs) {
30
- await openBlade({
31
- blade: resolveBladeByName("{{ModuleNamePascalCase}}Details"),
32
- ...data,
33
- });
34
- }
35
-
36
- const scope: DynamicItemsScope = {
37
- openDetailsBlade,
38
- };
39
-
40
- return {
41
- items,
42
- load,
43
- remove,
44
- loading,
45
- pagination,
46
- query,
47
- scope,
48
- };
49
- };
1
+ import { computed, ref, Ref } from "vue";
2
+ import {
3
+ ListComposableArgs,
4
+ ListBaseBladeScope,
5
+ useBladeNavigation,
6
+ useListFactory,
7
+ type TOpenBladeArgs,
8
+ } from "@vc-shell/framework";
9
+
10
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
11
+ export interface DynamicItemsScope extends ListBaseBladeScope {}
12
+
13
+ export default (args: ListComposableArgs) => {
14
+ const factory = useListFactory({
15
+ load: async () => {
16
+ return {
17
+ totalCount: 0,
18
+ results: [],
19
+ };
20
+ },
21
+ remove: () => {
22
+ throw new Error("Function not implemented.");
23
+ },
24
+ });
25
+
26
+ const { load, remove, items, pagination, loading, query } = factory();
27
+ const { openBlade, resolveBladeByName } = useBladeNavigation();
28
+
29
+ async function openDetailsBlade(data?: TOpenBladeArgs) {
30
+ await openBlade({
31
+ blade: resolveBladeByName("{{ModuleNamePascalCase}}Details"),
32
+ ...data,
33
+ });
34
+ }
35
+
36
+ const scope: DynamicItemsScope = {
37
+ openDetailsBlade,
38
+ };
39
+
40
+ return {
41
+ items,
42
+ load,
43
+ remove,
44
+ loading,
45
+ pagination,
46
+ query,
47
+ scope,
48
+ };
49
+ };
@@ -1,8 +1,8 @@
1
- import * as schema from "./pages";
2
- import * as locales from "./locales";
3
- import * as composables from "./composables";
4
- import { createDynamicAppModule } from "@vc-shell/framework";
5
-
6
- export default createDynamicAppModule({ schema, locales, composables });
7
-
8
- export { schema, composables, locales };
1
+ import * as schema from "./pages";
2
+ import * as locales from "./locales";
3
+ import * as composables from "./composables";
4
+ import { createDynamicAppModule } from "@vc-shell/framework";
5
+
6
+ export default createDynamicAppModule({ schema, locales, composables });
7
+
8
+ export { schema, composables, locales };
@@ -1,35 +1,35 @@
1
- {
2
- "{{ModuleNameUppercaseSnakeCase}}": {
3
- "MENU": {
4
- "TITLE": "{{ModuleNameSentenceCase}}"
5
- },
6
- "PAGES": {
7
- "LIST": {
8
- "TOOLBAR": {
9
- "REFRESH": "Refresh"
10
- },
11
- "SEARCH": {
12
- "PLACEHOLDER": "Search keywords"
13
- },
14
- "TABLE": {
15
- "TOTALS": "Count:",
16
- "HEADER": {},
17
- "EMPTY": {
18
- "TITLE": "There are no content yet",
19
- "ACTION": "Add content"
20
- },
21
- "NOT_FOUND": {
22
- "TITLE": "No content found.",
23
- "ACTION": "Reset search"
24
- }
25
- },
26
- "EMPTY": {
27
- "NO_ITEMS": "There are no items yet"
28
- }
29
- },
30
- "ALERTS": {
31
- "CLOSE_CONFIRMATION": "You have unsaved changes. Close anyway?"
32
- }
33
- }
34
- }
35
- }
1
+ {
2
+ "{{ModuleNameUppercaseSnakeCase}}": {
3
+ "MENU": {
4
+ "TITLE": "{{ModuleNameSentenceCase}}"
5
+ },
6
+ "PAGES": {
7
+ "LIST": {
8
+ "TOOLBAR": {
9
+ "REFRESH": "Refresh"
10
+ },
11
+ "SEARCH": {
12
+ "PLACEHOLDER": "Search keywords"
13
+ },
14
+ "TABLE": {
15
+ "TOTALS": "Count:",
16
+ "HEADER": {},
17
+ "EMPTY": {
18
+ "TITLE": "There are no content yet",
19
+ "ACTION": "Add content"
20
+ },
21
+ "NOT_FOUND": {
22
+ "TITLE": "No content found.",
23
+ "ACTION": "Reset search"
24
+ }
25
+ },
26
+ "EMPTY": {
27
+ "NO_ITEMS": "There are no items yet"
28
+ }
29
+ },
30
+ "ALERTS": {
31
+ "CLOSE_CONFIRMATION": "You have unsaved changes. Close anyway?"
32
+ }
33
+ }
34
+ }
35
+ }
@@ -1,2 +1,2 @@
1
- import * as en from "./en.json";
2
- export { en };
1
+ import * as en from "./en.json";
2
+ export { en };
@@ -1,20 +1,20 @@
1
- import { DynamicDetailsSchema } from "@vc-shell/framework";
2
-
3
- export const details: DynamicDetailsSchema = {
4
- settings: {
5
- url: "/{{ModuleName}}-details",
6
- id: "{{ModuleNamePascalCase}}Details",
7
- localizationPrefix: "{{ModuleNameUppercaseSnakeCase}}",
8
- composable: "use{{ModuleNamePascalCase}}Details",
9
- component: "DynamicBladeForm",
10
- },
11
- content: [
12
- {
13
- id: "dynamicItemForm",
14
- component: "vc-form",
15
- children: [
16
- // You can add fields here
17
- ],
18
- },
19
- ],
20
- };
1
+ import { DynamicDetailsSchema } from "@vc-shell/framework";
2
+
3
+ export const details: DynamicDetailsSchema = {
4
+ settings: {
5
+ url: "/{{ModuleName}}-details",
6
+ id: "{{ModuleNamePascalCase}}Details",
7
+ localizationPrefix: "{{ModuleNameUppercaseSnakeCase}}",
8
+ composable: "use{{ModuleNamePascalCase}}Details",
9
+ component: "DynamicBladeForm",
10
+ },
11
+ content: [
12
+ {
13
+ id: "dynamicItemForm",
14
+ component: "vc-form",
15
+ children: [
16
+ // You can add fields here
17
+ ],
18
+ },
19
+ ],
20
+ };
@@ -1,4 +1,4 @@
1
- import { grid as {{ModuleNameExports}}List } from "./list";
2
- import { details as {{ModuleNameExports}}Details } from "./details";
3
-
4
- export { {{ModuleNameExports}}List, {{ModuleNameExports}}Details };
1
+ import { grid as {{ModuleNameExports}}List } from "./list";
2
+ import { details as {{ModuleNameExports}}Details } from "./details";
3
+
4
+ export { {{ModuleNameExports}}List, {{ModuleNameExports}}Details };