@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,63 +0,0 @@
1
- "use client";
2
- import { createContext, Fragment, useLayoutEffect, use, useRef, useMemo } from "react";
3
- import { isFilterListPositionLeft } from "@meta/resource-list/ResourceList.funcs";
4
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
5
- import { tableDisplayModes } from "@fd-toolbox/enums/enums";
6
- import { cn } from "@fd-toolbox/lib/utils";
7
- import { FdSubHeading } from "@fd-component-toolbox/subheading/FdSubHeading";
8
- import { FdResourceListFilter } from "@meta/resource-list/resource-list-filter/FdResourceListFilter";
9
- import { FdResourceListTable } from "@meta/resource-list/resource-table-list/FdResourceTableList";
10
- import { FdResourceListCard } from "@meta/resource-list/resource-list-card/FdResourceListCard";
11
- import { useRefreshResources, useResourceListEffects, useResourceListFilterCallbacks, useResourceListState, useResourcePaginationAndNavigation, } from "@meta/resource-list/resource-list-hooks";
12
- import { useFdSearchParams } from "@meta/client/framework/hooks";
13
- import { onRestoreState } from "@root/packages/level2/meta/resource-list/resource-list-persist-state";
14
- import { useGlobalConfig } from "@meta/providers/global-provider/FdGlobalContext";
15
- import { getResourceListConfig } from "@meta/resource-list/resource-list-global-config";
16
- /**
17
- * Context for {@link ResourceList}
18
- */
19
- export const ResourceListContext = createContext(null);
20
- /**
21
- * Displays a list of resources with optional filtering and table display modes.
22
- *
23
- * @see {@link ResourceListProps} for component props
24
- * @see {@link ResourceListContext} for context values
25
- * @see {@link ResourceListConfig} for configuration options
26
- */
27
- export function ResourceList({ externalResources, resourceListConfig: resourceListConfigProp, resourceName: resourceNameProp, filters: filtersProp, showFilters, displayMode, isTableRequired, pluralName, resourcesPromise, uiResourceMeta: uiResourceMetaProp, relatedUiResourceMetas, }) {
28
- const searchParams = Object.fromEntries(useFdSearchParams().entries());
29
- const resourcesProp = resourcesPromise ? use(resourcesPromise) : resourcesPromise;
30
- const tableComponentRef = useRef(null);
31
- const { globalConfig } = useGlobalConfig();
32
- const globalResourceListConfig = useMemo(() => getResourceListConfig(globalConfig, resourceNameProp, resourceListConfigProp), [resourceListConfigProp, resourceNameProp, globalConfig]);
33
- const { state } = useResourceListState(isTableRequired ?? true, globalResourceListConfig, resourceNameProp, filtersProp, uiResourceMetaProp);
34
- useLayoutEffect(() => {
35
- state.setResourceMeta(uiResourceMetaProp?.resourceMeta ?? undefined);
36
- onRestoreState(ResourceList.name + resourceNameProp, state.setComponentState, resourceNameProp, state.setIsLoading);
37
- }, [
38
- resourceNameProp,
39
- state.setIsLoading,
40
- state.setResourceMeta,
41
- state.setComponentState,
42
- uiResourceMetaProp,
43
- ]);
44
- useResourceListEffects(state, searchParams, externalResources, showFilters, globalResourceListConfig, resourceNameProp, resourcesProp, uiResourceMetaProp);
45
- const { onFilterChangeCallback, onSortCallback, isCreateOnlyResourceState } = useResourceListFilterCallbacks(state, externalResources, resourceNameProp);
46
- const { refreshResources } = useRefreshResources(state, externalResources);
47
- const { onPagingCallback, onNavigateToResource } = useResourcePaginationAndNavigation(state, externalResources);
48
- const contextValue = useMemo(() => ({ tableComponentRef, refreshResources }), [tableComponentRef, refreshResources]);
49
- return (<ResourceListContext.Provider value={contextValue}>
50
- {state.hasNeededAccess && (<div className={cn(isFilterListPositionLeft(state.resourceListConfig) &&
51
- "flex w-full max-w-full flex-col md:flex-row")}>
52
- {!state.isLoading && (<FdResourceListFilter showFilters={showFilters ?? true} resourceListConfig={state.resourceListConfig} uiResourceMeta={state.uiResourceMeta} resourceMeta={state.resourceMeta} onFilterChange={onFilterChangeCallback} queryODataFilters={state.queryODataFilters} onRefreshResources={refreshResources} onViewModeChange={state.setViewMode} viewMode={state.viewMode} externalResources={externalResources} filterListRef={state.resourceFilterListComponentRef} relatedUiResourceMetas={relatedUiResourceMetas}/>)}
53
- <div className={cn("m-0 flex gap-4 p-0", state.shouldDisplayTable ? "flex-col" : "items-start", isFilterListPositionLeft(state.resourceListConfig) &&
54
- "max-h-full w-full overflow-x-auto")}>
55
- {!(isTableRequired ?? true) && <FdSubHeading>{pluralName}</FdSubHeading>}
56
- <FdResourceListCard onRefreshResources={refreshResources} resourcesState={state.resourcesState} uiResourceMeta={state.uiResourceMeta} viewMode={state.viewMode} displayMode={displayMode ?? tableDisplayModes.default}/>
57
- {state.resourceListConfig.filtersTableInBetweenContainer?.map((Component) => (<Fragment key={Component?.toString()}>{Component}</Fragment>))}
58
- <FdResourceListTable shouldDisplayTable={state.shouldDisplayTable} resourceName={state.resourceName} resourceListConfig={state.resourceListConfig} uiResourceMeta={state.uiResourceMeta} resourcesState={state.resourcesState} state={state.componentState} onSort={onSortCallback} onPaging={onPagingCallback} onRefreshResources={refreshResources} displayMode={displayMode ?? tableDisplayModes.default} isLoading={state.isLoading} readonly={state.readonly} tableComponentRef={tableComponentRef} relatedUiResourceMetas={relatedUiResourceMetas}/>
59
- </div>
60
- </div>)}
61
- {isCreateOnlyResourceState && <FdButton onClick={onNavigateToResource}>Add</FdButton>}
62
- </ResourceListContext.Provider>);
63
- }
@@ -1,11 +0,0 @@
1
- import { tableElementSuffixes } from "@fd-component-toolbox/table-element-suffixes";
2
- import { FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
3
- import { FdViewSheet } from "@meta/view/FdViewSheet";
4
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
5
- export function ResourceAddButton({ resourceName, onRefreshResources, editMode }) {
6
- return (<FdViewSheet resourceName={resourceName} onRefreshResources={onRefreshResources} editMode={editMode}>
7
- <FdButton id={tableElementSuffixes.addButton} variant="icon" size="icon" className="size-4">
8
- <FdIcon name={iconNames.plus} size={iconSizes.extraSmall} className="stroke-muted-foreground stroke-0.65"/>
9
- </FdButton>
10
- </FdViewSheet>);
11
- }
@@ -1,7 +0,0 @@
1
- import { FdCardList } from "@meta/card-list/FdCardList";
2
- import { shouldDisplayCardList } from "@meta/resource-list/resource-list-card/FdResourceListCard.funcs";
3
- export function FdResourceListCard({ onRefreshResources, resourcesState, uiResourceMeta, viewMode, displayMode, }) {
4
- if (!shouldDisplayCardList(viewMode))
5
- return null;
6
- return (<FdCardList onRefreshResources={onRefreshResources} resources={resourcesState} uiResourceMeta={uiResourceMeta} itemDeleted={onRefreshResources} displayMode={displayMode}/>);
7
- }
@@ -1,11 +0,0 @@
1
- import { cn } from "@fd-toolbox/lib/utils";
2
- import { FdResourceFilterList, } from "@meta/filtering/resource-filter-list/FdResourceFilterList";
3
- import { isFilterListPositionLeft } from "@meta/resource-list/ResourceList.funcs";
4
- import { shouldDisplayFilterList } from "@meta/resource-list/resource-list-filter/FdResourceListFilter.funcs";
5
- export function FdResourceListFilter({ showFilters, resourceListConfig, uiResourceMeta, resourceMeta, onFilterChange, queryODataFilters, onRefreshResources, onViewModeChange, viewMode, externalResources, filterListRef, relatedUiResourceMetas, }) {
6
- return (<div className={cn(isFilterListPositionLeft(resourceListConfig) && "md:h-full md:min-w-max")}>
7
- {shouldDisplayFilterList(showFilters, resourceMeta, externalResources) && (<div className={cn("flex w-full flex-col items-center md:p-0", isFilterListPositionLeft(resourceListConfig) && "h-full max-h-full")}>
8
- <FdResourceFilterList ref={filterListRef} uiResourceMeta={uiResourceMeta} stateKey={`${FdResourceFilterList.displayName}_${resourceMeta.id}_resourceList`} onFilterChange={onFilterChange} queryODataFilters={queryODataFilters} onRefreshResources={onRefreshResources} position={resourceListConfig.tableConfig.filterListPosition} onViewModeChanged={onViewModeChange} viewMode={viewMode} showBackButton={true} relatedUiResourceMetas={relatedUiResourceMetas}/>
9
- </div>)}
10
- </div>);
11
- }
@@ -1,14 +0,0 @@
1
- import { FdTable } from "@meta/table/FdTable";
2
- import { cn } from "@fd-toolbox/lib/utils";
3
- import { isFilterListPositionLeft } from "@meta/resource-list/ResourceList.funcs";
4
- import { getResourceListTableId } from "@meta/resource-list/resource-table-list/FdResourceTableList.funcs";
5
- export function FdResourceListTable({ shouldDisplayTable, resourceName, resourceListConfig, uiResourceMeta, resourcesState, state, onSort, onPaging, onRefreshResources, displayMode, isLoading, readonly, tableComponentRef, relatedUiResourceMetas, }) {
6
- if (!shouldDisplayTable)
7
- return null;
8
- return (<div className="w-full overflow-auto px-0">
9
- <div>
10
- <FdTable className={cn(isFilterListPositionLeft(resourceListConfig) &&
11
- "max-h-full w-full min-w-min overflow-hidden pl-2 pt-4")} id={getResourceListTableId(resourceName)} ref={tableComponentRef} items={resourcesState} readonly={readonly} uiResourceMeta={uiResourceMeta} tableConfig={resourceListConfig.tableConfig} externalSorting={true} tableSort={state.tableSort} sort={onSort} onPaging={onPaging} onRefreshItems={onRefreshResources} itemDeleted={onRefreshResources} displayMode={displayMode} isLoading={isLoading} relatedUiResourceMetas={relatedUiResourceMetas}/>
12
- </div>
13
- </div>);
14
- }
@@ -1,147 +0,0 @@
1
- import React, { useState, useRef, useCallback, useMemo, useEffect, useLayoutEffect, useImperativeHandle, } from "react";
2
- import { tableDisplayModes, } from "@fd-toolbox/enums/enums";
3
- import { onTableSort, getHeight, handlePaging, setTableConfig, initializeFdTable, createInternalTableColumns, } from "@meta/table/FdTable.funcs";
4
- import { cn } from "@fd-toolbox/lib/utils";
5
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
6
- import { FdTableBody } from "@meta/table/body/FdTableBody";
7
- import { FdTableHeader } from "@meta/table/header/FdTableHeader";
8
- import { FdPager } from "@meta/table/pager/FdPager";
9
- import { minColumnWidthPx, targetColumnWidthPx } from "@meta/table/table-constants";
10
- import { useMediaQuery } from "@fd-toolbox/hooks/use-media-query";
11
- import { FdTableContext } from "@meta/table/table-context";
12
- import { processLocalRowDeletion } from "@meta/table/services/fd-table-private-rows";
13
- import { tableElementSuffixes } from "@fd-component-toolbox/table-element-suffixes";
14
- import { calculateTableAndColumnsWidths, getTableWidthStyles } from "@meta/table/table-widths-functions";
15
- let instanceCount = { count: 0 };
16
- /**
17
- * Advanced data table component with sorting, pagination, and extensive configuration options through {@link FdTableConfig}
18
- *
19
- * @see {@link FdTableProps} for component props
20
- * @see {@link FdTableComponent} for available ref methods
21
- * @see {@link FdTableConfig} for configuration options
22
- */
23
- export function FdTable({ id: idProp, readonly, notForDisplayProps, heightPixels, widthPixels, tableConfig, externalSorting, uiResourceMeta, tableSort, items, sort, onPaging, onRefreshItems, itemDeleted, onRowClick, className, pageSize: pageSizeProp, rowHighlightBehaviour, displayMode, adaptiveWidth, onRowsUpdate, isLoading, relatedUiResourceMetas, dataInfo, ref, }) {
24
- const id = idProp ?? tableElementSuffixes.table;
25
- const effectiveDisplayMode = displayMode ?? tableDisplayModes.default;
26
- const [pageSize, setPageSize] = useState(pageSizeProp ?? 50);
27
- const [tableBodyHeightPixels, setTableBodyHeightPixels] = useState(heightPixels ?? 0);
28
- const [internalTableColumns, setInternalTableColumns] = useState([]);
29
- const [tableRows, setTableRows] = useState([]);
30
- const [tableId, setTableId] = useState(id);
31
- const [instanceNumber, setInstanceNumber] = useState(instanceCount.count);
32
- const fdTableRef = useRef(null);
33
- const fdTableHeaderRef = useRef(null);
34
- const possibleColumnValues = useMemo(() => new Map(), []);
35
- const [isHovered, setIsHovered] = useState(false);
36
- const [isActive, setIsActive] = useState(false);
37
- const [pageNumber, setPageNumber] = useState(1);
38
- const [columnWidths, setColumnWidths] = useState([]);
39
- const targetWidth = internalTableColumns.length * targetColumnWidthPx;
40
- const minWidth = internalTableColumns.length * minColumnWidthPx;
41
- const isSmallScreen = useMediaQuery(`(max-width: calc(${targetWidth / 16}rem + 10vw))`);
42
- const tableHeight = pageSize - tableRows.length < 25 && getHeight(pageSize);
43
- const deleteRowsLocally = useCallback((itemIds) => {
44
- setTableRows((prevRows) => processLocalRowDeletion(prevRows, itemIds, onRowsUpdate));
45
- }, [onRowsUpdate]);
46
- useImperativeHandle(ref, () => ({
47
- getSelectedRows: () => tableRows.filter((r) => r.selected),
48
- getSelectedRowsIds: () => tableRows.filter((r) => r.selected).map((selectedRow) => selectedRow.item.id),
49
- resetSelectedRows: () => {
50
- setTableRows(tableRows.map((r) => ({ ...r, selected: false })));
51
- },
52
- deleteRowsLocally,
53
- }), [tableRows, deleteRowsLocally]);
54
- useEffect(() => {
55
- setTableConfig(setInternalTableColumns, setColumnWidths);
56
- }, []);
57
- useAsyncEffect(() => {
58
- createInternalTableColumns(setInternalTableColumns, tableConfig, readonly ?? false, notForDisplayProps ?? [], possibleColumnValues, effectiveDisplayMode, uiResourceMeta, fdTableRef?.current?.getBoundingClientRect().width, [], dataInfo);
59
- return initializeFdTable(setInternalTableColumns, tableConfig, readonly ?? false, notForDisplayProps ?? [], possibleColumnValues, effectiveDisplayMode, instanceNumber, setInstanceNumber, instanceCount, setTableId, heightPixels ?? 0, tableId, setTableBodyHeightPixels, setTableRows, tableRows, internalTableColumns, setPageNumber, fdTableRef?.current ?? undefined, fdTableHeaderRef?.current ?? undefined, tableSort, sort, externalSorting, uiResourceMeta, relatedUiResourceMetas, dataInfo);
60
- }, [uiResourceMeta]);
61
- useLayoutEffect(() => {
62
- setTableRows(items.slice(0, pageSize).map((item, index) => ({ selected: false, item: item, index: index })));
63
- }, [setTableRows, items, pageSize]);
64
- const onGetPossibleValues = useCallback((str) => possibleColumnValues.get(str), [possibleColumnValues]);
65
- useEffect(() => {
66
- setPageSize(pageSizeProp ?? 50);
67
- }, [pageSizeProp]);
68
- const tableInstance = useMemo(() => ({
69
- id: tableId,
70
- tableRows: tableRows,
71
- internalTableColumns: internalTableColumns,
72
- uiResourceMeta: uiResourceMeta,
73
- getColumnPossibleValues: onGetPossibleValues,
74
- customActions: tableConfig?.customActions,
75
- editMode: tableConfig.editMode,
76
- multiSelect: tableConfig.multiSelect,
77
- isBrowser: tableConfig.isBrowser,
78
- }), [
79
- tableId,
80
- tableRows,
81
- internalTableColumns,
82
- uiResourceMeta,
83
- onGetPossibleValues,
84
- tableConfig?.customActions,
85
- tableConfig.editMode,
86
- tableConfig.multiSelect,
87
- tableConfig.isBrowser,
88
- ]);
89
- const handleMouseEnter = useCallback(() => {
90
- if (effectiveDisplayMode === tableDisplayModes.minimal) {
91
- setIsHovered(true);
92
- }
93
- }, [effectiveDisplayMode]);
94
- const handleMouseLeave = useCallback(() => {
95
- if (effectiveDisplayMode === tableDisplayModes.minimal) {
96
- setIsHovered(false);
97
- }
98
- }, [effectiveDisplayMode]);
99
- const onPagingCallback = useCallback((paging) => {
100
- handlePaging(paging, setPageSize, onPaging);
101
- }, [onPaging]);
102
- const onSortCallback = useCallback((column) => onTableSort(column, internalTableColumns, tableRows, (updatedRows) => setTableRows([...updatedRows]), sort, externalSorting), [externalSorting, internalTableColumns, sort, tableRows, setTableRows]);
103
- const [columnToWidthPercent, setColumnToWidthPercent] = useState({});
104
- const [tableWidthRem, setTableWidthRem] = useState(minWidth / 16);
105
- useEffect(() => {
106
- calculateTableAndColumnsWidths(internalTableColumns, setColumnToWidthPercent, setTableWidthRem);
107
- }, [internalTableColumns]);
108
- const tableContextValue = useMemo(() => {
109
- return {
110
- columnWidths,
111
- setColumnWidths,
112
- tableRows,
113
- setTableRows,
114
- isLoading: isLoading ?? false,
115
- };
116
- }, [columnWidths, setColumnWidths, tableRows, setTableRows, isLoading]);
117
- return (<FdTableContext.Provider value={tableContextValue}>
118
- <div className={cn("relative flex size-full flex-col justify-between overflow-visible", className)} style={getTableWidthStyles(isSmallScreen, minWidth, targetWidth, tableWidthRem, adaptiveWidth)} onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave}>
119
- <div className="flex flex-col">
120
- {internalTableColumns.length > 0 && (<div className="flex flex-col justify-start border-b border-muted" style={{
121
- width: widthPixels,
122
- }}>
123
- <div ref={fdTableHeaderRef}>
124
- <FdTableHeader tableInstance={tableInstance} tableSorted={onSortCallback} onRefreshItems={onRefreshItems} displayMode={effectiveDisplayMode} isTableHovered={isHovered} columnToWidthPercent={columnToWidthPercent}/>
125
- </div>
126
- </div>)}
127
- <div id={tableId} ref={fdTableRef} className={`h-full ${tableHeight}`}>
128
- {internalTableColumns.length > 0 && (<div className="flex flex-col justify-start" style={{
129
- width: widthPixels,
130
- ...(tableBodyHeightPixels && {
131
- height: tableBodyHeightPixels,
132
- }),
133
- }}>
134
- <FdTableBody tableInstance={tableInstance} onRefreshItems={onRefreshItems} deleteItem={itemDeleted} onRowClick={onRowClick} rowHighlightBehaviour={rowHighlightBehaviour} tableActionType={effectiveDisplayMode}/>
135
- </div>)}
136
- </div>
137
- </div>
138
- <div className={cn(!isHovered &&
139
- !isActive &&
140
- effectiveDisplayMode === tableDisplayModes.minimal &&
141
- "invisible")}>
142
- <FdPager displayMode={effectiveDisplayMode} pageSize={pageSize} rowCount={tableRows.length} onPaging={onPagingCallback} setIsActive={setIsActive} setPageNumber={setPageNumber} pageNumber={pageNumber}/>
143
- </div>
144
- </div>
145
- </FdTableContext.Provider>);
146
- }
147
- FdTable.displayName = "FdTable";
@@ -1,9 +0,0 @@
1
- import React, { memo } from "react";
2
- import { rowHighlightBehaviors, } from "@fd-toolbox/enums/enums";
3
- import { getTableBodyRowClasses, getTableBodyRowId } from "@meta/table/body/FdTableBody.funcs";
4
- import { FdTableBodyRow } from "@meta/table/body-row/FdTableBodyRow";
5
- const FdTableBody = memo(({ tableInstance, displayMode, onRefreshItems, deleteItem, onRowClick, tableActionType, rowHighlightBehaviour, }) => tableInstance.tableRows.length > 0 ? (<>
6
- {tableInstance.tableRows.map((row, index) => (<FdTableBodyRow key={getTableBodyRowId(tableInstance, index)} rowContext={{ row, tableInstance, internalTableColumns: [] }} displayMode={displayMode} onRefreshItems={onRefreshItems} itemDeleted={deleteItem} cellClick={onRowClick} className={getTableBodyRowClasses(rowHighlightBehaviour ?? rowHighlightBehaviors.default)} tableActionType={tableActionType}/>))}
7
- </>) : (<FdTableBodyRow className="table-cell"/>));
8
- FdTableBody.displayName = "FdTableBody";
9
- export { FdTableBody };
@@ -1,145 +0,0 @@
1
- import { cn } from "@fd-toolbox/lib/utils";
2
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
3
- import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
4
- import { FdViewSheet } from "@meta/view/FdViewSheet";
5
- import { YesOrNoDialog } from "@fd-component-toolbox/dialog/YesOrNoDialog";
6
- import { messages } from "@fd-toolbox-core/constants/messages-constants";
7
- import { FdDropdownMenu, FdDropdownMenuContent, FdDropdownMenuTrigger, } from "@fd-component-toolbox/dropdown-menu/FdDropdownMenu";
8
- import { internalTableColumnTypes, tableCustomActionTypes, tableCustomActionPositions, } from "@meta/table/table-models";
9
- import { tableActionTypes } from "@fd-toolbox/enums/enums";
10
- import { useCallback, useMemo, useState } from "react";
11
- import { tabsNames } from "@meta/view/view-constants";
12
- import { TableCustomAction } from "@meta/table/table-custom-action/TableCustomAction";
13
- import { FdTooltip, FdTooltipContent, FdTooltipProvider, FdTooltipTrigger, } from "@fd-component-toolbox/tooltip/FdTooltip";
14
- import { FdFadeOutText } from "@fd-component-toolbox/fade-out-text/FdFadeOutText";
15
- import { getCellId } from "@meta/table/body-cell/FdBodyCell.funcs";
16
- import { tableElementSuffixes } from "@fd-component-toolbox/table-element-suffixes";
17
- import { FdCustomActionLink } from "@meta/table/body-cell/FdCustomActionLink";
18
- import { shouldShowActionHelper } from "@meta/table/body-cell/FdActionBodyCell.funcs";
19
- export function FdActionBodyCell({ cellContext, actionType, shouldShowEditButton, shouldShowViewButton, shouldShowDeleteButton, viewCellId, isHovered, onRefreshItems, onViewClick, onDialogResponse, }) {
20
- const [dropdownOpen, setDropdownOpen] = useState(false);
21
- const onDropdownOpenChange = useCallback((open) => {
22
- setDropdownOpen(open);
23
- }, []);
24
- const shouldShowCustomActions = useMemo(() => {
25
- return !!(cellContext.tableInstance.customActions?.length &&
26
- (cellContext.internalTableColumn.type === internalTableColumnTypes.action ||
27
- cellContext.internalTableColumn.type === internalTableColumnTypes.customHeaderAction));
28
- }, [cellContext]);
29
- const shouldShowAction = useCallback((action) => {
30
- return shouldShowActionHelper(action, cellContext, shouldShowCustomActions);
31
- }, [cellContext, shouldShowCustomActions]);
32
- const onCustomAction = useCallback((result) => {
33
- if (result.shouldRefresh)
34
- onRefreshItems?.();
35
- }, [onRefreshItems]);
36
- return (<>
37
- {actionType === tableActionTypes.minimal &&
38
- (shouldShowEditButton || shouldShowViewButton || shouldShowDeleteButton) && (<FdDropdownMenu open={dropdownOpen} onOpenChange={onDropdownOpenChange}>
39
- <FdDropdownMenuTrigger asChild>
40
- <FdButton size="icon" variant="ghost" className={cn("size-5 p-1", isHovered || dropdownOpen ? "animate-fade-in" : "animate-fade-out")}>
41
- <FdIcon name={iconNames.dotsVerticalIcon}/>
42
- </FdButton>
43
- </FdDropdownMenuTrigger>
44
- <FdDropdownMenuContent className={cn("top-2 z-50 mt-2 box-border min-w-20 rounded-md border bg-background")}>
45
- {shouldShowViewButton && (<div className="flex select-none items-center rounded-sm text-sm outline-none transition-colors hover:bg-accent focus:bg-accent">
46
- <FdViewSheet id={cellContext.row.item.id} resourceName={cellContext.tableInstance.uiResourceMeta?.resourceMeta
47
- .resourceName} onRefreshResources={onRefreshItems} onEditClick={onViewClick} onCloseClick={setDropdownOpen} editMode={cellContext.tableInstance.editMode}>
48
- <div id={viewCellId} className={"flex cursor-pointer items-center gap-2 px-1.5 py-1 text-muted-foreground"}>
49
- <FdIcon name={iconNames.visibility}/>
50
- <p>View</p>
51
- </div>
52
- </FdViewSheet>
53
- </div>)}
54
- {!cellContext.tableInstance.hideDeleteButton && shouldShowDeleteButton && (<div className="flex select-none items-center rounded-sm text-sm outline-none transition-colors hover:bg-accent focus:bg-accent">
55
- <YesOrNoDialog title={messages.deleteConfirmation} onResponse={onDialogResponse} onCloseClick={setDropdownOpen} trigger={<div className="flex cursor-pointer items-center gap-2 px-1.5 py-1 text-muted-foreground">
56
- <FdIcon name={iconNames.trash}/>
57
- <p>Delete</p>
58
- </div>}/>
59
- </div>)}
60
- {shouldShowCustomActions &&
61
- cellContext.tableInstance.customActions.map((item) => (<div key={`customAction_${item.name}`} className="flex select-none items-center rounded-sm text-sm outline-none transition-colors hover:bg-accent focus:bg-accent">
62
- <TableCustomAction onAction={onCustomAction} customAction={item} cellContext={cellContext}/>
63
- </div>))}
64
- </FdDropdownMenuContent>
65
- </FdDropdownMenu>)}
66
- {actionType === tableActionTypes.default && (<div className="flex w-full items-center justify-center">
67
- <FdCustomActionValue cellContext={cellContext} shouldShowCustomActions={shouldShowCustomActions} shouldShowAction={shouldShowAction} onCustomAction={onCustomAction}/>
68
- {(cellContext.internalTableColumn.actionPosition === tableCustomActionPositions.default ||
69
- !cellContext.internalTableColumn.actionPosition) && (<FdDropdownMenu open={dropdownOpen} onOpenChange={onDropdownOpenChange}>
70
- <FdDropdownMenuTrigger asChild>
71
- <FdButton id={getCellId(cellContext.row.index, cellContext, tableElementSuffixes.actionsMenu)} size="icon" variant="ghost" className="size-5 p-1">
72
- <FdIcon name={iconNames.dotsVerticalIcon}/>
73
- </FdButton>
74
- </FdDropdownMenuTrigger>
75
- <FdDropdownMenuContent>
76
- <div className="flex select-none items-center rounded-sm text-sm outline-none transition-colors hover:bg-accent focus:bg-accent">
77
- <FdViewSheet id={cellContext.row.item.id} resourceName={cellContext.tableInstance.uiResourceMeta?.resourceMeta
78
- .resourceName} onRefreshResources={onRefreshItems} onEditClick={onViewClick} defaultTab={tabsNames.comments} editMode={cellContext.tableInstance.editMode}>
79
- <div className="flex cursor-pointer items-center gap-2 px-1.5 py-1 text-muted-foreground">
80
- <p>Comments</p>
81
- </div>
82
- </FdViewSheet>
83
- </div>
84
- {!cellContext.tableInstance.hideDeleteButton && shouldShowDeleteButton && (<div className="flex select-none items-center rounded-sm text-sm outline-none transition-colors hover:bg-accent focus:bg-accent">
85
- <YesOrNoDialog title={messages.deleteConfirmation} onResponse={onDialogResponse} onCloseClick={setDropdownOpen} trigger={<div className="flex cursor-pointer items-center gap-2 px-1.5 py-1 text-muted-foreground">
86
- <p>Delete</p>
87
- </div>}/>
88
- </div>)}
89
- {shouldShowCustomActions &&
90
- cellContext.tableInstance
91
- .customActions.filter((action) => action.isInShowMoreDropdown)
92
- .map((item) => (<div key={`customAction_${item.name}`} className="flex select-none items-center rounded-sm text-sm outline-none transition-colors hover:bg-accent focus:bg-accent">
93
- <TableCustomAction onAction={onCustomAction} customAction={item} cellContext={cellContext}/>
94
- </div>))}
95
- </FdDropdownMenuContent>
96
- </FdDropdownMenu>)}
97
- </div>)}
98
- </>);
99
- }
100
- function FdCustomActionValue({ cellContext, shouldShowCustomActions, shouldShowAction, onCustomAction, }) {
101
- if (shouldShowCustomActions &&
102
- cellContext.internalTableColumn.actionType === tableCustomActionTypes.icon) {
103
- return cellContext.tableInstance
104
- .customActions.filter((action) => shouldShowAction(action) && action.actionType === tableCustomActionTypes.icon)
105
- .map((action) => (<FdTooltipProvider key={`customAction_button_${action.name}`}>
106
- <FdTooltip>
107
- <FdTooltipTrigger asChild>
108
- <FdButton size="lg" variant="ghost" className={cn("size-7 p-1")} onClick={() => {
109
- action.cellAction?.(cellContext);
110
- onCustomAction({ shouldRefresh: true });
111
- }}>
112
- {action.icon && (<FdIcon name={action.icon} className={cn("size-8 font-bold", action.dynamicClassName?.(cellContext))}/>)}
113
- </FdButton>
114
- </FdTooltipTrigger>
115
- <FdTooltipContent>{action.name}</FdTooltipContent>
116
- </FdTooltip>
117
- </FdTooltipProvider>));
118
- }
119
- else if (cellContext.internalTableColumn.actionType === tableCustomActionTypes.text) {
120
- return (<div className="w-full flex-col">
121
- {cellContext.tableInstance
122
- .customActions.filter((action) => action.actionType === tableCustomActionTypes.text)
123
- .map((action) => (<FdFadeOutText key={action.name} className="cursor-pointer select-none justify-center text-center text-primary hover:text-primary-hover hover:underline" onClick={() => {
124
- action.cellAction?.(cellContext);
125
- onCustomAction({ shouldRefresh: action.shouldRefresh });
126
- }}>
127
- {action.name}
128
- </FdFadeOutText>))}
129
- </div>);
130
- }
131
- else if (cellContext.internalTableColumn.actionType === tableCustomActionTypes.link) {
132
- return (<div className="w-full flex-col">
133
- {cellContext.tableInstance
134
- .customActions.filter((action) => action.actionType === tableCustomActionTypes.link)
135
- .map((action) => (<FdFadeOutText key={action.name} className="cursor-pointer select-none justify-center text-center text-primary hover:text-primary-hover hover:underline" onClick={() => {
136
- action.cellAction?.(cellContext);
137
- onCustomAction({
138
- shouldRefresh: action.shouldRefresh,
139
- });
140
- }}>
141
- {action.dynamicLink ? (<FdCustomActionLink text={action.name} dynamicLink={action.dynamicLink} cellContext={cellContext}/>) : (action.name)}
142
- </FdFadeOutText>))}
143
- </div>);
144
- }
145
- }
@@ -1,27 +0,0 @@
1
- import { useEffect, useState } from "react";
2
- import { FdDialog, FdDialogContent, FdDialogTitle, FdDialogTrigger, } from "@fd-component-toolbox/dialog/FdDialog";
3
- import { FdFrameworkImage } from "@fd-component-toolbox/client/framework";
4
- import { getBlobUrl } from "@meta/core/resources/blob/blob-urls";
5
- import { extractScreenshotBlobUrl } from "@meta/table/body-cell/FdBlobBodyCell.funcs";
6
- export function FdBlobBodyCell({ cellContext }) {
7
- const [fileName, setFileName] = useState("");
8
- const imageUrl = getBlobUrl(fileName);
9
- useEffect(() => {
10
- extractScreenshotBlobUrl(cellContext.row.item, setFileName);
11
- }, [cellContext.row.item]);
12
- if (!fileName)
13
- return null;
14
- return (<FdDialog>
15
- <FdDialogTrigger className="flex size-full">
16
- <div className="relative flex h-32 w-44">
17
- <FdFrameworkImage src={imageUrl} alt="Automatically generated screenshot preview" fill className="rounded-md object-contain" loading="lazy"/>
18
- </div>
19
- </FdDialogTrigger>
20
- <FdDialogContent className="h-4/5 w-full max-w-5xl">
21
- <FdDialogTitle className="hidden"/>
22
- <div className="relative size-full">
23
- <FdFrameworkImage src={imageUrl} alt="Automatically generated screenshot preview" fill className="object-contain"/>
24
- </div>
25
- </FdDialogContent>
26
- </FdDialog>);
27
- }
@@ -1,133 +0,0 @@
1
- import { createElement, useCallback, useContext, useEffect, useMemo, useState } from "react";
2
- import { cn } from "@fd-toolbox/lib/utils";
3
- import { FdCheckbox } from "@fd-component-toolbox/checkbox/FdCheckbox";
4
- import { internalTableColumnTypes } from "@meta/table/table-models";
5
- import { getBodyImageCell, handleDialogResponse, initBodyCell, isRightAlignColumn, updateSelectedRow, } from "@meta/table/body-cell/FdBodyCell.funcs";
6
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
7
- import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
8
- import { routes } from "@fd-toolbox/routing/routes";
9
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
10
- import { FdActionBodyCell } from "@meta/table/body-cell/FdActionBodyCell";
11
- import { getResourceUrl } from "@meta/services/meta-navigations";
12
- import { FdAvatar, FdAvatarFallback, FdAvatarImage } from "@fd-component-toolbox/avatar/FdAvatar";
13
- import { FdFrameworkImage } from "@fd-component-toolbox/client/framework";
14
- import { silentChangeUrl } from "@fd-toolbox/routing/routers";
15
- import { isClickableCell } from "@meta/table/services/fd-table-private-cell";
16
- import { FdFadeOutText } from "@fd-component-toolbox/fade-out-text/FdFadeOutText";
17
- import { imageNotFoundUrl } from "@fd-toolbox/constants/public-files";
18
- import { isMarkdown, isRichText } from "@meta/core/property-types";
19
- import { markdownToHtml, parseText } from "@fd-component-toolbox/markdown/markdown-parser";
20
- import { FdTableContext } from "@meta/table/table-context";
21
- import { FdBodyCellValue } from "@meta/table/body-cell/FdBodyCellValue";
22
- import { isString } from "@fd-toolbox/types/ensure-type";
23
- export function FdBodyCell({ className, width, cellContext, onRefreshItems, itemDeleted, actionType, isHovered, }) {
24
- const [cellId, setCellId] = useState("");
25
- const [checkboxId, setCheckboxId] = useState("");
26
- const [iconId, setIconId] = useState("");
27
- const [viewCellId, setViewCellId] = useState("");
28
- const [cellValue, setCellValue] = useState("");
29
- const [parsedMarkdown, setParsedMarkdown] = useState("");
30
- const [parsedRichText, setParsedRichText] = useState([]);
31
- const [cellImage, setCellImage] = useState(null);
32
- const [imageSrc, setImageSrc] = useState(imageNotFoundUrl);
33
- const [cellWidth, setCellWidth] = useState(cellContext?.internalTableColumn.width ?? 0);
34
- const [isDefaultOrExpandAdvisableCell, setIsDefaultOrExpandAdvisableCell] = useState(false);
35
- const [isCheckmarkCell, setIsCheckmarkCell] = useState(false);
36
- const [shouldShowEditButton, setShouldShowEditButton] = useState(false);
37
- const [shouldShowViewButton, setShouldShowViewButton] = useState(false);
38
- const [shouldShowDeleteButton, setShouldShowDeleteButton] = useState(false);
39
- const { isLoading, setTableRows } = useContext(FdTableContext);
40
- useEffect(() => {
41
- if (cellContext) {
42
- const loadImage = async () => {
43
- const image = getBodyImageCell(cellContext);
44
- if (image) {
45
- const src = await image;
46
- setImageSrc(src ?? imageNotFoundUrl);
47
- }
48
- };
49
- loadImage();
50
- }
51
- }, [cellContext]);
52
- useAsyncEffect(async () => {
53
- await initBodyCell(cellId, setCellValue, setCellImage, setCheckboxId, setViewCellId, setCellId, setIconId, setIsDefaultOrExpandAdvisableCell, setIsCheckmarkCell, setCellWidth, setShouldShowEditButton, setShouldShowViewButton, setShouldShowDeleteButton, cellContext);
54
- }, [cellContext, cellId]);
55
- useAsyncEffect(async () => {
56
- if (cellContext?.internalTableColumn?.propertyMeta && isString(cellValue)) {
57
- if (isMarkdown(cellContext.internalTableColumn.propertyType, cellContext.internalTableColumn.propertyTypeFormat)) {
58
- const html = await markdownToHtml(cellValue);
59
- setParsedMarkdown(html ?? "");
60
- }
61
- if (isRichText(cellContext.internalTableColumn.propertyType, cellContext.internalTableColumn.propertyTypeFormat)) {
62
- setParsedRichText(parseText(cellValue));
63
- }
64
- }
65
- }, [cellValue]);
66
- const alignmentClass = useMemo(() => {
67
- return isRightAlignColumn(cellContext?.internalTableColumn) ? "justify-end" : "";
68
- }, [cellContext?.internalTableColumn]);
69
- const onCheckboxChange = useCallback((isChecked) => {
70
- updateSelectedRow(isChecked, cellContext, setTableRows);
71
- }, [cellContext, setTableRows]);
72
- const onDialogResponse = useCallback((isYes) => handleDialogResponse(isYes, itemDeleted, cellContext), [cellContext, itemDeleted]);
73
- const onViewClick = useCallback(() => {
74
- if (cellContext) {
75
- const url = getResourceUrl(routes.view, cellContext.tableInstance.uiResourceMeta.resourceMeta.resourceName, cellContext.row.item.id);
76
- silentChangeUrl(url);
77
- }
78
- }, [cellContext]);
79
- const onStopPropagationClick = useCallback((event) => {
80
- event.stopPropagation();
81
- }, []);
82
- if (!cellContext)
83
- return (<div className="p-4 text-xs text-muted-foreground lg:text-sm">
84
- {isLoading ? "Loading..." : "No data"}
85
- </div>);
86
- return (<div style={{ minWidth: cellWidth, width }} className={cn("flex flex-col justify-around px-1 text-xs lg:text-sm", className)}>
87
- {isDefaultOrExpandAdvisableCell && (<div className="relative w-full pl-1.5 pr-0.5 text-foreground">
88
- {!cellContext.internalTableColumn.cellTemplate ? (<div className={cn("hover:overflow-visible hover:whitespace-nowrap", isClickableCell(cellContext) &&
89
- "cursor-pointer text-fd-accent hover:cursor-pointer")}>
90
- <div className="transition-colors duration-200 ease-linear">
91
- <FdFadeOutText isRightAlign={isRightAlignColumn(cellContext?.internalTableColumn)}>
92
- <div className={cn("flex items-center", alignmentClass)}>
93
- {cellImage && (<FdAvatar className="mr-2 size-5">
94
- <FdAvatarImage />
95
- <FdAvatarFallback>
96
- <FdFrameworkImage className="object-fill" src={cellImage} alt="Cell image" width={40} height={40} loading="lazy"/>
97
- </FdAvatarFallback>
98
- </FdAvatar>)}
99
- </div>
100
- <div id={cellId} className="flex">
101
- <FdBodyCellValue cellContext={cellContext} onRefreshItems={onRefreshItems} cellValue={String(cellValue)} imageSrc={imageSrc} onViewClick={onViewClick} parsedMarkdown={parsedMarkdown} parsedRichText={parsedRichText}/>
102
- </div>
103
- </FdFadeOutText>
104
- </div>
105
- </div>) : (<div className="hover:overflow-visible hover:whitespace-nowrap">
106
- <div className="transition-colors duration-200 ease-linear">
107
- <div id={cellId} className="truncate transition-colors duration-200 ease-linear">
108
- {createElement(cellContext.internalTableColumn.cellTemplate, {
109
- resource: cellContext.row.item,
110
- internalTableColumn: cellContext.internalTableColumn,
111
- resourceName: cellContext.tableInstance.uiResourceMeta.resourceMeta
112
- .resourceName,
113
- })}
114
- </div>
115
- </div>
116
- </div>)}
117
- </div>)}
118
- <div className="flex w-full flex-row items-center justify-center gap-2" onClick={onStopPropagationClick}>
119
- {cellContext.internalTableColumn.type === internalTableColumnTypes.checkBox &&
120
- cellContext.tableInstance.multiSelect && (<div>
121
- <FdCheckbox id={checkboxId} onCheckedChange={onCheckboxChange} checked={cellContext.row.selected}/>
122
- </div>)}
123
- {(cellContext.internalTableColumn.type === internalTableColumnTypes.action ||
124
- cellContext.internalTableColumn.type === internalTableColumnTypes.customHeaderAction) && (<FdActionBodyCell cellContext={cellContext} actionType={actionType} shouldShowEditButton={shouldShowEditButton} shouldShowViewButton={shouldShowViewButton} shouldShowDeleteButton={shouldShowDeleteButton} viewCellId={viewCellId} isHovered={isHovered ?? false} onRefreshItems={onRefreshItems} onViewClick={onViewClick} onDialogResponse={onDialogResponse}/>)}
125
- </div>
126
- {isCheckmarkCell && (<div id={cellId} className="flex w-full justify-end">
127
- {!!cellValue && (<FdButton id={iconId} className="size-5" size="icon" variant="icon">
128
- <FdIcon name={iconNames.check}/>
129
- </FdButton>)}
130
- &nbsp;
131
- </div>)}
132
- </div>);
133
- }