@mohasinac/appkit 4.30.19 → 4.31.1
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/dist/_internal/client/features/layout/useSidebarSearch.d.ts +21 -5
- package/dist/_internal/client/features/layout/useSidebarSearch.js +27 -6
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +23 -3
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +106 -87
- package/dist/_internal/client/features/lottery/LotteryPullForm.d.ts +16 -5
- package/dist/_internal/client/features/lottery/LotteryPullForm.js +65 -40
- package/dist/_internal/server/features/auth/permissions.d.ts +2 -0
- package/dist/_internal/server/features/auth/permissions.js +3 -2
- package/dist/_internal/server/features/categories/data.js +15 -4
- package/dist/_internal/server/features/classified/index.d.ts +0 -1
- package/dist/_internal/server/features/classified/index.js +0 -1
- package/dist/_internal/server/features/digital-code/index.d.ts +0 -1
- package/dist/_internal/server/features/digital-code/index.js +0 -1
- package/dist/_internal/server/features/live/index.d.ts +0 -1
- package/dist/_internal/server/features/live/index.js +0 -1
- package/dist/_internal/server/features/products/data.js +15 -5
- package/dist/_internal/server/features/products/list-public.d.ts +9 -0
- package/dist/_internal/server/features/products/list-public.js +95 -7
- package/dist/_internal/server/features/site-settings/adapters.d.ts +2 -2
- package/dist/_internal/server/features/site-settings/adapters.js +8 -5
- package/dist/_internal/server/features/tester/visibility.d.ts +2 -1
- package/dist/_internal/server/features/tester/visibility.js +2 -2
- package/dist/_internal/server/functions/scheduled.d.ts +3 -1
- package/dist/_internal/server/functions/scheduled.js +27 -1
- package/dist/_internal/server/jobs/core/hardBanCascade.js +4 -0
- package/dist/_internal/server/jobs/core/index.d.ts +2 -0
- package/dist/_internal/server/jobs/core/index.js +2 -0
- package/dist/_internal/server/jobs/core/pageViewPrune.d.ts +10 -0
- package/dist/_internal/server/jobs/core/pageViewPrune.js +44 -0
- package/dist/_internal/server/jobs/core/pageViewRollup.d.ts +2 -0
- package/dist/_internal/server/jobs/core/pageViewRollup.js +87 -0
- package/dist/_internal/server/jobs/handlers/index.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/index.js +2 -0
- package/dist/_internal/server/jobs/handlers/pageViewPrune.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/pageViewPrune.js +2 -0
- package/dist/_internal/server/jobs/handlers/pageViewRollup.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/pageViewRollup.js +2 -0
- package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
- package/dist/_internal/shared/actions/action-registry.js +69 -22
- package/dist/_internal/shared/checkout/rules/classified.rule.d.ts +9 -4
- package/dist/_internal/shared/checkout/rules/classified.rule.js +7 -2
- package/dist/_internal/shared/features/layout/matchesNavQuery.d.ts +14 -0
- package/dist/_internal/shared/features/layout/matchesNavQuery.js +72 -0
- package/dist/_internal/shared/features/layout/types.d.ts +37 -1
- package/dist/_internal/shared/features/layout/types.js +19 -1
- package/dist/_internal/shared/features/notifications/action-url.d.ts +9 -1
- package/dist/_internal/shared/features/notifications/action-url.js +47 -0
- package/dist/_internal/shared/features/offers/config.d.ts +65 -0
- package/dist/_internal/shared/features/offers/config.js +73 -2
- package/dist/_internal/shared/features/orders/schema.d.ts +19 -1
- package/dist/_internal/shared/features/orders/schema.js +22 -2
- package/dist/_internal/shared/features/site-settings/types.d.ts +12 -3
- package/dist/_internal/shared/listing-types/capabilities.d.ts +8 -2
- package/dist/_internal/shared/listing-types/capabilities.js +6 -1
- package/dist/_internal/shared/listing-types/classified/ctas.js +6 -1
- package/dist/_internal/shared/listing-types/feature-flags.d.ts +10 -5
- package/dist/_internal/shared/listing-types/feature-flags.js +11 -6
- package/dist/client.d.ts +37 -20
- package/dist/client.js +36 -14
- package/dist/configs/next.js +10 -2
- package/dist/constants/api-endpoints.d.ts +18 -54
- package/dist/constants/api-endpoints.js +6 -26
- package/dist/constants/field-names.d.ts +6 -24
- package/dist/constants/field-names.js +10 -27
- package/dist/constants/geo/countries.d.ts +50 -0
- package/dist/constants/geo/countries.js +129 -0
- package/dist/constants/geo/subdivisions.d.ts +13 -0
- package/dist/constants/geo/subdivisions.js +104 -0
- package/dist/constants/index.d.ts +2 -2
- package/dist/constants/index.js +2 -2
- package/dist/constants/table-keys.d.ts +24 -0
- package/dist/constants/table-keys.js +28 -0
- package/dist/contracts/extend.d.ts +0 -9
- package/dist/contracts/index.d.ts +1 -1
- package/dist/contracts/realtime-session.js +7 -0
- package/dist/core/browser.d.ts +1 -1
- package/dist/core/browser.js +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/site-config.d.ts +0 -3
- package/dist/core/site-config.js +0 -3
- package/dist/errors/messages.d.ts +0 -8
- package/dist/errors/messages.js +0 -9
- package/dist/features/about/schemas/index.d.ts +8 -8
- package/dist/features/account/components/AddressFilters.js +32 -11
- package/dist/features/account/components/AddressForm.d.ts +26 -25
- package/dist/features/account/components/AddressForm.js +81 -103
- package/dist/features/account/components/AddressesIndexListing.js +8 -4
- package/dist/features/account/components/UserSidebar.d.ts +3 -4
- package/dist/features/account/components/UserSupportView.js +89 -58
- package/dist/features/account/components/index.d.ts +1 -7
- package/dist/features/account/components/index.js +0 -3
- package/dist/features/account/hooks/useAddresses.d.ts +4 -3
- package/dist/features/account/hooks/useAddresses.js +4 -6
- package/dist/features/account/hooks/useCollapsedSections.d.ts +51 -10
- package/dist/features/account/hooks/useCollapsedSections.js +211 -38
- package/dist/features/account/hooks/useProfile.d.ts +8 -0
- package/dist/features/account/index.d.ts +0 -3
- package/dist/features/account/index.js +0 -3
- package/dist/features/account/schemas/index.d.ts +0 -92
- package/dist/features/account/schemas/index.js +42 -20
- package/dist/features/addresses/components/AddressLocationFields.d.ts +13 -0
- package/dist/features/addresses/components/AddressLocationFields.js +41 -0
- package/dist/features/addresses/hooks/usePostalLookup.d.ts +17 -0
- package/dist/features/addresses/hooks/usePostalLookup.js +133 -0
- package/dist/features/addresses/schemas/address-form.d.ts +423 -0
- package/dist/features/addresses/schemas/address-form.js +212 -0
- package/dist/features/addresses/schemas/index.d.ts +1 -0
- package/dist/features/addresses/schemas/index.js +8 -0
- package/dist/features/admin/actions/admin-read-actions.d.ts +1 -1
- package/dist/features/admin/actions/index.d.ts +0 -1
- package/dist/features/admin/actions/index.js +0 -1
- package/dist/features/admin/actions/notification-actions.js +1 -41
- package/dist/features/admin/components/AdminActionIndexView.d.ts +32 -0
- package/dist/features/admin/components/AdminActionIndexView.js +128 -0
- package/dist/features/admin/components/AdminAdEditorView.js +159 -163
- package/dist/features/admin/components/AdminAddressEditorView.js +97 -55
- package/dist/features/admin/components/AdminBrandEditorView.d.ts +15 -0
- package/dist/features/admin/components/AdminBrandEditorView.js +113 -77
- package/dist/features/admin/components/AdminBundleEditorView.d.ts +19 -9
- package/dist/features/admin/components/AdminBundleEditorView.js +136 -168
- package/dist/features/admin/components/AdminCategoryEditorView.js +120 -43
- package/dist/features/admin/components/AdminCouponEditorView.js +145 -109
- package/dist/features/admin/components/AdminEmployeeEditorView.js +125 -56
- package/dist/features/admin/components/AdminFaqEditorView.js +112 -58
- package/dist/features/admin/components/AdminFeatureEditorView.js +108 -68
- package/dist/features/admin/components/AdminNavEditorView.js +69 -44
- package/dist/features/admin/components/AdminOrderEditorView.js +47 -10
- package/dist/features/admin/components/AdminPrizeDrawsView.js +16 -2
- package/dist/features/admin/components/AdminSidebar.d.ts +11 -7
- package/dist/features/admin/components/AdminSiteSettingsView.js +37 -37
- package/dist/features/admin/components/AdminStoreEditorView.js +75 -52
- package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +71 -30
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +95 -65
- package/dist/features/admin/components/BrandQuickCreateForm.d.ts +10 -0
- package/dist/features/admin/components/BrandQuickCreateForm.js +49 -26
- package/dist/features/admin/components/CategoryQuickCreateForm.d.ts +11 -0
- package/dist/features/admin/components/CategoryQuickCreateForm.js +48 -26
- package/dist/features/admin/components/index.d.ts +2 -2
- package/dist/features/admin/components/index.js +1 -1
- package/dist/features/admin/constants/site-settings-tabs.d.ts +120 -0
- package/dist/features/admin/constants/site-settings-tabs.js +152 -0
- package/dist/features/admin/index.d.ts +0 -3
- package/dist/features/admin/index.js +0 -2
- package/dist/features/admin/repository/analytics-rollup.repository.d.ts +35 -0
- package/dist/features/admin/repository/analytics-rollup.repository.js +30 -0
- package/dist/features/admin/schemas/admin-editor-forms.d.ts +56 -57
- package/dist/features/admin/schemas/admin-editor-forms.js +97 -54
- package/dist/features/admin/schemas/admin-ops-forms.d.ts +57 -5
- package/dist/features/admin/schemas/admin-ops-forms.js +104 -20
- package/dist/features/admin/schemas/admin-user-form.js +7 -0
- package/dist/features/admin/schemas/firestore.d.ts +48 -95
- package/dist/features/admin/schemas/firestore.js +15 -151
- package/dist/features/admin/schemas/nav-item-form.js +9 -2
- package/dist/features/admin/server.d.ts +0 -4
- package/dist/features/admin/server.js +0 -2
- package/dist/features/admin/types/index.d.ts +0 -7
- package/dist/features/analytics/repository/page-views.repository.d.ts +14 -0
- package/dist/features/analytics/repository/page-views.repository.js +24 -0
- package/dist/features/auth/actions/index.d.ts +0 -1
- package/dist/features/auth/actions/index.js +0 -1
- package/dist/features/auth/actions/realtime-token-actions.js +1 -12
- package/dist/features/auth/auth-helpers.js +5 -7
- package/dist/features/auth/components/Guards.js +2 -1
- package/dist/features/auth/components/LoginForm.d.ts +0 -2
- package/dist/features/auth/components/LoginForm.js +1 -3
- package/dist/features/auth/components/RegisterForm.js +62 -19
- package/dist/features/auth/permissions/constants.d.ts +27 -1
- package/dist/features/auth/role-predicates.d.ts +75 -7
- package/dist/features/auth/role-predicates.js +28 -2
- package/dist/features/auth/schemas/firestore.d.ts +22 -0
- package/dist/features/auth/schemas/index.d.ts +1 -1
- package/dist/features/auth/schemas/index.js +44 -8
- package/dist/features/auth/types/index.d.ts +14 -1
- package/dist/features/blog/api/route.js +10 -2
- package/dist/features/blog/components/BlogIndexListing.js +1 -1
- package/dist/features/blog/hooks/useBlog.js +2 -2
- package/dist/features/blog/schemas/index.d.ts +4 -0
- package/dist/features/blog/schemas/index.js +2 -0
- package/dist/features/blog/types/index.d.ts +1 -1
- package/dist/features/catalogue/components/CatalogueItemEditorView.d.ts +22 -0
- package/dist/features/catalogue/components/CatalogueItemEditorView.js +112 -52
- package/dist/features/catalogue/schemas/validation.d.ts +4 -4
- package/dist/features/catalogue/schemas/validation.js +47 -10
- package/dist/features/categories/schemas/bundle-form.d.ts +142 -0
- package/dist/features/categories/schemas/bundle-form.js +149 -0
- package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +5 -4
- package/dist/features/classified/components/ClassifiedDetailPageView.js +37 -16
- package/dist/features/consultation/components/ConsultationForm.js +1 -1
- package/dist/features/consultation/schemas/index.js +34 -10
- package/dist/features/corporate/schemas/index.js +36 -15
- package/dist/features/filters/FilterPanel.js +3 -3
- package/dist/features/filters/RangeFilter.d.ts +10 -0
- package/dist/features/filters/RangeFilter.js +41 -4
- package/dist/features/homepage/components/MarketplaceHomepageView.js +24 -5
- package/dist/features/homepage/hooks/useBlogArticles.js +1 -1
- package/dist/features/layout/BottomActions.js +84 -11
- package/dist/features/layout/BottomActionsContext.d.ts +1 -6
- package/dist/features/layout/BottomActionsContext.js +1 -1
- package/dist/features/layout/hooks/useBottomActions.js +2 -2
- package/dist/features/layout/hooks/useFormBottomActions.d.ts +12 -1
- package/dist/features/layout/hooks/useFormBottomActions.js +12 -6
- package/dist/features/lottery/schemas/config-write.d.ts +9 -5
- package/dist/features/lottery/schemas/config-write.js +69 -9
- package/dist/features/orders/schemas/buyer-forms.d.ts +6 -3
- package/dist/features/orders/schemas/buyer-forms.js +31 -3
- package/dist/features/orders/schemas/index.d.ts +2 -2
- package/dist/features/products/components/GroupSettingsPanel.js +3 -1
- package/dist/features/products/components/MakeOfferButton.d.ts +13 -2
- package/dist/features/products/components/MakeOfferButton.js +33 -11
- package/dist/features/products/components/ProductDetailActions.js +0 -1
- package/dist/features/products/components/ProductDetailPageView.d.ts +7 -3
- package/dist/features/products/components/ProductDetailPageView.js +8 -5
- package/dist/features/products/constants/action-defs.d.ts +1 -2
- package/dist/features/products/constants/action-defs.js +40 -43
- package/dist/features/products/repository/products.repository.d.ts +5 -1
- package/dist/features/products/repository/products.repository.js +23 -1
- package/dist/features/products/schemas/firestore.d.ts +7 -3
- package/dist/features/products/schemas/product-features.validators.js +3 -0
- package/dist/features/promotions/components/CouponCard.js +8 -7
- package/dist/features/scams/schemas/firestore.d.ts +15 -1
- package/dist/features/scams/schemas/report-form.d.ts +5 -5
- package/dist/features/scams/schemas/report-form.js +18 -3
- package/dist/features/search/action-index/derive.d.ts +49 -0
- package/dist/features/search/action-index/derive.js +121 -0
- package/dist/features/search/action-index/repository.d.ts +42 -0
- package/dist/features/search/action-index/repository.js +100 -0
- package/dist/features/search/action-index/settings-entries.d.ts +41 -0
- package/dist/features/search/action-index/settings-entries.js +268 -0
- package/dist/features/search/action-index/types.d.ts +81 -0
- package/dist/features/search/action-index/types.js +102 -0
- package/dist/features/search/action-index/validate-entry.d.ts +34 -0
- package/dist/features/search/action-index/validate-entry.js +114 -0
- package/dist/features/search/hooks/useNavSuggestions.d.ts +5 -1
- package/dist/features/search/hooks/useNavSuggestions.js +23 -3
- package/dist/features/search/repository/search.repository.js +3 -1
- package/dist/features/seller/actions/offer-actions.js +43 -24
- package/dist/features/seller/actions/seller-actions.js +29 -5
- package/dist/features/seller/components/CategoryChipPicker.d.ts +9 -0
- package/dist/features/seller/components/CategoryChipPicker.js +12 -0
- package/dist/features/seller/components/SellerAddressesView.js +5 -1
- package/dist/features/seller/components/SellerAnalyticsAlertsView.js +83 -43
- package/dist/features/seller/components/SellerArtView.d.ts +14 -7
- package/dist/features/seller/components/SellerArtView.js +4 -119
- package/dist/features/seller/components/SellerClassifiedView.d.ts +14 -7
- package/dist/features/seller/components/SellerClassifiedView.js +4 -124
- package/dist/features/seller/components/SellerCouponEditorView.d.ts +22 -1
- package/dist/features/seller/components/SellerCouponEditorView.js +91 -45
- package/dist/features/seller/components/SellerDigitalCodesView.d.ts +14 -7
- package/dist/features/seller/components/SellerDigitalCodesView.js +4 -126
- package/dist/features/seller/components/SellerListingTypeView.d.ts +66 -0
- package/dist/features/seller/components/SellerListingTypeView.js +277 -0
- package/dist/features/seller/components/SellerLiveView.d.ts +14 -7
- package/dist/features/seller/components/SellerLiveView.js +4 -126
- package/dist/features/seller/components/SellerSidebar.d.ts +3 -6
- package/dist/features/seller/components/SellerStickersView.d.ts +14 -7
- package/dist/features/seller/components/SellerStickersView.js +4 -119
- package/dist/features/seller/components/SellerSupportView.d.ts +31 -0
- package/dist/features/seller/components/SellerSupportView.js +100 -0
- package/dist/features/seller/components/index.d.ts +4 -8
- package/dist/features/seller/components/index.js +2 -4
- package/dist/features/seller/index.d.ts +0 -1
- package/dist/features/seller/index.js +0 -1
- package/dist/features/seller/schemas/coupon-form.d.ts +214 -0
- package/dist/features/seller/schemas/coupon-form.js +155 -23
- package/dist/features/seller/schemas/offer-forms.d.ts +16 -7
- package/dist/features/seller/schemas/offer-forms.js +28 -12
- package/dist/features/shell/FormShell.js +2 -2
- package/dist/features/shell/QuickFormDrawer.js +2 -2
- package/dist/features/shell/SectionForm.d.ts +19 -1
- package/dist/features/shell/SectionForm.js +104 -17
- package/dist/features/shell/build-sections.d.ts +23 -0
- package/dist/features/shell/build-sections.js +106 -8
- package/dist/features/shell/field-ui-meta.d.ts +44 -0
- package/dist/features/shell/field-ui-meta.js +14 -7
- package/dist/features/shell/form-sections.d.ts +46 -0
- package/dist/features/shell/form-sections.js +114 -0
- package/dist/features/shipments/components/AdminShipmentEditorView.js +87 -64
- package/dist/features/shipments/schemas/validation.d.ts +2 -2
- package/dist/features/shipments/schemas/validation.js +44 -13
- package/dist/features/store-extensions/schemas/custom-role-form.js +6 -2
- package/dist/features/store-extensions/schemas/listing-template-form.d.ts +7 -7
- package/dist/features/store-extensions/schemas/payout-method-form.js +14 -0
- package/dist/features/stores/actions/store-query-actions.js +3 -2
- package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -1
- package/dist/features/stores/api/[storeSlug]/products/route.js +3 -1
- package/dist/features/support/repository/support.repository.d.ts +21 -0
- package/dist/features/support/repository/support.repository.js +63 -0
- package/dist/features/support/schemas/firestore.d.ts +27 -2
- package/dist/features/support/schemas/firestore.js +2 -0
- package/dist/features/support/schemas/ticket-create-form.js +7 -0
- package/dist/features/tester/schemas/checklist-item-form.d.ts +43 -0
- package/dist/features/tester/schemas/checklist-item-form.js +109 -0
- package/dist/features/tester/seed-data/blog-tester-seed-data.js +2 -2
- package/dist/features/tester/seed-data/categories-tester-seed-data.js +2 -2
- package/dist/features/tester/seed-data/events-tester-seed-data.js +5 -5
- package/dist/features/tester/seed-data/orders-tester-seed-data.js +2 -2
- package/dist/features/tester/seed-data/products-tester-seed-data.js +48 -49
- package/dist/features/tester/seed-data/stores-tester-seed-data.js +3 -3
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +275 -29
- package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +48 -12
- package/dist/http/api-handler.js +2 -1
- package/dist/index.d.ts +24 -103
- package/dist/index.js +33 -141
- package/dist/jobs.d.ts +1 -1
- package/dist/jobs.js +1 -1
- package/dist/monitoring/browser.d.ts +0 -2
- package/dist/monitoring/browser.js +12 -1
- package/dist/monitoring/index.d.ts +0 -2
- package/dist/monitoring/index.js +0 -1
- package/dist/next/api/routeHandler.js +6 -3
- package/dist/next/index.d.ts +7 -2
- package/dist/next/index.js +36 -1
- package/dist/next/middleware/index.d.ts +0 -2
- package/dist/next/middleware/index.js +0 -1
- package/dist/next/routing/route-map.d.ts +8 -7
- package/dist/next/routing/route-map.js +10 -3
- package/dist/providers/db-firebase/admin.js +15 -1
- package/dist/providers/db-firebase/sieve.d.ts +22 -0
- package/dist/react/hooks/useListingTypeFlags.d.ts +1 -1
- package/dist/react/hooks/useListingTypeFlags.js +1 -1
- package/dist/react/hooks/usePendingFilters.js +5 -3
- package/dist/react/hooks/usePendingTable.js +15 -3
- package/dist/repositories/index.d.ts +0 -1
- package/dist/repositories/index.js +0 -1
- package/dist/schemas/registry.d.ts +197 -232
- package/dist/schemas/registry.js +5 -6
- package/dist/schemas/webhooks/razorpay.d.ts +50 -50
- package/dist/security/authorization.d.ts +9 -0
- package/dist/security/authorization.js +16 -2
- package/dist/security/browser.d.ts +1 -3
- package/dist/security/browser.js +5 -2
- package/dist/security/index.d.ts +1 -3
- package/dist/security/index.js +19 -2
- package/dist/security/pii-encrypt.js +16 -0
- package/dist/security/pii-schemas.d.ts +0 -14
- package/dist/security/pii-schemas.js +7 -15
- package/dist/seed/_helpers/category-forest.js +2 -2
- package/dist/seed/_helpers/media.d.ts +19 -0
- package/dist/seed/_helpers/media.js +75 -0
- package/dist/seed/blog-posts-seed-data.js +17 -17
- package/dist/seed/carousel-slides-seed-data.js +7 -7
- package/dist/seed/cart-seed-data.js +13 -13
- package/dist/seed/categories-seed-data.js +10 -10
- package/dist/seed/events-seed-data.js +24 -24
- package/dist/seed/factories/product.factory.js +4 -4
- package/dist/seed/factories/store.factory.js +3 -3
- package/dist/seed/factories/user.factory.js +2 -2
- package/dist/seed/grouped-listings-seed-data.js +11 -11
- package/dist/seed/homepage-sections-seed-data.js +2 -2
- package/dist/seed/index.d.ts +0 -1
- package/dist/seed/index.js +0 -1
- package/dist/seed/manifest.d.ts +1 -1
- package/dist/seed/manifest.js +0 -5
- package/dist/seed/notifications-seed-data.js +20 -1
- package/dist/seed/orders-seed-data.js +2 -2
- package/dist/seed/products-art-seed-data.js +16 -16
- package/dist/seed/products-auctions-seed-data.js +34 -34
- package/dist/seed/products-classifieds-seed-data.js +35 -37
- package/dist/seed/products-digital-codes-seed-data.js +20 -20
- package/dist/seed/products-live-items-seed-data.js +11 -11
- package/dist/seed/products-preorders-seed-data.js +13 -13
- package/dist/seed/products-prize-draws-seed-data.js +43 -43
- package/dist/seed/products-standard-seed-data.js +54 -54
- package/dist/seed/products-stickers-seed-data.js +15 -15
- package/dist/seed/reviews-seed-data.js +4 -4
- package/dist/seed/scammers-seed-data.js +3 -3
- package/dist/seed/site-settings-seed-data.js +11 -24
- package/dist/seed/store-extensions-seed-data.js +10 -10
- package/dist/seed/stores-seed-data.js +11 -11
- package/dist/seed/support-tickets-seed-data.d.ts +14 -0
- package/dist/seed/support-tickets-seed-data.js +20 -1
- package/dist/seed/users-seed-data.js +20 -20
- package/dist/server-entry.d.ts +0 -1
- package/dist/server-entry.js +0 -1
- package/dist/server.d.ts +9 -6
- package/dist/server.js +7 -13
- package/dist/styles.css +248 -68
- package/dist/tailwind-utilities.css +1 -1
- package/dist/tokens/themes/default-dark.js +2 -2
- package/dist/tokens/themes/default-light.js +2 -2
- package/dist/tokens/tokens.css +24 -4
- package/dist/ui/components/ActionRow.d.ts +50 -0
- package/dist/ui/components/ActionRow.js +53 -0
- package/dist/ui/components/ActionRow.style.css +145 -0
- package/dist/ui/components/Drawer.d.ts +10 -0
- package/dist/ui/components/Drawer.js +2 -1
- package/dist/ui/components/FilterDrawer.js +4 -1
- package/dist/ui/components/FilterDrawer.style.css +6 -12
- package/dist/ui/components/FormActionBar.js +14 -1
- package/dist/ui/components/FormActionBar.style.css +12 -11
- package/dist/ui/components/ListingLayout.js +8 -1
- package/dist/ui/components/ListingLayout.style.css +6 -13
- package/dist/ui/components/Modal.d.ts +15 -1
- package/dist/ui/components/Modal.js +17 -3
- package/dist/ui/components/QuickCreateModal.js +2 -2
- package/dist/ui/components/QuickCreateModal.style.css +78 -84
- package/dist/ui/components/RecordDetailModal.js +2 -2
- package/dist/ui/components/SideDrawer.d.ts +8 -0
- package/dist/ui/components/SideDrawer.js +2 -1
- package/dist/ui/components/SideDrawer.style.css +6 -3
- package/dist/ui/components/SideModal.d.ts +11 -1
- package/dist/ui/components/SideModal.js +3 -2
- package/dist/ui/components/SideModal.style.css +14 -0
- package/dist/ui/components/Typography.style.css +33 -24
- package/dist/ui/components/index.style.css +1 -0
- package/dist/ui/forms/FormShell.style.css +260 -311
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.js +1 -0
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +0 -1
- package/dist/validation/index.d.ts +1 -1
- package/dist/validation/index.js +1 -1
- package/dist/validation/schemas.d.ts +0 -19
- package/dist/validation/schemas.js +8 -19
- package/package.json +1 -1
- package/scripts/seed-cli.mjs +3 -6
|
@@ -9,6 +9,13 @@ import { getClientRealtimeProvider, } from "./client-realtime";
|
|
|
9
9
|
*
|
|
10
10
|
* WHY THIS EXISTS — two distinct bugs, one cause.
|
|
11
11
|
*
|
|
12
|
+
* 🛑 Both examples below are HISTORICAL: buyer↔seller messaging was deleted
|
|
13
|
+
* 2026-08-31, so `useConversation` / `useConversations` / `useChat` and the
|
|
14
|
+
* `chats/*` and `chat/*` RTDB paths no longer exist — don't go looking for
|
|
15
|
+
* them. The mechanism is not historical. `auth_events`, `payment_events` and
|
|
16
|
+
* `bulk_events` are all still live, still concurrent, and still each need their
|
|
17
|
+
* own claim scope, which is the whole reason this file is here.
|
|
18
|
+
*
|
|
12
19
|
* 1. **Nobody signed in for messaging.** `useConversation` and
|
|
13
20
|
* `useConversations` subscribed to `chats/...` without ever calling
|
|
14
21
|
* `signInWithToken`, so `auth == null` and both RTDB rules evaluated false.
|
package/dist/core/browser.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export { EventBus, eventBus } from "./EventBus";
|
|
|
8
8
|
export type { EventSubscription } from "./EventBus";
|
|
9
9
|
export { CacheManager, cacheManager } from "./CacheManager";
|
|
10
10
|
export type { CacheOptions, CacheEntry } from "./CacheManager";
|
|
11
|
-
export { SITE_CONFIG,
|
|
11
|
+
export { SITE_CONFIG, createSiteConfig, resolveSiteConfig, } from "./site-config";
|
|
12
12
|
export type { RuntimeSiteConfig } from "./site-config";
|
|
13
13
|
export { useSiteSettings } from "./hooks/useSiteSettings";
|
|
14
14
|
export { MUTATION_EVENTS, emitMutation, onMutation, inferMutationEvent, } from "./mutation-events";
|
package/dist/core/browser.js
CHANGED
|
@@ -3,7 +3,7 @@ export { Queue } from "./Queue";
|
|
|
3
3
|
export { StorageManager, storageManager } from "./StorageManager";
|
|
4
4
|
export { EventBus, eventBus } from "./EventBus";
|
|
5
5
|
export { CacheManager, cacheManager } from "./CacheManager";
|
|
6
|
-
export { SITE_CONFIG,
|
|
6
|
+
export { SITE_CONFIG, createSiteConfig, resolveSiteConfig, } from "./site-config";
|
|
7
7
|
export { useSiteSettings } from "./hooks/useSiteSettings";
|
|
8
8
|
export { MUTATION_EVENTS, emitMutation, onMutation, inferMutationEvent, } from "./mutation-events";
|
|
9
9
|
export { configureMarketDefaults, resetMarketDefaults, getMarketProfile, getDefaultCurrency, getDefaultLocale, getDefaultCountry, getDefaultPhonePrefix, getDefaultTimezone, getDefaultCurrencySymbol, } from "./baseline-resolver";
|
package/dist/core/index.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export { EventBus, eventBus } from "./EventBus";
|
|
|
14
14
|
export type { EventSubscription } from "./EventBus";
|
|
15
15
|
export { CacheManager, cacheManager } from "./CacheManager";
|
|
16
16
|
export type { CacheOptions, CacheEntry } from "./CacheManager";
|
|
17
|
-
export { SITE_CONFIG,
|
|
17
|
+
export { SITE_CONFIG, createSiteConfig, resolveSiteConfig, } from "./site-config";
|
|
18
18
|
export type { RuntimeSiteConfig } from "./site-config";
|
|
19
19
|
export { CopilotLogRepository, copilotLogRepository, } from "./copilot-log.repository";
|
|
20
20
|
export type { CopilotFeedback, CopilotLogDocument, CopilotLogCreateInput, } from "./copilot-log.repository";
|
package/dist/core/index.js
CHANGED
|
@@ -9,7 +9,7 @@ export { Queue } from "./Queue";
|
|
|
9
9
|
export { StorageManager, storageManager } from "./StorageManager";
|
|
10
10
|
export { EventBus, eventBus } from "./EventBus";
|
|
11
11
|
export { CacheManager, cacheManager } from "./CacheManager";
|
|
12
|
-
export { SITE_CONFIG,
|
|
12
|
+
export { SITE_CONFIG, createSiteConfig, resolveSiteConfig, } from "./site-config";
|
|
13
13
|
export { CopilotLogRepository, copilotLogRepository, } from "./copilot-log.repository";
|
|
14
14
|
export { COPILOT_LOGS_COLLECTION, COPILOT_LOGS_INDEXED_FIELDS, copilotLogQueryHelpers, } from "./copilot-log.repository";
|
|
15
15
|
export { useSiteSettings } from "./hooks/useSiteSettings";
|
|
@@ -26,8 +26,5 @@ export interface RuntimeSiteConfig {
|
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
export declare const SITE_CONFIG: RuntimeSiteConfig;
|
|
29
|
-
export declare const FEATURE_FLAGS: {
|
|
30
|
-
readonly CHAT_ENABLED: false;
|
|
31
|
-
};
|
|
32
29
|
export declare function createSiteConfig(overrides: Partial<RuntimeSiteConfig>): RuntimeSiteConfig;
|
|
33
30
|
export declare function resolveSiteConfig(resolver?: () => Promise<Partial<RuntimeSiteConfig>>): Promise<RuntimeSiteConfig>;
|
package/dist/core/site-config.js
CHANGED
|
@@ -329,14 +329,6 @@ export declare const ERROR_MESSAGES: {
|
|
|
329
329
|
readonly NOT_OWNED_BY_STORE: "This feature is not owned by your store";
|
|
330
330
|
readonly NO_STORE: "No store found for this account";
|
|
331
331
|
};
|
|
332
|
-
readonly CONVERSATIONS: {
|
|
333
|
-
readonly NOT_FOUND: "Conversation not found";
|
|
334
|
-
readonly FETCH_FAILED: "Failed to load conversations";
|
|
335
|
-
readonly SEND_FAILED: "Failed to send message";
|
|
336
|
-
readonly BODY_REQUIRED: "Message body is required";
|
|
337
|
-
readonly BODY_TOO_LONG: "Message too long";
|
|
338
|
-
readonly NOT_PARTICIPANT: "You are not a participant of this conversation";
|
|
339
|
-
};
|
|
340
332
|
readonly BID: {
|
|
341
333
|
readonly FETCH_FAILED: "Failed to load bids";
|
|
342
334
|
readonly CREATE_FAILED: "Failed to place bid";
|
package/dist/errors/messages.js
CHANGED
|
@@ -355,15 +355,6 @@ export const ERROR_MESSAGES = {
|
|
|
355
355
|
NOT_OWNED_BY_STORE: "This feature is not owned by your store",
|
|
356
356
|
NO_STORE: "No store found for this account",
|
|
357
357
|
},
|
|
358
|
-
// Buyer ↔ seller conversations (D5 + VC7)
|
|
359
|
-
CONVERSATIONS: {
|
|
360
|
-
NOT_FOUND: "Conversation not found",
|
|
361
|
-
FETCH_FAILED: "Failed to load conversations",
|
|
362
|
-
SEND_FAILED: "Failed to send message",
|
|
363
|
-
BODY_REQUIRED: "Message body is required",
|
|
364
|
-
BODY_TOO_LONG: "Message too long",
|
|
365
|
-
NOT_PARTICIPANT: "You are not a participant of this conversation",
|
|
366
|
-
},
|
|
367
358
|
BID: {
|
|
368
359
|
FETCH_FAILED: "Failed to load bids",
|
|
369
360
|
CREATE_FAILED: "Failed to place bid",
|
|
@@ -138,6 +138,10 @@ export declare const aboutContentSchema: z.ZodObject<{
|
|
|
138
138
|
}, "strip", z.ZodTypeAny, {
|
|
139
139
|
title: string;
|
|
140
140
|
subtitle: string;
|
|
141
|
+
milestones: {
|
|
142
|
+
text: string;
|
|
143
|
+
year: string;
|
|
144
|
+
}[];
|
|
141
145
|
missionTitle: string;
|
|
142
146
|
missionText: string;
|
|
143
147
|
howItWorksTitle: string;
|
|
@@ -159,10 +163,6 @@ export declare const aboutContentSchema: z.ZodObject<{
|
|
|
159
163
|
text: string;
|
|
160
164
|
icon: string;
|
|
161
165
|
}[];
|
|
162
|
-
milestones: {
|
|
163
|
-
text: string;
|
|
164
|
-
year: string;
|
|
165
|
-
}[];
|
|
166
166
|
teamMembers: {
|
|
167
167
|
role: string;
|
|
168
168
|
name: string;
|
|
@@ -174,6 +174,10 @@ export declare const aboutContentSchema: z.ZodObject<{
|
|
|
174
174
|
}, {
|
|
175
175
|
title: string;
|
|
176
176
|
subtitle: string;
|
|
177
|
+
milestones: {
|
|
178
|
+
text: string;
|
|
179
|
+
year: string;
|
|
180
|
+
}[];
|
|
177
181
|
missionTitle: string;
|
|
178
182
|
missionText: string;
|
|
179
183
|
howItWorksTitle: string;
|
|
@@ -195,10 +199,6 @@ export declare const aboutContentSchema: z.ZodObject<{
|
|
|
195
199
|
text: string;
|
|
196
200
|
icon: string;
|
|
197
201
|
}[];
|
|
198
|
-
milestones: {
|
|
199
|
-
text: string;
|
|
200
|
-
year: string;
|
|
201
|
-
}[];
|
|
202
202
|
teamMembers: {
|
|
203
203
|
role: string;
|
|
204
204
|
name: string;
|
|
@@ -1,21 +1,42 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/*
|
|
4
|
+
* WHY: All THREE facets here filtered on fields `AddressDocument` does not
|
|
5
|
+
* have. `addressType` shipped a hardcoded six-option list (which did not
|
|
6
|
+
* even match the three-option `ADDRESS_TYPES` constant it was presumably
|
|
7
|
+
* copied from), `verified` read `a.verified` and `activeOnly` read
|
|
8
|
+
* `a.active` — and the route reached all three through `as any` casts, so
|
|
9
|
+
* the comparison was always against `""`.
|
|
10
|
+
*
|
|
11
|
+
* Facets that render, count toward the filter-drawer badge, and can never
|
|
12
|
+
* match a single row. Root Cause #62's shape one layer up: not a broken
|
|
13
|
+
* link in the chain, a chain attached to nothing.
|
|
14
|
+
* WHAT: Two facets that read fields the document actually has.
|
|
15
|
+
*
|
|
16
|
+
* `isDefault` and `banStatus` are the only two worth filtering on: the rest of
|
|
17
|
+
* `AddressDocument` is free text a search box covers better than a facet.
|
|
18
|
+
*
|
|
19
|
+
* @tag domain:addresses
|
|
20
|
+
* @tag layer:component
|
|
21
|
+
* @tag pattern:none
|
|
22
|
+
* @tag access:client
|
|
23
|
+
* @tag consumers:AddressesIndexListing
|
|
24
|
+
* @tag sideEffects:none
|
|
25
|
+
*/
|
|
3
26
|
import { useTranslations } from "next-intl";
|
|
4
27
|
import { FilterFacetSection } from "../../filters/FilterFacetSection";
|
|
5
28
|
import { SwitchFilter } from "../../filters/SwitchFilter";
|
|
6
29
|
import { Div } from "../../../ui";
|
|
30
|
+
/** Mirrors `AddressBanStatus`. Absent means "in good standing". */
|
|
31
|
+
const BAN_STATUS_OPTIONS = [
|
|
32
|
+
{ value: "banned", label: "Banned" },
|
|
33
|
+
{ value: "unban_requested", label: "Unban requested" },
|
|
34
|
+
{ value: "suspicious", label: "Flagged as suspicious" },
|
|
35
|
+
];
|
|
7
36
|
export function AddressFilters({ table }) {
|
|
8
37
|
const t = useTranslations("filters");
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
{ value: "work", label: t("addressTypeWork") },
|
|
12
|
-
{ value: "shipping", label: t("addressTypeShipping") },
|
|
13
|
-
{ value: "billing", label: t("addressTypeBilling") },
|
|
14
|
-
{ value: "business", label: t("addressTypeBusiness") },
|
|
15
|
-
{ value: "other", label: t("addressTypeOther") },
|
|
16
|
-
];
|
|
17
|
-
const selectedTypes = table.get("addressType")
|
|
18
|
-
? table.get("addressType").split("|").filter(Boolean)
|
|
38
|
+
const selectedBanStatus = table.get("banStatus")
|
|
39
|
+
? table.get("banStatus").split("|").filter(Boolean)
|
|
19
40
|
: [];
|
|
20
|
-
return (_jsxs(Div, { children: [_jsx(
|
|
41
|
+
return (_jsxs(Div, { children: [_jsx(SwitchFilter, { title: t("addressDefault"), label: t("showDefaultAddressOnly"), checked: table.get("defaultOnly") === "true", onChange: (v) => table.set("defaultOnly", v ? "true" : ""), defaultCollapsed: false }), _jsx(FilterFacetSection, { title: t("addressBanStatus"), options: BAN_STATUS_OPTIONS, selected: selectedBanStatus, onChange: (vals) => table.set("banStatus", vals.join("|")), searchable: false, defaultCollapsed: true })] }));
|
|
21
42
|
}
|
|
@@ -1,32 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The buyer's address form — sectionised, and on the shared address shape,
|
|
3
|
+
* 2026-08-30 (W5 / D19).
|
|
4
|
+
*
|
|
5
|
+
* ## What it was
|
|
6
|
+
*
|
|
7
|
+
* A local `addressFormSchema` declared right here, one of **eleven** address
|
|
8
|
+
* field shapes in the tree, with `postalCode: z.string().min(1)` — so `abc`
|
|
9
|
+
* passed every check the buyer could see and came back a server 400 with
|
|
10
|
+
* nothing on the field. `state` was a free-text input writing the same
|
|
11
|
+
* `AddressDocument.state` that the admin editor filled from a 36-option
|
|
12
|
+
* `INDIAN_STATES` select, and `country` was free text while the server's
|
|
13
|
+
* postal rule was India-only.
|
|
14
|
+
*
|
|
15
|
+
* All of that now comes from `addressFormSchema` in
|
|
16
|
+
* `features/addresses/schemas/address-form.ts`, whose postal rule is
|
|
17
|
+
* `COUNTRIES[country].postalPattern` and is the same rule the routes run.
|
|
18
|
+
*
|
|
19
|
+
* ## The lookup
|
|
20
|
+
*
|
|
21
|
+
* A complete postal code fills city and state — only when they are EMPTY. It
|
|
22
|
+
* never corrects what the buyer typed, and a miss or a network failure is a
|
|
23
|
+
* non-event: the fields stay editable and the submit is never blocked.
|
|
24
|
+
*/
|
|
25
|
+
import * as React from "react";
|
|
1
26
|
import type { AddressFormData } from "../hooks/useAddresses";
|
|
2
27
|
export interface AddressFormLabels {
|
|
3
|
-
label: string;
|
|
4
|
-
fullName: string;
|
|
5
|
-
phone: string;
|
|
6
|
-
addressLine1: string;
|
|
7
|
-
addressLine2: string;
|
|
8
|
-
landmark: string;
|
|
9
|
-
city: string;
|
|
10
|
-
state: string;
|
|
11
|
-
postalCode: string;
|
|
12
|
-
country: string;
|
|
13
|
-
setDefault: string;
|
|
14
28
|
cancel: string;
|
|
15
29
|
save: string;
|
|
16
30
|
loading: string;
|
|
17
31
|
}
|
|
18
|
-
export interface AddressFormPlaceholders {
|
|
19
|
-
label: string;
|
|
20
|
-
fullName: string;
|
|
21
|
-
phone: string;
|
|
22
|
-
addressLine1: string;
|
|
23
|
-
addressLine2: string;
|
|
24
|
-
landmark: string;
|
|
25
|
-
city: string;
|
|
26
|
-
state: string;
|
|
27
|
-
postalCode: string;
|
|
28
|
-
country: string;
|
|
29
|
-
}
|
|
30
32
|
interface AddressFormProps {
|
|
31
33
|
initialData?: Partial<AddressFormData>;
|
|
32
34
|
onSubmit: (data: AddressFormData) => void | Promise<void>;
|
|
@@ -35,7 +37,6 @@ interface AddressFormProps {
|
|
|
35
37
|
submitLabel?: string;
|
|
36
38
|
defaultCountry?: string;
|
|
37
39
|
labels?: Partial<AddressFormLabels>;
|
|
38
|
-
placeholders?: Partial<AddressFormPlaceholders>;
|
|
39
40
|
}
|
|
40
|
-
export declare function AddressForm({ initialData, onSubmit, onCancel, isLoading, submitLabel, defaultCountry, labels,
|
|
41
|
+
export declare function AddressForm({ initialData, onSubmit, onCancel, isLoading, submitLabel, defaultCountry, labels, }: AddressFormProps): React.JSX.Element;
|
|
41
42
|
export {};
|
|
@@ -1,61 +1,45 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
fullName: "Recipient's full name",
|
|
44
|
-
phone: "Enter phone number",
|
|
45
|
-
addressLine1: "Street address, P.O. box",
|
|
46
|
-
addressLine2: "Apartment, suite, unit, building, floor, etc.",
|
|
47
|
-
landmark: "Opposite the Metro station, next to the temple, etc.",
|
|
48
|
-
city: "City",
|
|
49
|
-
state: "State/Province",
|
|
50
|
-
postalCode: "Postal/ZIP code",
|
|
51
|
-
country: "Country",
|
|
52
|
-
};
|
|
53
|
-
export function AddressForm({ initialData, onSubmit, onCancel, isLoading = false, submitLabel, defaultCountry = "India", labels, placeholders, }) {
|
|
54
|
-
const { showToast } = useToast();
|
|
55
|
-
const mergedLabels = { ...DEFAULT_LABELS, ...labels };
|
|
56
|
-
const mergedPlaceholders = { ...DEFAULT_PLACEHOLDERS, ...placeholders };
|
|
57
|
-
const effectiveSubmitLabel = submitLabel ?? mergedLabels.save;
|
|
58
|
-
const [formData, setFormData] = useState({
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* The buyer's address form — sectionised, and on the shared address shape,
|
|
5
|
+
* 2026-08-30 (W5 / D19).
|
|
6
|
+
*
|
|
7
|
+
* ## What it was
|
|
8
|
+
*
|
|
9
|
+
* A local `addressFormSchema` declared right here, one of **eleven** address
|
|
10
|
+
* field shapes in the tree, with `postalCode: z.string().min(1)` — so `abc`
|
|
11
|
+
* passed every check the buyer could see and came back a server 400 with
|
|
12
|
+
* nothing on the field. `state` was a free-text input writing the same
|
|
13
|
+
* `AddressDocument.state` that the admin editor filled from a 36-option
|
|
14
|
+
* `INDIAN_STATES` select, and `country` was free text while the server's
|
|
15
|
+
* postal rule was India-only.
|
|
16
|
+
*
|
|
17
|
+
* All of that now comes from `addressFormSchema` in
|
|
18
|
+
* `features/addresses/schemas/address-form.ts`, whose postal rule is
|
|
19
|
+
* `COUNTRIES[country].postalPattern` and is the same rule the routes run.
|
|
20
|
+
*
|
|
21
|
+
* ## The lookup
|
|
22
|
+
*
|
|
23
|
+
* A complete postal code fills city and state — only when they are EMPTY. It
|
|
24
|
+
* never corrects what the buyer typed, and a miss or a network failure is a
|
|
25
|
+
* non-event: the fields stay editable and the submit is never blocked.
|
|
26
|
+
*/
|
|
27
|
+
import * as React from "react";
|
|
28
|
+
import { Stack } from "../../../ui";
|
|
29
|
+
import { FormErrorSummary, applyZodIssues } from "../../../ui/forms";
|
|
30
|
+
import { FormShellContext, useFormShellState } from "../../../ui/forms/FormShell";
|
|
31
|
+
import { buildSectionsFromSchema, visibleValues } from "../../shell/build-sections";
|
|
32
|
+
import { SectionForm, useSectionFormNav } from "../../shell/SectionForm";
|
|
33
|
+
import { addressFormSchema } from "../../addresses/schemas/address-form";
|
|
34
|
+
import { usePostalLookup } from "../../addresses/hooks/usePostalLookup";
|
|
35
|
+
import { AddressLocationFields } from "../../addresses/components/AddressLocationFields";
|
|
36
|
+
import { COUNTRIES, DEFAULT_COUNTRY } from "../../../constants/geo/countries";
|
|
37
|
+
const COUNTRY_OPTIONS = Object.values(COUNTRIES).map((c) => ({
|
|
38
|
+
value: c.code,
|
|
39
|
+
label: c.name,
|
|
40
|
+
}));
|
|
41
|
+
export function AddressForm({ initialData, onSubmit, onCancel, isLoading = false, submitLabel = "Save", defaultCountry = DEFAULT_COUNTRY, labels, }) {
|
|
42
|
+
const [form, setForm] = React.useState({
|
|
59
43
|
label: initialData?.label || "",
|
|
60
44
|
fullName: initialData?.fullName || "",
|
|
61
45
|
phone: initialData?.phone || "",
|
|
@@ -68,55 +52,49 @@ export function AddressForm({ initialData, onSubmit, onCancel, isLoading = false
|
|
|
68
52
|
country: initialData?.country || defaultCountry,
|
|
69
53
|
isDefault: initialData?.isDefault || false,
|
|
70
54
|
});
|
|
71
|
-
const
|
|
55
|
+
const patch = (partial) => setForm((prev) => Object.assign({}, prev, partial));
|
|
72
56
|
/*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* since the inline row sits below the fold on a form this long.
|
|
57
|
+
* 🛑 Autofill lands only in an EMPTY field. Correcting an address the buyer
|
|
58
|
+
* deliberately typed is a bug they cannot report — they watch their own
|
|
59
|
+
* typing vanish and have no idea what did it.
|
|
77
60
|
*/
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
61
|
+
const { lookup, isLooking } = usePostalLookup({
|
|
62
|
+
onResolved: ({ city, state }) => setForm((prev) => ({
|
|
63
|
+
...prev,
|
|
64
|
+
city: prev.city.trim() ? prev.city : city,
|
|
65
|
+
state: prev.state.trim() ? prev.state : state,
|
|
66
|
+
})),
|
|
67
|
+
enabled: !isLoading,
|
|
68
|
+
});
|
|
69
|
+
const sections = React.useMemo(() => buildSectionsFromSchema(addressFormSchema, {
|
|
70
|
+
options: { country: COUNTRY_OPTIONS },
|
|
71
|
+
renderers: {
|
|
72
|
+
/*
|
|
73
|
+
* State, postal code and country move together: the country decides
|
|
74
|
+
* whether state is a picker or free text AND what a valid postal
|
|
75
|
+
* code looks like, so one component owns all three rather than three
|
|
76
|
+
* renderers each re-deriving the same country.
|
|
77
|
+
*/
|
|
78
|
+
state: ({ values, onChange, errors }) => (_jsx(AddressLocationFields, { country: values.country, state: values.state, postalCode: values.postalCode, errors: errors, isLooking: isLooking, onChange: onChange, onPostalSettled: lookup })),
|
|
79
|
+
// Rendered by the component above.
|
|
80
|
+
postalCode: () => null,
|
|
81
|
+
country: () => null,
|
|
82
|
+
},
|
|
83
|
+
}), [isLooking, lookup]);
|
|
84
|
+
const nav = useSectionFormNav(sections, form, { scope: "user:address" });
|
|
85
|
+
const { shellCtx, setFieldError, clearErrors } = useFormShellState(addressFormSchema, {
|
|
86
|
+
sections: nav.sectionMeta,
|
|
87
|
+
onGoToSection: nav.goToSection,
|
|
88
|
+
fieldToSectionIndex: nav.fieldToSectionIndex,
|
|
89
|
+
});
|
|
90
|
+
const submitAddress = async () => {
|
|
91
|
+
clearErrors();
|
|
92
|
+
const parsed = addressFormSchema.safeParse(visibleValues(addressFormSchema, form));
|
|
93
|
+
if (!parsed.success) {
|
|
94
|
+
applyZodIssues(parsed.error.issues, setFieldError);
|
|
98
95
|
return;
|
|
99
96
|
}
|
|
100
|
-
|
|
101
|
-
await onSubmit(formData);
|
|
102
|
-
}
|
|
103
|
-
catch (err) {
|
|
104
|
-
void normalizeError(err);
|
|
105
|
-
showToast("Failed to save address", "error");
|
|
106
|
-
}
|
|
107
|
-
}, [formData, onSubmit, showToast, setFieldError, clearErrors, markSubmitAttempted]);
|
|
108
|
-
useEffect(() => {
|
|
109
|
-
validate(formData);
|
|
110
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
111
|
-
}, [formData, validate]);
|
|
112
|
-
const handleChange = (field, value) => {
|
|
113
|
-
setFormData((prev) => ({ ...prev, [field]: value }));
|
|
97
|
+
await onSubmit(form);
|
|
114
98
|
};
|
|
115
|
-
return (_jsx(
|
|
116
|
-
onSubmit: submitAddress,
|
|
117
|
-
onCancel,
|
|
118
|
-
submitLabel: effectiveSubmitLabel,
|
|
119
|
-
cancelLabel: mergedLabels.cancel,
|
|
120
|
-
isLoading,
|
|
121
|
-
}, children: ({ setFieldError, clearErrors }) => (_jsxs(_Fragment, { children: [_jsx(FormField, { label: mergedLabels.label, name: "label", type: "text", value: formData.label, onChange: (value) => handleChange("label", value), placeholder: mergedPlaceholders.label, required: true }), _jsx(FormField, { label: mergedLabels.fullName, name: "fullName", type: "text", value: formData.fullName, onChange: (value) => handleChange("fullName", value), placeholder: mergedPlaceholders.fullName, required: true }), _jsx(FormField, { label: mergedLabels.phone, name: "phone", type: "tel", value: formData.phone, onChange: (value) => handleChange("phone", value), placeholder: mergedPlaceholders.phone, required: true }), _jsx(FormField, { label: mergedLabels.addressLine1, name: "addressLine1", type: "text", value: formData.addressLine1, onChange: (value) => handleChange("addressLine1", value), placeholder: mergedPlaceholders.addressLine1, required: true }), _jsx(FormField, { label: mergedLabels.addressLine2, name: "addressLine2", type: "text", value: formData.addressLine2, onChange: (value) => handleChange("addressLine2", value), placeholder: mergedPlaceholders.addressLine2 }), _jsx(FormField, { label: mergedLabels.landmark, name: "landmark", type: "text", value: formData.landmark ?? "", onChange: (value) => handleChange("landmark", value), placeholder: mergedPlaceholders.landmark }), _jsxs(FormGroup, { columns: 3, children: [_jsx(FormField, { label: mergedLabels.city, name: "city", type: "text", value: formData.city, onChange: (value) => handleChange("city", value), placeholder: mergedPlaceholders.city, required: true }), _jsx(FormField, { label: mergedLabels.state, name: "state", type: "text", value: formData.state, onChange: (value) => handleChange("state", value), placeholder: mergedPlaceholders.state, required: true }), _jsx(FormField, { label: mergedLabels.postalCode, name: "postalCode", type: "text", value: formData.postalCode, onChange: (value) => handleChange("postalCode", value), placeholder: mergedPlaceholders.postalCode, required: true })] }), _jsx(FormField, { label: mergedLabels.country, name: "country", type: "text", value: formData.country, onChange: (value) => handleChange("country", value), placeholder: mergedPlaceholders.country, required: true }), _jsx(Checkbox, { checked: formData.isDefault, onChange: (e) => handleChange("isDefault", e.target.checked), label: mergedLabels.setDefault }), _jsx(FormErrorSummary, {}), _jsxs(Row, { padding: "t-xs", align: "center", justify: "start", gap: "xs", children: [_jsx(Button, { type: "button", variant: "outline", onClick: onCancel, disabled: isLoading, children: mergedLabels.cancel }), _jsx(Button, { type: "submit", variant: "primary", disabled: isLoading, isLoading: isLoading, onClick: () => void submitAddress({ setFieldError, clearErrors }), children: isLoading ? mergedLabels.loading : effectiveSubmitLabel })] })] })) }));
|
|
99
|
+
return (_jsx(Stack, { gap: "md", children: _jsxs(FormShellContext.Provider, { value: shellCtx, children: [_jsx(FormErrorSummary, {}), _jsx(SectionForm, { sections: sections, values: form, onChange: patch, onSubmit: () => void submitAddress(), schema: addressFormSchema, openIds: nav.openIds, onOpenChange: nav.setOpenIds, isLoading: isLoading, submitLabel: submitLabel, onCancel: onCancel, cancelLabel: labels?.cancel ?? "Cancel" })] }) }));
|
|
122
100
|
}
|
|
@@ -7,7 +7,12 @@ import { Div, Grid, ListingFilterDrawer, ListingToolbar, Stack, Text } from "../
|
|
|
7
7
|
import { AddressBook } from "./AddressBook";
|
|
8
8
|
import { AddressFilters } from "./AddressFilters";
|
|
9
9
|
import { TABLE_KEYS, VIEW_MODE } from "../../../constants/table-keys";
|
|
10
|
-
|
|
10
|
+
/*
|
|
11
|
+
* The two facets that read fields `AddressDocument` actually has. It was
|
|
12
|
+
* `["addressType", "verified", "activeOnly"]` — three keys the document has
|
|
13
|
+
* never carried, so every one of them inflated this badge and matched nothing.
|
|
14
|
+
*/
|
|
15
|
+
const FILTER_KEYS = ["defaultOnly", "banStatus"];
|
|
11
16
|
export function AddressesIndexListing({ onAdd, onEdit, onDelete, }) {
|
|
12
17
|
const table = useUrlTable({ defaults: {} });
|
|
13
18
|
const [view, setView] = useState(table.get(TABLE_KEYS.VIEW) || VIEW_MODE.GRID);
|
|
@@ -68,9 +73,8 @@ export function AddressesIndexListing({ onAdd, onEdit, onDelete, }) {
|
|
|
68
73
|
const { data: addresses = [], isLoading } = useAddresses({
|
|
69
74
|
filters: {
|
|
70
75
|
q: table.get(TABLE_KEYS.QUERY) || undefined,
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
activeOnly: table.get("activeOnly") === "true" || undefined,
|
|
76
|
+
defaultOnly: table.get("defaultOnly") === "true" || undefined,
|
|
77
|
+
banStatus: table.get("banStatus") || undefined,
|
|
74
78
|
},
|
|
75
79
|
});
|
|
76
80
|
return (_jsxs(Stack, { gap: "md", children: [_jsx(ListingToolbar, { filterCount: activeFilterCount, onFiltersClick: openFilters, searchValue: searchInput, searchPlaceholder: "Search by address, postcode or label...", onSearchChange: setSearchInput, onSearchCommit: commitSearch, view: view, onViewChange: (v) => { if (v === "table")
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
+
import type { SidebarNavItem } from "../../../_internal/shared/features/layout/types";
|
|
1
2
|
import React from "react";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
label: string;
|
|
5
|
-
icon?: React.ReactNode;
|
|
3
|
+
/** A user sidebar entry, plus the one field only this portal has. */
|
|
4
|
+
export interface UserNavItem extends SidebarNavItem {
|
|
6
5
|
/** When set, intercepts navigation with a confirmation prompt. */
|
|
7
6
|
confirm?: {
|
|
8
7
|
title?: string;
|