@mohasinac/appkit 4.52.4 → 4.53.0
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/.build-stamp.json +4 -4
- package/dist/_internal/client/features/sticker-trace/canvas-codec.d.ts +2 -0
- package/dist/_internal/client/features/sticker-trace/canvas-codec.js +148 -0
- package/dist/_internal/server/features/auctions/actions.js +1 -1
- package/dist/_internal/server/features/categories/data.js +23 -7
- package/dist/_internal/server/features/checkout/actions.js +10 -3
- package/dist/_internal/server/features/checkout/data.d.ts +15 -0
- package/dist/_internal/server/features/checkout/data.js +20 -3
- package/dist/_internal/server/features/lottery/actions.js +9 -1
- package/dist/_internal/server/features/lottery/og.d.ts +40 -0
- package/dist/_internal/server/features/lottery/og.js +79 -0
- package/dist/_internal/server/features/messages/actions.js +4 -0
- package/dist/_internal/server/features/offers/adapters.js +17 -3
- package/dist/_internal/server/features/orders/actions.js +7 -2
- package/dist/_internal/server/features/raffle/actions.d.ts +19 -0
- package/dist/_internal/server/features/raffle/actions.js +25 -0
- package/dist/_internal/server/features/reviews/actions.js +1 -1
- package/dist/_internal/server/features/reviews/data.d.ts +1 -1
- package/dist/_internal/server/features/search/index-build/artifact-store.d.ts +89 -0
- package/dist/_internal/server/features/search/index-build/artifact-store.js +208 -0
- package/dist/_internal/server/features/search/index-build/build.d.ts +57 -0
- package/dist/_internal/server/features/search/index-build/build.js +285 -0
- package/dist/_internal/server/features/search/index-build/sources.d.ts +53 -0
- package/dist/_internal/server/features/search/index-build/sources.js +385 -0
- package/dist/_internal/server/features/search/search-sources.d.ts +0 -15
- package/dist/_internal/server/features/search/search-sources.js +142 -7
- package/dist/_internal/server/features/seo/robots.js +21 -1
- package/dist/_internal/server/features/seo/sitemap.js +1 -1
- package/dist/_internal/server/features/shared/listing-data-factory.js +16 -4
- package/dist/_internal/server/features/site-settings/adapters.d.ts +1 -1
- package/dist/_internal/server/features/site-settings/adapters.js +26 -0
- package/dist/_internal/server/features/sticker-trace/actions.d.ts +109 -0
- package/dist/_internal/server/features/sticker-trace/actions.js +172 -0
- package/dist/_internal/server/features/sticker-trace/adapters.d.ts +80 -0
- package/dist/_internal/server/features/sticker-trace/adapters.js +174 -0
- package/dist/_internal/server/features/sticker-trace/build-cut-file.d.ts +26 -0
- package/dist/_internal/server/features/sticker-trace/build-cut-file.js +127 -0
- package/dist/_internal/server/features/sticker-trace/coordinator.d.ts +27 -0
- package/dist/_internal/server/features/sticker-trace/coordinator.js +169 -0
- package/dist/_internal/server/features/sticker-trace/fanout.d.ts +43 -0
- package/dist/_internal/server/features/sticker-trace/fanout.js +180 -0
- package/dist/_internal/server/features/sticker-trace/finalizer.d.ts +25 -0
- package/dist/_internal/server/features/sticker-trace/finalizer.js +123 -0
- package/dist/_internal/server/features/sticker-trace/mosaic-inputs.d.ts +30 -0
- package/dist/_internal/server/features/sticker-trace/mosaic-inputs.js +112 -0
- package/dist/_internal/server/features/sticker-trace/progress.d.ts +81 -0
- package/dist/_internal/server/features/sticker-trace/progress.js +198 -0
- package/dist/_internal/server/features/sticker-trace/promote.d.ts +23 -0
- package/dist/_internal/server/features/sticker-trace/promote.js +193 -0
- package/dist/_internal/server/features/sticker-trace/shard.d.ts +50 -0
- package/dist/_internal/server/features/sticker-trace/shard.js +174 -0
- package/dist/_internal/server/features/sticker-trace/sheet-actions.d.ts +141 -0
- package/dist/_internal/server/features/sticker-trace/sheet-actions.js +279 -0
- package/dist/_internal/server/features/sticker-trace/storage.d.ts +135 -0
- package/dist/_internal/server/features/sticker-trace/storage.js +282 -0
- package/dist/_internal/server/functions/scheduled.d.ts +2 -1
- package/dist/_internal/server/functions/scheduled.js +25 -1
- package/dist/_internal/server/jobs/core/_event-ref.d.ts +51 -0
- package/dist/_internal/server/jobs/core/_event-ref.js +63 -0
- package/dist/_internal/server/jobs/core/assignSpinPrize.d.ts +18 -0
- package/dist/_internal/server/jobs/core/assignSpinPrize.js +77 -16
- package/dist/_internal/server/jobs/core/auctionSettlement.js +13 -4
- package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +44 -15
- package/dist/_internal/server/jobs/core/bundleStockSync.js +3 -4
- package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +44 -0
- package/dist/_internal/server/jobs/core/event-draw-reasons.d.ts +78 -0
- package/dist/_internal/server/jobs/core/event-draw-reasons.js +133 -0
- package/dist/_internal/server/jobs/core/listingProcessor.js +28 -8
- package/dist/_internal/server/jobs/core/onOrderCreate.js +12 -1
- package/dist/_internal/server/jobs/core/onScamReportCreate.js +13 -2
- package/dist/_internal/server/jobs/core/onScamReportRejected.js +8 -2
- package/dist/_internal/server/jobs/core/onScamReportVerified.js +8 -2
- package/dist/_internal/server/jobs/core/onStoreWrite.js +11 -4
- package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.js +5 -4
- package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.js +1 -4
- package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.js +1 -2
- package/dist/_internal/server/jobs/core/promotions.js +7 -4
- package/dist/_internal/server/jobs/core/searchIndexBuild.d.ts +7 -0
- package/dist/_internal/server/jobs/core/searchIndexBuild.js +211 -0
- package/dist/_internal/server/jobs/core/triggerEventRaffle.d.ts +35 -0
- package/dist/_internal/server/jobs/core/triggerEventRaffle.js +213 -31
- package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +20 -14
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +8 -0
- package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +15 -15
- package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
- package/dist/_internal/server/jobs/handlers/index.js +1 -0
- package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onProductWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onReviewWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/onScamReportUpdate.js +18 -0
- package/dist/_internal/server/jobs/handlers/onStoreWrite.js +18 -0
- package/dist/_internal/server/jobs/handlers/searchIndexBuild.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/searchIndexBuild.js +2 -0
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +8 -0
- package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +15 -6
- package/dist/_internal/shared/actions/action-registry.js +29 -0
- package/dist/_internal/shared/cache/revalidate-targets.d.ts +0 -1
- package/dist/_internal/shared/cache/revalidate-targets.js +10 -8
- package/dist/_internal/shared/features/events/config.d.ts +14 -0
- package/dist/_internal/shared/features/events/config.js +14 -0
- package/dist/_internal/shared/features/notifications/action-url.js +8 -0
- package/dist/_internal/shared/features/site-settings/types.d.ts +11 -0
- package/dist/_internal/shared/features/sticker-trace/codec.d.ts +81 -0
- package/dist/_internal/shared/features/sticker-trace/codec.js +30 -0
- package/dist/_internal/shared/features/sticker-trace/config.d.ts +81 -0
- package/dist/_internal/shared/features/sticker-trace/config.js +177 -0
- package/dist/_internal/shared/features/sticker-trace/cut-contour.d.ts +20 -0
- package/dist/_internal/shared/features/sticker-trace/cut-contour.js +60 -0
- package/dist/_internal/shared/features/sticker-trace/export/build-export-set.d.ts +65 -0
- package/dist/_internal/shared/features/sticker-trace/export/build-export-set.js +176 -0
- package/dist/_internal/shared/features/sticker-trace/export/cut-svg.d.ts +56 -0
- package/dist/_internal/shared/features/sticker-trace/export/cut-svg.js +120 -0
- package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.d.ts +92 -0
- package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.js +153 -0
- package/dist/_internal/shared/features/sticker-trace/export/nesting.d.ts +51 -0
- package/dist/_internal/shared/features/sticker-trace/export/nesting.js +110 -0
- package/dist/_internal/shared/features/sticker-trace/export/page-sizes.d.ts +68 -0
- package/dist/_internal/shared/features/sticker-trace/export/page-sizes.js +223 -0
- package/dist/_internal/shared/features/sticker-trace/export/part-tiling.d.ts +51 -0
- package/dist/_internal/shared/features/sticker-trace/export/part-tiling.js +178 -0
- package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.d.ts +26 -0
- package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.js +134 -0
- package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.d.ts +40 -0
- package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.js +195 -0
- package/dist/_internal/shared/features/sticker-trace/index.d.ts +2 -0
- package/dist/_internal/shared/features/sticker-trace/index.js +59 -0
- package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.d.ts +11 -0
- package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.js +66 -0
- package/dist/_internal/shared/features/sticker-trace/math/edt.d.ts +27 -0
- package/dist/_internal/shared/features/sticker-trace/math/edt.js +165 -0
- package/dist/_internal/shared/features/sticker-trace/math/label.d.ts +15 -0
- package/dist/_internal/shared/features/sticker-trace/math/label.js +156 -0
- package/dist/_internal/shared/features/sticker-trace/math/marching-squares.d.ts +16 -0
- package/dist/_internal/shared/features/sticker-trace/math/marching-squares.js +242 -0
- package/dist/_internal/shared/features/sticker-trace/math/morphology.d.ts +46 -0
- package/dist/_internal/shared/features/sticker-trace/math/morphology.js +168 -0
- package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.d.ts +88 -0
- package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.js +286 -0
- package/dist/_internal/shared/features/sticker-trace/math/rdp.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/math/rdp.js +74 -0
- package/dist/_internal/shared/features/sticker-trace/resume.d.ts +50 -0
- package/dist/_internal/shared/features/sticker-trace/resume.js +160 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cluster.d.ts +20 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cluster.js +132 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.d.ts +28 -0
- package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.js +120 -0
- package/dist/_internal/shared/features/sticker-trace/trace/flood.d.ts +21 -0
- package/dist/_internal/shared/features/sticker-trace/trace/flood.js +104 -0
- package/dist/_internal/shared/features/sticker-trace/trace/geometry.d.ts +3 -0
- package/dist/_internal/shared/features/sticker-trace/trace/geometry.js +140 -0
- package/dist/_internal/shared/features/sticker-trace/trace/line-filter.d.ts +15 -0
- package/dist/_internal/shared/features/sticker-trace/trace/line-filter.js +138 -0
- package/dist/_internal/shared/features/sticker-trace/trace/merge.d.ts +27 -0
- package/dist/_internal/shared/features/sticker-trace/trace/merge.js +187 -0
- package/dist/_internal/shared/features/sticker-trace/trace/paper.d.ts +32 -0
- package/dist/_internal/shared/features/sticker-trace/trace/paper.js +147 -0
- package/dist/_internal/shared/features/sticker-trace/trace/prefilter.d.ts +30 -0
- package/dist/_internal/shared/features/sticker-trace/trace/prefilter.js +125 -0
- package/dist/_internal/shared/features/sticker-trace/trace/quantise.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/trace/quantise.js +153 -0
- package/dist/_internal/shared/features/sticker-trace/trace/ridge.d.ts +88 -0
- package/dist/_internal/shared/features/sticker-trace/trace/ridge.js +344 -0
- package/dist/_internal/shared/features/sticker-trace/trace/segment.d.ts +10 -0
- package/dist/_internal/shared/features/sticker-trace/trace/segment.js +251 -0
- package/dist/_internal/shared/features/sticker-trace/types.d.ts +197 -0
- package/dist/_internal/shared/features/sticker-trace/types.js +49 -0
- package/dist/_internal/shared/listing-types/_registry.d.ts +11 -0
- package/dist/_internal/shared/listing-types/art/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/art/config.js +1 -0
- package/dist/_internal/shared/listing-types/auction/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/auction/config.js +1 -0
- package/dist/_internal/shared/listing-types/classified/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/classified/config.js +1 -0
- package/dist/_internal/shared/listing-types/digital-code/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/digital-code/config.js +1 -0
- package/dist/_internal/shared/listing-types/feature-flags.d.ts +7 -0
- package/dist/_internal/shared/listing-types/feature-flags.js +9 -0
- package/dist/_internal/shared/listing-types/live/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/live/config.js +1 -0
- package/dist/_internal/shared/listing-types/pre-order/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/pre-order/config.js +1 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.js +1 -0
- package/dist/_internal/shared/listing-types/standard/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/standard/config.js +1 -0
- package/dist/_internal/shared/listing-types/stickers/config.d.ts +1 -0
- package/dist/_internal/shared/listing-types/stickers/config.js +1 -0
- package/dist/_internal/shared/media/limits.d.ts +12 -2
- package/dist/_internal/shared/media/limits.js +12 -2
- package/dist/_internal/shared/search/artifact-url.d.ts +35 -0
- package/dist/_internal/shared/search/artifact-url.js +119 -0
- package/dist/_internal/shared/search/index-record.d.ts +68 -0
- package/dist/_internal/shared/search/index-record.js +96 -0
- package/dist/_internal/shared/search/match.d.ts +65 -0
- package/dist/_internal/shared/search/match.js +263 -0
- package/dist/client.d.ts +8 -7
- package/dist/client.js +12 -5
- package/dist/configs/eslint.js +22 -2
- package/dist/constants/api-endpoints.d.ts +68 -0
- package/dist/constants/api-endpoints.js +32 -0
- package/dist/constants/field-names.d.ts +7 -1
- package/dist/constants/field-names.js +36 -1
- package/dist/contracts/repository.d.ts +8 -7
- package/dist/contracts/search.d.ts +2 -2
- package/dist/contracts/table.d.ts +3 -3
- package/dist/contracts/table.js +3 -3
- package/dist/core/contact-submissions.repository.js +2 -2
- package/dist/core/integration-keys.js +7 -1
- package/dist/core/newsletter.repository.js +2 -2
- package/dist/core/site-config.js +1 -1
- package/dist/errors/error-codes.d.ts +30 -0
- package/dist/errors/error-codes.js +30 -0
- package/dist/errors/error-display-map.js +40 -1
- package/dist/features/account/api/[userId]/addresses/route.js +1 -1
- package/dist/features/account/components/UserBidsView.js +1 -1
- package/dist/features/account/components/index.d.ts +0 -8
- package/dist/features/account/components/index.js +0 -4
- package/dist/features/addresses/repository/addresses.repository.d.ts +17 -6
- package/dist/features/addresses/repository/addresses.repository.js +65 -9
- package/dist/features/addresses/schemas/firestore.d.ts +17 -6
- package/dist/features/admin/actions/notification-actions.js +15 -6
- package/dist/features/admin/api/bids/route.js +1 -1
- package/dist/features/admin/api/coupons/route.js +1 -1
- package/dist/features/admin/api/products/route.js +1 -1
- package/dist/features/admin/api/reviews/route.js +1 -1
- package/dist/features/admin/components/AdminAdEditorView.js +19 -5
- package/dist/features/admin/components/AdminAuditLogView.js +1 -1
- package/dist/features/admin/components/AdminBlogEditorView.js +0 -1
- package/dist/features/admin/components/AdminBlogView.js +1 -1
- package/dist/features/admin/components/AdminBrandsView.js +17 -1
- package/dist/features/admin/components/AdminCategoryEditorView.js +0 -1
- package/dist/features/admin/components/AdminContactView.js +1 -1
- package/dist/features/admin/components/AdminEmployeeEditorView.js +1 -3
- package/dist/features/admin/components/AdminNewsletterView.js +1 -1
- package/dist/features/admin/components/AdminOrdersView.js +9 -2
- package/dist/features/admin/components/AdminPayoutsView.js +1 -1
- package/dist/features/admin/components/AdminPrizeDrawsView.js +11 -0
- package/dist/features/admin/components/AdminProductEditorView.d.ts +10 -1
- package/dist/features/admin/components/AdminProductEditorView.js +24 -37
- package/dist/features/admin/components/AdminProductsView.js +10 -3
- package/dist/features/admin/components/AdminScammersView.js +1 -1
- package/dist/features/admin/components/AdminSectionsView.js +21 -5
- package/dist/features/admin/components/AdminSessionsView.js +1 -1
- package/dist/features/admin/components/AdminSublistingCategoriesView.js +22 -1
- package/dist/features/admin/components/AdminTeamView.js +1 -1
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +0 -1
- package/dist/features/admin/components/AdminUsersView.js +1 -1
- package/dist/features/admin/components/DataListingView.d.ts +2 -1
- package/dist/features/admin/components/DataListingView.js +9 -4
- package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +0 -2
- package/dist/features/admin/hooks/useAdminListing.d.ts +1 -1
- package/dist/features/admin/repository/site-settings.repository.js +8 -3
- package/dist/features/admin/schemas/firestore.d.ts +62 -1
- package/dist/features/admin/schemas/firestore.js +32 -0
- package/dist/features/admin/types/index.d.ts +1 -1
- package/dist/features/auctions/actions/bid-actions.d.ts +2 -2
- package/dist/features/auctions/actions/bid-actions.js +16 -4
- package/dist/features/auctions/api/route.js +1 -1
- package/dist/features/auctions/components/AuctionBottomActions.js +4 -0
- package/dist/features/auctions/repository/bid.repository.d.ts +46 -4
- package/dist/features/auctions/repository/bid.repository.js +114 -13
- package/dist/features/auctions/schemas/firestore.d.ts +24 -4
- package/dist/features/auctions/schemas/firestore.js +1 -0
- package/dist/features/auth/actions/profile-actions.js +30 -4
- package/dist/features/auth/components/index.d.ts +0 -1
- package/dist/features/auth/components/index.js +0 -1
- package/dist/features/auth/repository/session.repository.d.ts +17 -3
- package/dist/features/auth/repository/session.repository.js +46 -5
- package/dist/features/auth/repository/token.repository.d.ts +27 -4
- package/dist/features/auth/repository/token.repository.js +65 -11
- package/dist/features/auth/repository/user.repository.d.ts +33 -7
- package/dist/features/auth/repository/user.repository.js +100 -15
- package/dist/features/auth/schemas/firestore.d.ts +63 -12
- package/dist/features/auth/schemas/firestore.js +11 -0
- package/dist/features/before-after/api/route.js +1 -1
- package/dist/features/blog/components/BlogListView.js +16 -3
- package/dist/features/blog/components/BlogPostView.js +1 -1
- package/dist/features/blog/schemas/index.d.ts +2 -2
- package/dist/features/cart/api/route.js +1 -1
- package/dist/features/catalogue/repository/catalogue.repository.d.ts +7 -7
- package/dist/features/catalogue/repository/catalogue.repository.js +28 -10
- package/dist/features/catalogue/schemas/firestore.d.ts +11 -0
- package/dist/features/categories/api/route.js +10 -10
- package/dist/features/categories/components/CategoryDetailPageView.js +35 -5
- package/dist/features/categories/components/CategorySelectorCreate.js +0 -1
- package/dist/features/categories/components/index.d.ts +0 -2
- package/dist/features/categories/components/index.js +0 -1
- package/dist/features/categories/repository/categories.repository.d.ts +1 -0
- package/dist/features/categories/repository/categories.repository.js +31 -1
- package/dist/features/categories/schemas/index.d.ts +2 -2
- package/dist/features/categories/utils/taxonomy-visual.d.ts +21 -0
- package/dist/features/categories/utils/taxonomy-visual.js +58 -0
- package/dist/features/checkout/actions/checkout-value-otp-actions.js +8 -1
- package/dist/features/collections/api/[slug]/route.js +3 -3
- package/dist/features/collections/api/route.js +1 -1
- package/dist/features/consultation/api/route.js +1 -1
- package/dist/features/consultation/repository/consultations.repository.js +1 -1
- package/dist/features/consultation/types/index.d.ts +1 -1
- package/dist/features/contact/components/ContactForm.js +1 -3
- package/dist/features/corporate/api/route.js +1 -1
- package/dist/features/corporate/repository/corporate.repository.js +1 -1
- package/dist/features/corporate/types/index.d.ts +1 -1
- package/dist/features/cron/jobs/auction-expiry.job.js +1 -1
- package/dist/features/cron/jobs/preorder-reminder.job.js +1 -1
- package/dist/features/events/actions/event-actions.d.ts +14 -0
- package/dist/features/events/actions/event-actions.js +82 -3
- package/dist/features/events/api/[id]/route.js +2 -2
- package/dist/features/events/components/AdminEventEditorView.js +22 -3
- package/dist/features/events/components/AdminEventsView.js +32 -8
- package/dist/features/events/components/EventRafflesSection.d.ts +34 -1
- package/dist/features/events/components/EventRafflesSection.js +52 -3
- package/dist/features/events/components/SpinWheelView.d.ts +2 -2
- package/dist/features/events/components/SpinWheelView.js +41 -4
- package/dist/features/events/repository/event-entry.repository.d.ts +14 -2
- package/dist/features/events/repository/event-entry.repository.js +41 -7
- package/dist/features/events/schemas/firestore.d.ts +17 -4
- package/dist/features/events/types/index.d.ts +37 -0
- package/dist/features/faq/repository/faqs.repository.js +1 -1
- package/dist/features/faq/schemas/index.d.ts +5 -2
- package/dist/features/faq/schemas/index.js +6 -0
- package/dist/features/faq/types/index.d.ts +0 -1
- package/dist/features/grouped/components/GroupedListingEditorView.js +17 -2
- package/dist/features/homepage/api/carousel/[id]/route.js +1 -1
- package/dist/features/homepage/api/carousel/route.js +4 -4
- package/dist/features/homepage/api/route.js +2 -2
- package/dist/features/homepage/api/sections/route.js +1 -1
- package/dist/features/homepage/components/AnnouncementBar.d.ts +1 -9
- package/dist/features/homepage/components/AnnouncementBar.js +13 -19
- package/dist/features/homepage/components/MarketplaceHomepageView.js +6 -1
- package/dist/features/homepage/components/index.d.ts +0 -2
- package/dist/features/homepage/components/index.js +0 -1
- package/dist/features/homepage/repository/homepage.repository.js +1 -1
- package/dist/features/homepage/schemas/firestore.d.ts +6 -0
- package/dist/features/homepage/schemas/index.d.ts +10 -10
- package/dist/features/layout/AppLayoutShell.d.ts +12 -3
- package/dist/features/layout/AppLayoutShell.js +65 -13
- package/dist/features/layout/BottomActionsContext.d.ts +16 -0
- package/dist/features/layout/BottomActionsContext.js +5 -0
- package/dist/features/layout/BottomChrome.js +48 -9
- package/dist/features/layout/BottomNavbar.d.ts +14 -0
- package/dist/features/layout/BottomNavbar.js +43 -3
- package/dist/features/layout/MainNavbar.d.ts +11 -0
- package/dist/features/layout/NavbarLayout.d.ts +3 -0
- package/dist/features/layout/NavbarLayout.js +88 -11
- package/dist/features/layout/SideActionDock.d.ts +1 -0
- package/dist/features/layout/SideActionDock.js +219 -0
- package/dist/features/layout/TitleBarLayout.d.ts +1 -3
- package/dist/features/layout/TitleBarLayout.js +3 -4
- package/dist/features/layout/cta-anchor.d.ts +31 -0
- package/dist/features/layout/cta-anchor.js +31 -0
- package/dist/features/layout/hooks/useBottomActions.d.ts +7 -0
- package/dist/features/layout/hooks/useBottomActions.js +6 -1
- package/dist/features/layout/index.d.ts +9 -1
- package/dist/features/layout/index.js +9 -1
- package/dist/features/layout/useCtaReveal.d.ts +24 -0
- package/dist/features/layout/useCtaReveal.js +82 -0
- package/dist/features/layout/useHoldToOpen.d.ts +41 -0
- package/dist/features/layout/useHoldToOpen.js +84 -0
- package/dist/features/lottery/repository/lottery-entry.repository.d.ts +18 -3
- package/dist/features/lottery/repository/lottery-entry.repository.js +48 -6
- package/dist/features/lottery/schemas/firestore.d.ts +33 -5
- package/dist/features/loyalty/api/balance/route.js +1 -1
- package/dist/features/loyalty/api/history/route.js +1 -1
- package/dist/features/media/MediaImage.js +0 -1
- package/dist/features/media/MediaPickerModal.js +7 -1
- package/dist/features/media/modals/ImageEditor.js +5 -1
- package/dist/features/media/modals/VideoThumbnailSelector.js +17 -1
- package/dist/features/media/repository/media-assets.repository.d.ts +19 -0
- package/dist/features/media/upload/CameraCapture.js +16 -1
- package/dist/features/media/upload/ImageUpload.js +42 -4
- package/dist/features/media/upload/MediaUploadField.js +69 -13
- package/dist/features/media/upload/downscale-image.d.ts +56 -0
- package/dist/features/media/upload/downscale-image.js +150 -0
- package/dist/features/messages/components/ConversationThreadView.js +45 -2
- package/dist/features/messages/components/MessageSellerButton.d.ts +15 -1
- package/dist/features/messages/components/MessageSellerButton.js +10 -2
- package/dist/features/messages/schemas/firestore.d.ts +15 -0
- package/dist/features/orders/hooks/useOrders.js +4 -2
- package/dist/features/orders/repository/orders.repository.d.ts +15 -4
- package/dist/features/orders/repository/orders.repository.js +52 -20
- package/dist/features/orders/schemas/firestore.d.ts +15 -4
- package/dist/features/orders/schemas/index.d.ts +8 -8
- package/dist/features/orders/types/index.d.ts +2 -2
- package/dist/features/payments/repository/payments.repository.js +2 -2
- package/dist/features/payments/repository/payout.repository.d.ts +23 -6
- package/dist/features/payments/repository/payout.repository.js +63 -23
- package/dist/features/payments/repository/saved-payment-methods.repository.d.ts +17 -6
- package/dist/features/payments/repository/saved-payment-methods.repository.js +59 -11
- package/dist/features/payments/schemas/firestore.d.ts +14 -3
- package/dist/features/payments/schemas/saved-methods-firestore.d.ts +12 -1
- package/dist/features/pre-orders/api/[slug]/route.js +1 -1
- package/dist/features/pre-orders/api/admin/route.js +1 -1
- package/dist/features/pre-orders/api/route.js +1 -1
- package/dist/features/pre-orders/repository/pre-orders.repository.d.ts +3 -3
- package/dist/features/pre-orders/repository/pre-orders.repository.js +6 -6
- package/dist/features/products/api/[id]/route.js +1 -1
- package/dist/features/products/components/ListingBottomActions.js +4 -0
- package/dist/features/products/components/ProductDetailPageView.js +2 -1
- package/dist/features/products/components/ProductGalleryClient.js +2 -2
- package/dist/features/products/components/ProductGrid.js +12 -1
- package/dist/features/products/components/index.d.ts +0 -2
- package/dist/features/products/components/index.js +0 -1
- package/dist/features/products/config/listing-type-listing-config.d.ts +0 -3
- package/dist/features/products/config/listing-type-listing-config.js +27 -2
- package/dist/features/products/constants/listing-tabs.d.ts +9 -0
- package/dist/features/products/constants/listing-tabs.js +3 -2
- package/dist/features/products/hooks/useProducts.js +2 -2
- package/dist/features/products/repository/products.repository.js +13 -1
- package/dist/features/products/schemas/index.d.ts +2 -2
- package/dist/features/products/types/index.d.ts +1 -1
- package/dist/features/promotions/api/route.js +1 -1
- package/dist/features/reviews/actions/review-actions.d.ts +6 -6
- package/dist/features/reviews/actions/review-actions.js +22 -8
- package/dist/features/reviews/components/ReviewDetailPageView.js +13 -1
- package/dist/features/reviews/components/ReviewsIndexPageView.js +21 -4
- package/dist/features/reviews/repository/reviews.repository.d.ts +19 -7
- package/dist/features/reviews/repository/reviews.repository.js +63 -12
- package/dist/features/reviews/schemas/firestore.d.ts +13 -2
- package/dist/features/reviews/schemas/index.d.ts +2 -2
- package/dist/features/scams/actions/scam-actions.js +16 -4
- package/dist/features/search/components/SearchResultsPageView.js +2 -1
- package/dist/features/search/hooks/useSearchIndex.d.ts +34 -0
- package/dist/features/search/hooks/useSearchIndex.js +172 -0
- package/dist/features/search/repository/search.repository.js +2 -2
- package/dist/features/seller/actions/offer-actions.d.ts +5 -5
- package/dist/features/seller/actions/offer-actions.js +38 -8
- package/dist/features/seller/actions/seller-actions.js +34 -7
- package/dist/features/seller/api/coupons/route.js +1 -1
- package/dist/features/seller/api/products/route.js +1 -1
- package/dist/features/seller/api/store/route.js +1 -1
- package/dist/features/seller/components/SellerBidsView.js +1 -1
- package/dist/features/seller/components/SellerCouponsView.js +1 -1
- package/dist/features/seller/components/SellerListingTypeView.js +9 -1
- package/dist/features/seller/components/SellerOrdersView.js +1 -1
- package/dist/features/seller/components/SellerPayoutSettingsView.js +0 -1
- package/dist/features/seller/components/SellerPayoutsView.js +1 -1
- package/dist/features/seller/components/SellerProductShell.js +0 -1
- package/dist/features/seller/components/SellerProductsView.js +1 -1
- package/dist/features/seller/components/SellerShippingView.js +0 -1
- package/dist/features/seller/components/SellerStorefrontView.js +0 -1
- package/dist/features/seller/components/index.d.ts +0 -4
- package/dist/features/seller/components/index.js +0 -2
- package/dist/features/seller/repository/offer.repository.d.ts +15 -3
- package/dist/features/seller/repository/offer.repository.js +43 -7
- package/dist/features/seller/schemas/firestore.d.ts +14 -3
- package/dist/features/seller/schemas/index.d.ts +4 -4
- package/dist/features/seller/schemas/order-forms.d.ts +39 -0
- package/dist/features/seller/schemas/order-forms.js +37 -0
- package/dist/features/shell/FormShell.js +6 -2
- package/dist/features/shell/QuickFormDrawer.js +15 -1
- package/dist/features/shipments/components/AdminShipmentEditorView.js +0 -1
- package/dist/features/shipments/components/AdminShipmentsView.js +1 -1
- package/dist/features/sticker-trace/components/StickerCommitPanel.d.ts +30 -0
- package/dist/features/sticker-trace/components/StickerCommitPanel.js +93 -0
- package/dist/features/sticker-trace/components/StickerPrintPanel.d.ts +33 -0
- package/dist/features/sticker-trace/components/StickerPrintPanel.js +104 -0
- package/dist/features/sticker-trace/components/StickerRetryPanel.d.ts +20 -0
- package/dist/features/sticker-trace/components/StickerRetryPanel.js +128 -0
- package/dist/features/sticker-trace/components/StickerRunHistoryPanel.d.ts +45 -0
- package/dist/features/sticker-trace/components/StickerRunHistoryPanel.js +84 -0
- package/dist/features/sticker-trace/components/StickerTraceStudio.d.ts +27 -0
- package/dist/features/sticker-trace/components/StickerTraceStudio.js +171 -0
- package/dist/features/sticker-trace/constants/help-content.d.ts +23 -0
- package/dist/features/sticker-trace/constants/help-content.js +172 -0
- package/dist/features/sticker-trace/hooks/useLiveTrace.d.ts +27 -0
- package/dist/features/sticker-trace/hooks/useLiveTrace.js +160 -0
- package/dist/features/sticker-trace/hooks/useStickerTraceProgress.d.ts +22 -0
- package/dist/features/sticker-trace/hooks/useStickerTraceProgress.js +106 -0
- package/dist/features/sticker-trace/repository/sticker-sheets.repository.d.ts +113 -0
- package/dist/features/sticker-trace/repository/sticker-sheets.repository.js +146 -0
- package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.d.ts +132 -0
- package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.js +174 -0
- package/dist/features/sticker-trace/schemas/firestore.d.ts +248 -0
- package/dist/features/sticker-trace/schemas/firestore.js +79 -0
- package/dist/features/sticker-trace/server.d.ts +8 -0
- package/dist/features/sticker-trace/server.js +51 -0
- package/dist/features/stores/actions/store-query-actions.d.ts +2 -2
- package/dist/features/stores/actions/store-query-actions.js +7 -2
- package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -3
- package/dist/features/stores/api/[storeSlug]/products/route.js +3 -3
- package/dist/features/stores/api/[storeSlug]/reviews/route.js +1 -1
- package/dist/features/stores/api/[storeSlug]/route.js +1 -1
- package/dist/features/stores/components/StoreNavTabs.js +17 -2
- package/dist/features/stores/manifest.js +8 -4
- package/dist/features/support/repository/support.repository.d.ts +14 -3
- package/dist/features/support/repository/support.repository.js +93 -13
- package/dist/features/support/schemas/firestore.d.ts +16 -5
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +61 -19
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +19 -3
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +243 -0
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +36 -10
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +209 -0
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +90 -0
- package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +85 -0
- package/dist/features/tester/seed-data/authored/index.js +10 -0
- package/dist/features/tester/seed-data/authored/selling__media-limits.js +19 -17
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +10 -5
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +283 -0
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +235 -22
- package/dist/index.d.ts +10 -23
- package/dist/index.js +27 -19
- package/dist/next/api/routeHandler.js +9 -0
- package/dist/next/routing/require-record.d.ts +13 -0
- package/dist/next/routing/require-record.js +62 -0
- package/dist/next/routing/route-map.d.ts +4 -4
- package/dist/next/routing/route-map.js +25 -3
- package/dist/providers/db-firebase/base.d.ts +4 -2
- package/dist/providers/db-firebase/base.js +21 -5
- package/dist/providers/db-firebase/base.repository.d.ts +11 -9
- package/dist/providers/db-firebase/base.repository.js +19 -0
- package/dist/providers/db-firebase/rtdb-paths.d.ts +12 -0
- package/dist/providers/db-firebase/rtdb-paths.js +12 -0
- package/dist/react/ErrorBoundary.js +6 -1
- package/dist/react/hooks/realtime-event-constants.d.ts +1 -0
- package/dist/react/hooks/realtime-event-constants.js +8 -0
- package/dist/react/hooks/useEntityDelete.js +5 -1
- package/dist/react/hooks/useMessage.js +5 -1
- package/dist/repositories/index.d.ts +2 -2
- package/dist/repositories/index.js +6 -1
- package/dist/schemas/registry.d.ts +13 -20
- package/dist/schemas/registry.js +31 -14
- package/dist/schemas/webhooks/google-oauth.d.ts +2 -2
- package/dist/security/encrypted.d.ts +117 -0
- package/dist/security/encrypted.js +100 -0
- package/dist/security/index.d.ts +5 -2
- package/dist/security/index.js +16 -2
- package/dist/security/pii-accessors.d.ts +71 -0
- package/dist/security/pii-accessors.js +150 -0
- package/dist/security/pii-encrypt.d.ts +0 -8
- package/dist/security/pii-encrypt.js +22 -15
- package/dist/security/pii-mask.d.ts +18 -0
- package/dist/security/pii-mask.js +27 -0
- package/dist/seed/_helpers/search-txt-wrappers.d.ts +6 -6
- package/dist/seed/_helpers/search-txt-wrappers.js +22 -0
- package/dist/seed/addresses-seed-data.d.ts +2 -2
- package/dist/seed/authenticity-knowledge-seed-data.d.ts +34 -0
- package/dist/seed/authenticity-knowledge-seed-data.js +1277 -0
- package/dist/seed/bids-seed-data.d.ts +2 -2
- package/dist/seed/bids-seed-data.js +23 -2
- package/dist/seed/events-seed-data.d.ts +2 -2
- package/dist/seed/events-seed-data.js +5 -0
- package/dist/seed/faq-seed-data.js +175 -5
- package/dist/seed/homepage-sections-seed-data.js +39 -23
- package/dist/seed/index.d.ts +1 -0
- package/dist/seed/index.js +1 -0
- package/dist/seed/lottery-entries-seed-data.d.ts +2 -2
- package/dist/seed/offers-seed-data.d.ts +2 -2
- package/dist/seed/offers-seed-data.js +1 -1
- package/dist/seed/orders-seed-data.d.ts +2 -2
- package/dist/seed/payouts-seed-data.d.ts +2 -2
- package/dist/seed/payouts-seed-data.js +1 -1
- package/dist/seed/reviews-seed-data.d.ts +1 -2
- package/dist/seed/seed-purpose.js +7 -0
- package/dist/seed/sessions-seed-data.d.ts +2 -2
- package/dist/seed/sessions-seed-data.js +5 -0
- package/dist/seed/site-settings-seed-data.js +1 -1
- package/dist/seed/support-tickets-seed-data.d.ts +2 -2
- package/dist/seed/support-tickets-seed-data.js +1 -1
- package/dist/seed/users-seed-data.d.ts +2 -2
- package/dist/seed/users-seed-data.js +1 -1
- package/dist/seo/json-ld.js +5 -1
- package/dist/server.d.ts +18 -3
- package/dist/server.js +59 -3
- package/dist/styles.css +237 -1
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/Button.js +7 -1
- package/dist/ui/components/FilterChipGroup.d.ts +11 -0
- package/dist/ui/components/FilterChipGroup.js +1 -1
- package/dist/ui/components/ImageGallery.js +6 -1
- package/dist/ui/components/ListingLayout.js +14 -8
- package/dist/ui/components/OverflowRow.d.ts +92 -0
- package/dist/ui/components/OverflowRow.js +203 -0
- package/dist/ui/components/OverflowRow.style.css +235 -0
- package/dist/ui/components/RecordDetailModal.js +14 -1
- package/dist/ui/components/RowActionMenu.js +5 -1
- package/dist/ui/components/SideDrawer.js +5 -1
- package/dist/ui/components/SideModal.js +9 -1
- package/dist/ui/components/TabBarShell.d.ts +12 -1
- package/dist/ui/components/TabBarShell.js +3 -2
- package/dist/ui/components/Tabs.js +36 -24
- package/dist/ui/components/Toast.d.ts +3 -24
- package/dist/ui/components/Toast.js +2 -19
- package/dist/ui/components/TopBannerPortal.d.ts +15 -0
- package/dist/ui/components/TopBannerPortal.js +19 -0
- package/dist/ui/components/UnsavedChangesModal.js +5 -1
- package/dist/ui/components/index.style.css +1 -0
- package/dist/ui/components/row-collapse.d.ts +15 -0
- package/dist/ui/components/row-collapse.js +127 -0
- package/dist/ui/components/toast-context.d.ts +63 -0
- package/dist/ui/components/toast-context.js +48 -0
- package/dist/ui/components/top-banner-slot.d.ts +37 -0
- package/dist/ui/components/top-banner-slot.js +45 -0
- package/dist/ui/icons/icon-registry.d.ts +6 -0
- package/dist/ui/icons/icon-registry.js +17 -1
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.js +1 -0
- package/dist/utils/array.helper.d.ts +2 -2
- package/dist/utils/array.helper.js +5 -5
- package/dist/utils/id-generators.d.ts +6 -0
- package/dist/utils/id-generators.js +10 -0
- package/dist/utils/media-url.js +0 -2
- package/dist/utils/search-txt-builders.d.ts +28 -4
- package/dist/utils/search-txt-builders.js +41 -1
- package/dist/validation/schemas.d.ts +8 -8
- package/package.json +6 -2
- package/scripts/seed-cli.mjs +3 -0
- package/dist/features/account/components/UserAddressesView.d.ts +0 -13
- package/dist/features/account/components/UserAddressesView.js +0 -5
- package/dist/features/account/components/UserNotificationsView.d.ts +0 -15
- package/dist/features/account/components/UserNotificationsView.js +0 -12
- package/dist/features/account/components/UserSettingsView.d.ts +0 -16
- package/dist/features/account/components/UserSettingsView.js +0 -13
- package/dist/features/account/components/UserSupportView.d.ts +0 -3
- package/dist/features/account/components/UserSupportView.js +0 -166
- package/dist/features/admin/components/DemoSeedView.d.ts +0 -11
- package/dist/features/admin/components/DemoSeedView.js +0 -5
- package/dist/features/auth/components/AuthStatusPanel.d.ts +0 -10
- package/dist/features/auth/components/AuthStatusPanel.js +0 -22
- package/dist/features/categories/components/CategoryProductsView.d.ts +0 -45
- package/dist/features/categories/components/CategoryProductsView.js +0 -21
- package/dist/features/homepage/components/HowItWorksInfoView.d.ts +0 -36
- package/dist/features/homepage/components/HowItWorksInfoView.js +0 -10
- package/dist/features/layout/BottomActions.d.ts +0 -1
- package/dist/features/layout/BottomActions.js +0 -311
- package/dist/features/products/components/ProductsView.d.ts +0 -6
- package/dist/features/products/components/ProductsView.js +0 -5
- package/dist/features/seller/components/SellerStoreView.d.ts +0 -8
- package/dist/features/seller/components/SellerStoreView.js +0 -8
|
@@ -14,17 +14,11 @@ export { UserAccountHubView } from "./UserAccountHubView";
|
|
|
14
14
|
export type { UserAccountHubViewProps, UserAccountHubViewLabels, } from "./UserAccountHubView";
|
|
15
15
|
export { ProfileView } from "./ProfileView";
|
|
16
16
|
export type { ProfileViewProps, ProfileViewLabels } from "./ProfileView";
|
|
17
|
-
export { UserSettingsView } from "./UserSettingsView";
|
|
18
|
-
export type { UserSettingsViewProps, UserSettingsViewLabels, } from "./UserSettingsView";
|
|
19
17
|
export { UserOrdersView } from "./UserOrdersView";
|
|
20
18
|
export type { UserOrdersViewProps } from "./UserOrdersView";
|
|
21
19
|
export { UserBidsView } from "./UserBidsView";
|
|
22
20
|
export { OrderDetailView } from "./OrderDetailView";
|
|
23
21
|
export type { OrderDetailViewProps, OrderDetailViewLabels, } from "./OrderDetailView";
|
|
24
|
-
export { UserAddressesView } from "./UserAddressesView";
|
|
25
|
-
export type { UserAddressesViewProps, UserAddressesViewLabels, } from "./UserAddressesView";
|
|
26
|
-
export { UserNotificationsView } from "./UserNotificationsView";
|
|
27
|
-
export type { UserNotificationsViewProps, UserNotificationsViewLabels, } from "./UserNotificationsView";
|
|
28
22
|
export { UserOffersPanel } from "./UserOffersPanel";
|
|
29
23
|
export type { UserOffersPanelProps } from "./UserOffersPanel";
|
|
30
24
|
export { BecomeSellerView } from "./BecomeSellerView";
|
|
@@ -33,7 +27,5 @@ export { UserOrderTrackView } from "./UserOrderTrackView";
|
|
|
33
27
|
export type { UserOrderTrackViewProps, UserOrderTrackViewLabels, } from "./UserOrderTrackView";
|
|
34
28
|
export { UserReturnsView } from "./UserReturnsView";
|
|
35
29
|
export type { UserReturnsViewProps } from "./UserReturnsView";
|
|
36
|
-
export { UserSupportView } from "./UserSupportView";
|
|
37
|
-
export type { UserSupportViewProps } from "./UserSupportView";
|
|
38
30
|
export { NotificationPreferencesPanel } from "./NotificationPreferencesPanel";
|
|
39
31
|
export type { NotificationPreferencesPanelProps } from "./NotificationPreferencesPanel";
|
|
@@ -6,15 +6,11 @@ export { NotificationBell } from "./NotificationBell.js";
|
|
|
6
6
|
export { AddressInlineSelect } from "./AddressInlineSelect.js";
|
|
7
7
|
export { UserAccountHubView } from "./UserAccountHubView.js";
|
|
8
8
|
export { ProfileView } from "./ProfileView.js";
|
|
9
|
-
export { UserSettingsView } from "./UserSettingsView.js";
|
|
10
9
|
export { UserOrdersView } from "./UserOrdersView.js";
|
|
11
10
|
export { UserBidsView } from "./UserBidsView.js";
|
|
12
11
|
export { OrderDetailView } from "./OrderDetailView.js";
|
|
13
|
-
export { UserAddressesView } from "./UserAddressesView.js";
|
|
14
|
-
export { UserNotificationsView } from "./UserNotificationsView.js";
|
|
15
12
|
export { UserOffersPanel } from "./UserOffersPanel.js";
|
|
16
13
|
export { BecomeSellerView } from "./BecomeSellerView.js";
|
|
17
14
|
export { UserOrderTrackView } from "./UserOrderTrackView.js";
|
|
18
15
|
export { UserReturnsView } from "./UserReturnsView.js";
|
|
19
|
-
export { UserSupportView } from "./UserSupportView.js";
|
|
20
16
|
export { NotificationPreferencesPanel } from "./NotificationPreferencesPanel.js";
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { BaseRepository
|
|
2
|
-
import { type AddressBanStatus, type AddressCreateInput, type AddressDocument, type AddressOwnerType, type AddressUpdateInput } from "../schemas";
|
|
1
|
+
import { BaseRepository } from "../../../providers/db-firebase";
|
|
2
|
+
import { type AddressBanStatus, type AddressCreateInput, type AddressDocument, type AddressPlain, type AddressOwnerType, type AddressUpdateInput } from "../schemas";
|
|
3
3
|
export declare class AddressesRepository extends BaseRepository<AddressDocument> {
|
|
4
4
|
constructor();
|
|
5
|
-
private decryptAddress;
|
|
6
5
|
/**
|
|
7
6
|
* Declared, not hand-rolled.
|
|
8
7
|
*
|
|
@@ -15,9 +14,21 @@ export declare class AddressesRepository extends BaseRepository<AddressDocument>
|
|
|
15
14
|
* call.
|
|
16
15
|
*/
|
|
17
16
|
protected piiFields: readonly ["fullName", "phone", "addressLine1", "addressLine2"];
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
/** Plaintext PII. **Opt-in and named** — shows up in review and in a grep. */
|
|
18
|
+
revealAddress(doc: AddressDocument): AddressPlain;
|
|
19
|
+
/** As `revealAddress`, for a list read. */
|
|
20
|
+
revealAddresss(docs: readonly AddressDocument[]): AddressPlain[];
|
|
21
|
+
/**
|
|
22
|
+
* Masked PII — **the default for any surface that only needs to identify a
|
|
23
|
+
* row to a human.** Decrypts first, then masks: the mask helpers refuse
|
|
24
|
+
* ciphertext by design, so passing a stored field straight in would return
|
|
25
|
+
* "Anonymous" for every row.
|
|
26
|
+
*/
|
|
27
|
+
maskedAddress(doc: AddressDocument): AddressPlain;
|
|
28
|
+
/** As `maskedAddress`, for a list read. */
|
|
29
|
+
maskedAddresss(docs: readonly AddressDocument[]): AddressPlain[];
|
|
30
|
+
createWithId(id: string, data: Partial<AddressPlain>): Promise<AddressDocument>;
|
|
31
|
+
update(id: string, data: Partial<AddressPlain>): Promise<AddressDocument>;
|
|
21
32
|
listByOwner(ownerType: AddressOwnerType, ownerId: string): Promise<AddressDocument[]>;
|
|
22
33
|
/**
|
|
23
34
|
* 🛑 Requires the composite index `(ownerType ASC, createdAt DESC)`.
|
|
@@ -13,7 +13,7 @@ import { normalizeError } from "../../../errors/normalize.js";
|
|
|
13
13
|
import { DatabaseError } from "../../../errors/index.js";
|
|
14
14
|
import { serverLogger } from "../../../monitoring/index.js";
|
|
15
15
|
import { BaseRepository, getFirestoreCount, prepareForFirestore, } from "../../../providers/db-firebase/index.js";
|
|
16
|
-
import {
|
|
16
|
+
import { maskPii, revealPii, ADDRESS_PII_FIELDS, } from "../../../security/index.js";
|
|
17
17
|
import { ADDRESS_FIELDS, ADDRESSES_COLLECTION, } from "../schemas/index.js";
|
|
18
18
|
export class AddressesRepository extends BaseRepository {
|
|
19
19
|
constructor() {
|
|
@@ -31,17 +31,53 @@ export class AddressesRepository extends BaseRepository {
|
|
|
31
31
|
*/
|
|
32
32
|
this.piiFields = ADDRESS_PII_FIELDS;
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
/*
|
|
35
|
+
* 🛑 `mapDoc` is NOT overridden, and that absence IS the change.
|
|
36
|
+
*
|
|
37
|
+
* It used to decrypt on every read, so ciphertext never left the database
|
|
38
|
+
* and every caller handled plaintext without ever saying so. Following
|
|
39
|
+
* `SiteSettingsRepository`: reads return what Firestore holds, and plaintext
|
|
40
|
+
* requires one of the two named methods below.
|
|
41
|
+
*
|
|
42
|
+
* A convention would not hold this. `AddressDocument`'s PII fields are
|
|
43
|
+
* `Encrypted<string>`, assignable to nothing that wants a plain `string`, so
|
|
44
|
+
* a reader that skips both accessors is a compile error naming file and line.
|
|
45
|
+
*/
|
|
46
|
+
/** Plaintext PII. **Opt-in and named** — shows up in review and in a grep. */
|
|
47
|
+
revealAddress(doc) {
|
|
48
|
+
return revealPii(doc, ADDRESS_PII_FIELDS);
|
|
36
49
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return this.
|
|
50
|
+
/** As `revealAddress`, for a list read. */
|
|
51
|
+
revealAddresss(docs) {
|
|
52
|
+
return docs.map((d) => this.revealAddress(d));
|
|
40
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Masked PII — **the default for any surface that only needs to identify a
|
|
56
|
+
* row to a human.** Decrypts first, then masks: the mask helpers refuse
|
|
57
|
+
* ciphertext by design, so passing a stored field straight in would return
|
|
58
|
+
* "Anonymous" for every row.
|
|
59
|
+
*/
|
|
60
|
+
maskedAddress(doc) {
|
|
61
|
+
return maskPii(doc, ADDRESS_PII_FIELDS);
|
|
62
|
+
}
|
|
63
|
+
/** As `maskedAddress`, for a list read. */
|
|
64
|
+
maskedAddresss(docs) {
|
|
65
|
+
return docs.map((d) => this.maskedAddress(d));
|
|
66
|
+
}
|
|
67
|
+
/*
|
|
68
|
+
* Takes PLAINTEXT, like the base it overrides — this method is what
|
|
69
|
+
* encrypts (`applyWriteHooks`), so demanding ciphertext from callers
|
|
70
|
+
* inverted its own contract.
|
|
71
|
+
*/
|
|
41
72
|
async createWithId(id, data) {
|
|
42
73
|
const encrypted = this.applyWriteHooks(data);
|
|
43
74
|
return super.createWithId(id, encrypted);
|
|
44
75
|
}
|
|
76
|
+
/*
|
|
77
|
+
* Takes PLAINTEXT, like the base it overrides — this method is the thing
|
|
78
|
+
* that encrypts (`applyWriteHooks`), so demanding ciphertext from callers
|
|
79
|
+
* inverted its own contract.
|
|
80
|
+
*/
|
|
45
81
|
async update(id, data) {
|
|
46
82
|
const encrypted = this.applyWriteHooks(data);
|
|
47
83
|
return super.update(id, encrypted);
|
|
@@ -105,6 +141,7 @@ export class AddressesRepository extends BaseRepository {
|
|
|
105
141
|
}
|
|
106
142
|
const now = new Date();
|
|
107
143
|
const docRef = this.getCollection().doc();
|
|
144
|
+
// Plain in, ciphertext out — the write hook encrypts below.
|
|
108
145
|
const addressData = {
|
|
109
146
|
...input,
|
|
110
147
|
ownerType,
|
|
@@ -166,9 +203,27 @@ export class AddressesRepository extends BaseRepository {
|
|
|
166
203
|
}
|
|
167
204
|
const updateData = { ...input };
|
|
168
205
|
if (input.postalCode || input.addressLine1 || input.addressLine2 !== undefined) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
206
|
+
/*
|
|
207
|
+
* 🛑 Revealed, because the hash is a BLIND INDEX over plaintext.
|
|
208
|
+
*
|
|
209
|
+
* `existing` comes from a find, which no longer decrypts, and these three
|
|
210
|
+
* fall back to it when the caller did not supply them. Hashing ciphertext
|
|
211
|
+
* would compute a hash nothing else can reproduce — so every address
|
|
212
|
+
* edited after this change would stop matching its own duplicates, with
|
|
213
|
+
* no error and nothing to notice. The brand is what made the fallback
|
|
214
|
+
* visible; `.postalCode` is not PII and needs no reveal.
|
|
215
|
+
*/
|
|
216
|
+
const current = this.revealAddress(existing);
|
|
217
|
+
const postalCode = input.postalCode ?? current.postalCode;
|
|
218
|
+
const line1 = input.addressLine1 ?? current.addressLine1;
|
|
219
|
+
const line2 = input.addressLine2 ?? current.addressLine2;
|
|
220
|
+
/*
|
|
221
|
+
* The hash is computed from PLAINTEXT, which is the whole point of a
|
|
222
|
+
* blind index — and `existing` now holds ciphertext, so the three values
|
|
223
|
+
* feeding it come from the revealed copy above. Casting to the document
|
|
224
|
+
* shape here would have hashed ciphertext and silently broken
|
|
225
|
+
* duplicate-detection for every address edited after this change.
|
|
226
|
+
*/
|
|
172
227
|
updateData.addressHash = this.computeAddressHash(postalCode, line1, line2);
|
|
173
228
|
}
|
|
174
229
|
return this.update(addressId, updateData);
|
|
@@ -298,6 +353,7 @@ export class AddressesRepository extends BaseRepository {
|
|
|
298
353
|
}
|
|
299
354
|
}
|
|
300
355
|
async banById(id, banData) {
|
|
356
|
+
// Plain write payload — see `update`'s own note.
|
|
301
357
|
return this.update(id, {
|
|
302
358
|
banStatus: "banned",
|
|
303
359
|
banReason: banData.banReason,
|
|
@@ -8,16 +8,27 @@
|
|
|
8
8
|
* repository overrides `createWithId` and `create` to inject encryption.
|
|
9
9
|
*/
|
|
10
10
|
import type { BaseDocument } from "../../../_internal/shared/types/base-document";
|
|
11
|
+
import type { Encrypted, Plaintext } from "../../../security/encrypted";
|
|
11
12
|
export type AddressOwnerType = "user" | "store";
|
|
12
13
|
export type AddressBanStatus = "banned" | "unban_requested" | "suspicious";
|
|
14
|
+
/**
|
|
15
|
+
* `AddressDocument` with its PII as plain `string` — what the named repository
|
|
16
|
+
* accessors return, and what a WRITE path accepts (the repository encrypts).
|
|
17
|
+
*
|
|
18
|
+
* `Plaintext<T>` is the one definition of this shape; see `security/encrypted.ts`.
|
|
19
|
+
* It is deliberately NOT distinguishable from a MASKED value — `maskPii`
|
|
20
|
+
* returns plain strings too, and no type can express "these characters are
|
|
21
|
+
* asterisks". The distinction is which named method you called.
|
|
22
|
+
*/
|
|
23
|
+
export type AddressPlain = Plaintext<AddressDocument>;
|
|
13
24
|
export interface AddressDocument extends BaseDocument {
|
|
14
25
|
ownerType: AddressOwnerType;
|
|
15
26
|
ownerId: string;
|
|
16
27
|
label: string;
|
|
17
|
-
fullName: string
|
|
18
|
-
phone: string
|
|
19
|
-
addressLine1: string
|
|
20
|
-
addressLine2?: string
|
|
28
|
+
fullName: Encrypted<string>;
|
|
29
|
+
phone: Encrypted<string>;
|
|
30
|
+
addressLine1: Encrypted<string>;
|
|
31
|
+
addressLine2?: Encrypted<string>;
|
|
21
32
|
landmark?: string;
|
|
22
33
|
city: string;
|
|
23
34
|
state: string;
|
|
@@ -40,8 +51,8 @@ export declare const ADDRESS_INDEXED_FIELDS: readonly ["ownerType", "ownerId", "
|
|
|
40
51
|
export declare const DEFAULT_ADDRESS_DATA: Partial<AddressDocument>;
|
|
41
52
|
export declare const ADDRESS_PUBLIC_FIELDS: readonly ["id", "ownerType", "ownerId", "label", "fullName", "phone", "addressLine1", "addressLine2", "landmark", "city", "state", "postalCode", "country", "isDefault", "addressHash", "banStatus", "banReason", "bannedAt", "autoBanned", "unbanRequestNote", "unbanRequestedAt", "createdAt", "updatedAt"];
|
|
42
53
|
export declare const ADDRESS_UPDATABLE_FIELDS: readonly ["label", "fullName", "phone", "addressLine1", "addressLine2", "landmark", "city", "state", "postalCode", "country", "isDefault", "banStatus", "banReason", "bannedBy", "bannedAt", "autoBanned", "unbanRequestNote", "unbanRequestedAt"];
|
|
43
|
-
export type AddressCreateInput = Omit<
|
|
44
|
-
export type AddressUpdateInput = Partial<Pick<
|
|
54
|
+
export type AddressCreateInput = Omit<AddressPlain, "id" | "ownerType" | "ownerId" | "createdAt" | "updatedAt">;
|
|
55
|
+
export type AddressUpdateInput = Partial<Pick<AddressPlain, (typeof ADDRESS_UPDATABLE_FIELDS)[number]>>;
|
|
45
56
|
export declare const ADDRESS_FIELDS: {
|
|
46
57
|
readonly ID: "id";
|
|
47
58
|
readonly OWNER_TYPE: "ownerType";
|
|
@@ -6,7 +6,6 @@ import { createResendProvider } from "../../../providers/email-resend/provider.j
|
|
|
6
6
|
import { isChannelHealthy, withChannelRetry } from "../../../_internal/server/notifications/channel-health.js";
|
|
7
7
|
import { enqueueJob } from "../../jobs/actions/enqueue-job.js";
|
|
8
8
|
import { serverLogger } from "../../../monitoring/index.js";
|
|
9
|
-
import { decryptPii } from "../../../security/index.js";
|
|
10
9
|
import { resolveNotificationActionUrl, TYPE_AUDIENCE, } from "../../../_internal/shared/features/notifications/action-url.js";
|
|
11
10
|
import { isEmailEligible } from "../../../_internal/shared/features/notifications/email-eligibility.js";
|
|
12
11
|
import { renderNotificationEmail } from "../../email/notification-templates.js";
|
|
@@ -187,11 +186,21 @@ export async function sendNotification(input) {
|
|
|
187
186
|
void normalizeError(err);
|
|
188
187
|
serverLogger.warn("notification-actions: user prefs lookup failed — defaulting to all channels enabled", { userId: input.userId, error: err instanceof Error ? err.message : String(err) });
|
|
189
188
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
189
|
+
/*
|
|
190
|
+
* The NAMED accessor, not two bare `decryptPii` casts.
|
|
191
|
+
*
|
|
192
|
+
* These already decrypted and already worked, but the casts defeated the
|
|
193
|
+
* brand — so a grep for `reveal*` could not tell this reader from an
|
|
194
|
+
* unconverted one. `revealUser` is the same decision, stated.
|
|
195
|
+
*
|
|
196
|
+
* Revealed rather than masked because this notification is DELIVERED: a
|
|
197
|
+
* masked address cannot receive mail.
|
|
198
|
+
*/
|
|
199
|
+
const fetchedUserPlain = fetchedUserDoc
|
|
200
|
+
? userRepository.revealUser(fetchedUserDoc)
|
|
201
|
+
: null;
|
|
202
|
+
const resolvedEmail = userEmail ?? fetchedUserPlain?.email ?? undefined;
|
|
203
|
+
const resolvedPhone = userPhone ?? fetchedUserPlain?.phoneNumber ?? undefined;
|
|
195
204
|
// Map NotificationType to a NotificationTypePrefs key.
|
|
196
205
|
/*
|
|
197
206
|
* 🛑 COMPLETE and compile-checked: `Record<NotificationType, …>`, not
|
|
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { useApiMutation } from "@mohasinac/appkit/client";
|
|
4
4
|
import React from "react";
|
|
5
5
|
import { useQuery } from "@tanstack/react-query";
|
|
6
|
-
import { Alert, Checkbox, Div, Span, Stack, StackedViewShell, Text, useToast } from "../../../ui/index.js";
|
|
6
|
+
import { Alert, Checkbox, Div, EmptyState, Span, Stack, StackedViewShell, Text, useToast } from "../../../ui/index.js";
|
|
7
7
|
import { apiClient } from "../../../http/index.js";
|
|
8
8
|
import { ADMIN_ENDPOINTS } from "../../../constants/api-endpoints.js";
|
|
9
9
|
import { adminAdFormSchema } from "../schemas/admin-ops-forms.js";
|
|
@@ -67,6 +67,18 @@ export function AdminAdEditorView({ adId, endpointBase = ADMIN_ENDPOINTS.ADS, la
|
|
|
67
67
|
enabled: Boolean(adId),
|
|
68
68
|
staleTime: 15000,
|
|
69
69
|
});
|
|
70
|
+
/*
|
|
71
|
+
* 🛑 An invented `adId` used to render the full ad editor with empty
|
|
72
|
+
* defaults. Ads live inside the `siteSettings` singleton rather than their
|
|
73
|
+
* own collection, so a Save against a non-existent id does not fail on a
|
|
74
|
+
* missing document — it writes a NEW ad into the settings array, keyed on
|
|
75
|
+
* whatever was in the URL. That is Root Cause #98's shape with the blast
|
|
76
|
+
* radius of a shared document.
|
|
77
|
+
*
|
|
78
|
+
* Gated on the query having settled: `isLoading` is true on first paint, so
|
|
79
|
+
* a bare `!adQuery.data` check would flash this at every real ad.
|
|
80
|
+
*/
|
|
81
|
+
const adMissing = Boolean(adId) && !adQuery.isLoading && !adQuery.isError && !adQuery.data?.item;
|
|
70
82
|
React.useEffect(() => {
|
|
71
83
|
const item = adQuery.data?.item;
|
|
72
84
|
if (!item)
|
|
@@ -88,7 +100,6 @@ export function AdminAdEditorView({ adId, endpointBase = ADMIN_ENDPOINTS.ADS, la
|
|
|
88
100
|
adsenseSlot: item.creative?.adsenseSlot || "",
|
|
89
101
|
thirdPartyUrl: item.creative?.thirdPartyUrl || "",
|
|
90
102
|
});
|
|
91
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
92
103
|
}, [adQuery.data]);
|
|
93
104
|
const saveMutation = useApiMutation({
|
|
94
105
|
errorMessage: "Save failed",
|
|
@@ -208,9 +219,7 @@ export function AdminAdEditorView({ adId, endpointBase = ADMIN_ENDPOINTS.ADS, la
|
|
|
208
219
|
renderers: {
|
|
209
220
|
placementIds: ({ values }) => (_jsx(PlacementChecklist, { placements: placements, selected: values.placementIds, onToggle: togglePlacement })),
|
|
210
221
|
},
|
|
211
|
-
}),
|
|
212
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
213
|
-
[placements]);
|
|
222
|
+
}), [placements]);
|
|
214
223
|
const nav = useSectionFormNav(sections, form, { scope: "admin:ad-editor" });
|
|
215
224
|
const { shellCtx, setFieldError, clearErrors } = useFormShellState(adminAdFormSchema, {
|
|
216
225
|
sections: nav.sectionMeta,
|
|
@@ -230,6 +239,11 @@ export function AdminAdEditorView({ adId, endpointBase = ADMIN_ENDPOINTS.ADS, la
|
|
|
230
239
|
}
|
|
231
240
|
saveMutation.mutate();
|
|
232
241
|
};
|
|
242
|
+
if (adMissing) {
|
|
243
|
+
return (_jsx(StackedViewShell, { portal: "admin", ...rest, title: "Ad not found", sections: [
|
|
244
|
+
_jsx(EmptyState, { title: "Ad not found", description: "This ad may have been deleted, or the link may be wrong." }, "missing"),
|
|
245
|
+
] }));
|
|
246
|
+
}
|
|
233
247
|
return (_jsx(StackedViewShell, { portal: "admin", ...rest, title: labels.title ?? (adId ? "Edit Ad" : "Create Ad"), sections: [
|
|
234
248
|
metaQuery.error ? (_jsx(Alert, { variant: "error", title: "Could not load ad metadata", children: metaQuery.error instanceof Error ? metaQuery.error.message : "Unknown error" })) : null,
|
|
235
249
|
adQuery.error ? (_jsx(Alert, { variant: "error", title: "Could not load ad", children: adQuery.error instanceof Error ? adQuery.error.message : "Unknown error" })) : null,
|
|
@@ -71,7 +71,7 @@ export function AdminAuditLogView({ children, ...props }) {
|
|
|
71
71
|
{ value: sortBy("createdAt", "DESC"), label: "Newest" },
|
|
72
72
|
{ value: sortBy("createdAt", "ASC"), label: "Oldest" },
|
|
73
73
|
],
|
|
74
|
-
mapRows: (response) => toRecordArray(response.
|
|
74
|
+
mapRows: (response) => toRecordArray(response.items).map((item, index) => {
|
|
75
75
|
const action = toStringValue(item.action, "unknown");
|
|
76
76
|
return {
|
|
77
77
|
id: toStringValue(item.id, `audit-${index}`),
|
|
@@ -260,7 +260,6 @@ export function AdminBlogEditorView({ postId, onSaved, onDeleted, embedded, ...r
|
|
|
260
260
|
// up the component.
|
|
261
261
|
useEffect(() => {
|
|
262
262
|
validate(draft);
|
|
263
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
264
263
|
}, [draft, validate]);
|
|
265
264
|
const formContent = (_jsxs(FormShellContext.Provider, { value: shellCtx, children: [_jsx(FormErrorSummary, {}), _jsx(SectionForm, { sections: sections, values: draft, onChange: update, onSubmit: () => { saveMutation.mutate(); }, schema: blogDraftSchema, openIds: openIds, onOpenChange: setOpenIds, submitLabel: isEdit ? "Save Changes" : "Create Post", isLoading: isLoading }), deleteModal] }));
|
|
266
265
|
if (embedded) {
|
|
@@ -42,7 +42,7 @@ export function AdminBlogView({ children, ...props }) {
|
|
|
42
42
|
{ value: sortBy("createdAt", "DESC"), label: "Newest draft" },
|
|
43
43
|
{ value: "title", label: "Title A–Z" },
|
|
44
44
|
],
|
|
45
|
-
mapRows: (response) => toRecordArray(response.
|
|
45
|
+
mapRows: (response) => toRecordArray(response.items).map((item, index) => ({
|
|
46
46
|
id: toStringValue(item.id, `post-${index}`),
|
|
47
47
|
primary: toStringValue(item.title, "Untitled post"),
|
|
48
48
|
secondary: [
|
|
@@ -33,7 +33,23 @@ const COLUMNS = [
|
|
|
33
33
|
const ADMIN_BRANDS_CONFIG = {
|
|
34
34
|
portal: "admin",
|
|
35
35
|
title: "Brands",
|
|
36
|
-
|
|
36
|
+
/*
|
|
37
|
+
* Restored 2026-10-17. The note that stood here said "restore it when the
|
|
38
|
+
* collection gains searchTxt" — `categories` has it, and a brand IS a
|
|
39
|
+
* `categories` row, so `/api/admin/brands` now passes `q` as a search opt.
|
|
40
|
+
*
|
|
41
|
+
* `fields` lists what a user can expect to match, and it is a subset of
|
|
42
|
+
* `buildCategorySearchTxt`'s source list rather than a guess: that builder
|
|
43
|
+
* also indexes `path`, `itemCode`, `brandCountry`, ancestor names, authored
|
|
44
|
+
* aliases and generated misspelling variants, so the box reaches further
|
|
45
|
+
* than it advertises — never less.
|
|
46
|
+
*/
|
|
47
|
+
search: {
|
|
48
|
+
placeholder: "Search brands by name, slug or description…",
|
|
49
|
+
mode: "partial",
|
|
50
|
+
fields: ["name", "slug", "description"],
|
|
51
|
+
commit: "debounce",
|
|
52
|
+
},
|
|
37
53
|
emptyLabel: "No brands found",
|
|
38
54
|
filterKeys: ["isActive"],
|
|
39
55
|
defaultSort: sortBy("order", "ASC"),
|
|
@@ -75,7 +75,6 @@ async function loadTaxCodeOptions(query, page) {
|
|
|
75
75
|
if (query)
|
|
76
76
|
params.set("q", query);
|
|
77
77
|
const res = await apiClient.get(`${ADMIN_ENDPOINTS.TAX_CODES}?${params.toString()}`);
|
|
78
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
79
78
|
const payload = res?.data ?? res;
|
|
80
79
|
const items = payload?.items ?? payload?.data ?? [];
|
|
81
80
|
return {
|
|
@@ -59,7 +59,7 @@ export function AdminContactView({ children, onBulkMarkRead, onBulkArchive, onBu
|
|
|
59
59
|
{ value: sortBy("createdAt", "DESC"), label: "Newest" },
|
|
60
60
|
{ value: sortBy("createdAt", "ASC"), label: "Oldest" },
|
|
61
61
|
],
|
|
62
|
-
mapRows: (response) => toRecordArray(response.
|
|
62
|
+
mapRows: (response) => toRecordArray(response.items).map((item, index) => ({
|
|
63
63
|
id: toStringValue(item.id, `msg-${index}`),
|
|
64
64
|
primary: toStringValue(item.subject, "No subject"),
|
|
65
65
|
secondary: [toStringValue(item.name, "Unknown"), toStringValue(item.email, "")]
|
|
@@ -170,9 +170,7 @@ export function AdminEmployeeEditorView({ open, onClose, mode, userId, displayNa
|
|
|
170
170
|
permissionGroup: ({ values, errors }) => (_jsx(FieldSelectGroup, { value: values.permissionGroup, error: errors.permissionGroup, onChange: applyGroupPreset })),
|
|
171
171
|
permissions: ({ values }) => (_jsx(PermissionDomainsPanel, { permissions: values.permissions, togglePerm: togglePerm })),
|
|
172
172
|
},
|
|
173
|
-
}),
|
|
174
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
175
|
-
[schema]);
|
|
173
|
+
}), [schema]);
|
|
176
174
|
const nav = useSectionFormNav(sections, form, { scope: "admin:employee-editor" });
|
|
177
175
|
const { shellCtx, setFieldError, clearErrors } = useFormShellState(schema, {
|
|
178
176
|
sections: nav.sectionMeta,
|
|
@@ -100,7 +100,7 @@ export function AdminNewsletterView({ children, onBulkUnsubscribe, ...props }) {
|
|
|
100
100
|
// Opening a row is what makes the destructive actions beside it
|
|
101
101
|
// safe to offer at all.
|
|
102
102
|
onRowClick: (row) => setDetail(row),
|
|
103
|
-
mapRows: (response) => toRecordArray(response.
|
|
103
|
+
mapRows: (response) => toRecordArray(response.items).map((item, index) => ({
|
|
104
104
|
id: toStringValue(item.id, `sub-${index}`),
|
|
105
105
|
primary: toStringValue(item.email, "Unknown email"),
|
|
106
106
|
secondary: [toStringValue(item.source, ""), item.ipAddress ? "IP logged" : ""]
|
|
@@ -105,10 +105,17 @@ export function AdminOrdersView({ children, ...props }) {
|
|
|
105
105
|
throw err;
|
|
106
106
|
}
|
|
107
107
|
}, [showToast]);
|
|
108
|
+
/*
|
|
109
|
+
* 🛑 ABOVE the `children` short-circuit. `useOrderScope` sat below it, so a
|
|
110
|
+
* caller passing children skipped the hook entirely and the hook order
|
|
111
|
+
* differed between the two render paths — React then reads one hook's state
|
|
112
|
+
* into another's slot. A hook must run on every render of a component, which
|
|
113
|
+
* means before any conditional return, always.
|
|
114
|
+
*/
|
|
115
|
+
const orderScope = useOrderScope();
|
|
108
116
|
if (React.Children.count(children) > 0) {
|
|
109
117
|
return (_jsx(ListingLayout, { portal: "admin", ...props, children: children }));
|
|
110
118
|
}
|
|
111
|
-
const orderScope = useOrderScope();
|
|
112
119
|
const config = {
|
|
113
120
|
portal: "admin",
|
|
114
121
|
title: "Orders",
|
|
@@ -132,7 +139,7 @@ export function AdminOrdersView({ children, ...props }) {
|
|
|
132
139
|
{ value: sortBy("createdAt", "DESC"), label: "Newest" },
|
|
133
140
|
{ value: sortBy("createdAt", "ASC"), label: "Oldest" },
|
|
134
141
|
],
|
|
135
|
-
mapRows: (response) => toRecordArray(response.
|
|
142
|
+
mapRows: (response) => toRecordArray(response.items).map((item, index) => {
|
|
136
143
|
const orderId = toStringValue(item.id, `order-${index}`);
|
|
137
144
|
const { image, title, extraCount } = firstOrderItem(item);
|
|
138
145
|
return {
|
|
@@ -100,7 +100,7 @@ export function AdminPayoutsView({ children, ...props }) {
|
|
|
100
100
|
{ value: sortBy("createdAt", "ASC"), label: "Oldest" },
|
|
101
101
|
{ value: sortBy("amount", "DESC"), label: "Highest amount" },
|
|
102
102
|
],
|
|
103
|
-
mapRows: (response) => toRecordArray(response.
|
|
103
|
+
mapRows: (response) => toRecordArray(response.items).map((item, index) => ({
|
|
104
104
|
id: toStringValue(item.id, `payout-${index}`),
|
|
105
105
|
primary: [`Payout ${toStringValue(item.id, "-")}`, toCurrency(item.amount)].join(" · "),
|
|
106
106
|
secondary: toStringValue(item.storeName ?? item.sellerName, "Unknown store"),
|
|
@@ -124,6 +124,17 @@ export function AdminPrizeDrawsView({ children, ...props }) {
|
|
|
124
124
|
buildExtraParams: () => scope.extraParams,
|
|
125
125
|
renderAboveContent: scope.renderAboveContent,
|
|
126
126
|
rowHrefTemplate: String(ROUTES.ADMIN.PRIZE_DRAWS_EDIT("{id}")),
|
|
127
|
+
/*
|
|
128
|
+
* A prize draw IS a product (`listingType: "prize-draw"`), so it is created
|
|
129
|
+
* in the product editor like every other type — there is deliberately no
|
|
130
|
+
* `PRIZE_DRAWS_NEW` admin route, and inventing one would be a second create
|
|
131
|
+
* path for the same document. `?listingType=` preselects the type so the
|
|
132
|
+
* row an admin creates from here actually appears here.
|
|
133
|
+
*/
|
|
134
|
+
primaryAction: {
|
|
135
|
+
label: "Add Prize Draw",
|
|
136
|
+
href: `${String(ROUTES.ADMIN.PRODUCTS_NEW)}?${PRODUCT_FIELDS.LISTING_TYPE}=prize-draw`,
|
|
137
|
+
},
|
|
127
138
|
// Rule #7: bulk-action array sourced from the ADMIN_BULK_ACTIONS preset.
|
|
128
139
|
buildBulkActions: (selection) => ADMIN_BULK_ACTIONS.prizeDraws.map((id) => ({
|
|
129
140
|
id,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { StackedViewShellProps } from "../../../ui";
|
|
3
3
|
import type { ProductFormValue } from "../../products/components/ProductForm";
|
|
4
|
+
import type { ListingType } from "../../products/types";
|
|
4
5
|
export interface AdminProductEditorViewProps extends Omit<StackedViewShellProps, "sections"> {
|
|
5
6
|
productId?: string;
|
|
6
7
|
onSaved?: (id: string) => void;
|
|
@@ -15,5 +16,13 @@ export interface AdminProductEditorViewProps extends Omit<StackedViewShellProps,
|
|
|
15
16
|
* background per its normal staleTime rules.
|
|
16
17
|
*/
|
|
17
18
|
initialData?: ProductFormValue;
|
|
19
|
+
/**
|
|
20
|
+
* Which listing type a NEW product starts on. Lets a per-type admin listing
|
|
21
|
+
* ("Art", "Classifieds", …) send the admin straight into a create form for
|
|
22
|
+
* its own type rather than for `standard` — which is what lets those five
|
|
23
|
+
* pages have a create button at all. Ignored in edit mode, where the stored
|
|
24
|
+
* `listingType` is the only correct answer.
|
|
25
|
+
*/
|
|
26
|
+
initialListingType?: ListingType;
|
|
18
27
|
}
|
|
19
|
-
export declare function AdminProductEditorView({ productId, onSaved, onDeleted, embedded, enabledListingTypes, initialData, ...rest }: AdminProductEditorViewProps): React.JSX.Element;
|
|
28
|
+
export declare function AdminProductEditorView({ productId, onSaved, onDeleted, embedded, enabledListingTypes, initialData, initialListingType, ...rest }: AdminProductEditorViewProps): React.JSX.Element;
|