@fernir2/saas-kit-cli 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,105 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import React, { useCallback, useState } from "react";
|
|
3
|
-
import { crudActions, propertyTypes } from "@fd-toolbox/enums/enums";
|
|
4
|
-
import { FdMarkdown } from "@fd-component-toolbox/markdown/FdMarkdown";
|
|
5
|
-
import { FdSwitch } from "@fd-component-toolbox/switch/FdSwitch";
|
|
6
|
-
import { FdEditResourceEnumField } from "@meta/edit-resource/edit-resource-property-block/FdEditResourceEnumField";
|
|
7
|
-
import { FdEditResourceFlagsEnumField } from "@meta/edit-resource/edit-resource-property-block/FdEditResourceFlagsEnumField";
|
|
8
|
-
import { FdInput } from "@fd-component-toolbox/input/FdInput";
|
|
9
|
-
import { FdDatePicker } from "@fd-component-toolbox/datepicker/FdDatePicker";
|
|
10
|
-
import { FdTextarea } from "@fd-component-toolbox/textarea/FdTextArea";
|
|
11
|
-
import { FdFormControl, FdFormField, FdFormItem, FdFormMessage } from "@fd-component-toolbox/form/FdForm";
|
|
12
|
-
import { isMarkdown, isEnum, isFlagsEnum, isRichText, isDateOnly, isDateTime, isBigText, isBlobList, } from "@meta/core/property-types";
|
|
13
|
-
import { getRelationResourceId, getRequiredLabel, isManyToOneBrowserField, isIdProperty, isManyToManyBrowserField, isOneToManyBrowserField, isRelationField, onBrowserChange, onEditorChange, onMultiBrowserChange, } from "@meta/edit-resource/edit-resource-property-block/FdEditResourcePropertyBlock.funcs";
|
|
14
|
-
import { parseStringStartDate } from "@fd-toolbox/dates/date-times";
|
|
15
|
-
import { fdBrowserField, fdManyToManyBrowserField, fdMultiBrowserField, } from "@meta/edit-resource/edit-resource-property-block/edit-resource-fields";
|
|
16
|
-
import { isDefaultInputField } from "@meta/edit-resource/services/edit-resource-components";
|
|
17
|
-
import { FdEditResourceBlobField } from "@meta/edit-resource/edit-resource-property-block/FdEditResourceBlobField";
|
|
18
|
-
import { FdEditResourceRichTextField } from "@meta/edit-resource/edit-resource-property-block/FdEditResourceRichTextField";
|
|
19
|
-
import { editFormElementSuffixes } from "@fd-toolbox/constants/element-suffixes";
|
|
20
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
21
|
-
import { hasPropertyPermission } from "@meta/auth/permissions/permission-checker";
|
|
22
|
-
export function FdEditResourcePropertyField({ uiPropertyMeta, propertyMeta, form, formFieldOption, resource, propertyConfig, readOnlyResource, loadComplete, excludeResourceIds, isNew, onChange, onItemClick, parentContextName, }) {
|
|
23
|
-
let result;
|
|
24
|
-
const displayName = propertyMeta.displayName;
|
|
25
|
-
const defaultValue = form.getValues(propertyMeta.name);
|
|
26
|
-
const relatedResourceId = getRelationResourceId(propertyMeta, resource);
|
|
27
|
-
const hasPermission = hasPropertyPermission(propertyMeta.id, crudActions.update);
|
|
28
|
-
const [editorContent, setEditorContent] = useState("");
|
|
29
|
-
const [isChecked, setIsChecked] = useState(!!resource[uiPropertyMeta.name]);
|
|
30
|
-
const onTextFieldChange = useCallback((name) => {
|
|
31
|
-
onChange?.(form.getValues(name), name);
|
|
32
|
-
}, [onChange, form]);
|
|
33
|
-
const handleEditorChange = (content, propertyName) => {
|
|
34
|
-
onEditorChange(form, propertyName, content, setEditorContent);
|
|
35
|
-
};
|
|
36
|
-
const onMultiBrowserValueChange = useCallback((selected, propertyMetaValue) => {
|
|
37
|
-
onMultiBrowserChange(form.setValue, selected, propertyMetaValue, onChange);
|
|
38
|
-
}, [form, onChange]);
|
|
39
|
-
const onBrowserValueChange = useCallback((propertyMetaValue, value) => {
|
|
40
|
-
onBrowserChange(form.setValue, value, propertyMetaValue, onChange);
|
|
41
|
-
}, [form, onChange]);
|
|
42
|
-
if (!hasPermission)
|
|
43
|
-
return result;
|
|
44
|
-
if (isRelationField(propertyMeta)) {
|
|
45
|
-
return isBlobList(propertyMeta) ? (<FdEditResourceBlobField isNew={isNew} label={getRequiredLabel(propertyMeta.required, displayName)} form={form} relatedResourceId={resource.id} propertyMeta={propertyMeta}/>) : (<>
|
|
46
|
-
{isManyToOneBrowserField(propertyMeta) &&
|
|
47
|
-
fdBrowserField(parentContextName, uiPropertyMeta, readOnlyResource, onBrowserValueChange, excludeResourceIds, relatedResourceId, form, onItemClick, isNew, propertyMeta)}
|
|
48
|
-
{isOneToManyBrowserField(propertyMeta) &&
|
|
49
|
-
fdMultiBrowserField(parentContextName, readOnlyResource, onMultiBrowserValueChange, resource.id, form, onItemClick, isNew, propertyMeta)}
|
|
50
|
-
{isManyToManyBrowserField(propertyMeta) &&
|
|
51
|
-
fdManyToManyBrowserField(parentContextName, readOnlyResource, relatedResourceId, form, onItemClick, isNew, propertyMeta, onMultiBrowserValueChange)}
|
|
52
|
-
</>);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
return (<>
|
|
56
|
-
{isMarkdown(propertyMeta.type, propertyMeta.typeFormat) && (<FdMarkdown elementId={uiPropertyMeta.name + editFormElementSuffixes.markdown} label={getRequiredLabel(propertyMeta.required, displayName)} required={propertyMeta.required} value={defaultValue} name={uiPropertyMeta.name} form={form} readOnly={readOnlyResource} skipAnimationOnce={!loadComplete} onChange={(val) => {
|
|
57
|
-
form.setValue(propertyMeta.name, val);
|
|
58
|
-
}} onBlur={() => onTextFieldChange(propertyMeta.name)}/>)}
|
|
59
|
-
{propertyMeta.type === propertyTypes.boolean && (<FdFormField control={form.control} name={uiPropertyMeta.name} render={({ field }) => (<FdFormItem>
|
|
60
|
-
<FdFormControl>
|
|
61
|
-
<FdSwitch id={uiPropertyMeta.name + editFormElementSuffixes.checkbox} text={displayName} form={form} name={uiPropertyMeta.name} checked={isChecked} isDisabled={propertyConfig?.isDisabled ?? false} readOnly={readOnlyResource} skipAnimationOnce={!loadComplete} onCheckedChange={(checked) => {
|
|
62
|
-
field.onChange(checked);
|
|
63
|
-
setIsChecked(!isChecked);
|
|
64
|
-
onTextFieldChange(uiPropertyMeta.name);
|
|
65
|
-
}}/>
|
|
66
|
-
</FdFormControl>
|
|
67
|
-
<FdFormMessage />
|
|
68
|
-
</FdFormItem>)}/>)}
|
|
69
|
-
{isEnum(propertyMeta.type, propertyMeta.typeFormat) && (<FdEditResourceEnumField uiPropertyMeta={uiPropertyMeta} form={form} readOnly={readOnlyResource} skipAnimationOnce={!loadComplete} onChange={onChange} propertyMeta={propertyMeta}/>)}
|
|
70
|
-
{isFlagsEnum(propertyMeta.type, propertyMeta.typeFormat) && (<FdEditResourceFlagsEnumField uiPropertyMeta={uiPropertyMeta} form={form} skipAnimationOnce={!loadComplete} readOnly={readOnlyResource} onChange={onChange} propertyMeta={propertyMeta}/>)}
|
|
71
|
-
{isRichText(propertyMeta.type, propertyMeta.typeFormat) && (<FdFormItem>
|
|
72
|
-
<FdFormField control={form.control} name={uiPropertyMeta.name} render={() => (<FdEditResourceRichTextField id={uiPropertyMeta.name + editFormElementSuffixes.richText} value={editorContent} onChange={(content) => handleEditorChange(content, propertyMeta.name)} placeholder="Start typing..." debounceTime={500} defaultValue={defaultValue ? String(defaultValue) : ""} label={getRequiredLabel(propertyMeta.required, displayName)} onBlur={() => onTextFieldChange(propertyMeta.name)}/>)}/>
|
|
73
|
-
</FdFormItem>)}
|
|
74
|
-
{isDefaultInputField(propertyMeta) && (<div className={cn("w-full", isIdProperty(propertyMeta) && "opacity-0")}>
|
|
75
|
-
<FdFormField control={form.control} name={uiPropertyMeta.name} render={({ field }) => (<FdFormItem>
|
|
76
|
-
<FdFormControl>
|
|
77
|
-
<FdInput style={{
|
|
78
|
-
cursor: isIdProperty(propertyMeta) ? "default" : "text",
|
|
79
|
-
}} showClearIcon={!readOnlyResource} {...form.register(propertyMeta.name, formFieldOption)} {...field} readOnly={readOnlyResource} placeholder={displayName} inputId={uiPropertyMeta.name + editFormElementSuffixes.input} required={propertyMeta.required} label={getRequiredLabel(propertyMeta.required, displayName)} onBlur={() => onTextFieldChange(propertyMeta.name)} skipAnimationOnce={!loadComplete} onChange={(event) => {
|
|
80
|
-
field.onChange(event);
|
|
81
|
-
}} disabled={propertyConfig?.isDisabled ?? false}/>
|
|
82
|
-
</FdFormControl>
|
|
83
|
-
<FdFormMessage />
|
|
84
|
-
</FdFormItem>)}/>
|
|
85
|
-
{propertyConfig?.description && (<p className="mt-2 pl-1 text-xs opacity-60">{propertyConfig.description}</p>)}
|
|
86
|
-
</div>)}
|
|
87
|
-
{(isDateOnly(propertyMeta.type, propertyMeta.typeFormat) ||
|
|
88
|
-
isDateTime(propertyMeta.type, propertyMeta.typeFormat)) && (<FdDatePicker label={displayName} date={defaultValue} form={form} name={propertyMeta.name} inputId={propertyMeta.name + editFormElementSuffixes.datePicker} enableTime={isDateTime(propertyMeta.type, propertyMeta.typeFormat)} readOnly={readOnlyResource} skipAnimationOnce={!loadComplete} onDateValueChange={(val) => {
|
|
89
|
-
if (val) {
|
|
90
|
-
onChange?.(parseStringStartDate(val), uiPropertyMeta.name);
|
|
91
|
-
}
|
|
92
|
-
}}/>)}
|
|
93
|
-
{isBigText(propertyMeta.type, propertyMeta.typeFormat) && (<div className="w-full">
|
|
94
|
-
<FdFormField control={form.control} name={uiPropertyMeta.name} render={({ field }) => (<FdFormItem>
|
|
95
|
-
<FdFormControl>
|
|
96
|
-
<FdTextarea placeholder={propertyConfig?.placeholder} required={propertyMeta.required} id={propertyMeta.name + editFormElementSuffixes.textarea} {...field} {...form.register(propertyMeta.name, formFieldOption)} readOnly={readOnlyResource} onChange={(event) => {
|
|
97
|
-
field.onChange(event);
|
|
98
|
-
}} label={getRequiredLabel(propertyMeta.required, displayName)} onBlur={() => onTextFieldChange(propertyMeta.name)}/>
|
|
99
|
-
</FdFormControl>
|
|
100
|
-
<FdFormMessage />
|
|
101
|
-
</FdFormItem>)}/>
|
|
102
|
-
</div>)}
|
|
103
|
-
</>);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { FdSelect, FdSelectContent, FdSelectGroup, FdSelectItem, FdSelectTrigger, FdSelectValue, } from "@fd-component-toolbox/select/FdSelect";
|
|
2
|
-
import { enumFilterTypes } from "@meta/filtering/filter/FdFilter.funcs";
|
|
3
|
-
import { elementSuffixes } from "@fd-toolbox/constants/element-suffixes";
|
|
4
|
-
/**
|
|
5
|
-
* Filter component for enum flag properties with operator selection and single-value selection.
|
|
6
|
-
*
|
|
7
|
-
* @param props - {@link FdEnumFlagFilterProps}
|
|
8
|
-
*/
|
|
9
|
-
export function FdEnumFlagFilter({ rightHandResult, displayName, propertyMeta, onOperatorTypeChangeCallback, onRightHandChangeCallback, inputId, onOpenChangeCallback, buttonRef, }) {
|
|
10
|
-
return (<div className="flex min-w-full items-center">
|
|
11
|
-
<div className="mr-1 w-10">
|
|
12
|
-
<FdSelect value={rightHandResult} onValueChange={onOperatorTypeChangeCallback}>
|
|
13
|
-
<FdSelectTrigger id={propertyMeta.name + elementSuffixes.filterOperator} variant="float">
|
|
14
|
-
<FdSelectValue />
|
|
15
|
-
</FdSelectTrigger>
|
|
16
|
-
<FdSelectContent>
|
|
17
|
-
<FdSelectGroup>
|
|
18
|
-
{enumFilterTypes.map((item) => (<FdSelectItem key={`${item.text}_${item.type}`} value={item.type}>
|
|
19
|
-
{item.text}
|
|
20
|
-
</FdSelectItem>))}
|
|
21
|
-
</FdSelectGroup>
|
|
22
|
-
</FdSelectContent>
|
|
23
|
-
</FdSelect>
|
|
24
|
-
</div>
|
|
25
|
-
<div className="inline-block flex-1">
|
|
26
|
-
<FdSelect value={displayName} onValueChange={onRightHandChangeCallback} onOpenChange={onOpenChangeCallback}>
|
|
27
|
-
<FdSelectTrigger ref={buttonRef} id={inputId} label={propertyMeta.displayName} shouldAnimate={!!rightHandResult && rightHandResult !== "None"} value={rightHandResult} variant="float">
|
|
28
|
-
<FdSelectValue className="mt-0 w-full" placeholder={displayName}/>
|
|
29
|
-
</FdSelectTrigger>
|
|
30
|
-
<FdSelectContent>
|
|
31
|
-
<FdSelectGroup>
|
|
32
|
-
{propertyMeta.enumerationValues?.map((value, index) => (<FdSelectItem className="min-h-6 whitespace-nowrap" key={value} value={propertyMeta.enumerationDisplayName[index]}>
|
|
33
|
-
{propertyMeta.enumerationDisplayName[index]}
|
|
34
|
-
</FdSelectItem>))}
|
|
35
|
-
</FdSelectGroup>
|
|
36
|
-
</FdSelectContent>
|
|
37
|
-
</FdSelect>
|
|
38
|
-
</div>
|
|
39
|
-
</div>);
|
|
40
|
-
}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
-
import { onInitFilter, onBrowserChanged, disableFilterInput, getFilterRightHand, isIntegerField, onFilterChange, onDateChange, onOperatorTypeChange, getFilterDisplayValues, filterTypes, onInputBlur, } from "@meta/filtering/filter/FdFilter.funcs";
|
|
4
|
-
import { isDefaultInputField } from "@meta/edit-resource/services/edit-resource-components";
|
|
5
|
-
import { isFlagsEnum, isGuid, isEnum, isDateTime, isDateOnly, isBooleanField, } from "@meta/core/property-types";
|
|
6
|
-
import { filterOperatorTypes } from "@fd-toolbox/enums/enums";
|
|
7
|
-
import { useForm, FormProvider } from "react-hook-form";
|
|
8
|
-
import { FdEnumFlagFilter } from "@meta/filtering/filter/FdEnumFlagFilter";
|
|
9
|
-
import { EnumFilter } from "@meta/filtering/filter/filters/EnumFilter";
|
|
10
|
-
import { IntegerFilter } from "@meta/filtering/filter/filters/IntegerFilter";
|
|
11
|
-
import { BooleanFilter } from "@meta/filtering/filter/filters/BooleanFilter";
|
|
12
|
-
import { DateFilter } from "@meta/filtering/filter/filters/DateFilter";
|
|
13
|
-
import { TextFilter } from "@meta/filtering/filter/filters/TextFilter";
|
|
14
|
-
import { GuidFilter } from "@meta/filtering/filter/filters/GuidFilter";
|
|
15
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
16
|
-
import { elementSuffixes } from "@fd-toolbox/constants/element-suffixes";
|
|
17
|
-
/**
|
|
18
|
-
* Сomponent for filtering data.
|
|
19
|
-
*
|
|
20
|
-
* @param props - {@link FdFilterProps}
|
|
21
|
-
*/
|
|
22
|
-
export function FdFilter({ propertyMeta, onChange, className, state, onStateChange, relatedUiResourceMetas, type, resetCounter, ...props }) {
|
|
23
|
-
const form = useForm({
|
|
24
|
-
defaultValues: { [propertyMeta.name]: "" },
|
|
25
|
-
});
|
|
26
|
-
const [filterOperatorType, setFilterOperatorType] = useState(filterOperatorTypes.none);
|
|
27
|
-
const [inputId, setInputId] = useState("");
|
|
28
|
-
const [disableEnumFilter, setDisableEnumFilter] = useState(false);
|
|
29
|
-
const [disabled, setDisabled] = useState(props.disabled ?? false);
|
|
30
|
-
const [selectedResourceIds, setSelectedResourceIds] = useState([]);
|
|
31
|
-
const [displayName, setDisplayName] = useState(propertyMeta.displayName);
|
|
32
|
-
const [displayDate, setDisplayDate] = useState("");
|
|
33
|
-
const rightHandResult = useMemo(() => {
|
|
34
|
-
return getFilterRightHand(state, filterOperatorType);
|
|
35
|
-
}, [state, filterOperatorType]);
|
|
36
|
-
const [isInputShowed, setIsInputShowed] = useState(false);
|
|
37
|
-
const inputRef = useRef(null);
|
|
38
|
-
const buttonRef = useRef(null);
|
|
39
|
-
const openTriggerRef = useRef(null);
|
|
40
|
-
const rightHandResultForFdMultiselect = useMemo(() => {
|
|
41
|
-
if (rightHandResult) {
|
|
42
|
-
return rightHandResult.split(",");
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
return [...rightHandResult];
|
|
46
|
-
}
|
|
47
|
-
}, [rightHandResult]);
|
|
48
|
-
const displayValues = useMemo(() => {
|
|
49
|
-
return getFilterDisplayValues(state, propertyMeta);
|
|
50
|
-
}, [propertyMeta, state]);
|
|
51
|
-
useEffect(() => {
|
|
52
|
-
onInitFilter(state, displayName, setDisplayName, propertyMeta, setFilterOperatorType, setSelectedResourceIds, setDisplayDate, setInputId);
|
|
53
|
-
}, [displayName, propertyMeta, state]);
|
|
54
|
-
useEffect(() => {
|
|
55
|
-
if (resetCounter !== undefined) {
|
|
56
|
-
setIsInputShowed(false);
|
|
57
|
-
}
|
|
58
|
-
}, [resetCounter]);
|
|
59
|
-
const onDateChangeCallback = useCallback(async (date) => {
|
|
60
|
-
onDateChange(state, onStateChange, filterOperatorType, setDisabled, setDisableEnumFilter, date, onChange);
|
|
61
|
-
if (!date)
|
|
62
|
-
setIsInputShowed(false);
|
|
63
|
-
}, [filterOperatorType, onChange, onStateChange, state]);
|
|
64
|
-
const onRightHandChangeCallback = useCallback(async (value) => {
|
|
65
|
-
await onFilterChange({
|
|
66
|
-
...state,
|
|
67
|
-
rightSide: value,
|
|
68
|
-
}, onStateChange, filterOperatorType, setDisabled, setDisableEnumFilter, setFilterOperatorType, onChange);
|
|
69
|
-
if (value === "none" || value === "" || (Array.isArray(value) && value.length === 0)) {
|
|
70
|
-
setIsInputShowed?.(false);
|
|
71
|
-
}
|
|
72
|
-
}, [state, onStateChange, filterOperatorType, onChange]);
|
|
73
|
-
const onOperatorTypeChangeCallback = useCallback(async (value) => {
|
|
74
|
-
await onOperatorTypeChange(value, state, onStateChange, setFilterOperatorType, setDisabled, setDisabled, onChange);
|
|
75
|
-
}, [state, onStateChange, onChange]);
|
|
76
|
-
const onBrowserChangeCallback = useCallback(async (selectedResources, resourceMeta) => {
|
|
77
|
-
await onBrowserChanged(selectedResources, propertyMeta, state, filterOperatorType, onStateChange, setDisabled, setDisableEnumFilter, setSelectedResourceIds, form, resourceMeta, onChange, setIsInputShowed);
|
|
78
|
-
}, [filterOperatorType, onStateChange, propertyMeta, state, form, onChange]);
|
|
79
|
-
const onOpenChangeCallback = useCallback((open) => {
|
|
80
|
-
if (!open && (rightHandResult === "" || rightHandResult === "none")) {
|
|
81
|
-
setIsInputShowed?.(false);
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
setIsInputShowed?.(true);
|
|
85
|
-
}
|
|
86
|
-
}, [rightHandResult, setIsInputShowed]);
|
|
87
|
-
const onGuidFilterClose = useCallback(() => {
|
|
88
|
-
setIsInputShowed?.(false);
|
|
89
|
-
}, []);
|
|
90
|
-
const hendleOnHoverClick = useCallback(() => {
|
|
91
|
-
setIsInputShowed(true);
|
|
92
|
-
requestAnimationFrame(() => {
|
|
93
|
-
inputRef?.current?.focus();
|
|
94
|
-
buttonRef?.current?.click();
|
|
95
|
-
openTriggerRef.current?.open();
|
|
96
|
-
});
|
|
97
|
-
}, []);
|
|
98
|
-
const handleOnBlur = useCallback((val) => {
|
|
99
|
-
onInputBlur(val, setIsInputShowed);
|
|
100
|
-
}, [setIsInputShowed]);
|
|
101
|
-
return (<FormProvider {...form}>
|
|
102
|
-
<div className={className}>
|
|
103
|
-
{state && (<>
|
|
104
|
-
{type === filterTypes.default && !isInputShowed && (<div className="flex h-8 w-fit cursor-pointer items-center justify-center bg-popover px-8" onClick={hendleOnHoverClick} id={inputId + elementSuffixes.button}>
|
|
105
|
-
<p className="text-sm font-semibold text-fd-accent">{displayName}</p>
|
|
106
|
-
</div>)}
|
|
107
|
-
<div className={cn("hidden", isInputShowed && "block max-w-36")}>
|
|
108
|
-
{isEnum(propertyMeta.type, propertyMeta.typeFormat) && (<EnumFilter filterOperatorType={filterOperatorType} onOperatorTypeChange={onOperatorTypeChangeCallback} rightHandResult={rightHandResultForFdMultiselect} onRightHandChange={onRightHandChangeCallback} displayValues={displayValues} disableEnumFilter={disableEnumFilter} displayName={displayName} propertyMeta={propertyMeta} inputId={inputId} onOpenChangeCallback={onOpenChangeCallback} ref={openTriggerRef}/>)}
|
|
109
|
-
{isDefaultInputField(propertyMeta) && isIntegerField(propertyMeta) && (<IntegerFilter filterOperatorType={filterOperatorType} onOperatorTypeChange={onOperatorTypeChangeCallback} rightHandResult={rightHandResult} onRightHandChange={onRightHandChangeCallback} displayName={displayName} disableFilterInput={disableFilterInput} inputId={inputId} inputRef={inputRef} onBlur={handleOnBlur}/>)}
|
|
110
|
-
{isBooleanField(propertyMeta) && (<BooleanFilter rightHandResult={rightHandResult} onRightHandChange={onRightHandChangeCallback} displayName={propertyMeta.displayName} state={state} filterOperatorType={filterOperatorType} inputId={inputId} buttonRef={buttonRef} onOpenChangeCallback={onOpenChangeCallback}/>)}
|
|
111
|
-
{(isDateOnly(propertyMeta.type, propertyMeta.typeFormat) ||
|
|
112
|
-
isDateTime(propertyMeta.type, propertyMeta.typeFormat)) && (<DateFilter displayName={propertyMeta.displayName} displayDate={displayDate} onDateChange={onDateChangeCallback} onOpenChangeCallback={onOpenChangeCallback} ref={openTriggerRef}/>)}
|
|
113
|
-
{!isGuid(propertyMeta) &&
|
|
114
|
-
isDefaultInputField(propertyMeta) &&
|
|
115
|
-
!isIntegerField(propertyMeta) &&
|
|
116
|
-
!isDateOnly(propertyMeta.type, propertyMeta.typeFormat) && (<TextFilter displayName={displayName} rightHandResult={rightHandResult} onRightHandChange={onRightHandChangeCallback} inputId={inputId} inputRef={inputRef} onBlur={handleOnBlur}/>)}
|
|
117
|
-
{isGuid(propertyMeta) && (<GuidFilter onClose={onGuidFilterClose} filterOperatorType={filterOperatorType} onOperatorTypeChange={onOperatorTypeChangeCallback} selectedResourceIds={selectedResourceIds} setSelectedResourceIds={setSelectedResourceIds} propertyMeta={propertyMeta} onBrowserChange={onBrowserChangeCallback} disabled={disabled} form={form} inputId={inputId} relatedUiResourceMetas={relatedUiResourceMetas} ref={openTriggerRef}/>)}
|
|
118
|
-
{isFlagsEnum(propertyMeta.type, propertyMeta.typeFormat) && (<FdEnumFlagFilter rightHandResult={rightHandResult} displayName={displayName} propertyMeta={propertyMeta} onOperatorTypeChangeCallback={onOperatorTypeChangeCallback} onRightHandChangeCallback={onRightHandChangeCallback} inputId={inputId} buttonRef={buttonRef} onOpenChangeCallback={onOpenChangeCallback}/>)}
|
|
119
|
-
</div>
|
|
120
|
-
</>)}
|
|
121
|
-
</div>
|
|
122
|
-
</FormProvider>);
|
|
123
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { FdSelect, FdSelectContent, FdSelectGroup, FdSelectItem, FdSelectTrigger, } from "@fd-component-toolbox/select/FdSelect";
|
|
2
|
-
import { capitalizeString } from "@fd-toolbox/strings/case-converters";
|
|
3
|
-
import { getFilterRightHandValue } from "@meta/filtering/filter/FdFilter.funcs";
|
|
4
|
-
import { elementPrefixes } from "@meta/constants/element-prefixes";
|
|
5
|
-
export const booleanFilterSelectOptions = [
|
|
6
|
-
{ value: "none", label: "None" },
|
|
7
|
-
{ value: "true", label: "Yes" },
|
|
8
|
-
{ value: "false", label: "No" },
|
|
9
|
-
];
|
|
10
|
-
export function BooleanFilter({ rightHandResult, onRightHandChange, displayName, state, filterOperatorType, inputId, onOpenChangeCallback, buttonRef, }) {
|
|
11
|
-
return (<div className="relative min-w-full">
|
|
12
|
-
<FdSelect value={rightHandResult} onValueChange={onRightHandChange} onOpenChange={onOpenChangeCallback}>
|
|
13
|
-
<FdSelectTrigger ref={buttonRef} id={inputId} label={displayName} shouldAnimate={!!rightHandResult && rightHandResult !== "none"} variant="float">
|
|
14
|
-
{capitalizeString(getFilterRightHandValue(state, filterOperatorType))}
|
|
15
|
-
</FdSelectTrigger>
|
|
16
|
-
<FdSelectContent>
|
|
17
|
-
<FdSelectGroup>
|
|
18
|
-
{booleanFilterSelectOptions.map((option) => (<FdSelectItem id={elementPrefixes.selectItem + option.label} key={option.value} value={option.value}>
|
|
19
|
-
{option.label}
|
|
20
|
-
</FdSelectItem>))}
|
|
21
|
-
</FdSelectGroup>
|
|
22
|
-
</FdSelectContent>
|
|
23
|
-
</FdSelect>
|
|
24
|
-
</div>);
|
|
25
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { FdDatePicker } from "@fd-component-toolbox/datepicker/FdDatePicker";
|
|
2
|
-
/**
|
|
3
|
-
* Date filter component based on {@link FdDatePicker}.
|
|
4
|
-
* Designed to be used in filters, forms or dashboards where selecting a date is required.
|
|
5
|
-
*
|
|
6
|
-
* @see {@link DateFilterProps} for component props
|
|
7
|
-
*/
|
|
8
|
-
export function DateFilter({ displayName, displayDate, onDateChange, onOpenChangeCallback, ref, }) {
|
|
9
|
-
return (<FdDatePicker variant="float" label={displayName} date={displayDate} onDateValueChange={onDateChange} onOpenChange={onOpenChangeCallback} ref={ref}/>);
|
|
10
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { FdSelect, FdSelectContent, FdSelectGroup, FdSelectItem, FdSelectTrigger, FdSelectValue, } from "@fd-component-toolbox/select/FdSelect";
|
|
2
|
-
import { FdMultiselect, FdMultiselectContent, FdMultiselectInput, FdMultiselectItem, FdMultiselectList, FdMultiselectTrigger, } from "@fd-component-toolbox/multiselect/FdMultiselect";
|
|
3
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
4
|
-
import { enumFilterTypes, getFilterShortValue } from "@meta/filtering/filter/FdFilter.funcs";
|
|
5
|
-
import { elementSuffixes } from "@fd-toolbox/constants/element-suffixes";
|
|
6
|
-
/**
|
|
7
|
-
* Filter component for enumeration properties with operator selection and multi-value selection
|
|
8
|
-
*
|
|
9
|
-
* @param props - {@link EnumFilterProps}
|
|
10
|
-
*/
|
|
11
|
-
export function EnumFilter({ filterOperatorType, onOperatorTypeChange, rightHandResult, onRightHandChange, displayValues, disableEnumFilter, displayName, propertyMeta, inputId, onOpenChangeCallback, ref, }) {
|
|
12
|
-
return (<div className="flex min-w-full items-center">
|
|
13
|
-
<div className="mr-1 w-full max-w-9">
|
|
14
|
-
<FdSelect value={filterOperatorType} onValueChange={onOperatorTypeChange}>
|
|
15
|
-
<FdSelectTrigger id={propertyMeta.name + elementSuffixes.filterOperator} variant="float" className="flex justify-center gap-px" size="short">
|
|
16
|
-
<FdSelectValue>
|
|
17
|
-
{getFilterShortValue(enumFilterTypes, filterOperatorType)}
|
|
18
|
-
</FdSelectValue>
|
|
19
|
-
</FdSelectTrigger>
|
|
20
|
-
<FdSelectContent>
|
|
21
|
-
<FdSelectGroup>
|
|
22
|
-
{enumFilterTypes.map((item, index) => (<FdSelectItem index={index} key={item.type} value={item.type} className="min-h-6">
|
|
23
|
-
{item.text}
|
|
24
|
-
</FdSelectItem>))}
|
|
25
|
-
</FdSelectGroup>
|
|
26
|
-
</FdSelectContent>
|
|
27
|
-
</FdSelect>
|
|
28
|
-
</div>
|
|
29
|
-
<div className="inline-block flex-1">
|
|
30
|
-
<FdMultiselect id={inputId} values={rightHandResult} onValuesChange={onRightHandChange} displayValues={displayValues} disabled={disableEnumFilter} variant="float" onOpenChange={onOpenChangeCallback} ref={ref}>
|
|
31
|
-
<FdMultiselectTrigger>
|
|
32
|
-
<FdMultiselectInput id={inputId} className="mt-0 w-full" animatedPlaceholder={displayName}/>
|
|
33
|
-
</FdMultiselectTrigger>
|
|
34
|
-
<FdMultiselectContent>
|
|
35
|
-
<FdMultiselectList className="z-20">
|
|
36
|
-
{propertyMeta.enumerationValues?.map((value) => (<FdMultiselectItem className={cn("min-h-6 whitespace-nowrap")} key={value.toString()} value={value.toString()}>
|
|
37
|
-
{propertyMeta.enumerationDisplayName?.[Number(value)]}
|
|
38
|
-
</FdMultiselectItem>))}
|
|
39
|
-
</FdMultiselectList>
|
|
40
|
-
</FdMultiselectContent>
|
|
41
|
-
</FdMultiselect>
|
|
42
|
-
</div>
|
|
43
|
-
</div>);
|
|
44
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { FdSelect, FdSelectContent, FdSelectGroup, FdSelectItem, FdSelectTrigger, FdSelectValue, } from "@fd-component-toolbox/select/FdSelect";
|
|
3
|
-
import { FdMultiBrowser } from "@meta/browsers/multi-browser/FdMultiBrowser";
|
|
4
|
-
import { browserFilterTypes, getFilterShortValue } from "@meta/filtering/filter/FdFilter.funcs";
|
|
5
|
-
export function GuidFilter({ filterOperatorType, onOperatorTypeChange, selectedResourceIds, setSelectedResourceIds, propertyMeta, onBrowserChange, disabled, form, inputId, onClose, relatedUiResourceMetas, ref, }) {
|
|
6
|
-
return (<div className="flex min-w-9 flex-row items-center gap-1">
|
|
7
|
-
<div className="w-full max-w-9">
|
|
8
|
-
<FdSelect value={filterOperatorType} onValueChange={onOperatorTypeChange}>
|
|
9
|
-
<FdSelectTrigger id={inputId} variant="float" className="flex justify-center gap-px" size="short">
|
|
10
|
-
<FdSelectValue>
|
|
11
|
-
{getFilterShortValue(browserFilterTypes, filterOperatorType)}
|
|
12
|
-
</FdSelectValue>
|
|
13
|
-
</FdSelectTrigger>
|
|
14
|
-
<FdSelectContent>
|
|
15
|
-
<FdSelectGroup>
|
|
16
|
-
{browserFilterTypes.map((item, index) => (<FdSelectItem index={index} key={item.type} value={item.type} className="min-h-6">
|
|
17
|
-
{item.text}
|
|
18
|
-
</FdSelectItem>))}
|
|
19
|
-
</FdSelectGroup>
|
|
20
|
-
</FdSelectContent>
|
|
21
|
-
</FdSelect>
|
|
22
|
-
</div>
|
|
23
|
-
<FdMultiBrowser selectedResourceIds={selectedResourceIds} setSelectedResourceIds={setSelectedResourceIds} getSelectedResourcesFromApi={false} propertyMeta={propertyMeta} required={false} onChange={onBrowserChange} onClose={onClose} disabled={disabled} form={form} variant="float" relatedUiResourceMeta={relatedUiResourceMetas?.find((uiResourceMeta) => {
|
|
24
|
-
return (propertyMeta.relation?.relatedResourceName ===
|
|
25
|
-
uiResourceMeta.resourceMeta.resourceName);
|
|
26
|
-
})} ref={ref}/>
|
|
27
|
-
</div>);
|
|
28
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { FdSelect, FdSelectContent, FdSelectGroup, FdSelectItem, FdSelectTrigger, FdSelectValue, } from "@fd-component-toolbox/select/FdSelect";
|
|
2
|
-
import { FdInput } from "@fd-component-toolbox/input/FdInput";
|
|
3
|
-
import { numberFilterTypes, getFilterShortValue } from "@meta/filtering/filter/FdFilter.funcs";
|
|
4
|
-
import { filterOperatorTypes } from "@fd-toolbox/enums/enums";
|
|
5
|
-
import { oDataNullValue } from "@fd-toolbox/odata/odata-constants";
|
|
6
|
-
export function IntegerFilter({ filterOperatorType, onOperatorTypeChange, rightHandResult, onRightHandChange, displayName, disableFilterInput, inputId, inputRef, onBlur, }) {
|
|
7
|
-
return (<div className="flex min-w-full">
|
|
8
|
-
<div className="mr-1 inline-block w-full max-w-9">
|
|
9
|
-
<FdSelect value={filterOperatorType} onValueChange={onOperatorTypeChange}>
|
|
10
|
-
<FdSelectTrigger variant="float" className="flex justify-center gap-px" size="short">
|
|
11
|
-
{filterOperatorType !== filterOperatorTypes.none && (<FdSelectValue>
|
|
12
|
-
{getFilterShortValue(numberFilterTypes, filterOperatorType)}
|
|
13
|
-
</FdSelectValue>)}
|
|
14
|
-
</FdSelectTrigger>
|
|
15
|
-
<FdSelectContent>
|
|
16
|
-
<FdSelectGroup>
|
|
17
|
-
{numberFilterTypes.map((item, index) => (<FdSelectItem index={index} key={item.type} value={item.type} className="min-h-6">
|
|
18
|
-
{item.text}
|
|
19
|
-
</FdSelectItem>))}
|
|
20
|
-
</FdSelectGroup>
|
|
21
|
-
</FdSelectContent>
|
|
22
|
-
</FdSelect>
|
|
23
|
-
</div>
|
|
24
|
-
<div className="inline-block w-64">
|
|
25
|
-
<FdInput inputId={inputId} showClearIcon={true} value={rightHandResult !== oDataNullValue ? rightHandResult : ""} onChange={onRightHandChange} disabled={disableFilterInput(filterOperatorType)} label={displayName} variant="float" ref={inputRef} onBlur={onBlur}/>
|
|
26
|
-
</div>
|
|
27
|
-
</div>);
|
|
28
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { FdInput } from "@fd-component-toolbox/input/FdInput";
|
|
2
|
-
/**
|
|
3
|
-
* Text filter component for filtering data by text input
|
|
4
|
-
*
|
|
5
|
-
* @param props - {@link TextFilterProps}
|
|
6
|
-
*/
|
|
7
|
-
export function TextFilter({ displayName, rightHandResult, onRightHandChange, inputId, inputRef, onBlur, }) {
|
|
8
|
-
return (<div className="min-w-full">
|
|
9
|
-
<FdInput inputId={inputId} label={displayName} showClearIcon={true} value={rightHandResult} onChange={onRightHandChange} variant="float" ref={inputRef} onBlur={onBlur}/>
|
|
10
|
-
</div>);
|
|
11
|
-
}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState, } from "react";
|
|
3
|
-
import * as Collapsible from "@radix-ui/react-collapsible";
|
|
4
|
-
import { getFilteredKeys, getFilters, onResize, onStateChange, setObserver, resetResourceFilterListState, } from "@meta/filtering/resource-filter-list/FdResourceFilterList.funcs";
|
|
5
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
6
|
-
import { FdFilter } from "@meta/filtering/filter/FdFilter";
|
|
7
|
-
import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
8
|
-
import { initResourceFilterList } from "@meta/filtering/resource-filter-list/resource-filter-lists";
|
|
9
|
-
import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
|
|
10
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
11
|
-
import { fdFilterListPositions } from "@meta/filtering/filter-list-positions";
|
|
12
|
-
import { FdBackButton } from "@fd-component-toolbox/back-button/FdBackButton";
|
|
13
|
-
import { useFdRouter } from "@meta/client/framework/hooks";
|
|
14
|
-
import { elementSuffixes } from "@fd-toolbox/constants/element-suffixes";
|
|
15
|
-
import { FdTooltip, FdTooltipContent, FdTooltipProvider, FdTooltipTrigger, } from "@fd-component-toolbox/tooltip/FdTooltip";
|
|
16
|
-
import { getManyToManyRelatedPropertyMetas } from "@meta/meta-providers";
|
|
17
|
-
import { filterTypes } from "@meta/filtering/filter/FdFilter.funcs";
|
|
18
|
-
export const resourceFilterListId = "resource-filter-list";
|
|
19
|
-
/**
|
|
20
|
-
* Resource filter list component with collapsible filters, action buttons, and responsive layout.
|
|
21
|
-
*
|
|
22
|
-
* @see {@link FdResourceFilterListProps} for component props
|
|
23
|
-
* @see {@link FdResourceFilterListComponent} for available ref methods
|
|
24
|
-
* @see {@link ResourceFilterListConfig} for configuration options
|
|
25
|
-
*/
|
|
26
|
-
export function FdResourceFilterList({ ref, uiResourceMeta, stateKey, onFilterChange, queryODataFilters, onRefreshResources, showRefreshButton, showResetButton, position, showBackButton, relatedUiResourceMetas, type, ...props }) {
|
|
27
|
-
const router = useFdRouter();
|
|
28
|
-
const [state, setState] = useState({});
|
|
29
|
-
const [filterKeys, setFilterKeys] = useState([]);
|
|
30
|
-
const [filteredAndOtherPropertyMetas, setFilteredAndOtherPropertyMetas] = useState({});
|
|
31
|
-
const [filteredPropertyMetas, setFilteredPropertyMetas] = useState({});
|
|
32
|
-
const [isFiltersCollapsible, setIsFiltersCollapsible] = useState(true);
|
|
33
|
-
const [open, setOpen] = useState(false);
|
|
34
|
-
const [elementsShown, setElementsShown] = useState(1);
|
|
35
|
-
const [relationInfo, setRelationInfo] = useState();
|
|
36
|
-
const [resetCounter, setResetCounter] = useState(0);
|
|
37
|
-
const containerRef = useRef(null);
|
|
38
|
-
const btnsWrapperRef = useRef(null);
|
|
39
|
-
const filtersType = type ?? filterTypes.default;
|
|
40
|
-
const config = useMemo(() => props.config, [props.config]);
|
|
41
|
-
const filterActionButtonRef = useRef(null);
|
|
42
|
-
useImperativeHandle(ref, () => ({
|
|
43
|
-
getFilters: () => getFilters(state, filteredPropertyMetas, config),
|
|
44
|
-
}), [config, filteredPropertyMetas, state]);
|
|
45
|
-
const reset = useCallback(() => {
|
|
46
|
-
resetResourceFilterListState(stateKey, setState, setResetCounter, onFilterChange);
|
|
47
|
-
}, [stateKey, setState, onFilterChange]);
|
|
48
|
-
useAsyncEffect(async () => {
|
|
49
|
-
setRelationInfo(await getManyToManyRelatedPropertyMetas(uiResourceMeta, relatedUiResourceMetas));
|
|
50
|
-
}, [uiResourceMeta, relatedUiResourceMetas]);
|
|
51
|
-
useAsyncEffect(async () => {
|
|
52
|
-
await initResourceFilterList(stateKey, setState, setFilteredPropertyMetas, setFilteredAndOtherPropertyMetas, queryODataFilters ?? [], setFilterKeys, state, uiResourceMeta.resourceMeta, relationInfo, onFilterChange);
|
|
53
|
-
}, [stateKey, relationInfo, uiResourceMeta]);
|
|
54
|
-
const onStateChangeCallback = useCallback((item) => {
|
|
55
|
-
return (filter) => {
|
|
56
|
-
onStateChange(item, state, filter, stateKey, setState);
|
|
57
|
-
};
|
|
58
|
-
}, [state, stateKey]);
|
|
59
|
-
const filteredKeys = useMemo(() => getFilteredKeys(filterKeys, uiResourceMeta.properties, filteredAndOtherPropertyMetas, relationInfo), [filterKeys, filteredAndOtherPropertyMetas, uiResourceMeta.properties, relationInfo]);
|
|
60
|
-
useEffect(() => {
|
|
61
|
-
return setObserver(setElementsShown, filteredKeys, setIsFiltersCollapsible, elementsShown, containerRef?.current ?? undefined, btnsWrapperRef?.current ?? undefined, position);
|
|
62
|
-
}, [containerRef, setElementsShown, filteredKeys, setIsFiltersCollapsible, position, elementsShown]);
|
|
63
|
-
useLayoutEffect(() => {
|
|
64
|
-
onResize(setElementsShown, filteredKeys, setIsFiltersCollapsible, elementsShown, containerRef?.current ?? undefined, btnsWrapperRef?.current ?? undefined, position);
|
|
65
|
-
}, [containerRef, filteredKeys, position, elementsShown]);
|
|
66
|
-
return (<div className={cn("w-full pb-4 pr-4 pt-0", position === fdFilterListPositions.left && "md:pl-6 md:pt-0")}>
|
|
67
|
-
<Collapsible.Root ref={containerRef} open={open} onOpenChange={setOpen}>
|
|
68
|
-
<div className="relative flex flex-col items-start gap-2">
|
|
69
|
-
<div id={resourceFilterListId} className={cn(type === filterTypes.input
|
|
70
|
-
? "mt-10 flex w-full grid-cols-[auto_repeat(6,minmax(0,1fr))] flex-col gap-2 md:mt-0 md:grid md:items-center"
|
|
71
|
-
: "mt-10 flex w-fit flex-wrap gap-2 md:mt-0 md:items-center", position === fdFilterListPositions.left &&
|
|
72
|
-
"grid w-full grid-cols-2 md:flex md:w-48 md:flex-col md:pb-2")}>
|
|
73
|
-
<div className="absolute top-0 flex items-center gap-2 md:relative">
|
|
74
|
-
{showBackButton && (<FdBackButton className="size-7 shrink-0" onClick={() => router.back()}/>)}
|
|
75
|
-
{isFiltersCollapsible && (<Collapsible.Trigger asChild>
|
|
76
|
-
<FilterActionButton ref={filterActionButtonRef} iconName={iconNames.filter} variant="ghost" className="size-7 shrink-0" tooltipText="Collapse"/>
|
|
77
|
-
</Collapsible.Trigger>)}
|
|
78
|
-
{(showRefreshButton ?? true) && (<FdTooltipProvider>
|
|
79
|
-
<FdTooltip>
|
|
80
|
-
<FdTooltipTrigger asChild>
|
|
81
|
-
<FilterActionButton ref={filterActionButtonRef} onClick={onRefreshResources} iconName={iconNames.refresh} variant="ghost" className="size-7 shrink-0"/>
|
|
82
|
-
</FdTooltipTrigger>
|
|
83
|
-
<FdTooltipContent className="mb-1">Refresh</FdTooltipContent>
|
|
84
|
-
</FdTooltip>
|
|
85
|
-
</FdTooltipProvider>)}
|
|
86
|
-
{(showResetButton ?? true) && (open || elementsShown > 0) && (<FdTooltipProvider>
|
|
87
|
-
<FdTooltip>
|
|
88
|
-
<FdTooltipTrigger asChild>
|
|
89
|
-
<FilterActionButton ref={filterActionButtonRef} onClick={reset} iconName={iconNames.eraser} variant="ghost" className="size-7 shrink-0"/>
|
|
90
|
-
</FdTooltipTrigger>
|
|
91
|
-
<FdTooltipContent className="mb-1">Reset</FdTooltipContent>
|
|
92
|
-
</FdTooltip>
|
|
93
|
-
</FdTooltipProvider>)}
|
|
94
|
-
{/*{isViewModeChanged && onViewModeChanged && (*/}
|
|
95
|
-
{/* <ResourceListDropdownMenu*/}
|
|
96
|
-
{/* onViewModeChanged={onViewModeChanged}*/}
|
|
97
|
-
{/* viewMode={viewMode}*/}
|
|
98
|
-
{/* />*/}
|
|
99
|
-
{/*)}*/}
|
|
100
|
-
</div>
|
|
101
|
-
{Object.keys(state).length > 0 &&
|
|
102
|
-
filteredKeys.map((item, num) => (<div ref={btnsWrapperRef} className={cn("w-fit", type === filterTypes.input &&
|
|
103
|
-
num >= elementsShown &&
|
|
104
|
-
!open &&
|
|
105
|
-
isFiltersCollapsible &&
|
|
106
|
-
"hidden")} key={item}>
|
|
107
|
-
{filteredAndOtherPropertyMetas[item] && (<FdFilter state={state[item].filter} onStateChange={onStateChangeCallback(item)} propertyMeta={filteredAndOtherPropertyMetas[item]} disabled={state[item].disabled} onChange={onFilterChange} position={position ?? fdFilterListPositions.top} relatedUiResourceMetas={relatedUiResourceMetas} type={filtersType} resetCounter={resetCounter}/>)}
|
|
108
|
-
</div>))}
|
|
109
|
-
</div>
|
|
110
|
-
</div>
|
|
111
|
-
</Collapsible.Root>
|
|
112
|
-
</div>);
|
|
113
|
-
}
|
|
114
|
-
FdResourceFilterList.displayName = "FdResourceFilterList";
|
|
115
|
-
function FilterActionButton({ ref, onClick, iconName, iconSize, variant, className, tooltipText, }) {
|
|
116
|
-
return (<FdButton id={iconName + elementSuffixes.filterActionButton} ref={ref} variant={variant ?? "icon"} size="icon" onClick={onClick} className={className ?? ""} tooltipText={tooltipText} tooltipClassName="mb-1" tooltipSide="top">
|
|
117
|
-
<FdIcon name={iconName} size={iconSize}/>
|
|
118
|
-
</FdButton>);
|
|
119
|
-
}
|
|
120
|
-
FilterActionButton.displayName = "FilterActionButton";
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { FdDropdownMenu, FdDropdownMenuContent, FdDropdownMenuItem, FdDropdownMenuTrigger, } from "@fd-component-toolbox/dropdown-menu/FdDropdownMenu";
|
|
2
|
-
import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
3
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
4
|
-
import { resourceListViewModes } from "@fd-toolbox/enums/enums";
|
|
5
|
-
import { textButton } from "@meta/filtering/resource-filter-list/resource-list-dropdown-menu/ResourceListDropdownMenu.funcs";
|
|
6
|
-
/**
|
|
7
|
-
* A dropdown menu component for switching between different resource list view modes.
|
|
8
|
-
*
|
|
9
|
-
* @param props - {@link ResourceListDropdownMenuProps}
|
|
10
|
-
*/
|
|
11
|
-
export function ResourceListDropdownMenu({ onViewModeChanged, viewMode }) {
|
|
12
|
-
return (<FdDropdownMenu>
|
|
13
|
-
<FdDropdownMenuTrigger asChild>
|
|
14
|
-
<FdButton variant="ghost" size="icon">
|
|
15
|
-
<FdIcon name={iconNames.dotsVerticalIcon}/>
|
|
16
|
-
</FdButton>
|
|
17
|
-
</FdDropdownMenuTrigger>
|
|
18
|
-
<FdDropdownMenuContent className="z-10 min-w-32 rounded-md border bg-background shadow" align="end">
|
|
19
|
-
{viewMode === undefined && (<>
|
|
20
|
-
<FdDropdownMenuItem className="outline-none" asChild>
|
|
21
|
-
<FdButton variant="secondary" className="w-full hover:bg-muted/50" onClick={() => onViewModeChanged(resourceListViewModes.table)}>
|
|
22
|
-
Switch to table view
|
|
23
|
-
</FdButton>
|
|
24
|
-
</FdDropdownMenuItem>
|
|
25
|
-
<FdDropdownMenuItem className="outline-none" asChild>
|
|
26
|
-
<FdButton variant="secondary" className="w-full hover:bg-muted/50" onClick={() => onViewModeChanged(resourceListViewModes.cards)}>
|
|
27
|
-
Switch to card view
|
|
28
|
-
</FdButton>
|
|
29
|
-
</FdDropdownMenuItem>
|
|
30
|
-
</>)}
|
|
31
|
-
|
|
32
|
-
{viewMode !== undefined && (<FdDropdownMenuItem className="outline-none" asChild>
|
|
33
|
-
<FdButton variant="secondary" className="w-full hover:bg-muted/50" onClick={() => onViewModeChanged(viewMode === resourceListViewModes.table
|
|
34
|
-
? resourceListViewModes.cards
|
|
35
|
-
: resourceListViewModes.table)}>
|
|
36
|
-
{viewMode === resourceListViewModes.table
|
|
37
|
-
? textButton.showCard
|
|
38
|
-
: textButton.showTable}
|
|
39
|
-
</FdButton>
|
|
40
|
-
</FdDropdownMenuItem>)}
|
|
41
|
-
</FdDropdownMenuContent>
|
|
42
|
-
</FdDropdownMenu>);
|
|
43
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import React, { createContext, useContext, useMemo, useState } from "react";
|
|
3
|
-
import { createError } from "@fd-toolbox/errors/errors";
|
|
4
|
-
import { metaErrorMessages } from "@meta/constants/meta-error-messages-constants";
|
|
5
|
-
const FdGlobalContext = createContext(undefined);
|
|
6
|
-
export function FdGlobalContextProvider({ config, children, }) {
|
|
7
|
-
const [globalConfig, setGlobalConfig] = useState(config);
|
|
8
|
-
const contextValue = useMemo(() => ({ globalConfig: globalConfig, setGlobalConfig: setGlobalConfig }), [globalConfig, setGlobalConfig]);
|
|
9
|
-
return <FdGlobalContext.Provider value={contextValue}>{children}</FdGlobalContext.Provider>;
|
|
10
|
-
}
|
|
11
|
-
export const useGlobalConfig = () => {
|
|
12
|
-
const context = useContext(FdGlobalContext);
|
|
13
|
-
if (!context) {
|
|
14
|
-
throw createError(metaErrorMessages.globalContextUsedOutside);
|
|
15
|
-
}
|
|
16
|
-
return context;
|
|
17
|
-
};
|