@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,59 +0,0 @@
|
|
|
1
|
-
import { FdFrameworkImage } from "@fd-component-toolbox/client/framework";
|
|
2
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
3
|
-
import { FdAvatar, FdAvatarFallback, FdAvatarImage } from "@fd-component-toolbox/avatar/FdAvatar";
|
|
4
|
-
import { FdBadge } from "@fd-component-toolbox/badge/FdBadge";
|
|
5
|
-
import FdLink from "@fd-component-toolbox/link/FdLink";
|
|
6
|
-
import { FdViewCell } from "@meta/table/body-cell/FdViewCell";
|
|
7
|
-
import { FdBlobBodyCell } from "@meta/table/body-cell/FdBlobBodyCell";
|
|
8
|
-
import FdBodyExpandPropertyCell from "@meta/table/body-cell/FdBodyExpandPropertyCell";
|
|
9
|
-
import { getAbsoluteUrl, getMailToUrl } from "@fd-toolbox/routing/routers";
|
|
10
|
-
import { getLabelUrl, getBodyBackgroundColorClassNameByCellContext, isColorfulCell, } from "@meta/table/body-cell/FdBodyCell.funcs";
|
|
11
|
-
import { isBlobCell, isBrowserTable, isDescriptionPropertyCell, isEmailCell, isExpandPropertyCell, isImageCell, isUrlCell, } from "@meta/table/services/fd-table-private-cell";
|
|
12
|
-
import { isMarkdown, isRichText } from "@meta/core/property-types";
|
|
13
|
-
export function FdBodyCellValue({ cellContext, onRefreshItems, cellValue, imageSrc, onViewClick, parsedMarkdown, parsedRichText, }) {
|
|
14
|
-
switch (true) {
|
|
15
|
-
case isExpandPropertyCell(cellContext):
|
|
16
|
-
if (isBlobCell(cellContext)) {
|
|
17
|
-
return <FdBlobBodyCell cellContext={cellContext}/>;
|
|
18
|
-
}
|
|
19
|
-
else if (!isBrowserTable(cellContext)) {
|
|
20
|
-
return (<FdBodyExpandPropertyCell cellContext={cellContext} onRefreshItems={onRefreshItems}>
|
|
21
|
-
<div>{cellValue}</div>
|
|
22
|
-
</FdBodyExpandPropertyCell>);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
return <div>{cellValue}</div>;
|
|
26
|
-
}
|
|
27
|
-
case isDescriptionPropertyCell(cellContext):
|
|
28
|
-
return !isBrowserTable(cellContext) ? (<FdViewCell cellContext={cellContext} onRefreshResources={onRefreshItems} onViewClick={onViewClick}>
|
|
29
|
-
<div className="flex items-center">
|
|
30
|
-
{isImageCell(cellContext) && (<FdAvatar className="mr-2 size-5">
|
|
31
|
-
<FdAvatarImage />
|
|
32
|
-
<FdAvatarFallback>
|
|
33
|
-
<FdFrameworkImage className="object-fill" src={imageSrc} alt="Resource image" width={40} height={40} loading="lazy"/>
|
|
34
|
-
</FdAvatarFallback>
|
|
35
|
-
</FdAvatar>)}
|
|
36
|
-
<p>{cellValue}</p>
|
|
37
|
-
</div>
|
|
38
|
-
</FdViewCell>) : (<p>{cellValue}</p>);
|
|
39
|
-
case isUrlCell(cellContext):
|
|
40
|
-
return (cellValue && (<FdLink href={getAbsoluteUrl(cellValue)} openInNewTab>
|
|
41
|
-
{getLabelUrl(cellContext) ?? cellValue}
|
|
42
|
-
</FdLink>));
|
|
43
|
-
case isEmailCell(cellContext):
|
|
44
|
-
return (<FdLink href={getMailToUrl(cellValue)} openInNewTab>
|
|
45
|
-
{cellValue}
|
|
46
|
-
</FdLink>);
|
|
47
|
-
case isColorfulCell(cellContext):
|
|
48
|
-
return (<FdBadge className={cn("rounded-md px-1 py-px font-normal", getBodyBackgroundColorClassNameByCellContext(cellContext))}>
|
|
49
|
-
{cellValue}
|
|
50
|
-
</FdBadge>);
|
|
51
|
-
case isMarkdown(cellContext.internalTableColumn.propertyType, cellContext.internalTableColumn.propertyTypeFormat):
|
|
52
|
-
return <div dangerouslySetInnerHTML={{ __html: parsedMarkdown }}></div>;
|
|
53
|
-
case isRichText(cellContext.internalTableColumn.propertyType, cellContext.internalTableColumn.propertyTypeFormat):
|
|
54
|
-
return parsedRichText[0] ?? <p>{cellValue}</p>;
|
|
55
|
-
case true:
|
|
56
|
-
default:
|
|
57
|
-
return <p>{cellValue}</p>;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { FdViewSheet } from "@meta/view/FdViewSheet";
|
|
2
|
-
export function FdBodyExpandCell({ cellContext, children, onRefreshResources, onViewClick, }) {
|
|
3
|
-
return (<FdViewSheet id={cellContext.row.item.id} resourceName={cellContext.tableInstance.uiResourceMeta?.resourceMeta.resourceName} onRefreshResources={onRefreshResources} onEditClick={onViewClick} editMode={cellContext.tableInstance.editMode}>
|
|
4
|
-
{children}
|
|
5
|
-
</FdViewSheet>);
|
|
6
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import React, { useCallback } from "react";
|
|
2
|
-
import { FdViewSheet } from "@meta/view/FdViewSheet";
|
|
3
|
-
import { getResourceUrl } from "@meta/services/meta-navigations";
|
|
4
|
-
import { routes } from "@fd-toolbox/routing/routes";
|
|
5
|
-
import { silentChangeUrl } from "@fd-toolbox/routing/routers";
|
|
6
|
-
import { getOptionalPropertyValue } from "@fd-toolbox/objects/property-value";
|
|
7
|
-
export default function FdBodyExpandPropertyCell({ cellContext, onRefreshItems, children, }) {
|
|
8
|
-
const expandInfo = cellContext.internalTableColumn.expandInfo;
|
|
9
|
-
const item = cellContext.row.item;
|
|
10
|
-
const expandedItem = getOptionalPropertyValue(item, expandInfo.expandPropertyName);
|
|
11
|
-
const resourceId = expandedItem?.id;
|
|
12
|
-
const resourceName = expandInfo.resourceMeta.resourceName;
|
|
13
|
-
const handleViewClick = useCallback(() => {
|
|
14
|
-
if (cellContext) {
|
|
15
|
-
const url = getResourceUrl(routes.view, resourceName, resourceId);
|
|
16
|
-
silentChangeUrl(url);
|
|
17
|
-
}
|
|
18
|
-
}, [cellContext, resourceName, resourceId]);
|
|
19
|
-
return (<FdViewSheet id={resourceId} resourceName={resourceName} onRefreshResources={onRefreshItems} onEditClick={handleViewClick}>
|
|
20
|
-
{children}
|
|
21
|
-
</FdViewSheet>);
|
|
22
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { useState } from "react";
|
|
2
|
-
import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
|
|
3
|
-
import FdLink from "@fd-component-toolbox/link/FdLink";
|
|
4
|
-
/**
|
|
5
|
-
* Wrapper component for {@link FdLink} that dynamically generates URLs based on table cell context.
|
|
6
|
-
* Used in table actions to create links whose destinations depend on row data.
|
|
7
|
-
*
|
|
8
|
-
* @param props - See {@link FdCustomActionLinkProps}
|
|
9
|
-
*/
|
|
10
|
-
export function FdCustomActionLink({ text, cellContext, dynamicLink }) {
|
|
11
|
-
const [href, setHref] = useState("");
|
|
12
|
-
useAsyncEffect(async () => {
|
|
13
|
-
setHref(await dynamicLink(cellContext));
|
|
14
|
-
});
|
|
15
|
-
return <FdLink href={href}>{text}</FdLink>;
|
|
16
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import React, { useEffect, useMemo, useState } from "react";
|
|
3
|
-
import { getOptionalPropertyValue } from "@fd-toolbox/objects/property-value";
|
|
4
|
-
import { FdMultiselect, FdMultiselectContent, FdMultiselectInput, FdMultiselectItem, FdMultiselectList, FdMultiselectTrigger, } from "@fd-component-toolbox/multiselect/FdMultiselect";
|
|
5
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
6
|
-
import { prepareMultiselectCellDisplayValues } from "@meta/table/body-cell/FdBodyCell.funcs";
|
|
7
|
-
import { FdFadeOutText } from "@fd-component-toolbox/fade-out-text/FdFadeOutText";
|
|
8
|
-
import { getMultiselectCellTemplateValuesArray } from "@meta/table/body-cell/FdMultiselectCellTemplate.funcs";
|
|
9
|
-
export default function FdMultiselectCellTemplate({ resource, entityPath, valueProperty, transformValues, }) {
|
|
10
|
-
const multiselectItems = useMemo(() => {
|
|
11
|
-
return getOptionalPropertyValue(resource[entityPath] ?? {}, valueProperty);
|
|
12
|
-
}, [resource, entityPath, valueProperty]);
|
|
13
|
-
const valuesArray = useMemo(() => {
|
|
14
|
-
return getMultiselectCellTemplateValuesArray(multiselectItems, transformValues);
|
|
15
|
-
}, [multiselectItems, transformValues]);
|
|
16
|
-
const displayValues = useMemo(() => prepareMultiselectCellDisplayValues(valuesArray), [valuesArray]);
|
|
17
|
-
const [selectedValues, setSelectedValues] = useState([]);
|
|
18
|
-
useEffect(() => {
|
|
19
|
-
if (displayValues && displayValues.size > 0) {
|
|
20
|
-
setSelectedValues(Array.from(displayValues.keys()));
|
|
21
|
-
}
|
|
22
|
-
}, [displayValues]);
|
|
23
|
-
return displayValues && displayValues.size !== 0 ? (<div>
|
|
24
|
-
{displayValues.size === 1 ? (<FdFadeOutText>
|
|
25
|
-
<p>{displayValues.get("0")}</p>
|
|
26
|
-
</FdFadeOutText>) : (<FdMultiselect values={selectedValues} onValuesChange={setSelectedValues} disabled={false} displayValues={displayValues} variant="float" withSelectAll>
|
|
27
|
-
<FdMultiselectTrigger>
|
|
28
|
-
<FdMultiselectInput className="mt-0 w-full"/>
|
|
29
|
-
</FdMultiselectTrigger>
|
|
30
|
-
<FdMultiselectContent className="absolute">
|
|
31
|
-
<FdMultiselectList className="top-9 z-50">
|
|
32
|
-
{[...displayValues].map(([key, value]) => (<FdMultiselectItem className={cn("min-h-6 whitespace-nowrap")} key={key} value={key}>
|
|
33
|
-
{value}
|
|
34
|
-
</FdMultiselectItem>))}
|
|
35
|
-
</FdMultiselectList>
|
|
36
|
-
</FdMultiselectContent>
|
|
37
|
-
</FdMultiselect>)}
|
|
38
|
-
</div>) : null;
|
|
39
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from "react";
|
|
2
|
-
import { FdViewSheet } from "@meta/view/FdViewSheet";
|
|
3
|
-
import { findAndSetCustomViewCellAction } from "@meta/table/body-cell/FdViewCell.funcs";
|
|
4
|
-
export function FdViewCell({ cellContext, children, onRefreshResources, onViewClick }) {
|
|
5
|
-
const [customAction, setCustomAction] = useState();
|
|
6
|
-
useEffect(() => {
|
|
7
|
-
findAndSetCustomViewCellAction(cellContext, setCustomAction);
|
|
8
|
-
}, [cellContext]);
|
|
9
|
-
return customAction ? (<div onClick={() => customAction.cellAction?.(cellContext)}>{children}</div>) : (<FdViewSheet id={cellContext.row.item.id} resourceName={cellContext.tableInstance.uiResourceMeta?.resourceMeta.resourceName} onRefreshResources={onRefreshResources} onEditClick={onViewClick} editMode={cellContext.tableInstance.editMode}>
|
|
10
|
-
{children}
|
|
11
|
-
</FdViewSheet>);
|
|
12
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useState, useRef, useContext } from "react";
|
|
2
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
3
|
-
import { onInitTableBody, handleRowClick, getRowId, applyResizableTableBodyLayout, } from "@meta/table/body-row/FdTableBodyRow.funcs";
|
|
4
|
-
import { FdBodyCell } from "@meta/table/body-cell/FdBodyCell";
|
|
5
|
-
import { FdResizablePanelGroup, FdResizablePanel, FdResizableHandle, } from "@meta/table/header-cell/FdResizable";
|
|
6
|
-
import { internalTableColumnTypes } from "@meta/table/table-models";
|
|
7
|
-
import { FdTableContext } from "@meta/table/table-context";
|
|
8
|
-
import { tableElementSuffixes } from "@fd-component-toolbox/table-element-suffixes";
|
|
9
|
-
import { calculateDefaultSize } from "@meta/table/services/fd-table-private-column-calculation";
|
|
10
|
-
import { getColumnSize } from "@meta/table/header/FdTableHeader.funcs";
|
|
11
|
-
export function FdTableBodyRow({ rowContext, displayMode, onRefreshItems, itemDeleted, cellClick, className, tableActionType, }) {
|
|
12
|
-
const [bodyCellClasses, setBodyCellClasses] = useState([]);
|
|
13
|
-
const [bodyCellTestGroup, setBodyCellTestGroup] = useState("");
|
|
14
|
-
const [cellContexts, setCellContexts] = useState([]);
|
|
15
|
-
const [isHovered, setIsHovered] = useState(false);
|
|
16
|
-
const { columnWidths } = useContext(FdTableContext);
|
|
17
|
-
const resizableRef = useRef(null);
|
|
18
|
-
const onRowClickCallback = useCallback(() => {
|
|
19
|
-
handleRowClick(rowContext, cellClick);
|
|
20
|
-
}, [rowContext, cellClick]);
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
onInitTableBody(bodyCellTestGroup, setBodyCellTestGroup, setCellContexts, setBodyCellClasses, rowContext, displayMode);
|
|
23
|
-
}, [bodyCellTestGroup, displayMode, rowContext]);
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
if (resizableRef.current) {
|
|
26
|
-
applyResizableTableBodyLayout(columnWidths, resizableRef.current.setLayout);
|
|
27
|
-
}
|
|
28
|
-
}, [columnWidths]);
|
|
29
|
-
return rowContext ? (<div id={getRowId(rowContext.row.index, rowContext, tableElementSuffixes.row)} onClick={onRowClickCallback} className={cn("relative w-full overflow-visible border-input py-1.5 transition duration-200 ease-linear hover:bg-muted/50", className)} onMouseEnter={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} onBlur={() => setIsHovered(false)}>
|
|
30
|
-
<span hidden={true} data-id={rowContext.row.item?.id} data-row-index={rowContext.row.index}></span>
|
|
31
|
-
<FdResizablePanelGroup autoSaveId="persistence" direction={"horizontal"} className="flex h-full min-h-5 flex-row items-center !overflow-visible" ref={resizableRef}>
|
|
32
|
-
{rowContext.tableInstance.internalTableColumns.map((column, i) => (<React.Fragment key={column.index}>
|
|
33
|
-
<FdResizablePanel style={{
|
|
34
|
-
overflow: "visible",
|
|
35
|
-
}} defaultSize={calculateDefaultSize(columnWidths[i]) || undefined} className={cn("flex min-w-0 justify-center", rowContext.tableInstance.internalTableColumns[i].type ===
|
|
36
|
-
internalTableColumnTypes.checkBox && "max-w-8", rowContext.tableInstance.internalTableColumns[i].type ===
|
|
37
|
-
internalTableColumnTypes.action &&
|
|
38
|
-
i < 2 &&
|
|
39
|
-
"min-w-12 max-w-12", rowContext.tableInstance.internalTableColumns[i].type ===
|
|
40
|
-
internalTableColumnTypes.customHeaderAction && "min-w-5 max-w-16")} minSize={getColumnSize(rowContext.tableInstance.internalTableColumns[i], rowContext.tableInstance, displayMode, rowContext.tableInstance.internalTableColumns)}>
|
|
41
|
-
<FdBodyCell cellContext={cellContexts[i]} data-test-group={bodyCellTestGroup} className={bodyCellClasses[i]} onRefreshItems={onRefreshItems} itemDeleted={itemDeleted} actionType={tableActionType} isHovered={isHovered}/>
|
|
42
|
-
</FdResizablePanel>
|
|
43
|
-
{i === rowContext.tableInstance.internalTableColumns.length - 1 ? null : (<FdResizableHandle disabled className="w-0 border-0"/>)}
|
|
44
|
-
</React.Fragment>))}
|
|
45
|
-
|
|
46
|
-
<FdResizablePanel order={rowContext.tableInstance.internalTableColumns.length}/>
|
|
47
|
-
</FdResizablePanelGroup>
|
|
48
|
-
</div>) : (<FdBodyCell className={bodyCellClasses.join(" ")}/>);
|
|
49
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import React, { useCallback, useState, useContext, useMemo, useEffect, useRef } from "react";
|
|
2
|
-
import { tableDisplayModes } from "@fd-toolbox/enums/enums";
|
|
3
|
-
import { onTableHeaderSort, getColumnSize, shouldHideResizableHandle, shouldFadeOutHandle, isFirstOrSecondIndexColumn, initTableHeaderPanelLayout, } from "@meta/table/header/FdTableHeader.funcs";
|
|
4
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
5
|
-
import { useHover } from "@fd-toolbox/hooks/use-hover";
|
|
6
|
-
import { FdResizablePanelGroup, FdResizablePanel, FdResizableHandle, } from "@meta/table/header-cell/FdResizable";
|
|
7
|
-
import { FdTableHeaderCell } from "@meta/table/header-cell/FdTableHeaderCell";
|
|
8
|
-
import { internalTableColumnTypes } from "@meta/table/table-models";
|
|
9
|
-
import { FdTableContext } from "@meta/table/table-context";
|
|
10
|
-
import { FdResizableEdgeHandle } from "@meta/table/header-cell/FdResizableEdgeHandle";
|
|
11
|
-
import { isSortableColumn } from "@meta/table/services/fd-table-private-cell";
|
|
12
|
-
export function FdTableHeader({ tableInstance, displayMode, tableSorted, onRefreshItems, className, isTableHovered, columnToWidthPercent, }) {
|
|
13
|
-
const [isHovered, hoverHandlers] = useHover();
|
|
14
|
-
const [activeIndex, setActiveIndex] = useState(0);
|
|
15
|
-
const onOnSortCallback = useCallback((column) => onTableHeaderSort(column, tableSorted), [tableSorted]);
|
|
16
|
-
const { setColumnWidths } = useContext(FdTableContext);
|
|
17
|
-
const onLayoutCallback = useCallback((val) => setColumnWidths?.(val), [setColumnWidths]);
|
|
18
|
-
const internalTableColumns = useMemo(() => tableInstance.internalTableColumns, [tableInstance]);
|
|
19
|
-
const calculateDefaultSize = useCallback((width) => Math.ceil(width), []);
|
|
20
|
-
const resizableHandleClasses = cn("m-auto h-4 w-0 border-0 border-r border-muted-foreground", isHovered ? "animate-fade-in" : "animate-fade-out");
|
|
21
|
-
const panelGroupRef = useRef(null);
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
if (panelGroupRef.current) {
|
|
24
|
-
initTableHeaderPanelLayout(columnToWidthPercent, internalTableColumns, panelGroupRef.current.setLayout);
|
|
25
|
-
}
|
|
26
|
-
}, [columnToWidthPercent, internalTableColumns]);
|
|
27
|
-
return (<div className={cn("relative flex w-full flex-row", className)} {...hoverHandlers}>
|
|
28
|
-
{internalTableColumns?.length > 0 && (<FdResizablePanelGroup key={`panel-group-${internalTableColumns.map((col) => col.name).join("-")}`} autoSaveId="header" onLayout={onLayoutCallback} direction={"horizontal"} className="flex h-full flex-row items-stretch" ref={panelGroupRef}>
|
|
29
|
-
{internalTableColumns.map((internalTableColumn) => (<React.Fragment key={internalTableColumn.index}>
|
|
30
|
-
<FdResizablePanel id={`panel-${internalTableColumn.index}`} order={internalTableColumn.index} defaultSize={calculateDefaultSize(internalTableColumn.width) || undefined} className={cn("flex items-center justify-between", internalTableColumn.type === internalTableColumnTypes.checkBox &&
|
|
31
|
-
"max-w-8", internalTableColumn.type === internalTableColumnTypes.action &&
|
|
32
|
-
isFirstOrSecondIndexColumn(internalTableColumn.index) &&
|
|
33
|
-
"min-w-12 max-w-12", internalTableColumn.type === internalTableColumnTypes.customHeaderAction &&
|
|
34
|
-
"min-w-5 max-w-16")} minSize={getColumnSize(internalTableColumn, tableInstance, displayMode, internalTableColumns)}>
|
|
35
|
-
<FdTableHeaderCell onActiveHandlerIndexChange={() => setActiveIndex(internalTableColumn.index)} cellContext={{
|
|
36
|
-
tableInstance,
|
|
37
|
-
internalTableColumn,
|
|
38
|
-
}} tableSorted={onOnSortCallback} onRefreshItems={onRefreshItems} display={displayMode} isTableHovered={isTableHovered} hidden={displayMode === tableDisplayModes.default ? false : !isTableHovered} isColumnSortable={isSortableColumn({
|
|
39
|
-
tableInstance,
|
|
40
|
-
internalTableColumn,
|
|
41
|
-
})}/>
|
|
42
|
-
</FdResizablePanel>
|
|
43
|
-
|
|
44
|
-
<FdResizableHandle className={cn(resizableHandleClasses, shouldHideResizableHandle(internalTableColumn, tableInstance) && "hidden", shouldFadeOutHandle(activeIndex, internalTableColumn.index) &&
|
|
45
|
-
"animate-fade-out")}/>
|
|
46
|
-
|
|
47
|
-
{shouldHideResizableHandle(internalTableColumn, tableInstance) && (<FdResizableEdgeHandle className={cn(resizableHandleClasses, shouldFadeOutHandle(activeIndex, internalTableColumn.index) &&
|
|
48
|
-
"animate-fade-out", "cursor-pointer")}/>)}
|
|
49
|
-
</React.Fragment>))}
|
|
50
|
-
|
|
51
|
-
<FdResizablePanel order={internalTableColumns.length}/>
|
|
52
|
-
</FdResizablePanelGroup>)}
|
|
53
|
-
</div>);
|
|
54
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import * as React from "react";
|
|
3
|
-
import * as ResizablePrimitive from "react-resizable-panels";
|
|
4
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
5
|
-
import { FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
|
|
6
|
-
function FdResizablePanelGroup({ className, ref, ...props }) {
|
|
7
|
-
return (<ResizablePrimitive.PanelGroup ref={ref} className={cn("flex size-full data-[panel-group-direction=vertical]:flex-col", className)} {...props}/>);
|
|
8
|
-
}
|
|
9
|
-
FdResizablePanelGroup.displayName = ResizablePrimitive.PanelGroup.displayName;
|
|
10
|
-
const FdResizablePanel = ResizablePrimitive.Panel;
|
|
11
|
-
function FdResizableHandle({ withHandle, className, ...props }) {
|
|
12
|
-
return (<ResizablePrimitive.PanelResizeHandle className={cn("relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2", "after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary", "data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full", "data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1", "data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2", "data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90", className)} {...props}>
|
|
13
|
-
{withHandle && (<div className="z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border">
|
|
14
|
-
<FdIcon name={iconNames.dragHandleDots2} size={iconSizes.extraSmall}/>
|
|
15
|
-
</div>)}
|
|
16
|
-
</ResizablePrimitive.PanelResizeHandle>);
|
|
17
|
-
}
|
|
18
|
-
export { FdResizablePanelGroup, FdResizablePanel, FdResizableHandle };
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
|
-
import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
|
|
3
|
-
import { FdViewSheet } from "@meta/view/FdViewSheet";
|
|
4
|
-
import { resourceEditModes } from "@fd-toolbox/constants/resource-list-configs-enums";
|
|
5
|
-
import { internalTableColumnTypes, tableCustomActionTypes, } from "@meta/table/table-models";
|
|
6
|
-
import { onInitTableHeader, setOverlayVisibility, } from "@meta/table/header-cell/FdTableHeaderActionCell.funcs";
|
|
7
|
-
import { FdTableHeaderActionButton } from "@meta/table/header-cell/FdTableHeaderCellActionButton";
|
|
8
|
-
import { navigate } from "@fd-toolbox/redirect/redirect-functions";
|
|
9
|
-
import { routes } from "@fd-toolbox/routing/routes";
|
|
10
|
-
export function FdTableHeaderActionCell({ cellContext, onRefreshItems, setIsEditSheetOpen, ref, }) {
|
|
11
|
-
const [activePlan, setActivePlan] = useState();
|
|
12
|
-
const [isOverlayVisible, setIsOverlayVisible] = useState(false);
|
|
13
|
-
const customAction = useMemo(() => {
|
|
14
|
-
return cellContext.tableInstance?.customActions?.find((action) => action.actionType === tableCustomActionTypes.create);
|
|
15
|
-
}, [cellContext.tableInstance?.customActions]);
|
|
16
|
-
useAsyncEffect(async () => {
|
|
17
|
-
await onInitTableHeader(cellContext, setActivePlan);
|
|
18
|
-
}, []);
|
|
19
|
-
useEffect(() => {
|
|
20
|
-
setOverlayVisibility(cellContext, setIsOverlayVisible, activePlan);
|
|
21
|
-
}, [activePlan, cellContext]);
|
|
22
|
-
const onCustomAction = useCallback((result) => {
|
|
23
|
-
if (result.shouldRefresh)
|
|
24
|
-
onRefreshItems?.();
|
|
25
|
-
}, [onRefreshItems]);
|
|
26
|
-
const onEditActionButtonClick = useCallback(() => {
|
|
27
|
-
customAction?.headerCellAction?.(cellContext);
|
|
28
|
-
onCustomAction({
|
|
29
|
-
shouldRefresh: customAction?.shouldRefresh ?? true,
|
|
30
|
-
});
|
|
31
|
-
}, [cellContext, customAction, onCustomAction]);
|
|
32
|
-
const onCloseClick = useCallback((open) => {
|
|
33
|
-
setIsEditSheetOpen(open);
|
|
34
|
-
}, [setIsEditSheetOpen]);
|
|
35
|
-
if (customAction) {
|
|
36
|
-
return (<FdTableHeaderActionButton onClick={onEditActionButtonClick} tooltipText={customAction?.name}/>);
|
|
37
|
-
}
|
|
38
|
-
return (<div ref={ref} className="relative">
|
|
39
|
-
{cellContext.internalTableColumn.type === internalTableColumnTypes.customHeaderAction &&
|
|
40
|
-
isOverlayVisible}
|
|
41
|
-
{cellContext.internalTableColumn.type === internalTableColumnTypes.customHeaderAction &&
|
|
42
|
-
!isOverlayVisible && <FdTableHeaderActionButton onClick={() => navigate(routes.contact)}/>}
|
|
43
|
-
{cellContext.internalTableColumn.type !== internalTableColumnTypes.customHeaderAction &&
|
|
44
|
-
!isOverlayVisible && (<FdViewSheet resourceName={cellContext.tableInstance.uiResourceMeta?.resourceMeta.resourceName} uiResourceMeta={cellContext.tableInstance.uiResourceMeta} onRefreshResources={onRefreshItems} onCloseClick={onCloseClick} editMode={resourceEditModes.simple}>
|
|
45
|
-
<FdTableHeaderActionButton onClick={() => setIsEditSheetOpen(false)}/>
|
|
46
|
-
</FdViewSheet>)}
|
|
47
|
-
</div>);
|
|
48
|
-
}
|
|
49
|
-
FdTableHeaderActionCell.displayName = "FdTableHeaderActionCell";
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import React, { createElement, useCallback, useContext, useEffect, useMemo, useState } from "react";
|
|
3
|
-
import { fdTableSortDirections, } from "@fd-toolbox/enums/enums";
|
|
4
|
-
import { shouldShowHeaderText, shouldShowHeaderAction, isColumnCheckbox, handleInit, handleSortDirectionChange, updateTableHeaderCellHoverState, getActiveSortPaddingClass, runSelectAllCheckboxes, checkIfAllSelected, } from "@meta/table/header-cell/FdTableHeaderCell.funcs";
|
|
5
|
-
import { useHover } from "@fd-toolbox/hooks/use-hover";
|
|
6
|
-
import { internalTableColumnTypes, tableCustomActionTypes, } from "@meta/table/table-models";
|
|
7
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
8
|
-
import { isRightAlignColumn } from "@meta/table/body-cell/FdBodyCell.funcs";
|
|
9
|
-
import { FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
|
|
10
|
-
import { FdFadeOutText } from "@fd-component-toolbox/fade-out-text/FdFadeOutText";
|
|
11
|
-
import { FdTableHeaderActionCell } from "@meta/table/header-cell/FdTableHeaderActionCell";
|
|
12
|
-
import { FdCheckbox } from "@fd-component-toolbox/checkbox/FdCheckbox";
|
|
13
|
-
import { FdTableContext } from "@meta/table/table-context";
|
|
14
|
-
export function FdTableHeaderCell({ cellContext, tableSorted, onRefreshItems, onActiveHandlerIndexChange, display, isTableHovered: isTableHoveredProp, hidden, isColumnSortable, }) {
|
|
15
|
-
const [headerText, setHeaderText] = useState("");
|
|
16
|
-
const [headerId, setHeaderId] = useState("");
|
|
17
|
-
const [fullHeaderText, setFullHeaderText] = useState("");
|
|
18
|
-
const [sortDirection, setSortDirection] = useState(cellContext.internalTableColumn.sortDirection ?? fdTableSortDirections.desc);
|
|
19
|
-
const [isTableHovered, setIsTableHovered] = useState(false);
|
|
20
|
-
const [isHovered, hoverHandlers] = useHover();
|
|
21
|
-
const [isEditSheetOpen, setIsEditSheetOpen] = useState(false);
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
updateTableHeaderCellHoverState(isEditSheetOpen, isTableHoveredProp, setIsTableHovered);
|
|
24
|
-
}, [isEditSheetOpen, isTableHoveredProp]);
|
|
25
|
-
useEffect(() => {
|
|
26
|
-
handleInit(cellContext, setHeaderText, setFullHeaderText, setHeaderId);
|
|
27
|
-
}, [cellContext]);
|
|
28
|
-
const onHeaderSortClickCallback = useCallback(() => {
|
|
29
|
-
if (isColumnSortable) {
|
|
30
|
-
handleSortDirectionChange(setSortDirection, tableSorted, cellContext, sortDirection);
|
|
31
|
-
}
|
|
32
|
-
}, [cellContext, sortDirection, tableSorted, isColumnSortable]);
|
|
33
|
-
const alignmentClass = useMemo(() => {
|
|
34
|
-
return isRightAlignColumn(cellContext?.internalTableColumn) ? "flex-row-reverse" : "";
|
|
35
|
-
}, [cellContext?.internalTableColumn]);
|
|
36
|
-
const activeSortPaddingClass = useMemo(() => {
|
|
37
|
-
return getActiveSortPaddingClass(cellContext?.internalTableColumn);
|
|
38
|
-
}, [cellContext?.internalTableColumn]);
|
|
39
|
-
const alignmentArrowClass = useMemo(() => {
|
|
40
|
-
return isRightAlignColumn(cellContext?.internalTableColumn) ? "" : "right-0";
|
|
41
|
-
}, [cellContext?.internalTableColumn]);
|
|
42
|
-
const { tableRows = [], setTableRows } = useContext(FdTableContext);
|
|
43
|
-
const onSelectAllCheckboxes = useCallback(() => {
|
|
44
|
-
return runSelectAllCheckboxes(setTableRows);
|
|
45
|
-
}, [setTableRows]);
|
|
46
|
-
const isAllSelected = useMemo(() => {
|
|
47
|
-
return checkIfAllSelected(tableRows);
|
|
48
|
-
}, [tableRows]);
|
|
49
|
-
const customAction = useMemo(() => {
|
|
50
|
-
return cellContext.tableInstance?.customActions?.find((action) => action.actionType === tableCustomActionTypes.template);
|
|
51
|
-
}, [cellContext.tableInstance?.customActions]);
|
|
52
|
-
const onCustomAction = useCallback((result) => {
|
|
53
|
-
if (result.shouldRefresh)
|
|
54
|
-
onRefreshItems?.();
|
|
55
|
-
}, [onRefreshItems]);
|
|
56
|
-
return (<div {...hoverHandlers} onMouseMove={onActiveHandlerIndexChange} className="size-full">
|
|
57
|
-
{isColumnCheckbox(cellContext) ? (<div className={cn("relative flex size-full cursor-pointer items-center justify-center p-0 text-xs lg:text-sm")}>
|
|
58
|
-
<FdCheckbox checked={Boolean(isAllSelected)} onCheckedChange={onSelectAllCheckboxes}/>
|
|
59
|
-
</div>) : (<div className={cn("relative flex size-full cursor-pointer items-center justify-center p-2 text-xs lg:text-sm")}>
|
|
60
|
-
{(cellContext.internalTableColumn.type === internalTableColumnTypes.action ||
|
|
61
|
-
cellContext.internalTableColumn.type ===
|
|
62
|
-
internalTableColumnTypes.customHeaderAction) && (<div className={cn("flex size-4 items-center justify-center", shouldShowHeaderAction(cellContext, isTableHovered, display)
|
|
63
|
-
? "animate-fade-in"
|
|
64
|
-
: "animate-fade-out")}>
|
|
65
|
-
{cellContext.tableInstance.uiResourceMeta && customAction?.template ? (<>
|
|
66
|
-
{createElement(customAction.template, {
|
|
67
|
-
onCustomAction: () => onCustomAction({
|
|
68
|
-
shouldRefresh: customAction.shouldRefresh,
|
|
69
|
-
}),
|
|
70
|
-
internalTableColumn: cellContext.internalTableColumn,
|
|
71
|
-
resourceName: cellContext.tableInstance.uiResourceMeta.resourceMeta
|
|
72
|
-
.resourceName,
|
|
73
|
-
})}
|
|
74
|
-
</>) : (<FdTableHeaderActionCell cellContext={cellContext} onRefreshItems={onRefreshItems} setIsEditSheetOpen={setIsEditSheetOpen}/>)}
|
|
75
|
-
</div>)}
|
|
76
|
-
{shouldShowHeaderText(cellContext) && (<div className={cn("flex w-full flex-row items-center justify-between gap-1 text-xs text-subtle-500 lg:text-sm", alignmentClass, isColumnSortable ? "cursor-pointer" : "cursor-default")}>
|
|
77
|
-
<FdFadeOutText className={activeSortPaddingClass} isRightAlign={isRightAlignColumn(cellContext?.internalTableColumn)} id={headerId} onTooltipClick={onHeaderSortClickCallback} tooltipContent={fullHeaderText}>
|
|
78
|
-
{headerText}
|
|
79
|
-
</FdFadeOutText>
|
|
80
|
-
<div className={cn("flex size-4 min-w-4 items-center justify-center rounded-full bg-background", alignmentArrowClass, !hidden && (isHovered || cellContext.internalTableColumn.isActiveSort)
|
|
81
|
-
? "animate-fade-in"
|
|
82
|
-
: "animate-fade-out")} onClick={onHeaderSortClickCallback}>
|
|
83
|
-
{isColumnSortable &&
|
|
84
|
-
(sortDirection === fdTableSortDirections.asc ? (<FdIcon name={iconNames.chevronUp} size={iconSizes.extraSmall}/>) : (<FdIcon name={iconNames.chevronDown} size={iconSizes.extraSmall}/>))}
|
|
85
|
-
</div>
|
|
86
|
-
</div>)}
|
|
87
|
-
</div>)}
|
|
88
|
-
</div>);
|
|
89
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
2
|
-
import { FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
|
|
3
|
-
import { tableElementSuffixes } from "@fd-component-toolbox/table-element-suffixes";
|
|
4
|
-
import { FdTooltipProvider, FdTooltip, FdTooltipTrigger, FdTooltipContent, } from "@fd-component-toolbox/tooltip/FdTooltip";
|
|
5
|
-
import { index } from "drizzle-orm/mysql-core";
|
|
6
|
-
export const FdTableHeaderActionButton = ({ onClick, icon, showTooltip, tooltipText, ref, }) => {
|
|
7
|
-
const tooltip = showTooltip ?? true;
|
|
8
|
-
const buttonContent = (<FdButton ref={ref} id={tableElementSuffixes.addButton} variant="icon" size="icon" className="size-4 pt-1.5" onClick={onClick} tooltipText={tooltipText ?? "Add"} tooltipClassName="mb-1" tooltipSide="top">
|
|
9
|
-
<FdIcon name={icon ?? iconNames.plus} size={iconSizes.small} color="text-fd-accent" className="mt-1 stroke-fd-accent stroke-0.65"/>
|
|
10
|
-
</FdButton>);
|
|
11
|
-
if (tooltip) {
|
|
12
|
-
return (<div className="relative">
|
|
13
|
-
<FdTooltipProvider key={`tableHeaderCellActionButton${index}`}>
|
|
14
|
-
<FdTooltip>
|
|
15
|
-
<FdTooltipTrigger asChild>{buttonContent}</FdTooltipTrigger>
|
|
16
|
-
{tooltipText && <FdTooltipContent>{tooltipText}</FdTooltipContent>}
|
|
17
|
-
</FdTooltip>
|
|
18
|
-
</FdTooltipProvider>
|
|
19
|
-
</div>);
|
|
20
|
-
}
|
|
21
|
-
return buttonContent;
|
|
22
|
-
};
|
|
23
|
-
FdTableHeaderActionButton.displayName = "FdTableHeaderActionButton";
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useState } from "react";
|
|
2
|
-
import { goToNextPage, goToPreviousPage, handlePageSizeChange, shouldDisabledNextPageButton, } from "@meta/table/pager/FdPager.funcs";
|
|
3
|
-
import { FdSelect, FdSelectTrigger, FdSelectValue, FdSelectContent, FdSelectGroup, FdSelectItem, } from "@fd-component-toolbox/select/FdSelect";
|
|
4
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
5
|
-
import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
6
|
-
import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
|
|
7
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
8
|
-
import { tableDisplayModes } from "@fd-toolbox/enums/enums";
|
|
9
|
-
import { elements } from "@fd-toolbox/constants/elements";
|
|
10
|
-
import { elementPrefixes } from "@meta/constants/element-prefixes";
|
|
11
|
-
export const pageSizeOptions = [1, 3, 6, 10, 25, 50, 100];
|
|
12
|
-
/**
|
|
13
|
-
* An interactive pagination component used for navigating data tables.
|
|
14
|
-
* Includes controls for changing page number and selecting number of rows per page.
|
|
15
|
-
*
|
|
16
|
-
* @param props - {@link FdPagerProps}
|
|
17
|
-
*
|
|
18
|
-
*/
|
|
19
|
-
export function FdPager({ displayMode, pageSize: pageSizeProp, rowCount, onPaging, setIsActive, setPageNumber, pageNumber, }) {
|
|
20
|
-
const [pageSize, setPageSize] = useState(pageSizeProp);
|
|
21
|
-
const [isOpened, setIsOpened] = useState(false);
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
setPageSize(pageSizeProp);
|
|
24
|
-
}, [pageSizeProp]);
|
|
25
|
-
const onGoToPreviousPage = useCallback(() => {
|
|
26
|
-
goToPreviousPage(pageNumber, pageSize, onPaging, setPageNumber);
|
|
27
|
-
}, [onPaging, pageNumber, setPageNumber, pageSize]);
|
|
28
|
-
const onGoToNextPage = useCallback(() => {
|
|
29
|
-
goToNextPage(pageNumber, pageSize, onPaging, setPageNumber);
|
|
30
|
-
}, [onPaging, pageNumber, setPageNumber, pageSize]);
|
|
31
|
-
const onPageSizeChange = useCallback((newSize) => {
|
|
32
|
-
handlePageSizeChange(newSize, setPageSize, pageNumber, onPaging, setPageNumber, setIsOpened);
|
|
33
|
-
}, [pageNumber, setPageNumber, onPaging]);
|
|
34
|
-
return (<div className={cn("flex select-none items-center gap-1 pt-2 text-sm")} onFocus={() => setIsActive(true)} onBlur={() => setIsActive(false)}>
|
|
35
|
-
{(displayMode ?? tableDisplayModes.default) !== tableDisplayModes.minimal && (<DropdownMenu.Root open={isOpened} onOpenChange={setIsOpened}>
|
|
36
|
-
<DropdownMenu.Trigger asChild>
|
|
37
|
-
<FdButton id={elements.pager.openPagerButtonId} size="icon" variant="ghost">
|
|
38
|
-
<FdIcon name="dotsHorizontal"/>
|
|
39
|
-
</FdButton>
|
|
40
|
-
</DropdownMenu.Trigger>
|
|
41
|
-
<DropdownMenu.Portal>
|
|
42
|
-
<DropdownMenu.Content className="z-50 ml-24 flex min-w-32 items-center justify-between gap-2 rounded-md border bg-background px-2 py-1 shadow-sm">
|
|
43
|
-
<span className="mr-1 text-sm">Rows</span>
|
|
44
|
-
<div className="w-auto">
|
|
45
|
-
<FdSelect value={pageSize.toString()} onValueChange={onPageSizeChange}>
|
|
46
|
-
<FdSelectTrigger id={elements.pager.pagerSelectTriggerId} iconClassName="opacity-1" noUnderline={true}>
|
|
47
|
-
<FdSelectValue />
|
|
48
|
-
</FdSelectTrigger>
|
|
49
|
-
<FdSelectContent>
|
|
50
|
-
<FdSelectGroup>
|
|
51
|
-
{pageSizeOptions.map((option, index) => (<FdSelectItem id={elementPrefixes.selectItem + option.toString()} index={index} key={option} value={option.toString()}>
|
|
52
|
-
{option}
|
|
53
|
-
</FdSelectItem>))}
|
|
54
|
-
</FdSelectGroup>
|
|
55
|
-
</FdSelectContent>
|
|
56
|
-
</FdSelect>
|
|
57
|
-
</div>
|
|
58
|
-
</DropdownMenu.Content>
|
|
59
|
-
</DropdownMenu.Portal>
|
|
60
|
-
</DropdownMenu.Root>)}
|
|
61
|
-
<div className="flex -space-x-3">
|
|
62
|
-
<FdButton id={elements.pager.previousPageButton} disabled={pageNumber === 1} size="icon" variant="ghost" onClick={onGoToPreviousPage}>
|
|
63
|
-
<FdIcon name={iconNames.chevronLeft}/>
|
|
64
|
-
</FdButton>
|
|
65
|
-
|
|
66
|
-
<FdButton id={elements.pager.nextPageButton} disabled={shouldDisabledNextPageButton(rowCount, pageSize)} size="icon" variant="ghost" onClick={onGoToNextPage} className={cn(rowCount === 0 && "hidden")}>
|
|
67
|
-
<FdIcon name={iconNames.chevronRight}/>
|
|
68
|
-
</FdButton>
|
|
69
|
-
</div>
|
|
70
|
-
{pageNumber > 1 && <div className="mr-1">Page {pageNumber}</div>}
|
|
71
|
-
</div>);
|
|
72
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { useCallback, useMemo } from "react";
|
|
2
|
-
import { doTableCustomAction } from "@meta/table/table-custom-action/TableCustomAction.funcs";
|
|
3
|
-
import { FdIcon } from "@fd-component-toolbox/icon/FdIcon";
|
|
4
|
-
import { tableCustomActionTypes, } from "@meta/table/table-models";
|
|
5
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
6
|
-
export function TableCustomAction({ cellContext, customAction, onAction }) {
|
|
7
|
-
const onActionCallback = useCallback(async () => {
|
|
8
|
-
if (customAction.cellAction) {
|
|
9
|
-
const actionOut = doTableCustomAction(customAction.cellAction, cellContext);
|
|
10
|
-
const actionResult = { shouldRefresh: customAction.shouldRefresh };
|
|
11
|
-
if (customAction.shouldRefresh && actionOut instanceof Promise) {
|
|
12
|
-
await actionOut;
|
|
13
|
-
onAction(actionResult);
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
onAction(actionResult);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}, [customAction, cellContext, onAction]);
|
|
20
|
-
const isActionVisible = useMemo(() => (customAction?.shouldBeShown ? customAction.shouldBeShown(cellContext) : true) &&
|
|
21
|
-
customAction.actionType !== tableCustomActionTypes.template, [customAction, cellContext]);
|
|
22
|
-
return (isActionVisible && (<FdButton className="flex h-7 cursor-pointer items-center gap-2 px-1.5 py-1 font-normal text-muted-foreground hover:text-muted-foreground" onClick={onActionCallback} variant={"ghost"}>
|
|
23
|
-
{customAction.icon && <FdIcon name={customAction.icon}/>}
|
|
24
|
-
{customAction.name}
|
|
25
|
-
</FdButton>));
|
|
26
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { tabsNames } from "@meta/view/view-constants";
|
|
3
|
-
import { ResourceList } from "@meta/resource-list/ResourceList";
|
|
4
|
-
import FdViewResource from "@meta/view/view-resource/FdViewResource";
|
|
5
|
-
import { useSetTitle } from "@meta/page/use-set-title";
|
|
6
|
-
import { isUuidSet } from "@fd-toolbox/functions/value-checking-functions";
|
|
7
|
-
import { isResourceListView } from "@meta/resource-list/resource-lists";
|
|
8
|
-
/**
|
|
9
|
-
* A configurable component that can take many forms.
|
|
10
|
-
*
|
|
11
|
-
* For example, it can take form of {@link ResourceList}, {@link FdViewResource}, or others depending on configuration.
|
|
12
|
-
*
|
|
13
|
-
* @param props - {@link FdViewProps}
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```tsx
|
|
17
|
-
* <FdView
|
|
18
|
-
* resourceName="student"
|
|
19
|
-
* resourceId="d4507481-8b33-46e7-9c2e-606daab170cc"
|
|
20
|
-
* />
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export function FdView({ resourceName, resourceId, onDeleteComplete, onCancelClick, onSaveComplete, viewConfigProp, defaultTab, viewName, resourcesPromise, uiResourceMeta, relatedUiResourceMetas, onRefreshResource, }) {
|
|
24
|
-
useSetTitle(resourceName, uiResourceMeta);
|
|
25
|
-
const hasId = isUuidSet(resourceId);
|
|
26
|
-
if (isResourceListView(viewName, resourceId)) {
|
|
27
|
-
return (<ResourceList resourceName={resourceName} resourcesPromise={resourcesPromise} uiResourceMeta={uiResourceMeta} relatedUiResourceMetas={relatedUiResourceMetas}/>);
|
|
28
|
-
}
|
|
29
|
-
else
|
|
30
|
-
return (<FdViewResource resourceId={resourceId} hasId={hasId} resourceName={resourceName} onDeleteComplete={onDeleteComplete} onCancelClick={onCancelClick} onSaveComplete={onSaveComplete} viewConfigProp={viewConfigProp} defaultTab={defaultTab ?? tabsNames.overview} onRefreshData={onRefreshResource}/>);
|
|
31
|
-
}
|