@fernir2/saas-kit-cli 0.1.4 → 0.1.6
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.
- package/package.json +211 -7
- package/cli/.gitlab-ci.yml +0 -14
- package/cli/.husky/commit-msg +0 -1
- package/cli/.husky/pre-commit +0 -1
- package/cli/README.md +0 -101
- package/cli/bin/index.ts +0 -358
- package/cli/drizzle.config.ts +0 -12
- package/cli/global-setup.ts +0 -25
- package/cli/npm-commands/gen-meta/index.ts +0 -3
- package/cli/npm-commands/gen-schema/index.ts +0 -5
- package/cli/npm-commands/migrate-db/index.ts +0 -5
- package/cli/npm-commands/migrate-db/migrate-db.ts +0 -15
- package/cli/npm-commands/seed-db/index.ts +0 -5
- package/cli/npm-commands/seed-db/seed-db.ts +0 -15
- package/cli/playwright.config.ts +0 -34
- package/cli/postcss.config.mjs +0 -9
- package/cli/server.ts +0 -41
- package/cli/src/app/api/v1/[resourceName]/[id]/route.ts/route.ts +0 -11
- package/cli/src/app/api/v1/[resourceName]/route.ts/route.ts +0 -14
- package/cli/src/app/api/v1/[resourceName]/upsert/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/log/route.ts/route.ts +0 -7
- package/cli/src/app/api/v1/otheruser/[id]/route.ts/route.ts +0 -14
- package/cli/src/app/api/v1/otheruser/route.ts/route.ts +0 -7
- package/cli/src/app/api/v1/password/forgotpassword/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/password/resetpassword/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/payment/method/route.ts/route.ts +0 -4
- package/cli/src/app/api/v1/payment/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/payment/verify-fail/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/payment/verify-success/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/preload/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/searchable-resources/route.ts/route.ts +0 -11
- package/cli/src/app/api/v1/searchresult/route.ts/route.ts +0 -35
- package/cli/src/app/api/v1/sign-in/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/sign-out/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/sign-up/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/subscription/cancel/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/subscription/create/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/subscription/update/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/uimeta/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/uimetas/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/userpermission/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/visible-workspace/route.ts/route.ts +0 -5
- package/cli/src/app/api/v1/workspace/change/route.ts/route.ts +0 -5
- package/cli/src/app/favicon.ico +0 -0
- package/cli/src/app/layout.tsx +0 -42
- package/cli/src/app/page.tsx +0 -9
- package/cli/tailwind.config.ts +0 -13
- package/packages/base-repo/tools/git/commit-msg-script.ts +0 -42
- package/packages/base-repo/tools/git/pre-commit-script.ts +0 -431
- package/packages/level2/client/components/error-fallback/FdErrorFallback.jsx +0 -14
- package/packages/level2/client/components/feed/FdFeed.funcs.jsx +0 -65
- package/packages/level2/client/components/feed/FdFeed.jsx +0 -34
- package/packages/level2/client/components/feed/FdFeedActions.jsx +0 -15
- package/packages/level2/client/components/feed/FdFeedComments.jsx +0 -6
- package/packages/level2/client/components/feed/FdFeedEntry.jsx +0 -36
- package/packages/level2/client/components/feed/FdFeedHeader.jsx +0 -23
- package/packages/level2/client/components/feed/FdFeedReactionsSummary.jsx +0 -16
- package/packages/level2/client/components/providers/FdProviders.jsx +0 -28
- package/packages/level2/client/components/subscription-plan/FdSubscriptionPlan.jsx +0 -163
- package/packages/level2/client/components/wizard/FdWizard.jsx +0 -45
- package/packages/level2/client/components/wizard/FdWizardStepper.jsx +0 -55
- package/packages/level2/client/pages/dashboard-page/DashbordPage.jsx +0 -46
- package/packages/level2/client/pages/dynamic-layout-page/DynamicLayoutPage.jsx +0 -22
- package/packages/level2/client/pages/edit-password-page/EditPasswordPage.jsx +0 -8
- package/packages/level2/client/pages/edit-user-by-id-page/EditUserByIdPage.jsx +0 -14
- package/packages/level2/client/pages/edit-user-page/EditUserPage.jsx +0 -6
- package/packages/level2/client/pages/feed-page/FeedPage.jsx +0 -8
- package/packages/level2/client/pages/file-upload-page/FileUploadPage.jsx +0 -7
- package/packages/level2/client/pages/forgot-password-page/ForgotPasswordPage.jsx +0 -8
- package/packages/level2/client/pages/leads-viw-page/LeadsViewPage.jsx +0 -6
- package/packages/level2/client/pages/microsoft-page/MicrosoftPage.jsx +0 -16
- package/packages/level2/client/pages/payment-plan-page/PaymentPlanPage.jsx +0 -18
- package/packages/level2/client/pages/preload-page/PreloadPage.jsx +0 -25
- package/packages/level2/client/pages/reset-password-page/ResetPasswordPage.jsx +0 -8
- package/packages/level2/client/pages/screenshot-page/TestScreenshotPage.jsx +0 -23
- package/packages/level2/client/pages/sign-in-page/SignInPage.jsx +0 -24
- package/packages/level2/client/pages/sign-up-page/SignUpPage.jsx +0 -9
- package/packages/level2/client/pages/status-board-page/StatusBoardPage.jsx +0 -6
- package/packages/level2/client/pages/test-layout/TestLayout.jsx +0 -11
- package/packages/level2/client/pages/test-page/TestPage.jsx +0 -12
- package/packages/level2/client/pages/user-list-page/UserListPage.jsx +0 -4
- package/packages/level2/client/pages/view-page/ViewPage.jsx +0 -21
- package/packages/level2/client/payments/change-payment-method-field/ChangePaymentMethodField.jsx +0 -48
- package/packages/level2/client/payments/checkout-form/CheckoutForm.jsx +0 -95
- package/packages/level2/client/payments/checkout-form/CheckoutFormSubmit.jsx +0 -11
- package/packages/level2/client/payments/checkout-form/checkout-form-fields.jsx +0 -68
- package/packages/level2/client/website-scan/FdWebsiteScanResult.funcs.jsx +0 -12
- package/packages/level2/client/website-scan/FdWebsiteScanResult.jsx +0 -33
- package/packages/level2/client/website-scan/website-scan-data.jsx +0 -28
- package/packages/level2/client/website-scan/website-scan-icons/FacebookIcon.jsx +0 -6
- package/packages/level2/client/website-scan/website-scan-icons/FacebookPixelIcon.jsx +0 -49
- package/packages/level2/client/website-scan/website-scan-icons/GoogleAnalyticsIcon.jsx +0 -7
- package/packages/level2/client/website-scan/website-scan-icons/InstagramIcon.jsx +0 -32
- package/packages/level2/client/website-scan/website-scan-icons/LinkedinIcon.jsx +0 -6
- package/packages/level2/client/website-scan/website-scan-icons/OtherPlatformIcon.jsx +0 -110
- package/packages/level2/client/website-scan/website-scan-icons/ShopifyIcon.jsx +0 -46
- package/packages/level2/client/website-scan/website-scan-icons/SquarespaceIcon.jsx +0 -57
- package/packages/level2/client/website-scan/website-scan-icons/TiktokIcon.jsx +0 -15
- package/packages/level2/client/website-scan/website-scan-icons/WixIcon.jsx +0 -62
- package/packages/level2/client/website-scan/website-scan-icons/WordpressIcon.jsx +0 -53
- package/packages/level2/client/website-scan/website-scan-icons/XIcon.jsx +0 -6
- package/packages/level2/fd-app-toolbox/edit-other-user/EditOtherUser.jsx +0 -7
- package/packages/level2/fd-app-toolbox/edit-password-form/EditPasswordForm.jsx +0 -68
- package/packages/level2/fd-app-toolbox/edit-user-form/EditUserForm.jsx +0 -122
- package/packages/level2/fd-app-toolbox/edit-user-sheet/EditUserSheet.jsx +0 -35
- package/packages/level2/fd-app-toolbox/forgot-password-form/ForgotPasswordForm.jsx +0 -87
- package/packages/level2/fd-app-toolbox/layout/client-layout/ClientLayout.jsx +0 -19
- package/packages/level2/fd-app-toolbox/layout/client-root/ClientRoot.jsx +0 -32
- package/packages/level2/fd-app-toolbox/layout/hamburger-menu/FdHamburgerMenu.jsx +0 -47
- package/packages/level2/fd-app-toolbox/layout/navbar/FdNarrowNavbar.jsx +0 -40
- package/packages/level2/fd-app-toolbox/layout/sidebar/FdSidebar.jsx +0 -48
- package/packages/level2/fd-app-toolbox/layout/sidebar/sidebar-dropdown-menu/FdDropdownMenuItemTitle.jsx +0 -12
- package/packages/level2/fd-app-toolbox/layout/sidebar/sidebar-dropdown-menu/FdSidebarDropdownMenu.jsx +0 -81
- package/packages/level2/fd-app-toolbox/layout/sidebar/sidebar-resources-provider.jsx +0 -30
- package/packages/level2/fd-app-toolbox/layout/toolbar/FdToolbar.jsx +0 -89
- package/packages/level2/fd-app-toolbox/layout/toolbar/FdTopNav.jsx +0 -42
- package/packages/level2/fd-app-toolbox/layout/toolbar/title-provider/ToolbarTitleProvider.jsx +0 -10
- package/packages/level2/fd-app-toolbox/login-form/LoginForm.jsx +0 -165
- package/packages/level2/fd-app-toolbox/menu/notifications-menu/FdNotificationMenu.jsx +0 -43
- package/packages/level2/fd-app-toolbox/menu/notifications-menu/notification-list/FdNotificationList.jsx +0 -53
- package/packages/level2/fd-app-toolbox/menu/top-menu/FdTopMenu.jsx +0 -28
- package/packages/level2/fd-app-toolbox/menu/top-menu/top-menu-group/FdTopMenuGroup.jsx +0 -35
- package/packages/level2/fd-app-toolbox/menu/top-menu/top-menu-item/FdTopMenuItem.jsx +0 -47
- package/packages/level2/fd-app-toolbox/menu/user-dropdown-menu/FdUserDropdownMenu.jsx +0 -122
- package/packages/level2/fd-app-toolbox/menu/user-dropdown-menu/user-dropdown-menu-item/FdUserDropdownMenuItem.jsx +0 -56
- package/packages/level2/fd-app-toolbox/menu/visible-workspace-picker/FdVisibleWorkspacePicker.jsx +0 -36
- package/packages/level2/fd-app-toolbox/menu/workspace-picker/FdWorkspacePicker.jsx +0 -47
- package/packages/level2/fd-app-toolbox/providers/ThemeProvider/ThemeProvider.jsx +0 -27
- package/packages/level2/fd-app-toolbox/providers/auth-provider/AuthProvider.jsx +0 -38
- package/packages/level2/fd-app-toolbox/providers/sidebar-provider/FdSidebarContext.jsx +0 -17
- package/packages/level2/fd-app-toolbox/register-form/RegisterForm.jsx +0 -119
- package/packages/level2/fd-app-toolbox/report/FdChart.jsx +0 -120
- package/packages/level2/fd-app-toolbox/report/ReportChart.jsx +0 -29
- package/packages/level2/fd-app-toolbox/reset-password-form/ResetPasswordForm.jsx +0 -81
- package/packages/level2/fd-app-toolbox/search/FdSearch.jsx +0 -56
- package/packages/level2/fd-app-toolbox/search/search-dialog/FdSearchDialog.jsx +0 -72
- package/packages/level2/fd-app-toolbox/search/search-dialog-provider.jsx +0 -16
- package/packages/level2/fd-app-toolbox/search/search-input/FdSearchInput.jsx +0 -49
- package/packages/level2/fd-app-toolbox/search/search-resource-results/FdSearchResourcesResults.jsx +0 -36
- package/packages/level2/fd-app-toolbox/search/search-result/FdSearchResult.jsx +0 -46
- package/packages/level2/fd-app-toolbox/search/search-searchable-resource-results/FdSearchSearchableResourceResult.jsx +0 -43
- package/packages/level2/fd-app-toolbox/search/search-searchable-resource-results/FdSearchSearchableResourceResults.jsx +0 -22
- package/packages/level2/fd-app-toolbox/server/layout/private-layout/PrivateLayout.jsx +0 -32
- package/packages/level2/fd-app-toolbox/status-board/FdStatusBoard.jsx +0 -49
- package/packages/level2/fd-app-toolbox/status-board/status-board-item/FdStatusBoardItem.jsx +0 -17
- package/packages/level2/fd-app-toolbox/status-board/status-board-status/FdStatusBoardStatus.jsx +0 -27
- package/packages/level2/fd-app-toolbox/user-list/UserList.jsx +0 -58
- package/packages/level2/fd-component-toolbox/animation/FdLabelAnimation.jsx +0 -55
- package/packages/level2/fd-component-toolbox/avatar/FdAvatar.jsx +0 -50
- package/packages/level2/fd-component-toolbox/back-button/FdBackButton.jsx +0 -21
- package/packages/level2/fd-component-toolbox/badge/FdBadge.jsx +0 -19
- package/packages/level2/fd-component-toolbox/badge-toggle-list/FdBadgeToggleList.jsx +0 -47
- package/packages/level2/fd-component-toolbox/button/FdButton.jsx +0 -64
- package/packages/level2/fd-component-toolbox/calendar/FdCalendar.jsx +0 -68
- package/packages/level2/fd-component-toolbox/card/FdCard.jsx +0 -56
- package/packages/level2/fd-component-toolbox/card/FdCardBigDigits.jsx +0 -25
- package/packages/level2/fd-component-toolbox/chart/FdChart.jsx +0 -269
- package/packages/level2/fd-component-toolbox/checkbox/FdCheckbox.jsx +0 -39
- package/packages/level2/fd-component-toolbox/command/FdCommand.jsx +0 -123
- package/packages/level2/fd-component-toolbox/datepicker/FdDatePicker.jsx +0 -155
- package/packages/level2/fd-component-toolbox/dialog/FdDialog.jsx +0 -106
- package/packages/level2/fd-component-toolbox/dialog/YesOrNoDialog.jsx +0 -57
- package/packages/level2/fd-component-toolbox/drag-and-drop/FdDragDropContext.jsx +0 -19
- package/packages/level2/fd-component-toolbox/drag-and-drop/FdDraggable.jsx +0 -27
- package/packages/level2/fd-component-toolbox/drag-and-drop/FdDroppable.jsx +0 -22
- package/packages/level2/fd-component-toolbox/dropdown-menu/FdDropdownMenu.jsx +0 -198
- package/packages/level2/fd-component-toolbox/dynamic-layout/FdDynamicComponent.jsx +0 -27
- package/packages/level2/fd-component-toolbox/dynamic-layout/FdDynamicLayoutDragAndDrop.jsx +0 -78
- package/packages/level2/fd-component-toolbox/fade-out-text/FdFadeOutText.jsx +0 -52
- package/packages/level2/fd-component-toolbox/form/FdForm.jsx +0 -146
- package/packages/level2/fd-component-toolbox/icon/FdIcon.jsx +0 -192
- package/packages/level2/fd-component-toolbox/icon/custom-icons/FdFilterIcon.jsx +0 -11
- package/packages/level2/fd-component-toolbox/image/FdImage.jsx +0 -15
- package/packages/level2/fd-component-toolbox/input/FdInput.jsx +0 -94
- package/packages/level2/fd-component-toolbox/label/FdLabel.jsx +0 -19
- package/packages/level2/fd-component-toolbox/link/FdLink.jsx +0 -23
- package/packages/level2/fd-component-toolbox/list/FdList.jsx +0 -20
- package/packages/level2/fd-component-toolbox/list/list-item/FdListItem.jsx +0 -46
- package/packages/level2/fd-component-toolbox/loading/FdLoadingIndicator.jsx +0 -7
- package/packages/level2/fd-component-toolbox/logos/FacebookLogo.jsx +0 -11
- package/packages/level2/fd-component-toolbox/logos/GoogleLogo.jsx +0 -12
- package/packages/level2/fd-component-toolbox/logos/MicrosoftLogo.jsx +0 -11
- package/packages/level2/fd-component-toolbox/markdown/FdMarkdown.jsx +0 -105
- package/packages/level2/fd-component-toolbox/markdown/markdown-parser.jsx +0 -72
- package/packages/level2/fd-component-toolbox/multiselect/FdMultiselect.jsx +0 -240
- package/packages/level2/fd-component-toolbox/navigation/FdNavigation.jsx +0 -43
- package/packages/level2/fd-component-toolbox/navigation/navigation-item/FdNavigationItem.jsx +0 -23
- package/packages/level2/fd-component-toolbox/radio-group/FdRadioGroup.jsx +0 -46
- package/packages/level2/fd-component-toolbox/rich-text/FdRichText.jsx +0 -58
- package/packages/level2/fd-component-toolbox/save-status/FdSaveStatus.jsx +0 -40
- package/packages/level2/fd-component-toolbox/select/FdSelect.jsx +0 -173
- package/packages/level2/fd-component-toolbox/separator/FdSeparator.jsx +0 -19
- package/packages/level2/fd-component-toolbox/sheet/FdSheet.jsx +0 -121
- package/packages/level2/fd-component-toolbox/slide-toggle/FdSlideToggle.jsx +0 -57
- package/packages/level2/fd-component-toolbox/spinner/Spinner.jsx +0 -36
- package/packages/level2/fd-component-toolbox/subheading/FdSubHeading.jsx +0 -12
- package/packages/level2/fd-component-toolbox/switch/FdSwitch.jsx +0 -55
- package/packages/level2/fd-component-toolbox/tabs/FdTabs.jsx +0 -53
- package/packages/level2/fd-component-toolbox/textarea/FdTextArea.jsx +0 -42
- package/packages/level2/fd-component-toolbox/toaster/FdToaster.jsx +0 -20
- package/packages/level2/fd-component-toolbox/tooltip/FdTooltip.jsx +0 -80
- package/packages/level2/meta/browsers/base-multi-browser/FdBaseMultiBrowser.jsx +0 -72
- package/packages/level2/meta/browsers/base-multi-browser/base-multi-browser-dialog/FdBaseMultiBrowserDialog.jsx +0 -159
- package/packages/level2/meta/browsers/browser/FdBrowser.jsx +0 -58
- package/packages/level2/meta/browsers/browser/browser-dialog/FdBrowserDialog.jsx +0 -89
- package/packages/level2/meta/browsers/many-to-many-browser/FdManyToManyBrowser.jsx +0 -33
- package/packages/level2/meta/browsers/multi-browser/FdMultiBrowser.jsx +0 -32
- package/packages/level2/meta/card-list/FdCardList.jsx +0 -40
- package/packages/level2/meta/card-list/card/FdCard.jsx +0 -44
- package/packages/level2/meta/card-list/card/action-block/FdCardActionBlock.jsx +0 -70
- package/packages/level2/meta/card-list/card/content-block/FdCardContentBlock.jsx +0 -64
- package/packages/level2/meta/card-list/card/image-block/FdCardImage.jsx +0 -10
- package/packages/level2/meta/client/framework/hooks.jsx +0 -39
- package/packages/level2/meta/comment/FdComment.jsx +0 -16
- package/packages/level2/meta/comment/FdCommentList.jsx +0 -32
- package/packages/level2/meta/components/edit-image/FdEditImage.jsx +0 -42
- package/packages/level2/meta/components/edit-image/FdEditImageActionMenu.jsx +0 -31
- package/packages/level2/meta/components/edit-image/FdEditImageDropdownMenu.jsx +0 -42
- package/packages/level2/meta/components/file-upload/FileUpload.jsx +0 -103
- package/packages/level2/meta/components/file-upload/PreviewMedia.jsx +0 -36
- package/packages/level2/meta/components/multi-list/FdMultiList.jsx +0 -65
- package/packages/level2/meta/components/multi-list/FdMultiListEditResource.jsx +0 -31
- package/packages/level2/meta/edit-resource/FdEditResource.jsx +0 -135
- package/packages/level2/meta/edit-resource/FdEditResourceFormBody.jsx +0 -8
- package/packages/level2/meta/edit-resource/FdEditResourceHeader.jsx +0 -43
- package/packages/level2/meta/edit-resource/FdEditResourceSheet.jsx +0 -70
- package/packages/level2/meta/edit-resource/SaveCompleteProvider.jsx +0 -16
- package/packages/level2/meta/edit-resource/edit-link/FdEditLink.jsx +0 -48
- package/packages/level2/meta/edit-resource/edit-link/FdEditLinkResource.jsx +0 -18
- package/packages/level2/meta/edit-resource/edit-resource-dialog/FdEditResourceDialog.jsx +0 -34
- package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceBlobField.jsx +0 -15
- package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceEnumField.jsx +0 -35
- package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceFlagsEnumField.jsx +0 -23
- package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceImageField.jsx +0 -7
- package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourcePropertyBlock.jsx +0 -38
- package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceRichTextField.jsx +0 -16
- package/packages/level2/meta/edit-resource/edit-resource-property-block/edit-resource-fields.jsx +0 -53
- package/packages/level2/meta/edit-resource/edit-resource-property-field/FdEditResourcePropertyField.jsx +0 -105
- package/packages/level2/meta/filtering/filter/FdEnumFlagFilter.jsx +0 -40
- package/packages/level2/meta/filtering/filter/FdFilter.jsx +0 -123
- package/packages/level2/meta/filtering/filter/filters/BooleanFilter.jsx +0 -25
- package/packages/level2/meta/filtering/filter/filters/DateFilter.jsx +0 -10
- package/packages/level2/meta/filtering/filter/filters/EnumFilter.jsx +0 -44
- package/packages/level2/meta/filtering/filter/filters/GuidFilter.jsx +0 -28
- package/packages/level2/meta/filtering/filter/filters/IntegerFilter.jsx +0 -28
- package/packages/level2/meta/filtering/filter/filters/TextFilter.jsx +0 -11
- package/packages/level2/meta/filtering/resource-filter-list/FdResourceFilterList.jsx +0 -120
- package/packages/level2/meta/filtering/resource-filter-list/resource-list-dropdown-menu/ResourceListDropdownMenu.funcs.jsx +0 -4
- package/packages/level2/meta/filtering/resource-filter-list/resource-list-dropdown-menu/ResourceListDropdownMenu.jsx +0 -43
- package/packages/level2/meta/providers/global-provider/FdGlobalContext.jsx +0 -17
- package/packages/level2/meta/resource-list/ResourceList.jsx +0 -63
- package/packages/level2/meta/resource-list/resource-add-button.jsx +0 -11
- package/packages/level2/meta/resource-list/resource-list-card/FdResourceListCard.jsx +0 -7
- package/packages/level2/meta/resource-list/resource-list-filter/FdResourceListFilter.jsx +0 -11
- package/packages/level2/meta/resource-list/resource-table-list/FdResourceTableList.jsx +0 -14
- package/packages/level2/meta/table/FdTable.jsx +0 -147
- package/packages/level2/meta/table/body/FdTableBody.jsx +0 -9
- package/packages/level2/meta/table/body-cell/FdActionBodyCell.jsx +0 -145
- package/packages/level2/meta/table/body-cell/FdBlobBodyCell.jsx +0 -27
- package/packages/level2/meta/table/body-cell/FdBodyCell.jsx +0 -133
- package/packages/level2/meta/table/body-cell/FdBodyCellValue.jsx +0 -59
- package/packages/level2/meta/table/body-cell/FdBodyExpandCell.jsx +0 -6
- package/packages/level2/meta/table/body-cell/FdBodyExpandPropertyCell.jsx +0 -22
- package/packages/level2/meta/table/body-cell/FdCustomActionLink.jsx +0 -16
- package/packages/level2/meta/table/body-cell/FdMultiselectCellTemplate.jsx +0 -39
- package/packages/level2/meta/table/body-cell/FdViewCell.jsx +0 -12
- package/packages/level2/meta/table/body-row/FdTableBodyRow.jsx +0 -49
- package/packages/level2/meta/table/header/FdTableHeader.jsx +0 -54
- package/packages/level2/meta/table/header-cell/FdResizable.jsx +0 -18
- package/packages/level2/meta/table/header-cell/FdResizableEdgeHandle.jsx +0 -4
- package/packages/level2/meta/table/header-cell/FdTableHeaderActionCell.jsx +0 -49
- package/packages/level2/meta/table/header-cell/FdTableHeaderCell.jsx +0 -89
- package/packages/level2/meta/table/header-cell/FdTableHeaderCellActionButton.jsx +0 -23
- package/packages/level2/meta/table/pager/FdPager.jsx +0 -72
- package/packages/level2/meta/table/table-custom-action/TableCustomAction.jsx +0 -26
- package/packages/level2/meta/view/FdView.jsx +0 -31
- package/packages/level2/meta/view/FdViewSheet.jsx +0 -103
- package/packages/level2/meta/view/view-resource/FdViewResource.jsx +0 -108
- package/packages/level2/meta/view/view-resource/templates/ManyToOneTableHeaderCellTemplate.jsx +0 -13
- package/src/app/error.jsx +0 -5
- package/src/app/global-error.jsx +0 -5
- package/src/app/loading.jsx +0 -11
- package/src/hd/footer/HdFooter.jsx +0 -27
- package/src/hd/footer/hd-footer-item/HdFooterItem.jsx +0 -14
- package/src/lm/ai-scan/AiScanAction.jsx +0 -21
- package/src/lm/ai-scan/cell-templates/AiScanWebsiteResultCellTemplate.jsx +0 -31
- package/src/lm/components/LmCardReport.jsx +0 -12
- package/src/lm/configs/lm-list-configs.jsx +0 -72
- package/src/lm/google-place/action-dropdown/GooglePlaceActionDropdown.jsx +0 -42
- package/src/lm/google-place/actions/GooglePlaceSaveToGroupAction.jsx +0 -22
- package/src/lm/google-place/cell-templates/GooglePlaceBusinessInfoCellTemplate.jsx +0 -59
- package/src/lm/google-place/cell-templates/GooglePlaceEmailsCellTemplate.jsx +0 -34
- package/src/lm/google-place/cell-templates/GooglePlaceScanAction.jsx +0 -15
- package/src/lm/lead/action-dropdown/LeadActionDropdown.jsx +0 -39
- package/src/lm/lead/actions/move-to-group-action/LeadMoveToGroupAction.jsx +0 -28
- package/src/lm/lead/cell-templates/LeadBusinessInfoCellTemplate.jsx +0 -64
- package/src/lm/lead/cell-templates/LeadScanAction.jsx +0 -15
- package/src/lm/lead/lead-google-place/LeadGooglePlaceIndicator.jsx +0 -8
- package/src/lm/lead/lead-google-place/LeadGooglePlaceIndicators.jsx +0 -17
- package/src/lm/lead/lead-google-place/LeadGooglePlaceInfo.jsx +0 -15
- package/src/lm/lead/view/LeadsView.jsx +0 -8
- package/src/lm/pages/HomePage.jsx +0 -53
- 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
|
-
|
|
131
|
-
</div>)}
|
|
132
|
-
</div>);
|
|
133
|
-
}
|