@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,87 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import React, { useCallback, useState } from "react";
|
|
3
|
-
import { useForm } from "react-hook-form";
|
|
4
|
-
import { FdForm, FdFormControl, FdFormField, FdFormItem, FdFormMessage, } from "@fd-component-toolbox/form/FdForm";
|
|
5
|
-
import { FdLabel } from "@fd-component-toolbox/label/FdLabel";
|
|
6
|
-
import { FdInput } from "@fd-component-toolbox/input/FdInput";
|
|
7
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
8
|
-
import { onForgotPassword, forgotPasswordSchema, getForgotPasswordSuccessMessageId, getForgotPasswordEmailInputId, getForgotPasswordSendButtonId, } from "@fd-app-toolbox/forgot-password-form/ForgotPasswordForm.funcs";
|
|
9
|
-
import { routes } from "@fd-toolbox/routing/routes";
|
|
10
|
-
import { zodResolver } from "@hookform/resolvers/zod";
|
|
11
|
-
import { forms } from "@fd-app-toolbox/form-constants/forms";
|
|
12
|
-
import FdLink from "@fd-component-toolbox/link/FdLink";
|
|
13
|
-
import { userRoutes } from "@fd-toolbox/constants/user-routes";
|
|
14
|
-
import { userDisplayProps } from "@fd-app-toolbox/user-dto";
|
|
15
|
-
import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
16
|
-
import { FdSubHeading } from "@fd-component-toolbox/subheading/FdSubHeading";
|
|
17
|
-
import { useSetTitle } from "@meta/page/use-set-title";
|
|
18
|
-
import { forgotPasswordMessages } from "@fd-app-toolbox/forgot-password-form/forgot-password-messages-constants";
|
|
19
|
-
const pageTitle = "Forgot Password";
|
|
20
|
-
/**
|
|
21
|
-
* Forgot password form that sends a reset e-mail on submit.
|
|
22
|
-
*/
|
|
23
|
-
function ForgotPasswordForm() {
|
|
24
|
-
useSetTitle(pageTitle);
|
|
25
|
-
const form = useForm({
|
|
26
|
-
mode: "onChange",
|
|
27
|
-
resolver: zodResolver(forgotPasswordSchema),
|
|
28
|
-
});
|
|
29
|
-
const { handleSubmit, formState: { isValid, errors }, control, watch, } = form;
|
|
30
|
-
const [showSuccessMessage, setShowSuccessMessage] = useState(false);
|
|
31
|
-
const onSubmit = useCallback((data) => onForgotPassword(data, setShowSuccessMessage), []);
|
|
32
|
-
const email = watch(forms.email);
|
|
33
|
-
return (<div className="h-screen w-full lg:grid lg:min-h-[38rem] xl:min-h-11">
|
|
34
|
-
<div className="flex items-center justify-center py-12">
|
|
35
|
-
<div className="mx-auto grid w-80 gap-6">
|
|
36
|
-
{showSuccessMessage ? (<div className="flex flex-col items-center text-center" id={getForgotPasswordSuccessMessageId()}>
|
|
37
|
-
<FdIcon name={iconNames.envelopeClosed} className="size-24"/>
|
|
38
|
-
<FdSubHeading className="mt-3 text-4xl font-bold text-foreground">
|
|
39
|
-
{forgotPasswordMessages.successTitle}
|
|
40
|
-
</FdSubHeading>
|
|
41
|
-
<p className="mt-6">
|
|
42
|
-
{forgotPasswordMessages.successParagraph1.split("{email}")[0]}
|
|
43
|
-
<span className="font-bold">{email}</span>
|
|
44
|
-
{forgotPasswordMessages.successParagraph1.split("{email}")[1]}
|
|
45
|
-
</p>
|
|
46
|
-
<p className="mt-4">{forgotPasswordMessages.successParagraph2}</p>
|
|
47
|
-
<p className="mt-4">
|
|
48
|
-
<FdLink href={routes.login}>
|
|
49
|
-
{forgotPasswordMessages.successLinkTextStart}
|
|
50
|
-
<span className="font-bold underline">
|
|
51
|
-
{forgotPasswordMessages.successLinkTextInner}
|
|
52
|
-
</span>
|
|
53
|
-
</FdLink>
|
|
54
|
-
</p>
|
|
55
|
-
</div>) : (<>
|
|
56
|
-
<div className="grid gap-2 text-center">
|
|
57
|
-
<FdSubHeading className="text-3xl font-bold">Forgot Password</FdSubHeading>
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
<FdForm {...form}>
|
|
61
|
-
<form onSubmit={handleSubmit(onSubmit)}>
|
|
62
|
-
<FdFormField control={control} name={userRoutes.email} render={({ field }) => (<FdFormItem>
|
|
63
|
-
<div className="w-full p-1">
|
|
64
|
-
<FdLabel className={errors.email ? "text-destructive" : ""}>
|
|
65
|
-
{userDisplayProps.email}
|
|
66
|
-
</FdLabel>
|
|
67
|
-
<FdFormControl>
|
|
68
|
-
<FdInput {...field} inputId={getForgotPasswordEmailInputId()} placeholder={userDisplayProps.email} showClearIcon={true} className={errors.email ? "border-red-500" : ""}></FdInput>
|
|
69
|
-
</FdFormControl>
|
|
70
|
-
<FdFormMessage>{errors.email?.message}</FdFormMessage>
|
|
71
|
-
<p className={"mt-1 text-xs"}>
|
|
72
|
-
Enter your e-mail and we will send you reset
|
|
73
|
-
instructions!
|
|
74
|
-
</p>
|
|
75
|
-
</div>
|
|
76
|
-
</FdFormItem>)}/>
|
|
77
|
-
<FdButton className="mr-4 mt-4 block w-full" id={getForgotPasswordSendButtonId()} disabled={!isValid} type="submit">
|
|
78
|
-
Send
|
|
79
|
-
</FdButton>
|
|
80
|
-
</form>
|
|
81
|
-
</FdForm>
|
|
82
|
-
</>)}
|
|
83
|
-
</div>
|
|
84
|
-
</div>
|
|
85
|
-
</div>);
|
|
86
|
-
}
|
|
87
|
-
export default ForgotPasswordForm;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { FdToolbar } from "@fd-app-toolbox/layout/toolbar/FdToolbar";
|
|
3
|
-
import FdSidebar from "@fd-app-toolbox/layout/sidebar/FdSidebar";
|
|
4
|
-
import { Suspense } from "react";
|
|
5
|
-
import { FdNarrowNavbar } from "@fd-app-toolbox/layout/navbar/FdNarrowNavbar";
|
|
6
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
7
|
-
import { toolbarConfig, toolbarLayoutTypes } from "@fd-app-toolbox/layout/client-layout/client-layout-config";
|
|
8
|
-
export function ClientLayout({ children, userSettingsPromise, visibleWorkspacesPromise, notificationsPromise, userWorkspacesPromise, }) {
|
|
9
|
-
return (<Suspense>
|
|
10
|
-
<FdToolbar className="flex-none" layoutConfig={toolbarConfig} userSettingsPromise={userSettingsPromise} visibleWorkspacesPromise={visibleWorkspacesPromise} notificationsPromise={notificationsPromise} userWorkspacesPromise={userWorkspacesPromise}/>
|
|
11
|
-
<div className="relative flex grow-0 basis-full overflow-hidden">
|
|
12
|
-
<FdSidebar toolbarLayoutType={toolbarConfig.toolbarLayout}/>
|
|
13
|
-
<div className={cn("mb-14 grow overflow-y-auto overflow-x-hidden sm:mb-0", toolbarConfig.toolbarLayout === toolbarLayoutTypes.default && "md:ml-14")}>
|
|
14
|
-
{children}
|
|
15
|
-
</div>
|
|
16
|
-
</div>
|
|
17
|
-
<FdNarrowNavbar className="flex-none"/>
|
|
18
|
-
</Suspense>);
|
|
19
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import React, { useState, useEffect, use } from "react";
|
|
3
|
-
import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
|
|
4
|
-
import { initialize, onError } from "@fd-app-toolbox/layout/client-root/ClientRoot.funcs";
|
|
5
|
-
import { ClientLayout } from "@fd-app-toolbox/layout/client-layout/ClientLayout";
|
|
6
|
-
import { useSidebarResources, } from "@fd-app-toolbox/layout/sidebar/sidebar-resources-provider";
|
|
7
|
-
import { useGlobalConfig } from "@meta/providers/global-provider/FdGlobalContext";
|
|
8
|
-
export function ClientRoot({ children, preloadDataPromise, sidebarResourcesPromise, userSettingsPromise, visibleWorkspacesPromise, notificationsPromise, userWorkspacesPromise, }) {
|
|
9
|
-
const preloadData = use(preloadDataPromise);
|
|
10
|
-
const sidebarResources = use(sidebarResourcesPromise);
|
|
11
|
-
const [isLoading, setIsLoading] = useState(true);
|
|
12
|
-
const { globalConfig, setGlobalConfig } = useGlobalConfig();
|
|
13
|
-
const { initSideBarResources } = useSidebarResources();
|
|
14
|
-
useEffect(() => {
|
|
15
|
-
setGlobalConfig((prev) => ({
|
|
16
|
-
...prev,
|
|
17
|
-
preloadData: preloadData,
|
|
18
|
-
}));
|
|
19
|
-
}, [preloadData, setGlobalConfig]);
|
|
20
|
-
useEffect(() => {
|
|
21
|
-
initSideBarResources(sidebarResources);
|
|
22
|
-
}, [sidebarResources, initSideBarResources]);
|
|
23
|
-
useAsyncEffect(async () => {
|
|
24
|
-
await initialize(globalConfig.resourceListConfigs, setIsLoading, preloadData);
|
|
25
|
-
}, []);
|
|
26
|
-
useEffect(() => {
|
|
27
|
-
onError();
|
|
28
|
-
});
|
|
29
|
-
return (!isLoading && (<ClientLayout userSettingsPromise={userSettingsPromise} visibleWorkspacesPromise={visibleWorkspacesPromise} notificationsPromise={notificationsPromise} userWorkspacesPromise={userWorkspacesPromise}>
|
|
30
|
-
{children}
|
|
31
|
-
</ClientLayout>));
|
|
32
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { defaultSidebarIconName, FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
|
|
2
|
-
import React, { useEffect, useState } from "react";
|
|
3
|
-
import { FdSheet, FdSheetContent, FdSheetHeader, FdSheetTrigger } from "@fd-component-toolbox/sheet/FdSheet";
|
|
4
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
5
|
-
import FdLink from "@fd-component-toolbox/link/FdLink";
|
|
6
|
-
import { FdUserDropdownMenu } from "@fd-app-toolbox/menu/user-dropdown-menu/FdUserDropdownMenu";
|
|
7
|
-
import { createToolbarMenuSubgroups } from "@fd-app-toolbox/layout/toolbar/FdToolbar.funcs";
|
|
8
|
-
import { elements } from "@fd-toolbox/constants/elements";
|
|
9
|
-
import { useSidebarResources } from "@fd-app-toolbox/layout/sidebar/sidebar-resources-provider";
|
|
10
|
-
import { useAuth } from "@fd-app-toolbox/providers/auth-provider/AuthProvider";
|
|
11
|
-
export function FdHamburgerMenu({ className, userWorkspacesPromise, visibleWorkspacesPromise, }) {
|
|
12
|
-
const [isMenuOpen, setIsMenuOpen] = useState(false);
|
|
13
|
-
const [menuSubgroups, setMenuSubgroups] = useState([]);
|
|
14
|
-
const { sidebarResources } = useSidebarResources();
|
|
15
|
-
const authContext = useAuth();
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
setMenuSubgroups(createToolbarMenuSubgroups());
|
|
18
|
-
}, [authContext.loginState]);
|
|
19
|
-
return (<FdSheet open={isMenuOpen} onOpenChange={setIsMenuOpen}>
|
|
20
|
-
<FdSheetTrigger asChild>
|
|
21
|
-
<div className={cn("m-1 mr-3 flex size-8 cursor-pointer items-center justify-center rounded-md hover:bg-fd-tertiary-700", className)} onClick={() => setIsMenuOpen((prev) => !prev)}>
|
|
22
|
-
<FdIcon name={iconNames.hamburgerMenu} size={iconSizes.small} color="text-white"/>
|
|
23
|
-
</div>
|
|
24
|
-
</FdSheetTrigger>
|
|
25
|
-
<FdSheetContent className={cn("flex h-full w-fit flex-col border-none bg-fd-tertiary-900 p-0 pb-4", !isMenuOpen && "hidden")} side="left">
|
|
26
|
-
<FdSheetHeader className="min-h-12 flex-row items-center space-y-0 bg-fd-tertiary-900 px-7">
|
|
27
|
-
<div className="m-0 flex items-start justify-start p-0">
|
|
28
|
-
<FdUserDropdownMenu id={elements.userDropdownMenu.userDropdownMenuId} items={menuSubgroups} userWorkspacesPromise={userWorkspacesPromise} visibleWorkspacesPromise={visibleWorkspacesPromise} parentContextName={elements.hamburgerMenu}/>
|
|
29
|
-
</div>
|
|
30
|
-
</FdSheetHeader>
|
|
31
|
-
<div className="flex h-[93%] w-full flex-col text-fd-tertiary-50">
|
|
32
|
-
{sidebarResources.map((resource) => (<FdLink onClick={() => {
|
|
33
|
-
setIsMenuOpen(false);
|
|
34
|
-
}} key={resource.name} href={resource?.link ?? " #"} className={"flex w-auto shrink-0 cursor-pointer flex-row items-center justify-start px-7 py-3 text-base text-fd-tertiary-50 hover:bg-fd-tertiary-700"}>
|
|
35
|
-
<div className="relative flex flex-row items-center gap-3">
|
|
36
|
-
<label className="hover:cursor-pointer [&>svg]:size-5">
|
|
37
|
-
<FdIcon name={resource?.icon ?? defaultSidebarIconName} color="text-fd-tertiary-50"/>
|
|
38
|
-
</label>
|
|
39
|
-
<p className="left-full block text-nowrap font-medium">
|
|
40
|
-
{resource.displayName}
|
|
41
|
-
</p>
|
|
42
|
-
</div>
|
|
43
|
-
</FdLink>))}
|
|
44
|
-
</div>
|
|
45
|
-
</FdSheetContent>
|
|
46
|
-
</FdSheet>);
|
|
47
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
2
|
-
import { FdIcon, defaultSidebarIconName, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
|
|
3
|
-
import { MagnifyingGlassIcon } from "@radix-ui/react-icons";
|
|
4
|
-
import FdLink from "@fd-component-toolbox/link/FdLink";
|
|
5
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
6
|
-
import { useSidebarResources } from "@fd-app-toolbox/layout/sidebar/sidebar-resources-provider";
|
|
7
|
-
import { useSearchDialog } from "@fd-app-toolbox/search/search-dialog-provider";
|
|
8
|
-
/**
|
|
9
|
-
* Mobile-friendly narrow navigation bar component.
|
|
10
|
-
* Displays a bottom-fixed horizontal menu with navigation items and a search button.
|
|
11
|
-
*
|
|
12
|
-
* @param props - {@link FdNarrowNavbarProps}
|
|
13
|
-
*/
|
|
14
|
-
export function FdNarrowNavbar({ className }) {
|
|
15
|
-
const { openDialog } = useSearchDialog();
|
|
16
|
-
const { sidebarResources } = useSidebarResources();
|
|
17
|
-
return (<section className="z-50 block sm:hidden">
|
|
18
|
-
<div className={cn("fixed bottom-0 h-14 w-full bg-fd-tertiary-900 transition-[width] duration-75 ease-in hover:shadow-toolbar", className)}>
|
|
19
|
-
<div className="flex size-full flex-row justify-between">
|
|
20
|
-
<nav className="flex grow flex-row justify-between gap-x-2 whitespace-nowrap p-2">
|
|
21
|
-
{sidebarResources.map((resource) => (<FdLink key={resource.name} href={resource.link}>
|
|
22
|
-
<FdButton variant="icon" className="relative flex size-full min-w-14 shrink-0 flex-col items-center justify-center gap-1 rounded-md p-0 px-1 text-xs hover:bg-fd-tertiary-700">
|
|
23
|
-
<FdIcon size={iconSizes.medium} name={resource?.icon ?? defaultSidebarIconName} color="text-fd-tertiary-50"/>
|
|
24
|
-
<p className="left-full block text-nowrap text-fd-tertiary-50">
|
|
25
|
-
{resource.displayName}
|
|
26
|
-
</p>
|
|
27
|
-
</FdButton>
|
|
28
|
-
</FdLink>))}
|
|
29
|
-
<FdLink href="#" className={"group flex min-w-14 shrink-0 cursor-pointer items-center justify-center gap-3 rounded-md p-1 text-xs text-fd-tertiary-50 hover:bg-fd-tertiary-700"} onClick={openDialog}>
|
|
30
|
-
<div className="relative flex flex-col items-center gap-1">
|
|
31
|
-
<label className="hover:cursor-pointer [&>svg]:size-5">
|
|
32
|
-
<MagnifyingGlassIcon />
|
|
33
|
-
</label>
|
|
34
|
-
</div>
|
|
35
|
-
</FdLink>
|
|
36
|
-
</nav>
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
39
|
-
</section>);
|
|
40
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import React, { useCallback, useMemo, useRef } from "react";
|
|
3
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
4
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
5
|
-
import { sidebarStatuses } from "@fd-app-toolbox/layout/sidebar/FdSidebar.funcs";
|
|
6
|
-
import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
7
|
-
import { FdSidebarDropdownMenu } from "@fd-app-toolbox/layout/sidebar/sidebar-dropdown-menu/FdSidebarDropdownMenu";
|
|
8
|
-
import { toolbarLayoutTypes, } from "@fd-app-toolbox/layout/client-layout/client-layout-config";
|
|
9
|
-
import { useSidebarResources } from "@fd-app-toolbox/layout/sidebar/sidebar-resources-provider";
|
|
10
|
-
import { useAuth } from "@fd-app-toolbox/providers/auth-provider/AuthProvider";
|
|
11
|
-
import { useSidebarContext } from "@fd-app-toolbox/providers/sidebar-provider/FdSidebarContext";
|
|
12
|
-
import { elements } from "@fd-toolbox/constants/elements";
|
|
13
|
-
function FdSidebar({ className, toolbarLayoutType }) {
|
|
14
|
-
const { sidebarResources } = useSidebarResources();
|
|
15
|
-
const sidebarRef = useRef(null);
|
|
16
|
-
const authContext = useAuth();
|
|
17
|
-
const sidebarContext = useSidebarContext();
|
|
18
|
-
const sidebarState = sidebarContext?.sidebarState ?? sidebarStatuses.minified;
|
|
19
|
-
const setSidebarState = useCallback((state) => {
|
|
20
|
-
if (sidebarContext?.setSidebarState) {
|
|
21
|
-
sidebarContext.setSidebarState(state);
|
|
22
|
-
}
|
|
23
|
-
}, [sidebarContext]);
|
|
24
|
-
const handleFixedState = useCallback(() => {
|
|
25
|
-
setSidebarState(sidebarState === sidebarStatuses.fixedOpen ? sidebarStatuses.minified : sidebarStatuses.fixedOpen);
|
|
26
|
-
}, [sidebarState, setSidebarState]);
|
|
27
|
-
const isOpenSidebar = useMemo(() => sidebarState === sidebarStatuses.fixedOpen, [sidebarState]);
|
|
28
|
-
if (toolbarLayoutType === toolbarLayoutTypes.topBarOnly) {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
return (<section id={elements.sidebar} className="hidden md:block">
|
|
32
|
-
{authContext.loginState.loggedIn && (<div ref={sidebarRef} className={cn("group absolute inset-0 z-20 h-full bg-fd-tertiary-900 transition-[width] duration-75 ease-in after:pointer-events-none after:absolute after:-right-5 after:top-0 after:block after:h-2 after:w-5 after:rounded-tl-lg after:shadow-toolbar-rounded after:content-[\"\"]", className, sidebarState === sidebarStatuses.fixedOpen && "relative -mr-16 w-60", sidebarState === sidebarStatuses.minified && "w-14")}>
|
|
33
|
-
<div className="flex size-full min-w-14 flex-col items-start justify-between p-3 pb-0">
|
|
34
|
-
<nav className="flex w-full flex-col gap-y-1 overflow-x-visible scroll-smooth whitespace-nowrap">
|
|
35
|
-
{sidebarResources.map((sidebarItem) => (<FdSidebarDropdownMenu key={sidebarItem.name} name={sidebarItem.name} displayName={sidebarItem.displayName} icon={sidebarItem.icon} url={sidebarItem.link} isOpenSidebar={isOpenSidebar} isSubmenu={false}/>))}
|
|
36
|
-
</nav>
|
|
37
|
-
<div className={cn("flex w-full flex-row-reverse justify-center pb-3", isOpenSidebar && "justify-normal")}>
|
|
38
|
-
<FdButton id={elements.sidebarToggleButton} onClick={handleFixedState} className={cn("flex items-center justify-center rounded-md bg-transparent shadow-none duration-75 ease-in hover:bg-fd-tertiary-700", isOpenSidebar && "w-fit justify-end")}>
|
|
39
|
-
<div className={cn("size-4 shrink-0 grow-0 basis-4 border border-fd-tertiary-50 text-fd-tertiary-50", isOpenSidebar && "flex items-center")}>
|
|
40
|
-
{isOpenSidebar ? (<FdIcon name={iconNames.caretLeftIcon} color="fd-tertiary-50"/>) : (<div className="h-3.5 w-1.5 bg-fd-tertiary-50"/>)}
|
|
41
|
-
</div>
|
|
42
|
-
</FdButton>
|
|
43
|
-
</div>
|
|
44
|
-
</div>
|
|
45
|
-
</div>)}
|
|
46
|
-
</section>);
|
|
47
|
-
}
|
|
48
|
-
export default FdSidebar;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import FdLink from "@fd-component-toolbox/link/FdLink";
|
|
2
|
-
function FdDropdownMenuItemTitle({ label, url, onDropdownCloseChange }) {
|
|
3
|
-
if (url) {
|
|
4
|
-
return (<div className="flex min-w-52 cursor-pointer items-center rounded-sm border-none bg-fd-tertiary-700 px-4 py-2 text-sm text-fd-tertiary-50" onClick={onDropdownCloseChange}>
|
|
5
|
-
<FdLink href={url} className="font-bold">
|
|
6
|
-
{label}
|
|
7
|
-
</FdLink>
|
|
8
|
-
</div>);
|
|
9
|
-
}
|
|
10
|
-
return null;
|
|
11
|
-
}
|
|
12
|
-
export default FdDropdownMenuItemTitle;
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { useCallback, useEffect, useState } from "react";
|
|
2
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
3
|
-
import { FdDropdownMenu, FdDropdownMenuContent, FdDropdownMenuTrigger, } from "@fd-component-toolbox/dropdown-menu/FdDropdownMenu";
|
|
4
|
-
import { defaultSidebarIconName, FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
5
|
-
import { useFdPathname, useFdSearchParams } from "@meta/client/framework/hooks";
|
|
6
|
-
import { updateActiveLink } from "@fd-app-toolbox/layout/sidebar/sidebar-dropdown-menu/FdSidebarDropdownMenu.funcs";
|
|
7
|
-
import FdDropdownMenuItemTitle from "@fd-app-toolbox/layout/sidebar/sidebar-dropdown-menu/FdDropdownMenuItemTitle";
|
|
8
|
-
import FdLink from "@fd-component-toolbox/link/FdLink";
|
|
9
|
-
import { tooltipContentSides, tooltipContentSidesStrings } from "@fd-component-toolbox/tooltip/FdTooltip";
|
|
10
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
11
|
-
export function FdSidebarDropdownMenu({ name, displayName, icon, url, isOpenSidebar, isSubmenu, }) {
|
|
12
|
-
let result;
|
|
13
|
-
const pathname = useFdPathname();
|
|
14
|
-
const searchParams = useFdSearchParams();
|
|
15
|
-
const [isActiveLink, setIsActiveLink] = useState(false);
|
|
16
|
-
const [activeDropdown, setActiveDropdown] = useState(null);
|
|
17
|
-
useEffect(() => {
|
|
18
|
-
if (url)
|
|
19
|
-
updateActiveLink(setIsActiveLink, pathname, url, searchParams.toString());
|
|
20
|
-
}, [url, pathname, searchParams]);
|
|
21
|
-
const onDropdownOpenChange = useCallback((activeNameDropdown) => {
|
|
22
|
-
setActiveDropdown(activeNameDropdown);
|
|
23
|
-
}, []);
|
|
24
|
-
const onDropdownCloseChange = useCallback(() => {
|
|
25
|
-
setActiveDropdown(null);
|
|
26
|
-
}, []);
|
|
27
|
-
if (!url)
|
|
28
|
-
return result;
|
|
29
|
-
if (!isOpenSidebar) {
|
|
30
|
-
return (<FdLink href={url} className="relative">
|
|
31
|
-
{isSubmenu ? (<>
|
|
32
|
-
<div className={cn("flex h-9 w-full shrink-0 cursor-pointer items-center justify-start gap-3 rounded-md p-2 text-sm text-fd-tertiary-50 hover:bg-fd-tertiary-700", isActiveLink && "bg-fd-tertiary-700")} onMouseEnter={() => onDropdownOpenChange(name)} onMouseLeave={onDropdownCloseChange}>
|
|
33
|
-
<FdButton variant="icon" className="p-0">
|
|
34
|
-
<FdIcon name={icon ?? defaultSidebarIconName} color="text-fd-tertiary-50"/>
|
|
35
|
-
</FdButton>
|
|
36
|
-
</div>
|
|
37
|
-
{activeDropdown === name && (<div className="absolute left-full top-[20%] h-4 w-10 items-center" onMouseEnter={() => onDropdownOpenChange(name)}/>)}
|
|
38
|
-
|
|
39
|
-
<div className={cn("cursor-pointer", activeDropdown === name ? "absolute left-12 top-0" : "hidden")} onMouseLeave={onDropdownCloseChange}>
|
|
40
|
-
<FdDropdownMenuItemTitle label={displayName} url={url} onDropdownCloseChange={onDropdownCloseChange}/>
|
|
41
|
-
</div>
|
|
42
|
-
</>) : (<div onMouseEnter={() => onDropdownOpenChange(name)} onMouseLeave={onDropdownCloseChange}>
|
|
43
|
-
<FdButton variant="icon" className={cn("flex h-9 w-full shrink-0 cursor-pointer items-center justify-start gap-3 rounded-md p-2 text-sm text-fd-tertiary-50 hover:bg-fd-tertiary-700", isActiveLink && "bg-fd-tertiary-700")} tooltipSide={tooltipContentSidesStrings[tooltipContentSides.right]} tooltipText={displayName} tooltipClassName="ml-3">
|
|
44
|
-
<FdIcon name={icon ?? defaultSidebarIconName} color="text-fd-tertiary-50"/>
|
|
45
|
-
</FdButton>
|
|
46
|
-
</div>)}
|
|
47
|
-
</FdLink>);
|
|
48
|
-
}
|
|
49
|
-
return (<div>
|
|
50
|
-
{isSubmenu ? (<FdDropdownMenu open={activeDropdown === name} onOpenChange={(open) => (open ? onDropdownOpenChange(name) : onDropdownCloseChange())}>
|
|
51
|
-
<div className="relative">
|
|
52
|
-
<FdDropdownMenuTrigger asChild>
|
|
53
|
-
<div className={cn("flex h-9 w-full shrink-0 cursor-pointer items-center justify-start gap-3 rounded-md p-2 text-sm text-fd-tertiary-50 hover:bg-fd-tertiary-700", isActiveLink && "bg-fd-tertiary-700")}>
|
|
54
|
-
<div className="flex w-full items-center justify-between gap-3">
|
|
55
|
-
<div className="flex items-center gap-3">
|
|
56
|
-
<label className="hover:cursor-pointer [&>svg]:size-4">
|
|
57
|
-
<FdIcon name={icon ?? defaultSidebarIconName} color="text-fd-tertiary-50"/>
|
|
58
|
-
</label>
|
|
59
|
-
<p className="text-nowrap">{displayName}</p>
|
|
60
|
-
</div>
|
|
61
|
-
<FdIcon name={iconNames.chevronRight} color="text-fd-tertiary-50" className="text-nowrap"/>
|
|
62
|
-
</div>
|
|
63
|
-
</div>
|
|
64
|
-
</FdDropdownMenuTrigger>
|
|
65
|
-
</div>
|
|
66
|
-
|
|
67
|
-
<FdDropdownMenuContent align="start" side="right" sideOffset={17} className="rounded-sm border-none bg-fd-tertiary-700 p-0 text-fd-tertiary-50" onMouseLeave={onDropdownCloseChange}>
|
|
68
|
-
<FdDropdownMenuItemTitle label={displayName} url={url} onDropdownCloseChange={onDropdownCloseChange}/>
|
|
69
|
-
</FdDropdownMenuContent>
|
|
70
|
-
</FdDropdownMenu>) : (<FdLink href={url} className={cn("flex h-9 w-full shrink-0 cursor-pointer items-center justify-start gap-3 rounded-md p-2 text-sm text-fd-tertiary-50 hover:bg-fd-tertiary-700", isActiveLink && "bg-fd-tertiary-700")}>
|
|
71
|
-
<div className="flex w-full items-center justify-between gap-3">
|
|
72
|
-
<div className="flex items-center gap-3">
|
|
73
|
-
<label className="hover:cursor-pointer [&>svg]:size-4">
|
|
74
|
-
<FdIcon name={icon ?? defaultSidebarIconName} color="text-fd-tertiary-50"/>
|
|
75
|
-
</label>
|
|
76
|
-
<p className="text-nowrap">{displayName}</p>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
</FdLink>)}
|
|
80
|
-
</div>);
|
|
81
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import React, { createContext, useContext, useState, useMemo, useCallback } from "react";
|
|
2
|
-
import { createError } from "@fd-toolbox/errors/errors";
|
|
3
|
-
import { metaErrorMessages } from "@meta/constants/meta-error-messages-constants";
|
|
4
|
-
const SidebarResourcesContext = createContext(undefined);
|
|
5
|
-
export function SidebarResourceProvider({ children, initialSidebarResources, }) {
|
|
6
|
-
const [sidebarResources, setSidebarResources] = useState(initialSidebarResources ?? []);
|
|
7
|
-
//Approved temp
|
|
8
|
-
// eslint-disable-next-line react-compiler/react-compiler
|
|
9
|
-
const initSideBarResources = useCallback(setSidebarResources, [setSidebarResources]);
|
|
10
|
-
const addSidebarResource = useCallback((resource) => {
|
|
11
|
-
setSidebarResources((prev) => prev.concat(resource));
|
|
12
|
-
}, [setSidebarResources]);
|
|
13
|
-
const removeSidebarResource = useCallback((resourceName) => {
|
|
14
|
-
setSidebarResources((prev) => prev.filter((resource) => resource.name !== resourceName));
|
|
15
|
-
}, [setSidebarResources]);
|
|
16
|
-
const contextValue = useMemo(() => ({
|
|
17
|
-
sidebarResources,
|
|
18
|
-
addSidebarResource,
|
|
19
|
-
removeSidebarResource,
|
|
20
|
-
initSideBarResources,
|
|
21
|
-
}), [sidebarResources, addSidebarResource, removeSidebarResource, initSideBarResources]);
|
|
22
|
-
return (<SidebarResourcesContext.Provider value={contextValue}>{children}</SidebarResourcesContext.Provider>);
|
|
23
|
-
}
|
|
24
|
-
export function useSidebarResources() {
|
|
25
|
-
const context = useContext(SidebarResourcesContext);
|
|
26
|
-
if (!context) {
|
|
27
|
-
throw createError(metaErrorMessages.sidebarResourceNamesUsedOutside);
|
|
28
|
-
}
|
|
29
|
-
return context;
|
|
30
|
-
}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import React, { useState, useCallback, useLayoutEffect, use, Suspense } from "react";
|
|
3
|
-
import { FdUserDropdownMenu } from "@fd-app-toolbox/menu/user-dropdown-menu/FdUserDropdownMenu";
|
|
4
|
-
import { FdSeparator } from "@fd-component-toolbox/separator/FdSeparator";
|
|
5
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
6
|
-
import { setToolbarSubgroups } from "@fd-app-toolbox/layout/toolbar/FdToolbar.funcs";
|
|
7
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
8
|
-
import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
|
|
9
|
-
import { FdNotificationMenu } from "@fd-app-toolbox/menu/notifications-menu/FdNotificationMenu";
|
|
10
|
-
import { FdHamburgerMenu } from "@fd-app-toolbox/layout/hamburger-menu/FdHamburgerMenu";
|
|
11
|
-
import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
12
|
-
import { FdSearch } from "@fd-app-toolbox/search/FdSearch";
|
|
13
|
-
import { useTitle } from "@meta/page/use-title";
|
|
14
|
-
import { FdImage } from "@fd-component-toolbox/image/FdImage";
|
|
15
|
-
import FdLink from "@fd-component-toolbox/link/FdLink";
|
|
16
|
-
import FdTopNav from "@fd-app-toolbox/layout/toolbar/FdTopNav";
|
|
17
|
-
import { toolbarLayoutTypes } from "@fd-app-toolbox/layout/client-layout/client-layout-config";
|
|
18
|
-
import { elements } from "@fd-toolbox/constants/elements";
|
|
19
|
-
import { useAuth } from "@fd-app-toolbox/providers/auth-provider/AuthProvider";
|
|
20
|
-
import { logout } from "@meta/auth/logins";
|
|
21
|
-
import { getUserDropDownMenuTriggerId } from "@fd-app-toolbox/menu/user-dropdown-menu/user-dropdown-menu-item/FdUserDropdownMenu.funcs";
|
|
22
|
-
import { useFdRouter } from "@meta/client/framework/hooks";
|
|
23
|
-
import { routes } from "@fd-toolbox/routing/routes";
|
|
24
|
-
/**
|
|
25
|
-
* Top navigation bar used in the application layout.
|
|
26
|
-
*
|
|
27
|
-
* @param props - {@link FdToolbarProps}
|
|
28
|
-
*/
|
|
29
|
-
export function FdToolbar({ className, layoutConfig, userSettingsPromise, visibleWorkspacesPromise, userWorkspacesPromise, notificationsPromise, }) {
|
|
30
|
-
const userSettings = use(userSettingsPromise)?.[0];
|
|
31
|
-
const [menuSubgroups, setMenuSubgroups] = useState([]);
|
|
32
|
-
const { title } = useTitle();
|
|
33
|
-
const authContext = useAuth();
|
|
34
|
-
const [contextTitle, setContextTitle] = useState();
|
|
35
|
-
const router = useFdRouter();
|
|
36
|
-
useLayoutEffect(() => {
|
|
37
|
-
setContextTitle(title);
|
|
38
|
-
}, [title]);
|
|
39
|
-
const handleLogout = useCallback(async () => {
|
|
40
|
-
await logout();
|
|
41
|
-
router.push(routes.login);
|
|
42
|
-
}, [router]);
|
|
43
|
-
useAsyncEffect(async () => {
|
|
44
|
-
setToolbarSubgroups(setMenuSubgroups, userSettings, handleLogout);
|
|
45
|
-
}, [authContext.loginState, handleLogout]);
|
|
46
|
-
const isCompactMode = layoutConfig.toolbarLayout === toolbarLayoutTypes.topBarOnly;
|
|
47
|
-
return (<header id={elements.toolbar}>
|
|
48
|
-
{authContext.loginState.loggedIn && (<div className={cn("flex h-11 items-center justify-between bg-fd-tertiary-900 pr-3", className)}>
|
|
49
|
-
<div className="flex grow items-center">
|
|
50
|
-
<div className="flex items-center md:hidden">
|
|
51
|
-
<FdHamburgerMenu userWorkspacesPromise={userWorkspacesPromise} visibleWorkspacesPromise={visibleWorkspacesPromise}/>
|
|
52
|
-
<FdSeparator orientation="vertical" className="mx-4 hidden h-6 bg-fd-tertiary-600 md:block"/>
|
|
53
|
-
</div>
|
|
54
|
-
<div className="mx-2 my-1 mt-2.5 hidden min-w-10 rounded-md p-0.5 hover:bg-fd-tertiary-700 md:flex md:items-center md:justify-center">
|
|
55
|
-
<FdImage priority src="/logo.svg" alt="logo" width={26} height={26}/>
|
|
56
|
-
</div>
|
|
57
|
-
<div className={cn("relative w-fit", isCompactMode ? "max-w-60" : "max-w-sm md:w-full")}>
|
|
58
|
-
<form onSubmit={(event) => event.preventDefault()} className="flex w-full items-center">
|
|
59
|
-
<FdSearch parentContextName={elements.toolbar} isCompactMode={isCompactMode}/>
|
|
60
|
-
</form>
|
|
61
|
-
</div>
|
|
62
|
-
{contextTitle && (<div className="mx-4 flex grow flex-row items-center justify-center md:flex-none md:justify-start">
|
|
63
|
-
<div className="text-sm text-fd-tertiary-50">{contextTitle}</div>
|
|
64
|
-
</div>)}
|
|
65
|
-
<div className={cn("flex-row items-center", isCompactMode ? "hidden lg:flex" : "hidden")}>
|
|
66
|
-
<FdSeparator orientation="vertical" className="mx-4 h-6 bg-fd-tertiary-600"/>
|
|
67
|
-
<FdTopNav />
|
|
68
|
-
</div>
|
|
69
|
-
</div>
|
|
70
|
-
<div className="flex flex-row items-center">
|
|
71
|
-
<FdSeparator orientation="vertical" className="mx-4 hidden h-6 bg-fd-tertiary-600 md:block"/>
|
|
72
|
-
<div className="flex flex-row space-x-2">
|
|
73
|
-
<FdLink href="https://share.hsforms.com/1Lo6k-t0WSZuOKxA2SqVVjgd42d4" className="flex size-8 items-center">
|
|
74
|
-
<FdButton variant="icon" className="flex size-full items-center justify-center rounded-md p-2 hover:bg-fd-tertiary-700" tooltipText="Create ticket" tooltipClassName="mt-2">
|
|
75
|
-
<FdIcon color="color-white" name={iconNames.questionMarkCircledIcon} className="size-4 text-fd-tertiary-50"/>
|
|
76
|
-
</FdButton>
|
|
77
|
-
</FdLink>
|
|
78
|
-
<Suspense>
|
|
79
|
-
<FdNotificationMenu parentContextName={elements.toolbar} notificationsPromise={notificationsPromise}/>
|
|
80
|
-
</Suspense>
|
|
81
|
-
</div>
|
|
82
|
-
<div className="hidden flex-row items-center md:flex">
|
|
83
|
-
<FdSeparator orientation="vertical" className="mx-4 h-6 bg-fd-tertiary-600"/>
|
|
84
|
-
<FdUserDropdownMenu id={getUserDropDownMenuTriggerId(elements.toolbar)} items={menuSubgroups} userWorkspacesPromise={userWorkspacesPromise} visibleWorkspacesPromise={visibleWorkspacesPromise} parentContextName={elements.toolbar}/>
|
|
85
|
-
</div>
|
|
86
|
-
</div>
|
|
87
|
-
</div>)}
|
|
88
|
-
</header>);
|
|
89
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import React, { useState } from "react";
|
|
3
|
-
import { FdIcon, defaultSidebarIconName } from "@fd-component-toolbox/icon/FdIcon";
|
|
4
|
-
import FdLink from "@fd-component-toolbox/link/FdLink";
|
|
5
|
-
import { useSidebarResources } from "@fd-app-toolbox/layout/sidebar/sidebar-resources-provider";
|
|
6
|
-
/**
|
|
7
|
-
* Top navigation bar displaying sidebar resource icons with tappable submenu controls,
|
|
8
|
-
* optimized for mobile and touch devices.
|
|
9
|
-
* Submenu is controlled by tapping the icon, allowing users to open or close the menu manually.
|
|
10
|
-
*/
|
|
11
|
-
function FdTopNav() {
|
|
12
|
-
const { sidebarResources } = useSidebarResources();
|
|
13
|
-
const [hoveredItem, setHoveredItem] = useState(null);
|
|
14
|
-
return (<nav className="flex items-center gap-1 bg-fd-tertiary-900 p-2">
|
|
15
|
-
{sidebarResources.map((sidebarItem) => (<div key={sidebarItem.name} className="relative" onMouseEnter={() => setHoveredItem(sidebarItem.name)} onMouseLeave={() => setHoveredItem(null)}>
|
|
16
|
-
<FdLink href={sidebarItem?.link ?? "#"} className="flex w-auto shrink-0 cursor-pointer items-center justify-center rounded-md p-2 text-sm text-fd-tertiary-50 hover:bg-fd-tertiary-700">
|
|
17
|
-
<FdIcon name={sidebarItem?.icon ?? defaultSidebarIconName} color="text-fd-tertiary-50" className="size-4"/>
|
|
18
|
-
</FdLink>
|
|
19
|
-
|
|
20
|
-
{hoveredItem === sidebarItem.name && (<>
|
|
21
|
-
<div className="absolute left-1/2 top-full z-50 w-full -translate-x-1/2 pt-2"/>
|
|
22
|
-
<div className="absolute left-1/2 top-full z-50 mt-1 -translate-x-1/2 pt-2">
|
|
23
|
-
<div className="min-w-48 rounded-md bg-fd-tertiary-700 p-2 shadow-lg">
|
|
24
|
-
<FdLink href={sidebarItem?.link ?? "#"} className="block rounded-md px-3 py-2 text-sm font-semibold text-fd-tertiary-50 hover:bg-fd-tertiary-600">
|
|
25
|
-
{sidebarItem?.displayName ?? sidebarItem.name}
|
|
26
|
-
</FdLink>
|
|
27
|
-
|
|
28
|
-
{sidebarItem.submenuItems && sidebarItem.submenuItems.length > 0 && (<div className="my-2 border-t border-fd-tertiary-600"></div>)}
|
|
29
|
-
|
|
30
|
-
{sidebarItem.submenuItems && (<div className="flex flex-col gap-1">
|
|
31
|
-
{sidebarItem.submenuItems.map((submenuItem) => (<FdLink key={submenuItem.name} href={submenuItem.link} className="flex items-center gap-2 rounded-md px-3 py-2 text-sm text-fd-tertiary-50 hover:bg-fd-tertiary-600">
|
|
32
|
-
{submenuItem.icon && (<FdIcon name={submenuItem.icon} className="size-4 text-fd-tertiary-50"/>)}
|
|
33
|
-
{submenuItem.name}
|
|
34
|
-
</FdLink>))}
|
|
35
|
-
</div>)}
|
|
36
|
-
</div>
|
|
37
|
-
</div>
|
|
38
|
-
</>)}
|
|
39
|
-
</div>))}
|
|
40
|
-
</nav>);
|
|
41
|
-
}
|
|
42
|
-
export default FdTopNav;
|
package/packages/level2/fd-app-toolbox/layout/toolbar/title-provider/ToolbarTitleProvider.jsx
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { useLayoutEffect, useMemo, useState } from "react";
|
|
2
|
-
import { TitleContext } from "@meta/page/title-context";
|
|
3
|
-
export default function TitleProvider({ children, appTitle }) {
|
|
4
|
-
const [title, setTitle] = useState("");
|
|
5
|
-
const contextValue = useMemo(() => ({ title, setTitle }), [title, setTitle]);
|
|
6
|
-
useLayoutEffect(() => {
|
|
7
|
-
document.title = appTitle + (title && ` - ${title}`);
|
|
8
|
-
}, [title, appTitle]);
|
|
9
|
-
return <TitleContext.Provider value={contextValue}>{children}</TitleContext.Provider>;
|
|
10
|
-
}
|