@myrjfa/state 2.1.9 → 2.2.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.
Files changed (174) hide show
  1. package/dist/hooks/usePersistentDraftState.d.ts +20 -0
  2. package/dist/hooks/usePersistentDraftState.d.ts.map +1 -0
  3. package/dist/hooks/usePersistentDraftState.js +47 -0
  4. package/dist/index.d.ts +3 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +3 -0
  7. package/dist/lib/actions/actions.d.ts +17 -19
  8. package/dist/lib/actions/actions.d.ts.map +1 -1
  9. package/dist/lib/actions/actions.js +24 -7
  10. package/dist/lib/actions/auth.d.ts +2 -2
  11. package/dist/lib/actions/auth.d.ts.map +1 -1
  12. package/dist/lib/actions/auth.js +9 -0
  13. package/dist/lib/actions/booking.js +2 -2
  14. package/dist/lib/actions/fetcher.js +2 -1
  15. package/dist/lib/actions.d.ts +556 -0
  16. package/dist/lib/actions.d.ts.map +1 -0
  17. package/dist/lib/actions.js +1327 -0
  18. package/dist/lib/adminDashboardActions.d.ts +61 -0
  19. package/dist/lib/adminDashboardActions.d.ts.map +1 -0
  20. package/dist/lib/adminDashboardActions.js +89 -0
  21. package/dist/lib/adventureActions.d.ts +102 -0
  22. package/dist/lib/adventureActions.d.ts.map +1 -0
  23. package/dist/lib/adventureActions.js +202 -0
  24. package/dist/lib/adventureDummyData.d.ts +3 -0
  25. package/dist/lib/adventureDummyData.d.ts.map +1 -0
  26. package/dist/lib/adventureDummyData.js +138 -0
  27. package/dist/lib/adventureFormPage.d.ts +39 -0
  28. package/dist/lib/adventureFormPage.d.ts.map +1 -0
  29. package/dist/lib/adventureFormPage.js +70 -0
  30. package/dist/lib/brandActions.d.ts +83 -0
  31. package/dist/lib/brandActions.d.ts.map +1 -0
  32. package/dist/lib/brandActions.js +28 -0
  33. package/dist/lib/companionActions.d.ts +174 -0
  34. package/dist/lib/companionActions.d.ts.map +1 -0
  35. package/dist/lib/companionActions.js +276 -0
  36. package/dist/lib/companionDummyData.d.ts +99 -0
  37. package/dist/lib/companionDummyData.d.ts.map +1 -0
  38. package/dist/lib/companionDummyData.js +203 -0
  39. package/dist/lib/destinations.d.ts +14 -0
  40. package/dist/lib/destinations.d.ts.map +1 -0
  41. package/dist/lib/destinations.js +203 -0
  42. package/dist/lib/entitySubmission.d.ts +21 -0
  43. package/dist/lib/entitySubmission.d.ts.map +1 -0
  44. package/dist/lib/entitySubmission.js +10 -0
  45. package/dist/lib/eventActions.d.ts +176 -0
  46. package/dist/lib/eventActions.d.ts.map +1 -0
  47. package/dist/lib/eventActions.js +222 -0
  48. package/dist/lib/eventFormPage.d.ts +49 -0
  49. package/dist/lib/eventFormPage.d.ts.map +1 -0
  50. package/dist/lib/eventFormPage.js +84 -0
  51. package/dist/lib/eventsDummyData.d.ts +54 -0
  52. package/dist/lib/eventsDummyData.d.ts.map +1 -0
  53. package/dist/lib/eventsDummyData.js +586 -0
  54. package/dist/lib/guideActions.d.ts +53 -0
  55. package/dist/lib/guideActions.d.ts.map +1 -0
  56. package/dist/lib/guideActions.js +127 -0
  57. package/dist/lib/guideDummyData.d.ts +3 -0
  58. package/dist/lib/guideDummyData.d.ts.map +1 -0
  59. package/dist/lib/guideDummyData.js +66 -0
  60. package/dist/lib/hooks/use-mobile.js +0 -1
  61. package/dist/lib/hooks/useChatSocket.js +0 -1
  62. package/dist/lib/hooks/useHostCalendarSelection.d.ts +51 -0
  63. package/dist/lib/hooks/useHostCalendarSelection.d.ts.map +1 -0
  64. package/dist/lib/hooks/useHostCalendarSelection.js +200 -0
  65. package/dist/lib/hostDashboardActions.d.ts +189 -0
  66. package/dist/lib/hostDashboardActions.d.ts.map +1 -0
  67. package/dist/lib/hostDashboardActions.js +400 -0
  68. package/dist/lib/imageUpload.d.ts +4 -0
  69. package/dist/lib/imageUpload.d.ts.map +1 -0
  70. package/dist/lib/imageUpload.js +36 -0
  71. package/dist/lib/locationActions.d.ts +141 -0
  72. package/dist/lib/locationActions.d.ts.map +1 -0
  73. package/dist/lib/locationActions.js +113 -0
  74. package/dist/lib/models/adventure.d.ts +26 -9
  75. package/dist/lib/models/adventure.d.ts.map +1 -1
  76. package/dist/lib/models/blog.d.ts +2 -2
  77. package/dist/lib/models/discount.d.ts +160 -0
  78. package/dist/lib/models/discount.d.ts.map +1 -0
  79. package/dist/lib/models/discount.js +106 -0
  80. package/dist/lib/models/enquiry.d.ts +34 -0
  81. package/dist/lib/models/enquiry.d.ts.map +1 -0
  82. package/dist/lib/models/enquiry.js +140 -0
  83. package/dist/lib/models/guide.d.ts +4 -3
  84. package/dist/lib/models/guide.d.ts.map +1 -1
  85. package/dist/lib/models/notifications.d.ts +12 -12
  86. package/dist/lib/models/opportunities/freelance.d.ts +76 -76
  87. package/dist/lib/models/opportunities/internship.d.ts +76 -76
  88. package/dist/lib/models/opportunities/job.d.ts +78 -78
  89. package/dist/lib/models/opportunities/opportunity.d.ts +76 -76
  90. package/dist/lib/models/opportunities/volunteerJob.d.ts +76 -76
  91. package/dist/lib/models/package.d.ts +380 -86
  92. package/dist/lib/models/package.d.ts.map +1 -1
  93. package/dist/lib/models/package.js +9 -8
  94. package/dist/lib/models/pricing.d.ts +255 -0
  95. package/dist/lib/models/pricing.d.ts.map +1 -0
  96. package/dist/lib/models/pricing.js +145 -0
  97. package/dist/lib/models/rental.d.ts +12 -7
  98. package/dist/lib/models/rental.d.ts.map +1 -1
  99. package/dist/lib/models/review.d.ts +5 -2
  100. package/dist/lib/models/review.d.ts.map +1 -1
  101. package/dist/lib/models/stay.d.ts +11 -8
  102. package/dist/lib/models/stay.d.ts.map +1 -1
  103. package/dist/lib/models/stay.js +1 -0
  104. package/dist/lib/models/tile.d.ts +11 -7
  105. package/dist/lib/models/tile.d.ts.map +1 -1
  106. package/dist/lib/models/travelPackage.d.ts +943 -0
  107. package/dist/lib/models/travelPackage.d.ts.map +1 -0
  108. package/dist/lib/models/travelPackage.js +326 -0
  109. package/dist/lib/multistepDraft.d.ts +4 -0
  110. package/dist/lib/multistepDraft.d.ts.map +1 -0
  111. package/dist/lib/multistepDraft.js +18 -0
  112. package/dist/lib/opportunityFormData.d.ts +13 -0
  113. package/dist/lib/opportunityFormData.d.ts.map +1 -0
  114. package/dist/lib/opportunityFormData.js +62 -0
  115. package/dist/lib/opportunityFormPage.d.ts +38 -0
  116. package/dist/lib/opportunityFormPage.d.ts.map +1 -0
  117. package/dist/lib/opportunityFormPage.js +33 -0
  118. package/dist/lib/packageActions.d.ts +86 -0
  119. package/dist/lib/packageActions.d.ts.map +1 -0
  120. package/dist/lib/packageActions.js +168 -0
  121. package/dist/lib/packageDummyData.d.ts +3 -0
  122. package/dist/lib/packageDummyData.d.ts.map +1 -0
  123. package/dist/lib/packageDummyData.js +57 -0
  124. package/dist/lib/placeActions.d.ts +192 -0
  125. package/dist/lib/placeActions.d.ts.map +1 -0
  126. package/dist/lib/placeActions.js +57 -0
  127. package/dist/lib/propertyActions.d.ts +17 -0
  128. package/dist/lib/propertyActions.d.ts.map +1 -0
  129. package/dist/lib/propertyActions.js +16 -0
  130. package/dist/lib/rentalActions.d.ts +86 -0
  131. package/dist/lib/rentalActions.d.ts.map +1 -0
  132. package/dist/lib/rentalActions.js +235 -0
  133. package/dist/lib/rentalDummyData.d.ts +3 -0
  134. package/dist/lib/rentalDummyData.d.ts.map +1 -0
  135. package/dist/lib/rentalDummyData.js +402 -0
  136. package/dist/lib/rentalFormPage.d.ts +48 -0
  137. package/dist/lib/rentalFormPage.d.ts.map +1 -0
  138. package/dist/lib/rentalFormPage.js +97 -0
  139. package/dist/lib/roomActions.d.ts +39 -0
  140. package/dist/lib/roomActions.d.ts.map +1 -0
  141. package/dist/lib/roomActions.js +74 -0
  142. package/dist/lib/stayActions.d.ts +97 -0
  143. package/dist/lib/stayActions.d.ts.map +1 -0
  144. package/dist/lib/stayActions.js +138 -0
  145. package/dist/lib/staysDummyData.d.ts +72 -0
  146. package/dist/lib/staysDummyData.d.ts.map +1 -0
  147. package/dist/lib/staysDummyData.js +694 -0
  148. package/dist/lib/storeDummyData.d.ts +33 -0
  149. package/dist/lib/storeDummyData.d.ts.map +1 -0
  150. package/dist/lib/storeDummyData.js +336 -0
  151. package/dist/lib/travelPackageActions.d.ts +102 -0
  152. package/dist/lib/travelPackageActions.d.ts.map +1 -0
  153. package/dist/lib/travelPackageActions.js +487 -0
  154. package/dist/lib/travelPackageFormData.d.ts +20 -0
  155. package/dist/lib/travelPackageFormData.d.ts.map +1 -0
  156. package/dist/lib/travelPackageFormData.js +54 -0
  157. package/dist/lib/travelPackageFormPage.d.ts +32 -0
  158. package/dist/lib/travelPackageFormPage.d.ts.map +1 -0
  159. package/dist/lib/travelPackageFormPage.js +43 -0
  160. package/dist/lib/userAtom.d.ts +32 -32
  161. package/dist/lib/userAtom.d.ts.map +1 -1
  162. package/dist/lib/userAtom.js +17 -1
  163. package/dist/lib/util.d.ts +11 -0
  164. package/dist/lib/util.d.ts.map +1 -0
  165. package/dist/lib/util.js +82 -0
  166. package/dist/lib/utils.d.ts.map +1 -1
  167. package/dist/lib/utils.js +1 -0
  168. package/dist/lib/vehicleData.d.ts +2 -0
  169. package/dist/lib/vehicleData.d.ts.map +1 -0
  170. package/dist/lib/vehicleData.js +181 -0
  171. package/dist/lib/vehicleModels.d.ts +2 -0
  172. package/dist/lib/vehicleModels.d.ts.map +1 -0
  173. package/dist/lib/vehicleModels.js +128 -0
  174. package/package.json +6 -5
