@lodashventure/medusa-review 1.4.9 → 1.4.11

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.
@@ -1,1644 +0,0 @@
1
- "use strict";
2
- const jsxRuntime = require("react/jsx-runtime");
3
- const adminSdk = require("@medusajs/admin-sdk");
4
- const icons = require("@medusajs/icons");
5
- const ui = require("@medusajs/ui");
6
- const Mentions = require("rc-mentions");
7
- const react = require("react");
8
- const reactRouterDom = require("react-router-dom");
9
- const Medusa = require("@medusajs/js-sdk");
10
- const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
11
- const Mentions__default = /* @__PURE__ */ _interopDefault(Mentions);
12
- const Medusa__default = /* @__PURE__ */ _interopDefault(Medusa);
13
- function getDefaultExportFromCjs(x) {
14
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
15
- }
16
- var axios$3 = { exports: {} };
17
- var bind$2 = function bind(fn, thisArg) {
18
- return function wrap() {
19
- var args = new Array(arguments.length);
20
- for (var i = 0; i < args.length; i++) {
21
- args[i] = arguments[i];
22
- }
23
- return fn.apply(thisArg, args);
24
- };
25
- };
26
- var bind$1 = bind$2;
27
- var toString = Object.prototype.toString;
28
- function isArray(val) {
29
- return toString.call(val) === "[object Array]";
30
- }
31
- function isUndefined(val) {
32
- return typeof val === "undefined";
33
- }
34
- function isBuffer(val) {
35
- return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && typeof val.constructor.isBuffer === "function" && val.constructor.isBuffer(val);
36
- }
37
- function isArrayBuffer(val) {
38
- return toString.call(val) === "[object ArrayBuffer]";
39
- }
40
- function isFormData(val) {
41
- return typeof FormData !== "undefined" && val instanceof FormData;
42
- }
43
- function isArrayBufferView(val) {
44
- var result;
45
- if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) {
46
- result = ArrayBuffer.isView(val);
47
- } else {
48
- result = val && val.buffer && val.buffer instanceof ArrayBuffer;
49
- }
50
- return result;
51
- }
52
- function isString(val) {
53
- return typeof val === "string";
54
- }
55
- function isNumber(val) {
56
- return typeof val === "number";
57
- }
58
- function isObject(val) {
59
- return val !== null && typeof val === "object";
60
- }
61
- function isPlainObject(val) {
62
- if (toString.call(val) !== "[object Object]") {
63
- return false;
64
- }
65
- var prototype = Object.getPrototypeOf(val);
66
- return prototype === null || prototype === Object.prototype;
67
- }
68
- function isDate(val) {
69
- return toString.call(val) === "[object Date]";
70
- }
71
- function isFile(val) {
72
- return toString.call(val) === "[object File]";
73
- }
74
- function isBlob(val) {
75
- return toString.call(val) === "[object Blob]";
76
- }
77
- function isFunction(val) {
78
- return toString.call(val) === "[object Function]";
79
- }
80
- function isStream(val) {
81
- return isObject(val) && isFunction(val.pipe);
82
- }
83
- function isURLSearchParams(val) {
84
- return typeof URLSearchParams !== "undefined" && val instanceof URLSearchParams;
85
- }
86
- function trim(str) {
87
- return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, "");
88
- }
89
- function isStandardBrowserEnv() {
90
- if (typeof navigator !== "undefined" && (navigator.product === "ReactNative" || navigator.product === "NativeScript" || navigator.product === "NS")) {
91
- return false;
92
- }
93
- return typeof window !== "undefined" && typeof document !== "undefined";
94
- }
95
- function forEach(obj, fn) {
96
- if (obj === null || typeof obj === "undefined") {
97
- return;
98
- }
99
- if (typeof obj !== "object") {
100
- obj = [obj];
101
- }
102
- if (isArray(obj)) {
103
- for (var i = 0, l = obj.length; i < l; i++) {
104
- fn.call(null, obj[i], i, obj);
105
- }
106
- } else {
107
- for (var key in obj) {
108
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
109
- fn.call(null, obj[key], key, obj);
110
- }
111
- }
112
- }
113
- }
114
- function merge() {
115
- var result = {};
116
- function assignValue(val, key) {
117
- if (isPlainObject(result[key]) && isPlainObject(val)) {
118
- result[key] = merge(result[key], val);
119
- } else if (isPlainObject(val)) {
120
- result[key] = merge({}, val);
121
- } else if (isArray(val)) {
122
- result[key] = val.slice();
123
- } else {
124
- result[key] = val;
125
- }
126
- }
127
- for (var i = 0, l = arguments.length; i < l; i++) {
128
- forEach(arguments[i], assignValue);
129
- }
130
- return result;
131
- }
132
- function extend(a, b, thisArg) {
133
- forEach(b, function assignValue(val, key) {
134
- if (thisArg && typeof val === "function") {
135
- a[key] = bind$1(val, thisArg);
136
- } else {
137
- a[key] = val;
138
- }
139
- });
140
- return a;
141
- }
142
- function stripBOM(content) {
143
- if (content.charCodeAt(0) === 65279) {
144
- content = content.slice(1);
145
- }
146
- return content;
147
- }
148
- var utils$9 = {
149
- isArray,
150
- isArrayBuffer,
151
- isBuffer,
152
- isFormData,
153
- isArrayBufferView,
154
- isString,
155
- isNumber,
156
- isObject,
157
- isPlainObject,
158
- isUndefined,
159
- isDate,
160
- isFile,
161
- isBlob,
162
- isFunction,
163
- isStream,
164
- isURLSearchParams,
165
- isStandardBrowserEnv,
166
- forEach,
167
- merge,
168
- extend,
169
- trim,
170
- stripBOM
171
- };
172
- var utils$8 = utils$9;
173
- function encode(val) {
174
- return encodeURIComponent(val).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]");
175
- }
176
- var buildURL$1 = function buildURL(url, params, paramsSerializer) {
177
- if (!params) {
178
- return url;
179
- }
180
- var serializedParams;
181
- if (paramsSerializer) {
182
- serializedParams = paramsSerializer(params);
183
- } else if (utils$8.isURLSearchParams(params)) {
184
- serializedParams = params.toString();
185
- } else {
186
- var parts = [];
187
- utils$8.forEach(params, function serialize(val, key) {
188
- if (val === null || typeof val === "undefined") {
189
- return;
190
- }
191
- if (utils$8.isArray(val)) {
192
- key = key + "[]";
193
- } else {
194
- val = [val];
195
- }
196
- utils$8.forEach(val, function parseValue(v) {
197
- if (utils$8.isDate(v)) {
198
- v = v.toISOString();
199
- } else if (utils$8.isObject(v)) {
200
- v = JSON.stringify(v);
201
- }
202
- parts.push(encode(key) + "=" + encode(v));
203
- });
204
- });
205
- serializedParams = parts.join("&");
206
- }
207
- if (serializedParams) {
208
- var hashmarkIndex = url.indexOf("#");
209
- if (hashmarkIndex !== -1) {
210
- url = url.slice(0, hashmarkIndex);
211
- }
212
- url += (url.indexOf("?") === -1 ? "?" : "&") + serializedParams;
213
- }
214
- return url;
215
- };
216
- var utils$7 = utils$9;
217
- function InterceptorManager$1() {
218
- this.handlers = [];
219
- }
220
- InterceptorManager$1.prototype.use = function use(fulfilled, rejected, options) {
221
- this.handlers.push({
222
- fulfilled,
223
- rejected,
224
- synchronous: options ? options.synchronous : false,
225
- runWhen: options ? options.runWhen : null
226
- });
227
- return this.handlers.length - 1;
228
- };
229
- InterceptorManager$1.prototype.eject = function eject(id) {
230
- if (this.handlers[id]) {
231
- this.handlers[id] = null;
232
- }
233
- };
234
- InterceptorManager$1.prototype.forEach = function forEach2(fn) {
235
- utils$7.forEach(this.handlers, function forEachHandler(h) {
236
- if (h !== null) {
237
- fn(h);
238
- }
239
- });
240
- };
241
- var InterceptorManager_1 = InterceptorManager$1;
242
- var utils$6 = utils$9;
243
- var normalizeHeaderName$1 = function normalizeHeaderName(headers, normalizedName) {
244
- utils$6.forEach(headers, function processHeader(value, name) {
245
- if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
246
- headers[normalizedName] = value;
247
- delete headers[name];
248
- }
249
- });
250
- };
251
- var enhanceError$1 = function enhanceError(error, config2, code, request2, response) {
252
- error.config = config2;
253
- if (code) {
254
- error.code = code;
255
- }
256
- error.request = request2;
257
- error.response = response;
258
- error.isAxiosError = true;
259
- error.toJSON = function toJSON() {
260
- return {
261
- // Standard
262
- message: this.message,
263
- name: this.name,
264
- // Microsoft
265
- description: this.description,
266
- number: this.number,
267
- // Mozilla
268
- fileName: this.fileName,
269
- lineNumber: this.lineNumber,
270
- columnNumber: this.columnNumber,
271
- stack: this.stack,
272
- // Axios
273
- config: this.config,
274
- code: this.code
275
- };
276
- };
277
- return error;
278
- };
279
- var createError;
280
- var hasRequiredCreateError;
281
- function requireCreateError() {
282
- if (hasRequiredCreateError) return createError;
283
- hasRequiredCreateError = 1;
284
- var enhanceError3 = enhanceError$1;
285
- createError = function createError2(message, config2, code, request2, response) {
286
- var error = new Error(message);
287
- return enhanceError3(error, config2, code, request2, response);
288
- };
289
- return createError;
290
- }
291
- var settle;
292
- var hasRequiredSettle;
293
- function requireSettle() {
294
- if (hasRequiredSettle) return settle;
295
- hasRequiredSettle = 1;
296
- var createError2 = requireCreateError();
297
- settle = function settle2(resolve, reject, response) {
298
- var validateStatus2 = response.config.validateStatus;
299
- if (!response.status || !validateStatus2 || validateStatus2(response.status)) {
300
- resolve(response);
301
- } else {
302
- reject(createError2(
303
- "Request failed with status code " + response.status,
304
- response.config,
305
- null,
306
- response.request,
307
- response
308
- ));
309
- }
310
- };
311
- return settle;
312
- }
313
- var cookies;
314
- var hasRequiredCookies;
315
- function requireCookies() {
316
- if (hasRequiredCookies) return cookies;
317
- hasRequiredCookies = 1;
318
- var utils2 = utils$9;
319
- cookies = utils2.isStandardBrowserEnv() ? (
320
- // Standard browser envs support document.cookie
321
- /* @__PURE__ */ function standardBrowserEnv() {
322
- return {
323
- write: function write(name, value, expires, path, domain, secure) {
324
- var cookie = [];
325
- cookie.push(name + "=" + encodeURIComponent(value));
326
- if (utils2.isNumber(expires)) {
327
- cookie.push("expires=" + new Date(expires).toGMTString());
328
- }
329
- if (utils2.isString(path)) {
330
- cookie.push("path=" + path);
331
- }
332
- if (utils2.isString(domain)) {
333
- cookie.push("domain=" + domain);
334
- }
335
- if (secure === true) {
336
- cookie.push("secure");
337
- }
338
- document.cookie = cookie.join("; ");
339
- },
340
- read: function read(name) {
341
- var match = document.cookie.match(new RegExp("(^|;\\s*)(" + name + ")=([^;]*)"));
342
- return match ? decodeURIComponent(match[3]) : null;
343
- },
344
- remove: function remove(name) {
345
- this.write(name, "", Date.now() - 864e5);
346
- }
347
- };
348
- }()
349
- ) : (
350
- // Non standard browser env (web workers, react-native) lack needed support.
351
- /* @__PURE__ */ function nonStandardBrowserEnv() {
352
- return {
353
- write: function write() {
354
- },
355
- read: function read() {
356
- return null;
357
- },
358
- remove: function remove() {
359
- }
360
- };
361
- }()
362
- );
363
- return cookies;
364
- }
365
- var isAbsoluteURL;
366
- var hasRequiredIsAbsoluteURL;
367
- function requireIsAbsoluteURL() {
368
- if (hasRequiredIsAbsoluteURL) return isAbsoluteURL;
369
- hasRequiredIsAbsoluteURL = 1;
370
- isAbsoluteURL = function isAbsoluteURL2(url) {
371
- return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
372
- };
373
- return isAbsoluteURL;
374
- }
375
- var combineURLs;
376
- var hasRequiredCombineURLs;
377
- function requireCombineURLs() {
378
- if (hasRequiredCombineURLs) return combineURLs;
379
- hasRequiredCombineURLs = 1;
380
- combineURLs = function combineURLs2(baseURL, relativeURL) {
381
- return relativeURL ? baseURL.replace(/\/+$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL;
382
- };
383
- return combineURLs;
384
- }
385
- var buildFullPath;
386
- var hasRequiredBuildFullPath;
387
- function requireBuildFullPath() {
388
- if (hasRequiredBuildFullPath) return buildFullPath;
389
- hasRequiredBuildFullPath = 1;
390
- var isAbsoluteURL2 = requireIsAbsoluteURL();
391
- var combineURLs2 = requireCombineURLs();
392
- buildFullPath = function buildFullPath2(baseURL, requestedURL) {
393
- if (baseURL && !isAbsoluteURL2(requestedURL)) {
394
- return combineURLs2(baseURL, requestedURL);
395
- }
396
- return requestedURL;
397
- };
398
- return buildFullPath;
399
- }
400
- var parseHeaders;
401
- var hasRequiredParseHeaders;
402
- function requireParseHeaders() {
403
- if (hasRequiredParseHeaders) return parseHeaders;
404
- hasRequiredParseHeaders = 1;
405
- var utils2 = utils$9;
406
- var ignoreDuplicateOf = [
407
- "age",
408
- "authorization",
409
- "content-length",
410
- "content-type",
411
- "etag",
412
- "expires",
413
- "from",
414
- "host",
415
- "if-modified-since",
416
- "if-unmodified-since",
417
- "last-modified",
418
- "location",
419
- "max-forwards",
420
- "proxy-authorization",
421
- "referer",
422
- "retry-after",
423
- "user-agent"
424
- ];
425
- parseHeaders = function parseHeaders2(headers) {
426
- var parsed = {};
427
- var key;
428
- var val;
429
- var i;
430
- if (!headers) {
431
- return parsed;
432
- }
433
- utils2.forEach(headers.split("\n"), function parser(line) {
434
- i = line.indexOf(":");
435
- key = utils2.trim(line.substr(0, i)).toLowerCase();
436
- val = utils2.trim(line.substr(i + 1));
437
- if (key) {
438
- if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
439
- return;
440
- }
441
- if (key === "set-cookie") {
442
- parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
443
- } else {
444
- parsed[key] = parsed[key] ? parsed[key] + ", " + val : val;
445
- }
446
- }
447
- });
448
- return parsed;
449
- };
450
- return parseHeaders;
451
- }
452
- var isURLSameOrigin;
453
- var hasRequiredIsURLSameOrigin;
454
- function requireIsURLSameOrigin() {
455
- if (hasRequiredIsURLSameOrigin) return isURLSameOrigin;
456
- hasRequiredIsURLSameOrigin = 1;
457
- var utils2 = utils$9;
458
- isURLSameOrigin = utils2.isStandardBrowserEnv() ? (
459
- // Standard browser envs have full support of the APIs needed to test
460
- // whether the request URL is of the same origin as current location.
461
- function standardBrowserEnv() {
462
- var msie = /(msie|trident)/i.test(navigator.userAgent);
463
- var urlParsingNode = document.createElement("a");
464
- var originURL;
465
- function resolveURL(url) {
466
- var href = url;
467
- if (msie) {
468
- urlParsingNode.setAttribute("href", href);
469
- href = urlParsingNode.href;
470
- }
471
- urlParsingNode.setAttribute("href", href);
472
- return {
473
- href: urlParsingNode.href,
474
- protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, "") : "",
475
- host: urlParsingNode.host,
476
- search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, "") : "",
477
- hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, "") : "",
478
- hostname: urlParsingNode.hostname,
479
- port: urlParsingNode.port,
480
- pathname: urlParsingNode.pathname.charAt(0) === "/" ? urlParsingNode.pathname : "/" + urlParsingNode.pathname
481
- };
482
- }
483
- originURL = resolveURL(window.location.href);
484
- return function isURLSameOrigin2(requestURL) {
485
- var parsed = utils2.isString(requestURL) ? resolveURL(requestURL) : requestURL;
486
- return parsed.protocol === originURL.protocol && parsed.host === originURL.host;
487
- };
488
- }()
489
- ) : (
490
- // Non standard browser envs (web workers, react-native) lack needed support.
491
- /* @__PURE__ */ function nonStandardBrowserEnv() {
492
- return function isURLSameOrigin2() {
493
- return true;
494
- };
495
- }()
496
- );
497
- return isURLSameOrigin;
498
- }
499
- var xhr;
500
- var hasRequiredXhr;
501
- function requireXhr() {
502
- if (hasRequiredXhr) return xhr;
503
- hasRequiredXhr = 1;
504
- var utils2 = utils$9;
505
- var settle2 = requireSettle();
506
- var cookies2 = requireCookies();
507
- var buildURL3 = buildURL$1;
508
- var buildFullPath2 = requireBuildFullPath();
509
- var parseHeaders2 = requireParseHeaders();
510
- var isURLSameOrigin2 = requireIsURLSameOrigin();
511
- var createError2 = requireCreateError();
512
- xhr = function xhrAdapter(config2) {
513
- return new Promise(function dispatchXhrRequest(resolve, reject) {
514
- var requestData = config2.data;
515
- var requestHeaders = config2.headers;
516
- var responseType = config2.responseType;
517
- if (utils2.isFormData(requestData)) {
518
- delete requestHeaders["Content-Type"];
519
- }
520
- var request2 = new XMLHttpRequest();
521
- if (config2.auth) {
522
- var username = config2.auth.username || "";
523
- var password = config2.auth.password ? unescape(encodeURIComponent(config2.auth.password)) : "";
524
- requestHeaders.Authorization = "Basic " + btoa(username + ":" + password);
525
- }
526
- var fullPath = buildFullPath2(config2.baseURL, config2.url);
527
- request2.open(config2.method.toUpperCase(), buildURL3(fullPath, config2.params, config2.paramsSerializer), true);
528
- request2.timeout = config2.timeout;
529
- function onloadend() {
530
- if (!request2) {
531
- return;
532
- }
533
- var responseHeaders = "getAllResponseHeaders" in request2 ? parseHeaders2(request2.getAllResponseHeaders()) : null;
534
- var responseData = !responseType || responseType === "text" || responseType === "json" ? request2.responseText : request2.response;
535
- var response = {
536
- data: responseData,
537
- status: request2.status,
538
- statusText: request2.statusText,
539
- headers: responseHeaders,
540
- config: config2,
541
- request: request2
542
- };
543
- settle2(resolve, reject, response);
544
- request2 = null;
545
- }
546
- if ("onloadend" in request2) {
547
- request2.onloadend = onloadend;
548
- } else {
549
- request2.onreadystatechange = function handleLoad() {
550
- if (!request2 || request2.readyState !== 4) {
551
- return;
552
- }
553
- if (request2.status === 0 && !(request2.responseURL && request2.responseURL.indexOf("file:") === 0)) {
554
- return;
555
- }
556
- setTimeout(onloadend);
557
- };
558
- }
559
- request2.onabort = function handleAbort() {
560
- if (!request2) {
561
- return;
562
- }
563
- reject(createError2("Request aborted", config2, "ECONNABORTED", request2));
564
- request2 = null;
565
- };
566
- request2.onerror = function handleError() {
567
- reject(createError2("Network Error", config2, null, request2));
568
- request2 = null;
569
- };
570
- request2.ontimeout = function handleTimeout() {
571
- var timeoutErrorMessage = "timeout of " + config2.timeout + "ms exceeded";
572
- if (config2.timeoutErrorMessage) {
573
- timeoutErrorMessage = config2.timeoutErrorMessage;
574
- }
575
- reject(createError2(
576
- timeoutErrorMessage,
577
- config2,
578
- config2.transitional && config2.transitional.clarifyTimeoutError ? "ETIMEDOUT" : "ECONNABORTED",
579
- request2
580
- ));
581
- request2 = null;
582
- };
583
- if (utils2.isStandardBrowserEnv()) {
584
- var xsrfValue = (config2.withCredentials || isURLSameOrigin2(fullPath)) && config2.xsrfCookieName ? cookies2.read(config2.xsrfCookieName) : void 0;
585
- if (xsrfValue) {
586
- requestHeaders[config2.xsrfHeaderName] = xsrfValue;
587
- }
588
- }
589
- if ("setRequestHeader" in request2) {
590
- utils2.forEach(requestHeaders, function setRequestHeader(val, key) {
591
- if (typeof requestData === "undefined" && key.toLowerCase() === "content-type") {
592
- delete requestHeaders[key];
593
- } else {
594
- request2.setRequestHeader(key, val);
595
- }
596
- });
597
- }
598
- if (!utils2.isUndefined(config2.withCredentials)) {
599
- request2.withCredentials = !!config2.withCredentials;
600
- }
601
- if (responseType && responseType !== "json") {
602
- request2.responseType = config2.responseType;
603
- }
604
- if (typeof config2.onDownloadProgress === "function") {
605
- request2.addEventListener("progress", config2.onDownloadProgress);
606
- }
607
- if (typeof config2.onUploadProgress === "function" && request2.upload) {
608
- request2.upload.addEventListener("progress", config2.onUploadProgress);
609
- }
610
- if (config2.cancelToken) {
611
- config2.cancelToken.promise.then(function onCanceled(cancel) {
612
- if (!request2) {
613
- return;
614
- }
615
- request2.abort();
616
- reject(cancel);
617
- request2 = null;
618
- });
619
- }
620
- if (!requestData) {
621
- requestData = null;
622
- }
623
- request2.send(requestData);
624
- });
625
- };
626
- return xhr;
627
- }
628
- var utils$5 = utils$9;
629
- var normalizeHeaderName2 = normalizeHeaderName$1;
630
- var enhanceError2 = enhanceError$1;
631
- var DEFAULT_CONTENT_TYPE = {
632
- "Content-Type": "application/x-www-form-urlencoded"
633
- };
634
- function setContentTypeIfUnset(headers, value) {
635
- if (!utils$5.isUndefined(headers) && utils$5.isUndefined(headers["Content-Type"])) {
636
- headers["Content-Type"] = value;
637
- }
638
- }
639
- function getDefaultAdapter() {
640
- var adapter;
641
- if (typeof XMLHttpRequest !== "undefined") {
642
- adapter = requireXhr();
643
- } else if (typeof process !== "undefined" && Object.prototype.toString.call(process) === "[object process]") {
644
- adapter = requireXhr();
645
- }
646
- return adapter;
647
- }
648
- function stringifySafely(rawValue, parser, encoder) {
649
- if (utils$5.isString(rawValue)) {
650
- try {
651
- (parser || JSON.parse)(rawValue);
652
- return utils$5.trim(rawValue);
653
- } catch (e) {
654
- if (e.name !== "SyntaxError") {
655
- throw e;
656
- }
657
- }
658
- }
659
- return (encoder || JSON.stringify)(rawValue);
660
- }
661
- var defaults$3 = {
662
- transitional: {
663
- silentJSONParsing: true,
664
- forcedJSONParsing: true,
665
- clarifyTimeoutError: false
666
- },
667
- adapter: getDefaultAdapter(),
668
- transformRequest: [function transformRequest(data, headers) {
669
- normalizeHeaderName2(headers, "Accept");
670
- normalizeHeaderName2(headers, "Content-Type");
671
- if (utils$5.isFormData(data) || utils$5.isArrayBuffer(data) || utils$5.isBuffer(data) || utils$5.isStream(data) || utils$5.isFile(data) || utils$5.isBlob(data)) {
672
- return data;
673
- }
674
- if (utils$5.isArrayBufferView(data)) {
675
- return data.buffer;
676
- }
677
- if (utils$5.isURLSearchParams(data)) {
678
- setContentTypeIfUnset(headers, "application/x-www-form-urlencoded;charset=utf-8");
679
- return data.toString();
680
- }
681
- if (utils$5.isObject(data) || headers && headers["Content-Type"] === "application/json") {
682
- setContentTypeIfUnset(headers, "application/json");
683
- return stringifySafely(data);
684
- }
685
- return data;
686
- }],
687
- transformResponse: [function transformResponse(data) {
688
- var transitional2 = this.transitional;
689
- var silentJSONParsing = transitional2 && transitional2.silentJSONParsing;
690
- var forcedJSONParsing = transitional2 && transitional2.forcedJSONParsing;
691
- var strictJSONParsing = !silentJSONParsing && this.responseType === "json";
692
- if (strictJSONParsing || forcedJSONParsing && utils$5.isString(data) && data.length) {
693
- try {
694
- return JSON.parse(data);
695
- } catch (e) {
696
- if (strictJSONParsing) {
697
- if (e.name === "SyntaxError") {
698
- throw enhanceError2(e, this, "E_JSON_PARSE");
699
- }
700
- throw e;
701
- }
702
- }
703
- }
704
- return data;
705
- }],
706
- /**
707
- * A timeout in milliseconds to abort a request. If set to 0 (default) a
708
- * timeout is not created.
709
- */
710
- timeout: 0,
711
- xsrfCookieName: "XSRF-TOKEN",
712
- xsrfHeaderName: "X-XSRF-TOKEN",
713
- maxContentLength: -1,
714
- maxBodyLength: -1,
715
- validateStatus: function validateStatus(status) {
716
- return status >= 200 && status < 300;
717
- }
718
- };
719
- defaults$3.headers = {
720
- common: {
721
- "Accept": "application/json, text/plain, */*"
722
- }
723
- };
724
- utils$5.forEach(["delete", "get", "head"], function forEachMethodNoData(method) {
725
- defaults$3.headers[method] = {};
726
- });
727
- utils$5.forEach(["post", "put", "patch"], function forEachMethodWithData(method) {
728
- defaults$3.headers[method] = utils$5.merge(DEFAULT_CONTENT_TYPE);
729
- });
730
- var defaults_1 = defaults$3;
731
- var utils$4 = utils$9;
732
- var defaults$2 = defaults_1;
733
- var transformData$1 = function transformData(data, headers, fns) {
734
- var context = this || defaults$2;
735
- utils$4.forEach(fns, function transform(fn) {
736
- data = fn.call(context, data, headers);
737
- });
738
- return data;
739
- };
740
- var isCancel$1;
741
- var hasRequiredIsCancel;
742
- function requireIsCancel() {
743
- if (hasRequiredIsCancel) return isCancel$1;
744
- hasRequiredIsCancel = 1;
745
- isCancel$1 = function isCancel2(value) {
746
- return !!(value && value.__CANCEL__);
747
- };
748
- return isCancel$1;
749
- }
750
- var utils$3 = utils$9;
751
- var transformData2 = transformData$1;
752
- var isCancel = requireIsCancel();
753
- var defaults$1 = defaults_1;
754
- function throwIfCancellationRequested(config2) {
755
- if (config2.cancelToken) {
756
- config2.cancelToken.throwIfRequested();
757
- }
758
- }
759
- var dispatchRequest$1 = function dispatchRequest(config2) {
760
- throwIfCancellationRequested(config2);
761
- config2.headers = config2.headers || {};
762
- config2.data = transformData2.call(
763
- config2,
764
- config2.data,
765
- config2.headers,
766
- config2.transformRequest
767
- );
768
- config2.headers = utils$3.merge(
769
- config2.headers.common || {},
770
- config2.headers[config2.method] || {},
771
- config2.headers
772
- );
773
- utils$3.forEach(
774
- ["delete", "get", "head", "post", "put", "patch", "common"],
775
- function cleanHeaderConfig(method) {
776
- delete config2.headers[method];
777
- }
778
- );
779
- var adapter = config2.adapter || defaults$1.adapter;
780
- return adapter(config2).then(function onAdapterResolution(response) {
781
- throwIfCancellationRequested(config2);
782
- response.data = transformData2.call(
783
- config2,
784
- response.data,
785
- response.headers,
786
- config2.transformResponse
787
- );
788
- return response;
789
- }, function onAdapterRejection(reason) {
790
- if (!isCancel(reason)) {
791
- throwIfCancellationRequested(config2);
792
- if (reason && reason.response) {
793
- reason.response.data = transformData2.call(
794
- config2,
795
- reason.response.data,
796
- reason.response.headers,
797
- config2.transformResponse
798
- );
799
- }
800
- }
801
- return Promise.reject(reason);
802
- });
803
- };
804
- var utils$2 = utils$9;
805
- var mergeConfig$2 = function mergeConfig(config1, config2) {
806
- config2 = config2 || {};
807
- var config3 = {};
808
- var valueFromConfig2Keys = ["url", "method", "data"];
809
- var mergeDeepPropertiesKeys = ["headers", "auth", "proxy", "params"];
810
- var defaultToConfig2Keys = [
811
- "baseURL",
812
- "transformRequest",
813
- "transformResponse",
814
- "paramsSerializer",
815
- "timeout",
816
- "timeoutMessage",
817
- "withCredentials",
818
- "adapter",
819
- "responseType",
820
- "xsrfCookieName",
821
- "xsrfHeaderName",
822
- "onUploadProgress",
823
- "onDownloadProgress",
824
- "decompress",
825
- "maxContentLength",
826
- "maxBodyLength",
827
- "maxRedirects",
828
- "transport",
829
- "httpAgent",
830
- "httpsAgent",
831
- "cancelToken",
832
- "socketPath",
833
- "responseEncoding"
834
- ];
835
- var directMergeKeys = ["validateStatus"];
836
- function getMergedValue(target, source) {
837
- if (utils$2.isPlainObject(target) && utils$2.isPlainObject(source)) {
838
- return utils$2.merge(target, source);
839
- } else if (utils$2.isPlainObject(source)) {
840
- return utils$2.merge({}, source);
841
- } else if (utils$2.isArray(source)) {
842
- return source.slice();
843
- }
844
- return source;
845
- }
846
- function mergeDeepProperties(prop) {
847
- if (!utils$2.isUndefined(config2[prop])) {
848
- config3[prop] = getMergedValue(config1[prop], config2[prop]);
849
- } else if (!utils$2.isUndefined(config1[prop])) {
850
- config3[prop] = getMergedValue(void 0, config1[prop]);
851
- }
852
- }
853
- utils$2.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {
854
- if (!utils$2.isUndefined(config2[prop])) {
855
- config3[prop] = getMergedValue(void 0, config2[prop]);
856
- }
857
- });
858
- utils$2.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);
859
- utils$2.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {
860
- if (!utils$2.isUndefined(config2[prop])) {
861
- config3[prop] = getMergedValue(void 0, config2[prop]);
862
- } else if (!utils$2.isUndefined(config1[prop])) {
863
- config3[prop] = getMergedValue(void 0, config1[prop]);
864
- }
865
- });
866
- utils$2.forEach(directMergeKeys, function merge2(prop) {
867
- if (prop in config2) {
868
- config3[prop] = getMergedValue(config1[prop], config2[prop]);
869
- } else if (prop in config1) {
870
- config3[prop] = getMergedValue(void 0, config1[prop]);
871
- }
872
- });
873
- var axiosKeys = valueFromConfig2Keys.concat(mergeDeepPropertiesKeys).concat(defaultToConfig2Keys).concat(directMergeKeys);
874
- var otherKeys = Object.keys(config1).concat(Object.keys(config2)).filter(function filterAxiosKeys(key) {
875
- return axiosKeys.indexOf(key) === -1;
876
- });
877
- utils$2.forEach(otherKeys, mergeDeepProperties);
878
- return config3;
879
- };
880
- const version = "0.21.4";
881
- const require$$0 = {
882
- version
883
- };
884
- var pkg = require$$0;
885
- var validators$1 = {};
886
- ["object", "boolean", "number", "function", "string", "symbol"].forEach(function(type, i) {
887
- validators$1[type] = function validator2(thing) {
888
- return typeof thing === type || "a" + (i < 1 ? "n " : " ") + type;
889
- };
890
- });
891
- var deprecatedWarnings = {};
892
- var currentVerArr = pkg.version.split(".");
893
- function isOlderVersion(version2, thanVersion) {
894
- var pkgVersionArr = thanVersion ? thanVersion.split(".") : currentVerArr;
895
- var destVer = version2.split(".");
896
- for (var i = 0; i < 3; i++) {
897
- if (pkgVersionArr[i] > destVer[i]) {
898
- return true;
899
- } else if (pkgVersionArr[i] < destVer[i]) {
900
- return false;
901
- }
902
- }
903
- return false;
904
- }
905
- validators$1.transitional = function transitional(validator2, version2, message) {
906
- var isDeprecated = version2 && isOlderVersion(version2);
907
- function formatMessage(opt, desc) {
908
- return "[Axios v" + pkg.version + "] Transitional option '" + opt + "'" + desc + (message ? ". " + message : "");
909
- }
910
- return function(value, opt, opts) {
911
- if (validator2 === false) {
912
- throw new Error(formatMessage(opt, " has been removed in " + version2));
913
- }
914
- if (isDeprecated && !deprecatedWarnings[opt]) {
915
- deprecatedWarnings[opt] = true;
916
- console.warn(
917
- formatMessage(
918
- opt,
919
- " has been deprecated since v" + version2 + " and will be removed in the near future"
920
- )
921
- );
922
- }
923
- return validator2 ? validator2(value, opt, opts) : true;
924
- };
925
- };
926
- function assertOptions(options, schema, allowUnknown) {
927
- if (typeof options !== "object") {
928
- throw new TypeError("options must be an object");
929
- }
930
- var keys = Object.keys(options);
931
- var i = keys.length;
932
- while (i-- > 0) {
933
- var opt = keys[i];
934
- var validator2 = schema[opt];
935
- if (validator2) {
936
- var value = options[opt];
937
- var result = value === void 0 || validator2(value, opt, options);
938
- if (result !== true) {
939
- throw new TypeError("option " + opt + " must be " + result);
940
- }
941
- continue;
942
- }
943
- if (allowUnknown !== true) {
944
- throw Error("Unknown option " + opt);
945
- }
946
- }
947
- }
948
- var validator$1 = {
949
- isOlderVersion,
950
- assertOptions,
951
- validators: validators$1
952
- };
953
- var utils$1 = utils$9;
954
- var buildURL2 = buildURL$1;
955
- var InterceptorManager = InterceptorManager_1;
956
- var dispatchRequest2 = dispatchRequest$1;
957
- var mergeConfig$1 = mergeConfig$2;
958
- var validator = validator$1;
959
- var validators = validator.validators;
960
- function Axios$1(instanceConfig) {
961
- this.defaults = instanceConfig;
962
- this.interceptors = {
963
- request: new InterceptorManager(),
964
- response: new InterceptorManager()
965
- };
966
- }
967
- Axios$1.prototype.request = function request(config2) {
968
- if (typeof config2 === "string") {
969
- config2 = arguments[1] || {};
970
- config2.url = arguments[0];
971
- } else {
972
- config2 = config2 || {};
973
- }
974
- config2 = mergeConfig$1(this.defaults, config2);
975
- if (config2.method) {
976
- config2.method = config2.method.toLowerCase();
977
- } else if (this.defaults.method) {
978
- config2.method = this.defaults.method.toLowerCase();
979
- } else {
980
- config2.method = "get";
981
- }
982
- var transitional2 = config2.transitional;
983
- if (transitional2 !== void 0) {
984
- validator.assertOptions(transitional2, {
985
- silentJSONParsing: validators.transitional(validators.boolean, "1.0.0"),
986
- forcedJSONParsing: validators.transitional(validators.boolean, "1.0.0"),
987
- clarifyTimeoutError: validators.transitional(validators.boolean, "1.0.0")
988
- }, false);
989
- }
990
- var requestInterceptorChain = [];
991
- var synchronousRequestInterceptors = true;
992
- this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
993
- if (typeof interceptor.runWhen === "function" && interceptor.runWhen(config2) === false) {
994
- return;
995
- }
996
- synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
997
- requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
998
- });
999
- var responseInterceptorChain = [];
1000
- this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
1001
- responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
1002
- });
1003
- var promise;
1004
- if (!synchronousRequestInterceptors) {
1005
- var chain = [dispatchRequest2, void 0];
1006
- Array.prototype.unshift.apply(chain, requestInterceptorChain);
1007
- chain = chain.concat(responseInterceptorChain);
1008
- promise = Promise.resolve(config2);
1009
- while (chain.length) {
1010
- promise = promise.then(chain.shift(), chain.shift());
1011
- }
1012
- return promise;
1013
- }
1014
- var newConfig = config2;
1015
- while (requestInterceptorChain.length) {
1016
- var onFulfilled = requestInterceptorChain.shift();
1017
- var onRejected = requestInterceptorChain.shift();
1018
- try {
1019
- newConfig = onFulfilled(newConfig);
1020
- } catch (error) {
1021
- onRejected(error);
1022
- break;
1023
- }
1024
- }
1025
- try {
1026
- promise = dispatchRequest2(newConfig);
1027
- } catch (error) {
1028
- return Promise.reject(error);
1029
- }
1030
- while (responseInterceptorChain.length) {
1031
- promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
1032
- }
1033
- return promise;
1034
- };
1035
- Axios$1.prototype.getUri = function getUri(config2) {
1036
- config2 = mergeConfig$1(this.defaults, config2);
1037
- return buildURL2(config2.url, config2.params, config2.paramsSerializer).replace(/^\?/, "");
1038
- };
1039
- utils$1.forEach(["delete", "get", "head", "options"], function forEachMethodNoData2(method) {
1040
- Axios$1.prototype[method] = function(url, config2) {
1041
- return this.request(mergeConfig$1(config2 || {}, {
1042
- method,
1043
- url,
1044
- data: (config2 || {}).data
1045
- }));
1046
- };
1047
- });
1048
- utils$1.forEach(["post", "put", "patch"], function forEachMethodWithData2(method) {
1049
- Axios$1.prototype[method] = function(url, data, config2) {
1050
- return this.request(mergeConfig$1(config2 || {}, {
1051
- method,
1052
- url,
1053
- data
1054
- }));
1055
- };
1056
- });
1057
- var Axios_1 = Axios$1;
1058
- var Cancel_1;
1059
- var hasRequiredCancel;
1060
- function requireCancel() {
1061
- if (hasRequiredCancel) return Cancel_1;
1062
- hasRequiredCancel = 1;
1063
- function Cancel(message) {
1064
- this.message = message;
1065
- }
1066
- Cancel.prototype.toString = function toString2() {
1067
- return "Cancel" + (this.message ? ": " + this.message : "");
1068
- };
1069
- Cancel.prototype.__CANCEL__ = true;
1070
- Cancel_1 = Cancel;
1071
- return Cancel_1;
1072
- }
1073
- var CancelToken_1;
1074
- var hasRequiredCancelToken;
1075
- function requireCancelToken() {
1076
- if (hasRequiredCancelToken) return CancelToken_1;
1077
- hasRequiredCancelToken = 1;
1078
- var Cancel = requireCancel();
1079
- function CancelToken(executor) {
1080
- if (typeof executor !== "function") {
1081
- throw new TypeError("executor must be a function.");
1082
- }
1083
- var resolvePromise;
1084
- this.promise = new Promise(function promiseExecutor(resolve) {
1085
- resolvePromise = resolve;
1086
- });
1087
- var token = this;
1088
- executor(function cancel(message) {
1089
- if (token.reason) {
1090
- return;
1091
- }
1092
- token.reason = new Cancel(message);
1093
- resolvePromise(token.reason);
1094
- });
1095
- }
1096
- CancelToken.prototype.throwIfRequested = function throwIfRequested() {
1097
- if (this.reason) {
1098
- throw this.reason;
1099
- }
1100
- };
1101
- CancelToken.source = function source() {
1102
- var cancel;
1103
- var token = new CancelToken(function executor(c) {
1104
- cancel = c;
1105
- });
1106
- return {
1107
- token,
1108
- cancel
1109
- };
1110
- };
1111
- CancelToken_1 = CancelToken;
1112
- return CancelToken_1;
1113
- }
1114
- var spread;
1115
- var hasRequiredSpread;
1116
- function requireSpread() {
1117
- if (hasRequiredSpread) return spread;
1118
- hasRequiredSpread = 1;
1119
- spread = function spread2(callback) {
1120
- return function wrap(arr) {
1121
- return callback.apply(null, arr);
1122
- };
1123
- };
1124
- return spread;
1125
- }
1126
- var isAxiosError;
1127
- var hasRequiredIsAxiosError;
1128
- function requireIsAxiosError() {
1129
- if (hasRequiredIsAxiosError) return isAxiosError;
1130
- hasRequiredIsAxiosError = 1;
1131
- isAxiosError = function isAxiosError2(payload) {
1132
- return typeof payload === "object" && payload.isAxiosError === true;
1133
- };
1134
- return isAxiosError;
1135
- }
1136
- var utils = utils$9;
1137
- var bind2 = bind$2;
1138
- var Axios = Axios_1;
1139
- var mergeConfig2 = mergeConfig$2;
1140
- var defaults = defaults_1;
1141
- function createInstance(defaultConfig) {
1142
- var context = new Axios(defaultConfig);
1143
- var instance = bind2(Axios.prototype.request, context);
1144
- utils.extend(instance, Axios.prototype, context);
1145
- utils.extend(instance, context);
1146
- return instance;
1147
- }
1148
- var axios$2 = createInstance(defaults);
1149
- axios$2.Axios = Axios;
1150
- axios$2.create = function create(instanceConfig) {
1151
- return createInstance(mergeConfig2(axios$2.defaults, instanceConfig));
1152
- };
1153
- axios$2.Cancel = requireCancel();
1154
- axios$2.CancelToken = requireCancelToken();
1155
- axios$2.isCancel = requireIsCancel();
1156
- axios$2.all = function all(promises) {
1157
- return Promise.all(promises);
1158
- };
1159
- axios$2.spread = requireSpread();
1160
- axios$2.isAxiosError = requireIsAxiosError();
1161
- axios$3.exports = axios$2;
1162
- axios$3.exports.default = axios$2;
1163
- var axiosExports = axios$3.exports;
1164
- var axios = axiosExports;
1165
- const axios$1 = /* @__PURE__ */ getDefaultExportFromCjs(axios);
1166
- const statusColor = (status) => status === "approved" ? "green" : status === "rejected" ? "red" : "grey";
1167
- const mimeTypes = ["image", "video"];
1168
- const MediaViewer = ({ media, className }) => {
1169
- const [open, setOpen] = react.useState(false);
1170
- const mimeType = media.mimeType.split("/")[0];
1171
- if (!mimeTypes.includes(mimeType)) {
1172
- return null;
1173
- }
1174
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.FocusModal, { open, onOpenChange: setOpen, children: [
1175
- /* @__PURE__ */ jsxRuntime.jsx(ui.FocusModal.Trigger, { className: "bg-ui-bg-overlay ", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.clx("w-24 h-24", className), children: [
1176
- mimeType === "image" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-0 w-full h-full object-contain flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: media.fileUrl, alt: "an image" }) }),
1177
- mimeType === "video" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2 w-full h-full flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: "Watch Video" }) })
1178
- ] }) }),
1179
- /* @__PURE__ */ jsxRuntime.jsxs(ui.FocusModal.Content, { className: "w-[80vw] h-[80vh] mx-auto my-auto", children: [
1180
- /* @__PURE__ */ jsxRuntime.jsxs(ui.FocusModal.Header, { children: [
1181
- /* @__PURE__ */ jsxRuntime.jsx(ui.FocusModal.Title, { children: media.fileId }),
1182
- /* @__PURE__ */ jsxRuntime.jsx(ui.FocusModal.Close, {})
1183
- ] }),
1184
- /* @__PURE__ */ jsxRuntime.jsxs(ui.FocusModal.Body, { className: "flex items-center justify-center", children: [
1185
- mimeType === "image" && /* @__PURE__ */ jsxRuntime.jsx("img", { src: media.fileUrl, alt: "an image" }),
1186
- mimeType === "video" && /* @__PURE__ */ jsxRuntime.jsx("video", { src: media.fileUrl, controls: true })
1187
- ] })
1188
- ] })
1189
- ] }) });
1190
- };
1191
- const statusMap = {
1192
- pending: "in-progress",
1193
- approved: "completed",
1194
- rejected: "completed"
1195
- };
1196
- const ReviewChild = ({ review, onAction }) => {
1197
- var _a, _b, _c;
1198
- const color = statusColor(review.status);
1199
- const [selectedStatus, setSelectedStatus] = react.useState("pending");
1200
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.ProgressAccordion.Item, { value: review.id, className: "px-4", children: [
1201
- /* @__PURE__ */ jsxRuntime.jsx(
1202
- ui.ProgressAccordion.Header,
1203
- {
1204
- status: statusMap[review.status],
1205
- className: "pl-0",
1206
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
1207
- /* @__PURE__ */ jsxRuntime.jsx(ui.StatusBadge, { color, children: review.status.charAt(0).toUpperCase() + review.status.slice(1) }),
1208
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "w-64 truncate", children: review.title })
1209
- ] })
1210
- }
1211
- ),
1212
- /* @__PURE__ */ jsxRuntime.jsxs(ui.ProgressAccordion.Content, { className: "pl-16 pb-4", children: [
1213
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
1214
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", className: "font-medium", children: review.rating ? `Rating: ${review.rating}` : null }),
1215
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", className: "text-ui-fg-muted", children: new Date(review.created_at).toLocaleDateString("en-GB") })
1216
- ] }),
1217
- /* @__PURE__ */ jsxRuntime.jsxs(
1218
- reactRouterDom.Link,
1219
- {
1220
- className: "text-ui-fg-muted hover:text-ui-fg-on-color",
1221
- to: review.customer_id ? `/customers/${review.customer_id}` : "",
1222
- children: [
1223
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: "User:" }),
1224
- " ",
1225
- review.is_admin ? "Admin" : ((_a = review.customer) == null ? void 0 : _a.first_name) ?? review.customer_id
1226
- ]
1227
- }
1228
- ),
1229
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "whitespace-pre-wrap my-2", children: review.content }),
1230
- Boolean((_b = review.medias) == null ? void 0 : _b.length) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-2 my-2", children: (_c = review.medias) == null ? void 0 : _c.map((media) => /* @__PURE__ */ jsxRuntime.jsx(MediaViewer, { media }, media.id)) }),
1231
- review.status === "pending" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2 justify-end mt-2", children: [
1232
- /* @__PURE__ */ jsxRuntime.jsx(
1233
- ui.Button,
1234
- {
1235
- variant: "danger",
1236
- disabled: selectedStatus === "rejected",
1237
- onClick: () => {
1238
- setSelectedStatus("rejected");
1239
- onAction == null ? void 0 : onAction(review.id, "reject");
1240
- },
1241
- children: "Reject"
1242
- }
1243
- ),
1244
- /* @__PURE__ */ jsxRuntime.jsx(
1245
- ui.Button,
1246
- {
1247
- variant: "primary",
1248
- disabled: selectedStatus === "approved",
1249
- onClick: () => {
1250
- setSelectedStatus("approved");
1251
- onAction == null ? void 0 : onAction(review.id, "approve");
1252
- },
1253
- children: "Approve"
1254
- }
1255
- )
1256
- ] })
1257
- ] })
1258
- ] }) });
1259
- };
1260
- const columnHelper = ui.createDataTableColumnHelper();
1261
- const reviewColumns = [
1262
- columnHelper.select(),
1263
- columnHelper.accessor("product", {
1264
- header: "Product",
1265
- id: "product",
1266
- cell: ({ row }) => {
1267
- var _a;
1268
- return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Link, { to: `/products/${row.original.product_id}`, children: (_a = row.original.product) == null ? void 0 : _a.title });
1269
- }
1270
- }),
1271
- columnHelper.accessor("children", {
1272
- header: "Pending Replies",
1273
- id: "pending-replies",
1274
- cell: ({ row }) => {
1275
- var _a;
1276
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1277
- ((_a = row.original.children) == null ? void 0 : _a.filter((r) => r.status === "pending").length) || 0,
1278
- " ",
1279
- "Replies"
1280
- ] });
1281
- }
1282
- }),
1283
- columnHelper.accessor("children", {
1284
- header: "Replies",
1285
- id: "replies",
1286
- cell: ({ row }) => {
1287
- var _a;
1288
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1289
- ((_a = row.original.children) == null ? void 0 : _a.length) || 0,
1290
- " Replies"
1291
- ] });
1292
- }
1293
- }),
1294
- columnHelper.accessor("status", {
1295
- header: "Status",
1296
- id: "status",
1297
- cell: ({ row }) => {
1298
- return /* @__PURE__ */ jsxRuntime.jsx(ui.StatusBadge, { color: statusColor(row.original.status), children: row.original.status.charAt(0).toUpperCase() + row.original.status.slice(1) });
1299
- }
1300
- }),
1301
- columnHelper.accessor("rating", {
1302
- header: "Rating",
1303
- id: "rating"
1304
- }),
1305
- columnHelper.accessor("title", {
1306
- header: "Title",
1307
- id: "title",
1308
- maxSize: 150,
1309
- cell: ({ row }) => {
1310
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate", children: row.original.title });
1311
- }
1312
- }),
1313
- columnHelper.accessor("content", {
1314
- header: "Content",
1315
- id: "content",
1316
- maxSize: 200,
1317
- cell: ({ row }) => {
1318
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate", children: row.original.content });
1319
- }
1320
- })
1321
- ];
1322
- const ReviewTable = ({ title, table }) => {
1323
- return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { children: [
1324
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DataTable, { instance: table, children: [
1325
- /* @__PURE__ */ jsxRuntime.jsx(ui.DataTable.Toolbar, { className: "flex flex-col items-start justify-between gap-2 md:flex-row md:items-center", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { children: title }) }),
1326
- /* @__PURE__ */ jsxRuntime.jsx(ui.DataTable.Table, {}),
1327
- /* @__PURE__ */ jsxRuntime.jsx(ui.DataTable.Pagination, {}),
1328
- /* @__PURE__ */ jsxRuntime.jsx(ui.DataTable.CommandBar, { selectedLabel: (count) => `${count} selected` })
1329
- ] }),
1330
- /* @__PURE__ */ jsxRuntime.jsx(ui.Toaster, {})
1331
- ] });
1332
- };
1333
- const sdk = new Medusa__default.default({
1334
- baseUrl: "http://localhost:9000",
1335
- debug: process.env.NODE_ENV === "development",
1336
- auth: {
1337
- type: "session"
1338
- }
1339
- });
1340
- const commandHelper = ui.createDataTableCommandHelper();
1341
- const useCommands = (refetch) => {
1342
- return [
1343
- commandHelper.command({
1344
- label: "Approve",
1345
- shortcut: "A",
1346
- action: async (selection) => {
1347
- const reviewsToApproveIds = Object.keys(selection);
1348
- sdk.client.fetch("/admin/reviews/status", {
1349
- method: "POST",
1350
- body: {
1351
- ids: reviewsToApproveIds,
1352
- status: "approved"
1353
- }
1354
- }).then(() => {
1355
- ui.toast.success("Reviews approved");
1356
- refetch();
1357
- }).catch(() => {
1358
- ui.toast.error("Failed to approve reviews");
1359
- });
1360
- }
1361
- }),
1362
- commandHelper.command({
1363
- label: "Reject",
1364
- shortcut: "R",
1365
- action: async (selection) => {
1366
- const reviewsToRejectIds = Object.keys(selection);
1367
- sdk.client.fetch("/admin/reviews/status", {
1368
- method: "POST",
1369
- body: {
1370
- ids: reviewsToRejectIds,
1371
- status: "rejected"
1372
- }
1373
- }).then(() => {
1374
- ui.toast.success("Reviews rejected");
1375
- refetch();
1376
- }).catch(() => {
1377
- ui.toast.error("Failed to reject reviews");
1378
- });
1379
- }
1380
- })
1381
- ];
1382
- };
1383
- const limit = 20;
1384
- const ReviewsPage = () => {
1385
- var _a, _b;
1386
- const [pagination, setPagination] = react.useState({
1387
- pageSize: limit,
1388
- pageIndex: 0
1389
- });
1390
- const offset = react.useMemo(() => {
1391
- return pagination.pageIndex * limit;
1392
- }, [pagination]);
1393
- const [rowSelection, setRowSelection] = react.useState(
1394
- {}
1395
- );
1396
- const [isDrawerOpen, setIsDrawerOpen] = react.useState(false);
1397
- const [selectedReview, setSelectedReview] = react.useState(null);
1398
- const [replyContent, setReplyContent] = react.useState("");
1399
- const pendingReplies = react.useMemo(() => {
1400
- var _a2;
1401
- const ids = ((_a2 = selectedReview == null ? void 0 : selectedReview.children) == null ? void 0 : _a2.filter((child) => child.status === "pending")) ?? [];
1402
- if ((selectedReview == null ? void 0 : selectedReview.status) === "pending") {
1403
- ids.push(selectedReview);
1404
- }
1405
- return ids;
1406
- }, [selectedReview]);
1407
- const [reviews, setReviews] = react.useState(null);
1408
- const [isLoading, setIsLoading] = react.useState(true);
1409
- const [error, setError] = react.useState(null);
1410
- const fetchReviews = async () => {
1411
- setIsLoading(true);
1412
- setError(null);
1413
- try {
1414
- const { data } = await axios$1.get("/admin/reviews", {
1415
- params: {
1416
- offset: pagination.pageIndex * pagination.pageSize,
1417
- limit: pagination.pageSize,
1418
- order: "-created_at"
1419
- }
1420
- });
1421
- setReviews(data);
1422
- } catch (err) {
1423
- setError(
1424
- err instanceof Error ? err : new Error("Failed to fetch reviews")
1425
- );
1426
- } finally {
1427
- setIsLoading(false);
1428
- }
1429
- };
1430
- react.useEffect(() => {
1431
- fetchReviews();
1432
- }, [offset, limit, pagination.pageIndex, pagination.pageSize]);
1433
- const refetch = fetchReviews;
1434
- const users = react.useMemo(() => {
1435
- var _a2;
1436
- const _users = reviews == null ? void 0 : reviews.reviews.filter((review) => review.product_id === (selectedReview == null ? void 0 : selectedReview.product_id)).map((review) => {
1437
- var _a3;
1438
- const children = review.children || [];
1439
- return [
1440
- {
1441
- id: review.is_admin ? "Admin" : review.customer_id,
1442
- firstName: review.is_admin ? "Admin" : ((_a3 = review.customer) == null ? void 0 : _a3.first_name) ?? "Customer"
1443
- },
1444
- ...children.map((child) => {
1445
- var _a4;
1446
- return {
1447
- id: child.is_admin ? "Admin" : child.customer_id,
1448
- firstName: child.is_admin ? "Admin" : ((_a4 = child.customer) == null ? void 0 : _a4.first_name) ?? "Customer"
1449
- };
1450
- })
1451
- ];
1452
- }).flat();
1453
- const userMap = new Map((_a2 = _users == null ? void 0 : _users.map) == null ? void 0 : _a2.call(_users, (u) => [u.id, u]));
1454
- const users2 = Array.from(userMap.values());
1455
- return users2.filter((u) => u.id);
1456
- }, [reviews, selectedReview]);
1457
- const commands = useCommands(refetch);
1458
- const table = ui.useDataTable({
1459
- commands,
1460
- columns: reviewColumns,
1461
- data: (reviews == null ? void 0 : reviews.reviews) || [],
1462
- rowCount: (reviews == null ? void 0 : reviews.count) || 0,
1463
- isLoading,
1464
- pagination: {
1465
- state: pagination,
1466
- onPaginationChange: setPagination
1467
- },
1468
- getRowId: (row) => row.id,
1469
- rowSelection: {
1470
- state: rowSelection,
1471
- onRowSelectionChange: setRowSelection
1472
- },
1473
- onRowClick: (_, row) => {
1474
- setSelectedReview(row.original);
1475
- setIsDrawerOpen(true);
1476
- }
1477
- });
1478
- const [toBeSaved, setToBeSaved] = react.useState(/* @__PURE__ */ new Map());
1479
- function handleAddToBeSaved(id, action) {
1480
- setToBeSaved((prev) => {
1481
- const newSet = new Map(prev);
1482
- newSet.set(id, action);
1483
- return newSet;
1484
- });
1485
- }
1486
- async function handleSave() {
1487
- const { approved, rejected } = Array.from(toBeSaved.entries()).reduce(
1488
- (acc, [id, action]) => {
1489
- if (action === "approve") {
1490
- acc.approved.push(id);
1491
- } else if (action === "reject") {
1492
- acc.rejected.push(id);
1493
- }
1494
- return acc;
1495
- },
1496
- { approved: [], rejected: [] }
1497
- );
1498
- await Promise.all([
1499
- axios$1.post("/admin/reviews/status", {
1500
- ids: approved,
1501
- status: "approved"
1502
- }),
1503
- axios$1.post("/admin/reviews/status", {
1504
- ids: rejected,
1505
- status: "rejected"
1506
- })
1507
- ]);
1508
- ui.toast.success("Reviews saved", {
1509
- description: `${approved.length} reviews approved, ${rejected.length} reviews rejected`
1510
- });
1511
- setIsDrawerOpen(false);
1512
- handleResetSelection();
1513
- refetch();
1514
- }
1515
- async function handleReply() {
1516
- await axios$1.post("/admin/reviews", {
1517
- product_id: selectedReview == null ? void 0 : selectedReview.product_id,
1518
- parent_id: selectedReview == null ? void 0 : selectedReview.id,
1519
- title: "Reply from Admin",
1520
- content: replyContent
1521
- });
1522
- ui.toast.success("Reply sent");
1523
- refetch();
1524
- setIsDrawerOpen(false);
1525
- handleResetSelection();
1526
- }
1527
- function handleDrawerChange(open) {
1528
- setIsDrawerOpen(open);
1529
- if (!open) {
1530
- handleResetSelection();
1531
- }
1532
- }
1533
- function handleResetSelection() {
1534
- setSelectedReview(null);
1535
- setToBeSaved(/* @__PURE__ */ new Map());
1536
- setReplyContent("");
1537
- }
1538
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1539
- /* @__PURE__ */ jsxRuntime.jsx(ReviewTable, { title: "Reviews", table }),
1540
- /* @__PURE__ */ jsxRuntime.jsx(ui.Drawer, { open: isDrawerOpen, onOpenChange: handleDrawerChange, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Drawer.Content, { children: [
1541
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Drawer.Header, { children: [
1542
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Drawer.Title, { children: [
1543
- "Review for ",
1544
- (_a = selectedReview == null ? void 0 : selectedReview.product) == null ? void 0 : _a.title
1545
- ] }),
1546
- /* @__PURE__ */ jsxRuntime.jsx(ui.Drawer.Description, { className: "pt-2", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: handleSave, disabled: toBeSaved.size <= 0, children: "Approve and Reject replies" }) })
1547
- ] }),
1548
- /* @__PURE__ */ jsxRuntime.jsx(ui.Drawer.Body, { className: "overflow-auto", children: /* @__PURE__ */ jsxRuntime.jsxs(
1549
- ui.ProgressAccordion,
1550
- {
1551
- type: "multiple",
1552
- defaultValue: (pendingReplies == null ? void 0 : pendingReplies.map((child) => child.id)) || [],
1553
- children: [
1554
- selectedReview && /* @__PURE__ */ jsxRuntime.jsx(
1555
- ReviewChild,
1556
- {
1557
- review: selectedReview,
1558
- onAction: (id, action) => {
1559
- handleAddToBeSaved(id, action);
1560
- }
1561
- },
1562
- selectedReview == null ? void 0 : selectedReview.id
1563
- ),
1564
- (_b = selectedReview == null ? void 0 : selectedReview.children) == null ? void 0 : _b.map((child) => /* @__PURE__ */ jsxRuntime.jsx(
1565
- ReviewChild,
1566
- {
1567
- review: child,
1568
- onAction: (id, action) => {
1569
- handleAddToBeSaved(id, action);
1570
- }
1571
- },
1572
- child.id
1573
- ))
1574
- ]
1575
- }
1576
- ) }),
1577
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Drawer.Footer, { className: "flex flex-col gap-2", children: [
1578
- /* @__PURE__ */ jsxRuntime.jsx(
1579
- Mentions__default.default,
1580
- {
1581
- rows: 3,
1582
- options: users.map((user) => ({
1583
- value: user.firstName,
1584
- label: user.firstName
1585
- })),
1586
- value: replyContent,
1587
- onChange: (text) => setReplyContent(text),
1588
- notFoundContent: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-ui-bg-subtle", children: "No users found" }),
1589
- className: "w-[98%] text-ui-on-color bg-ui-bg-subtle text-base",
1590
- placement: "top",
1591
- prefix: "@",
1592
- placeholder: "Type @ to mention a user"
1593
- }
1594
- ),
1595
- /* @__PURE__ */ jsxRuntime.jsx(
1596
- ui.Button,
1597
- {
1598
- className: "w-[98%]",
1599
- onClick: handleReply,
1600
- disabled: !replyContent,
1601
- children: "Reply as Admin"
1602
- }
1603
- )
1604
- ] })
1605
- ] }) })
1606
- ] });
1607
- };
1608
- const config = adminSdk.defineRouteConfig({
1609
- label: "Reviews",
1610
- icon: icons.ChatBubbleLeftRight
1611
- });
1612
- const widgetModule = { widgets: [] };
1613
- const routeModule = {
1614
- routes: [
1615
- {
1616
- Component: ReviewsPage,
1617
- path: "/reviews"
1618
- }
1619
- ]
1620
- };
1621
- const menuItemModule = {
1622
- menuItems: [
1623
- {
1624
- label: config.label,
1625
- icon: config.icon,
1626
- path: "/reviews",
1627
- nested: void 0
1628
- }
1629
- ]
1630
- };
1631
- const formModule = { customFields: {} };
1632
- const displayModule = {
1633
- displays: {}
1634
- };
1635
- const i18nModule = { resources: {} };
1636
- const plugin = {
1637
- widgetModule,
1638
- routeModule,
1639
- menuItemModule,
1640
- formModule,
1641
- displayModule,
1642
- i18nModule
1643
- };
1644
- module.exports = plugin;