@vc-shell/framework 1.0.127 → 1.0.129

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 (328) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/core/api/platform.ts +514 -92
  3. package/core/composables/index.ts +2 -1
  4. package/core/composables/useApiClient/index.ts +1 -7
  5. package/core/composables/useAssets/index.ts +0 -6
  6. package/core/composables/useBeforeUnload/index.ts +20 -0
  7. package/core/composables/useMenuService/index.ts +96 -0
  8. package/core/composables/useNotifications/index.ts +29 -40
  9. package/core/composables/useSettings/index.ts +23 -29
  10. package/core/composables/useUser/index.ts +69 -125
  11. package/core/directives/loading/styles.css +5 -5
  12. package/core/interceptors/index.ts +75 -0
  13. package/core/plugins/i18n/index.ts +1 -0
  14. package/core/plugins/modularity/index.ts +63 -20
  15. package/core/plugins/moment/moment.ts +2 -2
  16. package/core/plugins/signalR/index.ts +24 -4
  17. package/core/types/index.ts +18 -35
  18. package/core/utilities/kebabToCamel.ts +1 -1
  19. package/dist/core/api/platform.d.ts +125 -87
  20. package/dist/core/api/platform.d.ts.map +1 -1
  21. package/dist/core/composables/index.d.ts +2 -1
  22. package/dist/core/composables/index.d.ts.map +1 -1
  23. package/dist/core/composables/useApiClient/index.d.ts.map +1 -1
  24. package/dist/core/composables/useAssets/index.d.ts.map +1 -1
  25. package/dist/core/composables/useBeforeUnload/index.d.ts +5 -0
  26. package/dist/core/composables/useBeforeUnload/index.d.ts.map +1 -0
  27. package/dist/core/composables/useMenuService/index.d.ts +16 -0
  28. package/dist/core/composables/useMenuService/index.d.ts.map +1 -0
  29. package/dist/core/composables/useNotifications/index.d.ts.map +1 -1
  30. package/dist/core/composables/useSettings/index.d.ts +2 -2
  31. package/dist/core/composables/useSettings/index.d.ts.map +1 -1
  32. package/dist/core/composables/useUser/index.d.ts +8 -6
  33. package/dist/core/composables/useUser/index.d.ts.map +1 -1
  34. package/dist/core/interceptors/index.d.ts +3 -0
  35. package/dist/core/interceptors/index.d.ts.map +1 -0
  36. package/dist/core/plugins/i18n/index.d.ts.map +1 -1
  37. package/dist/core/plugins/modularity/index.d.ts +1 -1
  38. package/dist/core/plugins/modularity/index.d.ts.map +1 -1
  39. package/dist/core/plugins/moment/moment.d.ts.map +1 -1
  40. package/dist/core/plugins/signalR/index.d.ts.map +1 -1
  41. package/dist/core/types/index.d.ts +16 -29
  42. package/dist/core/types/index.d.ts.map +1 -1
  43. package/dist/{framework.mjs → framework.js} +31832 -31900
  44. package/dist/index.css +1 -1
  45. package/dist/index.d.ts +5 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/shared/components/app-switcher/components/vc-app-switcher/index.d.ts +1 -19
  48. package/dist/shared/components/app-switcher/components/vc-app-switcher/index.d.ts.map +1 -1
  49. package/dist/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts +3 -0
  50. package/dist/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +1 -1
  51. package/dist/shared/components/blade-navigation/components/vc-blade-navigation/index.d.ts +1 -70
  52. package/dist/shared/components/blade-navigation/components/vc-blade-navigation/index.d.ts.map +1 -1
  53. package/dist/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts +1 -82
  54. package/dist/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +1 -1
  55. package/dist/shared/components/blade-navigation/components/vc-blade-view/vc-blade-view.d.ts +28 -0
  56. package/dist/shared/components/blade-navigation/components/vc-blade-view/vc-blade-view.d.ts.map +1 -0
  57. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts +11 -27
  58. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts.map +1 -1
  59. package/dist/shared/components/blade-navigation/injectionKeys.d.ts +4 -0
  60. package/dist/shared/components/blade-navigation/injectionKeys.d.ts.map +1 -0
  61. package/dist/shared/components/blade-navigation/plugin.d.ts +4 -1
  62. package/dist/shared/components/blade-navigation/plugin.d.ts.map +1 -1
  63. package/dist/shared/components/blade-navigation/types/index.d.ts +48 -35
  64. package/dist/shared/components/blade-navigation/types/index.d.ts.map +1 -1
  65. package/dist/shared/components/error-interceptor/index.d.ts +33 -67
  66. package/dist/shared/components/error-interceptor/index.d.ts.map +1 -1
  67. package/dist/shared/components/index.d.ts +2 -0
  68. package/dist/shared/components/index.d.ts.map +1 -1
  69. package/dist/shared/components/language-selector/index.d.ts +1 -49
  70. package/dist/shared/components/language-selector/index.d.ts.map +1 -1
  71. package/dist/shared/components/language-selector/language-selector.vue.d.ts +1 -40
  72. package/dist/shared/components/language-selector/language-selector.vue.d.ts.map +1 -1
  73. package/dist/{ui/components/organisms/vc-notification-dropdown → shared/components/notification-dropdown}/_internal/notification/notification.vue.d.ts +2 -2
  74. package/dist/shared/components/notification-dropdown/_internal/notification/notification.vue.d.ts.map +1 -0
  75. package/dist/shared/components/notification-dropdown/index.d.ts +7 -0
  76. package/dist/shared/components/notification-dropdown/index.d.ts.map +1 -0
  77. package/dist/shared/components/notification-dropdown/notification-dropdown.vue.d.ts +3 -0
  78. package/dist/shared/components/notification-dropdown/notification-dropdown.vue.d.ts.map +1 -0
  79. package/dist/shared/components/notification-template/index.d.ts +91 -0
  80. package/dist/shared/components/notification-template/index.d.ts.map +1 -0
  81. package/dist/{ui/components/organisms/vc-notification-template/vc-notification-template.vue.d.ts → shared/components/notification-template/notification-template.vue.d.ts} +2 -2
  82. package/dist/shared/components/notification-template/notification-template.vue.d.ts.map +1 -0
  83. package/dist/shared/components/notifications/components/notification-container/index.d.ts +1 -1
  84. package/dist/shared/components/notifications/components/notification-container/index.d.ts.map +1 -1
  85. package/dist/shared/components/popup-handler/composables/usePopup/index.d.ts.map +1 -1
  86. package/dist/shared/components/user-dropdown-button/index.d.ts +10 -16
  87. package/dist/shared/components/user-dropdown-button/index.d.ts.map +1 -1
  88. package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts +7 -4
  89. package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts.map +1 -1
  90. package/dist/shared/index.d.ts +4 -1
  91. package/dist/shared/index.d.ts.map +1 -1
  92. package/dist/shared/modules/assets/components/assets-details/assets-details.vue.d.ts +3 -0
  93. package/dist/shared/modules/assets/components/assets-details/assets-details.vue.d.ts.map +1 -1
  94. package/dist/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts +3 -0
  95. package/dist/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts.map +1 -1
  96. package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts.map +1 -1
  97. package/dist/shared/modules/dynamic/composables/useFilterBuilder/index.d.ts.map +1 -1
  98. package/dist/shared/modules/dynamic/factories/base/useDetailsFactory.d.ts.map +1 -1
  99. package/dist/shared/modules/dynamic/factories/types/index.d.ts +3 -1
  100. package/dist/shared/modules/dynamic/factories/types/index.d.ts.map +1 -1
  101. package/dist/shared/modules/dynamic/index.d.ts +1 -3
  102. package/dist/shared/modules/dynamic/index.d.ts.map +1 -1
  103. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts +12 -10
  104. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts.map +1 -1
  105. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts +5 -2
  106. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
  107. package/dist/shared/modules/dynamic/types/index.d.ts +20 -2
  108. package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
  109. package/dist/shared/pages/InvitePage/components/invite/Invite.vue.d.ts.map +1 -1
  110. package/dist/shared/pages/LoginPage/components/login/Login.vue.d.ts.map +1 -1
  111. package/dist/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue.d.ts.map +1 -1
  112. package/dist/shared/utilities/vueUtils.d.ts.map +1 -1
  113. package/dist/tailwind.config.d.ts +56 -0
  114. package/dist/tailwind.config.d.ts.map +1 -0
  115. package/dist/tsconfig.tsbuildinfo +1 -1
  116. package/dist/ui/components/atoms/vc-badge/index.d.ts +32 -67
  117. package/dist/ui/components/atoms/vc-badge/index.d.ts.map +1 -1
  118. package/dist/ui/components/atoms/vc-badge/vc-badge.vue.d.ts.map +1 -1
  119. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts +6 -1
  120. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts.map +1 -1
  121. package/dist/ui/components/atoms/vc-card/index.d.ts +66 -102
  122. package/dist/ui/components/atoms/vc-card/index.d.ts.map +1 -1
  123. package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts +7 -0
  124. package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts.map +1 -0
  125. package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts +7 -1
  126. package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts.map +1 -1
  127. package/dist/ui/components/atoms/vc-checkbox/index.d.ts +91 -129
  128. package/dist/ui/components/atoms/vc-checkbox/index.d.ts.map +1 -1
  129. package/dist/ui/components/atoms/vc-checkbox/vc-checkbox.vue.d.ts +7 -1
  130. package/dist/ui/components/atoms/vc-checkbox/vc-checkbox.vue.d.ts.map +1 -1
  131. package/dist/ui/components/atoms/vc-col/vc-col.vue.d.ts +6 -1
  132. package/dist/ui/components/atoms/vc-col/vc-col.vue.d.ts.map +1 -1
  133. package/dist/ui/components/atoms/vc-container/index.d.ts +36 -71
  134. package/dist/ui/components/atoms/vc-container/index.d.ts.map +1 -1
  135. package/dist/ui/components/atoms/vc-container/vc-container.vue.d.ts.map +1 -1
  136. package/dist/ui/components/atoms/vc-hint/index.d.ts +8 -38
  137. package/dist/ui/components/atoms/vc-hint/index.d.ts.map +1 -1
  138. package/dist/ui/components/atoms/vc-hint/vc-hint.vue.d.ts.map +1 -1
  139. package/dist/ui/components/atoms/vc-icon/vc-icon.vue.d.ts +3 -0
  140. package/dist/ui/components/atoms/vc-icon/vc-icon.vue.d.ts.map +1 -1
  141. package/dist/ui/components/atoms/vc-image/vc-image.vue.d.ts +3 -0
  142. package/dist/ui/components/atoms/vc-image/vc-image.vue.d.ts.map +1 -1
  143. package/dist/ui/components/atoms/vc-info-row/vc-info-row.vue.d.ts +3 -0
  144. package/dist/ui/components/atoms/vc-info-row/vc-info-row.vue.d.ts.map +1 -1
  145. package/dist/ui/components/atoms/vc-label/index.d.ts +42 -74
  146. package/dist/ui/components/atoms/vc-label/index.d.ts.map +1 -1
  147. package/dist/ui/components/atoms/vc-label/vc-label.vue.d.ts +7 -1
  148. package/dist/ui/components/atoms/vc-label/vc-label.vue.d.ts.map +1 -1
  149. package/dist/ui/components/atoms/vc-link/index.d.ts +32 -66
  150. package/dist/ui/components/atoms/vc-link/index.d.ts.map +1 -1
  151. package/dist/ui/components/atoms/vc-link/vc-link.vue.d.ts.map +1 -1
  152. package/dist/ui/components/atoms/vc-loading/vc-loading.vue.d.ts.map +1 -1
  153. package/dist/ui/components/atoms/vc-progress/index.d.ts +30 -63
  154. package/dist/ui/components/atoms/vc-progress/index.d.ts.map +1 -1
  155. package/dist/ui/components/atoms/vc-progress/vc-progress.vue.d.ts +3 -0
  156. package/dist/ui/components/atoms/vc-progress/vc-progress.vue.d.ts.map +1 -1
  157. package/dist/ui/components/atoms/vc-row/vc-row.vue.d.ts +3 -1
  158. package/dist/ui/components/atoms/vc-row/vc-row.vue.d.ts.map +1 -1
  159. package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts +6 -1
  160. package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts.map +1 -1
  161. package/dist/ui/components/atoms/vc-status-icon/vc-status-icon.vue.d.ts.map +1 -1
  162. package/dist/ui/components/atoms/vc-switch/vc-switch.vue.d.ts.map +1 -1
  163. package/dist/ui/components/atoms/vc-video/vc-video.vue.d.ts +3 -0
  164. package/dist/ui/components/atoms/vc-video/vc-video.vue.d.ts.map +1 -1
  165. package/dist/ui/components/atoms/vc-widget/vc-widget.vue.d.ts.map +1 -1
  166. package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue.d.ts +3 -0
  167. package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue.d.ts.map +1 -1
  168. package/dist/ui/components/molecules/vc-code-editor/index.d.ts +59 -98
  169. package/dist/ui/components/molecules/vc-code-editor/index.d.ts.map +1 -1
  170. package/dist/ui/components/molecules/vc-code-editor/vc-code-editor.vue.d.ts +1 -0
  171. package/dist/ui/components/molecules/vc-code-editor/vc-code-editor.vue.d.ts.map +1 -1
  172. package/dist/ui/components/molecules/vc-editor/vc-editor.vue.d.ts +4 -1
  173. package/dist/ui/components/molecules/vc-editor/vc-editor.vue.d.ts.map +1 -1
  174. package/dist/ui/components/molecules/vc-field/_internal/vc-field-type/vc-field-type.vue.d.ts.map +1 -1
  175. package/dist/ui/components/molecules/vc-field/vc-field.vue.d.ts +3 -0
  176. package/dist/ui/components/molecules/vc-field/vc-field.vue.d.ts.map +1 -1
  177. package/dist/ui/components/molecules/vc-file-upload/index.d.ts +67 -105
  178. package/dist/ui/components/molecules/vc-file-upload/index.d.ts.map +1 -1
  179. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts +3 -0
  180. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts.map +1 -1
  181. package/dist/ui/components/molecules/vc-form/index.d.ts +8 -38
  182. package/dist/ui/components/molecules/vc-form/index.d.ts.map +1 -1
  183. package/dist/ui/components/molecules/vc-form/vc-form.vue.d.ts.map +1 -1
  184. package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts +56 -1
  185. package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
  186. package/dist/ui/components/molecules/vc-input-currency/index.d.ts +159 -214
  187. package/dist/ui/components/molecules/vc-input-currency/index.d.ts.map +1 -1
  188. package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts +3 -0
  189. package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts.map +1 -1
  190. package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.vue.d.ts +27 -9
  191. package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.vue.d.ts.map +1 -1
  192. package/dist/ui/components/molecules/vc-notification/vc-notification.vue.d.ts.map +1 -1
  193. package/dist/ui/components/molecules/vc-pagination/vc-pagination.vue.d.ts +3 -0
  194. package/dist/ui/components/molecules/vc-pagination/vc-pagination.vue.d.ts.map +1 -1
  195. package/dist/ui/components/molecules/vc-rating/index.d.ts +59 -96
  196. package/dist/ui/components/molecules/vc-rating/index.d.ts.map +1 -1
  197. package/dist/ui/components/molecules/vc-rating/vc-rating.vue.d.ts +3 -0
  198. package/dist/ui/components/molecules/vc-rating/vc-rating.vue.d.ts.map +1 -1
  199. package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts +257 -8
  200. package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts.map +1 -1
  201. package/dist/ui/components/molecules/vc-slider/index.d.ts +55 -91
  202. package/dist/ui/components/molecules/vc-slider/index.d.ts.map +1 -1
  203. package/dist/ui/components/molecules/vc-slider/vc-slider.vue.d.ts +3 -0
  204. package/dist/ui/components/molecules/vc-slider/vc-slider.vue.d.ts.map +1 -1
  205. package/dist/ui/components/molecules/vc-textarea/vc-textarea.vue.d.ts +6 -1
  206. package/dist/ui/components/molecules/vc-textarea/vc-textarea.vue.d.ts.map +1 -1
  207. package/dist/ui/components/organisms/index.d.ts +0 -2
  208. package/dist/ui/components/organisms/index.d.ts.map +1 -1
  209. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts +2 -4
  210. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts.map +1 -1
  211. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue.d.ts +10 -7
  212. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue.d.ts.map +1 -1
  213. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue.d.ts +10 -18
  214. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue.d.ts.map +1 -1
  215. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts +16 -16
  216. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts.map +1 -1
  217. package/dist/ui/components/organisms/vc-app/index.d.ts +1 -292
  218. package/dist/ui/components/organisms/vc-app/index.d.ts.map +1 -1
  219. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts +17 -56
  220. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
  221. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts.map +1 -1
  222. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts +3 -0
  223. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts.map +1 -1
  224. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue.d.ts +3 -0
  225. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue.d.ts.map +1 -1
  226. package/dist/ui/components/organisms/vc-blade/index.d.ts +89 -131
  227. package/dist/ui/components/organisms/vc-blade/index.d.ts.map +1 -1
  228. package/dist/ui/components/organisms/vc-blade/vc-blade.vue.d.ts +3 -0
  229. package/dist/ui/components/organisms/vc-blade/vc-blade.vue.d.ts.map +1 -1
  230. package/dist/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue.d.ts +21 -18
  231. package/dist/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue.d.ts.map +1 -1
  232. package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts +4 -1
  233. package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts.map +1 -1
  234. package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-preview/vc-gallery-preview.vue.d.ts +4 -1
  235. package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-preview/vc-gallery-preview.vue.d.ts.map +1 -1
  236. package/dist/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts +3 -0
  237. package/dist/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts.map +1 -1
  238. package/dist/ui/components/organisms/vc-login-form/index.d.ts +32 -66
  239. package/dist/ui/components/organisms/vc-login-form/index.d.ts.map +1 -1
  240. package/dist/ui/components/organisms/vc-login-form/vc-login-form.vue.d.ts +3 -0
  241. package/dist/ui/components/organisms/vc-login-form/vc-login-form.vue.d.ts.map +1 -1
  242. package/dist/ui/components/organisms/vc-popup/_internal/vc-popup-error/vc-popup-error.vue.d.ts.map +1 -1
  243. package/dist/ui/components/organisms/vc-popup/_internal/vc-popup-warning/vc-popup-warning.vue.d.ts.map +1 -1
  244. package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +1 -1
  245. package/dist/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts +3 -0
  246. package/dist/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts.map +1 -1
  247. package/dist/ui/components/organisms/vc-table/_internal/vc-table-counter/vc-table-counter.vue.d.ts +3 -0
  248. package/dist/ui/components/organisms/vc-table/_internal/vc-table-counter/vc-table-counter.vue.d.ts.map +1 -1
  249. package/dist/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue.d.ts +3 -0
  250. package/dist/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue.d.ts.map +1 -1
  251. package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts +57 -6
  252. package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
  253. package/dist/ui/types/index.d.ts +5 -45
  254. package/dist/ui/types/index.d.ts.map +1 -1
  255. package/package.json +24 -28
  256. package/shared/components/app-switcher/components/vc-app-switcher/index.ts +1 -3
  257. package/shared/components/app-switcher/composables/useAppSwitcher/index.ts +3 -3
  258. package/shared/components/blade-navigation/components/vc-blade-navigation/index.ts +1 -3
  259. package/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue +46 -157
  260. package/shared/components/blade-navigation/components/vc-blade-view/vc-blade-view.ts +81 -0
  261. package/shared/components/blade-navigation/composables/useBladeNavigation/index.ts +323 -261
  262. package/shared/components/blade-navigation/injectionKeys.ts +4 -0
  263. package/shared/components/blade-navigation/plugin.ts +8 -10
  264. package/shared/components/blade-navigation/types/index.ts +53 -44
  265. package/shared/components/index.ts +2 -0
  266. package/shared/components/language-selector/language-selector.vue +12 -12
  267. package/{ui/components/organisms/vc-notification-dropdown → shared/components/notification-dropdown}/_internal/notification/notification.vue +6 -5
  268. package/shared/components/notification-dropdown/index.ts +10 -0
  269. package/{ui/components/organisms/vc-notification-dropdown/vc-notification-dropdown.vue → shared/components/notification-dropdown/notification-dropdown.vue} +21 -17
  270. package/shared/components/notification-template/index.ts +10 -0
  271. package/{ui/components/organisms/vc-notification-template/vc-notification-template.vue → shared/components/notification-template/notification-template.vue} +2 -2
  272. package/shared/components/popup-handler/composables/usePopup/index.ts +29 -9
  273. package/shared/components/user-dropdown-button/user-dropdown-button.vue +58 -17
  274. package/shared/index.ts +3 -2
  275. package/shared/locales/en.json +7 -0
  276. package/shared/modules/assets/components/assets-details/assets-details.vue +5 -0
  277. package/shared/modules/assets-manager/components/assets-manager/assets-manager.vue +8 -5
  278. package/shared/modules/dynamic/components/fields/GalleryField.ts +7 -7
  279. package/shared/modules/dynamic/components/fields/InputCurrency.ts +2 -1
  280. package/shared/modules/dynamic/composables/useFilterBuilder/index.ts +42 -36
  281. package/shared/modules/dynamic/factories/base/useDetailsFactory.ts +5 -3
  282. package/shared/modules/dynamic/factories/types/index.ts +6 -2
  283. package/shared/modules/dynamic/helpers/override.ts +38 -32
  284. package/shared/modules/dynamic/helpers/safeIn.ts +1 -1
  285. package/shared/modules/dynamic/index.ts +12 -12
  286. package/shared/modules/dynamic/pages/dynamic-blade-form.vue +96 -57
  287. package/shared/modules/dynamic/pages/dynamic-blade-list.vue +150 -114
  288. package/shared/modules/dynamic/types/index.ts +22 -2
  289. package/shared/pages/InvitePage/components/invite/Invite.vue +2 -2
  290. package/shared/pages/LoginPage/components/login/Login.vue +23 -16
  291. package/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue +3 -3
  292. package/shared/utilities/vueUtils.ts +7 -7
  293. package/ui/components/atoms/vc-button/vc-button.vue +1 -1
  294. package/ui/components/atoms/vc-card/vc-card.stories.ts +25 -0
  295. package/ui/components/atoms/vc-card/vc-card.vue +1 -1
  296. package/ui/components/atoms/vc-container/vc-container.vue +1 -1
  297. package/ui/components/atoms/vc-icon/vc-icon.vue +1 -1
  298. package/ui/components/molecules/vc-editor/vc-editor.vue +2 -7
  299. package/ui/components/molecules/vc-notification/vc-notification.vue +2 -2
  300. package/ui/components/molecules/vc-select/vc-select.vue +13 -13
  301. package/ui/components/organisms/index.ts +0 -2
  302. package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +25 -42
  303. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +123 -25
  304. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue +11 -103
  305. package/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +34 -52
  306. package/ui/components/organisms/vc-app/index.ts +1 -12
  307. package/ui/components/organisms/vc-app/vc-app.stories.ts +36 -36
  308. package/ui/components/organisms/vc-app/vc-app.vue +122 -61
  309. package/ui/components/organisms/vc-blade/vc-blade.vue +5 -13
  310. package/ui/components/organisms/vc-table/vc-table.vue +19 -11
  311. package/ui/locales/en.json +2 -4
  312. package/ui/types/index.ts +7 -51
  313. package/core/composables/useMenuComposer/index.ts +0 -25
  314. package/dist/core/composables/useMenuComposer/index.d.ts +0 -12
  315. package/dist/core/composables/useMenuComposer/index.d.ts.map +0 -1
  316. package/dist/ui/components/organisms/vc-notification-dropdown/_internal/notification/notification.vue.d.ts.map +0 -1
  317. package/dist/ui/components/organisms/vc-notification-dropdown/index.d.ts +0 -38
  318. package/dist/ui/components/organisms/vc-notification-dropdown/index.d.ts.map +0 -1
  319. package/dist/ui/components/organisms/vc-notification-dropdown/vc-notification-dropdown.vue.d.ts +0 -21
  320. package/dist/ui/components/organisms/vc-notification-dropdown/vc-notification-dropdown.vue.d.ts.map +0 -1
  321. package/dist/ui/components/organisms/vc-notification-template/index.d.ts +0 -2
  322. package/dist/ui/components/organisms/vc-notification-template/index.d.ts.map +0 -1
  323. package/dist/ui/components/organisms/vc-notification-template/vc-notification-template.vue.d.ts.map +0 -1
  324. package/dist/vite.config.d.ts +0 -3
  325. package/dist/vite.config.d.ts.map +0 -1
  326. package/tailwind.config.js +0 -50
  327. package/ui/components/organisms/vc-notification-dropdown/index.ts +0 -3
  328. package/ui/components/organisms/vc-notification-template/index.ts +0 -1
