@fernir2/saas-kit-cli 0.1.4 → 0.1.5

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 (303) hide show
  1. package/package.json +211 -7
  2. package/cli/.gitlab-ci.yml +0 -14
  3. package/cli/.husky/commit-msg +0 -1
  4. package/cli/.husky/pre-commit +0 -1
  5. package/cli/README.md +0 -101
  6. package/cli/bin/index.ts +0 -358
  7. package/cli/drizzle.config.ts +0 -12
  8. package/cli/global-setup.ts +0 -25
  9. package/cli/npm-commands/gen-meta/index.ts +0 -3
  10. package/cli/npm-commands/gen-schema/index.ts +0 -5
  11. package/cli/npm-commands/migrate-db/index.ts +0 -5
  12. package/cli/npm-commands/migrate-db/migrate-db.ts +0 -15
  13. package/cli/npm-commands/seed-db/index.ts +0 -5
  14. package/cli/npm-commands/seed-db/seed-db.ts +0 -15
  15. package/cli/playwright.config.ts +0 -34
  16. package/cli/postcss.config.mjs +0 -9
  17. package/cli/server.ts +0 -41
  18. package/cli/src/app/api/v1/[resourceName]/[id]/route.ts/route.ts +0 -11
  19. package/cli/src/app/api/v1/[resourceName]/route.ts/route.ts +0 -14
  20. package/cli/src/app/api/v1/[resourceName]/upsert/route.ts/route.ts +0 -3
  21. package/cli/src/app/api/v1/log/route.ts/route.ts +0 -7
  22. package/cli/src/app/api/v1/otheruser/[id]/route.ts/route.ts +0 -14
  23. package/cli/src/app/api/v1/otheruser/route.ts/route.ts +0 -7
  24. package/cli/src/app/api/v1/password/forgotpassword/route.ts/route.ts +0 -3
  25. package/cli/src/app/api/v1/password/resetpassword/route.ts/route.ts +0 -3
  26. package/cli/src/app/api/v1/payment/method/route.ts/route.ts +0 -4
  27. package/cli/src/app/api/v1/payment/route.ts/route.ts +0 -3
  28. package/cli/src/app/api/v1/payment/verify-fail/route.ts/route.ts +0 -3
  29. package/cli/src/app/api/v1/payment/verify-success/route.ts/route.ts +0 -3
  30. package/cli/src/app/api/v1/preload/route.ts/route.ts +0 -3
  31. package/cli/src/app/api/v1/searchable-resources/route.ts/route.ts +0 -11
  32. package/cli/src/app/api/v1/searchresult/route.ts/route.ts +0 -35
  33. package/cli/src/app/api/v1/sign-in/route.ts/route.ts +0 -3
  34. package/cli/src/app/api/v1/sign-out/route.ts/route.ts +0 -3
  35. package/cli/src/app/api/v1/sign-up/route.ts/route.ts +0 -3
  36. package/cli/src/app/api/v1/subscription/cancel/route.ts/route.ts +0 -3
  37. package/cli/src/app/api/v1/subscription/create/route.ts/route.ts +0 -3
  38. package/cli/src/app/api/v1/subscription/update/route.ts/route.ts +0 -3
  39. package/cli/src/app/api/v1/uimeta/route.ts/route.ts +0 -3
  40. package/cli/src/app/api/v1/uimetas/route.ts/route.ts +0 -3
  41. package/cli/src/app/api/v1/userpermission/route.ts/route.ts +0 -3
  42. package/cli/src/app/api/v1/visible-workspace/route.ts/route.ts +0 -5
  43. package/cli/src/app/api/v1/workspace/change/route.ts/route.ts +0 -5
  44. package/cli/src/app/favicon.ico +0 -0
  45. package/cli/src/app/layout.tsx +0 -42
  46. package/cli/src/app/page.tsx +0 -9
  47. package/cli/tailwind.config.ts +0 -13
  48. package/packages/base-repo/tools/git/commit-msg-script.ts +0 -42
  49. package/packages/base-repo/tools/git/pre-commit-script.ts +0 -431
  50. package/packages/level2/client/components/error-fallback/FdErrorFallback.jsx +0 -14
  51. package/packages/level2/client/components/feed/FdFeed.funcs.jsx +0 -65
  52. package/packages/level2/client/components/feed/FdFeed.jsx +0 -34
  53. package/packages/level2/client/components/feed/FdFeedActions.jsx +0 -15
  54. package/packages/level2/client/components/feed/FdFeedComments.jsx +0 -6
  55. package/packages/level2/client/components/feed/FdFeedEntry.jsx +0 -36
  56. package/packages/level2/client/components/feed/FdFeedHeader.jsx +0 -23
  57. package/packages/level2/client/components/feed/FdFeedReactionsSummary.jsx +0 -16
  58. package/packages/level2/client/components/providers/FdProviders.jsx +0 -28
  59. package/packages/level2/client/components/subscription-plan/FdSubscriptionPlan.jsx +0 -163
  60. package/packages/level2/client/components/wizard/FdWizard.jsx +0 -45
  61. package/packages/level2/client/components/wizard/FdWizardStepper.jsx +0 -55
  62. package/packages/level2/client/pages/dashboard-page/DashbordPage.jsx +0 -46
  63. package/packages/level2/client/pages/dynamic-layout-page/DynamicLayoutPage.jsx +0 -22
  64. package/packages/level2/client/pages/edit-password-page/EditPasswordPage.jsx +0 -8
  65. package/packages/level2/client/pages/edit-user-by-id-page/EditUserByIdPage.jsx +0 -14
  66. package/packages/level2/client/pages/edit-user-page/EditUserPage.jsx +0 -6
  67. package/packages/level2/client/pages/feed-page/FeedPage.jsx +0 -8
  68. package/packages/level2/client/pages/file-upload-page/FileUploadPage.jsx +0 -7
  69. package/packages/level2/client/pages/forgot-password-page/ForgotPasswordPage.jsx +0 -8
  70. package/packages/level2/client/pages/leads-viw-page/LeadsViewPage.jsx +0 -6
  71. package/packages/level2/client/pages/microsoft-page/MicrosoftPage.jsx +0 -16
  72. package/packages/level2/client/pages/payment-plan-page/PaymentPlanPage.jsx +0 -18
  73. package/packages/level2/client/pages/preload-page/PreloadPage.jsx +0 -25
  74. package/packages/level2/client/pages/reset-password-page/ResetPasswordPage.jsx +0 -8
  75. package/packages/level2/client/pages/screenshot-page/TestScreenshotPage.jsx +0 -23
  76. package/packages/level2/client/pages/sign-in-page/SignInPage.jsx +0 -24
  77. package/packages/level2/client/pages/sign-up-page/SignUpPage.jsx +0 -9
  78. package/packages/level2/client/pages/status-board-page/StatusBoardPage.jsx +0 -6
  79. package/packages/level2/client/pages/test-layout/TestLayout.jsx +0 -11
  80. package/packages/level2/client/pages/test-page/TestPage.jsx +0 -12
  81. package/packages/level2/client/pages/user-list-page/UserListPage.jsx +0 -4
  82. package/packages/level2/client/pages/view-page/ViewPage.jsx +0 -21
  83. package/packages/level2/client/payments/change-payment-method-field/ChangePaymentMethodField.jsx +0 -48
  84. package/packages/level2/client/payments/checkout-form/CheckoutForm.jsx +0 -95
  85. package/packages/level2/client/payments/checkout-form/CheckoutFormSubmit.jsx +0 -11
  86. package/packages/level2/client/payments/checkout-form/checkout-form-fields.jsx +0 -68
  87. package/packages/level2/client/website-scan/FdWebsiteScanResult.funcs.jsx +0 -12
  88. package/packages/level2/client/website-scan/FdWebsiteScanResult.jsx +0 -33
  89. package/packages/level2/client/website-scan/website-scan-data.jsx +0 -28
  90. package/packages/level2/client/website-scan/website-scan-icons/FacebookIcon.jsx +0 -6
  91. package/packages/level2/client/website-scan/website-scan-icons/FacebookPixelIcon.jsx +0 -49
  92. package/packages/level2/client/website-scan/website-scan-icons/GoogleAnalyticsIcon.jsx +0 -7
  93. package/packages/level2/client/website-scan/website-scan-icons/InstagramIcon.jsx +0 -32
  94. package/packages/level2/client/website-scan/website-scan-icons/LinkedinIcon.jsx +0 -6
  95. package/packages/level2/client/website-scan/website-scan-icons/OtherPlatformIcon.jsx +0 -110
  96. package/packages/level2/client/website-scan/website-scan-icons/ShopifyIcon.jsx +0 -46
  97. package/packages/level2/client/website-scan/website-scan-icons/SquarespaceIcon.jsx +0 -57
  98. package/packages/level2/client/website-scan/website-scan-icons/TiktokIcon.jsx +0 -15
  99. package/packages/level2/client/website-scan/website-scan-icons/WixIcon.jsx +0 -62
  100. package/packages/level2/client/website-scan/website-scan-icons/WordpressIcon.jsx +0 -53
  101. package/packages/level2/client/website-scan/website-scan-icons/XIcon.jsx +0 -6
  102. package/packages/level2/fd-app-toolbox/edit-other-user/EditOtherUser.jsx +0 -7
  103. package/packages/level2/fd-app-toolbox/edit-password-form/EditPasswordForm.jsx +0 -68
  104. package/packages/level2/fd-app-toolbox/edit-user-form/EditUserForm.jsx +0 -122
  105. package/packages/level2/fd-app-toolbox/edit-user-sheet/EditUserSheet.jsx +0 -35
  106. package/packages/level2/fd-app-toolbox/forgot-password-form/ForgotPasswordForm.jsx +0 -87
  107. package/packages/level2/fd-app-toolbox/layout/client-layout/ClientLayout.jsx +0 -19
  108. package/packages/level2/fd-app-toolbox/layout/client-root/ClientRoot.jsx +0 -32
  109. package/packages/level2/fd-app-toolbox/layout/hamburger-menu/FdHamburgerMenu.jsx +0 -47
  110. package/packages/level2/fd-app-toolbox/layout/navbar/FdNarrowNavbar.jsx +0 -40
  111. package/packages/level2/fd-app-toolbox/layout/sidebar/FdSidebar.jsx +0 -48
  112. package/packages/level2/fd-app-toolbox/layout/sidebar/sidebar-dropdown-menu/FdDropdownMenuItemTitle.jsx +0 -12
  113. package/packages/level2/fd-app-toolbox/layout/sidebar/sidebar-dropdown-menu/FdSidebarDropdownMenu.jsx +0 -81
  114. package/packages/level2/fd-app-toolbox/layout/sidebar/sidebar-resources-provider.jsx +0 -30
  115. package/packages/level2/fd-app-toolbox/layout/toolbar/FdToolbar.jsx +0 -89
  116. package/packages/level2/fd-app-toolbox/layout/toolbar/FdTopNav.jsx +0 -42
  117. package/packages/level2/fd-app-toolbox/layout/toolbar/title-provider/ToolbarTitleProvider.jsx +0 -10
  118. package/packages/level2/fd-app-toolbox/login-form/LoginForm.jsx +0 -165
  119. package/packages/level2/fd-app-toolbox/menu/notifications-menu/FdNotificationMenu.jsx +0 -43
  120. package/packages/level2/fd-app-toolbox/menu/notifications-menu/notification-list/FdNotificationList.jsx +0 -53
  121. package/packages/level2/fd-app-toolbox/menu/top-menu/FdTopMenu.jsx +0 -28
  122. package/packages/level2/fd-app-toolbox/menu/top-menu/top-menu-group/FdTopMenuGroup.jsx +0 -35
  123. package/packages/level2/fd-app-toolbox/menu/top-menu/top-menu-item/FdTopMenuItem.jsx +0 -47
  124. package/packages/level2/fd-app-toolbox/menu/user-dropdown-menu/FdUserDropdownMenu.jsx +0 -122
  125. package/packages/level2/fd-app-toolbox/menu/user-dropdown-menu/user-dropdown-menu-item/FdUserDropdownMenuItem.jsx +0 -56
  126. package/packages/level2/fd-app-toolbox/menu/visible-workspace-picker/FdVisibleWorkspacePicker.jsx +0 -36
  127. package/packages/level2/fd-app-toolbox/menu/workspace-picker/FdWorkspacePicker.jsx +0 -47
  128. package/packages/level2/fd-app-toolbox/providers/ThemeProvider/ThemeProvider.jsx +0 -27
  129. package/packages/level2/fd-app-toolbox/providers/auth-provider/AuthProvider.jsx +0 -38
  130. package/packages/level2/fd-app-toolbox/providers/sidebar-provider/FdSidebarContext.jsx +0 -17
  131. package/packages/level2/fd-app-toolbox/register-form/RegisterForm.jsx +0 -119
  132. package/packages/level2/fd-app-toolbox/report/FdChart.jsx +0 -120
  133. package/packages/level2/fd-app-toolbox/report/ReportChart.jsx +0 -29
  134. package/packages/level2/fd-app-toolbox/reset-password-form/ResetPasswordForm.jsx +0 -81
  135. package/packages/level2/fd-app-toolbox/search/FdSearch.jsx +0 -56
  136. package/packages/level2/fd-app-toolbox/search/search-dialog/FdSearchDialog.jsx +0 -72
  137. package/packages/level2/fd-app-toolbox/search/search-dialog-provider.jsx +0 -16
  138. package/packages/level2/fd-app-toolbox/search/search-input/FdSearchInput.jsx +0 -49
  139. package/packages/level2/fd-app-toolbox/search/search-resource-results/FdSearchResourcesResults.jsx +0 -36
  140. package/packages/level2/fd-app-toolbox/search/search-result/FdSearchResult.jsx +0 -46
  141. package/packages/level2/fd-app-toolbox/search/search-searchable-resource-results/FdSearchSearchableResourceResult.jsx +0 -43
  142. package/packages/level2/fd-app-toolbox/search/search-searchable-resource-results/FdSearchSearchableResourceResults.jsx +0 -22
  143. package/packages/level2/fd-app-toolbox/server/layout/private-layout/PrivateLayout.jsx +0 -32
  144. package/packages/level2/fd-app-toolbox/status-board/FdStatusBoard.jsx +0 -49
  145. package/packages/level2/fd-app-toolbox/status-board/status-board-item/FdStatusBoardItem.jsx +0 -17
  146. package/packages/level2/fd-app-toolbox/status-board/status-board-status/FdStatusBoardStatus.jsx +0 -27
  147. package/packages/level2/fd-app-toolbox/user-list/UserList.jsx +0 -58
  148. package/packages/level2/fd-component-toolbox/animation/FdLabelAnimation.jsx +0 -55
  149. package/packages/level2/fd-component-toolbox/avatar/FdAvatar.jsx +0 -50
  150. package/packages/level2/fd-component-toolbox/back-button/FdBackButton.jsx +0 -21
  151. package/packages/level2/fd-component-toolbox/badge/FdBadge.jsx +0 -19
  152. package/packages/level2/fd-component-toolbox/badge-toggle-list/FdBadgeToggleList.jsx +0 -47
  153. package/packages/level2/fd-component-toolbox/button/FdButton.jsx +0 -64
  154. package/packages/level2/fd-component-toolbox/calendar/FdCalendar.jsx +0 -68
  155. package/packages/level2/fd-component-toolbox/card/FdCard.jsx +0 -56
  156. package/packages/level2/fd-component-toolbox/card/FdCardBigDigits.jsx +0 -25
  157. package/packages/level2/fd-component-toolbox/chart/FdChart.jsx +0 -269
  158. package/packages/level2/fd-component-toolbox/checkbox/FdCheckbox.jsx +0 -39
  159. package/packages/level2/fd-component-toolbox/command/FdCommand.jsx +0 -123
  160. package/packages/level2/fd-component-toolbox/datepicker/FdDatePicker.jsx +0 -155
  161. package/packages/level2/fd-component-toolbox/dialog/FdDialog.jsx +0 -106
  162. package/packages/level2/fd-component-toolbox/dialog/YesOrNoDialog.jsx +0 -57
  163. package/packages/level2/fd-component-toolbox/drag-and-drop/FdDragDropContext.jsx +0 -19
  164. package/packages/level2/fd-component-toolbox/drag-and-drop/FdDraggable.jsx +0 -27
  165. package/packages/level2/fd-component-toolbox/drag-and-drop/FdDroppable.jsx +0 -22
  166. package/packages/level2/fd-component-toolbox/dropdown-menu/FdDropdownMenu.jsx +0 -198
  167. package/packages/level2/fd-component-toolbox/dynamic-layout/FdDynamicComponent.jsx +0 -27
  168. package/packages/level2/fd-component-toolbox/dynamic-layout/FdDynamicLayoutDragAndDrop.jsx +0 -78
  169. package/packages/level2/fd-component-toolbox/fade-out-text/FdFadeOutText.jsx +0 -52
  170. package/packages/level2/fd-component-toolbox/form/FdForm.jsx +0 -146
  171. package/packages/level2/fd-component-toolbox/icon/FdIcon.jsx +0 -192
  172. package/packages/level2/fd-component-toolbox/icon/custom-icons/FdFilterIcon.jsx +0 -11
  173. package/packages/level2/fd-component-toolbox/image/FdImage.jsx +0 -15
  174. package/packages/level2/fd-component-toolbox/input/FdInput.jsx +0 -94
  175. package/packages/level2/fd-component-toolbox/label/FdLabel.jsx +0 -19
  176. package/packages/level2/fd-component-toolbox/link/FdLink.jsx +0 -23
  177. package/packages/level2/fd-component-toolbox/list/FdList.jsx +0 -20
  178. package/packages/level2/fd-component-toolbox/list/list-item/FdListItem.jsx +0 -46
  179. package/packages/level2/fd-component-toolbox/loading/FdLoadingIndicator.jsx +0 -7
  180. package/packages/level2/fd-component-toolbox/logos/FacebookLogo.jsx +0 -11
  181. package/packages/level2/fd-component-toolbox/logos/GoogleLogo.jsx +0 -12
  182. package/packages/level2/fd-component-toolbox/logos/MicrosoftLogo.jsx +0 -11
  183. package/packages/level2/fd-component-toolbox/markdown/FdMarkdown.jsx +0 -105
  184. package/packages/level2/fd-component-toolbox/markdown/markdown-parser.jsx +0 -72
  185. package/packages/level2/fd-component-toolbox/multiselect/FdMultiselect.jsx +0 -240
  186. package/packages/level2/fd-component-toolbox/navigation/FdNavigation.jsx +0 -43
  187. package/packages/level2/fd-component-toolbox/navigation/navigation-item/FdNavigationItem.jsx +0 -23
  188. package/packages/level2/fd-component-toolbox/radio-group/FdRadioGroup.jsx +0 -46
  189. package/packages/level2/fd-component-toolbox/rich-text/FdRichText.jsx +0 -58
  190. package/packages/level2/fd-component-toolbox/save-status/FdSaveStatus.jsx +0 -40
  191. package/packages/level2/fd-component-toolbox/select/FdSelect.jsx +0 -173
  192. package/packages/level2/fd-component-toolbox/separator/FdSeparator.jsx +0 -19
  193. package/packages/level2/fd-component-toolbox/sheet/FdSheet.jsx +0 -121
  194. package/packages/level2/fd-component-toolbox/slide-toggle/FdSlideToggle.jsx +0 -57
  195. package/packages/level2/fd-component-toolbox/spinner/Spinner.jsx +0 -36
  196. package/packages/level2/fd-component-toolbox/subheading/FdSubHeading.jsx +0 -12
  197. package/packages/level2/fd-component-toolbox/switch/FdSwitch.jsx +0 -55
  198. package/packages/level2/fd-component-toolbox/tabs/FdTabs.jsx +0 -53
  199. package/packages/level2/fd-component-toolbox/textarea/FdTextArea.jsx +0 -42
  200. package/packages/level2/fd-component-toolbox/toaster/FdToaster.jsx +0 -20
  201. package/packages/level2/fd-component-toolbox/tooltip/FdTooltip.jsx +0 -80
  202. package/packages/level2/meta/browsers/base-multi-browser/FdBaseMultiBrowser.jsx +0 -72
  203. package/packages/level2/meta/browsers/base-multi-browser/base-multi-browser-dialog/FdBaseMultiBrowserDialog.jsx +0 -159
  204. package/packages/level2/meta/browsers/browser/FdBrowser.jsx +0 -58
  205. package/packages/level2/meta/browsers/browser/browser-dialog/FdBrowserDialog.jsx +0 -89
  206. package/packages/level2/meta/browsers/many-to-many-browser/FdManyToManyBrowser.jsx +0 -33
  207. package/packages/level2/meta/browsers/multi-browser/FdMultiBrowser.jsx +0 -32
  208. package/packages/level2/meta/card-list/FdCardList.jsx +0 -40
  209. package/packages/level2/meta/card-list/card/FdCard.jsx +0 -44
  210. package/packages/level2/meta/card-list/card/action-block/FdCardActionBlock.jsx +0 -70
  211. package/packages/level2/meta/card-list/card/content-block/FdCardContentBlock.jsx +0 -64
  212. package/packages/level2/meta/card-list/card/image-block/FdCardImage.jsx +0 -10
  213. package/packages/level2/meta/client/framework/hooks.jsx +0 -39
  214. package/packages/level2/meta/comment/FdComment.jsx +0 -16
  215. package/packages/level2/meta/comment/FdCommentList.jsx +0 -32
  216. package/packages/level2/meta/components/edit-image/FdEditImage.jsx +0 -42
  217. package/packages/level2/meta/components/edit-image/FdEditImageActionMenu.jsx +0 -31
  218. package/packages/level2/meta/components/edit-image/FdEditImageDropdownMenu.jsx +0 -42
  219. package/packages/level2/meta/components/file-upload/FileUpload.jsx +0 -103
  220. package/packages/level2/meta/components/file-upload/PreviewMedia.jsx +0 -36
  221. package/packages/level2/meta/components/multi-list/FdMultiList.jsx +0 -65
  222. package/packages/level2/meta/components/multi-list/FdMultiListEditResource.jsx +0 -31
  223. package/packages/level2/meta/edit-resource/FdEditResource.jsx +0 -135
  224. package/packages/level2/meta/edit-resource/FdEditResourceFormBody.jsx +0 -8
  225. package/packages/level2/meta/edit-resource/FdEditResourceHeader.jsx +0 -43
  226. package/packages/level2/meta/edit-resource/FdEditResourceSheet.jsx +0 -70
  227. package/packages/level2/meta/edit-resource/SaveCompleteProvider.jsx +0 -16
  228. package/packages/level2/meta/edit-resource/edit-link/FdEditLink.jsx +0 -48
  229. package/packages/level2/meta/edit-resource/edit-link/FdEditLinkResource.jsx +0 -18
  230. package/packages/level2/meta/edit-resource/edit-resource-dialog/FdEditResourceDialog.jsx +0 -34
  231. package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceBlobField.jsx +0 -15
  232. package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceEnumField.jsx +0 -35
  233. package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceFlagsEnumField.jsx +0 -23
  234. package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceImageField.jsx +0 -7
  235. package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourcePropertyBlock.jsx +0 -38
  236. package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceRichTextField.jsx +0 -16
  237. package/packages/level2/meta/edit-resource/edit-resource-property-block/edit-resource-fields.jsx +0 -53
  238. package/packages/level2/meta/edit-resource/edit-resource-property-field/FdEditResourcePropertyField.jsx +0 -105
  239. package/packages/level2/meta/filtering/filter/FdEnumFlagFilter.jsx +0 -40
  240. package/packages/level2/meta/filtering/filter/FdFilter.jsx +0 -123
  241. package/packages/level2/meta/filtering/filter/filters/BooleanFilter.jsx +0 -25
  242. package/packages/level2/meta/filtering/filter/filters/DateFilter.jsx +0 -10
  243. package/packages/level2/meta/filtering/filter/filters/EnumFilter.jsx +0 -44
  244. package/packages/level2/meta/filtering/filter/filters/GuidFilter.jsx +0 -28
  245. package/packages/level2/meta/filtering/filter/filters/IntegerFilter.jsx +0 -28
  246. package/packages/level2/meta/filtering/filter/filters/TextFilter.jsx +0 -11
  247. package/packages/level2/meta/filtering/resource-filter-list/FdResourceFilterList.jsx +0 -120
  248. package/packages/level2/meta/filtering/resource-filter-list/resource-list-dropdown-menu/ResourceListDropdownMenu.funcs.jsx +0 -4
  249. package/packages/level2/meta/filtering/resource-filter-list/resource-list-dropdown-menu/ResourceListDropdownMenu.jsx +0 -43
  250. package/packages/level2/meta/providers/global-provider/FdGlobalContext.jsx +0 -17
  251. package/packages/level2/meta/resource-list/ResourceList.jsx +0 -63
  252. package/packages/level2/meta/resource-list/resource-add-button.jsx +0 -11
  253. package/packages/level2/meta/resource-list/resource-list-card/FdResourceListCard.jsx +0 -7
  254. package/packages/level2/meta/resource-list/resource-list-filter/FdResourceListFilter.jsx +0 -11
  255. package/packages/level2/meta/resource-list/resource-table-list/FdResourceTableList.jsx +0 -14
  256. package/packages/level2/meta/table/FdTable.jsx +0 -147
  257. package/packages/level2/meta/table/body/FdTableBody.jsx +0 -9
  258. package/packages/level2/meta/table/body-cell/FdActionBodyCell.jsx +0 -145
  259. package/packages/level2/meta/table/body-cell/FdBlobBodyCell.jsx +0 -27
  260. package/packages/level2/meta/table/body-cell/FdBodyCell.jsx +0 -133
  261. package/packages/level2/meta/table/body-cell/FdBodyCellValue.jsx +0 -59
  262. package/packages/level2/meta/table/body-cell/FdBodyExpandCell.jsx +0 -6
  263. package/packages/level2/meta/table/body-cell/FdBodyExpandPropertyCell.jsx +0 -22
  264. package/packages/level2/meta/table/body-cell/FdCustomActionLink.jsx +0 -16
  265. package/packages/level2/meta/table/body-cell/FdMultiselectCellTemplate.jsx +0 -39
  266. package/packages/level2/meta/table/body-cell/FdViewCell.jsx +0 -12
  267. package/packages/level2/meta/table/body-row/FdTableBodyRow.jsx +0 -49
  268. package/packages/level2/meta/table/header/FdTableHeader.jsx +0 -54
  269. package/packages/level2/meta/table/header-cell/FdResizable.jsx +0 -18
  270. package/packages/level2/meta/table/header-cell/FdResizableEdgeHandle.jsx +0 -4
  271. package/packages/level2/meta/table/header-cell/FdTableHeaderActionCell.jsx +0 -49
  272. package/packages/level2/meta/table/header-cell/FdTableHeaderCell.jsx +0 -89
  273. package/packages/level2/meta/table/header-cell/FdTableHeaderCellActionButton.jsx +0 -23
  274. package/packages/level2/meta/table/pager/FdPager.jsx +0 -72
  275. package/packages/level2/meta/table/table-custom-action/TableCustomAction.jsx +0 -26
  276. package/packages/level2/meta/view/FdView.jsx +0 -31
  277. package/packages/level2/meta/view/FdViewSheet.jsx +0 -103
  278. package/packages/level2/meta/view/view-resource/FdViewResource.jsx +0 -108
  279. package/packages/level2/meta/view/view-resource/templates/ManyToOneTableHeaderCellTemplate.jsx +0 -13
  280. package/src/app/error.jsx +0 -5
  281. package/src/app/global-error.jsx +0 -5
  282. package/src/app/loading.jsx +0 -11
  283. package/src/hd/footer/HdFooter.jsx +0 -27
  284. package/src/hd/footer/hd-footer-item/HdFooterItem.jsx +0 -14
  285. package/src/lm/ai-scan/AiScanAction.jsx +0 -21
  286. package/src/lm/ai-scan/cell-templates/AiScanWebsiteResultCellTemplate.jsx +0 -31
  287. package/src/lm/components/LmCardReport.jsx +0 -12
  288. package/src/lm/configs/lm-list-configs.jsx +0 -72
  289. package/src/lm/google-place/action-dropdown/GooglePlaceActionDropdown.jsx +0 -42
  290. package/src/lm/google-place/actions/GooglePlaceSaveToGroupAction.jsx +0 -22
  291. package/src/lm/google-place/cell-templates/GooglePlaceBusinessInfoCellTemplate.jsx +0 -59
  292. package/src/lm/google-place/cell-templates/GooglePlaceEmailsCellTemplate.jsx +0 -34
  293. package/src/lm/google-place/cell-templates/GooglePlaceScanAction.jsx +0 -15
  294. package/src/lm/lead/action-dropdown/LeadActionDropdown.jsx +0 -39
  295. package/src/lm/lead/actions/move-to-group-action/LeadMoveToGroupAction.jsx +0 -28
  296. package/src/lm/lead/cell-templates/LeadBusinessInfoCellTemplate.jsx +0 -64
  297. package/src/lm/lead/cell-templates/LeadScanAction.jsx +0 -15
  298. package/src/lm/lead/lead-google-place/LeadGooglePlaceIndicator.jsx +0 -8
  299. package/src/lm/lead/lead-google-place/LeadGooglePlaceIndicators.jsx +0 -17
  300. package/src/lm/lead/lead-google-place/LeadGooglePlaceInfo.jsx +0 -15
  301. package/src/lm/lead/view/LeadsView.jsx +0 -8
  302. package/src/lm/pages/HomePage.jsx +0 -53
  303. package/types-output/tsconfig.tsbuildinfo +0 -1
