@vc-shell/framework 1.0.227 → 1.0.229

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 (101) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/core/types/index.ts +1 -0
  3. package/dist/core/types/index.d.ts +1 -0
  4. package/dist/core/types/index.d.ts.map +1 -1
  5. package/dist/framework.js +7634 -7633
  6. package/dist/shared/modules/dynamic/components/SchemaRender.d.ts +15 -12
  7. package/dist/shared/modules/dynamic/components/SchemaRender.d.ts.map +1 -1
  8. package/dist/shared/modules/dynamic/components/fields/Button.d.ts +1 -0
  9. package/dist/shared/modules/dynamic/components/fields/Button.d.ts.map +1 -1
  10. package/dist/shared/modules/dynamic/components/fields/Card.d.ts +1 -0
  11. package/dist/shared/modules/dynamic/components/fields/Card.d.ts.map +1 -1
  12. package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts +1 -0
  13. package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts.map +1 -1
  14. package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts +1 -0
  15. package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts.map +1 -1
  16. package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts +1 -0
  17. package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts.map +1 -1
  18. package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts +1 -0
  19. package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts.map +1 -1
  20. package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts +1 -0
  21. package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts.map +1 -1
  22. package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts +1 -0
  23. package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts.map +1 -1
  24. package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts +1 -0
  25. package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts.map +1 -1
  26. package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts +1 -0
  27. package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts.map +1 -1
  28. package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts +1 -0
  29. package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts.map +1 -1
  30. package/dist/shared/modules/dynamic/components/fields/InputField.d.ts +1 -0
  31. package/dist/shared/modules/dynamic/components/fields/InputField.d.ts.map +1 -1
  32. package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts +1 -0
  33. package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts.map +1 -1
  34. package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts +1 -0
  35. package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts.map +1 -1
  36. package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts +1 -0
  37. package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts.map +1 -1
  38. package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts +1 -0
  39. package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts.map +1 -1
  40. package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts +1 -0
  41. package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts.map +1 -1
  42. package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts +1 -0
  43. package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts.map +1 -1
  44. package/dist/shared/modules/dynamic/components/fields/Table.d.ts +1 -0
  45. package/dist/shared/modules/dynamic/components/fields/Table.d.ts.map +1 -1
  46. package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts +1 -0
  47. package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts.map +1 -1
  48. package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts +1 -0
  49. package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts.map +1 -1
  50. package/dist/shared/modules/dynamic/components/fields/props.d.ts +1 -0
  51. package/dist/shared/modules/dynamic/components/fields/props.d.ts.map +1 -1
  52. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts +3 -0
  53. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts.map +1 -1
  54. package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts +3 -0
  55. package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts.map +1 -1
  56. package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts +3 -0
  57. package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts.map +1 -1
  58. package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts +3 -0
  59. package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts.map +1 -1
  60. package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts +3 -0
  61. package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts.map +1 -1
  62. package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts +3 -0
  63. package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts.map +1 -1
  64. package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts +3 -0
  65. package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts.map +1 -1
  66. package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts +3 -0
  67. package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts.map +1 -1
  68. package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts +3 -0
  69. package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts.map +1 -1
  70. package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts +3 -0
  71. package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts.map +1 -1
  72. package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts +3 -0
  73. package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts.map +1 -1
  74. package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts +3 -0
  75. package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts.map +1 -1
  76. package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts +3 -0
  77. package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts.map +1 -1
  78. package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts +3 -0
  79. package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts.map +1 -1
  80. package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts +3 -0
  81. package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts.map +1 -1
  82. package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts +3 -0
  83. package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts.map +1 -1
  84. package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts +3 -0
  85. package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts.map +1 -1
  86. package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts +3 -0
  87. package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts.map +1 -1
  88. package/dist/shared/modules/dynamic/helpers/nodeBuilder.d.ts.map +1 -1
  89. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts +1 -0
  90. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts.map +1 -1
  91. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts +1 -0
  92. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
  93. package/dist/shared/modules/dynamic/types/index.d.ts +22 -12
  94. package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
  95. package/dist/tsconfig.tsbuildinfo +1 -1
  96. package/package.json +4 -4
  97. package/shared/modules/dynamic/components/SchemaRender.ts +8 -0
  98. package/shared/modules/dynamic/factories/base/useDetailsFactory.ts +6 -6
  99. package/shared/modules/dynamic/helpers/nodeBuilder.ts +11 -0
  100. package/shared/modules/dynamic/types/index.ts +27 -12
  101. package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vc-shell/framework",
