@mohasinac/appkit 2.7.53 → 2.7.55

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.
Files changed (197) hide show
  1. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +1 -1
  2. package/dist/_internal/server/jobs/core/auctionSettlement.js +6 -3
  3. package/dist/_internal/server/jobs/core/bundleStockSync.js +9 -7
  4. package/dist/_internal/server/jobs/core/onProductStockChange.d.ts +12 -3
  5. package/dist/_internal/server/jobs/core/onProductStockChange.js +12 -13
  6. package/dist/_internal/server/jobs/core/onProductWrite.js +1 -3
  7. package/dist/_internal/server/jobs/handlers/onProductStockChange.js +11 -2
  8. package/dist/_internal/server/jobs/runtime/adapters/firebase.js +5 -14
  9. package/dist/_internal/shared/actions/action-registry.js +827 -4
  10. package/dist/_internal/shared/features/events/schema.d.ts +4 -4
  11. package/dist/client.d.ts +2 -0
  12. package/dist/client.js +1 -0
  13. package/dist/constants/api-endpoints.d.ts +3 -0
  14. package/dist/constants/api-endpoints.js +1 -0
  15. package/dist/constants/field-names.d.ts +4 -3
  16. package/dist/constants/field-names.js +8 -8
  17. package/dist/errors/error-codes.d.ts +3 -0
  18. package/dist/errors/error-codes.js +3 -0
  19. package/dist/errors/messages.d.ts +3 -0
  20. package/dist/errors/messages.js +3 -0
  21. package/dist/features/account/components/UserOffersPanel.js +2 -1
  22. package/dist/features/admin/components/AdminAllEventEntriesView.js +4 -3
  23. package/dist/features/admin/components/AdminBidsView.js +5 -3
  24. package/dist/features/admin/components/AdminBlogView.js +3 -2
  25. package/dist/features/admin/components/AdminBrandsView.js +2 -1
  26. package/dist/features/admin/components/AdminBundleEditorView.js +4 -5
  27. package/dist/features/admin/components/AdminBundlesView.js +3 -3
  28. package/dist/features/admin/components/AdminCarouselView.d.ts +2 -1
  29. package/dist/features/admin/components/AdminCarouselView.js +14 -5
  30. package/dist/features/admin/components/AdminCategoriesView.js +2 -1
  31. package/dist/features/admin/components/AdminContactView.d.ts +4 -1
  32. package/dist/features/admin/components/AdminContactView.js +27 -7
  33. package/dist/features/admin/components/AdminCouponsView.d.ts +3 -1
  34. package/dist/features/admin/components/AdminCouponsView.js +17 -3
  35. package/dist/features/admin/components/AdminFaqsView.d.ts +3 -1
  36. package/dist/features/admin/components/AdminFaqsView.js +18 -4
  37. package/dist/features/admin/components/AdminFeaturesView.js +2 -1
  38. package/dist/features/admin/components/AdminMediaView.js +3 -2
  39. package/dist/features/admin/components/AdminNavigationView.js +3 -2
  40. package/dist/features/admin/components/AdminNewsletterView.d.ts +2 -1
  41. package/dist/features/admin/components/AdminNewsletterView.js +13 -4
  42. package/dist/features/admin/components/AdminNotificationsView.js +6 -4
  43. package/dist/features/admin/components/AdminOrdersView.js +4 -3
  44. package/dist/features/admin/components/AdminPayoutsView.js +2 -2
  45. package/dist/features/admin/components/AdminPrizeDrawsView.js +2 -1
  46. package/dist/features/admin/components/AdminProductsView.js +3 -3
  47. package/dist/features/admin/components/AdminReviewsView.js +4 -3
  48. package/dist/features/admin/components/AdminScammersView.js +2 -1
  49. package/dist/features/admin/components/AdminSessionsView.js +5 -3
  50. package/dist/features/admin/components/AdminStoresView.js +2 -2
  51. package/dist/features/admin/components/AdminSublistingCategoriesView.d.ts +5 -1
  52. package/dist/features/admin/components/AdminSublistingCategoriesView.js +12 -3
  53. package/dist/features/admin/components/AdminSupportTicketsView.js +2 -1
  54. package/dist/features/admin/components/AdminTeamView.d.ts +2 -1
  55. package/dist/features/admin/components/AdminTeamView.js +13 -4
  56. package/dist/features/admin/components/AdminUsersView.js +2 -2
  57. package/dist/features/admin/types/product.types.d.ts +1 -1
  58. package/dist/features/admin/types/product.types.js +2 -3
  59. package/dist/features/auctions/actions/bid-actions.d.ts +9 -0
  60. package/dist/features/auctions/actions/bid-actions.js +61 -0
  61. package/dist/features/auctions/components/AuctionDetailPageView.d.ts +2 -1
  62. package/dist/features/auctions/components/AuctionDetailPageView.js +5 -4
  63. package/dist/features/auctions/components/PlaceBidFormClient.d.ts +3 -1
  64. package/dist/features/auctions/components/PlaceBidFormClient.js +32 -2
  65. package/dist/features/auctions/types/index.d.ts +1 -1
  66. package/dist/features/layout/AppLayoutShell.js +1 -1
  67. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +2 -11
  68. package/dist/features/products/api/[id]/route.js +4 -8
  69. package/dist/features/products/api/route.js +1 -3
  70. package/dist/features/products/components/AuctionsIndexListing.js +3 -11
  71. package/dist/features/products/components/PrizeDrawsIndexListing.js +2 -10
  72. package/dist/features/products/components/ProductFilters.d.ts +33 -9
  73. package/dist/features/products/components/ProductFilters.js +6 -29
  74. package/dist/features/products/components/ProductForm.js +2 -3
  75. package/dist/features/products/constants/action-defs.d.ts +86 -7
  76. package/dist/features/products/constants/action-defs.js +99 -7
  77. package/dist/features/products/constants/sieve.d.ts +162 -0
  78. package/dist/features/products/constants/sieve.js +95 -0
  79. package/dist/features/products/repository/products.repository.d.ts +5 -0
  80. package/dist/features/products/repository/products.repository.js +23 -3
  81. package/dist/features/products/schemas/firestore.d.ts +4 -4
  82. package/dist/features/products/schemas/firestore.js +2 -3
  83. package/dist/features/products/schemas/index.d.ts +6 -6
  84. package/dist/features/products/schemas/index.js +2 -6
  85. package/dist/features/products/types/index.d.ts +1 -1
  86. package/dist/features/seller/actions/offer-actions.js +2 -2
  87. package/dist/features/seller/components/QuickProductForm.d.ts +13 -0
  88. package/dist/features/seller/components/QuickProductForm.js +50 -0
  89. package/dist/features/seller/components/SellerAuctionsView.d.ts +4 -1
  90. package/dist/features/seller/components/SellerAuctionsView.js +37 -3
  91. package/dist/features/seller/components/SellerBidsView.js +2 -1
  92. package/dist/features/seller/components/SellerBundlesView.d.ts +3 -1
  93. package/dist/features/seller/components/SellerBundlesView.js +38 -5
  94. package/dist/features/seller/components/SellerClassifiedView.d.ts +3 -1
  95. package/dist/features/seller/components/SellerClassifiedView.js +37 -4
  96. package/dist/features/seller/components/SellerDigitalCodesView.d.ts +3 -1
  97. package/dist/features/seller/components/SellerDigitalCodesView.js +37 -4
  98. package/dist/features/seller/components/SellerGoogleReviewsView.js +2 -1
  99. package/dist/features/seller/components/SellerGroupedListingsView.js +3 -2
  100. package/dist/features/seller/components/SellerLiveView.d.ts +3 -1
  101. package/dist/features/seller/components/SellerLiveView.js +37 -4
  102. package/dist/features/seller/components/SellerOffersPanel.js +2 -1
  103. package/dist/features/seller/components/SellerOffersView.d.ts +4 -1
  104. package/dist/features/seller/components/SellerOffersView.js +8 -3
  105. package/dist/features/seller/components/SellerPayoutsView.d.ts +3 -1
  106. package/dist/features/seller/components/SellerPayoutsView.js +7 -3
  107. package/dist/features/seller/components/SellerPreOrdersView.d.ts +2 -1
  108. package/dist/features/seller/components/SellerPreOrdersView.js +30 -7
  109. package/dist/features/seller/components/SellerPrizeDrawsView.d.ts +2 -1
  110. package/dist/features/seller/components/SellerPrizeDrawsView.js +30 -7
  111. package/dist/features/seller/components/SellerProductShell.js +12 -0
  112. package/dist/features/seller/components/SellerReviewsView.js +2 -1
  113. package/dist/features/seller/components/SellerShippingConfigsView.js +3 -2
  114. package/dist/features/seller/components/SellerStoreCategoriesView.js +6 -5
  115. package/dist/features/seller/components/SellerTemplatesView.js +4 -3
  116. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +30 -16
  117. package/dist/features/wishlist/types/index.d.ts +1 -1
  118. package/dist/index.d.ts +6 -3
  119. package/dist/index.js +6 -4
  120. package/dist/seed/addresses-seed-data.d.ts +2 -18
  121. package/dist/seed/addresses-seed-data.js +137 -203
  122. package/dist/seed/bids-seed-data.d.ts +2 -8
  123. package/dist/seed/bids-seed-data.js +172 -648
  124. package/dist/seed/blog-posts-seed-data.d.ts +0 -5
  125. package/dist/seed/blog-posts-seed-data.js +341 -596
  126. package/dist/seed/carousel-slides-seed-data.d.ts +0 -5
  127. package/dist/seed/carousel-slides-seed-data.js +61 -192
  128. package/dist/seed/carousels-seed-data.js +18 -1
  129. package/dist/seed/cart-seed-data.d.ts +1 -18
  130. package/dist/seed/cart-seed-data.js +116 -293
  131. package/dist/seed/categories-seed-data.d.ts +0 -6
  132. package/dist/seed/categories-seed-data.js +1409 -1537
  133. package/dist/seed/claimed-coupons-seed-data.d.ts +0 -11
  134. package/dist/seed/claimed-coupons-seed-data.js +32 -29
  135. package/dist/seed/conversations-seed-data.d.ts +0 -6
  136. package/dist/seed/conversations-seed-data.js +132 -280
  137. package/dist/seed/coupon-usage-seed-data.d.ts +0 -16
  138. package/dist/seed/coupon-usage-seed-data.js +30 -44
  139. package/dist/seed/coupons-seed-data.d.ts +0 -6
  140. package/dist/seed/coupons-seed-data.js +141 -489
  141. package/dist/seed/events-seed-data.d.ts +0 -6
  142. package/dist/seed/events-seed-data.js +201 -379
  143. package/dist/seed/faq-seed-data.d.ts +0 -14
  144. package/dist/seed/faq-seed-data.js +609 -1184
  145. package/dist/seed/grouped-listings-seed-data.d.ts +119 -8
  146. package/dist/seed/grouped-listings-seed-data.js +148 -233
  147. package/dist/seed/history-seed-data.d.ts +0 -7
  148. package/dist/seed/history-seed-data.js +50 -54
  149. package/dist/seed/homepage-sections-seed-data.d.ts +0 -5
  150. package/dist/seed/homepage-sections-seed-data.js +83 -175
  151. package/dist/seed/index.d.ts +1 -1
  152. package/dist/seed/index.js +1 -1
  153. package/dist/seed/manifest.js +2 -2
  154. package/dist/seed/notifications-seed-data.d.ts +0 -6
  155. package/dist/seed/notifications-seed-data.js +309 -196
  156. package/dist/seed/offers-seed-data.d.ts +0 -8
  157. package/dist/seed/offers-seed-data.js +118 -197
  158. package/dist/seed/orders-seed-data.d.ts +2 -8
  159. package/dist/seed/orders-seed-data.js +248 -1510
  160. package/dist/seed/payouts-seed-data.d.ts +0 -6
  161. package/dist/seed/payouts-seed-data.js +102 -441
  162. package/dist/seed/products-auctions-seed-data.d.ts +1 -14
  163. package/dist/seed/products-auctions-seed-data.js +612 -1084
  164. package/dist/seed/products-preorders-seed-data.d.ts +119 -14
  165. package/dist/seed/products-preorders-seed-data.js +154 -455
  166. package/dist/seed/products-standard-seed-data.d.ts +1 -15
  167. package/dist/seed/products-standard-seed-data.js +1355 -4128
  168. package/dist/seed/reviews-seed-data.d.ts +2 -8
  169. package/dist/seed/reviews-seed-data.js +99 -1182
  170. package/dist/seed/scammers-seed-data.d.ts +0 -15
  171. package/dist/seed/scammers-seed-data.js +36 -37
  172. package/dist/seed/sessions-seed-data.d.ts +0 -13
  173. package/dist/seed/sessions-seed-data.js +58 -335
  174. package/dist/seed/site-settings-seed-data.d.ts +0 -4
  175. package/dist/seed/site-settings-seed-data.js +61 -52
  176. package/dist/seed/store-addresses-seed-data.js +27 -151
  177. package/dist/seed/store-extensions-seed-data.d.ts +0 -7
  178. package/dist/seed/store-extensions-seed-data.js +147 -261
  179. package/dist/seed/stores-seed-data.d.ts +0 -5
  180. package/dist/seed/stores-seed-data.js +222 -184
  181. package/dist/seed/sub-listings-seed-data.d.ts +119 -0
  182. package/dist/seed/sub-listings-seed-data.js +447 -0
  183. package/dist/seed/support-tickets-seed-data.d.ts +0 -7
  184. package/dist/seed/support-tickets-seed-data.js +82 -75
  185. package/dist/seed/users-seed-data.d.ts +0 -5
  186. package/dist/seed/users-seed-data.js +279 -634
  187. package/dist/seed/wishlists-seed-data.d.ts +0 -9
  188. package/dist/seed/wishlists-seed-data.js +36 -52
  189. package/dist/seo/json-ld.js +6 -4
  190. package/dist/styles.css +8052 -3
  191. package/dist/tailwind-utilities.css +1 -1
  192. package/dist/utils/index.d.ts +1 -0
  193. package/dist/utils/index.js +1 -0
  194. package/dist/utils/search-tokens.d.ts +2 -0
  195. package/dist/utils/search-tokens.js +21 -0
  196. package/package.json +2 -2
  197. package/scripts/seed-cli.mjs +2 -2