@@ -1,5 +1,6 @@
1
1
  <template>
2
2
  <VcBlade
3
+ v-if="!composables"
3
4
  v-loading="loading"
4
5
  :expanded="expanded"
5
6
  :closable="closable"
@@ -77,10 +78,21 @@ import {
77
78
  } from "vue";
78
79
  import { DynamicDetailsSchema, FormContentSchema, SettingsSchema } from "../types";
79
80
  import { reactiveComputed, useMounted } from "@vueuse/core";
80
- import { DetailsBladeContext, DetailsBaseBladeScope, IParentCallArgs, UseDetails, usePopup } from "../../../index";
81
+ import {
82
+ DetailsBladeContext,
83
+ DetailsBaseBladeScope,
84
+ IParentCallArgs,
85
+ UseDetails,
86
+ usePopup,
87
+ useBladeNavigation,
88
+ } from "../../../index";
81
89
  import SchemaRender from "../components/SchemaRender";
82
90
  import { VcSelect } from "../../../../ui/components";
83
91
  import { toolbarReducer } from "../helpers/toolbarReducer";
92
+ import { onBeforeRouteLeave } from "vue-router";
93
+ import { useBeforeUnload } from "../../../../core/composables/useBeforeUnload";
94
+ import * as _ from "lodash-es";
95
+ import { IBladeToolbar } from "../../../../core/types";
84
96
 