@@ -0,0 +1,400 @@
1
+ import { get, patch, put } from "@myrjfa/state/dist/lib/actions/fetcher";
2
+ function resolvePaymentStatus(record) {
3
+ if (record.paymentStatus === "paid" || record.paymentStatus === "refunded" || record.paymentStatus === "failed") {
4
+ return record.paymentStatus;
5
+ }
6
+ if (record.paymentId && record.paymentStatus !== "failed") {
7
+ return "paid";
8
+ }
9
+ if (["confirmed", "completed", "attended"].includes(record.status)) {
10
+ return "paid";
11
+ }
12
+ return "pending";
13
+ }
14
+ function normalizeGenericBooking(booking) {
15
+ return {
16
+ ...booking,
17
+ paymentStatus: resolvePaymentStatus(booking),
18
+ };
19
+ }
20
+ function normalizeStayBooking(booking) {
21
+ return {
22
+ ...booking,
23
+ entityId: booking.entityId || booking.stayId,
24
+ entityType: "Stay",
25
+ startDate: booking.startDate || booking.checkIn,
26
+ endDate: booking.endDate || booking.checkOut,
27
+ numberOfPeople: booking.numberOfPeople || booking.guests || 1,
28
+ totalPrice: booking.totalPrice || 0,
29
+ currency: booking.currency || "INR",
30
+ paymentStatus: resolvePaymentStatus(booking),
31
+ bookingCode: booking.bookingCode,
32
+ };
33
+ }
34
+ function normalizeEventBooking(booking) {
35
+ return {
36
+ ...booking,
37
+ entityId: booking.entityId || booking.eventId,
38
+ entityType: "Event",
39
+ startDate: booking.startDate || booking.eventDate,
40
+ numberOfPeople: booking.numberOfPeople || booking.numberOfSeats || 1,
41
+ totalPrice: booking.totalPrice || 0,
42
+ currency: booking.currency || "INR",
43
+ paymentStatus: resolvePaymentStatus(booking),
44
+ bookingCode: booking.bookingCode,
45
+ };
46
+ }
47
+ function normalizePackageEnquiry(enquiry) {
48
+ return {
49
+ ...enquiry,
50
+ entityId: {
51
+ _id: enquiry.packageId,
52
+ title: enquiry.packageTitle,
53
+ slug: enquiry.packageSlug,
54
+ },
55
+ entityType: "TravelPackage",
56
+ bookingKind: "package_enquiry",
57
+ entityLabel: "Package Enquiry",
58
+ startDate: enquiry.createdAt,
59
+ endDate: undefined,
60
+ numberOfPeople: (Number(enquiry.males) || 0) + (Number(enquiry.females) || 0) || 1,
61
+ totalPrice: enquiry.totalPrice || 0,
62
+ currency: "INR",
63
+ paymentStatus: "not_applicable",
64
+ bookingCode: enquiry.bookingCode,
65
+ status: enquiry.status === "denied" ? "cancelled" : enquiry.status,
66
+ };
67
+ }
68
+ function dedupeBookings(bookings) {
69
+ const seen = new Set();
70
+ return bookings.filter((booking) => {
71
+ const key = String(booking._id || "") || `${booking.entityType}:${booking.bookingCode || booking.startDate}`;
72
+ if (seen.has(key))
73
+ return false;
74
+ seen.add(key);
75
+ return true;
76
+ });
77
+ }
78
+ function hideSupersededPackageEnquiries(bookings) {
79
+ const bookedPackageIds = new Set(bookings
80
+ .filter((booking) => booking.entityType === "TravelPackage" &&
81
+ booking.bookingKind !== "package_enquiry")
82
+ .map((booking) => {
83
+ const packageId = booking.entityId?._id || booking.entityId;
84
+ return String(packageId || "");
85
+ })
86
+ .filter(Boolean));
87
+ return bookings.filter((booking) => {
88
+ if (booking.bookingKind !== "package_enquiry")
89
+ return true;
90
+ const packageId = booking.entityId?._id || booking.packageId || booking.entityId;
91
+ return !bookedPackageIds.has(String(packageId || ""));
92
+ });
93
+ }
94
+ // ── Overview ──────────────────────────────────────────────────────────────────
95
+ export async function getHostDashboardOverview() {
96
+ try {
97
+ const data = (await get("/host/dashboard/overview"));
98
+ console.log("getHostDashboardOverview [SUCCESS]:", data);
99
+ return { success: true, data: data.data };
100
+ }
101
+ catch (error) {
102
+ console.error("getHostDashboardOverview [ERROR]:", error);
103
+ return { success: false, data: null, error: error.message };
104
+ }
105
+ }
106
+ // ── Listings ──────────────────────────────────────────────────────────────────
107
+ export async function getHostDashboardListings(params) {
108
+ try {
109
+ const q = new URLSearchParams();
110
+ q.set("page", String(params?.page ?? 1));
111
+ q.set("limit", String(params?.limit ?? 500));
112
+ if (params?.category)
113
+ q.set("category", params.category);
114
+ if (params?.status)
115
+ q.set("status", params.status);
116
+ const data = (await get(`/host/dashboard/listings?${q.toString()}`));
117
+ console.log("getHostDashboardListings [DATA]:", data);
118
+ return { success: true, ...data.data };
119
+ }
120
+ catch (error) {
121
+ return {
122
+ success: false,
123
+ listings: [],
124
+ pagination: null,
125
+ error: error.message,
126
+ };
127
+ }
128
+ }
129
+ export async function deleteHostDashboardListing(id, category) {
130
+ try {
131
+ const { del } = await import("@myrjfa/state/dist/lib/actions/fetcher");
132
+ const data = (await del(`/host/dashboard/listings/${id}?category=${category}`));
133
+ return { success: true, data: data.data };
134
+ }
135
+ catch (error) {
136
+ return { success: false, error: error.message };
137
+ }
138
+ }
139
+ export async function archiveHostDashboardListing(id, category) {
140
+ try {
141
+ const data = (await patch(`/host/dashboard/listings/${id}/archive?category=${category}`, {}));
142
+ return { success: true, data: data.data };
143
+ }
144
+ catch (error) {
145
+ return { success: false, error: error.message };
146
+ }
147
+ }
148
+ export async function restoreHostDashboardListing(id, category) {
149
+ try {
150
+ const data = (await patch(`/host/dashboard/listings/${id}/restore?category=${category}`, {}));
151
+ return { success: true, data: data.data };
152
+ }
153
+ catch (error) {
154
+ return { success: false, error: error.message };
155
+ }
156
+ }
157
+ export async function updateHostDashboardListing(id, category, payload) {
158
+ try {
159
+ const data = (await put(`/host/dashboard/listings/${id}`, {
160
+ category,
161
+ ...payload,
162
+ }));
163
+ return { success: true, data: data.data };
164
+ }
165
+ catch (error) {
166
+ return { success: false, error: error.message };
167
+ }
168
+ }
169
+ export async function getListingPricingStrategies(listingId, params) {
170
+ try {
171
+ const q = new URLSearchParams();
172
+ if (params?.currency)
173
+ q.set("currency", params.currency);
174
+ if (params?.date)
175
+ q.set("date", params.date);
176
+ const suffix = q.toString() ? `?${q.toString()}` : "";
177
+ const data = (await get(`/pricing/listings/${listingId}/strategies${suffix}`));
178
+ return { success: true, data: data.data };
179
+ }
180
+ catch (error) {
181
+ return { success: false, data: null, error: error.message };
182
+ }
183
+ }
184
+ export async function resolveListingPricing(listingId, params) {
185
+ try {
186
+ const q = new URLSearchParams();
187
+ if (params?.currency)
188
+ q.set("currency", params.currency);
189
+ if (params?.date)
190
+ q.set("date", params.date);
191
+ const suffix = q.toString() ? `?${q.toString()}` : "";
192
+ const data = (await get(`/pricing/listings/${listingId}/resolve${suffix}`));
193
+ return { success: true, data: data.data };
194
+ }
195
+ catch (error) {
196
+ return { success: false, data: null, error: error.message };
197
+ }
198
+ }
199
+ export async function saveListingDefaultPricingStrategies(listingId, payload) {
200
+ try {
201
+ const data = (await put(`/pricing/listings/${listingId}/defaults`, payload));
202
+ return { success: true, data: data.data };
203
+ }
204
+ catch (error) {
205
+ return { success: false, error: error.message };
206
+ }
207
+ }
208
+ export async function saveListingPricingOverrides(listingId, payload) {
209
+ try {
210
+ const data = (await put(`/pricing/listings/${listingId}/overrides`, payload));
211
+ return { success: true, data: data.data };
212
+ }
213
+ catch (error) {
214
+ return { success: false, error: error.message };
215
+ }
216
+ }
217
+ // ── Bookings ──────────────────────────────────────────────────────────────────
218
+ export async function getHostDashboardBookings(params) {
219
+ try {
220
+ const q = new URLSearchParams();
221
+ if (params?.page)
222
+ q.set("page", String(params.page));
223
+ if (params?.limit)
224
+ q.set("limit", String(params.limit));
225
+ if (params?.status)
226
+ q.set("status", params.status);
227
+ const data = (await get(`/host/dashboard/bookings?${q.toString()}`));
228
+ return { success: true, ...data.data };
229
+ }
230
+ catch (error) {
231
+ return {
232
+ success: false,
233
+ bookings: [],
234
+ pagination: null,
235
+ error: error.message,
236
+ };
237
+ }
238
+ }
239
+ export async function updateHostBookingStatus(id, status, type) {
240
+ try {
241
+ const data = (await put(`/host/dashboard/bookings/${id}/status`, {
242
+ status,
243
+ type,
244
+ }));
245
+ return { success: true, booking: data.data.booking };
246
+ }
247
+ catch (error) {
248
+ return { success: false, error: error.message };
249
+ }
250
+ }
251
+ export async function requestHostBookingCancellationReview(id, type, reason) {
252
+ try {
253
+ const data = (await put(`/host/dashboard/bookings/${id}/cancellation-review`, {
254
+ type,
255
+ reason,
256
+ }));
257
+ return { success: true, booking: data.data.booking };
258
+ }
259
+ catch (error) {
260
+ return { success: false, error: error.message };
261
+ }
262
+ }
263
+ // ── Reviews ───────────────────────────────────────────────────────────────────
264
+ export async function getHostDashboardReviews(params) {
265
+ try {
266
+ const q = new URLSearchParams();
267
+ if (params?.page)
268
+ q.set("page", String(params.page));
269
+ if (params?.limit)
270
+ q.set("limit", String(params.limit));
271
+ const data = (await get(`/host/dashboard/reviews?${q.toString()}`));
272
+ return { success: true, ...data.data };
273
+ }
274
+ catch (error) {
275
+ return {
276
+ success: false,
277
+ reviews: [],
278
+ averageRating: 0,
279
+ pagination: null,
280
+ error: error.message,
281
+ };
282
+ }
283
+ }
284
+ // ── Earnings ──────────────────────────────────────────────────────────────────
285
+ export async function getHostDashboardEarnings() {
286
+ try {
287
+ const data = (await get("/host/dashboard/earnings"));
288
+ return { success: true, ...data.data };
289
+ }
290
+ catch (error) {
291
+ return { success: false, error: error.message };
292
+ }
293
+ }
294
+ export async function getHostEarningsBookings(params) {
295
+ try {
296
+ const q = new URLSearchParams();
297
+ if (params?.page)
298
+ q.set("page", String(params.page));
299
+ if (params?.limit)
300
+ q.set("limit", String(params.limit));
301
+ if (params?.status)
302
+ q.set("status", params.status);
303
+ const data = (await get(`/host/dashboard/earnings/bookings?${q.toString()}`));
304
+ return { success: true, ...data.data };
305
+ }
306
+ catch (error) {
307
+ return { success: false, bookings: [], pagination: null, error: error.message };
308
+ }
309
+ }
310
+ // ── Availability & Slots ──────────────────────────────────────────────────────
311
+ export async function updateListingAvailability(id, data) {
312
+ try {
313
+ const res = (await put(`/host/dashboard/availability/${id}`, data));
314
+ return { success: true, data: res.data };
315
+ }
316
+ catch (error) {
317
+ return { success: false, error: error.message };
318
+ }
319
+ }
320
+ // ── User Bookings ─────────────────────────────────────────────────────────────
321
+ export async function getHostBookingDetail(id, type) {
322
+ try {
323
+ const data = (await get(`/host/dashboard/bookings/${id}?type=${type}`));
324
+ return { success: true, booking: data.data.booking, type: data.data.type };
325
+ }
326
+ catch (error) {
327
+ return { success: false, booking: null, error: error.message };
328
+ }
329
+ }
330
+ export async function getMyBookings() {
331
+ try {
332
+ const [genericResult, stayResult, eventResult, packageResult] = await Promise.allSettled([
333
+ get("/bookings/my"),
334
+ get("/stays/bookings/me"),
335
+ get("/events/bookings/me"),
336
+ get("/enquiries/my"),
337
+ ]);
338
+ const genericBookings = genericResult.status === "fulfilled"
339
+ ? (genericResult.value?.data || []).map((booking) => ({
340
+ ...normalizeGenericBooking(booking),
341
+ entityLabel: booking.entityType === "TravelPackage"
342
+ ? "Package Booking"
343
+ : booking.entityType,
344
+ }))
345
+ : [];
346
+ const stayBookings = stayResult.status === "fulfilled"
347
+ ? (stayResult.value?.data || []).map(normalizeStayBooking)
348
+ : [];
349
+ const eventBookings = eventResult.status === "fulfilled"
350
+ ? (eventResult.value?.data || []).map(normalizeEventBooking)
351
+ : [];
352
+ const packageBookings = packageResult.status === "fulfilled"
353
+ ? (packageResult.value?.data || []).map(normalizePackageEnquiry)
354
+ : [];
355
+ const combined = hideSupersededPackageEnquiries(dedupeBookings([
356
+ ...genericBookings,
357
+ ...stayBookings,
358
+ ...eventBookings,
359
+ ...packageBookings,
360
+ ])).sort((a, b) => new Date(b.createdAt || b.startDate || 0).getTime() -
361
+ new Date(a.createdAt || a.startDate || 0).getTime());
362
+ const packageEnquiries = combined.filter((booking) => booking.bookingKind === "package_enquiry");
363
+ const bookings = combined.filter((booking) => booking.bookingKind !== "package_enquiry");
364
+ return { success: true, bookings, packageEnquiries };
365
+ }
366
+ catch (error) {
367
+ return { success: false, bookings: [], packageEnquiries: [], error: error.message };
368
+ }
369
+ }
370
+ export async function verifyBookingCodeHost(code) {
371
+ try {
372
+ const data = (await get(`/bookings/verify/${code}`));
373
+ return { success: true, ...data.data };
374
+ }
375
+ catch (error) {
376
+ return { success: false, error: error.message };
377
+ }
378
+ }
379
+ export async function manageAdventureSlots(id, slots) {
380
+ try {
381
+ const res = (await put(`/host/dashboard/adventures/${id}/slots`, {
382
+ slots,
383
+ }));
384
+ return { success: true, data: res.data };
385
+ }
386
+ catch (error) {
387
+ return { success: false, error: error.message };
388
+ }
389
+ }
390
+ export async function updateAdventurePricingDiscount(id, discountPercentage) {
391
+ try {
392
+ const res = (await put(`/host/dashboard/adventures/${id}/pricing`, {
393
+ discountPercentage,
394
+ }));
395
+ return { success: true, data: res.data };
396
+ }
397
+ catch (error) {
398
+ return { success: false, error: error.message };
399
+ }
400
+ }
@@ -0,0 +1,4 @@
1
+ export declare function normalizeImageFile(file: File): Promise<File>;
2
+ export declare function normalizeImageFiles(files: File[]): Promise<File[]>;
3
+ export declare function prepareImageFiles(files: File[], maxImageSizeMb: number, onWarning: (message: string) => void | Promise<void>): Promise<File[]>;
4
+ //# sourceMappingURL=imageUpload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageUpload.d.ts","sourceRoot":"","sources":["../../src/lib/imageUpload.ts"],"names":[],"mappings":"AAAA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBlE;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAExE;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,IAAI,EAAE,EACb,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACnD,OAAO,CAAC,IAAI,EAAE,CAAC,CAkBjB"}
@@ -0,0 +1,36 @@
1
+ export async function normalizeImageFile(file) {
2
+ const lowerName = file.name.toLowerCase();
3
+ const isHeicLike = file.type === "image/heic" ||
4
+ file.type === "image/heif" ||
5
+ lowerName.endsWith(".heic") ||
6
+ lowerName.endsWith(".heif");
7
+ if (!isHeicLike)
8
+ return file;
9
+ const heic2any = (await import("heic2any")).default;
10
+ const convertedBlob = await heic2any({
11
+ blob: file,
12
+ toType: "image/jpeg",
13
+ quality: 0.9,
14
+ });
15
+ return new File([convertedBlob], file.name.replace(/\.(heic|heif)$/i, ".jpeg"), { type: "image/jpeg" });
16
+ }
17
+ export async function normalizeImageFiles(files) {
18
+ return Promise.all(files.map((file) => normalizeImageFile(file)));
19
+ }
20
+ export async function prepareImageFiles(files, maxImageSizeMb, onWarning) {
21
+ const preparedFiles = [];
22
+ for (const file of files) {
23
+ if (file.size > maxImageSizeMb * 1024 * 1024) {
24
+ await onWarning(`${file.name} is too large. Max allowed size is ${maxImageSizeMb}MB.`);
25
+ continue;
26
+ }
27
+ try {
28
+ preparedFiles.push(await normalizeImageFile(file));
29
+ }
30
+ catch (error) {
31
+ console.error("Image normalization failed for", file.name, error);
32
+ await onWarning(`Could not convert ${file.name} from HEIC.`);
33
+ }
34
+ }
35
+ return preparedFiles;
36
+ }
@@ -0,0 +1,141 @@
1
+ export interface LocationAncestor {
2
+ _id: string;
3
+ name: string;
4
+ slug: string;
5
+ type: string;
6
+ }
7
+ export interface Location {
8
+ _id: string;
9
+ name: string;
10
+ type: "world" | "country" | "state" | "city" | "area" | "landmark";
11
+ parentId: string | null;
12
+ ancestors: LocationAncestor[];
13
+ slug: string;
14
+ slugPath: string;
15
+ path?: string;
16
+ coordinates?: {
17
+ lat: number;
18
+ lng: number;
19
+ };
20
+ images: string[];
21
+ description: string;
22
+ highlights?: string[];
23
+ metadata: {
24
+ bestTimeToVisit?: string;
25
+ budget?: string;
26
+ spokenLanguage?: string;
27
+ currency?: string;
28
+ timezone?: string;
29
+ tags: string[];
30
+ population?: number;
31
+ countryCode?: string;
32
+ };
33
+ stats: {
34
+ threadCount: number;
35
+ itineraryCount: number;
36
+ childCount: number;
37
+ listingsCount?: number;
38
+ discussionsCount?: number;
39
+ popularityScore?: number;
40
+ };
41
+ }
42
+ export interface ForumThread {
43
+ _id: string;
44
+ title: string;
45
+ content: string;
46
+ locationId: string;
47
+ category: string;
48
+ authorName: string;
49
+ upvotes: number;
50
+ downvotes: number;
51
+ score: number;
52
+ commentCount: number;
53
+ isPinned: boolean;
54
+ createdAt: string;
55
+ userId?: {
56
+ firstName?: string;
57
+ lastName?: string;
58
+ username?: string;
59
+ } | null;
60
+ }
61
+ export interface ForumComment {
62
+ _id: string;
63
+ threadId: string;
64
+ parentId: string | null;
65
+ content: string;
66
+ authorName: string;
67
+ upvotes: number;
68
+ createdAt: string;
69
+ userId?: {
70
+ firstName?: string;
71
+ lastName?: string;
72
+ username?: string;
73
+ } | null;
74
+ }
75
+ export declare function fetchLocationBySlugPath(slugPath: string): Promise<{
76
+ success: boolean;
77
+ location?: Location;
78
+ error?: string;
79
+ }>;
80
+ export declare function fetchLocationChildren(id: string): Promise<{
81
+ success: boolean;
82
+ children?: Location[];
83
+ error?: string;
84
+ }>;
85
+ export declare function fetchLocationBreadcrumb(id: string): Promise<LocationAncestor[]>;
86
+ export declare function searchLocations(q: string, opts?: {
87
+ type?: string;
88
+ limit?: number;
89
+ }): Promise<{
90
+ results: Location[];
91
+ total: number;
92
+ }>;
93
+ export declare function fetchLocationItineraries(id: string, page?: number): Promise<{
94
+ itineraries: any[];
95
+ total: number;
96
+ }>;
97
+ export declare function fetchThreads(locationId: string, opts?: {
98
+ sort?: string;
99
+ category?: string;
100
+ page?: number;
101
+ }): Promise<{
102
+ threads: ForumThread[];
103
+ total: number;
104
+ }>;
105
+ export declare function createThread(payload: {
106
+ locationId: string;
107
+ title: string;
108
+ content: string;
109
+ category?: string;
110
+ tags?: string[];
111
+ authorName?: string;
112
+ authorEmail?: string;
113
+ }): Promise<{
114
+ success: boolean;
115
+ thread?: ForumThread;
116
+ error?: string;
117
+ }>;
118
+ export declare function fetchComments(threadId: string, page?: number): Promise<{
119
+ comments: ForumComment[];
120
+ total: number;
121
+ }>;
122
+ export declare function fetchThread(threadId: string): Promise<{
123
+ success: boolean;
124
+ thread?: ForumThread;
125
+ error?: string;
126
+ }>;
127
+ export declare function createComment(threadId: string, payload: {
128
+ content: string;
129
+ parentId?: string;
130
+ authorName?: string;
131
+ authorEmail?: string;
132
+ }): Promise<{
133
+ success: boolean;
134
+ comment?: ForumComment;
135
+ error?: string;
136
+ }>;
137
+ export declare function voteThread(threadId: string, vote: "up" | "down" | "remove"): Promise<{
138
+ success: boolean;
139
+ error?: string;
140
+ }>;
141
+ //# sourceMappingURL=locationActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locationActions.d.ts","sourceRoot":"","sources":["../../src/lib/locationActions.ts"],"names":[],"mappings":"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"}