@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,103 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { FdSheet, FdSheetTrigger, FdSheetContent, FdSheetTitle, FdSheetHeader, FdSheetDescription, } from "@fd-component-toolbox/sheet/FdSheet";
|
|
3
|
-
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
4
|
-
import { emptyGuid } from "@fd-toolbox/constants/constants";
|
|
5
|
-
import { metaQueryParams } from "@fd-toolbox/constants/meta-query-params";
|
|
6
|
-
import { FdView } from "@meta/view/FdView";
|
|
7
|
-
import { resourceEditModes } from "@fd-toolbox/constants/resource-list-configs-enums";
|
|
8
|
-
import { FdEditResource } from "@meta/edit-resource/FdEditResource";
|
|
9
|
-
import { getEditMode } from "@meta/resource-list/resource-list-configs";
|
|
10
|
-
import { getViewConfig } from "@meta/view/config/view-list-config";
|
|
11
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
12
|
-
import { elements } from "@fd-toolbox/constants/elements";
|
|
13
|
-
import { handleCancelClick, handleDeleteClick, handleOpenChange, handleSaveComplete, } from "@meta/view/FdViewSheet.funcs";
|
|
14
|
-
import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
|
|
15
|
-
import { fetchUiResourceMeta } from "@meta/ui-meta-providers";
|
|
16
|
-
import { viewNames } from "@meta/view/view-names";
|
|
17
|
-
import { isUuidSet } from "@fd-toolbox/functions/value-checking-functions";
|
|
18
|
-
/**
|
|
19
|
-
* A sheet component that displays views in a sliding panel overlay.
|
|
20
|
-
*
|
|
21
|
-
* This component provides a modal-like interface for {@link FdView}.
|
|
22
|
-
|
|
23
|
-
*
|
|
24
|
-
* @param props - {@link FdViewSheetProps}
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* ```tsx
|
|
28
|
-
* <FdViewSheet
|
|
29
|
-
* id="123e4567-e89b-12d3-a456-426614174000"
|
|
30
|
-
* resourceName="student"
|
|
31
|
-
* onRefreshResources={onRefreshResources}
|
|
32
|
-
* >
|
|
33
|
-
* <FdButton variant="outline">
|
|
34
|
-
* View Details
|
|
35
|
-
* </FdButton>
|
|
36
|
-
* </FdViewSheet>
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
export function FdViewSheet({ id: propId, resourceName, children, onEditClick, onRefreshResources, onCloseClick, defaultTab, uiResourceMeta: uiResourceMetaProp, editMode: editModeProp, }) {
|
|
40
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
41
|
-
const [relatedResourceId, setRelatedResourceId] = useState();
|
|
42
|
-
const [relatedResourceName, setRelatedResourceName] = useState();
|
|
43
|
-
const [uiResourceMeta, setUiResourceMeta] = useState();
|
|
44
|
-
const viewConfig = useMemo(() => (resourceName ? getViewConfig(resourceName) : undefined), [resourceName]);
|
|
45
|
-
const enhanceParams = (search) => new URLSearchParams(search);
|
|
46
|
-
const params = enhanceParams(window.location.search);
|
|
47
|
-
const paramsId = params.get(metaQueryParams.id) ?? undefined;
|
|
48
|
-
const paramsResourceName = params.get(metaQueryParams.resource) ?? undefined;
|
|
49
|
-
const resolvedResourceName = resourceName ?? params.get(metaQueryParams.resource) ?? "";
|
|
50
|
-
const resourceId = (isUuidSet(propId) && propId) || (isUuidSet(paramsId) && paramsId) || emptyGuid;
|
|
51
|
-
const isNew = !isUuidSet(resourceId);
|
|
52
|
-
const defaultData = params.get(metaQueryParams.default);
|
|
53
|
-
const defaultDataParams = enhanceParams(defaultData ?? "");
|
|
54
|
-
const defaultDataName = defaultDataParams.get(metaQueryParams.relatedResourceName);
|
|
55
|
-
const defaultDataValue = defaultDataParams.get(metaQueryParams.relatedResourceId);
|
|
56
|
-
const editMode = editModeProp ?? getEditMode();
|
|
57
|
-
useAsyncEffect(async () => {
|
|
58
|
-
if (editMode === resourceEditModes.simple) {
|
|
59
|
-
let uiMeta = uiResourceMetaProp;
|
|
60
|
-
uiMeta ??= await fetchUiResourceMeta(resolvedResourceName);
|
|
61
|
-
setUiResourceMeta(uiMeta);
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
useEffect(() => {
|
|
65
|
-
if (defaultDataName && defaultDataValue) {
|
|
66
|
-
setRelatedResourceName(defaultDataName);
|
|
67
|
-
setRelatedResourceId(defaultDataValue);
|
|
68
|
-
}
|
|
69
|
-
}, [defaultDataName, defaultDataValue]);
|
|
70
|
-
const onOpenChange = useCallback(async (open) => {
|
|
71
|
-
handleOpenChange(open, setIsOpen, resolvedResourceName, paramsId ?? undefined, paramsResourceName ?? undefined, propId, onEditClick, editMode, onCloseClick);
|
|
72
|
-
}, [editMode, paramsId, resolvedResourceName, paramsResourceName, onCloseClick, propId, onEditClick]);
|
|
73
|
-
const onSaveComplete = useCallback(() => {
|
|
74
|
-
handleSaveComplete(onOpenChange, onRefreshResources, onCloseClick);
|
|
75
|
-
}, [onRefreshResources, onOpenChange, onCloseClick]);
|
|
76
|
-
const onCancelClick = useCallback(() => {
|
|
77
|
-
handleCancelClick(onOpenChange, onCloseClick);
|
|
78
|
-
}, [onOpenChange, onCloseClick]);
|
|
79
|
-
const onDeleteComplete = useCallback(() => {
|
|
80
|
-
handleDeleteClick(onOpenChange, onCloseClick);
|
|
81
|
-
}, [onOpenChange, onCloseClick]);
|
|
82
|
-
return (<div onClick={(e) => e.stopPropagation()}>
|
|
83
|
-
<FdSheet open={isOpen} onOpenChange={onOpenChange}>
|
|
84
|
-
<FdSheetTrigger id={elements.table.editButton + propId} asChild>
|
|
85
|
-
{children}
|
|
86
|
-
</FdSheetTrigger>
|
|
87
|
-
<FdSheetContent className={cn("overflow-y-auto py-8 pl-2 sm:pl-6", editMode === resourceEditModes.default
|
|
88
|
-
? "w-full pr-0 sm:w-3/4"
|
|
89
|
-
: "w-full pr-4 sm:w-2/3 lg:w-7/12 xl:w-2/5")}>
|
|
90
|
-
<FdSheetHeader>
|
|
91
|
-
<FdSheetDescription></FdSheetDescription>
|
|
92
|
-
</FdSheetHeader>
|
|
93
|
-
<FdSheetTitle className="absolute -m-px size-px overflow-hidden whitespace-nowrap border-0 p-0 text-transparent">
|
|
94
|
-
SheetContent
|
|
95
|
-
</FdSheetTitle>
|
|
96
|
-
<div className="h-full">
|
|
97
|
-
{(editMode === resourceEditModes.default && (<FdView resourceName={resolvedResourceName} resourceId={resourceId} onSaveComplete={onSaveComplete} onCancelClick={onCancelClick} onDeleteComplete={onDeleteComplete} defaultTab={defaultTab} viewConfigProp={viewConfig} viewName={viewNames.viewResource} onRefreshResource={onRefreshResources}/>)) ||
|
|
98
|
-
(uiResourceMeta && editMode === resourceEditModes.simple && (<FdEditResource uiResourceMeta={uiResourceMeta} resourceId={resourceId} isNew={isNew} onSaveComplete={onSaveComplete} onDeleteComplete={onDeleteComplete} onCancelClick={onCancelClick} onRefreshResource={onRefreshResources} relatedResourceId={relatedResourceId} relatedResourceName={relatedResourceName} showSavingStatus={true}/>))}
|
|
99
|
-
</div>
|
|
100
|
-
</FdSheetContent>
|
|
101
|
-
</FdSheet>
|
|
102
|
-
</div>);
|
|
103
|
-
}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
3
|
-
import { tabsNames, viewLayoutTypes } from "@meta/view/view-constants";
|
|
4
|
-
import FdNavigation from "@fd-component-toolbox/navigation/FdNavigation";
|
|
5
|
-
import { getViewNavigationItems, initializeMultiListResources, onViewMultiListRelationChange, onRelationUnassign, } from "@meta/view/FdView.funcs";
|
|
6
|
-
import { FdEditResource } from "@meta/edit-resource/FdEditResource";
|
|
7
|
-
import { FdTabs, FdTabsList, FdTabsTrigger } from "@fd-component-toolbox/tabs/FdTabs";
|
|
8
|
-
import FdMultiList from "@meta/components/multi-list/FdMultiList";
|
|
9
|
-
import { FdCommentList } from "@meta/comment/FdCommentList";
|
|
10
|
-
import { useCallback, useMemo, useState } from "react";
|
|
11
|
-
import { fdMultiListTypes, } from "@meta/components/multi-list/multi-list-types";
|
|
12
|
-
import { getDefaultEditResourceConfig, getEditResourceConfig, } from "@meta/edit-resource/config/fd-edit-resource-configs";
|
|
13
|
-
import { getViewConfig } from "@meta/view/config/view-list-config";
|
|
14
|
-
import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
|
|
15
|
-
import { elementSuffixes } from "@fd-toolbox/constants/element-suffixes";
|
|
16
|
-
import { FdSaveStatus } from "@fd-component-toolbox/save-status/FdSaveStatus";
|
|
17
|
-
import { onSavingViewResourceStart } from "@meta/view/view-resource/FdViewResource.funcs";
|
|
18
|
-
/**
|
|
19
|
-
* A universal component for displaying resources in any mode, {@link FdEditResource}, {@link FdMultiList} or others.
|
|
20
|
-
|
|
21
|
-
*
|
|
22
|
-
* The layout can be configured to use either navigation or tabbed interface based on the view configuration.
|
|
23
|
-
*
|
|
24
|
-
* @param props - {@link FdViewResourceProps}
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* ```tsx
|
|
28
|
-
* <FdViewResource
|
|
29
|
-
* resourceId="d4507481-8b33-46e7-9c2e-606daab170cc"
|
|
30
|
-
* hasId={true}
|
|
31
|
-
* resourceName="student"
|
|
32
|
-
* onDeleteComplete={onDeleteComplete}
|
|
33
|
-
* onCancelClick={onCancelClick}
|
|
34
|
-
* onSaveComplete={onSaveComplete}
|
|
35
|
-
* viewConfigProp={viewConfigProp}
|
|
36
|
-
* defaultTab={defaultTab}
|
|
37
|
-
* />
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
export function FdViewResource({ resourceName, resourceId, hasId, viewConfigProp, onDeleteComplete, onSaveComplete, defaultTab, onCancelClick, onRefreshData, }) {
|
|
41
|
-
const [multiListItems, setMultiListItems] = useState([]);
|
|
42
|
-
const [editConfig, setEditConfig] = useState(resourceName ? getEditResourceConfig(resourceName) : getDefaultEditResourceConfig(resourceName));
|
|
43
|
-
const [uiResourceMeta, setUiResourceMeta] = useState(undefined);
|
|
44
|
-
const [resource, setResource] = useState();
|
|
45
|
-
const [multiListType, setMultiListType] = useState(fdMultiListTypes.resource);
|
|
46
|
-
const [activeTab, setActiveTab] = useState(defaultTab ?? tabsNames.overview);
|
|
47
|
-
const [isLoadComplete, setIsLoadComplete] = useState(false);
|
|
48
|
-
const [commentList, setCommentList] = useState([]);
|
|
49
|
-
const [activeSaveOperations, setActiveSaveOperations] = useState(0);
|
|
50
|
-
const [hasSavedOnce, setHasSavedOnce] = useState(false);
|
|
51
|
-
const viewConfig = useMemo(() => viewConfigProp ?? getViewConfig(resourceName), [viewConfigProp, resourceName]);
|
|
52
|
-
useAsyncEffect(async () => {
|
|
53
|
-
await initializeMultiListResources(resourceName, resourceId, viewConfig, setMultiListItems, setMultiListType, editConfig, setEditConfig, setResource, setUiResourceMeta, setIsLoadComplete, hasId, setCommentList);
|
|
54
|
-
});
|
|
55
|
-
const onRelationUnassignCallback = useCallback(async (context, multiListItem) => {
|
|
56
|
-
await onRelationUnassign(context, multiListItem, uiResourceMeta.resourceMeta, resource);
|
|
57
|
-
}, [resource, uiResourceMeta]);
|
|
58
|
-
const onViewMultiListRelationChangeCallback = useCallback((multiListItem, newRelatedResource) => {
|
|
59
|
-
onViewMultiListRelationChange(multiListItem, uiResourceMeta.resourceMeta, resource, newRelatedResource);
|
|
60
|
-
}, [resource, uiResourceMeta?.resourceMeta]);
|
|
61
|
-
const onSavingStarting = useCallback(() => {
|
|
62
|
-
onSavingViewResourceStart(hasSavedOnce, setHasSavedOnce, setActiveSaveOperations);
|
|
63
|
-
}, [hasSavedOnce]);
|
|
64
|
-
const onSavingEnding = useCallback(() => {
|
|
65
|
-
setActiveSaveOperations((prev) => prev - 1);
|
|
66
|
-
}, []);
|
|
67
|
-
return (isLoadComplete && (<div className="relative h-full">
|
|
68
|
-
{hasSavedOnce && (<div className="absolute right-9 top-1.5">
|
|
69
|
-
<FdSaveStatus isSaved={activeSaveOperations === 0}/>
|
|
70
|
-
</div>)}
|
|
71
|
-
<div className={cn("flex w-full flex-col justify-center lg:h-full lg:flex-row lg:overflow-hidden", multiListItems.length && "justify-around")} id={`${resourceName}${elementSuffixes.viewResource}`}>
|
|
72
|
-
{viewConfig.layoutType === viewLayoutTypes.navigation ? (<div className="sticky max-h-full min-h-min shrink-0 border-input">
|
|
73
|
-
<FdNavigation isOpen={true} config={{ name: "", items: getViewNavigationItems(multiListItems) }}/>
|
|
74
|
-
</div>) : (<div className="h-1/2 w-full shrink-0 overflow-y-auto pr-2 lg:h-full lg:w-1/3 lg:pr-1">
|
|
75
|
-
{uiResourceMeta && (<FdEditResource resourceId={resourceId} isNew={!hasId} onSaveComplete={onSaveComplete} onCancelClick={onCancelClick} onDeleteComplete={onDeleteComplete} config={editConfig} uiResourceMeta={uiResourceMeta} resource={resource} onSavingStarting={onSavingStarting} onSavingEnding={onSavingEnding} onRefreshResource={onRefreshData}/>)}
|
|
76
|
-
</div>)}
|
|
77
|
-
<div className="my-4 h-px w-full pr-2 lg:ml-2 lg:mr-6 lg:mt-0 lg:h-auto lg:min-h-full lg:w-px lg:pr-0">
|
|
78
|
-
<div className="size-full bg-border"/>
|
|
79
|
-
</div>
|
|
80
|
-
{hasId && (<FdTabs value={String(activeTab)} className="flex h-1/2 w-full flex-col overflow-y-auto pr-2 lg:h-full lg:overflow-hidden lg:pr-0">
|
|
81
|
-
<FdTabsList className="flex items-end text-sm">
|
|
82
|
-
{!!multiListItems.length && (<FdTabsTrigger onClick={() => setActiveTab(tabsNames.overview)} value={String(tabsNames.overview)} className="flex h-full min-w-32 items-center justify-center rounded-tl-md border px-1 py-3 outline-none hover:text-subtle-500 data-[state=active]:border-b-0 data-[state=inactive]:bg-muted data-[state=active]:font-semibold data-[state=active]:text-muted-foreground">
|
|
83
|
-
Overview
|
|
84
|
-
</FdTabsTrigger>)}
|
|
85
|
-
{viewConfig.isCommentTabVisible && (<FdTabsTrigger onClick={() => setActiveTab(tabsNames.comments)} value={String(tabsNames.comments)} className={cn("flex h-full min-w-32 items-center justify-center rounded-tr-md border px-1 py-3 outline-none hover:text-subtle-500 data-[state=active]:border-b-0 data-[state=inactive]:bg-muted data-[state=active]:font-semibold data-[state=active]:text-muted-foreground", { "rounded-tl-md": multiListItems?.length === 0 })}>
|
|
86
|
-
Comments
|
|
87
|
-
</FdTabsTrigger>)}
|
|
88
|
-
<hr className="h-px w-full border-t"/>
|
|
89
|
-
</FdTabsList>
|
|
90
|
-
<div className={cn("h-full max-w-full overflow-y-auto overflow-x-hidden pt-7", activeTab !== tabsNames.overview ? "hidden" : "visible")}>
|
|
91
|
-
<div className="flex w-full grow-0 basis-full flex-col gap-y-10 overflow-y-auto overflow-x-hidden">
|
|
92
|
-
<FdMultiList tableConfig={viewConfig.tableConfig} multiListItems={multiListItems} type={multiListType} onCustomAction={onRelationUnassignCallback} onMultiListResourceRelationChange={onViewMultiListRelationChangeCallback} commentList={commentList} onSavingStarting={() => {
|
|
93
|
-
setActiveSaveOperations((prev) => prev + 1);
|
|
94
|
-
}} onSavingEnding={() => {
|
|
95
|
-
setActiveSaveOperations((prev) => prev - 1);
|
|
96
|
-
}}/>
|
|
97
|
-
</div>
|
|
98
|
-
</div>
|
|
99
|
-
<div className={cn("h-full max-w-full overflow-y-auto overflow-x-hidden pt-3", activeTab !== tabsNames.comments ? "hidden" : "visible")}>
|
|
100
|
-
<div className="mt-2 flex w-full grow-0 basis-full flex-col gap-y-10 overflow-y-auto overflow-x-hidden">
|
|
101
|
-
<FdCommentList resourceName={resourceName} resourceId={resourceId} resources={commentList}/>
|
|
102
|
-
</div>
|
|
103
|
-
</div>
|
|
104
|
-
</FdTabs>)}
|
|
105
|
-
</div>
|
|
106
|
-
</div>));
|
|
107
|
-
}
|
|
108
|
-
export default FdViewResource;
|
package/packages/level2/meta/view/view-resource/templates/ManyToOneTableHeaderCellTemplate.jsx
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { FdBrowserDialog } from "@meta/browsers/browser/browser-dialog/FdBrowserDialog";
|
|
2
|
-
import { FdTableHeaderActionButton } from "@meta/table/header-cell/FdTableHeaderCellActionButton";
|
|
3
|
-
import { iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
4
|
-
import { useCallback } from "react";
|
|
5
|
-
export function ManyToOneTableHeaderCellTemplate({ parentResourcePropertyMeta, resourceId, multiListItem, onViewMultiListRelationChange, onCustomAction, }) {
|
|
6
|
-
const onBrowserCloseDialog = useCallback((newRelatedResource) => {
|
|
7
|
-
if (!newRelatedResource?.id)
|
|
8
|
-
return;
|
|
9
|
-
onViewMultiListRelationChange(multiListItem, newRelatedResource);
|
|
10
|
-
onCustomAction();
|
|
11
|
-
}, [multiListItem, onViewMultiListRelationChange, onCustomAction]);
|
|
12
|
-
return (<FdBrowserDialog propertyMeta={parentResourcePropertyMeta} currentResourceId={resourceId} closeDialog={onBrowserCloseDialog} trigger={<FdTableHeaderActionButton tooltipText="Change" icon={iconNames.link}/>}/>);
|
|
13
|
-
}
|
package/src/app/error.jsx
DELETED
package/src/app/global-error.jsx
DELETED
package/src/app/loading.jsx
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { FdImage } from "@fd-component-toolbox/image/FdImage";
|
|
2
|
-
export default async function Loading() {
|
|
3
|
-
return (<div className="flex size-full flex-col items-center justify-center gap-6">
|
|
4
|
-
<FdImage src="/favicon.ico" alt="Fernir Logo" width={40} height={40} className="opacity-90"/>
|
|
5
|
-
<div className="flex gap-2">
|
|
6
|
-
<span className="size-2 animate-bounce rounded-full bg-fd-tertiary-900 delay-0"/>
|
|
7
|
-
<span className="size-2 animate-bounce rounded-full bg-fd-tertiary-900 delay-150"/>
|
|
8
|
-
<span className="size-2 animate-bounce rounded-full bg-fd-tertiary-900 delay-300"/>
|
|
9
|
-
</div>
|
|
10
|
-
</div>);
|
|
11
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { FdImage } from "@fd-component-toolbox/image/FdImage";
|
|
3
|
-
import FdLink from "@fd-component-toolbox/link/FdLink";
|
|
4
|
-
import { footerItems } from "@/hd/footer/hd-footer";
|
|
5
|
-
import { HdFooterItem } from "@/hd/footer/hd-footer-item/HdFooterItem";
|
|
6
|
-
import { ArrowRight } from "lucide-react";
|
|
7
|
-
export function HdFooter() {
|
|
8
|
-
return (<footer className="absolute bottom-0 flex w-full justify-center bg-hd-footer-bg text-hd-text-primary">
|
|
9
|
-
<div className="w-4/5 pb-8 pt-12">
|
|
10
|
-
<div className="flex flex-col justify-between gap-11 lg:flex-row lg:gap-0">
|
|
11
|
-
<div className="flex gap-11 lg:flex-col">
|
|
12
|
-
<FdImage className="!rounded-none" priority src="/hd-logo.svg" alt="logo" width={48} height={48}/>
|
|
13
|
-
<FdLink href={footerItems[0].path} className="flex gap-3 whitespace-nowrap rounded-md bg-hd-button px-8 py-3 hover:bg-hd-button-hover active:bg-hd-button-active">
|
|
14
|
-
View homes
|
|
15
|
-
<ArrowRight size={24}/>
|
|
16
|
-
</FdLink>
|
|
17
|
-
</div>
|
|
18
|
-
<div className="flex justify-between lg:w-2/3">
|
|
19
|
-
{footerItems.map((item) => (<HdFooterItem key={`${item.name}_${item.path}`} item={item}></HdFooterItem>))}
|
|
20
|
-
</div>
|
|
21
|
-
</div>
|
|
22
|
-
<div className="mt-10 border-t border-hd-border pt-8 text-right text-hd-text-secondary">
|
|
23
|
-
© 2025 All rights reserved.
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
</footer>);
|
|
27
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import FdLink from "@fd-component-toolbox/link/FdLink";
|
|
3
|
-
export function HdFooterItem({ item }) {
|
|
4
|
-
return (<div className="flex flex-col">
|
|
5
|
-
<FdLink href={item.path} className="mb-8 text-xl font-semibold">
|
|
6
|
-
{item.name}
|
|
7
|
-
</FdLink>
|
|
8
|
-
<div className="flex flex-col gap-6 text-hd-text-secondary">
|
|
9
|
-
{item.children.map(({ name, path }) => (<FdLink key={`${name}_${path}`} href={path}>
|
|
10
|
-
{name}
|
|
11
|
-
</FdLink>))}
|
|
12
|
-
</div>
|
|
13
|
-
</div>);
|
|
14
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { FdIcon } from "@fd-component-toolbox/icon/FdIcon";
|
|
3
|
-
import { FdDropdownMenuItem } from "@fd-component-toolbox/dropdown-menu/FdDropdownMenu";
|
|
4
|
-
import { useCallback, useContext } from "react";
|
|
5
|
-
import { ResourceListContext } from "@meta/resource-list/ResourceList";
|
|
6
|
-
import { handleMenuItemClick } from "@/lm/ai-scan/AiScanAction.funcs";
|
|
7
|
-
import { useFdSearchParams } from "@meta/client/framework/hooks";
|
|
8
|
-
import { metaQueryParams } from "@fd-toolbox/constants/meta-query-params";
|
|
9
|
-
export function AiScanAction({ label, iconName, setIsLoading }) {
|
|
10
|
-
const resourceListContext = useContext(ResourceListContext) ?? undefined;
|
|
11
|
-
const selectedTableRows = resourceListContext?.tableComponentRef.current?.getSelectedRows();
|
|
12
|
-
const searchParams = useFdSearchParams();
|
|
13
|
-
const resourceName = searchParams.get(metaQueryParams.resource);
|
|
14
|
-
const onMenuItemClickCallback = useCallback(async () => {
|
|
15
|
-
await handleMenuItemClick(setIsLoading, resourceName, resourceListContext ?? undefined, selectedTableRows);
|
|
16
|
-
}, [setIsLoading, resourceName, resourceListContext, selectedTableRows]);
|
|
17
|
-
return (<FdDropdownMenuItem className="flex w-full cursor-pointer justify-start gap-2" onClick={onMenuItemClickCallback}>
|
|
18
|
-
{iconName && <FdIcon name={iconName}/>}
|
|
19
|
-
{label}
|
|
20
|
-
</FdDropdownMenuItem>);
|
|
21
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
3
|
-
import { FdDialog, FdDialogContent, FdDialogTrigger } from "@fd-component-toolbox/dialog/FdDialog";
|
|
4
|
-
import { parseMarkdown } from "@fd-component-toolbox/markdown/markdown-parser";
|
|
5
|
-
import { useState } from "react";
|
|
6
|
-
import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
|
|
7
|
-
export function AiScanWebsiteResultCellTemplate({ resource }) {
|
|
8
|
-
const [convertedText, setConvertedText] = useState([]);
|
|
9
|
-
useAsyncEffect(async () => {
|
|
10
|
-
if (resource.aiScan) {
|
|
11
|
-
setConvertedText(await parseMarkdown(resource.aiScan));
|
|
12
|
-
}
|
|
13
|
-
}, [resource]);
|
|
14
|
-
if (resource.aiScan) {
|
|
15
|
-
return (<FdDialog>
|
|
16
|
-
<FdDialogTrigger asChild>
|
|
17
|
-
<FdButton className="p-0" variant="link">
|
|
18
|
-
View Result
|
|
19
|
-
</FdButton>
|
|
20
|
-
</FdDialogTrigger>
|
|
21
|
-
<FdDialogContent className="max-h-[80%] w-full max-w-5xl overflow-scroll">
|
|
22
|
-
<div className="[&>ol>li]:ml-4 [&>ol]:list-decimal [&>p]:my-4 [&>p]:text-xl [&>p]:font-bold [&>ul>li]:ml-4 [&>ul]:list-disc">
|
|
23
|
-
{convertedText}
|
|
24
|
-
</div>
|
|
25
|
-
</FdDialogContent>
|
|
26
|
-
</FdDialog>);
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { FdCard, FdCardContent } from "@fd-component-toolbox/card/FdCard";
|
|
2
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
3
|
-
export function LmCardReport({ title, value, subtitle, className }) {
|
|
4
|
-
const contentVariation = subtitle ? "" : "text-center text-3xl";
|
|
5
|
-
return (<FdCard className={cn("size-full", className)}>
|
|
6
|
-
<FdCardContent>
|
|
7
|
-
<div className="py-2">{title}</div>
|
|
8
|
-
<div className={cn("text-2xl font-bold", contentVariation)}>{value}</div>
|
|
9
|
-
{subtitle && <p className="text-sm font-light">{subtitle}</p>}
|
|
10
|
-
</FdCardContent>
|
|
11
|
-
</FdCard>);
|
|
12
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { googlePlaceDropdownActions } from "@/lm/google-place/action-dropdown/google-place-dropdown-actions";
|
|
2
|
-
import { GooglePlaceActionDropdown } from "@/lm/google-place/action-dropdown/GooglePlaceActionDropdown";
|
|
3
|
-
import { GooglePlaceBusinessInfoCellTemplate } from "@/lm/google-place/cell-templates/GooglePlaceBusinessInfoCellTemplate";
|
|
4
|
-
import { LeadActionDropdown } from "@/lm/lead/action-dropdown/LeadActionDropdown";
|
|
5
|
-
import { leadDropdownActions } from "@/lm/lead/action-dropdown/lead-dropdown-actions";
|
|
6
|
-
import { LeadBusinessInfoCellTemplate } from "@/lm/lead/cell-templates/LeadBusinessInfoCellTemplate";
|
|
7
|
-
import { AiScanWebsiteResultCellTemplate } from "@/lm/ai-scan/cell-templates/AiScanWebsiteResultCellTemplate";
|
|
8
|
-
import { leadGroupCustomActionName, viewRelatedLeads, } from "@/lm/lead-group/table-custom-action/lead-group-table-custom-action";
|
|
9
|
-
import { GooglePlaceEmailsCellTemplate } from "@/lm/google-place/cell-templates/GooglePlaceEmailsCellTemplate";
|
|
10
|
-
import { getNewUuid } from "@fd-toolbox/uuids";
|
|
11
|
-
import { leadProps } from "@common/leads/props/lead-props";
|
|
12
|
-
import { tableCustomActionTypes } from "@meta/table/table-models";
|
|
13
|
-
import FdMultiselectCellTemplate from "@meta/table/body-cell/FdMultiselectCellTemplate";
|
|
14
|
-
import { websiteScanResultProps } from "@common/resources/props/website-scan-result-props";
|
|
15
|
-
import { googlePlaceProps } from "@common/leads/props/google-place-props";
|
|
16
|
-
import { resourceEditModes } from "@fd-toolbox/constants/resource-list-configs-enums";
|
|
17
|
-
import { userProps } from "@meta/core/resources/users/props/user-props";
|
|
18
|
-
import { resourceNames } from "@fd-toolbox/resources/resource-names";
|
|
19
|
-
import { iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
20
|
-
export const lmResourceConfigs = {
|
|
21
|
-
[resourceNames.lead]: getLeadResourceListConfig,
|
|
22
|
-
[resourceNames.googlePlace]: getGooglePlaceResourceListConfig,
|
|
23
|
-
[resourceNames.leadGroup]: getLeadGroupResourceListConfig,
|
|
24
|
-
[resourceNames.paymentPlan]: getPaymentPlanResourceListConfig,
|
|
25
|
-
[resourceNames.user]: getUserResourceListConfig,
|
|
26
|
-
};
|
|
27
|
-
function getLeadResourceListConfig(defaultConfig) {
|
|
28
|
-
defaultConfig.filtersTableInBetweenContainer = [
|
|
29
|
-
<LeadActionDropdown actions={leadDropdownActions} key={getNewUuid()}/>,
|
|
30
|
-
];
|
|
31
|
-
defaultConfig.oDataConfig = {
|
|
32
|
-
expands: [leadProps.screenshotBlob, leadProps.websiteScanResult, leadProps.leadToLeadGroupList],
|
|
33
|
-
};
|
|
34
|
-
defaultConfig.tableConfig.columnConfigs = {
|
|
35
|
-
[leadProps.businessInfo]: { cellTemplate: LeadBusinessInfoCellTemplate },
|
|
36
|
-
[leadProps.leadEmailList]: {
|
|
37
|
-
cellTemplate: (props) => (<FdMultiselectCellTemplate resource={props.resource} entityPath={leadProps.websiteScanResult} valueProperty={websiteScanResultProps.emails}/>),
|
|
38
|
-
},
|
|
39
|
-
[leadProps.aiScan]: { cellTemplate: AiScanWebsiteResultCellTemplate },
|
|
40
|
-
};
|
|
41
|
-
defaultConfig.tableConfig.multiSelect = true;
|
|
42
|
-
return defaultConfig;
|
|
43
|
-
}
|
|
44
|
-
function getGooglePlaceResourceListConfig(defaultConfig) {
|
|
45
|
-
defaultConfig.filtersTableInBetweenContainer = [
|
|
46
|
-
<GooglePlaceActionDropdown actions={googlePlaceDropdownActions} key={getNewUuid()}/>,
|
|
47
|
-
];
|
|
48
|
-
defaultConfig.tableConfig.columnConfigs = {
|
|
49
|
-
[googlePlaceProps.businessInfo]: { cellTemplate: GooglePlaceBusinessInfoCellTemplate },
|
|
50
|
-
[googlePlaceProps.emails]: { cellTemplate: GooglePlaceEmailsCellTemplate },
|
|
51
|
-
};
|
|
52
|
-
defaultConfig.tableConfig.multiSelect = true;
|
|
53
|
-
return defaultConfig;
|
|
54
|
-
}
|
|
55
|
-
function getLeadGroupResourceListConfig(defaultConfig) {
|
|
56
|
-
defaultConfig.tableConfig.customActions ??= [];
|
|
57
|
-
defaultConfig.tableConfig.customActions.push({
|
|
58
|
-
name: leadGroupCustomActionName,
|
|
59
|
-
icon: iconNames.visibility,
|
|
60
|
-
actionType: tableCustomActionTypes.icon,
|
|
61
|
-
cellAction: viewRelatedLeads,
|
|
62
|
-
});
|
|
63
|
-
return defaultConfig;
|
|
64
|
-
}
|
|
65
|
-
function getPaymentPlanResourceListConfig(defaultConfig) {
|
|
66
|
-
defaultConfig.tableConfig.editMode = resourceEditModes.simple;
|
|
67
|
-
return defaultConfig;
|
|
68
|
-
}
|
|
69
|
-
function getUserResourceListConfig(defaultConfig) {
|
|
70
|
-
defaultConfig.tableConfig.columnConfigs = { [userProps.lastLoginDate]: { isDateAsTimeAgo: true } };
|
|
71
|
-
return defaultConfig;
|
|
72
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { FdDropdownMenu, FdDropdownMenuContent, FdDropdownMenuItem, FdDropdownMenuTrigger, } from "@fd-component-toolbox/dropdown-menu/FdDropdownMenu";
|
|
3
|
-
import { FdIcon } from "@fd-component-toolbox/icon/FdIcon";
|
|
4
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
5
|
-
import { createElement, Fragment, useContext, useState, useCallback } from "react";
|
|
6
|
-
import { ResourceListContext } from "@meta/resource-list/ResourceList";
|
|
7
|
-
import { Spinner } from "@fd-component-toolbox/spinner/Spinner";
|
|
8
|
-
import { handleActionClick, handleDropdownOpenChange, } from "@/lm/google-place/action-dropdown/GooglePlaceActionDropdown.funcs";
|
|
9
|
-
export function GooglePlaceActionDropdown({ actions }) {
|
|
10
|
-
const resourceListContext = useContext(ResourceListContext);
|
|
11
|
-
const [isMenuOpened, setIsMenuOpened] = useState(false);
|
|
12
|
-
const [isHidden, setIsHidden] = useState(false);
|
|
13
|
-
const [isLoading, setIsLoading] = useState(false);
|
|
14
|
-
const onDropdownOpenChange = useCallback((open) => {
|
|
15
|
-
handleDropdownOpenChange(open, setIsMenuOpened, setIsHidden);
|
|
16
|
-
}, []);
|
|
17
|
-
const onActionClick = useCallback(async (onClick) => {
|
|
18
|
-
await handleActionClick({ onClick, setIsLoading, resourceListContext });
|
|
19
|
-
}, [resourceListContext]);
|
|
20
|
-
return (<FdDropdownMenu open={isMenuOpened} onOpenChange={onDropdownOpenChange}>
|
|
21
|
-
<FdDropdownMenuTrigger asChild>
|
|
22
|
-
<FdButton className="inline-flex w-fit items-center" variant="outline" size="default">
|
|
23
|
-
{isLoading && <Spinner size="small" className="mr-2"/>}
|
|
24
|
-
Actions
|
|
25
|
-
</FdButton>
|
|
26
|
-
</FdDropdownMenuTrigger>
|
|
27
|
-
<FdDropdownMenuContent align="start" className={isHidden ? "hidden" : ""}>
|
|
28
|
-
{actions.map(({ id, label, iconName, onClick, component }) => (<Fragment key={id}>
|
|
29
|
-
{component ? (createElement(component, {
|
|
30
|
-
label,
|
|
31
|
-
iconName,
|
|
32
|
-
setIsMenuOpened,
|
|
33
|
-
setIsHidden,
|
|
34
|
-
setIsLoading,
|
|
35
|
-
})) : (<FdDropdownMenuItem className="flex w-full cursor-pointer justify-start gap-2" onClick={() => onActionClick(onClick)}>
|
|
36
|
-
{iconName && <FdIcon name={iconName}/>}
|
|
37
|
-
{label}
|
|
38
|
-
</FdDropdownMenuItem>)}
|
|
39
|
-
</Fragment>))}
|
|
40
|
-
</FdDropdownMenuContent>
|
|
41
|
-
</FdDropdownMenu>);
|
|
42
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { FdIcon } from "@fd-component-toolbox/icon/FdIcon";
|
|
3
|
-
import { ResourceListContext } from "@meta/resource-list/ResourceList";
|
|
4
|
-
import { useContext, useState } from "react";
|
|
5
|
-
import { FdBrowserDialog } from "@meta/browsers/browser/browser-dialog/FdBrowserDialog";
|
|
6
|
-
import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
|
|
7
|
-
import { handleCloseBrowserDialog, loadMeta, } from "@/lm/google-place/actions/GooglePlaceSaveToGroupAction.funcs";
|
|
8
|
-
import { FdDropdownMenuItem } from "@fd-component-toolbox/dropdown-menu/FdDropdownMenu";
|
|
9
|
-
export function GooglePlaceSaveToGroupAction({ label, iconName, setIsMenuOpened, setIsHidden, setIsLoading, }) {
|
|
10
|
-
const [relatedResourcePropertyMeta, setRelatedResourcePropertyMeta] = useState();
|
|
11
|
-
const resourceListContext = useContext(ResourceListContext) ?? undefined;
|
|
12
|
-
useAsyncEffect(async () => {
|
|
13
|
-
loadMeta(setRelatedResourcePropertyMeta);
|
|
14
|
-
}, []);
|
|
15
|
-
if (!relatedResourcePropertyMeta) {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
return (<FdBrowserDialog trigger={<FdDropdownMenuItem className="flex w-full cursor-pointer justify-start gap-2" onSelect={(event) => event.preventDefault()} onClick={() => setIsHidden(true)}>
|
|
19
|
-
{iconName && <FdIcon name={iconName}/>}
|
|
20
|
-
{label}
|
|
21
|
-
</FdDropdownMenuItem>} currentResourceId={relatedResourcePropertyMeta.id} propertyMeta={relatedResourcePropertyMeta} closeDialog={(leadGroup) => handleCloseBrowserDialog(setIsLoading, setIsMenuOpened, leadGroup, resourceListContext)}/>);
|
|
22
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { LeadGooglePlaceInfo } from "@/lm/lead/lead-google-place/LeadGooglePlaceInfo";
|
|
3
|
-
import { LeadGooglePlaceIndicators } from "@/lm/lead/lead-google-place/LeadGooglePlaceIndicators";
|
|
4
|
-
import { LeadGooglePlaceIndicator } from "@/lm/lead/lead-google-place/LeadGooglePlaceIndicator";
|
|
5
|
-
import { iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
6
|
-
import { lmTooltipLabels } from "@/lm/constants/lm-tooltip-labels";
|
|
7
|
-
import { FdWebsiteScanResult } from "@client/website-scan/FdWebsiteScanResult";
|
|
8
|
-
export function GooglePlaceBusinessInfoCellTemplate({ resource }) {
|
|
9
|
-
return (<div className="flex flex-col gap-3">
|
|
10
|
-
<LeadGooglePlaceInfo resource={resource}/>
|
|
11
|
-
<LeadGooglePlaceIndicators indicators={[
|
|
12
|
-
{
|
|
13
|
-
content: (<LeadGooglePlaceIndicator icon={iconNames.fileText} isActive={!!resource.description}/>),
|
|
14
|
-
tooltip: (<p>
|
|
15
|
-
{resource.description
|
|
16
|
-
? `${lmTooltipLabels.description}: ${resource.description}`
|
|
17
|
-
: `${lmTooltipLabels.hasNo} ${lmTooltipLabels.description}`}
|
|
18
|
-
</p>),
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
content: (<LeadGooglePlaceIndicator icon={iconNames.clock} isActive={!!resource.workingHours}/>),
|
|
22
|
-
tooltip: !resource.workingHours ? (<p>{`${lmTooltipLabels.hasNo} ${lmTooltipLabels.workingHours}`}</p>) : (<div className="flex flex-col gap-1">
|
|
23
|
-
{resource.workingHours.split(",").map((value) => (<p key={value}>{value}</p>))}
|
|
24
|
-
</div>),
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
content: (<LeadGooglePlaceIndicator icon={iconNames.image} isActive={resource.numberOfImages !== undefined && resource.numberOfImages > 0}>
|
|
28
|
-
{resource.numberOfImages}
|
|
29
|
-
</LeadGooglePlaceIndicator>),
|
|
30
|
-
tooltip: (<p>
|
|
31
|
-
{resource.numberOfImages
|
|
32
|
-
? `${lmTooltipLabels.numberOfImages}: ${resource.numberOfImages}`
|
|
33
|
-
: `${lmTooltipLabels.hasNo} ${lmTooltipLabels.images}`}
|
|
34
|
-
</p>),
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
content: (<LeadGooglePlaceIndicator icon={iconNames.camera} isActive={resource.numberOfVideos !== undefined && resource.numberOfVideos > 0}>
|
|
38
|
-
{resource.numberOfVideos}
|
|
39
|
-
</LeadGooglePlaceIndicator>),
|
|
40
|
-
tooltip: (<p>
|
|
41
|
-
{resource.numberOfVideos
|
|
42
|
-
? `${lmTooltipLabels.numberOfVideos}: ${resource.numberOfVideos}`
|
|
43
|
-
: `${lmTooltipLabels.hasNo} ${lmTooltipLabels.videos}`}
|
|
44
|
-
</p>),
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
content: (<LeadGooglePlaceIndicator icon={iconNames.pencil2} isActive={resource.numberOfPosts !== undefined && resource.numberOfPosts > 0}>
|
|
48
|
-
{resource.numberOfPosts}
|
|
49
|
-
</LeadGooglePlaceIndicator>),
|
|
50
|
-
tooltip: (<p>
|
|
51
|
-
{resource.numberOfPosts
|
|
52
|
-
? `${lmTooltipLabels.numberOfPosts}: ${resource.numberOfPosts}`
|
|
53
|
-
: `${lmTooltipLabels.hasNo} ${lmTooltipLabels.posts}`}
|
|
54
|
-
</p>),
|
|
55
|
-
},
|
|
56
|
-
]}/>
|
|
57
|
-
{resource.websiteScanResult && (<FdWebsiteScanResult websiteScanResult={resource.websiteScanResult}/>)}
|
|
58
|
-
</div>);
|
|
59
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { useEffect, useState } from "react";
|
|
3
|
-
import { FdMultiselect, FdMultiselectTrigger, FdMultiselectInput, FdMultiselectContent, FdMultiselectList, FdMultiselectItem, } from "@fd-component-toolbox/multiselect/FdMultiselect";
|
|
4
|
-
import { FdFadeOutText } from "@fd-component-toolbox/fade-out-text/FdFadeOutText";
|
|
5
|
-
import { syncEmailsFromResource } from "@/lm/google-place/cell-templates/GooglePlaceEmailsCellTemplate.funcs";
|
|
6
|
-
export function GooglePlaceEmailsCellTemplate({ resource }) {
|
|
7
|
-
const [emails, setEmails] = useState();
|
|
8
|
-
const [selectedEmails, setSelectedEmails] = useState([]);
|
|
9
|
-
useEffect(() => {
|
|
10
|
-
syncEmailsFromResource(setEmails, setSelectedEmails, resource);
|
|
11
|
-
}, [resource]);
|
|
12
|
-
if (!emails)
|
|
13
|
-
return null;
|
|
14
|
-
const emailsMap = new Map();
|
|
15
|
-
for (const email of emails) {
|
|
16
|
-
emailsMap.set(email, email);
|
|
17
|
-
}
|
|
18
|
-
return (<div>
|
|
19
|
-
{emails.length === 1 ? (<FdFadeOutText>
|
|
20
|
-
<p>{emails[0]}</p>
|
|
21
|
-
</FdFadeOutText>) : (<FdMultiselect values={selectedEmails} onValuesChange={setSelectedEmails} disabled={false} displayValues={emailsMap} variant="float" withSelectAll>
|
|
22
|
-
<FdMultiselectTrigger>
|
|
23
|
-
<FdMultiselectInput className="mt-0 w-full"/>
|
|
24
|
-
</FdMultiselectTrigger>
|
|
25
|
-
<FdMultiselectContent className="absolute">
|
|
26
|
-
<FdMultiselectList className="top-9 z-50">
|
|
27
|
-
{emails.map((email) => (<FdMultiselectItem className="min-h-6 whitespace-nowrap" key={email} value={email}>
|
|
28
|
-
{email}
|
|
29
|
-
</FdMultiselectItem>))}
|
|
30
|
-
</FdMultiselectList>
|
|
31
|
-
</FdMultiselectContent>
|
|
32
|
-
</FdMultiselect>)}
|
|
33
|
-
</div>);
|
|
34
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { FdIcon } from "@fd-component-toolbox/icon/FdIcon";
|
|
2
|
-
import { useCallback, useContext } from "react";
|
|
3
|
-
import { FdDropdownMenuItem } from "@fd-component-toolbox/dropdown-menu/FdDropdownMenu";
|
|
4
|
-
import { handleGooglePlaceScan } from "@/lm/google-place/cell-templates/GooglePlaceScanAction.funcs";
|
|
5
|
-
import { ResourceListContext } from "@meta/resource-list/ResourceList";
|
|
6
|
-
export function GooglePlaceScanAction({ label, iconName, setIsLoading }) {
|
|
7
|
-
const resourceListContext = useContext(ResourceListContext) ?? undefined;
|
|
8
|
-
const onScan = useCallback(async () => {
|
|
9
|
-
handleGooglePlaceScan(setIsLoading, resourceListContext ?? undefined);
|
|
10
|
-
}, [setIsLoading, resourceListContext]);
|
|
11
|
-
return (<FdDropdownMenuItem className="flex w-full cursor-pointer justify-start gap-2" onClick={onScan}>
|
|
12
|
-
{iconName && <FdIcon name={iconName}/>}
|
|
13
|
-
{label}
|
|
14
|
-
</FdDropdownMenuItem>);
|
|
15
|
-
}
|