85
97
  interface Props {
86
98
  expanded?: boolean;
@@ -105,19 +117,29 @@ const props = withDefaults(defineProps<Props>(), {
105
117
  closable: true,
106
118
  });
107
119
 
108
- defineOptions({
109
- isBladeComponent: true,
110
- });
111
-
112
120
  const emit = defineEmits<Emits>();
113
121
 
114
122
  const { t } = useI18n({ useScope: "global" });
115
123
 
116
124
  const { showConfirmation } = usePopup();
117
125
 
118
- const { loading, item, validationState, scope, load, remove, saveChanges, bladeTitle } = props.composables?.[
119
- props.model?.settings?.composable ?? ""
120
- ]({ emit, props, mounted: useMounted() }) as UseDetails<Record<string, any>, DetailsBaseBladeScope>;
126
+ const { currentBladeNavigationData } = useBladeNavigation();
127
+
128
+ const { loading, item, validationState, scope, load, remove, saveChanges, bladeTitle } = props.composables
129
+ ? (props.composables?.[props.model?.settings?.composable ?? ""]({ emit, props, mounted: useMounted() }) as UseDetails<
130
+ Record<string, any>,
131
+ DetailsBaseBladeScope
132
+ >)
133
+ : ({
134
+ loading: true,
135
+ item: undefined,
136
+ validationState: undefined,
137
+ scope: undefined,
138
+ load: undefined,
139
+ remove: undefined,
140
+ saveChanges: undefined,
141
+ bladeTitle: undefined,
142
+ } as unknown as UseDetails<Record<string, any>, DetailsBaseBladeScope>);
121
143
 
122
144
  const title = ref();
123
145
  const isReady = ref(false);
@@ -125,19 +147,26 @@ const isReady = ref(false);
125
147
  const unwatchTitle = watch(
126
148
  () => bladeTitle?.value,
127
149
  (newVal) => {
128
- if (newVal) {
150
+ if (newVal && props.composables) {
129
151
  title.value = newVal;
130
152
 
131
153
  nextTick(() => unwatchTitle());
132
154
  }
133
155
  },
134
- { immediate: true }
156
+ { immediate: true },
157
+ );
158
+
159
+ useBeforeUnload(
160
+ computed(() => {
161
+ const toolBarSave = _.get(toValue(scope)?.toolbarOverrides, "saveChanges") as unknown as IBladeToolbar;
162
+ return !unref(toolBarSave && "disabled" in toolBarSave && toolBarSave.disabled) || validationState.value.validated;
163
+ }),
135
164
  );
136
165
 
137
166
  const settings = computed(() => props.model?.settings);
138
167
 
139
168
  const form = computed(
140
- (): FormContentSchema => props.model?.content.find((x) => x?.component === "vc-form") as FormContentSchema
169
+ (): FormContentSchema => props.model?.content.find((x) => x?.component === "vc-form") as FormContentSchema,
141
170
  );
142
171
 
143
172
  const widgets = computed(() => props.model?.content.find((x) => x?.component === "vc-widgets"));
@@ -201,48 +230,69 @@ const bladeOptions = reactive({
201
230
  status: bladeStatus,
202
231
  });
203
232
 
204
- const toolbarComputed = toolbarReducer({
205
- defaultToolbarSchema: settings.value?.toolbar ?? [],
206
- defaultToolbarBindings: {
207
- saveChanges: {
208
- async clickHandler() {
209
- if (item.value) {
210
- await saveChanges(item.value);
211
-
212
- emit("parent:call", {
213
- method: "reload",
214
- });
215
- if (!props.param) {
216
- emit("close:blade");
217
- }
218
- }
219
- },
220
- disabled: computed(() => !validationState.value.validated),
221
- },
222
- remove: {
223
- async clickHandler() {
224
- if (
225
- await showConfirmation(
226
- computed(() => t(`${settings.value?.localizationPrefix.trim().toUpperCase()}.PAGES.DETAILS.ALERTS.DELETE`))
227
- )
228
- ) {
229
- if (props.param) {
230
- await remove?.({ id: props.param });
233
+ const toolbarComputed =
234
+ props.composables &&
235
+ toolbarReducer({
236
+ defaultToolbarSchema: settings.value?.toolbar ?? [],
237
+ defaultToolbarBindings: {
238
+ saveChanges: {
239
+ async clickHandler() {
240
+ if (item.value) {
241
+ await saveChanges(item.value);
242
+
231
243
  emit("parent:call", {
232
244
  method: "reload",
233
245
  });
234
- emit("close:blade");
246
+ if (!props.param) {
247
+ emit("close:blade");
248
+ }
249
+ }
250
+ },
251
+ // TODO validate fields without validation
252
+ disabled: computed(() => !validationState.value.validated),
253
+ },
254
+ remove: {
255
+ async clickHandler() {
256
+ if (
257
+ await showConfirmation(
258
+ computed(() => t(`${settings.value?.localizationPrefix.trim().toUpperCase()}.PAGES.ALERTS.DELETE`)),
259
+ )
260
+ ) {
261
+ if (props.param) {
262
+ await remove?.({ id: props.param });
263
+ emit("parent:call", {
264
+ method: "reload",
265
+ });
266
+ emit("close:blade");
267
+ }
235
268
  }
236
- }
269
+ },
270
+ disabled: computed(() => toValue(scope)?.disabled),
237
271
  },
238
- disabled: computed(() => toValue(scope)?.disabled),
239
272
  },
240
- },
241
- customToolbarConfig: toValue(scope)?.toolbarOverrides,
242
- context: bladeContext.value,
243
- });
273
+ customToolbarConfig: toValue(scope)?.toolbarOverrides,
274
+ context: bladeContext.value,
275
+ });
244
276
 
245
277
  onBeforeMount(async () => {
278
+ if (props.composables) await init();
279
+ });
280
+
281
+ onBeforeRouteLeave(async (to, from) => {
282
+ if (
283
+ currentBladeNavigationData.value?.fullPath &&
284
+ !to.path.includes(currentBladeNavigationData.value?.fullPath) &&
285
+ validationState.value.modified
286
+ ) {
287
+ return await showConfirmation(
288
+ unref(
289
+ computed(() => t(`${settings.value?.localizationPrefix.trim().toUpperCase()}.PAGES.ALERTS.CLOSE_CONFIRMATION`)),
290
+ ),
291
+ );
292
+ }
293
+ });
294
+
295
+ async function init() {
246
296
  if (props.param) {
247
297
  await load({ id: props.param });
248
298
  }
@@ -250,21 +300,10 @@ onBeforeMount(async () => {
250
300
  await nextTick(() => {
251
301
  isReady.value = true;
252
302
  });
253
- });
254
-
255
- async function onBeforeClose() {
256
- if (validationState.value.modified) {
257
- return await showConfirmation(
258
- unref(
259
- computed(() => t(`${settings.value?.localizationPrefix.trim().toUpperCase()}.PAGES.ALERTS.CLOSE_CONFIRMATION`))
260
- )
261
- );
262
- }
263
303
  }
264
304
 
265
305
  defineExpose({
266
- title: bladeTitle,
267
- onBeforeClose,
306
+ title: bladeTitle ?? "",
268
307
  ...scope?.value,
269
308
  });
270
309
  </script>
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <component
3
3
  :is="isWidgetView ? 'template' : 'VcBlade'"
4
+ v-if="!composables"
4
5
  :expanded="expanded"
5
6
  :closable="closable"
6
7
  width="50%"
@@ -27,9 +28,9 @@
27
28
  class="tw-grow tw-basis-0"
28
29
  :loading="loading"
29
30
  :expanded="expanded"
30
- :columns="(tableData?.columns as ITableColumns[])"
31
- :state-key="stateKey"
32
- :items="(itemsProxy as Record<string, any>[])"
31
+ :columns="(tableData?.columns as ITableColumns[]) ?? []"
32
+ :state-key="stateKey ?? ''"
33
+ :items="itemsProxy as Record<string, any>[]"
33
34
  :multiselect="isWidgetView ? false : tableData?.multiselect"
34
35
  :header="isWidgetView ? false : tableData?.header"
35
36
  :footer="!isWidgetView"
@@ -61,7 +62,7 @@
61
62
 
62
63
  <!-- Not found template -->
63
64
  <template #notfound>
64
- <template v-if="bladeOptions.notFound">
65
+ <template v-if="bladeOptions?.notFound">
65
66
  <component
66
67
  :is="bladeOptions.notFound"
67
68
  @reset="resetSearch"
@@ -83,9 +84,12 @@
83
84
 
84
85
  <!-- Empty template -->
85
86
  <template #empty>
86
- <template v-if="bladeOptions.empty">
87
+ <template v-if="bladeOptions?.empty">
87
88
  <component
88
89
  :is="bladeOptions.empty"
90
+ :class="{
91
+ 'tw-py-6': isWidgetView,
92
+ }"
89
93
  @add="openDetailsBlade"
90
94
  ></component>
91
95
  </template>
@@ -113,7 +117,7 @@
113
117
  <!-- Override table mobile view -->
114
118
 
115
119
  <template
116
- v-if="bladeOptions.mobileView"
120
+ v-if="bladeOptions?.mobileView"
117
121
  #mobile-item="itemData"
118
122
  >
119
123
  <component
@@ -129,7 +133,6 @@
129
133
  /* eslint-disable @typescript-eslint/no-explicit-any */
130
134
  import {
131
135
  Ref,
132
- VNode,
133
136
  computed,
134
137
  inject,
135
138
  onMounted,
@@ -144,6 +147,7 @@ import {
144
147
  ShallowRef,
145
148
  ConcreteComponent,
146
149
  ComputedRef,
150
+ onBeforeMount,
147
151
  } from "vue";
148
152
  import { useI18n } from "vue-i18n";
149
153
  import { DynamicGridSchema, ListContentSchema, SettingsSchema } from "../types";
@@ -189,20 +193,16 @@ const { debounce } = useFunctions();
189
193
 
190
194
  const emit = defineEmits<Emits>();
191
195
 
192
- defineOptions({
193
- isBladeComponent: true,
194
- });
195
-
196
196
  const settings = computed(() => props.model?.settings);
197
197
  const title = computed(() => settings.value?.titleTemplate);
198
198
  const allSelected = ref(false);
199
199
  const searchValue = ref();
200
- const selectedItemId = ref();
201
- const sort = ref("createdDate:DESC");
202
- const selectedIds = ref<string[]>([]);
200
+ const selectedItemId = shallowRef();
201
+ const sort = shallowRef("createdDate:DESC");
202
+ const selectedIds = shallowRef<string[]>([]);
203
203
  const isDesktop = inject("isDesktop") as Ref<boolean>;
204
204
  const itemsProxy = ref<Record<string, any>[]>();
205
- const modified = ref(false);
205
+ const modified = shallowRef(false);
206
206
 
207
207
  const { moduleNotifications, markAsRead } = useNotifications(settings.value?.pushNotificationType);
208
208
 
@@ -210,7 +210,7 @@ watch(
210
210
  moduleNotifications,
211
211
  (newVal) => {
212
212
  newVal.forEach((message) => {
213
- if (message.title) {
213
+ if (message.title && props.composables) {
214
214
  notification.success(message.title, {
215
215
  onClose() {
216
216
  markAsRead(message);
@@ -219,24 +219,67 @@ watch(
219
219
  }
220
220
  });
221
221
  },
222
- { deep: true }
222
+ { deep: true },
223
223
  );
224
224
 
225
- const tableData = computed(() => props.model?.content.find((type: ListContentSchema) => type.component === "vc-table"));
226
- const stateKey = computed(() => {
227
- if (tableData.value?.id) {
228
- return tableData.value?.id + props.isWidgetView ? "_dashboard" : "";
229
- }
225
+ const tableData =
226
+ props.composables &&
227
+ computed(() => props.model?.content.find((type: ListContentSchema) => type.component === "vc-table"));
228
+ const stateKey =
229
+ props.composables &&
230
+ computed(() => {
231
+ if (tableData?.value?.id) {
232
+ return tableData.value?.id + props.isWidgetView ? "_dashboard" : "";
233
+ }
230
234
 
231
- throw new Error('Table id is not defined. Please provide "id" property in table schema');
232
- });
233
- const table = computed(() => {
234
- const tableScope = {
235
- columns: tableData.value?.columns,
236
- };
235
+ throw new Error('Table id is not defined. Please provide "id" property in table schema');
236
+ });
237
237
 
238
- return tableScope;
239
- });
238
+ const { load, remove, items, loading, pagination, query, scope } = props.composables
239
+ ? (props.composables?.[props.model?.settings?.composable ?? ""]({
240
+ emit,
241
+ props,
242
+ mounted: useMounted(),
243
+ }) as UseList<Record<string, any>[], Record<string, any>, ListBaseBladeScope>)
244
+ : ({
245
+ load: ref(true),
246
+ remove: undefined,
247
+ items: undefined,
248
+ loading: undefined,
249
+ pagination: undefined,
250
+ query: undefined,
251
+ scope: undefined,
252
+ } as unknown as UseList<Record<string, any>[], Record<string, any>, ListBaseBladeScope>);
253
+
254
+ if (props.isWidgetView) {
255
+ query.value.take = 5;
256
+ }
257
+
258
+ const calculateColumns = (columns: ListContentSchema["columns"]) => {
259
+ const result = columns?.map((column) => {
260
+ if (typeof column.visible !== "boolean" && column.visible?.method) {
261
+ const result =
262
+ typeof scope?.value[column.visible?.method] === "function"
263
+ ? scope?.value[column.visible?.method]()
264
+ : scope?.value[column.visible?.method];
265
+
266
+ column.visible = result;
267
+ }
268
+ return column;
269
+ });
270
+
271
+ return result;
272
+ };
273
+
274
+ const table =
275
+ props.composables &&
276
+ computed(() => {
277
+ const tableScope = {
278
+ columns: calculateColumns(tableData?.value?.columns),
279
+ };
280
+
281
+ return tableScope;
282
+ });
240
283
 
241
284
  const bladeOptions = reactive({
242
285
  tableData,
@@ -247,18 +290,6 @@ const bladeOptions = reactive({
247
290
  empty: resolveTemplateComponent("emptyTemplate"),
248
291
  });
249
292
 
250
- const { load, remove, items, loading, pagination, query, scope } = props.composables?.[
251
- props.model?.settings?.composable ?? ""
252
- ]({
253
- emit,
254
- props,
255
- mounted: useMounted(),
256
- }) as UseList<Record<string, any>[], Record<string, any>, ListBaseBladeScope>;
257
-
258
- if (props.isWidgetView) {
259
- query.value.take = 5;
260
- }
261
-
262
293
  const {
263
294
  filterComponent,
264
295
  activeFilterCount,
@@ -282,67 +313,53 @@ const bladeContext = ref<ListBladeContext>({
282
313
  settings: settings as ComputedRef<SettingsSchema>,
283
314
  });
284
315
 
285
- const toolbarComputed = toolbarReducer({
286
- defaultToolbarSchema: settings.value?.toolbar ?? [],
287
- defaultToolbarBindings: {
288
- save: {
289
- clickHandler() {
290
- emit("close:blade");
316
+ const toolbarComputed =
317
+ props.composables &&
318
+ toolbarReducer({
319
+ defaultToolbarSchema: settings.value?.toolbar ?? [],
320
+ defaultToolbarBindings: {
321
+ save: {
322
+ clickHandler() {
323
+ emit("close:blade");
324
+ },
325
+ disabled: computed(() => !modified.value),
291
326
  },
292
- disabled: computed(() => !modified.value),
293
- },
294
- openAddBlade: {
295
- async clickHandler() {
296
- if (
297
- scope &&
298
- "openDetailsBlade" in toValue(scope) &&
299
- toValue(scope).openDetailsBlade &&
300
- typeof toValue(scope).openDetailsBlade === "function"
301
- ) {
302
- toValue(scope).openDetailsBlade();
303
- } else throw new Error("openDetailsBlade method is not defined in scope");
327
+ openAddBlade: {
328
+ async clickHandler() {
329
+ if (
330
+ scope &&
331
+ "openDetailsBlade" in toValue(scope) &&
332
+ toValue(scope).openDetailsBlade &&
333
+ typeof toValue(scope).openDetailsBlade === "function"
334
+ ) {
335
+ toValue(scope).openDetailsBlade();
336
+ } else throw new Error("openDetailsBlade method is not defined in scope");
337
+ },
304
338
  },
305
- },
306
- refresh: {
307
- async clickHandler() {
308
- await reload();
339
+ refresh: {
340
+ async clickHandler() {
341
+ await reload();
342
+ },
309
343
  },
310
- },
311
- removeItems: {
312
- async clickHandler() {
313
- removeItems();
344
+ removeItems: {
345
+ async clickHandler() {
346
+ removeItems();
347
+ },
348
+ disabled: computed(() => !selectedIds.value?.length),
349
+ isVisible: isDesktop.value,
314
350
  },
315
- disabled: computed(() => !selectedIds.value?.length),
316
- isVisible: isDesktop.value,
317
351
  },
318
- },
319
- customToolbarConfig: toValue(scope)?.toolbarOverrides,
320
- context: bladeContext.value,
321
- });
322
-
323
- onMounted(async () => {
324
- await load({ ...query.value, sort: sort.value });
325
- });
326
-
327
- watch(
328
- () => itemsProxy.value,
329
- (newVal) => {
330
- modified.value = !_.isEqual(newVal, items.value);
331
- },
332
- { deep: true }
333
- );
334
-
335
- watch(sort, async (value) => {
336
- await load({ ...query.value, sort: value });
337
- });
352
+ customToolbarConfig: toValue(scope)?.toolbarOverrides,
353
+ context: bladeContext.value,
354
+ });
338
355
 
339
- watch(items, (newVal) => {
340
- itemsProxy.value = newVal;
356
+ onBeforeMount(async () => {
357
+ if (props.composables) await load({ ...query.value, sort: sort.value });
341
358
  });
342
359
 
343
360
  watch(
344
361
  () => props.param,
345
- (newVal) => {
362
+ async (newVal) => {
346
363
  if (newVal) {
347
364
  if (
348
365
  scope &&
@@ -350,7 +367,7 @@ watch(
350
367
  toValue(scope).openDetailsBlade &&
351
368
  typeof toValue(scope).openDetailsBlade === "function"
352
369
  ) {
353
- toValue(scope).openDetailsBlade({
370
+ await toValue(scope).openDetailsBlade({
354
371
  param: newVal,
355
372
  onOpen() {
356
373
  selectedItemId.value = newVal;
@@ -362,10 +379,26 @@ watch(
362
379
  }
363
380
  }
364
381
  },
365
- { immediate: true }
382
+ { immediate: true },
366
383
  );
367
384
 
368
- const openDetailsBlade = () => {
385
+ watch(
386
+ () => itemsProxy.value,
387
+ (newVal) => {
388
+ modified.value = !_.isEqual(newVal, items.value);
389
+ },
390
+ { deep: true },
391
+ );
392
+
393
+ watch(sort, async (value) => {
394
+ await load({ ...query.value, sort: value });
395
+ });
396
+
397
+ watch(items, (newVal) => {
398
+ itemsProxy.value = newVal;
399
+ });
400
+
401
+ const openDetailsBlade = async () => {
369
402
  if (!props.isWidgetView) {
370
403
  if (
371
404
  scope &&
@@ -373,7 +406,7 @@ const openDetailsBlade = () => {
373
406
  toValue(scope).openDetailsBlade &&
374
407
  typeof toValue(scope).openDetailsBlade === "function"
375
408
  ) {
376
- toValue(scope).openDetailsBlade();
409
+ await toValue(scope).openDetailsBlade();
377
410
  }
378
411
  } else {
379
412
  emit("add");
@@ -420,10 +453,10 @@ async function removeItems() {
420
453
  `${settings.value?.localizationPrefix.trim().toUpperCase()}.PAGES.LIST.DELETE_SELECTED_CONFIRMATION.ALL`,
421
454
  {
422
455
  totalCount: pagination.value.totalCount,
423
- }
456
+ },
424
457
  )
425
458
  : selectedIds.value.length,
426
- })
459
+ }),
427
460
  )
428
461
  ) {
429
462
  emit("close:children");
@@ -509,27 +542,30 @@ async function resetSearch() {
509
542
 
510
543
  function templateOverrideComponents(): Record<string, ShallowRef<ConcreteComponent>> {
511
544
  return {
512
- ...table.value.columns?.reduce((acc, curr) => {
513
- if ("customTemplate" in curr && curr.customTemplate) {
514
- if (!("component" in curr.customTemplate)) {
515
- throw new Error(
516
- `Component name must be provided in 'customTemplate' property, column: ${JSON.stringify(curr)}`
517
- );
518
- } else if ("component" in curr.customTemplate && curr.customTemplate.component) {
519
- const component = resolveComponent(curr.customTemplate.component);
520
-
521
- if (typeof component !== "string") {
522
- acc[curr.id] = shallowRef(component);
545
+ ...table?.value.columns?.reduce(
546
+ (acc, curr) => {
547
+ if ("customTemplate" in curr && curr.customTemplate) {
548
+ if (!("component" in curr.customTemplate)) {
549
+ throw new Error(
550
+ `Component name must be provided in 'customTemplate' property, column: ${JSON.stringify(curr)}`,
551
+ );
552
+ } else if ("component" in curr.customTemplate && curr.customTemplate.component) {
553
+ const component = resolveComponent(curr.customTemplate.component);
554
+
555
+ if (typeof component !== "string") {
556
+ acc[curr.id] = shallowRef(component);
557
+ }
523
558
  }
524
559
  }
525
- }
526
- return acc;
527
- }, {} as Record<string, ShallowRef<ConcreteComponent>>),
560
+ return acc;
561
+ },
562
+ {} as Record<string, ShallowRef<ConcreteComponent>>,
563
+ ),
528
564
  };
529
565
  }
530
566
 
531
567
  function resolveTemplateComponent(name: keyof ListContentSchema) {
532
- if (!tableData.value) return;
568
+ if (!tableData?.value) return;
533
569
  const value = tableData.value[name];
534
570
  if (value && typeof value === "object" && "component" in value) {
535
571
  const componentName = value.component;
@@ -10,6 +10,7 @@ import {
10
10
  } from "./../../../../ui/components";
11
11
  import { ITableColumns, IValidationRules } from "../../../../core/types";
12
12
  import type { ComponentProps } from "./../../../utilities/vueUtils";
13
+ import { MenuItemConfig } from "../../../components/blade-navigation/types";
13
14
 
14
15
  export type KeysOfUnion<T> = T extends T ? keyof T : never;
15
16
 
@@ -106,6 +107,20 @@ export interface SettingsBase {
106
107
  * This option is used to determine which view should be the default view.
107
108
  */
108
109
  isWorkspace?: boolean;
110
+ /**
111
+ * Blade menu item
112
+ * @description If not set - blade will not be added to the menu
113
+ *
114
+ * @example
115
+ * {
116
+ * title: "Products",
117
+ * icon: "fas fa-box-open",
118
+ * group: "Products",
119
+ * }
120
+ * @type {{title: string, icon: string, path: string/string}}
121
+ * @default undefined
122
+ */
123
+ menuItem?: MenuItemConfig;
109
124
  }
110
125
 
111
126
  export interface ListContentSchema {
@@ -114,13 +129,18 @@ export interface ListContentSchema {
114
129
  filter?: FilterSchema;
115
130
  multiselect?: boolean;
116
131
  header?: boolean;
117
- columns?: (ITableColumns & {
132
+ columns?: (Omit<ITableColumns, "visible"> & {
118
133
  id: string;
119
134
  title: string;
120
135
  sortable?: boolean;
121
136
  alwaysVisible?: boolean;
122
137
  type?: string;
123
138
  customTemplate?: GridTemplateOverride;
139
+ visible?:
140
+ | boolean
141
+ | {
142
+ method: string;
143
+ };
124
144
  })[];
125
145
  reorderableRows?: boolean;
126
146
  mobileTemplate?: {
@@ -793,7 +813,7 @@ export interface OverridesUpsert extends OverridesReplace {
793
813
  export interface OverridesReplace {
794
814
  path: string;
795
815
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
796
- value: ControlSchema | SettingsSchema["toolbar"][number] | string | boolean;
816
+ value: ControlSchema | SettingsSchema["toolbar"][number] | SettingsSchema["menuItem"] | string | boolean;
797
817
  id: string;
798
818
  }
799
819