@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,65 +0,0 @@
|
|
|
1
|
-
import { resourceNames } from "@fd-toolbox/resources/resource-names";
|
|
2
|
-
import { fetchResourceMeta } from "@meta/meta-providers";
|
|
3
|
-
import { fetchResources } from "@meta/resource-providers";
|
|
4
|
-
const intersectionObserverThreshold = 0.9;
|
|
5
|
-
/** Docs (temp) */
|
|
6
|
-
export async function initFeed(setFeedEntries, setComments, pageSize, setIsFetching) {
|
|
7
|
-
const feedMeta = await fetchResourceMeta(resourceNames.feedEntry);
|
|
8
|
-
const odataConfig = { top: pageSize, expands: [resourceNames.user] };
|
|
9
|
-
if (feedMeta) {
|
|
10
|
-
setIsFetching(true);
|
|
11
|
-
const feedEntries = await fetchResources(feedMeta.resourceName, odataConfig);
|
|
12
|
-
setIsFetching(false);
|
|
13
|
-
if (feedEntries)
|
|
14
|
-
setFeedEntries(feedEntries);
|
|
15
|
-
setComments(["", ""]);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
export async function fetchNextFeedEntries(fetchSize, currentLength) {
|
|
19
|
-
const odataConfig = {
|
|
20
|
-
top: fetchSize,
|
|
21
|
-
skip: currentLength,
|
|
22
|
-
expands: [resourceNames.user],
|
|
23
|
-
};
|
|
24
|
-
const feedMeta = await fetchResourceMeta(resourceNames.feedEntry);
|
|
25
|
-
if (feedMeta) {
|
|
26
|
-
const entries = await fetchResources(feedMeta.resourceName, odataConfig);
|
|
27
|
-
if (entries)
|
|
28
|
-
return entries;
|
|
29
|
-
}
|
|
30
|
-
return [];
|
|
31
|
-
}
|
|
32
|
-
export async function fetchFeedMoreEntries(hasMore, fdFeedEntries, postsPerFetch, setFdFeedEntries, setHasMore) {
|
|
33
|
-
if (!hasMore)
|
|
34
|
-
return;
|
|
35
|
-
if (fdFeedEntries.length === 0)
|
|
36
|
-
return;
|
|
37
|
-
const newEntries = await fetchNextFeedEntries(postsPerFetch, fdFeedEntries.length);
|
|
38
|
-
if (newEntries.length > 0) {
|
|
39
|
-
setFdFeedEntries([...fdFeedEntries, ...newEntries]);
|
|
40
|
-
setHasMore(true);
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
setHasMore(false);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
export function createFeedIntersectionObserver(isFetching, setIsFetching, hasMore, fdFeedEntries, postsPerFetch, setFeedEntries, setHasMore) {
|
|
47
|
-
const observer = new IntersectionObserver(([entry]) => {
|
|
48
|
-
if (entry.isIntersecting && !isFetching) {
|
|
49
|
-
setIsFetching(true);
|
|
50
|
-
fetchFeedMoreEntries(hasMore, fdFeedEntries, postsPerFetch, setFeedEntries, setHasMore).finally(() => {
|
|
51
|
-
setIsFetching(false);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}, { threshold: intersectionObserverThreshold });
|
|
55
|
-
return observer;
|
|
56
|
-
}
|
|
57
|
-
export function observerFeed(hasMore, isFetching, setIsFetching, fdFeedEntries, postsPerFetch, setFdFeedEntries, setHasMore, observerRef) {
|
|
58
|
-
let result;
|
|
59
|
-
if (!observerRef || !hasMore)
|
|
60
|
-
return result;
|
|
61
|
-
const observer = createFeedIntersectionObserver(isFetching, setIsFetching, hasMore, fdFeedEntries, postsPerFetch, setFdFeedEntries, setHasMore);
|
|
62
|
-
observer.observe(observerRef);
|
|
63
|
-
result = () => observer.disconnect();
|
|
64
|
-
return result;
|
|
65
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { useEffect, useRef, useState } from "react";
|
|
3
|
-
import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
|
|
4
|
-
import { FdFeedEntry } from "@client/components/feed/FdFeedEntry";
|
|
5
|
-
import { FdFrameworkImage } from "@fd-component-toolbox/client/framework";
|
|
6
|
-
import { initFeed, observerFeed } from "@client/components/feed/FdFeed.funcs";
|
|
7
|
-
const postsPerFetch = 5;
|
|
8
|
-
/**
|
|
9
|
-
* A feed component that displays a list of {@link FeedEntry} items with infinite scroll support.
|
|
10
|
-
* Initially fetches a limited number of entries, then loads more as the user scrolls.
|
|
11
|
-
* Uses {@link initFeed} to load the first set of entries and their comments.
|
|
12
|
-
*/
|
|
13
|
-
export function FdFeed() {
|
|
14
|
-
const [fdFeedEntries, setFdFeedEntries] = useState([]);
|
|
15
|
-
const [comments, setComments] = useState([]);
|
|
16
|
-
const [hasMore, setHasMore] = useState(true);
|
|
17
|
-
const observerRef = useRef(null);
|
|
18
|
-
const [isFetching, setIsFetching] = useState(false);
|
|
19
|
-
useAsyncEffect(async () => {
|
|
20
|
-
await initFeed(setFdFeedEntries, setComments, postsPerFetch, setIsFetching);
|
|
21
|
-
}, []);
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
observerFeed(hasMore, isFetching, setIsFetching, fdFeedEntries, postsPerFetch, setFdFeedEntries, setHasMore, observerRef?.current ?? undefined);
|
|
24
|
-
}, [isFetching, hasMore, fdFeedEntries]);
|
|
25
|
-
return (<div>
|
|
26
|
-
{fdFeedEntries?.map((entry) => (<FdFeedEntry key={entry.id} fdFeedEntry={entry} comments={comments}/>))}
|
|
27
|
-
|
|
28
|
-
{hasMore ? (<div ref={observerRef} className="flex h-20 w-full items-center justify-center bg-transparent">
|
|
29
|
-
<FdFrameworkImage src="/logo.svg" alt="Logo" layout="intrinsic" width={100} height={100} priority className="size-10 animate-pulse"/>
|
|
30
|
-
</div>) : (<div className="mx-auto w-full max-w-xl text-center text-sm text-muted-foreground">
|
|
31
|
-
No more posts left.
|
|
32
|
-
</div>)}
|
|
33
|
-
</div>);
|
|
34
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
2
|
-
import { FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
|
|
3
|
-
export function FeedEntryActions({ onComment }) {
|
|
4
|
-
return (<div className="flex flex-wrap items-center justify-between px-2 py-1 sm:px-4 sm:py-2">
|
|
5
|
-
<FdButton variant="ghost" onClick={onComment} className="flex flex-1 items-center justify-center gap-2 rounded-lg px-3 py-2 text-muted-foreground transition-colors hover:bg-accent sm:flex-none sm:px-4">
|
|
6
|
-
<FdIcon name={iconNames.chatBubbleIcon} size={iconSizes.medium}/>
|
|
7
|
-
<span className="hidden font-medium sm:inline">Comments</span>
|
|
8
|
-
</FdButton>
|
|
9
|
-
|
|
10
|
-
<FdButton variant="ghost" className="flex flex-1 items-center justify-center gap-2 rounded-lg px-3 py-2 text-muted-foreground transition-colors hover:bg-accent sm:flex-none sm:px-4">
|
|
11
|
-
<FdIcon name={iconNames.share1Icon} size={iconSizes.medium}/>
|
|
12
|
-
<span className="hidden font-medium sm:inline">Share</span>
|
|
13
|
-
</FdButton>
|
|
14
|
-
</div>);
|
|
15
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
export function FdFeedComments({ postId }) {
|
|
3
|
-
return (<div className="border-t border-border p-4 text-center text-muted-foreground">
|
|
4
|
-
There you will see comments soon. Currently, comments are not implemented. PostId: {postId}
|
|
5
|
-
</div>);
|
|
6
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import React, { useState } from "react";
|
|
2
|
-
import { FdFeedHeader } from "@client/components/feed/FdFeedHeader";
|
|
3
|
-
import { FeedEntryActions } from "@client/components/feed/FdFeedActions";
|
|
4
|
-
import { FdFeedReactionsSummary } from "@client/components/feed/FdFeedReactionsSummary";
|
|
5
|
-
import { FdFeedComments } from "@client/components/feed/FdFeedComments";
|
|
6
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
7
|
-
import { FdImage } from "@fd-component-toolbox/image/FdImage";
|
|
8
|
-
import { formatUserFrendlyRelativeTime, parseToUtc } from "@fd-toolbox/dates/date-times";
|
|
9
|
-
export function FdFeedEntry({ fdFeedEntry, comments }) {
|
|
10
|
-
const [expanded, setExpanded] = useState(false);
|
|
11
|
-
const [showComments, setShowComments] = useState(false);
|
|
12
|
-
const shouldTruncate = fdFeedEntry.textContent.length > 250;
|
|
13
|
-
const displayText = shouldTruncate && !expanded ? `${fdFeedEntry.textContent.slice(0, 250)}...` : fdFeedEntry.textContent;
|
|
14
|
-
return (<div className="mx-auto w-full max-w-xl rounded-xl bg-background shadow-sm transition-all duration-200 hover:shadow-md sm:my-4">
|
|
15
|
-
<FdFeedHeader authorName={`${fdFeedEntry.user.firstName} ${fdFeedEntry.user.lastName}`} timestamp={formatUserFrendlyRelativeTime(parseToUtc(fdFeedEntry.createdDate))} avatarUrl={fdFeedEntry.user.imageUrl}/>
|
|
16
|
-
|
|
17
|
-
<div className="px-4 pb-3">
|
|
18
|
-
<p className="break-words leading-relaxed text-foreground">
|
|
19
|
-
{displayText}
|
|
20
|
-
{shouldTruncate && (<FdButton variant={"ghost"} onClick={() => setExpanded(!expanded)} className="p-0 ps-1 text-muted-foreground hover:bg-transparent">
|
|
21
|
-
{expanded ? "See less" : "See more"}
|
|
22
|
-
</FdButton>)}
|
|
23
|
-
</p>
|
|
24
|
-
</div>
|
|
25
|
-
|
|
26
|
-
{fdFeedEntry.imageUrl && (<div className="relative aspect-video w-full">
|
|
27
|
-
<FdImage src={fdFeedEntry.imageUrl} alt={`Content from ${fdFeedEntry.user.firstName} ${fdFeedEntry.user.lastName}`} fill className="object-cover" sizes="(max-width: 37rem) 100vw, 37rem" priority={false}/>
|
|
28
|
-
</div>)}
|
|
29
|
-
|
|
30
|
-
<FdFeedReactionsSummary commentCount={comments.length || 0}/>
|
|
31
|
-
|
|
32
|
-
<FeedEntryActions onComment={() => setShowComments(!showComments)}/>
|
|
33
|
-
|
|
34
|
-
{showComments && <FdFeedComments postId={fdFeedEntry.id}/>}
|
|
35
|
-
</div>);
|
|
36
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { FdAvatar, FdAvatarFallback, FdAvatarImage } from "@fd-component-toolbox/avatar/FdAvatar";
|
|
3
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
4
|
-
import { FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
|
|
5
|
-
export function FdFeedHeader({ authorName, timestamp, avatarUrl }) {
|
|
6
|
-
return (<div className="flex items-start justify-between p-3 sm:p-4">
|
|
7
|
-
<div className="flex gap-2 sm:gap-3">
|
|
8
|
-
<FdAvatar className="size-8 sm:size-10">
|
|
9
|
-
<FdAvatarImage src={avatarUrl} alt={authorName}/>
|
|
10
|
-
<FdAvatarFallback>{authorName[0]}</FdAvatarFallback>
|
|
11
|
-
</FdAvatar>
|
|
12
|
-
<div>
|
|
13
|
-
<h3 className="text-sm font-semibold text-foreground sm:text-base">{authorName}</h3>
|
|
14
|
-
<div className="flex items-center gap-1 text-xs text-muted-foreground sm:text-sm">
|
|
15
|
-
<span>{timestamp}</span>
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
<FdButton variant="fullRounded">
|
|
20
|
-
<FdIcon name={iconNames.dotsHorizontal} size={iconSizes.medium}/>
|
|
21
|
-
</FdButton>
|
|
22
|
-
</div>);
|
|
23
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { FdSeparator } from "@fd-component-toolbox/separator/FdSeparator";
|
|
2
|
-
export function FdFeedReactionsSummary({ commentCount }) {
|
|
3
|
-
const count = commentCount ?? 0;
|
|
4
|
-
return (<>
|
|
5
|
-
<div className="flex items-center justify-between px-3 py-1.5 sm:px-4 sm:py-2">
|
|
6
|
-
<div className="flex items-center gap-1"></div>
|
|
7
|
-
<div className="flex gap-3 text-xs text-muted-foreground sm:text-sm">
|
|
8
|
-
{count > 0 && (<div className="flex items-center gap-1">
|
|
9
|
-
<span>{count}</span>
|
|
10
|
-
<span>comments</span>
|
|
11
|
-
</div>)}
|
|
12
|
-
</div>
|
|
13
|
-
</div>
|
|
14
|
-
<FdSeparator />
|
|
15
|
-
</>);
|
|
16
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import TitleProvider from "@fd-app-toolbox/layout/toolbar/title-provider/ToolbarTitleProvider";
|
|
3
|
-
import { ThemeProvider } from "@fd-app-toolbox/providers/ThemeProvider/ThemeProvider";
|
|
4
|
-
import { SaveCompleteProvider } from "@meta/edit-resource/SaveCompleteProvider";
|
|
5
|
-
import { SearchDialogProvider } from "@fd-app-toolbox/search/search-dialog-provider";
|
|
6
|
-
import { SidebarResourceProvider } from "@fd-app-toolbox/layout/sidebar/sidebar-resources-provider";
|
|
7
|
-
import { FdGlobalContextProvider } from "@meta/providers/global-provider/FdGlobalContext";
|
|
8
|
-
import { defaultGlobalConfig } from "@meta/providers/global-provider/default-config";
|
|
9
|
-
import { AuthProvider } from "@fd-app-toolbox/providers/auth-provider/AuthProvider";
|
|
10
|
-
import { FdSidebarProvider } from "@fd-app-toolbox/providers/sidebar-provider/FdSidebarContext";
|
|
11
|
-
import { defaultAppTitle } from "@meta/page/title-context";
|
|
12
|
-
export function FdProviders({ children, appTitle, globalConfig }) {
|
|
13
|
-
return (<TitleProvider appTitle={appTitle ?? defaultAppTitle}>
|
|
14
|
-
<ThemeProvider>
|
|
15
|
-
<FdGlobalContextProvider config={globalConfig ?? defaultGlobalConfig}>
|
|
16
|
-
<AuthProvider>
|
|
17
|
-
<SaveCompleteProvider>
|
|
18
|
-
<FdSidebarProvider>
|
|
19
|
-
<SearchDialogProvider>
|
|
20
|
-
<SidebarResourceProvider>{children}</SidebarResourceProvider>
|
|
21
|
-
</SearchDialogProvider>
|
|
22
|
-
</FdSidebarProvider>
|
|
23
|
-
</SaveCompleteProvider>
|
|
24
|
-
</AuthProvider>
|
|
25
|
-
</FdGlobalContextProvider>
|
|
26
|
-
</ThemeProvider>
|
|
27
|
-
</TitleProvider>);
|
|
28
|
-
}
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
4
|
-
import { FdCard, FdCardFooter, FdCardTitle, FdCardContent, FdCardDescription, } from "@fd-component-toolbox/card/FdCard";
|
|
5
|
-
import { FdDialog, FdDialogContent, FdDialogTitle } from "@fd-component-toolbox/dialog/FdDialog";
|
|
6
|
-
import CheckoutForm from "@client/payments/checkout-form/CheckoutForm";
|
|
7
|
-
import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
8
|
-
import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
|
|
9
|
-
import { isBasicPlan, getButtonText, onRefreshPricings, handlePlanAction, getAdditionalInfo, getPricingText, getPricingDescripion, isActivePricing, getFeaturesByPlan, getButtonId, updateSubscription, canUpdateSubscription, cancelSubscription, getPaymentPlanId, capitalizeFirstLetter, handleCheckoutSuccess, } from "@client/components/subscription-plan/FdSubscriptionPlan.funcs";
|
|
10
|
-
import { dateToISOString } from "@fd-toolbox/dates/date-times";
|
|
11
|
-
import { FdSwitch } from "@fd-component-toolbox/switch/FdSwitch";
|
|
12
|
-
import { useSetTitle } from "@meta/page/use-set-title";
|
|
13
|
-
import { billingIntervals, subscriptionStatuses, } from "@meta/core/resources/enums/payment-enums";
|
|
14
|
-
import { subscriptionMessages } from "@fd-toolbox-core/constants/subscription-messages";
|
|
15
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
16
|
-
import { resourceNames } from "@fd-toolbox/resources/resource-names";
|
|
17
|
-
import { YesOrNoDialog } from "@fd-component-toolbox/dialog/YesOrNoDialog";
|
|
18
|
-
import { goBack } from "@fd-toolbox/routing/routers";
|
|
19
|
-
import { elements } from "@fd-toolbox/constants/elements";
|
|
20
|
-
import { hasScheduledCancelation } from "@client/components/subscription-plan/subscriptions";
|
|
21
|
-
import { useFdRouter } from "@meta/client/framework/hooks";
|
|
22
|
-
/**
|
|
23
|
-
* Component for displaying and managing subscription plans.
|
|
24
|
-
* Allows users to select, modify, or cancel subscriptions.
|
|
25
|
-
*
|
|
26
|
-
* @param props - See {@link FdSubscriptionPlanProps}
|
|
27
|
-
*/
|
|
28
|
-
export function FdSubscriptionPlan({ config }) {
|
|
29
|
-
const [isDialogOpen, setIsDialogOpen] = useState(false);
|
|
30
|
-
const [selectedPlanPrice, setSelectedPlanPrice] = useState(0);
|
|
31
|
-
const [selectedPricingId, setSelectedPricingId] = useState("");
|
|
32
|
-
const [isSubmittingForm, setIsSubmittingForm] = useState(false);
|
|
33
|
-
const [pricings, setPricings] = useState([]);
|
|
34
|
-
const [refreshPricingsTrigger, setRefreshPricingsTrigger] = useState(0);
|
|
35
|
-
const [isCanceling, setIsCanceling] = useState(false);
|
|
36
|
-
const [activeSubscription, setActiveSubscription] = useState();
|
|
37
|
-
const [selectedBillingInterval, setSelectedBillingInterval] = useState(billingIntervals.month);
|
|
38
|
-
const [paymentPlanFeature, setPaymentPlanFeature] = useState([]);
|
|
39
|
-
const router = useFdRouter();
|
|
40
|
-
const filteredPricings = useMemo(() => pricings.filter((pricing) => pricing.billingInterval === selectedBillingInterval), [pricings, selectedBillingInterval]);
|
|
41
|
-
useSetTitle(resourceNames.paymentPlan);
|
|
42
|
-
useAsyncEffect(async () => {
|
|
43
|
-
await onRefreshPricings(isCanceling, setIsCanceling, setActiveSubscription, setPricings, setPaymentPlanFeature, config?.excludePricingIds);
|
|
44
|
-
}, [refreshPricingsTrigger]);
|
|
45
|
-
useEffect(() => {
|
|
46
|
-
if (isCanceling) {
|
|
47
|
-
document.body.style.cursor = "progress";
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
document.body.style.cursor = "default";
|
|
51
|
-
}
|
|
52
|
-
}, [isCanceling]);
|
|
53
|
-
function refreshPricingsData() {
|
|
54
|
-
setRefreshPricingsTrigger((prev) => prev + 1);
|
|
55
|
-
}
|
|
56
|
-
const onSuccessSubmitingCheckoutForm = useCallback(() => {
|
|
57
|
-
handleCheckoutSuccess(setIsDialogOpen, refreshPricingsData);
|
|
58
|
-
}, []);
|
|
59
|
-
const onManagePricingAction = useCallback(async (pricing) => {
|
|
60
|
-
handlePlanAction(pricing, isDialogOpen, refreshPricingsTrigger, setIsDialogOpen, setIsCanceling, setRefreshPricingsTrigger, setSelectedPlanPrice, setSelectedPricingId, activeSubscription, config, router);
|
|
61
|
-
}, [
|
|
62
|
-
isDialogOpen,
|
|
63
|
-
refreshPricingsTrigger,
|
|
64
|
-
setIsDialogOpen,
|
|
65
|
-
setIsCanceling,
|
|
66
|
-
setRefreshPricingsTrigger,
|
|
67
|
-
setSelectedPlanPrice,
|
|
68
|
-
setSelectedPricingId,
|
|
69
|
-
activeSubscription,
|
|
70
|
-
config,
|
|
71
|
-
router,
|
|
72
|
-
]);
|
|
73
|
-
const onUpdateSubscription = useCallback(async (dialogResult, pricing) => {
|
|
74
|
-
if (dialogResult && activeSubscription)
|
|
75
|
-
if (activeSubscription.pricingId === pricing.id) {
|
|
76
|
-
await cancelSubscription(activeSubscription.id);
|
|
77
|
-
refreshPricingsData();
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
await updateSubscription(activeSubscription, pricing, refreshPricingsData);
|
|
81
|
-
}
|
|
82
|
-
}, [activeSubscription]);
|
|
83
|
-
const featuresByPlan = useMemo(() => {
|
|
84
|
-
return getFeaturesByPlan(paymentPlanFeature.map((f) => ({
|
|
85
|
-
...f,
|
|
86
|
-
featureName: f.feature?.name ?? "",
|
|
87
|
-
})));
|
|
88
|
-
}, [paymentPlanFeature]);
|
|
89
|
-
const onBillingIntervalChange = useCallback(() => {
|
|
90
|
-
setSelectedBillingInterval((prev) => prev === billingIntervals.year ? billingIntervals.month : billingIntervals.year);
|
|
91
|
-
}, []);
|
|
92
|
-
return (<div className="flex flex-col justify-center py-6 xl:px-4">
|
|
93
|
-
<p className="mb-4 mt-2 text-center text-muted-foreground">{subscriptionMessages.pricingIntro}</p>
|
|
94
|
-
<div className="flex items-center justify-center">
|
|
95
|
-
<div className="absolute left-0 top-0 z-50 items-start justify-start gap-2 md:left-14">
|
|
96
|
-
<FdButton id={elements.paymentPlan.backButton} variant="ghost" size="default" onClick={goBack} tooltipText="Go back" tooltipClassName="mt-2">
|
|
97
|
-
<FdIcon name={iconNames.arrowLeft} className="mr-2"/>
|
|
98
|
-
Back
|
|
99
|
-
</FdButton>
|
|
100
|
-
</div>
|
|
101
|
-
<p className="pointer-events-none pr-3 text-sm font-medium leading-none peer-disabled:cursor-not-allowed">
|
|
102
|
-
{subscriptionMessages.pricePerMonth}
|
|
103
|
-
</p>
|
|
104
|
-
<FdSwitch text={subscriptionMessages.pricePerYear} checked={selectedBillingInterval === billingIntervals.year} onCheckedChange={onBillingIntervalChange} name="subscriptionTypeSwitcher"/>
|
|
105
|
-
</div>
|
|
106
|
-
{!!filteredPricings.length && (<div className="mx-auto flex flex-col items-center justify-center gap-4 sm:mx-0 lg:flex-row lg:items-stretch">
|
|
107
|
-
{filteredPricings.map((pricing) => {
|
|
108
|
-
const isActive = isActivePricing(pricing, activeSubscription?.pricing, activeSubscription?.pendingPricingId);
|
|
109
|
-
const plan = pricing.paymentPlan;
|
|
110
|
-
const additionalInfo = getAdditionalInfo(pricing, activeSubscription);
|
|
111
|
-
return (plan && (<FdCard key={pricing.id} className={cn("relative mt-4 flex w-full flex-col items-center gap-2 rounded-3xl p-4 sm:max-w-2xl lg:max-w-md", isActive && "border-4 border-primary")} id={getPaymentPlanId(plan.name, pricing.billingInterval)}>
|
|
112
|
-
{additionalInfo && additionalInfo.shouldShowAdditionalInfo && (<div className="absolute right-4 top-6 flex size-28 flex-col items-center justify-center rounded-full bg-primary p-2 text-sm text-primary-foreground">
|
|
113
|
-
<p>{additionalInfo.infoText}</p>
|
|
114
|
-
<time className="text-xs">
|
|
115
|
-
{additionalInfo.infoDate &&
|
|
116
|
-
dateToISOString(additionalInfo.infoDate.toString())}
|
|
117
|
-
</time>
|
|
118
|
-
</div>)}
|
|
119
|
-
<FdCardTitle className="w-full text-left font-semibold">
|
|
120
|
-
{capitalizeFirstLetter(plan.name)}
|
|
121
|
-
</FdCardTitle>
|
|
122
|
-
<FdCardDescription className={cn("mt-8 w-full text-left text-3xl font-semibold text-primary", plan.isContactUs && "text-center text-base xl:text-xl")}>
|
|
123
|
-
{getPricingText(pricing, plan.pricingDescription)}
|
|
124
|
-
</FdCardDescription>
|
|
125
|
-
<p className="w-full text-left text-sm">
|
|
126
|
-
{getPricingDescripion(pricing)}
|
|
127
|
-
</p>
|
|
128
|
-
<FdCardContent className="mt-2 w-full grow pl-0">
|
|
129
|
-
<span className="text-sm font-semibold">{plan.description}</span>
|
|
130
|
-
<ul className="mt-2 space-y-2">
|
|
131
|
-
{(featuresByPlan[pricing.paymentPlanId] || []).map((featureName) => (<li key={featureName} className="flex items-start">
|
|
132
|
-
<FdIcon name={iconNames.check} className="mr-2 mt-1 shrink-0 self-start"/>
|
|
133
|
-
<span className="text-sm">{featureName}</span>
|
|
134
|
-
</li>))}
|
|
135
|
-
</ul>
|
|
136
|
-
</FdCardContent>
|
|
137
|
-
<FdCardFooter className="flex w-full flex-col pb-0">
|
|
138
|
-
{!isBasicPlan(plan) &&
|
|
139
|
-
(canUpdateSubscription(pricing.id, activeSubscription) &&
|
|
140
|
-
!plan.isContactUs ? (<YesOrNoDialog triggerCssClass="w-full" title={activeSubscription?.status ===
|
|
141
|
-
subscriptionStatuses.trialing
|
|
142
|
-
? subscriptionMessages.trialDIalogTitle
|
|
143
|
-
: subscriptionMessages.dialogTitle} onResponse={(dialogResult) => onUpdateSubscription(dialogResult, pricing)} trigger={<FdButton size="default" className="w-full" id={getButtonId(plan.name)} disabled={hasScheduledCancelation(activeSubscription, pricing.id)}>
|
|
144
|
-
{getButtonText(pricing, activeSubscription)}
|
|
145
|
-
</FdButton>} isDisabled={hasScheduledCancelation(activeSubscription, pricing.id)}/>) : (<FdButton onClick={() => onManagePricingAction(pricing)} size="default" className="w-full" id={getButtonId(plan.name)} disabled={hasScheduledCancelation(activeSubscription, pricing.id)}>
|
|
146
|
-
{getButtonText(pricing, activeSubscription)}
|
|
147
|
-
</FdButton>))}
|
|
148
|
-
</FdCardFooter>
|
|
149
|
-
</FdCard>));
|
|
150
|
-
})}
|
|
151
|
-
<FdDialog open={isDialogOpen} onOpenChange={setIsDialogOpen}>
|
|
152
|
-
<FdDialogContent isCloseButtonShown={!isSubmittingForm} className="flex w-full min-w-96 flex-col justify-center gap-0" onEscapeKeyDown={isSubmittingForm ? (event) => event.preventDefault() : undefined} onInteractOutside={isSubmittingForm ? (event) => event.preventDefault() : undefined}>
|
|
153
|
-
<FdDialogTitle className="mt-8 text-center font-semibold leading-none">
|
|
154
|
-
{subscriptionMessages.enterPaymentDetails}
|
|
155
|
-
</FdDialogTitle>
|
|
156
|
-
<div>
|
|
157
|
-
<CheckoutForm price={selectedPlanPrice} pricingId={selectedPricingId} onSubmitting={setIsSubmittingForm} onSubmitSuccess={onSuccessSubmitingCheckoutForm}/>
|
|
158
|
-
</div>
|
|
159
|
-
</FdDialogContent>
|
|
160
|
-
</FdDialog>
|
|
161
|
-
</div>)}
|
|
162
|
-
</div>);
|
|
163
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
3
|
-
import { FdWizardStepper } from "@client/components/wizard/FdWizardStepper";
|
|
4
|
-
import { useMemo } from "react";
|
|
5
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
6
|
-
import { getBackButtonId, getNextButtonId, getSubmitButtonId, isNextButtonVisible, } from "@client/components/wizard/FdWizard.funcs";
|
|
7
|
-
/**
|
|
8
|
-
* A multi-step wizard component that guides users through a series of steps.
|
|
9
|
-
* Displays a stepper, content for the current step, and navigation buttons (Back, Next, Submit).
|
|
10
|
-
*
|
|
11
|
-
* @param props - {@link FdWizardProps}
|
|
12
|
-
*/
|
|
13
|
-
export function FdWizard({ config, onNextClick, onBackClick, currentStep, children, disableButton, isSubmitting, showSubmitButton, onSubmit, }) {
|
|
14
|
-
const nextBtnClass = useMemo(() => {
|
|
15
|
-
return !isNextButtonVisible(config.steps.length - 1, currentStep) ? "invisible" : "";
|
|
16
|
-
}, [config.steps, currentStep]);
|
|
17
|
-
const childrenClass = useMemo(() => {
|
|
18
|
-
return currentStep === 3 ? "min-h-60" : "min-h-10";
|
|
19
|
-
}, [currentStep]);
|
|
20
|
-
return (<div className="flex w-full flex-col items-center gap-4">
|
|
21
|
-
<FdWizardStepper steps={config.steps} currentStep={currentStep}/>
|
|
22
|
-
<div className={cn("w-full max-w-4xl", childrenClass)}>{children}</div>
|
|
23
|
-
<div className="mt-2 flex w-full max-w-4xl justify-end gap-2">
|
|
24
|
-
<FdButton id={getBackButtonId(currentStep)} variant="outline" onClick={onBackClick}>
|
|
25
|
-
Back
|
|
26
|
-
</FdButton>
|
|
27
|
-
{showSubmitButton && currentStep < config.steps.length - 1 && (<FdButton id={getSubmitButtonId(currentStep)} className={nextBtnClass} onClick={onSubmit} disabled={disableButton}>
|
|
28
|
-
{isSubmitting ? (<div className="flex">
|
|
29
|
-
<div className="mr-2 size-4 animate-spin rounded-full border-2 border-inherit border-r-transparent"/>
|
|
30
|
-
Submitting...
|
|
31
|
-
</div>) : (<>Submit</>)}
|
|
32
|
-
</FdButton>)}
|
|
33
|
-
{currentStep < config.steps.length - 1 || !config.customActions ? (<FdButton id={getNextButtonId(currentStep)} className={nextBtnClass} onClick={onNextClick} disabled={disableButton}>
|
|
34
|
-
{currentStep < config.steps.length - 1 ? (<>Next</>) : (<div>
|
|
35
|
-
{isSubmitting ? (<div className="flex">
|
|
36
|
-
<div className="mr-2 size-4 animate-spin rounded-full border-2 border-inherit border-r-transparent"/>
|
|
37
|
-
Submitting...
|
|
38
|
-
</div>) : (<>Submit</>)}
|
|
39
|
-
</div>)}
|
|
40
|
-
</FdButton>) : (config.customActions.map((customAction) => (<FdButton key={customAction.name} variant={customAction.buttonVariant} onClick={customAction.action}>
|
|
41
|
-
{customAction.name}
|
|
42
|
-
</FdButton>)))}
|
|
43
|
-
</div>
|
|
44
|
-
</div>);
|
|
45
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { useEffect, useState, Fragment } from "react";
|
|
3
|
-
import { FdFrameworkImage } from "@fd-component-toolbox/client/framework";
|
|
4
|
-
import { FdSeparator } from "@fd-component-toolbox/separator/FdSeparator";
|
|
5
|
-
import { FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
|
|
6
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
7
|
-
import { getVisibleSteps, isMobileChecker, getWizardStepperBackgroundClass, } from "@client/components/wizard/FdWizardStepper.funcs";
|
|
8
|
-
/**
|
|
9
|
-
* A visual stepper component for guiding users through multi-step wizard flows.
|
|
10
|
-
*
|
|
11
|
-
* @param props - {@link FdWizardStepperProps}
|
|
12
|
-
*/
|
|
13
|
-
export function FdWizardStepper({ steps, currentStep }) {
|
|
14
|
-
const [isMobile, setIsMobile] = useState(false);
|
|
15
|
-
const { visibleSteps, adjustedCurrentStep } = getVisibleSteps(steps, currentStep);
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
isMobileChecker(setIsMobile);
|
|
18
|
-
}, []);
|
|
19
|
-
const isCompletedStep = (index) => {
|
|
20
|
-
return index < (isMobile ? adjustedCurrentStep : currentStep);
|
|
21
|
-
};
|
|
22
|
-
const getStepBackgroundClass = (index) => {
|
|
23
|
-
return getWizardStepperBackgroundClass(index, isMobile, currentStep, adjustedCurrentStep);
|
|
24
|
-
};
|
|
25
|
-
const renderStepContent = (step, index) => {
|
|
26
|
-
if (isCompletedStep(index)) {
|
|
27
|
-
return <FdIcon name={iconNames.check} size={iconSizes.large} color="text-background"/>;
|
|
28
|
-
}
|
|
29
|
-
if (step.imageUrl) {
|
|
30
|
-
return (<FdFrameworkImage src={step.imageUrl} fill alt={`step-${index + 1}-${step.description}`} sizes={"20rem"} className="object-cover"/>);
|
|
31
|
-
}
|
|
32
|
-
return (<p className="text-sm text-background md:text-base">
|
|
33
|
-
{isMobile ? steps.indexOf(step) + 1 : index + 1}
|
|
34
|
-
</p>);
|
|
35
|
-
};
|
|
36
|
-
return (<div className="mb-11 w-full px-2">
|
|
37
|
-
<div className="flex w-full items-center gap-5">
|
|
38
|
-
{(isMobile ? visibleSteps : steps).map((step, index) => (<Fragment key={step.description}>
|
|
39
|
-
{index > 0 && (<div className="w-full min-w-8 xl:min-w-32">
|
|
40
|
-
<FdSeparator />
|
|
41
|
-
</div>)}
|
|
42
|
-
<div className="relative flex flex-col items-center">
|
|
43
|
-
<div className={cn("flex size-11 items-center justify-center overflow-hidden rounded-full sm:size-14", getStepBackgroundClass(index))}>
|
|
44
|
-
{renderStepContent(step, index)}
|
|
45
|
-
</div>
|
|
46
|
-
<div className="absolute top-12 mt-2 max-w-40 sm:top-14">
|
|
47
|
-
<div className="text-center text-sm text-subtle-500 md:text-base">
|
|
48
|
-
{step.description}
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
</div>
|
|
52
|
-
</Fragment>))}
|
|
53
|
-
</div>
|
|
54
|
-
</div>);
|
|
55
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import React, { Fragment, useState, useEffect, useRef } from "react";
|
|
3
|
-
import FdDynamicLayoutDragAndDrop from "@fd-component-toolbox/dynamic-layout/FdDynamicLayoutDragAndDrop";
|
|
4
|
-
import FdDynamicComponent from "@fd-component-toolbox/dynamic-layout/FdDynamicComponent";
|
|
5
|
-
import ReportChart from "@fd-app-toolbox/report/ReportChart";
|
|
6
|
-
import { FdCardBigDigits } from "@fd-component-toolbox/card/FdCardBigDigits";
|
|
7
|
-
import { goBack } from "@fd-toolbox/routing/routers";
|
|
8
|
-
import { reportTypes } from "@fd-app-toolbox/reports/report-enums";
|
|
9
|
-
import { FdSubHeading } from "@fd-component-toolbox/subheading/FdSubHeading";
|
|
10
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
11
|
-
import { FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
|
|
12
|
-
import { useSetTitle } from "@meta/page/use-set-title";
|
|
13
|
-
import { dashboardLayoutConfig, onInitDashboardPage } from "@client/pages/dashboard-page/dashboardPage.funcs";
|
|
14
|
-
const pageTitle = "Dashboard";
|
|
15
|
-
export default function DashboardPage() {
|
|
16
|
-
const [reports, setReports] = useState([]);
|
|
17
|
-
const [width, setWidth] = useState(window.innerWidth);
|
|
18
|
-
const containerRef = useRef(null);
|
|
19
|
-
useSetTitle(pageTitle);
|
|
20
|
-
useEffect(() => {
|
|
21
|
-
onInitDashboardPage(containerRef, setWidth, setReports);
|
|
22
|
-
}, []);
|
|
23
|
-
return (<div ref={containerRef} className="overflow-auto p-6">
|
|
24
|
-
<div className="mb-4 flex items-center gap-1">
|
|
25
|
-
<FdButton variant="ghost" size="icon" className="size-5">
|
|
26
|
-
<FdIcon name={iconNames.arrowLeft} size={iconSizes.small} onClick={goBack}/>
|
|
27
|
-
</FdButton>
|
|
28
|
-
<FdSubHeading>Dashboards</FdSubHeading>
|
|
29
|
-
</div>
|
|
30
|
-
<div className="flex flex-col gap-2 p-2">
|
|
31
|
-
<FdDynamicLayoutDragAndDrop componentClassName="bg-card shadow rounded-xl" columns={15}>
|
|
32
|
-
{reports.map((report) => {
|
|
33
|
-
return (<Fragment key={report.id}>
|
|
34
|
-
<FdDynamicComponent key={report.id} defaultX={Math.max(0, Number(report.positionX))} defaultY={Math.max(0, Number(report.positionY))} defaultWidth={Math.max(0, width < dashboardLayoutConfig.breakpointWidth
|
|
35
|
-
? dashboardLayoutConfig.defaultWidth
|
|
36
|
-
: Number(report.sizeX))} defaultHeight={Math.max(0, width < dashboardLayoutConfig.breakpointWidth
|
|
37
|
-
? dashboardLayoutConfig.defaultHeight
|
|
38
|
-
: Number(report.sizeY))} minWidth={dashboardLayoutConfig.minWidth} minHeight={dashboardLayoutConfig.minHeight} id={report.id}>
|
|
39
|
-
{report.report?.type === reportTypes.chart ? (<ReportChart reportId={report.reportId}/>) : (report.report?.type === reportTypes.number && (<FdCardBigDigits title={report.report.name} value={report.report.bigDigitValue} subtitle={report.report.description}/>))}
|
|
40
|
-
</FdDynamicComponent>
|
|
41
|
-
</Fragment>);
|
|
42
|
-
})}
|
|
43
|
-
</FdDynamicLayoutDragAndDrop>
|
|
44
|
-
</div>
|
|
45
|
-
</div>);
|
|
46
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import FdDynamicLayoutDragAndDrop from "@fd-component-toolbox/dynamic-layout/FdDynamicLayoutDragAndDrop";
|
|
3
|
-
import ReportChart from "@fd-app-toolbox/report/ReportChart";
|
|
4
|
-
import { resourceNames } from "@fd-toolbox/resources/resource-names";
|
|
5
|
-
import FdDynamicComponent from "@fd-component-toolbox/dynamic-layout/FdDynamicComponent";
|
|
6
|
-
import { ResourceList } from "@meta/resource-list/ResourceList";
|
|
7
|
-
async function DynamicLayoutPage() {
|
|
8
|
-
return (<div className="px-40 py-20">
|
|
9
|
-
<FdDynamicLayoutDragAndDrop componentClassName="bg-background shadow rounded-xl">
|
|
10
|
-
<ReportChart reportId={"38bdb3b9-3ad2-4359-8e2b-4ea14b4d4367"}/>
|
|
11
|
-
<ReportChart reportId={"38bdb3b9-3ad2-4359-8e2b-4ea14b4d4367"}/>
|
|
12
|
-
<ReportChart reportId={"38bdb3b9-3ad2-4359-8e2b-4ea14b4d4367"}/>
|
|
13
|
-
<FdDynamicComponent minWidth={2}>
|
|
14
|
-
<div className="h-full overflow-y-auto">
|
|
15
|
-
<ResourceList resourceName={resourceNames.contact}/>
|
|
16
|
-
</div>
|
|
17
|
-
</FdDynamicComponent>
|
|
18
|
-
<div />
|
|
19
|
-
</FdDynamicLayoutDragAndDrop>
|
|
20
|
-
</div>);
|
|
21
|
-
}
|
|
22
|
-
export default DynamicLayoutPage;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { EditOtherUser } from "@fd-app-toolbox/edit-other-user/EditOtherUser";
|
|
2
|
-
import { getUserDto } from "@server/users/user-manager";
|
|
3
|
-
import { apiNotFoundError } from "@fd-toolbox/server/web/errors";
|
|
4
|
-
import { responseMessages } from "@fd-toolbox/server/web/response-messages";
|
|
5
|
-
export default async function EditUserByIdPage({ params }) {
|
|
6
|
-
const { id } = await params;
|
|
7
|
-
const userData = await getUserDto(id);
|
|
8
|
-
if (!userData) {
|
|
9
|
-
throw apiNotFoundError(responseMessages.notFoundError);
|
|
10
|
-
}
|
|
11
|
-
return (<main className="p-4">
|
|
12
|
-
<EditOtherUser userId={id} userData={{ id: userData.id, email: userData.email }}/>
|
|
13
|
-
</main>);
|
|
14
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { redirectFunction } from "@fd-toolbox/redirect/redirect-functions";
|
|
2
|
-
import { FdFeed } from "@client/components/feed/FdFeed";
|
|
3
|
-
import { isDev } from "@fd-toolbox/lib/environments";
|
|
4
|
-
export default async function FeedPage() {
|
|
5
|
-
if (isDev())
|
|
6
|
-
await redirectFunction("/");
|
|
7
|
-
return <FdFeed />;
|
|
8
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { FileUpload } from "@meta/components/file-upload/FileUpload";
|
|
3
|
-
export default function FileUploadPage() {
|
|
4
|
-
return (<div className="flex h-screen flex-col items-center justify-center gap-10 overflow-auto">
|
|
5
|
-
<FileUpload allowMultiple/>
|
|
6
|
-
</div>);
|
|
7
|
-
}
|