@@ -8,7 +8,7 @@ import { SwitchFilter } from "../../filters/SwitchFilter";
8
8
  import { Div } from "../../../ui";
9
9
  import { TABLE_KEYS } from "../../../constants/table-keys";
10
10
  import { PRODUCT_FIELDS } from "../../../constants/field-names";
11
- import { sortBy } from "../../../constants/sort";
11
+ import { STANDARD_SORT_OPTIONS, STANDARD_PUBLIC_SORT_OPTIONS, } from "../constants/sieve";
12
12
  export const PRODUCT_FILTER_KEYS = {
13
13
  admin: [
14
14
  TABLE_KEYS.CATEGORY,
@@ -48,33 +48,9 @@ export const PRODUCT_FILTER_KEYS = {
48
48
  TABLE_KEYS.FEATURES,
49
49
  ],
50
50
  };
51
- const LABEL_PRICE_HIGH_TO_LOW = "Price: High to Low";
52
- const LABEL_PRICE_LOW_TO_HIGH = "Price: Low to High";
53
- export const PRODUCT_ADMIN_SORT_OPTIONS = [
54
- { value: sortBy(PRODUCT_FIELDS.CREATED_AT), label: "Newest First" },
55
- { value: sortBy(PRODUCT_FIELDS.CREATED_AT, "ASC"), label: "Oldest First" },
56
- { value: sortBy(PRODUCT_FIELDS.PRICE), label: LABEL_PRICE_HIGH_TO_LOW },
57
- { value: sortBy(PRODUCT_FIELDS.PRICE, "ASC"), label: LABEL_PRICE_LOW_TO_HIGH },
58
- { value: sortBy(PRODUCT_FIELDS.TITLE, "ASC"), label: "Title A-Z" },
59
- { value: sortBy(PRODUCT_FIELDS.TITLE), label: "Title Z-A" },
60
- { value: sortBy(PRODUCT_FIELDS.VIEW_COUNT), label: "Most Viewed" },
61
- ];
62
- export const PRODUCT_SELLER_SORT_OPTIONS = [
63
- { value: sortBy(PRODUCT_FIELDS.CREATED_AT), label: "Newest First" },
64
- { value: sortBy(PRODUCT_FIELDS.CREATED_AT, "ASC"), label: "Oldest First" },
65
- { value: sortBy(PRODUCT_FIELDS.PRICE), label: LABEL_PRICE_HIGH_TO_LOW },
66
- { value: sortBy(PRODUCT_FIELDS.PRICE, "ASC"), label: LABEL_PRICE_LOW_TO_HIGH },
67
- { value: sortBy(PRODUCT_FIELDS.TITLE, "ASC"), label: "Title A-Z" },
68
- ];
69
- export const PRODUCT_PUBLIC_SORT_OPTIONS = [
70
- { value: sortBy(PRODUCT_FIELDS.CREATED_AT), label: "Newest First" },
71
- { value: sortBy(PRODUCT_FIELDS.CREATED_AT, "ASC"), label: "Oldest First" },
72
- { value: sortBy(PRODUCT_FIELDS.PRICE), label: LABEL_PRICE_HIGH_TO_LOW },
73
- { value: sortBy(PRODUCT_FIELDS.PRICE, "ASC"), label: LABEL_PRICE_LOW_TO_HIGH },
74
- { value: sortBy(PRODUCT_FIELDS.TITLE, "ASC"), label: "Title A–Z" },
75
- { value: sortBy(PRODUCT_FIELDS.TITLE), label: "Title Z–A" },
76
- { value: sortBy(PRODUCT_FIELDS.VIEW_COUNT), label: "Most Viewed" },
77
- ];
51
+ export const PRODUCT_ADMIN_SORT_OPTIONS = STANDARD_SORT_OPTIONS;
52
+ export const PRODUCT_SELLER_SORT_OPTIONS = STANDARD_SORT_OPTIONS;
53
+ export const PRODUCT_PUBLIC_SORT_OPTIONS = STANDARD_PUBLIC_SORT_OPTIONS;
78
54
  export function getProductFilterKeys(variant) {
79
55
  return PRODUCT_FILTER_KEYS[variant];
80
56
  }
@@ -102,7 +78,8 @@ export function ProductFilters({ table, categoryOptions = [], brandOptions = [],
102
78
  const defaultStatusOptions = [
103
79
  { value: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED, label: t("statusPublished") },
104
80
  { value: PRODUCT_FIELDS.STATUS_VALUES.DRAFT, label: t("statusDraft") },
105
- { value: PRODUCT_FIELDS.STATUS_VALUES.OUT_OF_STOCK, label: t("statusOutOfStock") },
81
+ { value: PRODUCT_FIELDS.STATUS_VALUES.IN_REVIEW, label: t("statusInReview") },
82
+ { value: PRODUCT_FIELDS.STATUS_VALUES.ARCHIVED, label: t("statusArchived") },
106
83
  ];
107
84
  const splitPipe = (key) => table.get(key) ? table.get(key).split("|").filter(Boolean) : [];
108
85
  const selectedCategories = splitPipe(TABLE_KEYS.CATEGORY);
@@ -15,9 +15,8 @@ import { PrizeDrawItemsEditor } from "./PrizeDrawItemsEditor";
15
15
  export const PRODUCT_STATUS_OPTIONS = [
16
16
  { value: "draft", label: "Draft" },
17
17
  { value: "published", label: "Published" },
18
- { value: "out_of_stock", label: "Out of Stock" },
19
- { value: "discontinued", label: "Discontinued" },
20
- { value: "sold", label: "Sold" },
18
+ { value: "in_review", label: "In Review" },
19
+ { value: "archived", label: "Archived" },
21
20
  ];
22
21
  function readFileAsDataUrl(file) {
23
22
  return new Promise((resolve) => {
@@ -116,6 +116,19 @@ export declare const ROW_ACTION_ID: {
116
116
  readonly REPLY: "row-reply";
117
117
  readonly PUBLISH: "row-publish";
118
118
  readonly ARCHIVE: "row-archive";
119
+ readonly MARK_SHIPPED: "row-mark-shipped";
120
+ readonly MARK_DELIVERED: "row-mark-delivered";
121
+ readonly MARK_PAID: "row-mark-paid";
122
+ readonly REVOKE: "row-revoke";
123
+ readonly MARK_READ: "row-mark-read";
124
+ readonly ACTIVATE: "row-activate";
125
+ readonly DEACTIVATE: "row-deactivate";
126
+ readonly FEATURE: "row-feature";
127
+ readonly PROMOTE: "row-promote";
128
+ readonly SALE: "row-sale";
129
+ readonly DRAFT: "row-draft";
130
+ readonly CONTEST: "row-contest";
131
+ readonly FEEDBACK: "row-feedback";
119
132
  };
120
133
  export type RowActionId = (typeof ROW_ACTION_ID)[keyof typeof ROW_ACTION_ID];
121
134
  export interface RowActionMeta {
@@ -142,28 +155,61 @@ export declare const ADMIN_ROW_ACTIONS: {
142
155
  readonly users: readonly ["row-view", "row-edit", "row-suspend", "row-restore", "row-delete"];
143
156
  readonly stores: readonly ["row-manage", "row-approve", "row-reject", "row-suspend", "row-delete"];
144
157
  readonly products: readonly ["row-view", "row-edit", "row-publish", "row-archive", "row-delete"];
145
- readonly orders: readonly ["row-view", "row-edit", "row-refund", "row-cancel"];
158
+ readonly orders: readonly ["row-view", "row-edit", "row-mark-shipped", "row-mark-delivered", "row-cancel"];
146
159
  readonly reviews: readonly ["row-view", "row-approve", "row-reject", "row-delete"];
147
160
  readonly events: readonly ["row-view", "row-edit", "row-archive", "row-delete"];
148
- readonly payouts: readonly ["row-view", "row-approve", "row-reject"];
161
+ readonly payouts: readonly ["row-view", "row-approve", "row-mark-paid"];
149
162
  readonly coupons: readonly ["row-edit", "row-duplicate", "row-archive", "row-delete"];
150
- readonly blog: readonly ["row-view", "row-edit", "row-publish", "row-archive", "row-delete"];
163
+ readonly blog: readonly ["row-view", "row-edit", "row-publish", "row-draft", "row-delete"];
151
164
  readonly faqs: readonly ["row-edit", "row-archive", "row-delete"];
152
165
  readonly bids: readonly ["row-view", "row-cancel"];
166
+ readonly notifications: readonly ["row-resend", "row-delete"];
167
+ readonly sessions: readonly ["row-revoke"];
168
+ readonly bundles: readonly ["row-view", "row-edit", "row-activate", "row-deactivate", "row-delete"];
169
+ readonly brands: readonly ["row-edit"];
170
+ readonly categories: readonly ["row-edit"];
171
+ readonly features: readonly ["row-edit", "row-delete"];
172
+ readonly prizeDraws: readonly ["row-view", "row-delete"];
173
+ readonly carousel: readonly ["row-edit", "row-delete"];
174
+ readonly contact: readonly ["row-view", "row-mark-read", "row-archive", "row-delete"];
175
+ readonly newsletter: readonly ["row-delete"];
176
+ readonly team: readonly ["row-edit", "row-delete"];
177
+ readonly navigation: readonly ["row-edit", "row-delete"];
178
+ readonly sublistingCategories: readonly ["row-edit", "row-delete"];
179
+ readonly scammers: readonly ["row-view", "row-approve", "row-reject", "row-delete"];
180
+ readonly supportTickets: readonly ["row-view", "row-reply"];
181
+ readonly eventEntries: readonly ["row-view", "row-approve", "row-reject"];
182
+ readonly returnRequests: readonly ["row-view", "row-approve", "row-reject"];
153
183
  };
154
184
  export declare const SELLER_ROW_ACTIONS: {
155
185
  readonly products: readonly ["row-view", "row-edit", "row-duplicate", "row-archive", "row-delete"];
156
186
  readonly orders: readonly ["row-view", "row-edit", "row-track", "row-resend"];
157
- readonly reviews: readonly ["row-view", "row-reply"];
187
+ readonly reviews: readonly ["row-view", "row-reply", "row-contest", "row-feedback"];
158
188
  readonly payouts: readonly ["row-view", "row-export"];
159
189
  readonly coupons: readonly ["row-edit", "row-duplicate", "row-delete"];
160
190
  readonly bids: readonly ["row-view"];
161
191
  readonly addresses: readonly ["row-edit", "row-delete"];
192
+ readonly bundles: readonly ["row-edit", "row-delete"];
193
+ readonly classified: readonly ["row-edit", "row-delete"];
194
+ readonly digitalCodes: readonly ["row-edit", "row-delete"];
195
+ readonly live: readonly ["row-edit", "row-delete"];
196
+ readonly auctions: readonly ["row-view", "row-edit", "row-delete"];
197
+ readonly preOrders: readonly ["row-view", "row-edit", "row-delete"];
198
+ readonly prizeDraws: readonly ["row-view", "row-edit", "row-delete"];
199
+ readonly templates: readonly ["row-edit", "row-delete"];
200
+ readonly shippingConfigs: readonly ["row-edit", "row-delete"];
201
+ readonly storeCategories: readonly ["row-edit", "row-delete"];
202
+ readonly groupedListings: readonly ["row-edit", "row-delete"];
203
+ readonly offers: readonly ["row-view", "row-approve", "row-reject"];
162
204
  };
163
205
  export declare const USER_ROW_ACTIONS: {
164
206
  readonly orders: readonly ["row-view", "row-track", "row-cancel"];
165
207
  readonly addresses: readonly ["row-edit", "row-delete"];
166
208
  readonly bids: readonly ["row-view", "row-cancel"];
209
+ readonly reviews: readonly ["row-view", "row-edit"];
210
+ readonly returns: readonly ["row-view"];
211
+ readonly wishlist: readonly ["row-delete"];
212
+ readonly coupons: readonly ["row-view"];
167
213
  };
168
214
  export declare const FORM_ACTION_ID: {
169
215
  readonly SUBMIT: "form-submit";
@@ -239,13 +285,46 @@ export declare const DASHBOARD_QUICK_ACTIONS: {
239
285
  export declare const ADMIN_BULK_ACTIONS: {
240
286
  readonly users: readonly ["row-suspend", "row-restore", "row-delete"];
241
287
  readonly stores: readonly ["row-approve", "row-reject", "row-suspend"];
242
- readonly products: readonly ["row-publish", "row-archive", "row-delete"];
243
- readonly orders: readonly ["row-refund", "row-cancel"];
288
+ readonly products: readonly ["row-feature", "row-promote", "row-sale"];
289
+ readonly orders: readonly ["row-mark-shipped", "row-mark-delivered", "row-cancel"];
244
290
  readonly reviews: readonly ["row-approve", "row-reject", "row-delete"];
245
- readonly blog: readonly ["row-publish", "row-archive", "row-delete"];
291
+ readonly blog: readonly ["row-publish", "row-draft", "row-delete"];
246
292
  readonly faqs: readonly ["row-archive", "row-delete"];
293
+ readonly bids: readonly ["row-cancel"];
294
+ readonly notifications: readonly ["row-mark-read", "row-delete"];
295
+ readonly sessions: readonly ["row-revoke"];
296
+ readonly payouts: readonly ["row-mark-paid"];
297
+ readonly bundles: readonly ["row-activate", "row-deactivate", "row-delete"];
298
+ readonly brands: readonly ["row-edit"];
299
+ readonly categories: readonly ["row-edit"];
300
+ readonly features: readonly ["row-delete"];
301
+ readonly prizeDraws: readonly ["row-delete"];
302
+ readonly events: readonly ["row-delete"];
303
+ readonly carousel: readonly ["row-delete"];
304
+ readonly contact: readonly ["row-mark-read", "row-archive", "row-delete"];
305
+ readonly newsletter: readonly ["row-delete"];
306
+ readonly team: readonly ["row-delete"];
307
+ readonly navigation: readonly ["row-delete"];
308
+ readonly sublistingCategories: readonly ["row-delete"];
309
+ readonly scammers: readonly ["row-approve", "row-reject", "row-delete"];
310
+ readonly supportTickets: readonly ["row-archive"];
311
+ readonly eventEntries: readonly ["row-approve", "row-reject"];
312
+ readonly returnRequests: readonly ["row-approve", "row-reject"];
313
+ readonly coupons: readonly ["row-archive", "row-delete"];
247
314
  };
248
315
  export declare const SELLER_BULK_ACTIONS: {
249
316
  readonly products: readonly ["row-publish", "row-archive", "row-delete"];
250
317
  readonly coupons: readonly ["row-archive", "row-delete"];
318
+ readonly bids: readonly ["row-cancel"];
319
+ readonly bundles: readonly ["row-delete"];
320
+ readonly classified: readonly ["row-delete"];
321
+ readonly digitalCodes: readonly ["row-delete"];
322
+ readonly live: readonly ["row-delete"];
323
+ readonly auctions: readonly ["row-delete"];
324
+ readonly preOrders: readonly ["row-delete"];
325
+ readonly prizeDraws: readonly ["row-delete"];
326
+ readonly templates: readonly ["row-delete"];
327
+ readonly storeCategories: readonly ["row-activate", "row-deactivate", "row-delete"];
328
+ readonly groupedListings: readonly ["row-delete"];
329
+ readonly offers: readonly ["row-approve", "row-reject"];
251
330
  };
@@ -141,6 +141,19 @@ export const ROW_ACTION_ID = {
141
141
  REPLY: "row-reply",
142
142
  PUBLISH: "row-publish",
143
143
  ARCHIVE: "row-archive",
144
+ MARK_SHIPPED: "row-mark-shipped",
145
+ MARK_DELIVERED: "row-mark-delivered",
146
+ MARK_PAID: "row-mark-paid",
147
+ REVOKE: "row-revoke",
148
+ MARK_READ: "row-mark-read",
149
+ ACTIVATE: "row-activate",
150
+ DEACTIVATE: "row-deactivate",
151
+ FEATURE: "row-feature",
152
+ PROMOTE: "row-promote",
153
+ SALE: "row-sale",
154
+ DRAFT: "row-draft",
155
+ CONTEST: "row-contest",
156
+ FEEDBACK: "row-feedback",
144
157
  };
145
158
  export const ROW_ACTION_META = {
146
159
  [ROW_ACTION_ID.EDIT]: { id: ROW_ACTION_ID.EDIT, label: "Edit", iconName: "Pencil", requiresAuth: true },
@@ -160,36 +173,82 @@ export const ROW_ACTION_META = {
160
173
  [ROW_ACTION_ID.REPLY]: { id: ROW_ACTION_ID.REPLY, label: "Reply", iconName: "MessageSquare", requiresAuth: true },
161
174
  [ROW_ACTION_ID.PUBLISH]: { id: ROW_ACTION_ID.PUBLISH, label: "Publish", iconName: "Upload", requiresAuth: true },
162
175
  [ROW_ACTION_ID.ARCHIVE]: { id: ROW_ACTION_ID.ARCHIVE, label: "Archive", iconName: "Archive", requiresAuth: true, separator: true },
176
+ [ROW_ACTION_ID.MARK_SHIPPED]: { id: ROW_ACTION_ID.MARK_SHIPPED, label: "Mark as Shipped", iconName: "Truck", requiresAuth: true, requiredRole: "admin", requiredPermission: "admin.orders.update" },
177
+ [ROW_ACTION_ID.MARK_DELIVERED]: { id: ROW_ACTION_ID.MARK_DELIVERED, label: "Mark as Delivered", iconName: "PackageCheck", requiresAuth: true, requiredRole: "admin", requiredPermission: "admin.orders.update" },
178
+ [ROW_ACTION_ID.MARK_PAID]: { id: ROW_ACTION_ID.MARK_PAID, label: "Mark Paid", iconName: "Banknote", requiresAuth: true, requiredRole: "admin", requiredPermission: "admin.payouts.approve" },
179
+ [ROW_ACTION_ID.REVOKE]: { id: ROW_ACTION_ID.REVOKE, label: "Revoke", iconName: "ShieldOff", requiresAuth: true, requiredRole: "admin", requiredPermission: "admin.sessions.revoke", destructive: true },
180
+ [ROW_ACTION_ID.MARK_READ]: { id: ROW_ACTION_ID.MARK_READ, label: "Mark Read", iconName: "CheckCheck", requiresAuth: true, requiredRole: "admin" },
181
+ [ROW_ACTION_ID.ACTIVATE]: { id: ROW_ACTION_ID.ACTIVATE, label: "Activate", iconName: "ToggleRight", requiresAuth: true },
182
+ [ROW_ACTION_ID.DEACTIVATE]: { id: ROW_ACTION_ID.DEACTIVATE, label: "Deactivate", iconName: "ToggleLeft", requiresAuth: true },
183
+ [ROW_ACTION_ID.FEATURE]: { id: ROW_ACTION_ID.FEATURE, label: "Toggle Featured", iconName: "Star", requiresAuth: true, requiredRole: "admin", requiredPermission: "admin.content.approve" },
184
+ [ROW_ACTION_ID.PROMOTE]: { id: ROW_ACTION_ID.PROMOTE, label: "Toggle Promoted", iconName: "TrendingUp", requiresAuth: true, requiredRole: "admin" },
185
+ [ROW_ACTION_ID.SALE]: { id: ROW_ACTION_ID.SALE, label: "Toggle On Sale", iconName: "Percent", requiresAuth: true, requiredRole: "admin" },
186
+ [ROW_ACTION_ID.DRAFT]: { id: ROW_ACTION_ID.DRAFT, label: "Move to Draft", iconName: "FileEdit", requiresAuth: true },
187
+ [ROW_ACTION_ID.CONTEST]: { id: ROW_ACTION_ID.CONTEST, label: "Contest", iconName: "Flag", requiresAuth: true },
188
+ [ROW_ACTION_ID.FEEDBACK]: { id: ROW_ACTION_ID.FEEDBACK, label: "Feedback", iconName: "MessageCircle", requiresAuth: true },
163
189
  };
164
190
  // Admin dashboard row action groups per entity type
165
191
  export const ADMIN_ROW_ACTIONS = {
166
192
  users: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT, ROW_ACTION_ID.SUSPEND, ROW_ACTION_ID.RESTORE, ROW_ACTION_ID.DELETE],
167
193
  stores: [ROW_ACTION_ID.MANAGE, ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.REJECT, ROW_ACTION_ID.SUSPEND, ROW_ACTION_ID.DELETE],
168
194
  products: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT, ROW_ACTION_ID.PUBLISH, ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
169
- orders: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT, ROW_ACTION_ID.REFUND, ROW_ACTION_ID.CANCEL],
195
+ orders: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT, ROW_ACTION_ID.MARK_SHIPPED, ROW_ACTION_ID.MARK_DELIVERED, ROW_ACTION_ID.CANCEL],
170
196
  reviews: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.REJECT, ROW_ACTION_ID.DELETE],
171
197
  events: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT, ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
172
- payouts: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.REJECT],
198
+ payouts: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.MARK_PAID],
173
199
  coupons: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DUPLICATE, ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
174
- blog: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT, ROW_ACTION_ID.PUBLISH, ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
200
+ blog: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT, ROW_ACTION_ID.PUBLISH, ROW_ACTION_ID.DRAFT, ROW_ACTION_ID.DELETE],
175
201
  faqs: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
176
202
  bids: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.CANCEL],
203
+ notifications: [ROW_ACTION_ID.RESEND, ROW_ACTION_ID.DELETE],
204
+ sessions: [ROW_ACTION_ID.REVOKE],
205
+ bundles: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT, ROW_ACTION_ID.ACTIVATE, ROW_ACTION_ID.DEACTIVATE, ROW_ACTION_ID.DELETE],
206
+ brands: [ROW_ACTION_ID.EDIT],
207
+ categories: [ROW_ACTION_ID.EDIT],
208
+ features: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
209
+ prizeDraws: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.DELETE],
210
+ carousel: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
211
+ contact: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.MARK_READ, ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
212
+ newsletter: [ROW_ACTION_ID.DELETE],
213
+ team: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
214
+ navigation: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
215
+ sublistingCategories: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
216
+ scammers: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.REJECT, ROW_ACTION_ID.DELETE],
217
+ supportTickets: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.REPLY],
218
+ eventEntries: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.REJECT],
219
+ returnRequests: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.REJECT],
177
220
  };