3
- "version": "1.0.227",
3
+ "version": "1.0.229",
4
4
  "type": "module",
5
5
  "main": "./dist/framework.js",
6
6
  "types": "./dist/index.d.ts",
@@ -60,9 +60,9 @@
60
60
  "devDependencies": {
61
61
  "@types/dompurify": "^3.0.5",
62
62
  "@types/quill": "^2.0.14",
63
- "@vc-shell/api-client-generator": "^1.0.227",
64
- "@vc-shell/config-generator": "^1.0.227",
65
- "@vc-shell/ts-config": "^1.0.227",
63
+ "@vc-shell/api-client-generator": "^1.0.229",
64
+ "@vc-shell/config-generator": "^1.0.229",
65
+ "@vc-shell/ts-config": "^1.0.229",
66
66
  "@vitejs/plugin-vue": "^5.0.3",
67
67
  "sass": "^1.69.6",
68
68
  "shx": "^0.3.4",
@@ -19,6 +19,7 @@ import { visibilityHandler } from "../helpers/visibilityHandler";
19
19
  import { toValue } from "@vueuse/core";
20
20
  import { safeIn } from "../helpers/safeIn";
21
21
  import { unrefNested } from "../helpers/unrefNested";
22
+ import { usePermissions } from "../../../../core/composables";
22
23
 
23
24
  const schemeRenderProps = {
24
25
  context: {
@@ -48,6 +49,7 @@ export default defineComponent({
48
49
  setup(props: ExtractPropTypes<typeof schemeRenderProps>, ctx) {
49
50
  const { currentLocale } = toRefs(props);
50
51
  const internalFormData = reactive({});
52
+ const { hasAccess } = usePermissions();
51
53
 
52
54
  watch(
53
55
  () => props.modelValue,
@@ -70,6 +72,12 @@ export default defineComponent({
70
72
  "div",
71
73
  { class: "tw-flex tw-flex-col tw-gap-4" },
72
74
  props.uiSchema.reduce((arr, field): VNode[] => {
75
+ console.log(field.id, field.permissions, hasAccess(field.permissions));
76
+
77
+ if (safeIn("permissions", field) && !hasAccess(field.permissions)) {
78
+ return arr;
79
+ }
80
+
73
81
  if (
74
82
  safeIn("visibility", field) &&
75
83
  field.visibility?.method &&
@@ -20,8 +20,7 @@ export const useDetailsFactory = <Item extends { id?: string }>(factoryParams: U
20
20
  const itemTemp = ref<Item>();
21
21
  const isModified = ref(false);
22
22
  const isFormValid = useIsFormValid();
23
- let isDirty: Ref<boolean> = useIsFormDirty();
24
- const isDisabled = computed(() => !isDirty.value || !isFormValid.value);
23
+ const isDisabled = computed(() => !isModified.value || !isFormValid.value);
25
24
 
26
25
  const { loading: itemLoading, action: load } = useAsync<ItemId>(async (args?: ItemId) => {
27
26
  item.value = await factoryParams.load(args);
@@ -32,7 +31,6 @@ export const useDetailsFactory = <Item extends { id?: string }>(factoryParams: U
32
31
  if (validationState.value.valid) {
33
32
  const res = await factoryParams.saveChanges?.(item as Item);
34
33
  isModified.value = false;
35
- isDirty = ref(false);
36
34
 
37
35
  const id = item?.id ?? res?.id;
38
36
 
@@ -52,10 +50,13 @@ export const useDetailsFactory = <Item extends { id?: string }>(factoryParams: U
52
50
 
53
51
  const validationState = computed(
54
52
  (): IValidationState<Item> => ({
55
- dirty: isDirty.value || isModified.value,
53
+ /**
54
+ * @deprecated `dirty` - use `modified` instead
55
+ */
56
+ dirty: isModified.value,
56
57
  valid: isFormValid.value,
57
58
  modified: isModified.value,
58
- disabled: isDisabled.value || !isModified.value,
59
+ disabled: isDisabled.value,
59
60
  validated: !isDisabled.value && isModified.value,
60
61
  cachedValue: itemTemp.value,
61
62
  errorBag: errorBag.value,
@@ -89,7 +90,6 @@ export const useDetailsFactory = <Item extends { id?: string }>(factoryParams: U
89
90
 
90
91
  const resetValidationState = () => {
91
92
  isModified.value = false;
92
- isDirty = ref(false);
93
93
  };
94
94
 
95
95
  return {
@@ -12,6 +12,9 @@ import { i18n } from "./../../../../core/plugins/i18n";
12
12
  import { visibilityHandler } from "./visibilityHandler";
13
13
  import { toRefs } from "@vueuse/core";
14
14
  import { unrefNested } from "./unrefNested";
15
+ import { usePermissions } from "../../../../core/composables";
16
+
17
+ const { hasAccess } = usePermissions();
15
18
 
16
19
  function disabledHandler(
17
20
  disabled: { method?: string } | boolean,
@@ -165,6 +168,10 @@ function nodeBuilder<
165
168
  if (toValue(model) && Array.isArray(toValue(model))) {
166
169
  return toValue(model).map((modelItem: ToRefs<{ [x: string]: unknown; id: string }>) => {
167
170
  return controlSchema.fields.reduce((arr, fieldItem) => {
171
+ if (safeIn("permissions", fieldItem) && !hasAccess(fieldItem.permissions)) {
172
+ return arr;
173
+ }
174
+
168
175
  if (
169
176
  safeIn("visibility", fieldItem) &&
170
177
  fieldItem.visibility?.method &&
@@ -190,6 +197,10 @@ function nodeBuilder<
190
197
 
191
198
  return [
192
199
  controlSchema.fields.reduce((arr, field) => {
200
+ if (safeIn("permissions", field) && !hasAccess(field.permissions)) {
201
+ return arr;
202
+ }
203
+
193
204
  if (
194
205
  safeIn("visibility", field) &&
195
206
  field.visibility?.method &&
@@ -65,6 +65,11 @@ export type ToolbarSchema = {
65
65
  title?: string;
66
66
  icon?: string;
67
67
  method: string;
68
+ /**
69
+ * Permissions for the toolbar button. If the user does not have the required permissions, the toolbar button will not be displayed.
70
+ * @type {string | string[]}
71
+ */
72
+ permissions?: string | string[];
68
73
  };
69
74
 
70
75
  export interface SettingsBase {
@@ -277,6 +282,11 @@ export interface SchemaBase {
277
282
  * Adds horizontal separator after component.
278
283
  */
279
284
  horizontalSeparator?: boolean;
285
+ /**
286
+ * Permissions for the component. If the user does not have the required permissions, the component will not be displayed.
287
+ * @type {string | string[]}
288
+ */
289
+ permissions?: string | string[];
280
290
  }
281
291
 
282
292
  /**
@@ -477,7 +487,8 @@ export interface InputSchema extends SchemaBase {
477
487
  * Video schema interface.
478
488
  * @interface
479
489
  */
480
- export interface VideoSchema extends Pick<SchemaBase, "id" | "property" | "label" | "visibility" | "tooltip"> {
490
+ export interface VideoSchema
491
+ extends Pick<SchemaBase, "id" | "property" | "label" | "visibility" | "tooltip" | "permissions"> {
481
492
  /**
482
493
  * Component type for video.
483
494
  * @type {"vc-video"}
@@ -490,7 +501,10 @@ export interface VideoSchema extends Pick<SchemaBase, "id" | "property" | "label
490
501
  * @interface
491
502
  */
492
503
  export interface FieldSchema
493
- extends Pick<SchemaBase, "id" | "property" | "label" | "visibility" | "tooltip" | "horizontalSeparator"> {
504
+ extends Pick<
505
+ SchemaBase,
506
+ "id" | "property" | "label" | "visibility" | "tooltip" | "horizontalSeparator" | "permissions"
507
+ > {
494
508
  /**
495
509
  * Component type for field.
496
510
  * @type {"vc-field"}
@@ -525,7 +539,7 @@ export interface FieldSchema
525
539
  * Image schema interface.
526
540
  * @interface
527
541
  */
528
- export interface ImageSchema extends Pick<SchemaBase, "id" | "property" | "visibility"> {
542
+ export interface ImageSchema extends Pick<SchemaBase, "id" | "property" | "visibility" | "permissions"> {
529
543
  /**
530
544
  * Component type for image.
531
545
  * @type {"vc-image"}
@@ -562,7 +576,7 @@ export interface ImageSchema extends Pick<SchemaBase, "id" | "property" | "visib
562
576
  * Status schema interface.
563
577
  * @interface
564
578
  */
565
- export interface StatusSchema extends Pick<SchemaBase, "id" | "visibility" | "horizontalSeparator"> {
579
+ export interface StatusSchema extends Pick<SchemaBase, "id" | "visibility" | "horizontalSeparator" | "permissions"> {
566
580
  /**
567
581
  * Component type for status.
568
582
  * @type {"vc-status"}
@@ -686,7 +700,7 @@ export interface EditorSchema extends Omit<SchemaBase, "onBlur"> {
686
700
  * @interface
687
701
  */
688
702
  export interface DynamicPropertiesSchema
689
- extends Pick<SchemaBase, "id" | "disabled" | "property" | "visibility" | "horizontalSeparator"> {
703
+ extends Pick<SchemaBase, "id" | "disabled" | "property" | "visibility" | "horizontalSeparator" | "permissions"> {
690
704
  /**
691
705
  * The component type for dynamic properties.
692
706
  * @type {"vc-dynamic-properties"}
@@ -745,7 +759,8 @@ export interface GallerySchema
745
759
  * Interface for a card schema.
746
760
  * @interface
747
761
  */
748
- export interface CardSchema extends RequiredBy<Pick<SchemaBase, "id" | "label" | "visibility">, "label"> {
762
+ export interface CardSchema
763
+ extends RequiredBy<Pick<SchemaBase, "id" | "label" | "visibility" | "permissions">, "label"> {
749
764
  /**
750
765
  * Component type for the card.
751
766
  * @type {"vc-card"}
@@ -784,7 +799,7 @@ export interface CardSchema extends RequiredBy<Pick<SchemaBase, "id" | "label" |
784
799
  variant?: ComponentProps<typeof VcCard>["variant"];
785
800
  }
786
801
 
787
- export interface WidgetsSchema extends Pick<SchemaBase, "id" | "horizontalSeparator"> {
802
+ export interface WidgetsSchema extends Pick<SchemaBase, "id" | "horizontalSeparator" | "permissions"> {
788
803
  component: "vc-widgets";
789
804
  children: string[];
790
805
  }
@@ -842,7 +857,7 @@ export interface RadioButtonSchema extends Omit<SchemaBase, "multilanguage" | "p
842
857
  * Fieldset schema interface.
843
858
  * @interface
844
859
  */
845
- export interface FieldsetSchema extends Pick<SchemaBase, "id" | "visibility" | "horizontalSeparator"> {
860
+ export interface FieldsetSchema extends Pick<SchemaBase, "id" | "visibility" | "horizontalSeparator" | "permissions"> {
846
861
  /**
847
862
  * Component type for the fieldset.
848
863
  * @type {"vc-fieldset"}
@@ -896,7 +911,7 @@ export interface SwitchSchema extends Omit<SchemaBase, "placeholder" | "multilan
896
911
  }
897
912
 
898
913
  export type TableSchema = Omit<ListContentSchema, "filter"> &
899
- Pick<SchemaBase, "id" | "property" | "visibility"> & {
914
+ Pick<SchemaBase, "id" | "property" | "visibility" | "permissions"> & {
900
915
  /**
901
916
  * Configuration for the add new row button in the table.
902
917
  * Used when table is in editing mode.
@@ -923,7 +938,7 @@ export type TableSchema = Omit<ListContentSchema, "filter"> &
923
938
  * Button schema interface.
924
939
  * @interface
925
940
  */
926
- export interface ButtonSchema extends Pick<SchemaBase, "id" | "disabled" | "visibility"> {
941
+ export interface ButtonSchema extends Pick<SchemaBase, "id" | "disabled" | "visibility" | "permissions"> {
927
942
  /**
928
943
  * Component type.
929
944
  * @type {"vc-button"}
@@ -981,7 +996,7 @@ export interface ButtonSchema extends Pick<SchemaBase, "id" | "disabled" | "visi
981
996
  * Custom component schema interface.
982
997
  * @interface
983
998
  */
984
- export interface CustomComponentSchema extends Pick<SchemaBase, "id" | "visibility"> {
999
+ export interface CustomComponentSchema extends Pick<SchemaBase, "id" | "visibility" | "permissions"> {
985
1000
  /**
986
1001
  * Component type for custom component.
987
1002
  * @type {vc-custom}
@@ -1000,7 +1015,7 @@ export interface CustomComponentSchema extends Pick<SchemaBase, "id" | "visibili
1000
1015
  export interface RatingSchema
1001
1016
  extends Pick<
1002
1017
  SchemaBase,
1003
- "id" | "visibility" | "label" | "property" | "tooltip" | "horizontalSeparator" | "placeholder"
1018
+ "id" | "visibility" | "label" | "property" | "tooltip" | "horizontalSeparator" | "placeholder" | "permissions"
1004
1019
  > {
1005
1020
  /**
1006
1021
  * Component type for rating.
@@ -10,7 +10,7 @@
10
10
  :key="item.id"
11
11
  >
12
12
  <VcBladeToolbarButton
13
- v-if="item.isVisible === undefined || item.isVisible"
13
+ v-if="$hasAccess(item.permissions) && (item.isVisible === undefined || item.isVisible)"
14
14
  :is-expanded="isExpanded"
15
15
  :icon="item.icon"
16
16
  :title="unref(item.title)"