@@ -1,42 +0,0 @@
1
- import React, { useEffect, useMemo, useState, useCallback } from "react";
2
- import { cn } from "@fd-toolbox/lib/utils";
3
- import FdLabelAnimation from "@fd-component-toolbox/animation/FdLabelAnimation";
4
- import { useHover } from "@fd-toolbox/hooks/use-hover";
5
- import { onIncomingValueChange, onTextAreaBlur, onTextAreaValueChange, } from "@fd-component-toolbox/textarea/FdTextArea.funcs";
6
- /**
7
- * Textarea component with animated label
8
- *
9
- * @param FdTextareaProps {@link FdTextareaProps}
10
- *
11
- * @example
12
- * ```tsx
13
- * function MyComponent() {
14
- * const [text, setText] = useState('');
15
- *
16
- * return (
17
- * <FdTextarea label="Description" value={text} onChange={setText} placeholder="Enter description"/>
18
- * );
19
- * }
20
- * ```
21
- */
22
- export function FdTextarea({ placeholder, onChange, label, value, onBlur, skipAnimationOnce, className, ref, ...props }) {
23
- const isError = props["aria-invalid"] && props["aria-invalid"] !== "false";
24
- const [isInputHovered, hoverHandlers] = useHover();
25
- const [isInFocus, setIsInFocus] = useState(false);
26
- const [textareaValue, setTextareaValue] = useState("");
27
- useEffect(() => {
28
- onIncomingValueChange(value, setTextareaValue);
29
- }, [value]);
30
- const onTextAreaValueChangeCallback = useCallback((e) => {
31
- onTextAreaValueChange(e, setTextareaValue, onChange);
32
- }, [onChange]);
33
- const onTextAreaBlurCallback = useCallback((e) => {
34
- onTextAreaBlur(e, setIsInFocus, onBlur);
35
- }, [onBlur]);
36
- const shouldLabelAnimate = useMemo(() => !!value || !!placeholder || isInFocus, [value, placeholder, isInFocus]);
37
- return (<div className="relative">
38
- <textarea ref={ref} onChange={onTextAreaValueChangeCallback} value={textareaValue} className={cn("flex h-20 w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm placeholder:text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50", isError && "border-destructive focus-visible:outline-none", className)} placeholder={placeholder} onFocus={() => setIsInFocus(true)} onBlur={onTextAreaBlurCallback} {...props} {...hoverHandlers}/>
39
- <FdLabelAnimation className="max-w-full" label={label} shouldAnimate={shouldLabelAnimate} isParentHovered={isInputHovered} isErrorStyle={isError} skipAnimationOnce={skipAnimationOnce}/>
40
- </div>);
41
- }
42
- FdTextarea.displayName = "FdTextarea";
@@ -1,20 +0,0 @@
1
- "use client";
2
- import { Toaster } from "sonner";
3
- import { getFdToasterId } from "@fd-component-toolbox/toaster/FdToaster.funcs";
4
- /**
5
- * Toast notification component for displaying messages
6
- *
7
- * Based on {@link https://ui.shadcn.com/docs/components/sonner Sonner}
8
- */
9
- function FdToaster({ ...props }) {
10
- return (<Toaster id={getFdToasterId()} richColors closeButton position="bottom-right" expand={false} className="toaster group" toastOptions={{
11
- classNames: {
12
- toast: "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground " +
13
- "group-[.toaster]:shadow-lg",
14
- description: "group-[.toast]:text-muted-foreground",
15
- actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
16
- cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground",
17
- },
18
- }} {...props}/>);
19
- }
20
- export { FdToaster };
@@ -1,80 +0,0 @@
1
- "use client";
2
- import * as React from "react";
3
- import * as TooltipPrimitive from "@radix-ui/react-tooltip";
4
- import { cn } from "@fd-toolbox/lib/utils";
5
- /**
6
- * Tooltip provider for managing tooltip context
7
- *
8
- * Based on {@link https://ui.shadcn.com/docs/components/tooltip Tooltip.Provider}
9
- */
10
- function FdTooltipProvider({ delayDuration, skipDelayDuration, ...props }) {
11
- return (<TooltipPrimitive.Provider delayDuration={delayDuration ?? 350} skipDelayDuration={skipDelayDuration ?? 0} {...props}/>);
12
- }
13
- /**
14
- * Root component for creating a tooltip
15
- *
16
- * Based on {@link https://ui.shadcn.com/docs/components/tooltip Tooltip}
17
- *
18
- * @example
19
- * ```tsx
20
- * <FdTooltip delayDuration={100}>
21
- * ...
22
- * </FdTooltip>
23
- * ```
24
- */
25
- const FdTooltip = TooltipPrimitive.Root;
26
- /**
27
- * Trigger element for showing tooltip
28
- *
29
- * Based on {@link https://ui.shadcn.com/docs/components/tooltip Tooltip.Trigger}
30
- *
31
- * @example
32
- * ```tsx
33
- * function MyComponent({ shouldHideTooltip }) {
34
- * return (
35
- * <FdTooltipTrigger disabled={shouldHideTooltip} onClick={...}>
36
- * ...
37
- * </FdTooltipTrigger>
38
- * );
39
- * }
40
- * ```
41
- */
42
- const FdTooltipTrigger = TooltipPrimitive.Trigger;
43
- /**
44
- * Content container for tooltip text
45
- *
46
- * Based on {@link https://ui.shadcn.com/docs/components/tooltip Tooltip.Content}
47
- *
48
- * ```tsx
49
- * <FdTooltipContent align="start" side="right" sideOffset={17}>
50
- * ...
51
- * </FdTooltipContent>
52
- * ```
53
- */
54
- export const tooltipContentSides = {
55
- bottom: 0,
56
- top: 1,
57
- left: 2,
58
- right: 3,
59
- };
60
- export const tooltipContentSidesStrings = {
61
- [tooltipContentSides.bottom]: "bottom",
62
- [tooltipContentSides.top]: "top",
63
- [tooltipContentSides.left]: "left",
64
- [tooltipContentSides.right]: "right",
65
- };
66
- export const tooltipAligns = {
67
- start: 0,
68
- center: 1,
69
- end: 2,
70
- };
71
- export const tooltipAlignsStrings = {
72
- [tooltipAligns.start]: "start",
73
- [tooltipAligns.center]: "center",
74
- [tooltipAligns.end]: "end",
75
- };
76
- function FdTooltipContent({ className, ref, ...props }) {
77
- return (<TooltipPrimitive.Content ref={ref} className={cn("z-50 overflow-hidden rounded-md bg-fd-tertiary-900 px-3 py-1.5 text-xs text-primary-foreground shadow-md shadow-fd-tertiary-600", "animate-in fade-in-0 zoom-in-95", "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2", "data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", "transition-all duration-200 ease-in-out", "dark:bg-primary dark:shadow-none", className)} {...props}/>);
78
- }
79
- FdTooltipContent.displayName = TooltipPrimitive.Content.displayName;
80
- export { FdTooltip, FdTooltipTrigger, FdTooltipContent, FdTooltipProvider };
@@ -1,72 +0,0 @@
1
- "use client";
2
- import { useCallback, useEffect, useState, useRef, useMemo, useImperativeHandle, } from "react";
3
- import { cn } from "@fd-toolbox/lib/utils";
4
- import { onMultiBrowserFilterReset, setMultiBrowserSelectionState, } from "@meta/browsers/base-multi-browser/FdBaseMultiBrowser.funcs";
5
- import { FdInput } from "@fd-component-toolbox/input/FdInput";
6
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
7
- import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
8
- import { FdFormControl, FdFormField, FdFormItem, FdFormMessage } from "@fd-component-toolbox/form/FdForm";
9
- import { FdBaseMultiBrowserDialog } from "@meta/browsers/base-multi-browser/base-multi-browser-dialog/FdBaseMultiBrowserDialog";
10
- import { multiBrowserDialogMaxWidth } from "@fd-component-toolbox/dialog/dialog-constants";
11
- import { getRequiredLabel } from "@meta/edit-resource/edit-resource-property-block/FdEditResourcePropertyBlock.funcs";
12
- import { browserTypes, browserTypeToSuffix } from "@meta/browsers/browser-type";
13
- import { elements } from "@fd-toolbox/constants/elements";
14
- export function FdBaseMultiBrowser({ required, propertyMeta, form, relatedResourceId, selectedResources, onCloseDialog, onDescriptionChange, parentContextName: parentContextNameProp, short, disabled, readOnly, relatedResourcePropertyMeta, onSetRelatedResourcePropertyMeta, propertyResourceMeta, onChange, setSelectedResources, setSelectedResourceIds, skipAnimationOnce, variant, relatedUiResourceMeta, children: icons, ref, }) {
15
- const [selectedValues, setSelectedValues] = useState("");
16
- const [isHovered, setIsHovered] = useState(false);
17
- const parentContextName = parentContextNameProp ?? "";
18
- const browser = parentContextName.includes(elements.multiBrowser.FdManyToManyBrowser)
19
- ? browserTypeToSuffix[browserTypes.manyToManyBrowser]
20
- : browserTypeToSuffix[browserTypes.multiBrowser];
21
- const inputId = `${parentContextName}${propertyMeta.name}${browser}`;
22
- const iconId = `${parentContextName}${propertyMeta.name}${elements.browser.browserIcon}`;
23
- const dialogRef = useRef(null);
24
- const buttonRef = useRef(null);
25
- const data = useMemo(() => ({
26
- maxWidth: multiBrowserDialogMaxWidth,
27
- relatedResourcePropertyMeta: onSetRelatedResourcePropertyMeta
28
- ? relatedResourcePropertyMeta
29
- : propertyMeta,
30
- selectedResources,
31
- relatedResourceId,
32
- }), [
33
- onSetRelatedResourcePropertyMeta,
34
- relatedResourcePropertyMeta,
35
- propertyMeta,
36
- selectedResources,
37
- relatedResourceId,
38
- ]);
39
- useEffect(() => {
40
- setMultiBrowserSelectionState(selectedResources, setSelectedValues, setIsHovered, propertyResourceMeta);
41
- }, [selectedResources, propertyResourceMeta]);
42
- const onFilterReset = useCallback(() => onMultiBrowserFilterReset(onChange, setSelectedResources, setSelectedResourceIds, dialogRef.current?.resetDialog), [onChange, setSelectedResourceIds, setSelectedResources, dialogRef]);
43
- const onMouseEnter = useCallback(() => setIsHovered(true), []);
44
- const onMouseLeave = useCallback(() => setIsHovered(false), []);
45
- const onInputClick = useCallback(() => buttonRef.current?.click(), []);
46
- useImperativeHandle(ref, () => ({
47
- open: () => {
48
- onInputClick();
49
- },
50
- }), [onInputClick]);
51
- return (<div className={cn("relative h-8", short ? "max-w-48" : "w-full")} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>
52
- {form && (<FdFormField control={form.control} name={propertyMeta.name} defaultValue={""} render={({ field }) => (<FdFormItem>
53
- <FdFormControl>
54
- <FdInput inputId={inputId} showClearIcon={!(disabled ?? readOnly)} placeholder={variant === "float" ? "" : propertyMeta.displayName} required={required} onChangeCapture={onDescriptionChange} label={getRequiredLabel(required, propertyMeta.displayName)} disabled={disabled} readOnly={true} id={field.name} onBlur={field.onBlur} onChange={field.onChange} ref={field.ref} value={selectedValues} onClear={onFilterReset} skipAnimationOnce={skipAnimationOnce} variant={variant} className="cursor-pointer placeholder:truncate" onClick={onInputClick} isDisableFocus={true}>
55
- <div className="flex items-center gap-1">
56
- {icons}
57
- <FdBaseMultiBrowserDialog ref={dialogRef} disabled={disabled ?? readOnly} onTriggerClick={onSetRelatedResourcePropertyMeta} trigger={<FdButton ref={buttonRef} size="icon" variant="icon" className={cn("w-5 focus:outline-none focus-visible:ring-0", disabled || readOnly ? "cursor-not-allowed" : "")}>
58
- <FdIcon id={iconId} name="magnifyingGlass"/>
59
- </FdButton>} data={data} onCloseDialog={onCloseDialog} relatedUiResourceMeta={relatedUiResourceMeta}/>
60
- </div>
61
- </FdInput>
62
- </FdFormControl>
63
- <FdFormMessage />
64
- </FdFormItem>)}/>)}
65
-
66
- {!form && selectedValues && isHovered && !disabled && (<div className="absolute right-3.5 top-1/2 flex h-4 -translate-x-1/2 -translate-y-1/2 items-center">
67
- <FdButton variant="icon" size="icon" onClick={onFilterReset} className="size-6">
68
- <FdIcon name={iconNames.cross2} className="bg-background"/>
69
- </FdButton>
70
- </div>)}
71
- </div>);
72
- }
@@ -1,159 +0,0 @@
1
- import React, { useCallback, useContext, useRef, useState, useImperativeHandle } from "react";
2
- import { FdDialog, FdDialogClose, FdDialogContent, FdDialogDescription, FdDialogTitle, FdDialogTrigger, } from "@fd-component-toolbox/dialog/FdDialog";
3
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
4
- import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
5
- import { addPaging } from "@fd-toolbox/odata/odataconfig";
6
- import { rowHighlightBehaviors } from "@fd-toolbox/enums/enums";
7
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
8
- import { resourceEditModes } from "@fd-toolbox/constants/resource-list-configs-enums";
9
- import { elements } from "@fd-toolbox/constants/elements";
10
- import { FdResourceFilterList, } from "@meta/filtering/resource-filter-list/FdResourceFilterList";
11
- import { FdTable } from "@meta/table/FdTable";
12
- import { initBaseMultiBrowserDialog, onBrowserTablePaging, refreshRightResources, moveResourcesFromLeftTable, moveAllResourcesFromLeftTable, moveMultipleResources, moveSingleResource, moveResourcesFromRightTable, moveAllResourcesFromRightTable, onMultiBrowserDialogOpenChange, } from "@meta/browsers/base-multi-browser/base-multi-browser-dialog/FdBaseMultiBrowserDialog.funcs";
13
- import { goBack } from "@fd-toolbox/routing/routers";
14
- import { oDataDefaultTop } from "@fd-toolbox/odata/odata-constants";
15
- const InstanceNumberContext = React.createContext(0);
16
- const tableConfig = {
17
- hideDeleteButton: true,
18
- maxNumberOfColumns: 4,
19
- editMode: resourceEditModes.default,
20
- multiSelect: true,
21
- isBrowser: true,
22
- };
23
- export function FdBaseMultiBrowserDialog({ data, trigger, onCloseDialog: closeDialog, disabled, onTriggerClick, relatedUiResourceMeta, ref, }) {
24
- const instanceNumber = useContext(InstanceNumberContext);
25
- const leftTable = useRef(null);
26
- const rightTable = useRef(null);
27
- const [leftResources, setLeftResources] = useState([]);
28
- const [rightResources, setRightResources] = useState([]);
29
- const [browserDialogTitle, setBrowserDialogTitle] = useState("");
30
- const [resourceMeta, setResourceMeta] = useState();
31
- const [uiResourceMeta, setUiResourceMeta] = useState();
32
- const [dialogOpened, setDialogOpened] = useState(false);
33
- const [leftPageSize, setLeftPageSize] = useState(oDataDefaultTop);
34
- const [rightPageSize, setRightPageSize] = useState(oDataDefaultTop);
35
- const [leftODataConfig, setLeftODataConfig] = useState(addPaging({}, leftPageSize));
36
- const [rightODataConfig, setRightODataConfig] = useState(addPaging({}, rightPageSize));
37
- const [isComponentRefSet, setIsComponentRefSet] = useState(false);
38
- const [isRightResourcesLoading, setIsRightResourcesLoading] = useState(true);
39
- const resourceFilterListComponentRef = useRef(null);
40
- useAsyncEffect(async () => {
41
- if (data.relatedResourcePropertyMeta)
42
- await initBaseMultiBrowserDialog(data, setBrowserDialogTitle, setLeftResources, setResourceMeta, setUiResourceMeta, relatedUiResourceMeta);
43
- }, [data.selectedResources.length, data.relatedResourcePropertyMeta]);
44
- const areResourcesSet = useCallback(() => {
45
- return !!(data && (rightResources || leftResources));
46
- }, [data, rightResources, leftResources]);
47
- const onPagingRightTable = useCallback(async (fdTablePaging) => {
48
- await onBrowserTablePaging(rightODataConfig, setRightODataConfig, setRightPageSize, fdTablePaging, resourceMeta, refreshRightResources, data, leftResources, setRightResources, resourceFilterListComponentRef.current ?? undefined);
49
- }, [data, rightODataConfig, resourceMeta, leftResources, setRightResources, setRightPageSize]);
50
- const onPagingLeftTable = useCallback(async (fdTablePaging) => {
51
- await onBrowserTablePaging(leftODataConfig, setLeftODataConfig, setLeftPageSize, fdTablePaging, resourceMeta);
52
- }, [leftODataConfig, resourceMeta, setLeftPageSize]);
53
- const onRefreshRightTable = useCallback(async () => {
54
- await refreshRightResources(data, leftResources, setRightResources, rightODataConfig, resourceMeta, setIsRightResourcesLoading, resourceFilterListComponentRef.current ?? undefined);
55
- }, [data, leftResources, rightODataConfig, resourceMeta]);
56
- useAsyncEffect(async () => {
57
- if (resourceMeta?.properties && isComponentRefSet)
58
- await onRefreshRightTable();
59
- }, [resourceMeta, isComponentRefSet, onRefreshRightTable]);
60
- const onMoveResourcesFromLeftToRight = useCallback(() => {
61
- if (leftTable.current)
62
- moveResourcesFromLeftTable(leftResources, setLeftResources, rightResources, setRightResources, leftTable.current.getSelectedRows(), data);
63
- }, [data, leftResources, leftTable, rightResources]);
64
- const onMoveAllResourcesFromLeftToRight = useCallback(() => {
65
- moveAllResourcesFromLeftTable(leftResources, setLeftResources, rightResources, setRightResources);
66
- }, [leftResources, rightResources]);
67
- const onResourceClick = useCallback((resource) => {
68
- if (leftTable?.current && rightTable.current) {
69
- const selectedLeftResources = leftTable.current.getSelectedRows().map((row) => row.item);
70
- const selectedRightResources = rightTable.current.getSelectedRows().map((row) => row.item);
71
- if (selectedLeftResources.length > 1 || selectedRightResources.length > 1) {
72
- moveMultipleResources(selectedLeftResources, selectedRightResources, leftResources, setLeftResources, rightResources, setRightResources);
73
- }
74
- else {
75
- moveSingleResource(resource, leftResources, setLeftResources, rightResources, setRightResources);
76
- }
77
- }
78
- }, [leftResources, rightResources, setLeftResources, setRightResources, leftTable, rightTable]);
79
- const onMoveResourcesFromRightToLeft = useCallback(() => {
80
- if (rightTable.current)
81
- moveResourcesFromRightTable(leftResources, setLeftResources, rightResources, setRightResources, rightTable.current.getSelectedRows());
82
- }, [leftResources, rightResources, rightTable]);
83
- const onMoveAllResourcesFromRightToLeft = useCallback(() => {
84
- moveAllResourcesFromRightTable(leftResources, setLeftResources, rightResources, setRightResources);
85
- }, [leftResources, rightResources]);
86
- const onCloseDialog = useCallback(() => closeDialog(leftResources), [closeDialog, leftResources]);
87
- const onCloseDialogWithoutSelected = useCallback(() => closeDialog([]), [closeDialog]);
88
- useImperativeHandle(ref, () => ({
89
- resetDialog() {
90
- onMoveAllResourcesFromLeftToRight();
91
- },
92
- }), [onMoveAllResourcesFromLeftToRight]);
93
- const setRef = useCallback((component) => {
94
- if (component) {
95
- resourceFilterListComponentRef.current = component;
96
- setIsComponentRefSet(true);
97
- }
98
- }, []);
99
- const onOpenChangeCallback = useCallback((value) => {
100
- onMultiBrowserDialogOpenChange(value, leftResources, closeDialog, setDialogOpened);
101
- }, [setDialogOpened, leftResources, closeDialog]);
102
- const onSortCallback = useCallback(async (tableSort) => {
103
- await refreshRightResources(data, leftResources, setRightResources, rightODataConfig, resourceMeta, setIsRightResourcesLoading, resourceFilterListComponentRef.current ?? undefined, tableSort);
104
- }, [resourceMeta, data, leftResources, rightODataConfig, resourceFilterListComponentRef]);
105
- return (<InstanceNumberContext.Provider value={instanceNumber + 1}>
106
- <FdDialog open={!disabled && dialogOpened} onOpenChange={onOpenChangeCallback} modal>
107
- <FdDialogTrigger onClick={onTriggerClick} className="w-full focus:outline-none focus-visible:ring-0" asChild>
108
- {trigger}
109
- </FdDialogTrigger>
110
- <FdDialogContent className="min-w-full gap-4 overflow-auto rounded-none sm:min-w-[92%] sm:rounded lg:min-w-[87%]">
111
- <FdDialogTitle className="flex w-full flex-col items-start justify-between pl-1">
112
- {browserDialogTitle}
113
- </FdDialogTitle>
114
- <FdDialogDescription className="sr-only"></FdDialogDescription>
115
- <div>
116
- <FdResourceFilterList ref={setRef} uiResourceMeta={uiResourceMeta} stateKey={`${FdResourceFilterList.displayName}_${resourceMeta?.id}_multiBrowser_${instanceNumber}`} onFilterChange={onRefreshRightTable} showRefreshButton={true} showResetButton={false}/>
117
- </div>
118
- {areResourcesSet() && (<div className="grid max-h-[27rem] w-full grid-cols-[1fr_auto_1fr] items-stretch justify-between overflow-x-auto">
119
- <div className="overflow-auto">
120
- <FdTable id={elements.multiBrowser.leftTable + instanceNumber} uiResourceMeta={uiResourceMeta} onPaging={onPagingLeftTable} tableConfig={tableConfig} items={leftResources} pageSize={leftPageSize} ref={leftTable} className="h-96" onRowClick={onResourceClick} externalSorting={false} readonly={true} rowHighlightBehaviour={rowHighlightBehaviors.pointer}/>
121
- </div>
122
- <div className="mx-7 flex flex-col justify-center gap-2">
123
- <FdButton id={elements.multiBrowser.moveResourcesToRightTable + instanceNumber} onClick={onMoveAllResourcesFromLeftToRight} variant="ghost" size="icon">
124
- <FdIcon name={iconNames.doubleArrowRight}/>
125
- </FdButton>
126
- <FdButton id={elements.multiBrowser.moveResourcesToRightTable + instanceNumber} onClick={onMoveResourcesFromLeftToRight} variant="ghost" size="icon">
127
- <FdIcon name={iconNames.arrowRight}/>
128
- </FdButton>
129
- <FdButton id={elements.multiBrowser.moveResourcesToLeftTable + instanceNumber} onClick={onMoveResourcesFromRightToLeft} variant="ghost" size="icon">
130
- <FdIcon name={iconNames.arrowLeft} onClick={goBack}/>
131
- </FdButton>
132
- <FdButton id={elements.multiBrowser.moveResourcesToLeftTable + instanceNumber} onClick={onMoveAllResourcesFromRightToLeft} variant="ghost" size="icon">
133
- <FdIcon name={iconNames.doubleArrowLeft}/>
134
- </FdButton>
135
- </div>
136
- <div className="overflow-auto">
137
- <FdTable id={elements.multiBrowser.rightTable + instanceNumber} uiResourceMeta={uiResourceMeta} onPaging={onPagingRightTable} items={rightResources} pageSize={rightPageSize} tableConfig={tableConfig} ref={rightTable} className="h-96" onRowClick={onResourceClick} externalSorting={true} readonly={true} rowHighlightBehaviour={rowHighlightBehaviors.pointer} isLoading={isRightResourcesLoading} sort={onSortCallback}/>
138
- </div>
139
- </div>)}
140
- <div className="flex items-end justify-end space-x-2">
141
- <FdDialogClose asChild>
142
- <FdButton id={elements.browser.okBrowserButton + instanceNumber} onClick={onCloseDialog}>
143
- Ok
144
- </FdButton>
145
- </FdDialogClose>
146
- <FdButton id={`clearBrowserButton${instanceNumber}`} onClick={onMoveAllResourcesFromLeftToRight} variant="outline">
147
- Clear
148
- </FdButton>
149
- <FdDialogClose asChild>
150
- <FdButton id={`cancelBrowserButton${instanceNumber}`} onClick={onCloseDialogWithoutSelected} variant="outline">
151
- Cancel
152
- </FdButton>
153
- </FdDialogClose>
154
- </div>
155
- </FdDialogContent>
156
- </FdDialog>
157
- </InstanceNumberContext.Provider>);
158
- }
159
- FdBaseMultiBrowserDialog.displayName = "FdBaseMultiBrowserDialog";
@@ -1,58 +0,0 @@
1
- "use client";
2
- import { useState, useCallback, useRef } from "react";
3
- import { FdInput } from "@fd-component-toolbox/input/FdInput";
4
- import { FdFormControl, FdFormField, FdFormItem } from "@fd-component-toolbox/form/FdForm";
5
- import { cn } from "@fd-toolbox/lib/utils";
6
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
7
- import { FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
8
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
9
- import { getRequiredLabel } from "@meta/edit-resource/edit-resource-property-block/FdEditResourcePropertyBlock.funcs";
10
- import { browserTypeToSuffix, browserTypes } from "@meta/browsers/browser-type";
11
- import { FdBrowserDialog } from "@meta/browsers/browser/browser-dialog/FdBrowserDialog";
12
- import { getBrowserEmptyShortResourceDescriptor, onUpdateBrowserInput, setBrowserDescription, handleLoadRelatedResourceDescription, } from "@meta/browsers/browser/FdBrowser.funcs";
13
- import { elements } from "@fd-toolbox/constants/elements";
14
- /**
15
- * Browser component for single resource selection with integrated search dialog.
16
- * Used for many-to-one relationships.
17
- * @see {@link FdBrowserProps} for component props
18
- */
19
- export function FdBrowser({ required, propertyMeta, onChange, excludeResourceIds, short, disabled, readOnly, parentContextName: parentContextNameProp, relatedResourceId, form, children: icons, }) {
20
- const [shortResourceDescriptor, setShortResourceDescriptor] = useState(getBrowserEmptyShortResourceDescriptor());
21
- const [description, setDescription] = useState("");
22
- const [isValid, setIsValid] = useState(true);
23
- const [loadComplete, setLoadComplete] = useState(false);
24
- useAsyncEffect(async () => {
25
- setIsValid(!!form?.watch(propertyMeta.name));
26
- }, [description]);
27
- const parentContextName = parentContextNameProp ?? "";
28
- const contextName = `${parentContextName}${elements.browser.FdBrowser}${propertyMeta.name}`;
29
- const inputId = `${contextName}${browserTypeToSuffix[browserTypes.browser]}`;
30
- const iconId = `${contextName}${elements.browser.browserIcon}`;
31
- const buttonRef = useRef(null);
32
- useAsyncEffect(async () => {
33
- handleLoadRelatedResourceDescription(propertyMeta, setDescription, setLoadComplete, form, relatedResourceId);
34
- }, [relatedResourceId, form]);
35
- const onInputModelChange = useCallback((v) => {
36
- onUpdateBrowserInput(v, setShortResourceDescriptor, setDescription, onChange);
37
- }, [onChange]);
38
- const onCloseEditProperty = useCallback((data) => {
39
- if (data) {
40
- setShortResourceDescriptor(data);
41
- setBrowserDescription(data, setDescription);
42
- onChange?.(data.id);
43
- }
44
- }, [onChange]);
45
- const onInputClick = useCallback(() => buttonRef.current?.click(), []);
46
- return (<FdFormField control={form?.control} name={propertyMeta.name} render={({ field, fieldState }) => (<FdFormItem className={cn("relative", short ? "max-w-48" : "w-full")}>
47
- <FdFormControl>
48
- <FdInput {...field} value={description} inputId={inputId} showClearIcon={!(disabled ?? readOnly)} label={getRequiredLabel(propertyMeta.required, propertyMeta.displayName)} readOnly={readOnly} required={required} disabled={disabled} aria-invalid={fieldState.invalid && !isValid} onChange={onInputModelChange} skipAnimationOnce={!loadComplete} onClick={onInputClick} isDisableFocus={true} className="cursor-pointer">
49
- <div className="flex items-center gap-1">
50
- {icons}
51
- <FdBrowserDialog propertyMeta={propertyMeta} currentResourceId={shortResourceDescriptor.id ?? relatedResourceId} excludeResourceIds={excludeResourceIds} closeDialog={onCloseEditProperty} trigger={<FdButton ref={buttonRef} size="icon" variant="icon" className={cn("w-4", disabled || readOnly ? "cursor-not-allowed" : "")}>
52
- <FdIcon id={iconId} name={iconNames.magnifyingGlass} size={iconSizes.small}/>
53
- </FdButton>} setDescription={setDescription} disabled={disabled ?? readOnly}/>
54
- </div>
55
- </FdInput>
56
- </FdFormControl>
57
- </FdFormItem>)}/>);
58
- }
@@ -1,89 +0,0 @@
1
- import { useCallback, useRef, useState } from "react";
2
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
3
- import { onInitBrowserDialog, refreshBrowserDialogResources, onBrowserDialogPaging as onPagingFunc, onItemSelected as onItemSelectedFunc, setBrowserDialogResourceDescription, } from "@meta/browsers/browser/browser-dialog/FdBrowserDialog.funcs";
4
- import { FdDialog, FdDialogClose, FdDialogContent, FdDialogFooter, FdDialogHeader, FdDialogTitle, FdDialogTrigger, } from "@fd-component-toolbox/dialog/FdDialog";
5
- import { getBrowserEmptyShortResourceDescriptor } from "@meta/browsers/browser/FdBrowser.funcs";
6
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
7
- import { rowHighlightBehaviors } from "@fd-toolbox/enums/enums";
8
- import { elements } from "@fd-toolbox/constants/elements";
9
- import { FdResourceFilterList, } from "@meta/filtering/resource-filter-list/FdResourceFilterList";
10
- import { FdTable } from "@meta/table/FdTable";
11
- import { FdBrowser } from "@meta/browsers/browser/FdBrowser";
12
- export function FdBrowserDialog({ propertyMeta, currentResourceId, closeDialog, trigger, setDescription, excludeResourceIds, disabled, }) {
13
- const contextName = `${FdBrowser.name}${propertyMeta.name}${FdBrowserDialog.name}`;
14
- const [resources, setResources] = useState([]);
15
- const [uiResourceMeta, setUiResourceMeta] = useState();
16
- const [oDataConfig, setODataConfig] = useState({});
17
- const [isOpen, setIsOpen] = useState(false);
18
- const tableConfig = { isBrowser: true };
19
- const resourceFilterListRef = useRef(null);
20
- const getFilters = useCallback(() => {
21
- if (resourceFilterListRef.current) {
22
- return resourceFilterListRef.current.getFilters();
23
- }
24
- else {
25
- return {};
26
- }
27
- }, [resourceFilterListRef]);
28
- useAsyncEffect(async () => {
29
- await onInitBrowserDialog(setUiResourceMeta, propertyMeta, setResources, setODataConfig, oDataConfig, getFilters, excludeResourceIds);
30
- }, []);
31
- useAsyncEffect(async () => {
32
- await setBrowserDialogResourceDescription(resources, currentResourceId, uiResourceMeta?.resourceMeta, setDescription);
33
- }, [resources, currentResourceId, setDescription, uiResourceMeta?.resourceMeta]);
34
- const onRefreshResources = useCallback(() => {
35
- refreshBrowserDialogResources(setResources, setODataConfig, oDataConfig, getFilters, uiResourceMeta.resourceMeta, excludeResourceIds);
36
- }, [excludeResourceIds, getFilters, oDataConfig, uiResourceMeta]);
37
- const onCancel = useCallback(() => {
38
- closeDialog?.(undefined);
39
- }, [closeDialog]);
40
- const onClear = useCallback(() => {
41
- closeDialog?.(getBrowserEmptyShortResourceDescriptor());
42
- }, [closeDialog]);
43
- const onPaging = useCallback((paging) => {
44
- onPagingFunc(paging, setResources, setODataConfig, oDataConfig, getFilters, uiResourceMeta.resourceMeta, excludeResourceIds);
45
- }, [setResources, setODataConfig, oDataConfig, getFilters, uiResourceMeta, excludeResourceIds]);
46
- const onItemSelected = useCallback((item) => {
47
- if (uiResourceMeta?.resourceMeta && closeDialog) {
48
- onItemSelectedFunc(item, uiResourceMeta.resourceMeta, closeDialog);
49
- setIsOpen(false);
50
- }
51
- }, [uiResourceMeta?.resourceMeta, closeDialog]);
52
- const onOpenChange = useCallback((open) => {
53
- setIsOpen(open);
54
- if (!open) {
55
- closeDialog?.(undefined);
56
- }
57
- }, [closeDialog]);
58
- return (<FdDialog open={isOpen && !disabled} onOpenChange={onOpenChange}>
59
- <FdDialogTrigger asChild className="w-full">
60
- {trigger}
61
- </FdDialogTrigger>
62
- <FdDialogContent className="box-border flex max-h-[90vh] w-full max-w-sm flex-col sm:max-w-lg md:max-w-3xl lg:max-w-4xl">
63
- <FdDialogTitle className="absolute -m-px size-px overflow-hidden whitespace-nowrap border-0 p-0">
64
- {propertyMeta.displayName}
65
- </FdDialogTitle>
66
- <FdDialogHeader>
67
- <h1 className="text-lg font-bold">{propertyMeta.displayName}</h1>
68
- </FdDialogHeader>
69
- {uiResourceMeta?.resourceMeta && (<div className="flex flex-row items-center justify-start gap-1">
70
- <FdResourceFilterList ref={resourceFilterListRef} uiResourceMeta={uiResourceMeta} stateKey={`${FdResourceFilterList.displayName}_${uiResourceMeta.resourceMeta.id}_browser`} onFilterChange={onRefreshResources} parentContextName={contextName} showRefreshButton={true} showResetButton={false} onRefreshResources={onRefreshResources}/>
71
- </div>)}
72
- {propertyMeta && resources && (<div className="flex size-full overflow-auto">
73
- <FdTable id={elements.table.tableElementId + elements.browserDialog.browserDialogElementId} items={resources} uiResourceMeta={uiResourceMeta} onPaging={onPaging} tableConfig={tableConfig} externalSorting={false} onRowClick={onItemSelected} rowHighlightBehaviour={rowHighlightBehaviors.pointer} pageSize={6} adaptiveWidth={true} onRefreshItems={onRefreshResources}/>
74
- </div>)}
75
- <FdDialogFooter>
76
- {propertyMeta?.required && (<FdDialogClose asChild>
77
- <FdButton onClick={onCancel} className="ml-4 min-w-20" variant="outline">
78
- Cancel
79
- </FdButton>
80
- </FdDialogClose>)}
81
- <FdDialogClose asChild>
82
- <FdButton onClick={onClear} className="ml-4 min-w-20" variant="outline">
83
- Clear
84
- </FdButton>
85
- </FdDialogClose>
86
- </FdDialogFooter>
87
- </FdDialogContent>
88
- </FdDialog>);
89
- }
@@ -1,33 +0,0 @@
1
- "use client";
2
- import React, { useCallback, useState } from "react";
3
- import { closeDialog, onMultiBrowserInputUpdate, } from "@meta/browsers/base-multi-browser/FdBaseMultiBrowser.funcs";
4
- import { getManyToManyBrowserRelatedResourcePropertyMeta, writeValue, } from "@meta/browsers/many-to-many-browser/FdManyToManyBrowser.funcs";
5
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
6
- import { FdBaseMultiBrowser } from "@meta/browsers/base-multi-browser/FdBaseMultiBrowser";
7
- import { elements } from "@fd-toolbox/constants/elements";
8
- /**
9
- * Many-to-many browser component for multiple resource selection with integrated search dialog.
10
- * Used for many-to-many relationships.
11
- * @see {@link FdManyToManyBrowserProps} for component props
12
- */
13
- export function FdManyToManyBrowser({ required, propertyMeta, form, onChange, parentContextName: parentContextNameProp, short, disabled, readOnly, relatedResourceId, children: icons, }) {
14
- const [propertyResourceMeta, setPropertyResourceMeta] = useState();
15
- const [selectedResources, setSelectedResources] = useState([]);
16
- const [relatedResourcePropertyMeta, setRelatedResourcePropertyMeta] = useState();
17
- const [loadComplete, setLoadComplete] = useState(false);
18
- const parentContextName = parentContextNameProp ?? "";
19
- const contextName = `${parentContextName}${elements.multiBrowser.FdManyToManyBrowser}`;
20
- useAsyncEffect(async () => {
21
- await writeValue(propertyMeta, setSelectedResources, setPropertyResourceMeta, setLoadComplete, setRelatedResourcePropertyMeta, propertyResourceMeta, relatedResourceId, form?.setValue);
22
- }, [propertyMeta.name]);
23
- const onCloseDialog = useCallback((resources) => {
24
- closeDialog(resources, setSelectedResources, propertyMeta, setPropertyResourceMeta, propertyResourceMeta, onChange);
25
- }, [onChange, propertyMeta, propertyResourceMeta]);
26
- const onInputModelChange = useCallback((e) => onMultiBrowserInputUpdate(e.target.value, setSelectedResources, propertyResourceMeta, onChange), [onChange, propertyResourceMeta]);
27
- const onSetRelatedResourcePropertyMeta = useCallback(async () => {
28
- setRelatedResourcePropertyMeta(await getManyToManyBrowserRelatedResourcePropertyMeta(propertyMeta));
29
- }, [propertyMeta]);
30
- return (<FdBaseMultiBrowser parentContextName={contextName} required={required} propertyMeta={propertyMeta} form={form} relatedResourceId={relatedResourceId} selectedResources={selectedResources} onCloseDialog={onCloseDialog} onDescriptionChange={onInputModelChange} short={short} disabled={disabled} readOnly={readOnly} relatedResourcePropertyMeta={relatedResourcePropertyMeta} setSelectedResources={setSelectedResources} onSetRelatedResourcePropertyMeta={onSetRelatedResourcePropertyMeta} propertyResourceMeta={propertyResourceMeta} skipAnimationOnce={!loadComplete}>
31
- {icons}
32
- </FdBaseMultiBrowser>);
33
- }
@@ -1,32 +0,0 @@
1
- "use client";
2
- import React, { useCallback, useState } from "react";
3
- import { handleInputModelChange, onInitMultiBrowser, } from "@meta/browsers/multi-browser/FdMultiBrowser.funcs";
4
- import { FdBaseMultiBrowser } from "@meta/browsers/base-multi-browser/FdBaseMultiBrowser";
5
- import { closeDialog } from "@meta/browsers/base-multi-browser/FdBaseMultiBrowser.funcs";
6
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
7
- import { elements } from "@fd-toolbox/constants/elements";
8
- /**
9
- * Multi-browser component for multiple resource selection with integrated search dialog.
10
- * Used for one-to-many relationships.
11
- * @see {@link FdMultiBrowserProps} for component props
12
- */
13
- export function FdMultiBrowser({ required, propertyMeta, form, onChange, onClose, parentContextName: parentContextNameProp, short, disabled, readOnly, getSelectedResourcesFromApi, relatedResourceId, selectedResourceIds, setSelectedResourceIds, variant, relatedUiResourceMeta, children: icons, ref, }) {
14
- const [propertyResourceMeta, setPropertyResourceMeta] = useState(relatedUiResourceMeta?.resourceMeta);
15
- const [selectedResources, setSelectedResources] = useState([]);
16
- const [loadComplete, setLoadComplete] = useState(false);
17
- const parentContextName = parentContextNameProp ?? "";
18
- const contextName = `${parentContextName}${elements.multiBrowser.FdMultiBrowser}`;
19
- useAsyncEffect(async () => {
20
- await onInitMultiBrowser(propertyMeta, setSelectedResources, setPropertyResourceMeta, setLoadComplete, getSelectedResourcesFromApi, propertyResourceMeta, selectedResourceIds, relatedResourceId, setSelectedResourceIds, form?.setValue);
21
- }, [selectedResourceIds?.join(), relatedResourceId]);
22
- const onCloseDialog = useCallback((resources) => {
23
- if (propertyResourceMeta)
24
- closeDialog(resources, setSelectedResources, propertyMeta, setPropertyResourceMeta, propertyResourceMeta, onChange, onClose);
25
- }, [onChange, propertyMeta, propertyResourceMeta, onClose]);
26
- const onInputModelChange = useCallback((e) => {
27
- handleInputModelChange(e, setSelectedResources, onChange, propertyResourceMeta);
28
- }, [onChange, propertyResourceMeta]);
29
- return (<FdBaseMultiBrowser parentContextName={contextName} required={required ?? false} propertyMeta={propertyMeta} form={form} relatedResourceId={relatedResourceId} selectedResources={selectedResources} onCloseDialog={onCloseDialog} onDescriptionChange={onInputModelChange} short={short} disabled={disabled} readOnly={readOnly} propertyResourceMeta={propertyResourceMeta} onChange={onChange} setSelectedResources={setSelectedResources} setSelectedResourceIds={setSelectedResourceIds} skipAnimationOnce={!loadComplete} variant={variant ?? "float"} relatedUiResourceMeta={relatedUiResourceMeta} ref={ref}>
30
- {icons}
31
- </FdBaseMultiBrowser>);
32
- }
@@ -1,40 +0,0 @@
1
- import { useMemo } from "react";
2
- import { cn } from "@fd-toolbox/lib/utils";
3
- import { cardListLayouts } from "@fd-toolbox/constants/card-list-configs";
4
- import { getCardConfig } from "@meta/card-list/config/card-config";
5
- import { FdCard } from "@meta/card-list/card/FdCard";
6
- import { tableDisplayModes } from "@fd-toolbox/enums/enums";
7
- import { resourceEditModes } from "@fd-toolbox/constants/resource-list-configs-enums";
8
- import { ResourceAddButton } from "@meta/resource-list/resource-add-button";
9
- /**
10
- * This component renders in a card-based interface with support for different
11
- * layouts and includes an add button for creating new resources.
12
- *
13
- * @param props - {@link FdCardListProps}
14
- *
15
- * @example
16
- * ```tsx
17
- * <FdCardList
18
- * onRefreshResources={onRefreshResources}
19
- * uiResourceMeta={uiResourceMeta}
20
- * resources={resourcesState}
21
- * displayMode={tableDisplayModes.default}
22
- * />
23
- * ```
24
- */
25
- export function FdCardList({ onRefreshResources, config, uiResourceMeta, resources, itemDeleted, displayMode, }) {
26
- const cardConfig = config ?? getCardConfig();
27
- const layoutClasses = useMemo(() => cn("flex w-full gap-2 p-2", {
28
- "flex-col": cardConfig.layout === cardListLayouts.horizontal,
29
- "flex-wrap": cardConfig.layout === cardListLayouts.vertical,
30
- }), [cardConfig.layout]);
31
- return (<div className={layoutClasses}>
32
- {uiResourceMeta && (<div className="pl-2">
33
- <ResourceAddButton resourceName={uiResourceMeta.resourceMeta.resourceName} onRefreshResources={onRefreshResources} editMode={resourceEditModes.simple}/>
34
- </div>)}
35
- {resources &&
36
- resources?.length > 0 &&
37
- uiResourceMeta &&
38
- resources.map((resource) => (<FdCard key={resource.id} resource={resource} uiResourceMeta={uiResourceMeta} cardConfig={cardConfig} itemDeleted={itemDeleted} onRefreshResources={onRefreshResources} displayMode={displayMode ?? tableDisplayModes.default}/>))}
39
- </div>);
40
- }