178
221
  // Seller / Store dashboard row action groups per entity type
179
222
  export const SELLER_ROW_ACTIONS = {
180
223
  products: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DUPLICATE, ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
181
224
  orders: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT, ROW_ACTION_ID.TRACK, ROW_ACTION_ID.RESEND],
182
- reviews: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.REPLY],
225
+ reviews: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.REPLY, ROW_ACTION_ID.CONTEST, ROW_ACTION_ID.FEEDBACK],
183
226
  payouts: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EXPORT],
184
227
  coupons: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DUPLICATE, ROW_ACTION_ID.DELETE],
185
228
  bids: [ROW_ACTION_ID.VIEW],
186
229
  addresses: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
230
+ bundles: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
231
+ classified: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
232
+ digitalCodes: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
233
+ live: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
234
+ auctions: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
235
+ preOrders: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
236
+ prizeDraws: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
237
+ templates: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
238
+ shippingConfigs: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
239
+ storeCategories: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
240
+ groupedListings: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
241
+ offers: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.REJECT],
187
242
  };
188
243
  // User dashboard row action groups per entity type
189
244
  export const USER_ROW_ACTIONS = {
190
245
  orders: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.TRACK, ROW_ACTION_ID.CANCEL],
191
246
  addresses: [ROW_ACTION_ID.EDIT, ROW_ACTION_ID.DELETE],
192
247
  bids: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.CANCEL],
248
+ reviews: [ROW_ACTION_ID.VIEW, ROW_ACTION_ID.EDIT],
249
+ returns: [ROW_ACTION_ID.VIEW],
250
+ wishlist: [ROW_ACTION_ID.DELETE],
251
+ coupons: [ROW_ACTION_ID.VIEW],
193
252
  };
194
253
  // ─────────────────────────────────────────────────────────────────────────────
195
254
  // § 3 Form actions
@@ -294,14 +353,47 @@ export const DASHBOARD_QUICK_ACTIONS = {
294
353
  export const ADMIN_BULK_ACTIONS = {
295
354
  users: [ROW_ACTION_ID.SUSPEND, ROW_ACTION_ID.RESTORE, ROW_ACTION_ID.DELETE],
296
355
  stores: [ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.REJECT, ROW_ACTION_ID.SUSPEND],
297
- products: [ROW_ACTION_ID.PUBLISH, ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
298
- orders: [ROW_ACTION_ID.REFUND, ROW_ACTION_ID.CANCEL],
356
+ products: [ROW_ACTION_ID.FEATURE, ROW_ACTION_ID.PROMOTE, ROW_ACTION_ID.SALE],
357
+ orders: [ROW_ACTION_ID.MARK_SHIPPED, ROW_ACTION_ID.MARK_DELIVERED, ROW_ACTION_ID.CANCEL],
299
358
  reviews: [ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.REJECT, ROW_ACTION_ID.DELETE],
300
- blog: [ROW_ACTION_ID.PUBLISH, ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
359
+ blog: [ROW_ACTION_ID.PUBLISH, ROW_ACTION_ID.DRAFT, ROW_ACTION_ID.DELETE],
301
360
  faqs: [ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
361
+ bids: [ROW_ACTION_ID.CANCEL],
362
+ notifications: [ROW_ACTION_ID.MARK_READ, ROW_ACTION_ID.DELETE],
363
+ sessions: [ROW_ACTION_ID.REVOKE],
364
+ payouts: [ROW_ACTION_ID.MARK_PAID],
365
+ bundles: [ROW_ACTION_ID.ACTIVATE, ROW_ACTION_ID.DEACTIVATE, ROW_ACTION_ID.DELETE],
366
+ brands: [ROW_ACTION_ID.EDIT],
367
+ categories: [ROW_ACTION_ID.EDIT],
368
+ features: [ROW_ACTION_ID.DELETE],
369
+ prizeDraws: [ROW_ACTION_ID.DELETE],
370
+ events: [ROW_ACTION_ID.DELETE],
371
+ carousel: [ROW_ACTION_ID.DELETE],
372
+ contact: [ROW_ACTION_ID.MARK_READ, ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
373
+ newsletter: [ROW_ACTION_ID.DELETE],
374
+ team: [ROW_ACTION_ID.DELETE],
375
+ navigation: [ROW_ACTION_ID.DELETE],
376
+ sublistingCategories: [ROW_ACTION_ID.DELETE],
377
+ scammers: [ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.REJECT, ROW_ACTION_ID.DELETE],
378
+ supportTickets: [ROW_ACTION_ID.ARCHIVE],
379
+ eventEntries: [ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.REJECT],
380
+ returnRequests: [ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.REJECT],
381
+ coupons: [ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
302
382
  };
303
383
  // Seller bulk actions per listing entity
304
384
  export const SELLER_BULK_ACTIONS = {
305
385
  products: [ROW_ACTION_ID.PUBLISH, ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
306
386
  coupons: [ROW_ACTION_ID.ARCHIVE, ROW_ACTION_ID.DELETE],
387
+ bids: [ROW_ACTION_ID.CANCEL],
388
+ bundles: [ROW_ACTION_ID.DELETE],
389
+ classified: [ROW_ACTION_ID.DELETE],
390
+ digitalCodes: [ROW_ACTION_ID.DELETE],
391
+ live: [ROW_ACTION_ID.DELETE],
392
+ auctions: [ROW_ACTION_ID.DELETE],
393
+ preOrders: [ROW_ACTION_ID.DELETE],
394
+ prizeDraws: [ROW_ACTION_ID.DELETE],
395
+ templates: [ROW_ACTION_ID.DELETE],
396
+ storeCategories: [ROW_ACTION_ID.ACTIVATE, ROW_ACTION_ID.DEACTIVATE, ROW_ACTION_ID.DELETE],
397
+ groupedListings: [ROW_ACTION_ID.DELETE],
398
+ offers: [ROW_ACTION_ID.APPROVE, ROW_ACTION_ID.REJECT],
307
399
  };
@@ -0,0 +1,162 @@
1
+ export type SortOption = {
2
+ readonly value: string;
3
+ readonly label: string;
4
+ };
5
+ export declare const STANDARD_SORT_OPTIONS: readonly [{
6
+ readonly value: string;
7
+ readonly label: "Newest First";
8
+ }, {
9
+ readonly value: string;
10
+ readonly label: "Oldest First";
11
+ }, {
12
+ readonly value: string;
13
+ readonly label: "Price: Low to High";
14
+ }, {
15
+ readonly value: string;
16
+ readonly label: "Price: High to Low";
17
+ }, {
18
+ readonly value: string;
19
+ readonly label: "Name: A–Z";
20
+ }, {
21
+ readonly value: string;
22
+ readonly label: "Name: Z–A";
23
+ }, {
24
+ readonly value: string;
25
+ readonly label: "Featured First";
26
+ }, {
27
+ readonly value: string;
28
+ readonly label: "Promoted First";
29
+ }, {
30
+ readonly value: string;
31
+ readonly label: "Recently Updated";
32
+ }, {
33
+ readonly value: string;
34
+ readonly label: "Most Viewed";
35
+ }];
36
+ export declare const STANDARD_PUBLIC_SORT_OPTIONS: readonly [{
37
+ readonly value: string;
38
+ readonly label: "Newest First";
39
+ }, {
40
+ readonly value: string;
41
+ readonly label: "Oldest First";
42
+ }, {
43
+ readonly value: string;
44
+ readonly label: "Price: Low to High";
45
+ }, {
46
+ readonly value: string;
47
+ readonly label: "Price: High to Low";
48
+ }, {
49
+ readonly value: string;
50
+ readonly label: "Name: A–Z";
51
+ }, {
52
+ readonly value: string;
53
+ readonly label: "Name: Z–A";
54
+ }, {
55
+ readonly value: string;
56
+ readonly label: "Most Viewed";
57
+ }];
58
+ export declare const AUCTION_SORT_OPTIONS: readonly [{
59
+ readonly value: string;
60
+ readonly label: "Ending Soon";
61
+ }, {
62
+ readonly value: string;
63
+ readonly label: "Just Started";
64
+ }, {
65
+ readonly value: string;
66
+ readonly label: "Lowest Current Bid";
67
+ }, {
68
+ readonly value: string;
69
+ readonly label: "Highest Current Bid";
70
+ }, {
71
+ readonly value: string;
72
+ readonly label: "Lowest Starting Bid";
73
+ }, {
74
+ readonly value: string;
75
+ readonly label: "Most Bids";
76
+ }, {
77
+ readonly value: string;
78
+ readonly label: "Fewest Bids";
79
+ }, {
80
+ readonly value: string;
81
+ readonly label: "Buy It Now: Low–High";
82
+ }, {
83
+ readonly value: string;
84
+ readonly label: "Oldest Listed";
85
+ }];
86
+ export declare const AUCTION_PUBLIC_SORT_OPTIONS: readonly [{
87
+ readonly value: string;
88
+ readonly label: "Ending Soon";
89
+ }, {
90
+ readonly value: string;
91
+ readonly label: "Just Started";
92
+ }, {
93
+ readonly value: string;
94
+ readonly label: "Lowest Current Bid";
95
+ }, {
96
+ readonly value: string;
97
+ readonly label: "Highest Current Bid";
98
+ }, {
99
+ readonly value: string;
100
+ readonly label: "Most Bids";
101
+ }, {
102
+ readonly value: string;
103
+ readonly label: "Buy It Now: Low–High";
104
+ }];
105
+ export declare const PREORDER_SORT_OPTIONS: readonly [{
106
+ readonly value: string;
107
+ readonly label: "Earliest Delivery";
108
+ }, {
109
+ readonly value: string;
110
+ readonly label: "Latest Delivery";
111
+ }, {
112
+ readonly value: string;
113
+ readonly label: "Newest First";
114
+ }, {
115
+ readonly value: string;
116
+ readonly label: "Price: Low to High";
117
+ }, {
118
+ readonly value: string;
119
+ readonly label: "Price: High to Low";
120
+ }, {
121
+ readonly value: string;
122
+ readonly label: "Fewest Slots Left";
123
+ }, {
124
+ readonly value: string;
125
+ readonly label: "Lowest Deposit First";
126
+ }];
127
+ export declare const BUNDLE_SORT_OPTIONS: readonly [{
128
+ readonly value: string;
129
+ readonly label: "Newest First";
130
+ }, {
131
+ readonly value: string;
132
+ readonly label: "Price: Low to High";
133
+ }, {
134
+ readonly value: string;
135
+ readonly label: "Price: High to Low";
136
+ }, {
137
+ readonly value: "-savingsAmount";
138
+ readonly label: "Most Savings";
139
+ }, {
140
+ readonly value: "-bundleItemCount";
141
+ readonly label: "Most Items";
142
+ }];
143
+ export declare const PRIZE_DRAW_SORT_OPTIONS: readonly [{
144
+ readonly value: string;
145
+ readonly label: "Newest First";
146
+ }, {
147
+ readonly value: string;
148
+ readonly label: "Oldest First";
149
+ }, {
150
+ readonly value: string;
151
+ readonly label: "Reveal: Soonest";
152
+ }, {
153
+ readonly value: string;
154
+ readonly label: "Reveal: Furthest";
155
+ }, {
156
+ readonly value: string;
157
+ readonly label: "Entry: Low to High";
158
+ }, {
159
+ readonly value: string;
160
+ readonly label: "Entry: High to Low";
161
+ }];
162
+ export declare const SORT_OPTIONS_BY_LISTING_TYPE: Record<string, readonly SortOption[]>;
@@ -0,0 +1,95 @@
1
+ import { sortBy } from "../../../constants/sort";
2
+ import { PRODUCT_FIELDS } from "../../../constants/field-names";
3
+ const LABEL_PRICE_HIGH = "Price: High to Low";
4
+ const LABEL_PRICE_LOW = "Price: Low to High";
5
+ const LABEL_NEWEST = "Newest First";
6
+ const LABEL_OLDEST = "Oldest First";
7
+ // ---------------------------------------------------------------------------
8
+ // Standard Products
9
+ // ---------------------------------------------------------------------------
10
+ export const STANDARD_SORT_OPTIONS = [
11
+ { value: sortBy(PRODUCT_FIELDS.CREATED_AT), label: LABEL_NEWEST },
12
+ { value: sortBy(PRODUCT_FIELDS.CREATED_AT, "ASC"), label: LABEL_OLDEST },
13
+ { value: sortBy(PRODUCT_FIELDS.PRICE, "ASC"), label: LABEL_PRICE_LOW },
14
+ { value: sortBy(PRODUCT_FIELDS.PRICE), label: LABEL_PRICE_HIGH },
15
+ { value: sortBy(PRODUCT_FIELDS.TITLE, "ASC"), label: "Name: A–Z" },
16
+ { value: sortBy(PRODUCT_FIELDS.TITLE), label: "Name: Z–A" },
17
+ { value: sortBy(PRODUCT_FIELDS.FEATURED), label: "Featured First" },
18
+ { value: sortBy(PRODUCT_FIELDS.IS_PROMOTED), label: "Promoted First" },
19
+ { value: sortBy(PRODUCT_FIELDS.UPDATED_AT), label: "Recently Updated" },
20
+ { value: sortBy(PRODUCT_FIELDS.VIEW_COUNT), label: "Most Viewed" },
21
+ ];
22
+ export const STANDARD_PUBLIC_SORT_OPTIONS = [
23
+ STANDARD_SORT_OPTIONS[0],
24
+ STANDARD_SORT_OPTIONS[1],
25
+ STANDARD_SORT_OPTIONS[2],
26
+ STANDARD_SORT_OPTIONS[3],
27
+ STANDARD_SORT_OPTIONS[4],
28
+ STANDARD_SORT_OPTIONS[5],
29
+ STANDARD_SORT_OPTIONS[9],
30
+ ];
31
+ // ---------------------------------------------------------------------------
32
+ // Auctions
33
+ // ---------------------------------------------------------------------------
34
+ export const AUCTION_SORT_OPTIONS = [
35
+ { value: sortBy(PRODUCT_FIELDS.AUCTION_END_DATE, "ASC"), label: "Ending Soon" },
36
+ { value: sortBy(PRODUCT_FIELDS.CREATED_AT), label: "Just Started" },
37
+ { value: sortBy(PRODUCT_FIELDS.CURRENT_BID, "ASC"), label: "Lowest Current Bid" },
38
+ { value: sortBy(PRODUCT_FIELDS.CURRENT_BID), label: "Highest Current Bid" },
39
+ { value: sortBy(PRODUCT_FIELDS.STARTING_BID, "ASC"), label: "Lowest Starting Bid" },
40
+ { value: sortBy(PRODUCT_FIELDS.BID_COUNT), label: "Most Bids" },
41
+ { value: sortBy(PRODUCT_FIELDS.BID_COUNT, "ASC"), label: "Fewest Bids" },
42
+ { value: sortBy(PRODUCT_FIELDS.BUY_NOW_PRICE, "ASC"), label: "Buy It Now: Low–High" },
43
+ { value: sortBy(PRODUCT_FIELDS.CREATED_AT, "ASC"), label: "Oldest Listed" },
44
+ ];
45
+ export const AUCTION_PUBLIC_SORT_OPTIONS = [
46
+ AUCTION_SORT_OPTIONS[0],
47
+ AUCTION_SORT_OPTIONS[1],
48
+ AUCTION_SORT_OPTIONS[2],
49
+ AUCTION_SORT_OPTIONS[3],
50
+ AUCTION_SORT_OPTIONS[5],
51
+ AUCTION_SORT_OPTIONS[7],
52
+ ];
53
+ // ---------------------------------------------------------------------------
54
+ // Pre-Orders
55
+ // ---------------------------------------------------------------------------
56
+ export const PREORDER_SORT_OPTIONS = [
57
+ { value: sortBy(PRODUCT_FIELDS.PRE_ORDER_DELIVERY_DATE, "ASC"), label: "Earliest Delivery" },
58
+ { value: sortBy(PRODUCT_FIELDS.PRE_ORDER_DELIVERY_DATE), label: "Latest Delivery" },
59
+ { value: sortBy(PRODUCT_FIELDS.CREATED_AT), label: LABEL_NEWEST },
60
+ { value: sortBy(PRODUCT_FIELDS.PRICE, "ASC"), label: LABEL_PRICE_LOW },
61
+ { value: sortBy(PRODUCT_FIELDS.PRICE), label: LABEL_PRICE_HIGH },
62
+ { value: sortBy(PRODUCT_FIELDS.PRE_ORDER_CURRENT_COUNT), label: "Fewest Slots Left" },
63
+ { value: sortBy(PRODUCT_FIELDS.PRE_ORDER_DEPOSIT_AMOUNT, "ASC"), label: "Lowest Deposit First" },
64
+ ];
65
+ // ---------------------------------------------------------------------------
66
+ // Bundles
67
+ // ---------------------------------------------------------------------------
68
+ export const BUNDLE_SORT_OPTIONS = [
69
+ { value: sortBy(PRODUCT_FIELDS.CREATED_AT), label: LABEL_NEWEST },
70
+ { value: sortBy(PRODUCT_FIELDS.PRICE, "ASC"), label: LABEL_PRICE_LOW },
71
+ { value: sortBy(PRODUCT_FIELDS.PRICE), label: LABEL_PRICE_HIGH },
72
+ { value: "-savingsAmount", label: "Most Savings" },
73
+ { value: "-bundleItemCount", label: "Most Items" },
74
+ ];
75
+ // ---------------------------------------------------------------------------
76
+ // Prize Draws
77
+ // ---------------------------------------------------------------------------
78
+ export const PRIZE_DRAW_SORT_OPTIONS = [
79
+ { value: sortBy(PRODUCT_FIELDS.CREATED_AT), label: LABEL_NEWEST },
80
+ { value: sortBy(PRODUCT_FIELDS.CREATED_AT, "ASC"), label: LABEL_OLDEST },
81
+ { value: sortBy(PRODUCT_FIELDS.PRIZE_REVEAL_WINDOW_START, "ASC"), label: "Reveal: Soonest" },
82
+ { value: sortBy(PRODUCT_FIELDS.PRIZE_REVEAL_WINDOW_START), label: "Reveal: Furthest" },
83
+ { value: sortBy(PRODUCT_FIELDS.PRICE, "ASC"), label: "Entry: Low to High" },
84
+ { value: sortBy(PRODUCT_FIELDS.PRICE), label: "Entry: High to Low" },
85
+ ];
86
+ // ---------------------------------------------------------------------------
87
+ // Lookup by listing type
88
+ // ---------------------------------------------------------------------------
89
+ export const SORT_OPTIONS_BY_LISTING_TYPE = {
90
+ standard: STANDARD_SORT_OPTIONS,
91
+ auction: AUCTION_SORT_OPTIONS,
92
+ "pre-order": PREORDER_SORT_OPTIONS,
93
+ bundle: BUNDLE_SORT_OPTIONS,
94
+ "prize-draw": PRIZE_DRAW_SORT_OPTIONS,
95
+ };
@@ -202,6 +202,10 @@ export declare class ProductRepository extends BaseRepository<ProductDocument> {
202
202
  canFilter: boolean;
203
203
  canSort: boolean;
204
204
  };
205
+ searchTokens: {
206
+ canFilter: boolean;
207
+ canSort: boolean;
208
+ };
205
209
  };
206
210
  /**
207
211
  * Virtual filter aliases — callers can pass `f=listingType==auction` for
@@ -216,6 +220,7 @@ export declare class ProductRepository extends BaseRepository<ProductDocument> {
216
220
  storeId?: string;
217
221
  status?: string;
218
222
  categoriesIn?: string[];
223
+ search?: string;
219
224
  }): Promise<FirebaseSieveResult<ProductDocument>>;
220
225
  incrementViewCount(productId: string): Promise<void>;
221
226
  /**