blixify-ui-web 0.1.76 → 0.1.77

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.
@@ -62,7 +62,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
62
62
  return (mod && mod.__esModule) ? mod : { "default": mod };
63
63
  };
64
64
  Object.defineProperty(exports, "__esModule", { value: true });
65
- exports.DataTemplate = void 0;
65
+ exports.DataTemplate = exports.additionalSelect = exports.loadingSelect = void 0;
66
66
  var outline_1 = require("@heroicons/react/24/outline");
67
67
  var solid_1 = require("@heroicons/react/24/solid");
68
68
  var moment_1 = __importDefault(require("moment"));
@@ -133,57 +133,66 @@ var queryType = [
133
133
  label: "><",
134
134
  },
135
135
  ];
136
+ exports.loadingSelect = (react_1.default.createElement("div", { className: "flex flex-row" },
137
+ react_1.default.createElement(loading_1.Loading, { sizeClassName: "h-5 w-5" }),
138
+ react_1.default.createElement("p", { className: "ml-1" }, "Loading...")));
139
+ exports.additionalSelect = (react_1.default.createElement("div", { className: "flex flex-row" },
140
+ react_1.default.createElement(solid_1.MagnifyingGlassIcon, { className: "h-5 w-5" }),
141
+ react_1.default.createElement("p", { className: "ml-1" }, "Search for more...")));
136
142
  function DataTemplate(props) {
137
143
  var _this = this;
138
144
  var _a, _b, _c, _d, _e, _f, _g;
139
145
  var formRef = (0, react_1.createRef)();
140
146
  var objectFormRef = (0, react_1.createRef)();
141
- var typingTimeout = (0, react_1.useRef)();
142
147
  var modalFormInputRefs = props.model.map(function () { return (0, react_1.createRef)(); });
143
148
  var limit = props.limit ? props.limit : 10;
149
+ var typingTimeout = (0, react_1.useRef)();
144
150
  var _h = (0, react_1.useState)(false), loading = _h[0], setLoading = _h[1];
151
+ var _j = (0, react_1.useState)(), notification = _j[0], setNotification = _j[1];
145
152
  //INFO : Used by List
146
- var _j = (0, react_1.useState)(""), filterSearch = _j[0], setFilterSearch = _j[1];
147
- var _k = (0, react_1.useState)(""), filterSearchParams = _k[0], setFilterSearchParams = _k[1];
148
- var _l = (0, react_1.useState)(""), filterSelection = _l[0], setFilterSelection = _l[1];
149
- var _m = (0, react_1.useState)(""), filterReference = _m[0], setFilterReference = _m[1];
150
- var _o = (0, react_1.useState)(""), filterReferenceSearch = _o[0], setFilterReferenceSearch = _o[1];
151
- var _p = (0, react_1.useState)([]), filterReferenceList = _p[0], setFilterReferenceList = _p[1];
152
- var _q = (0, react_1.useState)(true), tableLoading = _q[0], setTableLoading = _q[1];
153
- var _r = (0, react_1.useState)(""), cursor = _r[0], setCursor = _r[1];
154
- var _s = (0, react_1.useState)(""), lastCursor = _s[0], setLastCursor = _s[1];
155
- var _t = (0, react_1.useState)([]), data = _t[0], setData = _t[1];
156
- var _u = (0, react_1.useState)(0), size = _u[0], setSize = _u[1];
157
- var _v = (0, react_1.useState)(0), pageIndex = _v[0], setPageIndex = _v[1];
158
- var _w = (0, react_1.useState)(null), csvFile = _w[0], setCSVFile = _w[1];
159
- var _x = (0, react_1.useState)([]), csvFileData = _x[0], setCSVFileData = _x[1];
160
- var _y = (0, react_1.useState)(0), stepCSVIndex = _y[0], setStepCSVIndex = _y[1];
161
- var _z = (0, react_1.useState)({}), listCSVMapAttribute = _z[0], setListCSVMapAttribute = _z[1];
162
- var _0 = (0, react_1.useState)({}), listCSVObjAttribute = _0[0], setListCSVObjAttribute = _0[1];
163
- var _1 = (0, react_1.useState)([]), csvAPIAttribute = _1[0], setCSVAPIAttribute = _1[1];
164
- var _2 = (0, react_1.useState)(""), exportLink = _2[0], setExportLink = _2[1];
165
- var _3 = (0, react_1.useState)([]), exportReferenceList = _3[0], setExportReferenceList = _3[1];
166
- var _4 = (0, react_1.useState)(""), exportReferenceSearch = _4[0], setExportReferenceSearch = _4[1];
167
- var _5 = (0, react_1.useState)(), notification = _5[0], setNotification = _5[1];
168
- //INFO : Used by Read
169
- //INFO : Used by Update
170
- var _6 = (0, react_1.useState)(false), modalVisible = _6[0], setModalVisible = _6[1];
171
- var _7 = (0, react_1.useState)(false), excelModal = _7[0], setExcelModal = _7[1];
172
- var _8 = (0, react_1.useState)(false), exportExcel = _8[0], setExportExcel = _8[1];
173
- var _9 = (0, react_1.useState)({}), selectedData = _9[0], setSelectedData = _9[1];
174
- var _10 = (0, react_1.useState)(""), selectedObjectStructureId = _10[0], setSelectedObjectStructureId = _10[1];
175
- var _11 = (0, react_1.useState)(""), selectedObjectId = _11[0], setSelectedObjectId = _11[1];
176
- var _12 = (0, react_1.useState)({}), selectedObjectData = _12[0], setSelectedObjectData = _12[1];
177
- var _13 = (0, react_1.useState)({}), referenceModelSchema = _13[0], setReferenceSchema = _13[1];
178
- var _14 = (0, react_1.useState)({}), referenceOptions = _14[0], setReferenceOptions = _14[1];
179
- var _15 = (0, react_1.useState)({}), referenceSearchText = _15[0], setReferenceSearchText = _15[1];
180
- var _16 = (0, react_1.useState)([]), queryList = _16[0], setQueryList = _16[1];
181
- var _17 = (0, react_1.useState)(false), queryModal = _17[0], setQueryModal = _17[1];
182
- var _18 = (0, react_1.useState)({
153
+ var _k = (0, react_1.useState)(""), filterSearch = _k[0], setFilterSearch = _k[1];
154
+ var _l = (0, react_1.useState)(""), filterSearchParams = _l[0], setFilterSearchParams = _l[1];
155
+ var _m = (0, react_1.useState)(""), filterSelection = _m[0], setFilterSelection = _m[1];
156
+ var _o = (0, react_1.useState)(""), filterReference = _o[0], setFilterReference = _o[1];
157
+ var _p = (0, react_1.useState)(""), filterReferenceSearch = _p[0], setFilterReferenceSearch = _p[1];
158
+ var _q = (0, react_1.useState)([]), filterReferenceList = _q[0], setFilterReferenceList = _q[1];
159
+ var _r = (0, react_1.useState)(true), tableLoading = _r[0], setTableLoading = _r[1];
160
+ var _s = (0, react_1.useState)(""), cursor = _s[0], setCursor = _s[1];
161
+ var _t = (0, react_1.useState)(""), lastCursor = _t[0], setLastCursor = _t[1];
162
+ var _u = (0, react_1.useState)([]), tableData = _u[0], setTableData = _u[1];
163
+ var _v = (0, react_1.useState)(0), size = _v[0], setSize = _v[1];
164
+ var _w = (0, react_1.useState)(0), pageIndex = _w[0], setPageIndex = _w[1];
165
+ //INFO : Used by Export
166
+ var _x = (0, react_1.useState)(null), csvFile = _x[0], setCSVFile = _x[1];
167
+ var _y = (0, react_1.useState)([]), csvFileData = _y[0], setCSVFileData = _y[1];
168
+ var _z = (0, react_1.useState)(0), stepCSVIndex = _z[0], setStepCSVIndex = _z[1];
169
+ var _0 = (0, react_1.useState)({}), listCSVMapAttribute = _0[0], setListCSVMapAttribute = _0[1];
170
+ var _1 = (0, react_1.useState)({}), listCSVObjAttribute = _1[0], setListCSVObjAttribute = _1[1];
171
+ var _2 = (0, react_1.useState)([]), csvAPIAttribute = _2[0], setCSVAPIAttribute = _2[1];
172
+ var _3 = (0, react_1.useState)(""), exportLink = _3[0], setExportLink = _3[1];
173
+ var _4 = (0, react_1.useState)([]), exportReferenceList = _4[0], setExportReferenceList = _4[1];
174
+ var _5 = (0, react_1.useState)(""), exportReferenceSearch = _5[0], setExportReferenceSearch = _5[1];
175
+ var _6 = (0, react_1.useState)([]), queryList = _6[0], setQueryList = _6[1];
176
+ var _7 = (0, react_1.useState)(false), queryModal = _7[0], setQueryModal = _7[1];
177
+ var _8 = (0, react_1.useState)({
183
178
  queryId: "",
184
179
  type: "=",
185
180
  value: "",
186
- }), queryInput = _18[0], setQueryInput = _18[1];
181
+ }), queryInput = _8[0], setQueryInput = _8[1];
182
+ //INFO : Used by Read
183
+ //INFO : Used by Update
184
+ var _9 = (0, react_1.useState)(false), modalVisible = _9[0], setModalVisible = _9[1];
185
+ var _10 = (0, react_1.useState)(false), deleteModal = _10[0], setDeleteModal = _10[1];
186
+ var _11 = (0, react_1.useState)(false), excelModal = _11[0], setExcelModal = _11[1];
187
+ var _12 = (0, react_1.useState)(false), exportExcel = _12[0], setExportExcel = _12[1];
188
+ var _13 = (0, react_1.useState)({}), selectedData = _13[0], setSelectedData = _13[1];
189
+ var _14 = (0, react_1.useState)(""), selectedObjectStructureId = _14[0], setSelectedObjectStructureId = _14[1];
190
+ var _15 = (0, react_1.useState)(""), selectedObjectId = _15[0], setSelectedObjectId = _15[1];
191
+ var _16 = (0, react_1.useState)({}), selectedObjectData = _16[0], setSelectedObjectData = _16[1];
192
+ var _17 = (0, react_1.useState)(false), referenceLoading = _17[0], setReferenceLoading = _17[1];
193
+ var _18 = (0, react_1.useState)({}), referencesOptions = _18[0], setReferencesOptions = _18[1];
194
+ var _19 = (0, react_1.useState)({}), referenceModelSchema = _19[0], setReferenceSchema = _19[1];
195
+ var serverId = props.server === "mongoServer" ? "_id" : "id";
187
196
  var dbModule = props.server === "firebase" ? (_a = props.lib) === null || _a === void 0 ? void 0 : _a.firebase : (_b = props.lib) === null || _b === void 0 ? void 0 : _b.axios;
188
197
  var writeServerQuery = new writeQuery_1.WriteQuery((_c = props.lib) === null || _c === void 0 ? void 0 : _c.axios, props.server, props.collectionId, props.dbEndpoint);
189
198
  var moreButtonPopUp = [
@@ -206,6 +215,8 @@ function DataTemplate(props) {
206
215
  switch (props.type) {
207
216
  case "read":
208
217
  case "update":
218
+ setExcelModal(false);
219
+ setExportExcel(false);
209
220
  setSelectedData({});
210
221
  setSelectedObjectData({});
211
222
  if (props.id !== "new" && props.id !== "") {
@@ -214,6 +225,7 @@ function DataTemplate(props) {
214
225
  }
215
226
  break;
216
227
  case "list":
228
+ setReferencesOptions({});
217
229
  break;
218
230
  }
219
231
  }, [props.type, props.id]);
@@ -253,7 +265,7 @@ function DataTemplate(props) {
253
265
  referenceData.data.map(function (eachData) {
254
266
  var _a, _b;
255
267
  var data = JSON.parse(JSON.stringify(eachData));
256
- var id = props.server === "mongoServer" ? data["_id"] : data["id"];
268
+ var id = data[serverId];
257
269
  referenceOptionsList.push({
258
270
  key: id,
259
271
  label: (_b = data[(_a = eachModel.referenceLabel) !== null && _a !== void 0 ? _a : ""]) !== null && _b !== void 0 ? _b : id,
@@ -295,13 +307,184 @@ function DataTemplate(props) {
295
307
  props.dbEndpoint,
296
308
  props.model,
297
309
  props.server,
310
+ serverId,
298
311
  ]);
299
- var queryIdOptions = [];
300
- //SECTION - List
312
+ //=====================================================================================
313
+ //SECTION: Handle Reference
314
+ //=====================================================================================
315
+ var handleRetrieveObjectReferenceOptions = function (eachModel, referencesOptions, selectedData, prefix, listObject, searchText) { return __awaiter(_this, void 0, void 0, function () {
316
+ var optionList_1, referenceRQ_1, selectionRes, selectedDataValue, currentRes_1, queryValue, res, modelId, err_1;
317
+ var _this = this;
318
+ var _a, _b;
319
+ return __generator(this, function (_c) {
320
+ switch (_c.label) {
321
+ case 0:
322
+ _c.trys.push([0, 6, , 7]);
323
+ optionList_1 = [];
324
+ referenceRQ_1 = new readQuery_1.ReadQuery(dbModule, props.server, (_a = eachModel.referenceSpaceId) !== null && _a !== void 0 ? _a : "", props.dbEndpoint);
325
+ return [4 /*yield*/, referenceRQ_1.call({
326
+ type: "list",
327
+ limit: 10,
328
+ query: searchText
329
+ ? [
330
+ {
331
+ type: "search",
332
+ value: searchText,
333
+ searchIds: [(_b = eachModel.referenceLabel) !== null && _b !== void 0 ? _b : "", serverId],
334
+ },
335
+ ]
336
+ : undefined,
337
+ })];
338
+ case 1:
339
+ selectionRes = _c.sent();
340
+ selectedDataValue = [];
341
+ if (listObject)
342
+ selectedDataValue = selectedData[prefix !== null && prefix !== void 0 ? prefix : ""];
343
+ else if (prefix)
344
+ selectedDataValue = selectedData[prefix][eachModel.id];
345
+ else
346
+ selectedDataValue = selectedData[eachModel.id];
347
+ currentRes_1 = [];
348
+ if (!(selectedData && selectedDataValue)) return [3 /*break*/, 5];
349
+ if (!(listObject && Array.isArray(selectedDataValue))) return [3 /*break*/, 3];
350
+ return [4 /*yield*/, Promise.all(selectedDataValue.map(function (eachData) { return __awaiter(_this, void 0, void 0, function () {
351
+ var queryValue, res;
352
+ return __generator(this, function (_a) {
353
+ switch (_a.label) {
354
+ case 0:
355
+ queryValue = Array.isArray(eachData[eachModel.id])
356
+ ? eachData[eachModel.id]
357
+ : [eachData[eachModel.id]];
358
+ return [4 /*yield*/, referenceRQ_1.call({
359
+ type: "list",
360
+ query: [{ type: "in", value: queryValue, queryId: serverId }],
361
+ })];
362
+ case 1:
363
+ res = _a.sent();
364
+ if (res === null || res === void 0 ? void 0 : res.data)
365
+ currentRes_1.push.apply(currentRes_1, res.data);
366
+ return [2 /*return*/];
367
+ }
368
+ });
369
+ }); }))];
370
+ case 2:
371
+ _c.sent();
372
+ return [3 /*break*/, 5];
373
+ case 3:
374
+ queryValue = Array.isArray(selectedDataValue)
375
+ ? selectedDataValue
376
+ : [selectedDataValue];
377
+ return [4 /*yield*/, referenceRQ_1.call({
378
+ type: "list",
379
+ query: [{ type: "in", value: queryValue, queryId: serverId }],
380
+ })];
381
+ case 4:
382
+ res = _c.sent();
383
+ currentRes_1 = res === null || res === void 0 ? void 0 : res.data;
384
+ _c.label = 5;
385
+ case 5:
386
+ if (selectionRes === null || selectionRes === void 0 ? void 0 : selectionRes.data) {
387
+ selectionRes.data.map(function (eachData) {
388
+ var _a, _b;
389
+ var id = eachData[serverId];
390
+ var eachDataJSON = JSON.parse(JSON.stringify(eachData));
391
+ if (!optionList_1.some(function (eachData) { return eachData.key === id; })) {
392
+ optionList_1.push({
393
+ key: eachData._id,
394
+ label: (_b = eachDataJSON[(_a = eachModel.referenceLabel) !== null && _a !== void 0 ? _a : ""]) !== null && _b !== void 0 ? _b : eachData._id,
395
+ });
396
+ }
397
+ return null;
398
+ });
399
+ }
400
+ if (currentRes_1) {
401
+ currentRes_1.map(function (eachData) {
402
+ var _a, _b;
403
+ var id = eachData[serverId];
404
+ var eachDataJSON = JSON.parse(JSON.stringify(eachData));
405
+ if (!optionList_1.some(function (eachData) { return eachData.key === id; })) {
406
+ optionList_1.push({
407
+ key: eachData._id,
408
+ label: (_b = eachDataJSON[(_a = eachModel.referenceLabel) !== null && _a !== void 0 ? _a : ""]) !== null && _b !== void 0 ? _b : eachData._id,
409
+ });
410
+ }
411
+ return null;
412
+ });
413
+ }
414
+ modelId = prefix ? "".concat(prefix, ".").concat(eachModel.id) : eachModel.id;
415
+ referencesOptions[modelId] = optionList_1;
416
+ return [3 /*break*/, 7];
417
+ case 6:
418
+ err_1 = _c.sent();
419
+ return [3 /*break*/, 7];
420
+ case 7: return [2 /*return*/];
421
+ }
422
+ });
423
+ }); };
424
+ var handleRetrieveReferenceOptions = function (selectedData) { return __awaiter(_this, void 0, void 0, function () {
425
+ var options, err_2;
426
+ var _this = this;
427
+ return __generator(this, function (_a) {
428
+ switch (_a.label) {
429
+ case 0:
430
+ options = {};
431
+ _a.label = 1;
432
+ case 1:
433
+ _a.trys.push([1, 3, , 4]);
434
+ return [4 /*yield*/, Promise.all(props.model.map(function (eachModel) { return __awaiter(_this, void 0, void 0, function () {
435
+ var _this = this;
436
+ return __generator(this, function (_a) {
437
+ switch (_a.label) {
438
+ case 0:
439
+ if (!(eachModel.type === "reference" ||
440
+ eachModel.type === "listReference")) return [3 /*break*/, 2];
441
+ return [4 /*yield*/, handleRetrieveObjectReferenceOptions(eachModel, options, selectedData)];
442
+ case 1:
443
+ _a.sent();
444
+ return [3 /*break*/, 4];
445
+ case 2:
446
+ if (!((eachModel.type === "object" || eachModel.type === "listObject") &&
447
+ eachModel.objectData)) return [3 /*break*/, 4];
448
+ return [4 /*yield*/, Promise.all(eachModel.objectData.map(function (eachObjectData) { return __awaiter(_this, void 0, void 0, function () {
449
+ return __generator(this, function (_a) {
450
+ switch (_a.label) {
451
+ case 0:
452
+ if (!(eachObjectData.type === "reference" ||
453
+ eachObjectData.type === "listReference")) return [3 /*break*/, 2];
454
+ return [4 /*yield*/, handleRetrieveObjectReferenceOptions(eachObjectData, options, selectedData, eachModel.id, eachModel.type === "listObject")];
455
+ case 1:
456
+ _a.sent();
457
+ _a.label = 2;
458
+ case 2: return [2 /*return*/];
459
+ }
460
+ });
461
+ }); }))];
462
+ case 3:
463
+ _a.sent();
464
+ _a.label = 4;
465
+ case 4: return [2 /*return*/];
466
+ }
467
+ });
468
+ }); }))];
469
+ case 2:
470
+ _a.sent();
471
+ return [3 /*break*/, 4];
472
+ case 3:
473
+ err_2 = _a.sent();
474
+ return [3 /*break*/, 4];
475
+ case 4:
476
+ setReferencesOptions(options);
477
+ return [2 /*return*/];
478
+ }
479
+ });
480
+ }); };
481
+ //=====================================================================================
482
+ //SECTION: Handle List
483
+ //=====================================================================================
301
484
  var handlePagination = function (value) {
302
485
  if (props.server === "mongoServer") {
303
486
  setTableLoading(true);
304
- setData([]);
487
+ setTableData([]);
305
488
  }
306
489
  if (typeof value === "number") {
307
490
  setPageIndex(value);
@@ -311,7 +494,7 @@ function DataTemplate(props) {
311
494
  //INFO : Retrieve latest cursor data from Firebase only
312
495
  if (props.server !== "mongoServer" &&
313
496
  cursor &&
314
- (pageIndex + 1) * limit + 1 > data.length) {
497
+ (pageIndex + 1) * limit + 1 > tableData.length) {
315
498
  setLastCursor(cursor);
316
499
  }
317
500
  setPageIndex(pageIndex + 1);
@@ -336,7 +519,7 @@ function DataTemplate(props) {
336
519
  return [4 /*yield*/, handleListResponse];
337
520
  case 2:
338
521
  dataList = _b.sent();
339
- setData(dataList);
522
+ setTableData(dataList);
340
523
  setSize(responseData.count);
341
524
  _b.label = 3;
342
525
  case 3: return [3 /*break*/, 7];
@@ -347,7 +530,7 @@ function DataTemplate(props) {
347
530
  dataList = _b.sent();
348
531
  _b.label = 6;
349
532
  case 6:
350
- setData(filterSearchParams ? dataList : dataList.concat(data));
533
+ setTableData(filterSearchParams ? dataList : dataList.concat(tableData));
351
534
  setCursor(responseData.count);
352
535
  _b.label = 7;
353
536
  case 7:
@@ -356,38 +539,22 @@ function DataTemplate(props) {
356
539
  }
357
540
  });
358
541
  }); };
359
- var handleExportCSVData = function () { return __awaiter(_this, void 0, void 0, function () {
360
- var res, err_1;
361
- var _a, _b, _c;
362
- return __generator(this, function (_d) {
363
- switch (_d.label) {
364
- case 0:
365
- _d.trys.push([0, 2, , 3]);
366
- setLoading(true);
367
- return [4 /*yield*/, ((_b = (_a = props.lib) === null || _a === void 0 ? void 0 : _a.axios) === null || _b === void 0 ? void 0 : _b.post("".concat(props.schemaEndpoint, "/csv/export"), {
368
- data: { spaceId: props.collectionId, query: queryList },
369
- }, {
370
- headers: {
371
- "Content-Type": "multipart/form-data",
372
- },
373
- }))];
374
- case 1:
375
- res = _d.sent();
376
- setExportLink((_c = res === null || res === void 0 ? void 0 : res.data.link) !== null && _c !== void 0 ? _c : "");
377
- setNotification({
378
- type: true,
379
- title: "Export Successfully",
380
- msg: "A download link had been generated.",
381
- });
382
- setLoading(false);
383
- return [3 /*break*/, 3];
384
- case 2:
385
- err_1 = _d.sent();
386
- return [3 /*break*/, 3];
387
- case 3: return [2 /*return*/];
388
- }
389
- });
390
- }); };
542
+ var handleClearDataByFilter = function () {
543
+ setTableData([]);
544
+ setPageIndex(0);
545
+ setTableLoading(true);
546
+ };
547
+ var handleNameSearch = function (e) {
548
+ setFilterSearch(e.target.value);
549
+ handleClearDataByFilter();
550
+ if (typingTimeout.current) {
551
+ clearTimeout(typingTimeout.current);
552
+ typingTimeout.current = null;
553
+ }
554
+ typingTimeout.current = setTimeout(function () {
555
+ setFilterSearchParams(e.target.value);
556
+ }, 500);
557
+ };
391
558
  var handleGetItemError = function () {
392
559
  setTableLoading(false);
393
560
  setModalVisible(false);
@@ -396,547 +563,180 @@ function DataTemplate(props) {
396
563
  handleNavigate();
397
564
  }
398
565
  };
399
- //SECTION - CSV
400
- var handleOnChangeCSV = function (e) {
401
- var _a;
402
- var file = e.target.files[0];
403
- if (file) {
404
- setCSVFile(file);
405
- (_a = props.lib) === null || _a === void 0 ? void 0 : _a.papaParser.parse(file, {
406
- header: true,
407
- dynamicTyping: true,
408
- complete: function (results) {
409
- if (results.data && results.data.length < 100)
410
- setCSVFileData(results.data);
411
- else
412
- setNotification({
413
- type: false,
414
- title: "Import Error",
415
- msg: "Data is more than 100 rows",
416
- });
417
- },
418
- });
419
- setStepCSVIndex(1);
566
+ //=====================================================================================
567
+ //SECTION: Handle Object
568
+ //=====================================================================================
569
+ // TODO - Remove Root Folder of the Object List Image
570
+ var handleRemoveObjectListData = function () {
571
+ var clonedSelectedData = handleClonedDataAttribute(selectedData, props.model);
572
+ if (selectedObjectId) {
573
+ var index = clonedSelectedData[selectedObjectStructureId].findIndex(function (eachData) { return eachData.id === selectedObjectId; });
574
+ if (index !== -1) {
575
+ clonedSelectedData[selectedObjectStructureId].splice(index, 1);
576
+ }
577
+ setSelectedObjectId("");
578
+ setSelectedData(clonedSelectedData);
579
+ handlePopUpModal(false);
580
+ }
581
+ };
582
+ var handleSubmitObjectDataType = function () {
583
+ var _a, _b;
584
+ var clonedSelectedData = handleClonedDataAttribute(selectedData, props.model);
585
+ var filterObjectModel = props.model.find(function (eachModel) {
586
+ return eachModel.id === selectedObjectStructureId;
587
+ });
588
+ var clonedSelectedObjectData = handleClonedDataAttribute(selectedObjectData, (_a = filterObjectModel === null || filterObjectModel === void 0 ? void 0 : filterObjectModel.objectData) !== null && _a !== void 0 ? _a : [], true, true);
589
+ if (!clonedSelectedObjectData["id"]) {
590
+ clonedSelectedObjectData["id"] = (0, uuid_1.v4)();
591
+ }
592
+ if ((filterObjectModel === null || filterObjectModel === void 0 ? void 0 : filterObjectModel.type) === "listObject") {
593
+ if (selectedObjectId) {
594
+ var index = clonedSelectedData[selectedObjectStructureId].findIndex(function (eachData) { return eachData.id === selectedObjectId; });
595
+ if (index !== -1) {
596
+ clonedSelectedData[selectedObjectStructureId][index] =
597
+ clonedSelectedObjectData;
598
+ }
599
+ setSelectedObjectId("");
600
+ setSelectedData(clonedSelectedData);
601
+ }
602
+ else {
603
+ if (Array.isArray(clonedSelectedData[selectedObjectStructureId])) {
604
+ clonedSelectedData[selectedObjectStructureId].push(clonedSelectedObjectData);
605
+ setSelectedData(clonedSelectedData);
606
+ }
607
+ else {
608
+ clonedSelectedData[selectedObjectStructureId] = [
609
+ clonedSelectedObjectData,
610
+ ];
611
+ setSelectedData(clonedSelectedData);
612
+ }
613
+ }
420
614
  }
421
615
  else {
422
- setNotification({
423
- type: false,
424
- title: "Import Error",
425
- msg: "No file is selected",
426
- });
616
+ var clonedSelectedObjectData_1 = handleClonedDataAttribute(selectedObjectData, (_b = filterObjectModel === null || filterObjectModel === void 0 ? void 0 : filterObjectModel.objectData) !== null && _b !== void 0 ? _b : []);
617
+ clonedSelectedData[selectedObjectStructureId] = clonedSelectedObjectData_1;
618
+ setSelectedData(clonedSelectedData);
427
619
  }
620
+ handlePopUpModal(false);
428
621
  };
429
- var handleStepCSV = function () { return __awaiter(_this, void 0, void 0, function () {
430
- var csvList_1, _loop_1, _i, _a, _b, eachKey, eachValue, valid_1, errorValue_1, response, err_2;
431
- var _c, _d, _e, _f, _g;
432
- return __generator(this, function (_h) {
433
- switch (_h.label) {
622
+ //TODO: Bug, try to solve clicking List Object too fast
623
+ var handleSelectListObjectData = function (id, structureId) {
624
+ var filterObjectModel = props.model.find(function (eachModel) {
625
+ return eachModel.id === structureId;
626
+ });
627
+ if ((filterObjectModel === null || filterObjectModel === void 0 ? void 0 : filterObjectModel.type) === "listObject") {
628
+ var selectedObjectListData = selectedData[structureId].find(function (eachData) { return eachData.id === id; });
629
+ setSelectedObjectId(id);
630
+ setSelectedObjectStructureId(structureId);
631
+ setSelectedObjectData(selectedObjectListData);
632
+ setModalVisible(true);
633
+ }
634
+ };
635
+ //=====================================================================================
636
+ //SECTION: Handle Assets
637
+ //=====================================================================================
638
+ var handleUploadAxios = function (eachImageEndpoint, assetParentId, assetCollectionName, assetFileName, file) { return __awaiter(_this, void 0, void 0, function () {
639
+ var responseData, err_3;
640
+ var _a, _b;
641
+ return __generator(this, function (_c) {
642
+ switch (_c.label) {
434
643
  case 0:
435
- _h.trys.push([0, 6, , 7]);
436
- if (!(stepCSVIndex === 0)) return [3 /*break*/, 1];
437
- if (csvFileData.length > 0 && csvFile)
438
- setStepCSVIndex(stepCSVIndex + 1);
439
- else
440
- throw new Error("Please upload a .CSV file");
441
- return [3 /*break*/, 5];
644
+ _c.trys.push([0, 2, , 3]);
645
+ return [4 /*yield*/, ((_a = props.lib) === null || _a === void 0 ? void 0 : _a.axios.post((_b = eachImageEndpoint + "/upload") !== null && _b !== void 0 ? _b : "", {
646
+ file: file,
647
+ data: {
648
+ assetParentId: assetParentId,
649
+ assetCollectionName: assetCollectionName,
650
+ assetFileName: assetFileName,
651
+ },
652
+ }, {
653
+ headers: {
654
+ "Content-Type": "multipart/form-data",
655
+ },
656
+ }))];
442
657
  case 1:
443
- if (!(stepCSVIndex === 1)) return [3 /*break*/, 3];
444
- csvList_1 = [];
445
- _loop_1 = function (eachKey, eachValue) {
446
- if (eachKey && eachValue && typeof eachValue === "string") {
447
- var selectedModel = props.model.find(function (eachModel) {
448
- return eachModel.id === eachValue;
449
- });
450
- if ((selectedModel === null || selectedModel === void 0 ? void 0 : selectedModel.type) === "object" ||
451
- (selectedModel === null || selectedModel === void 0 ? void 0 : selectedModel.type) === "listObject") {
452
- var selectedObjectModel = (_c = selectedModel === null || selectedModel === void 0 ? void 0 : selectedModel.objectData) === null || _c === void 0 ? void 0 : _c.find(function (eachModel) {
453
- return eachModel.id === eachValue;
454
- });
455
- csvList_1.push({
456
- id: (_d = listCSVObjAttribute[eachKey]) !== null && _d !== void 0 ? _d : "",
457
- ori: Number(eachKey),
458
- type: "object",
459
- objectId: eachValue,
460
- objectValueType: (_e = selectedObjectModel === null || selectedObjectModel === void 0 ? void 0 : selectedObjectModel.type) !== null && _e !== void 0 ? _e : "string",
461
- });
462
- }
463
- else if ((selectedModel === null || selectedModel === void 0 ? void 0 : selectedModel.type) === "image") {
464
- csvList_1.push({
465
- id: eachValue !== null && eachValue !== void 0 ? eachValue : "",
466
- ori: Number(eachKey),
467
- type: "image",
468
- imageCollectionName: selectedModel.imageCollectionName,
469
- imageFileName: selectedModel.imageFileName,
470
- imageEndpoint: selectedModel.imageEndpoint,
471
- });
472
- }
473
- else {
474
- csvList_1.push({
475
- id: eachValue !== null && eachValue !== void 0 ? eachValue : "",
476
- ori: Number(eachKey),
477
- type: (_f = selectedModel === null || selectedModel === void 0 ? void 0 : selectedModel.type) !== null && _f !== void 0 ? _f : "string",
478
- });
479
- }
480
- }
481
- };
482
- for (_i = 0, _a = Object.entries(listCSVMapAttribute); _i < _a.length; _i++) {
483
- _b = _a[_i], eachKey = _b[0], eachValue = _b[1];
484
- _loop_1(eachKey, eachValue);
485
- }
486
- valid_1 = true;
487
- errorValue_1 = "";
488
- return [4 /*yield*/, Promise.all(props.model.map(function (eachEachModel) {
489
- if (eachEachModel.id === "_id" || eachEachModel.id === "id") {
490
- return "";
491
- }
492
- if (!eachEachModel.optional) {
493
- // INFO : Validate and compare the modal with csv list and return true if > 1 consist within
494
- var innearValidation = csvList_1.some(function (eachCsvList) {
495
- if (eachCsvList.type === "object" ||
496
- eachCsvList.type === "listObject") {
497
- return eachEachModel.id === eachCsvList.objectId;
498
- }
499
- else {
500
- return eachEachModel.id === eachCsvList.id;
501
- }
502
- });
503
- if (!innearValidation) {
504
- errorValue_1 = errorValue_1 + "<" + eachEachModel.id + ">";
505
- valid_1 = false;
506
- }
507
- }
508
- return null;
509
- }))];
658
+ responseData = _c.sent();
659
+ return [2 /*return*/, responseData];
510
660
  case 2:
511
- _h.sent();
512
- if (!valid_1) {
513
- throw new Error("Please select how you want to map your data to ".concat(errorValue_1));
514
- }
515
- else {
516
- setCSVAPIAttribute(csvList_1);
517
- setStepCSVIndex(stepCSVIndex + 1);
518
- }
519
- return [3 /*break*/, 5];
520
- case 3:
521
- if (!(stepCSVIndex === 2)) return [3 /*break*/, 5];
522
- // INFO - Call Space Excel API
523
- setLoading(true);
524
- return [4 /*yield*/, ((_g = props.lib) === null || _g === void 0 ? void 0 : _g.axios.post("".concat(props.schemaEndpoint, "/csv/import"), {
525
- data: {
526
- parsedDataStructure: csvAPIAttribute,
527
- spaceId: props.collectionId,
528
- },
529
- file: csvFile,
530
- }, {
531
- headers: {
532
- "Content-Type": "multipart/form-data",
533
- },
534
- }))];
535
- case 4:
536
- response = _h.sent();
537
- setLoading(false);
538
- if (response.data) {
539
- setNotification({
540
- type: true,
541
- title: "Data has been imported successfully",
542
- msg: response.data.msg,
543
- });
544
- handlePopUpModal(false);
545
- setTimeout(function () {
546
- window.location.reload();
547
- }, 1500);
548
- }
549
- _h.label = 5;
550
- case 5: return [3 /*break*/, 7];
551
- case 6:
552
- err_2 = _h.sent();
553
- setNotification({
554
- type: false,
555
- title: "Import Error",
556
- msg: err_2.message,
557
- });
558
- return [3 /*break*/, 7];
559
- case 7: return [2 /*return*/];
661
+ err_3 = _c.sent();
662
+ return [3 /*break*/, 3];
663
+ case 3: return [2 /*return*/];
560
664
  }
561
665
  });
562
666
  }); };
563
- var handleQueryModal = function () {
564
- setQueryModal(!queryModal);
565
- setQueryInput({
566
- queryId: "",
567
- type: "=",
568
- value: "",
569
- });
570
- setExportReferenceList([]);
571
- setExportReferenceSearch("");
572
- };
573
- var handleCloneQueryList = function () {
574
- var _a;
575
- var clonedQueryInput = (_a = JSON.parse(JSON.stringify(queryList))) !== null && _a !== void 0 ? _a : [];
576
- clonedQueryInput.map(function (eachQuery) {
577
- var tempValue = eachQuery.value;
578
- if (tempValue === "false" || tempValue === "true") {
579
- tempValue = tempValue === "false" ? false : true;
580
- }
581
- else if (!isNaN(tempValue)) {
582
- tempValue = Number(tempValue);
583
- }
584
- eachQuery.value = tempValue;
585
- return null;
586
- });
587
- return clonedQueryInput;
588
- };
589
- var handlePushQueryList = function () {
590
- var tempQueryList = handleCloneQueryList();
591
- if (!tempQueryList.some(function (eachQuery) { return eachQuery.queryId === queryInput.queryId; })) {
592
- var tempValue = queryInput.value;
593
- if (tempValue === "false" || tempValue === "true") {
594
- tempValue = tempValue === "false" ? false : true;
595
- }
596
- else if (!isNaN(tempValue)) {
597
- tempValue = Number(tempValue);
598
- }
599
- queryInput.value = tempValue;
600
- tempQueryList.push(queryInput);
601
- setQueryModal(!queryModal);
602
- setQueryList(tempQueryList);
603
- setQueryInput({
604
- queryId: "",
605
- type: "=",
606
- value: "",
607
- });
608
- }
609
- else {
610
- // NOTIFICATION - CONISTS
611
- setNotification({
612
- type: false,
613
- title: "Export Failed",
614
- msg: "Please check again your query attribute.",
615
- });
616
- }
617
- };
618
- var handleViewQuery = function (index) {
619
- handleQueryModal();
620
- setQueryInput(queryList[index]);
621
- };
622
- var handleSortQuery = function (index, sortType) {
623
- var _a;
624
- var sortList = JSON.parse(JSON.stringify(queryList));
625
- var ascIndex = sortType === "up" ? index - 1 : index + 1;
626
- _a = [
627
- sortList[ascIndex],
628
- sortList[index],
629
- ], sortList[index] = _a[0], sortList[ascIndex] = _a[1];
630
- setQueryList(sortList);
631
- };
632
- //Section - Update
633
- var handleRetrieveSelectedData = function (responseData) { return __awaiter(_this, void 0, void 0, function () {
634
- var dummyRespData, dummyReferenceModelSchema, newRespData, _a;
635
- var _b, _c, _d;
636
- return __generator(this, function (_e) {
637
- switch (_e.label) {
638
- case 0:
639
- if (!responseData.data) return [3 /*break*/, 4];
640
- dummyRespData = JSON.parse(JSON.stringify(responseData.data), utils_2.jsonReviver);
641
- dummyReferenceModelSchema = JSON.parse(JSON.stringify(referenceModelSchema));
642
- if (!(props.type === "read")) return [3 /*break*/, 2];
643
- return [4 /*yield*/, (0, utils_2.handleRetrieveDeepModel)(dummyRespData, (_b = props.model) !== null && _b !== void 0 ? _b : [], dbModule, props.server, props.dbEndpoint, props.schemaEndpoint, (_c = props.imageEndpoint) !== null && _c !== void 0 ? _c : "", (_d = props.id) !== null && _d !== void 0 ? _d : "", dummyReferenceModelSchema, setReferenceSchema)];
667
+ var handleUploadObjectImage = function (id) { return __awaiter(_this, void 0, void 0, function () {
668
+ var clonedSelectedData, uploadObjectAttribute, objectAttribute, _loop_1, _i, _a, _b, eachKey, eachValue;
669
+ var _this = this;
670
+ return __generator(this, function (_c) {
671
+ switch (_c.label) {
672
+ case 0: return [4 /*yield*/, handleUploadListObjectImage(id)];
644
673
  case 1:
645
- _a = _e.sent();
646
- return [3 /*break*/, 3];
674
+ clonedSelectedData = _c.sent();
675
+ uploadObjectAttribute = {};
676
+ objectAttribute = props.model.filter(function (eachAttribute) {
677
+ return eachAttribute.type === "object";
678
+ });
679
+ if (!(objectAttribute.length > 0)) return [3 /*break*/, 5];
680
+ objectAttribute.map(function (eachObject) {
681
+ var _a;
682
+ var filterImageObjectData = (_a = eachObject.objectData) === null || _a === void 0 ? void 0 : _a.filter(function (eachAttribute) {
683
+ return (eachAttribute.type === "image" || eachAttribute.type === "file");
684
+ });
685
+ uploadObjectAttribute[eachObject.id] = filterImageObjectData;
686
+ return null;
687
+ });
688
+ _loop_1 = function (eachKey, eachValue) {
689
+ return __generator(this, function (_d) {
690
+ switch (_d.label) {
691
+ case 0:
692
+ if (!Array.isArray(eachValue)) return [3 /*break*/, 2];
693
+ return [4 /*yield*/, Promise.all(eachValue.map(function (eachImage) { return __awaiter(_this, void 0, void 0, function () {
694
+ var responseData;
695
+ var _a, _b;
696
+ return __generator(this, function (_c) {
697
+ switch (_c.label) {
698
+ case 0:
699
+ if (!(typeof selectedData[eachKey][eachImage.id] === "string")) return [3 /*break*/, 1];
700
+ return [2 /*return*/];
701
+ case 1:
702
+ if (!(selectedData[eachKey][eachImage.id] instanceof File)) return [3 /*break*/, 3];
703
+ return [4 /*yield*/, handleUploadAxios((_a = eachImage.imageEndpoint) !== null && _a !== void 0 ? _a : "", eachKey, eachImage.imageCollectionName + "/" + id, (_b = eachImage.imageFileName) !== null && _b !== void 0 ? _b : "", selectedData[eachKey][eachImage.id])];
704
+ case 2:
705
+ responseData = _c.sent();
706
+ if (responseData.data) {
707
+ clonedSelectedData[eachKey][eachImage.id] =
708
+ responseData.data.data;
709
+ }
710
+ _c.label = 3;
711
+ case 3: return [2 /*return*/, null];
712
+ }
713
+ });
714
+ }); }))];
715
+ case 1:
716
+ _d.sent();
717
+ _d.label = 2;
718
+ case 2: return [2 /*return*/];
719
+ }
720
+ });
721
+ };
722
+ _i = 0, _a = Object.entries(uploadObjectAttribute);
723
+ _c.label = 2;
647
724
  case 2:
648
- _a = dummyRespData;
649
- _e.label = 3;
725
+ if (!(_i < _a.length)) return [3 /*break*/, 5];
726
+ _b = _a[_i], eachKey = _b[0], eachValue = _b[1];
727
+ return [5 /*yield**/, _loop_1(eachKey, eachValue)];
650
728
  case 3:
651
- newRespData = _a;
652
- setSelectedData(newRespData);
653
- _e.label = 4;
729
+ _c.sent();
730
+ _c.label = 4;
654
731
  case 4:
655
- setModalVisible(false);
656
- setLoading(false);
657
- return [2 /*return*/];
658
- }
659
- });
660
- }); };
661
- var handleClonedDataAttribute = function (selectedData, model, force, isRemainId) {
662
- var defaultValue = selectedData;
663
- var clonedSelectedData = JSON.parse(JSON.stringify(selectedData));
664
- model.map(function (eachAttribute) {
665
- var _a, _b;
666
- if (eachAttribute.id === "_id" || eachAttribute.id === "id") {
667
- return null;
668
- }
669
- switch (eachAttribute.type) {
670
- case "date":
671
- if (defaultValue[eachAttribute.id]) {
672
- clonedSelectedData[eachAttribute.id] = (0, moment_1.default)(defaultValue[eachAttribute.id]).toDate();
673
- }
674
- break;
675
- case "boolean":
676
- //INFO : Force is only called during submission, some casting may affect UI
677
- if (force) {
678
- if (defaultValue[eachAttribute.id] === "true") {
679
- clonedSelectedData[eachAttribute.id] = true;
680
- }
681
- else if (defaultValue[eachAttribute.id] === "false") {
682
- clonedSelectedData[eachAttribute.id] = false;
683
- }
684
- }
685
- break;
686
- case "listObject":
687
- clonedSelectedData[eachAttribute.id] =
688
- (_a = defaultValue[eachAttribute.id]) !== null && _a !== void 0 ? _a : [];
689
- break;
690
- case "object":
691
- if (force)
692
- clonedSelectedData[eachAttribute.id] =
693
- (_b = defaultValue[eachAttribute.id]) !== null && _b !== void 0 ? _b : {};
694
- else
695
- clonedSelectedData[eachAttribute.id] =
696
- defaultValue[eachAttribute.id];
697
- break;
698
- case "image":
699
- case "file":
700
- clonedSelectedData[eachAttribute.id] = defaultValue[eachAttribute.id];
701
- break;
702
- case "number":
703
- if (defaultValue[eachAttribute.id]) {
704
- clonedSelectedData[eachAttribute.id] = Number(defaultValue[eachAttribute.id]);
705
- }
706
- break;
707
- }
708
- return null;
709
- });
710
- if (!isRemainId) {
711
- delete clonedSelectedData["id"];
712
- delete clonedSelectedData["_id"];
713
- }
714
- return clonedSelectedData;
715
- };
716
- var handleOnChangeData = function () {
717
- var _a;
718
- if (modalVisible && selectedObjectStructureId) {
719
- var filterObjectModel = props.model.find(function (eachModel) {
720
- return eachModel.id === selectedObjectStructureId;
721
- });
722
- return {
723
- data: selectedObjectData,
724
- model: (_a = filterObjectModel === null || filterObjectModel === void 0 ? void 0 : filterObjectModel.objectData) !== null && _a !== void 0 ? _a : [],
725
- };
726
- }
727
- else {
728
- return {
729
- data: selectedData,
730
- model: props.model,
731
- };
732
- }
733
- };
734
- var handleUpdateChangeData = function (data) {
735
- if (modalVisible && selectedObjectStructureId) {
736
- setSelectedObjectData(data);
737
- }
738
- else {
739
- setSelectedData(data);
740
- }
741
- };
742
- var handleOnChangeFile = function (e) {
743
- var _a = handleOnChangeData(), data = _a.data, model = _a.model;
744
- var clonedData = handleClonedDataAttribute(data, model);
745
- clonedData[e.target.id] =
746
- e.target.files.length > 0 ? e.target.files[0] : undefined;
747
- handleUpdateChangeData(clonedData);
748
- };
749
- var handleOnChangeAddress = function (id, address) {
750
- var _a = handleOnChangeData(), data = _a.data, model = _a.model;
751
- var clonedData = handleClonedDataAttribute(data, model);
752
- clonedData[id] = address;
753
- handleUpdateChangeData(clonedData);
754
- };
755
- var handleOnChangeText = function (e) {
756
- var _a = handleOnChangeData(), data = _a.data, model = _a.model;
757
- var clonedData = handleClonedDataAttribute(data, model);
758
- clonedData[e.target.id] = e.target.value;
759
- handleUpdateChangeData(clonedData);
760
- };
761
- var handleOnChangeSelect = function (id, value) {
762
- var _a = handleOnChangeData(), data = _a.data, model = _a.model;
763
- var clonedData = handleClonedDataAttribute(data, model);
764
- clonedData[id] = value;
765
- handleUpdateChangeData(clonedData);
766
- };
767
- var handleOnChangeDate = function (id, value) {
768
- var _a = handleOnChangeData(), data = _a.data, model = _a.model;
769
- var clonedData = handleClonedDataAttribute(data, model);
770
- clonedData[id] = value;
771
- handleUpdateChangeData(clonedData);
772
- };
773
- //SECTION - Reference
774
- var handleSearchReferenceOptions = function (id, searchText) {
775
- var clonedSearchText = JSON.parse(JSON.stringify(referenceSearchText));
776
- clonedSearchText[id] = searchText;
777
- setReferenceSearchText(clonedSearchText);
778
- };
779
- var handleGetReferenceOptions = function (dataList, dataStructure, label, currentData) { return __awaiter(_this, void 0, void 0, function () {
780
- var optionList_1, clonedReferrenceOptions, referenceRQ, res, err_3;
781
- var _a;
782
- return __generator(this, function (_b) {
783
- switch (_b.label) {
784
- case 0:
785
- _b.trys.push([0, 3, , 4]);
786
- optionList_1 = [];
787
- clonedReferrenceOptions = JSON.parse(JSON.stringify(referenceOptions));
788
- dataList.data.map(function (eachData) {
789
- var _a;
790
- var eachDataJSON = JSON.parse(JSON.stringify(eachData));
791
- optionList_1.push({
792
- key: eachData._id,
793
- label: (_a = eachDataJSON[label]) !== null && _a !== void 0 ? _a : eachData._id,
794
- });
795
- return null;
796
- });
797
- if (!currentData) return [3 /*break*/, 2];
798
- referenceRQ = new readQuery_1.ReadQuery(dbModule, props.server, (_a = dataStructure.referenceSpaceId) !== null && _a !== void 0 ? _a : "", props.dbEndpoint);
799
- return [4 /*yield*/, referenceRQ.call({
800
- type: "list",
801
- query: [
802
- {
803
- type: "in",
804
- queryId: props.server === "mongoServer" ? "_id" : "id",
805
- value: Array.isArray(currentData) ? currentData : [currentData],
806
- },
807
- ],
808
- })];
809
- case 1:
810
- res = _b.sent();
811
- if (res === null || res === void 0 ? void 0 : res.data) {
812
- res.data.map(function (eachData) {
813
- var _a;
814
- var id = props.server === "mongoServer" ? eachData._id : eachData.id;
815
- var eachDataJSON = JSON.parse(JSON.stringify(eachData));
816
- if (!optionList_1.some(function (eachData) { return eachData.key === id; })) {
817
- optionList_1.push({
818
- key: eachData._id,
819
- label: (_a = eachDataJSON[label]) !== null && _a !== void 0 ? _a : eachData._id,
820
- });
821
- }
822
- return null;
823
- });
824
- }
825
- _b.label = 2;
826
- case 2:
827
- clonedReferrenceOptions[dataStructure.id] = optionList_1;
828
- setReferenceOptions(clonedReferrenceOptions);
829
- return [3 /*break*/, 4];
830
- case 3:
831
- err_3 = _b.sent();
832
- return [3 /*break*/, 4];
833
- case 4: return [2 /*return*/];
834
- }
835
- });
836
- }); };
837
- //SECTION - Assets
838
- var handleUploadAxios = function (eachImageEndpoint, assetParentId, assetCollectionName, assetFileName, file) { return __awaiter(_this, void 0, void 0, function () {
839
- var responseData, err_4;
840
- var _a, _b;
841
- return __generator(this, function (_c) {
842
- switch (_c.label) {
843
- case 0:
844
- _c.trys.push([0, 2, , 3]);
845
- return [4 /*yield*/, ((_a = props.lib) === null || _a === void 0 ? void 0 : _a.axios.post((_b = eachImageEndpoint + "/upload") !== null && _b !== void 0 ? _b : "", {
846
- file: file,
847
- data: {
848
- assetParentId: assetParentId,
849
- assetCollectionName: assetCollectionName,
850
- assetFileName: assetFileName,
851
- },
852
- }, {
853
- headers: {
854
- "Content-Type": "multipart/form-data",
855
- },
856
- }))];
857
- case 1:
858
- responseData = _c.sent();
859
- return [2 /*return*/, responseData];
860
- case 2:
861
- err_4 = _c.sent();
862
- return [3 /*break*/, 3];
863
- case 3: return [2 /*return*/];
864
- }
865
- });
866
- }); };
867
- var handleUploadObjectImage = function (id) { return __awaiter(_this, void 0, void 0, function () {
868
- var clonedSelectedData, uploadObjectAttribute, objectAttribute, _loop_2, _i, _a, _b, eachKey, eachValue;
869
- var _this = this;
870
- return __generator(this, function (_c) {
871
- switch (_c.label) {
872
- case 0: return [4 /*yield*/, handleUploadListObjectImage(id)];
873
- case 1:
874
- clonedSelectedData = _c.sent();
875
- uploadObjectAttribute = {};
876
- objectAttribute = props.model.filter(function (eachAttribute) {
877
- return eachAttribute.type === "object";
878
- });
879
- if (!(objectAttribute.length > 0)) return [3 /*break*/, 5];
880
- objectAttribute.map(function (eachObject) {
881
- var _a;
882
- var filterImageObjectData = (_a = eachObject.objectData) === null || _a === void 0 ? void 0 : _a.filter(function (eachAttribute) {
883
- return (eachAttribute.type === "image" || eachAttribute.type === "file");
884
- });
885
- uploadObjectAttribute[eachObject.id] = filterImageObjectData;
886
- return null;
887
- });
888
- _loop_2 = function (eachKey, eachValue) {
889
- return __generator(this, function (_d) {
890
- switch (_d.label) {
891
- case 0:
892
- if (!Array.isArray(eachValue)) return [3 /*break*/, 2];
893
- return [4 /*yield*/, Promise.all(eachValue.map(function (eachImage) { return __awaiter(_this, void 0, void 0, function () {
894
- var responseData;
895
- var _a, _b;
896
- return __generator(this, function (_c) {
897
- switch (_c.label) {
898
- case 0:
899
- if (!(typeof selectedData[eachKey][eachImage.id] === "string")) return [3 /*break*/, 1];
900
- return [2 /*return*/];
901
- case 1:
902
- if (!(selectedData[eachKey][eachImage.id] instanceof File)) return [3 /*break*/, 3];
903
- return [4 /*yield*/, handleUploadAxios((_a = eachImage.imageEndpoint) !== null && _a !== void 0 ? _a : "", eachKey, eachImage.imageCollectionName + "/" + id, (_b = eachImage.imageFileName) !== null && _b !== void 0 ? _b : "", selectedData[eachKey][eachImage.id])];
904
- case 2:
905
- responseData = _c.sent();
906
- if (responseData.data) {
907
- clonedSelectedData[eachKey][eachImage.id] =
908
- responseData.data.data;
909
- }
910
- _c.label = 3;
911
- case 3: return [2 /*return*/, null];
912
- }
913
- });
914
- }); }))];
915
- case 1:
916
- _d.sent();
917
- _d.label = 2;
918
- case 2: return [2 /*return*/];
919
- }
920
- });
921
- };
922
- _i = 0, _a = Object.entries(uploadObjectAttribute);
923
- _c.label = 2;
924
- case 2:
925
- if (!(_i < _a.length)) return [3 /*break*/, 5];
926
- _b = _a[_i], eachKey = _b[0], eachValue = _b[1];
927
- return [5 /*yield**/, _loop_2(eachKey, eachValue)];
928
- case 3:
929
- _c.sent();
930
- _c.label = 4;
931
- case 4:
932
- _i++;
933
- return [3 /*break*/, 2];
934
- case 5: return [2 /*return*/, clonedSelectedData];
732
+ _i++;
733
+ return [3 /*break*/, 2];
734
+ case 5: return [2 /*return*/, clonedSelectedData];
935
735
  }
936
736
  });
937
737
  }); };
938
738
  var handleUploadListObjectImage = function (id) { return __awaiter(_this, void 0, void 0, function () {
939
- var clonedSelectedData, uploadObjectAttribute, objectAttribute, _loop_3, _i, _a, _b, eachKey, eachValue;
739
+ var clonedSelectedData, uploadObjectAttribute, objectAttribute, _loop_2, _i, _a, _b, eachKey, eachValue;
940
740
  var _this = this;
941
741
  return __generator(this, function (_c) {
942
742
  switch (_c.label) {
@@ -955,7 +755,7 @@ function DataTemplate(props) {
955
755
  uploadObjectAttribute[eachObject.id] = filterImageObjectData;
956
756
  return null;
957
757
  });
958
- _loop_3 = function (eachKey, eachValue) {
758
+ _loop_2 = function (eachKey, eachValue) {
959
759
  return __generator(this, function (_d) {
960
760
  switch (_d.label) {
961
761
  case 0:
@@ -1014,7 +814,7 @@ function DataTemplate(props) {
1014
814
  case 1:
1015
815
  if (!(_i < _a.length)) return [3 /*break*/, 4];
1016
816
  _b = _a[_i], eachKey = _b[0], eachValue = _b[1];
1017
- return [5 /*yield**/, _loop_3(eachKey, eachValue)];
817
+ return [5 /*yield**/, _loop_2(eachKey, eachValue)];
1018
818
  case 2:
1019
819
  _c.sent();
1020
820
  _c.label = 3;
@@ -1064,7 +864,7 @@ function DataTemplate(props) {
1064
864
  });
1065
865
  }); };
1066
866
  var handleRemoveImageAxios = function (imageEndpoint, assetParentId, assetCollectionName, assetFileName) { return __awaiter(_this, void 0, void 0, function () {
1067
- var err_5;
867
+ var err_4;
1068
868
  var _a, _b;
1069
869
  return __generator(this, function (_c) {
1070
870
  switch (_c.label) {
@@ -1085,7 +885,7 @@ function DataTemplate(props) {
1085
885
  _c.sent();
1086
886
  return [3 /*break*/, 3];
1087
887
  case 2:
1088
- err_5 = _c.sent();
888
+ err_4 = _c.sent();
1089
889
  return [3 /*break*/, 3];
1090
890
  case 3: return [2 /*return*/];
1091
891
  }
@@ -1118,7 +918,7 @@ function DataTemplate(props) {
1118
918
  });
1119
919
  }); };
1120
920
  var handleRemoveObjectImage = function () { return __awaiter(_this, void 0, void 0, function () {
1121
- var uploadObjectAttribute, objectAttribute, _loop_4, _i, _a, _b, eachKey, eachValue;
921
+ var uploadObjectAttribute, objectAttribute, _loop_3, _i, _a, _b, eachKey, eachValue;
1122
922
  var _this = this;
1123
923
  return __generator(this, function (_c) {
1124
924
  switch (_c.label) {
@@ -1136,7 +936,7 @@ function DataTemplate(props) {
1136
936
  uploadObjectAttribute[eachObject.id] = filterImageObjectData;
1137
937
  return null;
1138
938
  });
1139
- _loop_4 = function (eachKey, eachValue) {
939
+ _loop_3 = function (eachKey, eachValue) {
1140
940
  return __generator(this, function (_d) {
1141
941
  switch (_d.label) {
1142
942
  case 0:
@@ -1164,7 +964,7 @@ function DataTemplate(props) {
1164
964
  case 1:
1165
965
  if (!(_i < _a.length)) return [3 /*break*/, 4];
1166
966
  _b = _a[_i], eachKey = _b[0], eachValue = _b[1];
1167
- return [5 /*yield**/, _loop_4(eachKey, eachValue)];
967
+ return [5 /*yield**/, _loop_3(eachKey, eachValue)];
1168
968
  case 2:
1169
969
  _c.sent();
1170
970
  _c.label = 3;
@@ -1175,80 +975,11 @@ function DataTemplate(props) {
1175
975
  }
1176
976
  });
1177
977
  }); };
1178
- //SECTION - Object
1179
- // TODO - Remove Root Folder of the Object List Image
1180
- var handleRemoveObjectListData = function () {
1181
- var clonedSelectedData = handleClonedDataAttribute(selectedData, props.model);
1182
- if (selectedObjectId) {
1183
- var index = clonedSelectedData[selectedObjectStructureId].findIndex(function (eachData) { return eachData.id === selectedObjectId; });
1184
- if (index !== -1) {
1185
- clonedSelectedData[selectedObjectStructureId].splice(index, 1);
1186
- }
1187
- setSelectedObjectId("");
1188
- setSelectedData(clonedSelectedData);
1189
- handlePopUpModal(false);
1190
- }
1191
- };
1192
- var handleSubmitObjectDataType = function () {
1193
- var _a, _b;
1194
- var clonedSelectedData = handleClonedDataAttribute(selectedData, props.model);
1195
- var filterObjectModel = props.model.find(function (eachModel) {
1196
- return eachModel.id === selectedObjectStructureId;
1197
- });
1198
- var clonedSelectedObjectData = handleClonedDataAttribute(selectedObjectData, (_a = filterObjectModel === null || filterObjectModel === void 0 ? void 0 : filterObjectModel.objectData) !== null && _a !== void 0 ? _a : [], true, true);
1199
- if (!clonedSelectedObjectData["id"]) {
1200
- clonedSelectedObjectData["id"] = (0, uuid_1.v4)();
1201
- }
1202
- if ((filterObjectModel === null || filterObjectModel === void 0 ? void 0 : filterObjectModel.type) === "listObject") {
1203
- if (selectedObjectId) {
1204
- var index = clonedSelectedData[selectedObjectStructureId].findIndex(function (eachData) { return eachData.id === selectedObjectId; });
1205
- if (index !== -1) {
1206
- clonedSelectedData[selectedObjectStructureId][index] =
1207
- clonedSelectedObjectData;
1208
- }
1209
- setSelectedObjectId("");
1210
- setSelectedData(clonedSelectedData);
1211
- }
1212
- else {
1213
- if (Array.isArray(clonedSelectedData[selectedObjectStructureId])) {
1214
- clonedSelectedData[selectedObjectStructureId].push(clonedSelectedObjectData);
1215
- setSelectedData(clonedSelectedData);
1216
- }
1217
- else {
1218
- clonedSelectedData[selectedObjectStructureId] = [
1219
- clonedSelectedObjectData,
1220
- ];
1221
- setSelectedData(clonedSelectedData);
1222
- }
1223
- }
1224
- }
1225
- else {
1226
- var clonedSelectedObjectData_1 = handleClonedDataAttribute(selectedObjectData, (_b = filterObjectModel === null || filterObjectModel === void 0 ? void 0 : filterObjectModel.objectData) !== null && _b !== void 0 ? _b : []);
1227
- clonedSelectedData[selectedObjectStructureId] = clonedSelectedObjectData_1;
1228
- setSelectedData(clonedSelectedData);
1229
- }
1230
- handlePopUpModal(false);
1231
- };
1232
- var handleSelectListObjectData = function (id, structureId) {
1233
- var filterObjectModel = props.model.find(function (eachModel) {
1234
- return eachModel.id === structureId;
1235
- });
1236
- if ((filterObjectModel === null || filterObjectModel === void 0 ? void 0 : filterObjectModel.type) === "listObject") {
1237
- var selectedObjectListData = selectedData[structureId].find(function (eachData) { return eachData.id === id; });
1238
- setSelectedObjectId(id);
1239
- setSelectedObjectStructureId(structureId);
1240
- setSelectedObjectData(selectedObjectListData);
1241
- setModalVisible(true);
1242
- }
1243
- else {
1244
- setSelectedObjectStructureId(structureId);
1245
- setSelectedObjectData(selectedData[structureId]);
1246
- setModalVisible(true);
1247
- }
1248
- };
1249
- //SECTION - CRUD
978
+ //=====================================================================================
979
+ //SECTION: Handle CRUD
980
+ //=====================================================================================
1250
981
  var handleRemoveSelectedData = function () { return __awaiter(_this, void 0, void 0, function () {
1251
- var selectedId, res, err_6;
982
+ var selectedId, res, err_5;
1252
983
  return __generator(this, function (_a) {
1253
984
  switch (_a.label) {
1254
985
  case 0:
@@ -1256,7 +987,7 @@ function DataTemplate(props) {
1256
987
  selectedId = props.id;
1257
988
  if (!selectedId) return [3 /*break*/, 4];
1258
989
  setLoading(true);
1259
- setModalVisible(true);
990
+ setDeleteModal(true);
1260
991
  return [4 /*yield*/, handleRemoveImage()];
1261
992
  case 1:
1262
993
  _a.sent();
@@ -1274,8 +1005,8 @@ function DataTemplate(props) {
1274
1005
  _a.label = 4;
1275
1006
  case 4: return [3 /*break*/, 6];
1276
1007
  case 5:
1277
- err_6 = _a.sent();
1278
- setModalVisible(false);
1008
+ err_5 = _a.sent();
1009
+ setDeleteModal(false);
1279
1010
  setLoading(false);
1280
1011
  return [3 /*break*/, 6];
1281
1012
  case 6: return [2 /*return*/];
@@ -1283,7 +1014,7 @@ function DataTemplate(props) {
1283
1014
  });
1284
1015
  }); };
1285
1016
  var handleSubmit = function () { return __awaiter(_this, void 0, void 0, function () {
1286
- var selectedId, id, createSelectedData, res, err_7;
1017
+ var selectedId, id, createSelectedData, res, err_6;
1287
1018
  var _a;
1288
1019
  return __generator(this, function (_b) {
1289
1020
  switch (_b.label) {
@@ -1298,12 +1029,7 @@ function DataTemplate(props) {
1298
1029
  createSelectedData = _b.sent();
1299
1030
  res = "";
1300
1031
  if (!(selectedId === "new")) return [3 /*break*/, 3];
1301
- if (props.server === "mongoServer") {
1302
- createSelectedData["_id"] = id;
1303
- }
1304
- else {
1305
- createSelectedData["id"] = id;
1306
- }
1032
+ createSelectedData[serverId] = id;
1307
1033
  return [4 /*yield*/, writeServerQuery.call("create", {
1308
1034
  data: createSelectedData,
1309
1035
  })];
@@ -1332,7 +1058,7 @@ function DataTemplate(props) {
1332
1058
  }
1333
1059
  return [3 /*break*/, 7];
1334
1060
  case 6:
1335
- err_7 = _b.sent();
1061
+ err_6 = _b.sent();
1336
1062
  setModalVisible(false);
1337
1063
  setLoading(false);
1338
1064
  return [3 /*break*/, 7];
@@ -1340,390 +1066,454 @@ function DataTemplate(props) {
1340
1066
  }
1341
1067
  });
1342
1068
  }); };
1343
- //SECTION - Utils
1344
- var handlePopUpModal = function (modalVisible) {
1345
- setModalVisible(modalVisible);
1346
- if (!modalVisible) {
1347
- setTimeout(function () {
1348
- setExcelModal(false);
1349
- setExportExcel(false);
1350
- setSelectedObjectStructureId("");
1351
- setSelectedObjectData({});
1352
- setStepCSVIndex(0);
1353
- setCSVFile(null);
1354
- setCSVFileData([]);
1355
- setListCSVMapAttribute({});
1356
- setListCSVObjAttribute({});
1357
- setCSVAPIAttribute([]);
1358
- setExportLink("");
1359
- setQueryList([]);
1360
- }, 500);
1361
- }
1362
- };
1363
- var handleNavigate = function (link) {
1364
- var _a, _b, _c;
1365
- var href = link !== null && link !== void 0 ? link : "".concat(props.localURLEndpoint, "?type=list&collection=").concat(props.collectionId);
1366
- if ((_a = props.lib) === null || _a === void 0 ? void 0 : _a.navigateNext) {
1367
- props.lib.navigateNext.push(href);
1368
- }
1369
- else if ((_b = props.lib) === null || _b === void 0 ? void 0 : _b.navigate) {
1370
- (_c = props.lib) === null || _c === void 0 ? void 0 : _c.navigate(href);
1371
- }
1372
- else if (window) {
1373
- window.location.replace(href);
1374
- }
1375
- };
1376
- var handleClearDataByFilter = function () {
1377
- setData([]);
1378
- setPageIndex(0);
1379
- setTableLoading(true);
1380
- };
1381
- var handleNameSearch = function (e) {
1382
- setFilterSearch(e.target.value);
1383
- handleClearDataByFilter();
1384
- if (typingTimeout.current) {
1385
- clearTimeout(typingTimeout.current);
1386
- typingTimeout.current = null;
1387
- }
1388
- typingTimeout.current = setTimeout(function () {
1389
- setFilterSearchParams(e.target.value);
1390
- }, 500);
1391
- };
1392
- var renderTableHeader = function () {
1393
- var tableHeader = [];
1394
- props.model.map(function (eachAttribute) {
1395
- if (eachAttribute.id === "baseUpdatedAt" ||
1396
- eachAttribute.type === "listObject" ||
1397
- eachAttribute.hide) {
1069
+ var handleRetrieveSelectedData = function (responseData) { return __awaiter(_this, void 0, void 0, function () {
1070
+ var dummyRespData, dummyReferenceModelSchema, newRespData, _a;
1071
+ var _b, _c, _d;
1072
+ return __generator(this, function (_e) {
1073
+ switch (_e.label) {
1074
+ case 0:
1075
+ if (!responseData.data) return [3 /*break*/, 4];
1076
+ dummyRespData = JSON.parse(JSON.stringify(responseData.data), utils_2.jsonReviver);
1077
+ dummyReferenceModelSchema = JSON.parse(JSON.stringify(referenceModelSchema));
1078
+ if (!(props.type === "read")) return [3 /*break*/, 2];
1079
+ return [4 /*yield*/, (0, utils_2.handleRetrieveDeepModel)(dummyRespData, (_b = props.model) !== null && _b !== void 0 ? _b : [], dbModule, props.server, props.dbEndpoint, props.schemaEndpoint, (_c = props.imageEndpoint) !== null && _c !== void 0 ? _c : "", (_d = props.id) !== null && _d !== void 0 ? _d : "", dummyReferenceModelSchema, setReferenceSchema)];
1080
+ case 1:
1081
+ _a = _e.sent();
1082
+ return [3 /*break*/, 3];
1083
+ case 2:
1084
+ _a = dummyRespData;
1085
+ _e.label = 3;
1086
+ case 3:
1087
+ newRespData = _a;
1088
+ setSelectedData(newRespData);
1089
+ handleRetrieveReferenceOptions(newRespData);
1090
+ _e.label = 4;
1091
+ case 4:
1092
+ setModalVisible(false);
1093
+ setLoading(false);
1094
+ return [2 /*return*/];
1095
+ }
1096
+ });
1097
+ }); };
1098
+ var handleClonedDataAttribute = function (selectedData, model, force, isRemainId) {
1099
+ var defaultValue = selectedData;
1100
+ var clonedSelectedData = JSON.parse(JSON.stringify(selectedData));
1101
+ model.map(function (eachAttribute) {
1102
+ var _a, _b;
1103
+ if (eachAttribute.id === "_id" || eachAttribute.id === "id") {
1398
1104
  return null;
1399
1105
  }
1400
- tableHeader.push({
1401
- key: eachAttribute.id,
1402
- title: eachAttribute.name,
1403
- });
1106
+ switch (eachAttribute.type) {
1107
+ case "date":
1108
+ if (defaultValue[eachAttribute.id]) {
1109
+ clonedSelectedData[eachAttribute.id] = (0, moment_1.default)(defaultValue[eachAttribute.id]).toDate();
1110
+ }
1111
+ break;
1112
+ case "boolean":
1113
+ //INFO : Force is only called during submission, some casting may affect UI
1114
+ if (force) {
1115
+ if (defaultValue[eachAttribute.id] === "true") {
1116
+ clonedSelectedData[eachAttribute.id] = true;
1117
+ }
1118
+ else if (defaultValue[eachAttribute.id] === "false") {
1119
+ clonedSelectedData[eachAttribute.id] = false;
1120
+ }
1121
+ }
1122
+ break;
1123
+ case "listObject":
1124
+ clonedSelectedData[eachAttribute.id] =
1125
+ (_a = defaultValue[eachAttribute.id]) !== null && _a !== void 0 ? _a : [];
1126
+ break;
1127
+ case "object":
1128
+ if (force)
1129
+ clonedSelectedData[eachAttribute.id] =
1130
+ (_b = defaultValue[eachAttribute.id]) !== null && _b !== void 0 ? _b : {};
1131
+ else
1132
+ clonedSelectedData[eachAttribute.id] =
1133
+ defaultValue[eachAttribute.id];
1134
+ break;
1135
+ case "image":
1136
+ case "file":
1137
+ clonedSelectedData[eachAttribute.id] = defaultValue[eachAttribute.id];
1138
+ break;
1139
+ case "number":
1140
+ if (defaultValue[eachAttribute.id]) {
1141
+ clonedSelectedData[eachAttribute.id] = Number(defaultValue[eachAttribute.id]);
1142
+ }
1143
+ break;
1144
+ }
1404
1145
  return null;
1405
1146
  });
1406
- tableHeader.push({
1407
- key: "update",
1408
- title: "Update",
1409
- });
1410
- return tableHeader;
1147
+ if (!isRemainId) {
1148
+ delete clonedSelectedData["id"];
1149
+ delete clonedSelectedData["_id"];
1150
+ }
1151
+ return clonedSelectedData;
1411
1152
  };
1412
- var renderCursor = function () {
1413
- if (props.server === "mongoServer") {
1414
- return pageIndex === 0 ? undefined : pageIndex * limit;
1153
+ var handleOnChangeData = function () {
1154
+ var _a;
1155
+ if (modalVisible && selectedObjectStructureId) {
1156
+ var filterObjectModel = props.model.find(function (eachModel) {
1157
+ return eachModel.id === selectedObjectStructureId;
1158
+ });
1159
+ return {
1160
+ data: selectedObjectData,
1161
+ model: (_a = filterObjectModel === null || filterObjectModel === void 0 ? void 0 : filterObjectModel.objectData) !== null && _a !== void 0 ? _a : [],
1162
+ };
1415
1163
  }
1416
1164
  else {
1417
- return lastCursor ? undefined : lastCursor;
1165
+ return {
1166
+ data: selectedData,
1167
+ model: props.model,
1168
+ };
1418
1169
  }
1419
1170
  };
1420
- var renderObjectTags = function (id) {
1421
- return Object.keys(selectedData[id]).map(function (eachKeys) {
1422
- return (react_1.default.createElement("div", { key: eachKeys, className: "bg-primary-600 text-white rounded m-0.5" },
1423
- react_1.default.createElement("p", { className: "text-xs px-2 py-1 text-wrap" }, eachKeys)));
1424
- });
1171
+ var handleUpdateChangeData = function (data) {
1172
+ if (modalVisible && selectedObjectStructureId) {
1173
+ setSelectedObjectData(data);
1174
+ }
1175
+ else {
1176
+ setSelectedData(data);
1177
+ }
1425
1178
  };
1426
- var renderDataTemplateForm = function (data, model, formInputRef, isObject, isObjectList) {
1427
- var inputList = [];
1428
- //INFO : filteredModel is to secure the formInputRef[index] will not have any issue
1429
- var filteredModel = model.filter(function (eachAttribute) {
1430
- //INFO - Default Model Contain Id While Object Type Don't have
1431
- return eachAttribute.id !== "_id" && eachAttribute.id !== "id";
1432
- });
1433
- filteredModel.map(function (eachAttribute, index) {
1434
- //INFO - Default Model Contain Id While Object Type Don't have
1435
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
1436
- var clonedSelectedData = handleClonedDataAttribute(data, model);
1437
- var clonedReferenceOptions = JSON.parse(JSON.stringify(referenceOptions));
1438
- var clonedReferenceSearchText = JSON.parse(JSON.stringify(referenceSearchText));
1439
- var label = eachAttribute.name + (!eachAttribute.optional ? " (*)" : "");
1440
- var disabled = props.type === "read"
1441
- ? true
1442
- : props.type === "update" && props.id === "new"
1443
- ? false
1444
- : eachAttribute.disabled;
1445
- switch (eachAttribute.type) {
1446
- case "address":
1447
- inputList.push(react_1.default.createElement(address_1.Address, { id: eachAttribute.id, label: label, value: (_a = clonedSelectedData[eachAttribute.id]) !== null && _a !== void 0 ? _a : {
1448
- lat: 0,
1449
- lng: 0,
1450
- name: "",
1451
- }, onChange: function (address) {
1452
- handleOnChangeAddress(eachAttribute.id, address);
1453
- }, ref: eachAttribute.optional ? null : formInputRef[index], disabled: disabled }));
1454
- break;
1455
- case "object":
1456
- var objectValue = Object.values((_b = clonedSelectedData[eachAttribute.id]) !== null && _b !== void 0 ? _b : {});
1457
- inputList.push(react_1.default.createElement(react_1.default.Fragment, null,
1458
- react_1.default.createElement("label", { className: "block text-sm font-medium text-gray-700" }, label),
1459
- react_1.default.createElement("div", { className: "block bg-white w-full border cursor-pointer border-gray-300 text-gray-300 text-left rounded-md mt-1 px-5 py-3 text-base focus:border-primary-500 focus:outline-none", onClick: function () {
1460
- var _a;
1461
- setSelectedObjectStructureId(eachAttribute.id);
1462
- setSelectedObjectData((_a = clonedSelectedData[eachAttribute.id]) !== null && _a !== void 0 ? _a : {});
1463
- handlePopUpModal(true);
1464
- } }, objectValue.length > 0 ? (react_1.default.createElement("div", { className: "flex overflow-hidden flex-row" }, renderObjectTags(eachAttribute.id))) : ("Fill details"))));
1465
- break;
1466
- case "list":
1467
- case "multipleList":
1468
- var optionList_2 = eachAttribute.listSelection
1469
- ? (_c = eachAttribute.listSelection) === null || _c === void 0 ? void 0 : _c.map(function (eachAttribute) {
1470
- return {
1471
- key: eachAttribute,
1472
- label: eachAttribute,
1473
- };
1474
- })
1475
- : [];
1476
- if (clonedSelectedData[eachAttribute.id]) {
1477
- var selectedList = clonedSelectedData[eachAttribute.id];
1478
- var selectedKeys = Array.isArray(selectedList)
1479
- ? selectedList
1480
- : [selectedList];
1481
- selectedKeys.forEach(function (key) {
1482
- if (!optionList_2.some(function (item) { return item.key === key; })) {
1483
- optionList_2.push({ key: key, label: key });
1484
- }
1485
- });
1486
- }
1487
- inputList.push(react_1.default.createElement(select_1.Select, { ref: eachAttribute.optional ? null : formInputRef[index], id: eachAttribute.id, value: (_d = clonedSelectedData[eachAttribute.id]) !== null && _d !== void 0 ? _d : (eachAttribute.type === "list" ? "" : []), label: label, options: optionList_2, onChange: function (value) {
1488
- handleOnChangeSelect(eachAttribute.id, value);
1489
- }, disabled: disabled }));
1490
- break;
1491
- case "boolean":
1492
- var value = (_e = clonedSelectedData[eachAttribute.id]) === null || _e === void 0 ? void 0 : _e.toString();
1493
- inputList.push(react_1.default.createElement(select_1.Select, { ref: eachAttribute.optional ? null : formInputRef[index], id: eachAttribute.id, value: value, label: label, options: [
1494
- {
1495
- key: "true",
1496
- label: "True",
1497
- },
1498
- {
1499
- key: "false",
1500
- label: "False",
1501
- },
1502
- ], onChange: function (value) {
1503
- handleOnChangeSelect(eachAttribute.id, value);
1504
- }, disabled: disabled }));
1505
- break;
1506
- case "image":
1507
- case "file":
1508
- var hasImageToken = typeof clonedSelectedData[eachAttribute.id] === "string";
1509
- var url = void 0;
1510
- if (hasImageToken) {
1511
- url = isObject
1512
- ? isObjectList
1513
- ? (0, utils_2.renderImageUrlFromPath)(props.imageEndpoint, eachAttribute.imageCollectionName +
1514
- "%2F" +
1515
- props.id +
1516
- "%2F" +
1517
- selectedObjectId, selectedObjectStructureId, eachAttribute.imageFileName, clonedSelectedData[eachAttribute.id])
1518
- : (0, utils_2.renderImageUrlFromPath)(props.imageEndpoint, eachAttribute.imageCollectionName + "%2F" + props.id, selectedObjectStructureId, eachAttribute.imageFileName, clonedSelectedData[eachAttribute.id])
1519
- : (0, utils_2.renderImageUrlFromPath)(props.imageEndpoint, eachAttribute.imageCollectionName, props.id, eachAttribute.imageFileName, clonedSelectedData[eachAttribute.id]);
1520
- }
1521
- inputList.push(react_1.default.createElement(uploadInput_1.UploadInput, { ref: eachAttribute.optional ? null : formInputRef[index], id: eachAttribute.id, label: label, hidePreview: eachAttribute.type === "image" ? false : true, file: (_f = url !== null && url !== void 0 ? url : clonedSelectedData[eachAttribute.id]) !== null && _f !== void 0 ? _f : "", accept: eachAttribute.type === "image" ? ".png,.jpg,.jpe,.tiff" : ".pdf", fileDescription: eachAttribute.type === "image" ? undefined : "PDF up to 30MB", maxFileSize: props.maxFileSize, onChange: handleOnChangeFile, disabled: disabled }));
1522
- break;
1523
- case "number":
1524
- inputList.push(react_1.default.createElement(textInput_1.TextInput, { id: eachAttribute.id, ref: eachAttribute.optional ? null : formInputRef[index], type: "number", value: (_g = clonedSelectedData[eachAttribute.id]) !== null && _g !== void 0 ? _g : "", placeholder: label, label: label, onChange: handleOnChangeText, disabled: disabled }));
1525
- break;
1526
- case "reference":
1527
- case "listReference":
1528
- var referenceLabel_1 = (_h = eachAttribute.referenceLabel) !== null && _h !== void 0 ? _h : "";
1529
- inputList.push(react_1.default.createElement(react_1.default.Fragment, null,
1530
- react_1.default.createElement(readQueryHoc_1.ReadQueryHoc, { database: {
1531
- dbModule: dbModule,
1532
- dbType: props.server,
1533
- dbCollection: (_j = eachAttribute.referenceSpaceId) !== null && _j !== void 0 ? _j : "",
1534
- dbEndpoint: props.dbEndpoint,
1535
- }, cond: {
1536
- type: "list",
1537
- query: clonedReferenceSearchText[eachAttribute.id]
1538
- ? [
1539
- {
1540
- type: "search",
1541
- searchIds: [referenceLabel_1],
1542
- value: clonedReferenceSearchText[eachAttribute.id],
1543
- },
1544
- ]
1545
- : undefined,
1546
- limit: limit,
1547
- }, onChangeData: function (data) {
1548
- handleGetReferenceOptions(data, eachAttribute, referenceLabel_1, clonedSelectedData[eachAttribute.id]);
1549
- } }),
1550
- react_1.default.createElement(select_1.Select, { ref: eachAttribute.optional ? null : formInputRef[index], id: eachAttribute.id, value: (_k = clonedSelectedData[eachAttribute.id]) !== null && _k !== void 0 ? _k : (eachAttribute.type === "reference" ? "" : []), label: label, options: (_l = clonedReferenceOptions[eachAttribute.id]) !== null && _l !== void 0 ? _l : [], onChange: function (value) {
1551
- handleOnChangeSelect(eachAttribute.id, value);
1552
- }, onSearch: function (value) {
1553
- handleSearchReferenceOptions(eachAttribute.id, value);
1554
- }, disabled: disabled })));
1555
- break;
1556
- case "string":
1557
- inputList.push(react_1.default.createElement(textInput_1.TextInput, { id: eachAttribute.id, ref: eachAttribute.optional ? null : formInputRef[index], type: "text", value: (_m = clonedSelectedData[eachAttribute.id]) !== null && _m !== void 0 ? _m : "", placeholder: label, label: label, onChange: handleOnChangeText, disabled: disabled }));
1558
- break;
1559
- case "date":
1560
- inputList.push(react_1.default.createElement(datePicker_1.InputDatePicker, { title: label, id: eachAttribute.id, ref: eachAttribute.optional ? null : formInputRef[index], onChange: handleOnChangeDate, value: clonedSelectedData[eachAttribute.id], disabled: disabled }));
1561
- break;
1562
- }
1563
- return null;
1564
- });
1565
- return inputList.map(function (eachInput, index) {
1566
- return (react_1.default.createElement("div", { key: index, className: "col-span-4 sm:col-span-2" }, eachInput));
1567
- });
1179
+ var handleOnChangeFile = function (e) {
1180
+ var _a = handleOnChangeData(), data = _a.data, model = _a.model;
1181
+ var clonedData = handleClonedDataAttribute(data, model);
1182
+ clonedData[e.target.id] =
1183
+ e.target.files.length > 0 ? e.target.files[0] : undefined;
1184
+ handleUpdateChangeData(clonedData);
1568
1185
  };
1569
- var renderTabContent = function (tabs, dataType, viewType) {
1570
- var _a, _b, _c, _d;
1571
- var selectedTabData = tabs.find(function (eachTab) {
1572
- if (eachTab.id === viewType) {
1573
- return eachTab;
1574
- }
1575
- else {
1576
- return null;
1577
- }
1578
- });
1579
- if (viewType === "general") {
1580
- if (dataType === "list") {
1581
- return (react_1.default.createElement(table_1.Table, { paginationType: props.server === "mongoServer" ? "page" : "cursor", data: data, size: size, limit: limit, cursor: cursor, loading: tableLoading, header: renderTableHeader(), pageIndex: pageIndex, onClickRow: function (id) {
1582
- handleNavigate("".concat(props.localURLEndpoint, "?data=").concat(id, "&type=read&collection=").concat(props.collectionId, "&view=general"));
1583
- }, linkType: props.linkType, custom: props.custom, newTabUrl: "".concat(props.localURLEndpoint, "?data="), addNewTabUrl: "&type=read&collection=".concat(props.collectionId, "&view=general"), handleUpdatePageIndex: handlePagination, className: "mt-5" }));
1584
- }
1585
- else if (dataType === "read") {
1586
- return (react_1.default.createElement(react_1.default.Fragment, null,
1587
- react_1.default.createElement(detailList_1.DetailList, { lib: {
1588
- Dialog: (_a = props.lib) === null || _a === void 0 ? void 0 : _a.Dialog,
1589
- Transition: (_b = props.lib) === null || _b === void 0 ? void 0 : _b.Transition,
1590
- }, model: props.model, referenceModel: referenceModelSchema, className: "mt-5 bg-white rounded-md", title: "General Details", list: renderDetailListData() }),
1591
- react_1.default.createElement("div", { className: "mt-8" }, renderListObject(dataType))));
1592
- }
1593
- }
1594
- else if (selectedTabData) {
1595
- if (selectedTabData.iframeSrc) {
1596
- return (react_1.default.createElement("iframe", { className: "w-full mt-5", style: { height: "70vh" }, src: (_c = selectedTabData === null || selectedTabData === void 0 ? void 0 : selectedTabData.iframeSrc) !== null && _c !== void 0 ? _c : "", title: (_d = selectedTabData === null || selectedTabData === void 0 ? void 0 : selectedTabData.id) !== null && _d !== void 0 ? _d : "" }));
1597
- }
1598
- else if (selectedTabData.renderComp) {
1599
- return react_1.default.createElement(react_1.default.Fragment, null, selectedTabData.renderComp());
1600
- }
1601
- }
1602
- return null;
1186
+ var handleOnChangeAddress = function (id, address) {
1187
+ var _a = handleOnChangeData(), data = _a.data, model = _a.model;
1188
+ var clonedData = handleClonedDataAttribute(data, model);
1189
+ clonedData[id] = address;
1190
+ handleUpdateChangeData(clonedData);
1603
1191
  };
1604
- var renderDetailListData = function () {
1192
+ var handleOnChangeText = function (e) {
1193
+ var _a = handleOnChangeData(), data = _a.data, model = _a.model;
1194
+ var clonedData = handleClonedDataAttribute(data, model);
1195
+ clonedData[e.target.id] = e.target.value;
1196
+ handleUpdateChangeData(clonedData);
1197
+ };
1198
+ var handleOnChangeSelect = function (id, value) {
1199
+ var _a = handleOnChangeData(), data = _a.data, model = _a.model;
1200
+ var clonedData = handleClonedDataAttribute(data, model);
1201
+ clonedData[id] = value;
1202
+ handleUpdateChangeData(clonedData);
1203
+ };
1204
+ var handleOnChangeDate = function (id, value) {
1205
+ var _a = handleOnChangeData(), data = _a.data, model = _a.model;
1206
+ var clonedData = handleClonedDataAttribute(data, model);
1207
+ clonedData[id] = value;
1208
+ handleUpdateChangeData(clonedData);
1209
+ };
1210
+ //=====================================================================================
1211
+ //SECTION: Handle CSV
1212
+ //=====================================================================================
1213
+ var handleOnChangeCSV = function (e) {
1605
1214
  var _a;
1606
- var detailList = [];
1607
- var _loop_5 = function (eachKey, eachValue) {
1608
- if (eachKey !== "id" &&
1609
- eachKey !== "_id" &&
1610
- eachKey !== "baseUpdatedAt") {
1611
- var filterModel = props.model.find(function (eachAttribute) {
1612
- return eachAttribute.id === eachKey;
1613
- });
1614
- detailList.push({
1615
- title: (_a = filterModel === null || filterModel === void 0 ? void 0 : filterModel.name) !== null && _a !== void 0 ? _a : "",
1616
- text: eachValue,
1617
- });
1618
- }
1619
- };
1620
- for (var _i = 0, _b = Object.entries(selectedData); _i < _b.length; _i++) {
1621
- var _c = _b[_i], eachKey = _c[0], eachValue = _c[1];
1622
- _loop_5(eachKey, eachValue);
1215
+ var file = e.target.files[0];
1216
+ if (file) {
1217
+ setCSVFile(file);
1218
+ (_a = props.lib) === null || _a === void 0 ? void 0 : _a.papaParser.parse(file, {
1219
+ header: true,
1220
+ dynamicTyping: true,
1221
+ complete: function (results) {
1222
+ if (results.data && results.data.length < 100)
1223
+ setCSVFileData(results.data);
1224
+ else
1225
+ setNotification({
1226
+ type: false,
1227
+ title: "Import Error",
1228
+ msg: "Data is more than 100 rows",
1229
+ });
1230
+ },
1231
+ });
1232
+ setStepCSVIndex(1);
1233
+ }
1234
+ else {
1235
+ setNotification({
1236
+ type: false,
1237
+ title: "Import Error",
1238
+ msg: "No file is selected",
1239
+ });
1623
1240
  }
1624
- return detailList;
1625
1241
  };
1626
- var renderListObject = function (type) {
1627
- var isListObject = props.model.filter(function (eachAttribute) { return eachAttribute.type === "listObject"; });
1628
- if (isListObject.length > 0) {
1629
- var list_2 = {};
1630
- var clonedSelectedData_1 = handleClonedDataAttribute(selectedData, props.model);
1631
- return isListObject.map(function (eachListObject) {
1632
- var _a;
1633
- if (clonedSelectedData_1[eachListObject.id]) {
1634
- clonedSelectedData_1[eachListObject.id].map(function (eachObject) {
1635
- var eachNewList = {
1636
- id: "",
1637
- title: "",
1638
- };
1639
- var isTitle = true;
1640
- var _loop_6 = function (eachKey, eachValue) {
1641
- if (eachListObject.objectData) {
1642
- var model = eachListObject.objectData.find(function (eachAttribute) {
1643
- return eachAttribute.id === eachKey;
1242
+ var handleStepCSV = function () { return __awaiter(_this, void 0, void 0, function () {
1243
+ var csvList_1, _loop_4, _i, _a, _b, eachKey, eachValue, valid_1, errorValue_1, response, err_7;
1244
+ var _c, _d, _e, _f, _g;
1245
+ return __generator(this, function (_h) {
1246
+ switch (_h.label) {
1247
+ case 0:
1248
+ _h.trys.push([0, 6, , 7]);
1249
+ if (!(stepCSVIndex === 0)) return [3 /*break*/, 1];
1250
+ if (csvFileData.length > 0 && csvFile)
1251
+ setStepCSVIndex(stepCSVIndex + 1);
1252
+ else
1253
+ throw new Error("Please upload a .CSV file");
1254
+ return [3 /*break*/, 5];
1255
+ case 1:
1256
+ if (!(stepCSVIndex === 1)) return [3 /*break*/, 3];
1257
+ csvList_1 = [];
1258
+ _loop_4 = function (eachKey, eachValue) {
1259
+ if (eachKey && eachValue && typeof eachValue === "string") {
1260
+ var selectedModel = props.model.find(function (eachModel) {
1261
+ return eachModel.id === eachValue;
1262
+ });
1263
+ if ((selectedModel === null || selectedModel === void 0 ? void 0 : selectedModel.type) === "object" ||
1264
+ (selectedModel === null || selectedModel === void 0 ? void 0 : selectedModel.type) === "listObject") {
1265
+ var selectedObjectModel = (_c = selectedModel === null || selectedModel === void 0 ? void 0 : selectedModel.objectData) === null || _c === void 0 ? void 0 : _c.find(function (eachModel) {
1266
+ return eachModel.id === eachValue;
1267
+ });
1268
+ csvList_1.push({
1269
+ id: (_d = listCSVObjAttribute[eachKey]) !== null && _d !== void 0 ? _d : "",
1270
+ ori: Number(eachKey),
1271
+ type: "object",
1272
+ objectId: eachValue,
1273
+ objectValueType: (_e = selectedObjectModel === null || selectedObjectModel === void 0 ? void 0 : selectedObjectModel.type) !== null && _e !== void 0 ? _e : "string",
1274
+ });
1275
+ }
1276
+ else if ((selectedModel === null || selectedModel === void 0 ? void 0 : selectedModel.type) === "image") {
1277
+ csvList_1.push({
1278
+ id: eachValue !== null && eachValue !== void 0 ? eachValue : "",
1279
+ ori: Number(eachKey),
1280
+ type: "image",
1281
+ imageCollectionName: selectedModel.imageCollectionName,
1282
+ imageFileName: selectedModel.imageFileName,
1283
+ imageEndpoint: selectedModel.imageEndpoint,
1284
+ });
1285
+ }
1286
+ else {
1287
+ csvList_1.push({
1288
+ id: eachValue !== null && eachValue !== void 0 ? eachValue : "",
1289
+ ori: Number(eachKey),
1290
+ type: (_f = selectedModel === null || selectedModel === void 0 ? void 0 : selectedModel.type) !== null && _f !== void 0 ? _f : "string",
1644
1291
  });
1645
- switch (model === null || model === void 0 ? void 0 : model.type) {
1646
- case "string":
1647
- isTitle
1648
- ? (eachNewList["title"] =
1649
- typeof eachValue === "string" ? eachValue : "")
1650
- : (eachNewList[eachKey] = model.name + " : " + eachValue);
1651
- isTitle = false;
1652
- break;
1653
- case "image":
1654
- var url = void 0;
1655
- if (typeof eachValue === "string") {
1656
- url = (0, utils_2.renderImageUrlFromPath)(props.imageEndpoint, model.imageCollectionName +
1657
- "%2F" +
1658
- props.id +
1659
- "%2F" +
1660
- eachObject.id, eachListObject.id, model.imageFileName, eachValue);
1661
- }
1662
- else if (eachValue instanceof File) {
1663
- url = URL.createObjectURL(eachValue);
1664
- }
1665
- eachNewList[eachKey] = (react_1.default.createElement("img", { src: url, alt: "", className: "w-10 h-10 object-contain" }));
1666
- break;
1667
- case "date":
1668
- eachNewList[eachKey] =
1669
- (model === null || model === void 0 ? void 0 : model.name) +
1670
- " : " +
1671
- (0, utils_1.renderEachRowDataBasedOnDataType)(eachValue);
1672
- break;
1673
- case "address":
1674
- case "object":
1675
- case "reference":
1676
- break;
1677
- default:
1678
- if (eachKey === "id" && typeof eachValue === "string") {
1679
- eachNewList[eachKey] = eachValue;
1680
- }
1681
- else {
1682
- eachNewList[eachKey] = (model === null || model === void 0 ? void 0 : model.name) + " : " + eachValue;
1683
- }
1684
- break;
1685
- }
1686
1292
  }
1687
- };
1688
- for (var _i = 0, _a = Object.entries(eachObject); _i < _a.length; _i++) {
1689
- var _b = _a[_i], eachKey = _b[0], eachValue = _b[1];
1690
- _loop_6(eachKey, eachValue);
1691
- }
1692
- if (list_2[eachListObject.id]) {
1693
- list_2[eachListObject.id].push(eachNewList);
1694
- }
1695
- else {
1696
- list_2[eachListObject.id] = [eachNewList];
1697
1293
  }
1698
- return null;
1294
+ };
1295
+ for (_i = 0, _a = Object.entries(listCSVMapAttribute); _i < _a.length; _i++) {
1296
+ _b = _a[_i], eachKey = _b[0], eachValue = _b[1];
1297
+ _loop_4(eachKey, eachValue);
1298
+ }
1299
+ valid_1 = true;
1300
+ errorValue_1 = "";
1301
+ return [4 /*yield*/, Promise.all(props.model.map(function (eachEachModel) {
1302
+ if (eachEachModel.id === "_id" || eachEachModel.id === "id") {
1303
+ return "";
1304
+ }
1305
+ if (!eachEachModel.optional) {
1306
+ // INFO : Validate and compare the modal with csv list and return true if > 1 consist within
1307
+ var innearValidation = csvList_1.some(function (eachCsvList) {
1308
+ if (eachCsvList.type === "object" ||
1309
+ eachCsvList.type === "listObject") {
1310
+ return eachEachModel.id === eachCsvList.objectId;
1311
+ }
1312
+ else {
1313
+ return eachEachModel.id === eachCsvList.id;
1314
+ }
1315
+ });
1316
+ if (!innearValidation) {
1317
+ errorValue_1 = errorValue_1 + "<" + eachEachModel.id + ">";
1318
+ valid_1 = false;
1319
+ }
1320
+ }
1321
+ return null;
1322
+ }))];
1323
+ case 2:
1324
+ _h.sent();
1325
+ if (!valid_1) {
1326
+ throw new Error("Please select how you want to map your data to ".concat(errorValue_1));
1327
+ }
1328
+ else {
1329
+ setCSVAPIAttribute(csvList_1);
1330
+ setStepCSVIndex(stepCSVIndex + 1);
1331
+ }
1332
+ return [3 /*break*/, 5];
1333
+ case 3:
1334
+ if (!(stepCSVIndex === 2)) return [3 /*break*/, 5];
1335
+ // INFO - Call Space Excel API
1336
+ setLoading(true);
1337
+ return [4 /*yield*/, ((_g = props.lib) === null || _g === void 0 ? void 0 : _g.axios.post("".concat(props.schemaEndpoint, "/csv/import"), {
1338
+ data: {
1339
+ parsedDataStructure: csvAPIAttribute,
1340
+ spaceId: props.collectionId,
1341
+ },
1342
+ file: csvFile,
1343
+ }, {
1344
+ headers: {
1345
+ "Content-Type": "multipart/form-data",
1346
+ },
1347
+ }))];
1348
+ case 4:
1349
+ response = _h.sent();
1350
+ setLoading(false);
1351
+ if (response.data) {
1352
+ setNotification({
1353
+ type: true,
1354
+ title: "Data has been imported successfully",
1355
+ msg: response.data.msg,
1356
+ });
1357
+ handlePopUpModal(false);
1358
+ setTimeout(function () {
1359
+ window.location.reload();
1360
+ }, 1500);
1361
+ }
1362
+ _h.label = 5;
1363
+ case 5: return [3 /*break*/, 7];
1364
+ case 6:
1365
+ err_7 = _h.sent();
1366
+ setNotification({
1367
+ type: false,
1368
+ title: "Import Error",
1369
+ msg: err_7.message,
1699
1370
  });
1700
- }
1701
- return (react_1.default.createElement(react_1.default.Fragment, null, !list_2[eachListObject.id] && type === "update" ? (react_1.default.createElement("button", { type: "button", className: "mt-5 relative block w-full rounded-lg border-2 border-dashed border-gray-300 p-12 text-center", onClick: function () {
1702
- setSelectedObjectStructureId(eachListObject.id);
1703
- handlePopUpModal(true);
1704
- } },
1705
- react_1.default.createElement("svg", { className: "mx-auto h-12 w-12 text-gray-400", stroke: "currentColor", fill: "none", viewBox: "0 0 48 48", "aria-hidden": "true" },
1706
- react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 14v20c0 4.418 7.163 8 16 8 1.381 0 2.721-.087 4-.252M8 14c0 4.418 7.163 8 16 8s16-3.582 16-8M8 14c0-4.418 7.163-8 16-8s16 3.582 16 8m0 0v14m0-4c0 4.418-7.163 8-16 8S8 28.418 8 24m32 10v6m0 0v6m0-6h6m-6 0h-6" })),
1707
- react_1.default.createElement("span", { className: "mt-2 block text-sm font-medium text-gray-900" },
1708
- "Create a new ", "".concat(eachListObject.name.toLocaleLowerCase())))) : (react_1.default.createElement(react_1.default.Fragment, null, list_2[eachListObject.id] && (react_1.default.createElement(react_1.default.Fragment, null,
1709
- react_1.default.createElement("div", { className: "flex justify-between mt-5" },
1710
- react_1.default.createElement("div", null,
1711
- react_1.default.createElement("h3", { className: "text-md leading-6 font-medium text-gray-900 sm:text-lg" }, eachListObject.name),
1712
- react_1.default.createElement("span", { className: "text-sm text-gray-500" }, props.description)),
1713
- type === "update" && (react_1.default.createElement(iconButton_1.IconButton, { className: "sm", icon: react_1.default.createElement(outline_1.PlusCircleIcon, { className: "w-6 h-6 text-white" }), background: "bg-primary-500 hover:bg-primary-600", onClick: function () {
1714
- setSelectedObjectStructureId(eachListObject.id);
1715
- handlePopUpModal(true);
1716
- } }))),
1717
- react_1.default.createElement(list_1.List, { className: "mt-5", list: (_a = list_2[eachListObject.id]) !== null && _a !== void 0 ? _a : [], loading: false, onClickRow: function (id) {
1718
- handleSelectListObjectData(id, eachListObject.id);
1719
- } })))))));
1371
+ return [3 /*break*/, 7];
1372
+ case 7: return [2 /*return*/];
1373
+ }
1374
+ });
1375
+ }); };
1376
+ var handleExportCSVData = function () { return __awaiter(_this, void 0, void 0, function () {
1377
+ var res, err_8;
1378
+ var _a, _b, _c;
1379
+ return __generator(this, function (_d) {
1380
+ switch (_d.label) {
1381
+ case 0:
1382
+ _d.trys.push([0, 2, , 3]);
1383
+ setLoading(true);
1384
+ return [4 /*yield*/, ((_b = (_a = props.lib) === null || _a === void 0 ? void 0 : _a.axios) === null || _b === void 0 ? void 0 : _b.post("".concat(props.schemaEndpoint, "/csv/export"), {
1385
+ data: { spaceId: props.collectionId, query: queryList },
1386
+ }, {
1387
+ headers: {
1388
+ "Content-Type": "multipart/form-data",
1389
+ },
1390
+ }))];
1391
+ case 1:
1392
+ res = _d.sent();
1393
+ setExportLink((_c = res === null || res === void 0 ? void 0 : res.data.link) !== null && _c !== void 0 ? _c : "");
1394
+ setNotification({
1395
+ type: true,
1396
+ title: "Export Successfully",
1397
+ msg: "A download link had been generated.",
1398
+ });
1399
+ setLoading(false);
1400
+ return [3 /*break*/, 3];
1401
+ case 2:
1402
+ err_8 = _d.sent();
1403
+ setLoading(false);
1404
+ return [3 /*break*/, 3];
1405
+ case 3: return [2 /*return*/];
1406
+ }
1407
+ });
1408
+ }); };
1409
+ var handleQueryModal = function () {
1410
+ setQueryModal(!queryModal);
1411
+ setQueryInput({
1412
+ queryId: "",
1413
+ type: "=",
1414
+ value: "",
1415
+ });
1416
+ setExportReferenceList([]);
1417
+ setExportReferenceSearch("");
1418
+ };
1419
+ var handleCloneQueryList = function () {
1420
+ var _a;
1421
+ var clonedQueryInput = (_a = JSON.parse(JSON.stringify(queryList))) !== null && _a !== void 0 ? _a : [];
1422
+ clonedQueryInput.map(function (eachQuery) {
1423
+ var tempValue = eachQuery.value;
1424
+ if (tempValue === "false" || tempValue === "true") {
1425
+ tempValue = tempValue === "false" ? false : true;
1426
+ }
1427
+ else if (!isNaN(tempValue)) {
1428
+ tempValue = Number(tempValue);
1429
+ }
1430
+ eachQuery.value = tempValue;
1431
+ return null;
1432
+ });
1433
+ return clonedQueryInput;
1434
+ };
1435
+ var handlePushQueryList = function () {
1436
+ var tempQueryList = handleCloneQueryList();
1437
+ if (!tempQueryList.some(function (eachQuery) { return eachQuery.queryId === queryInput.queryId; })) {
1438
+ var tempValue = queryInput.value;
1439
+ if (tempValue === "false" || tempValue === "true") {
1440
+ tempValue = tempValue === "false" ? false : true;
1441
+ }
1442
+ else if (!isNaN(tempValue)) {
1443
+ tempValue = Number(tempValue);
1444
+ }
1445
+ queryInput.value = tempValue;
1446
+ tempQueryList.push(queryInput);
1447
+ setQueryModal(!queryModal);
1448
+ setQueryList(tempQueryList);
1449
+ setQueryInput({
1450
+ queryId: "",
1451
+ type: "=",
1452
+ value: "",
1720
1453
  });
1721
1454
  }
1722
1455
  else {
1723
- return react_1.default.createElement(react_1.default.Fragment, null);
1456
+ // NOTIFICATION - CONISTS
1457
+ setNotification({
1458
+ type: false,
1459
+ title: "Export Failed",
1460
+ msg: "Please check again your query attribute.",
1461
+ });
1462
+ }
1463
+ };
1464
+ var handleViewQuery = function (index) {
1465
+ handleQueryModal();
1466
+ setQueryInput(queryList[index]);
1467
+ };
1468
+ var handleSortQuery = function (index, sortType) {
1469
+ var _a;
1470
+ var sortList = JSON.parse(JSON.stringify(queryList));
1471
+ var ascIndex = sortType === "up" ? index - 1 : index + 1;
1472
+ _a = [
1473
+ sortList[ascIndex],
1474
+ sortList[index],
1475
+ ], sortList[index] = _a[0], sortList[ascIndex] = _a[1];
1476
+ setQueryList(sortList);
1477
+ };
1478
+ //=====================================================================================
1479
+ //SECTION: Handle Utils
1480
+ //=====================================================================================
1481
+ var handlePopUpModal = function (modalVisible) {
1482
+ setModalVisible(modalVisible);
1483
+ if (!modalVisible) {
1484
+ setTimeout(function () {
1485
+ setExcelModal(false);
1486
+ setExportExcel(false);
1487
+ setSelectedObjectId("");
1488
+ setSelectedObjectStructureId("");
1489
+ setSelectedObjectData({});
1490
+ setStepCSVIndex(0);
1491
+ setCSVFile(null);
1492
+ setCSVFileData([]);
1493
+ setListCSVMapAttribute({});
1494
+ setListCSVObjAttribute({});
1495
+ setCSVAPIAttribute([]);
1496
+ setExportLink("");
1497
+ setQueryList([]);
1498
+ }, 500);
1499
+ }
1500
+ };
1501
+ var handleNavigate = function (link) {
1502
+ var _a, _b, _c;
1503
+ var href = link !== null && link !== void 0 ? link : "".concat(props.localURLEndpoint, "?type=list&collection=").concat(props.collectionId);
1504
+ if ((_a = props.lib) === null || _a === void 0 ? void 0 : _a.navigateNext) {
1505
+ props.lib.navigateNext.push(href);
1506
+ }
1507
+ else if ((_b = props.lib) === null || _b === void 0 ? void 0 : _b.navigate) {
1508
+ (_c = props.lib) === null || _c === void 0 ? void 0 : _c.navigate(href);
1509
+ }
1510
+ else if (window) {
1511
+ window.location.replace(href);
1724
1512
  }
1725
1513
  };
1726
- //SECTION - CSV
1514
+ //=====================================================================================
1515
+ //SECTION: Render CSV
1516
+ //=====================================================================================
1727
1517
  var renderExcelReviewData = function () {
1728
1518
  var header = Object.keys(csvFileData[0]);
1729
1519
  var dataList = [];
@@ -1786,6 +1576,7 @@ function DataTemplate(props) {
1786
1576
  }
1787
1577
  };
1788
1578
  var renderQueryIdOptions = function () {
1579
+ var queryIdOptions = [];
1789
1580
  props.model.map(function (data) {
1790
1581
  if (data.id !== "_id" && data.id !== "id") {
1791
1582
  queryIdOptions.push({
@@ -1883,47 +1674,319 @@ function DataTemplate(props) {
1883
1674
  handleSortQuery(index, upData_1 ? "up" : "down");
1884
1675
  } }, upData_1 ? (react_1.default.createElement(outline_1.ArrowUpIcon, { className: "h-5 w-5 block text-primary-600" })) : (react_1.default.createElement(outline_1.ArrowDownIcon, { className: "h-5 w-5 block text-primary-600" }))));
1885
1676
  }
1886
- queryStructureView.push({
1887
- key: index,
1888
- name: data.queryId,
1889
- value: data.value,
1890
- sort: sortComponent,
1891
- view: (react_1.default.createElement("div", { className: "cursor-pointer ml-2", onClick: function () {
1892
- handleViewQuery(index);
1893
- } },
1894
- react_1.default.createElement(outline_1.EyeIcon, { className: "h-5 w-5 block text-primary-600" }))),
1895
- del: (react_1.default.createElement("div", { className: "cursor-pointer ml-2", onClick: function () {
1896
- var temp = JSON.parse(JSON.stringify(queryList));
1897
- temp.splice(index, 1);
1898
- setQueryList(temp);
1899
- } },
1900
- react_1.default.createElement(outline_1.TrashIcon, { className: "h-5 w-5 block text-primary-600" }))),
1901
- });
1902
- return "";
1677
+ queryStructureView.push({
1678
+ key: index,
1679
+ name: data.queryId,
1680
+ value: data.value,
1681
+ sort: sortComponent,
1682
+ view: (react_1.default.createElement("div", { className: "cursor-pointer ml-2", onClick: function () {
1683
+ handleViewQuery(index);
1684
+ } },
1685
+ react_1.default.createElement(outline_1.EyeIcon, { className: "h-5 w-5 block text-primary-600" }))),
1686
+ del: (react_1.default.createElement("div", { className: "cursor-pointer ml-2", onClick: function () {
1687
+ var temp = JSON.parse(JSON.stringify(queryList));
1688
+ temp.splice(index, 1);
1689
+ setQueryList(temp);
1690
+ } },
1691
+ react_1.default.createElement(outline_1.TrashIcon, { className: "h-5 w-5 block text-primary-600" }))),
1692
+ });
1693
+ return "";
1694
+ });
1695
+ return queryStructureView;
1696
+ };
1697
+ //=====================================================================================
1698
+ //SECTION: Render CRUD
1699
+ //=====================================================================================
1700
+ var renderTableHeader = function () {
1701
+ var tableHeader = [];
1702
+ props.model.map(function (eachAttribute) {
1703
+ if (eachAttribute.id === "baseUpdatedAt" ||
1704
+ eachAttribute.type === "listObject" ||
1705
+ eachAttribute.hide) {
1706
+ return null;
1707
+ }
1708
+ tableHeader.push({
1709
+ key: eachAttribute.id,
1710
+ title: eachAttribute.name,
1711
+ });
1712
+ return null;
1713
+ });
1714
+ tableHeader.push({
1715
+ key: "update",
1716
+ title: "Update",
1717
+ });
1718
+ return tableHeader;
1719
+ };
1720
+ var renderCursor = function () {
1721
+ if (props.server === "mongoServer") {
1722
+ return pageIndex === 0 ? undefined : pageIndex * limit;
1723
+ }
1724
+ else {
1725
+ return lastCursor ? undefined : lastCursor;
1726
+ }
1727
+ };
1728
+ var renderObjectTags = function (id) {
1729
+ return Object.keys(selectedData[id]).map(function (eachKeys) {
1730
+ return (react_1.default.createElement("div", { key: eachKeys, className: "bg-primary-600 text-white rounded m-0.5" },
1731
+ react_1.default.createElement("p", { className: "text-xs px-2 py-1 text-wrap" }, eachKeys)));
1732
+ });
1733
+ };
1734
+ var renderDataTemplateForm = function (data, model, formInputRef, isObject, isObjectList) {
1735
+ var inputList = [];
1736
+ //INFO : filteredModel is to secure the formInputRef[index] will not have any issue
1737
+ var filteredModel = model.filter(function (eachAttribute) {
1738
+ //INFO - Default Model Contain Id While Object Type Don't have
1739
+ return eachAttribute.id !== "_id" && eachAttribute.id !== "id";
1740
+ });
1741
+ filteredModel.forEach(function (eachAttribute, index) {
1742
+ //INFO - Default Model Contain Id While Object Type Don't have
1743
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
1744
+ var clonedSelectedData = handleClonedDataAttribute(data, model);
1745
+ var label = eachAttribute.name + (!eachAttribute.optional ? " (*)" : "");
1746
+ var disabled = props.type === "read"
1747
+ ? true
1748
+ : props.type === "update" && props.id === "new"
1749
+ ? false
1750
+ : eachAttribute.disabled;
1751
+ switch (eachAttribute.type) {
1752
+ case "address":
1753
+ inputList.push(react_1.default.createElement(address_1.Address, { id: eachAttribute.id, label: label, value: (_a = clonedSelectedData[eachAttribute.id]) !== null && _a !== void 0 ? _a : {
1754
+ lat: 0,
1755
+ lng: 0,
1756
+ name: "",
1757
+ }, onChange: function (address) {
1758
+ handleOnChangeAddress(eachAttribute.id, address);
1759
+ }, ref: eachAttribute.optional ? null : formInputRef[index], disabled: disabled }));
1760
+ break;
1761
+ case "object":
1762
+ var objectValue = Object.values((_b = clonedSelectedData[eachAttribute.id]) !== null && _b !== void 0 ? _b : {});
1763
+ inputList.push(react_1.default.createElement(react_1.default.Fragment, null,
1764
+ react_1.default.createElement("label", { className: "block text-sm font-medium text-gray-700" }, label),
1765
+ react_1.default.createElement("div", { className: "block bg-white w-full border cursor-pointer border-gray-300 text-gray-300 text-left rounded-md mt-1 px-5 py-3 text-base focus:border-primary-500 focus:outline-none", onClick: function () {
1766
+ var _a;
1767
+ setSelectedObjectStructureId(eachAttribute.id);
1768
+ setSelectedObjectData((_a = clonedSelectedData[eachAttribute.id]) !== null && _a !== void 0 ? _a : {});
1769
+ handlePopUpModal(true);
1770
+ } }, objectValue.length > 0 ? (react_1.default.createElement("div", { className: "flex overflow-hidden flex-row" }, renderObjectTags(eachAttribute.id))) : ("Fill details"))));
1771
+ break;
1772
+ case "list":
1773
+ case "multipleList":
1774
+ var optionList_2 = eachAttribute.listSelection
1775
+ ? (_c = eachAttribute.listSelection) === null || _c === void 0 ? void 0 : _c.map(function (eachAttribute) {
1776
+ return {
1777
+ key: eachAttribute,
1778
+ label: eachAttribute,
1779
+ };
1780
+ })
1781
+ : [];
1782
+ if (clonedSelectedData[eachAttribute.id]) {
1783
+ var selectedList = clonedSelectedData[eachAttribute.id];
1784
+ var selectedKeys = Array.isArray(selectedList)
1785
+ ? selectedList
1786
+ : [selectedList];
1787
+ selectedKeys.forEach(function (key) {
1788
+ if (!optionList_2.some(function (item) { return item.key === key; })) {
1789
+ optionList_2.push({ key: key, label: key });
1790
+ }
1791
+ });
1792
+ }
1793
+ inputList.push(react_1.default.createElement(select_1.Select, { ref: eachAttribute.optional ? null : formInputRef[index], id: eachAttribute.id, value: (_d = clonedSelectedData[eachAttribute.id]) !== null && _d !== void 0 ? _d : (eachAttribute.type === "list" ? "" : []), label: label, options: optionList_2, onChange: function (value) {
1794
+ handleOnChangeSelect(eachAttribute.id, value);
1795
+ }, disabled: disabled }));
1796
+ break;
1797
+ case "boolean":
1798
+ var value = (_e = clonedSelectedData[eachAttribute.id]) === null || _e === void 0 ? void 0 : _e.toString();
1799
+ inputList.push(react_1.default.createElement(select_1.Select, { ref: eachAttribute.optional ? null : formInputRef[index], id: eachAttribute.id, value: value, label: label, options: [
1800
+ {
1801
+ key: "true",
1802
+ label: "True",
1803
+ },
1804
+ {
1805
+ key: "false",
1806
+ label: "False",
1807
+ },
1808
+ ], onChange: function (value) {
1809
+ handleOnChangeSelect(eachAttribute.id, value);
1810
+ }, disabled: disabled }));
1811
+ break;
1812
+ case "image":
1813
+ case "file":
1814
+ var hasImageToken = typeof clonedSelectedData[eachAttribute.id] === "string";
1815
+ var url = void 0;
1816
+ if (hasImageToken) {
1817
+ url = isObject
1818
+ ? isObjectList
1819
+ ? (0, utils_2.renderImageUrlFromPath)(props.imageEndpoint, eachAttribute.imageCollectionName +
1820
+ "%2F" +
1821
+ props.id +
1822
+ "%2F" +
1823
+ selectedObjectId, selectedObjectStructureId, eachAttribute.imageFileName, clonedSelectedData[eachAttribute.id])
1824
+ : (0, utils_2.renderImageUrlFromPath)(props.imageEndpoint, eachAttribute.imageCollectionName + "%2F" + props.id, selectedObjectStructureId, eachAttribute.imageFileName, clonedSelectedData[eachAttribute.id])
1825
+ : (0, utils_2.renderImageUrlFromPath)(props.imageEndpoint, eachAttribute.imageCollectionName, props.id, eachAttribute.imageFileName, clonedSelectedData[eachAttribute.id]);
1826
+ }
1827
+ inputList.push(react_1.default.createElement(uploadInput_1.UploadInput, { ref: eachAttribute.optional ? null : formInputRef[index], id: eachAttribute.id, label: label, hidePreview: eachAttribute.type === "image" ? false : true, file: (_f = url !== null && url !== void 0 ? url : clonedSelectedData[eachAttribute.id]) !== null && _f !== void 0 ? _f : "", accept: eachAttribute.type === "image" ? ".png,.jpg,.jpe,.tiff" : ".pdf", fileDescription: eachAttribute.type === "image" ? undefined : "PDF up to 30MB", maxFileSize: props.maxFileSize, onChange: handleOnChangeFile, disabled: disabled }));
1828
+ break;
1829
+ case "number":
1830
+ inputList.push(react_1.default.createElement(textInput_1.TextInput, { id: eachAttribute.id, ref: eachAttribute.optional ? null : formInputRef[index], type: "number", value: (_g = clonedSelectedData[eachAttribute.id]) !== null && _g !== void 0 ? _g : "", placeholder: label, label: label, onChange: handleOnChangeText, disabled: disabled }));
1831
+ break;
1832
+ case "reference":
1833
+ case "listReference":
1834
+ inputList.push(react_1.default.createElement(react_1.default.Fragment, null,
1835
+ react_1.default.createElement(select_1.Select, { ref: eachAttribute.optional ? null : formInputRef[index], id: eachAttribute.id, value: (_h = clonedSelectedData[eachAttribute.id]) !== null && _h !== void 0 ? _h : (eachAttribute.type === "reference" ? "" : []), label: label, options: isObject
1836
+ ? referencesOptions[selectedObjectStructureId + "." + eachAttribute.id]
1837
+ : (_j = referencesOptions[eachAttribute.id]) !== null && _j !== void 0 ? _j : [], onChange: function (value) {
1838
+ handleOnChangeSelect(eachAttribute.id, value);
1839
+ }, additional: referenceLoading ? exports.loadingSelect : exports.additionalSelect, onSearch: function (value) { return __awaiter(_this, void 0, void 0, function () {
1840
+ var clonedReferencesOptions, filterObjectModel;
1841
+ return __generator(this, function (_a) {
1842
+ switch (_a.label) {
1843
+ case 0:
1844
+ setReferenceLoading(true);
1845
+ clonedReferencesOptions = JSON.parse(JSON.stringify(referencesOptions));
1846
+ filterObjectModel = props.model.find(function (eachModel) {
1847
+ return eachModel.id === selectedObjectStructureId;
1848
+ });
1849
+ return [4 /*yield*/, handleRetrieveObjectReferenceOptions(eachAttribute, clonedReferencesOptions, clonedSelectedData, selectedObjectStructureId, (filterObjectModel === null || filterObjectModel === void 0 ? void 0 : filterObjectModel.type) === "listObject", value)];
1850
+ case 1:
1851
+ _a.sent();
1852
+ setReferencesOptions(clonedReferencesOptions);
1853
+ setReferenceLoading(false);
1854
+ return [2 /*return*/];
1855
+ }
1856
+ });
1857
+ }); }, disabled: disabled })));
1858
+ break;
1859
+ case "string":
1860
+ inputList.push(react_1.default.createElement(textInput_1.TextInput, { id: eachAttribute.id, ref: eachAttribute.optional ? null : formInputRef[index], type: "text", value: (_k = clonedSelectedData[eachAttribute.id]) !== null && _k !== void 0 ? _k : "", placeholder: label, label: label, onChange: handleOnChangeText, disabled: disabled }));
1861
+ break;
1862
+ case "date":
1863
+ inputList.push(react_1.default.createElement(datePicker_1.InputDatePicker, { title: label, id: eachAttribute.id, ref: eachAttribute.optional ? null : formInputRef[index], onChange: handleOnChangeDate, value: clonedSelectedData[eachAttribute.id], disabled: disabled }));
1864
+ break;
1865
+ }
1866
+ });
1867
+ return inputList.map(function (eachInput, index) {
1868
+ return (react_1.default.createElement("div", { key: index, className: "col-span-4 sm:col-span-2" }, eachInput));
1903
1869
  });
1904
- return queryStructureView;
1905
1870
  };
1906
- var renderNotification = function (location) {
1871
+ var renderDetailListData = function () {
1907
1872
  var _a;
1908
- if (notification) {
1909
- var correctIcon = (react_1.default.createElement(outline_1.CheckCircleIcon, { className: "w-10 h-10 text-primary-600" }));
1910
- var incorrectIcon = (react_1.default.createElement(outline_1.XCircleIcon, { className: "w-10 h-10 text-primary-600" }));
1911
- if (location === "modal" && !modalVisible)
1912
- return null;
1913
- if (location === "root" && modalVisible)
1914
- return null;
1915
- return (react_1.default.createElement(notification_1.Notification, { icon: notification.type ? correctIcon : incorrectIcon, notificationAttribute: {
1916
- title: notification.title,
1917
- desc: notification.msg,
1918
- visible: true,
1919
- }, lib: {
1920
- Transition: (_a = props.lib) === null || _a === void 0 ? void 0 : _a.Transition,
1921
- }, onClose: function () {
1922
- setNotification(null);
1923
- return "";
1924
- } }));
1873
+ var detailList = [];
1874
+ var _loop_5 = function (eachKey, eachValue) {
1875
+ if (eachKey !== "id" &&
1876
+ eachKey !== "_id" &&
1877
+ eachKey !== "baseUpdatedAt") {
1878
+ var filterModel = props.model.find(function (eachAttribute) {
1879
+ return eachAttribute.id === eachKey;
1880
+ });
1881
+ detailList.push({
1882
+ title: (_a = filterModel === null || filterModel === void 0 ? void 0 : filterModel.name) !== null && _a !== void 0 ? _a : "",
1883
+ text: eachValue,
1884
+ });
1885
+ }
1886
+ };
1887
+ for (var _i = 0, _b = Object.entries(selectedData); _i < _b.length; _i++) {
1888
+ var _c = _b[_i], eachKey = _c[0], eachValue = _c[1];
1889
+ _loop_5(eachKey, eachValue);
1890
+ }
1891
+ return detailList;
1892
+ };
1893
+ var renderListObject = function (type) {
1894
+ var isListObject = props.model.filter(function (eachAttribute) { return eachAttribute.type === "listObject"; });
1895
+ if (isListObject.length > 0) {
1896
+ var list_2 = {};
1897
+ var clonedSelectedData_1 = handleClonedDataAttribute(selectedData, props.model);
1898
+ return isListObject.map(function (eachListObject) {
1899
+ var _a;
1900
+ if (clonedSelectedData_1[eachListObject.id]) {
1901
+ clonedSelectedData_1[eachListObject.id].map(function (eachObject) {
1902
+ var eachNewList = {
1903
+ id: "",
1904
+ title: "",
1905
+ };
1906
+ var isTitle = true;
1907
+ var _loop_6 = function (eachKey, eachValue) {
1908
+ if (eachListObject.objectData) {
1909
+ var model = eachListObject.objectData.find(function (eachAttribute) {
1910
+ return eachAttribute.id === eachKey;
1911
+ });
1912
+ switch (model === null || model === void 0 ? void 0 : model.type) {
1913
+ case "string":
1914
+ isTitle
1915
+ ? (eachNewList["title"] =
1916
+ typeof eachValue === "string" ? eachValue : "")
1917
+ : (eachNewList[eachKey] = model.name + " : " + eachValue);
1918
+ isTitle = false;
1919
+ break;
1920
+ case "image":
1921
+ var url = void 0;
1922
+ if (typeof eachValue === "string") {
1923
+ url = (0, utils_2.renderImageUrlFromPath)(props.imageEndpoint, model.imageCollectionName +
1924
+ "%2F" +
1925
+ props.id +
1926
+ "%2F" +
1927
+ eachObject.id, eachListObject.id, model.imageFileName, eachValue);
1928
+ }
1929
+ else if (eachValue instanceof File) {
1930
+ url = URL.createObjectURL(eachValue);
1931
+ }
1932
+ eachNewList[eachKey] = (react_1.default.createElement("img", { src: url, alt: "", className: "w-10 h-10 object-contain" }));
1933
+ break;
1934
+ case "date":
1935
+ eachNewList[eachKey] =
1936
+ (model === null || model === void 0 ? void 0 : model.name) +
1937
+ " : " +
1938
+ (0, utils_1.renderEachRowDataBasedOnDataType)(eachValue);
1939
+ break;
1940
+ case "address":
1941
+ case "object":
1942
+ case "reference":
1943
+ break;
1944
+ default:
1945
+ if (eachKey === "id" && typeof eachValue === "string") {
1946
+ eachNewList[eachKey] = eachValue;
1947
+ }
1948
+ else {
1949
+ eachNewList[eachKey] = (model === null || model === void 0 ? void 0 : model.name) + " : " + eachValue;
1950
+ }
1951
+ break;
1952
+ }
1953
+ }
1954
+ };
1955
+ for (var _i = 0, _a = Object.entries(eachObject); _i < _a.length; _i++) {
1956
+ var _b = _a[_i], eachKey = _b[0], eachValue = _b[1];
1957
+ _loop_6(eachKey, eachValue);
1958
+ }
1959
+ if (list_2[eachListObject.id]) {
1960
+ list_2[eachListObject.id].push(eachNewList);
1961
+ }
1962
+ else {
1963
+ list_2[eachListObject.id] = [eachNewList];
1964
+ }
1965
+ return null;
1966
+ });
1967
+ }
1968
+ return (react_1.default.createElement(react_1.default.Fragment, null, !list_2[eachListObject.id] && type === "update" ? (react_1.default.createElement("button", { type: "button", className: "mt-5 relative block w-full rounded-lg border-2 border-dashed border-gray-300 p-12 text-center", onClick: function () {
1969
+ setSelectedObjectStructureId(eachListObject.id);
1970
+ handlePopUpModal(true);
1971
+ } },
1972
+ react_1.default.createElement("svg", { className: "mx-auto h-12 w-12 text-gray-400", stroke: "currentColor", fill: "none", viewBox: "0 0 48 48", "aria-hidden": "true" },
1973
+ react_1.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 14v20c0 4.418 7.163 8 16 8 1.381 0 2.721-.087 4-.252M8 14c0 4.418 7.163 8 16 8s16-3.582 16-8M8 14c0-4.418 7.163-8 16-8s16 3.582 16 8m0 0v14m0-4c0 4.418-7.163 8-16 8S8 28.418 8 24m32 10v6m0 0v6m0-6h6m-6 0h-6" })),
1974
+ react_1.default.createElement("span", { className: "mt-2 block text-sm font-medium text-gray-900" },
1975
+ "Create a new ", "".concat(eachListObject.name.toLocaleLowerCase())))) : (react_1.default.createElement(react_1.default.Fragment, null, list_2[eachListObject.id] && (react_1.default.createElement(react_1.default.Fragment, null,
1976
+ react_1.default.createElement("div", { className: "flex justify-between mt-5" },
1977
+ react_1.default.createElement("h3", { className: "text-md leading-6 font-medium text-gray-900 sm:text-lg" }, eachListObject.name),
1978
+ type === "update" && (react_1.default.createElement(iconButton_1.IconButton, { className: "sm", icon: react_1.default.createElement(outline_1.PlusCircleIcon, { className: "w-6 h-6 text-white" }), background: "bg-primary-500 hover:bg-primary-600", onClick: function () {
1979
+ setSelectedObjectStructureId(eachListObject.id);
1980
+ handlePopUpModal(true);
1981
+ } }))),
1982
+ react_1.default.createElement(list_1.List, { className: "mt-5", list: (_a = list_2[eachListObject.id]) !== null && _a !== void 0 ? _a : [], loading: false, onClickRow: function (id) {
1983
+ handleSelectListObjectData(id, eachListObject.id);
1984
+ } })))))));
1985
+ });
1986
+ }
1987
+ else {
1988
+ return react_1.default.createElement(react_1.default.Fragment, null);
1925
1989
  }
1926
- return null;
1927
1990
  };
1928
1991
  var renderContent = function () {
1929
1992
  var _a, _b, _c, _d, _e, _f;
@@ -1975,7 +2038,7 @@ function DataTemplate(props) {
1975
2038
  react_1.default.createElement("p", { className: "text-xl font-medium" }, props.title),
1976
2039
  react_1.default.createElement("span", { className: "text-sm text-gray-500" }, props.description)),
1977
2040
  props.deleteBtn && (react_1.default.createElement(button_1.Button, { text: "Delete", className: "ml-0 mt-5 sm:mt-0 sm:ml-5", type: "danger", onClick: function () {
1978
- handlePopUpModal(true);
2041
+ setDeleteModal(true);
1979
2042
  } })))),
1980
2043
  react_1.default.createElement(tabs_1.Tabs, { tabs: tabs, selectedId: viewType, linkType: props.linkType, custom: props.custom }),
1981
2044
  renderTabContent(tabs, props.type, viewType)))));
@@ -1986,7 +2049,7 @@ function DataTemplate(props) {
1986
2049
  current: true,
1987
2050
  });
1988
2051
  return (react_1.default.createElement(react_1.default.Fragment, null,
1989
- props.id && props.id !== "new" && (react_1.default.createElement(readQueryHoc_1.ReadQueryHoc, { database: {
2052
+ props.id && props.id !== "new" && props.model.length > 1 && (react_1.default.createElement(readQueryHoc_1.ReadQueryHoc, { database: {
1990
2053
  dbModule: dbModule,
1991
2054
  dbType: props.server,
1992
2055
  dbCollection: props.collectionId,
@@ -2001,7 +2064,7 @@ function DataTemplate(props) {
2001
2064
  react_1.default.createElement("p", { className: "text-xl font-medium" }, props.title),
2002
2065
  react_1.default.createElement("span", { className: "text-sm text-gray-500" }, props.description)),
2003
2066
  props.deleteBtn && (react_1.default.createElement(button_1.Button, { text: "Delete", className: "ml-0 mt-5 sm:mt-0 sm:ml-5", type: "danger", onClick: function () {
2004
- handlePopUpModal(true);
2067
+ setDeleteModal(true);
2005
2068
  } }))),
2006
2069
  react_1.default.createElement(form_1.Form, { className: "mt-6 grid grid-cols-4 gap-6", ref: formRef, refList: modalFormInputRefs, handleComplete: handleSubmit }, renderDataTemplateForm(selectedData, props.model, modalFormInputRefs)),
2007
2070
  react_1.default.createElement("div", { className: "mt-8" }, renderListObject(props.type)),
@@ -2056,17 +2119,17 @@ function DataTemplate(props) {
2056
2119
  var searchQueryExist = false;
2057
2120
  props.additionalQuery.map(function (eachSettings) {
2058
2121
  if (eachSettings.type === "list" && filterSelection) {
2059
- var currentValue = eachSettings.value;
2060
- if (currentValue === "false" || currentValue === "true") {
2061
- currentValue = currentValue === "false" ? false : true;
2122
+ var currentSelection = filterSelection;
2123
+ if (currentSelection === "false" || currentSelection === "true") {
2124
+ currentSelection = currentSelection === "false" ? false : true;
2062
2125
  }
2063
- else if (!isNaN(currentValue)) {
2064
- currentValue = Number(currentValue);
2126
+ else if (!isNaN(currentSelection)) {
2127
+ currentSelection = Number(currentSelection);
2065
2128
  }
2066
2129
  query.push({
2067
2130
  type: "=",
2068
2131
  queryId: eachSettings.value,
2069
- value: filterSelection,
2132
+ value: currentSelection,
2070
2133
  });
2071
2134
  }
2072
2135
  else if (eachSettings.type === "reference" && filterReference)
@@ -2179,10 +2242,70 @@ function DataTemplate(props) {
2179
2242
  }
2180
2243
  return searchFilterList;
2181
2244
  };
2245
+ //=====================================================================================
2246
+ //SECTION: Render Utils
2247
+ //=====================================================================================
2248
+ var renderTabContent = function (tabs, dataType, viewType) {
2249
+ var _a, _b, _c, _d;
2250
+ var selectedTabData = tabs.find(function (eachTab) {
2251
+ if (eachTab.id === viewType) {
2252
+ return eachTab;
2253
+ }
2254
+ else {
2255
+ return null;
2256
+ }
2257
+ });
2258
+ if (viewType === "general") {
2259
+ if (dataType === "list") {
2260
+ return (react_1.default.createElement(table_1.Table, { paginationType: props.server === "mongoServer" ? "page" : "cursor", data: tableData, size: size, limit: limit, cursor: cursor, loading: tableLoading, header: renderTableHeader(), pageIndex: pageIndex, onClickRow: function (id) {
2261
+ handleNavigate("".concat(props.localURLEndpoint, "?data=").concat(id, "&type=read&collection=").concat(props.collectionId, "&view=general"));
2262
+ }, linkType: props.linkType, custom: props.custom, newTabUrl: "".concat(props.localURLEndpoint, "?data="), addNewTabUrl: "&type=read&collection=".concat(props.collectionId, "&view=general"), handleUpdatePageIndex: handlePagination, className: "mt-5" }));
2263
+ }
2264
+ else if (dataType === "read") {
2265
+ return (react_1.default.createElement(react_1.default.Fragment, null,
2266
+ react_1.default.createElement(detailList_1.DetailList, { lib: {
2267
+ Dialog: (_a = props.lib) === null || _a === void 0 ? void 0 : _a.Dialog,
2268
+ Transition: (_b = props.lib) === null || _b === void 0 ? void 0 : _b.Transition,
2269
+ }, model: props.model, referenceModel: referenceModelSchema, className: "mt-5 bg-white rounded-md", title: "General Details", list: renderDetailListData() }),
2270
+ react_1.default.createElement("div", { className: "mt-8" }, renderListObject(dataType))));
2271
+ }
2272
+ }
2273
+ else if (selectedTabData) {
2274
+ if (selectedTabData.iframeSrc) {
2275
+ return (react_1.default.createElement("iframe", { className: "w-full mt-5", style: { height: "70vh" }, src: (_c = selectedTabData === null || selectedTabData === void 0 ? void 0 : selectedTabData.iframeSrc) !== null && _c !== void 0 ? _c : "", title: (_d = selectedTabData === null || selectedTabData === void 0 ? void 0 : selectedTabData.id) !== null && _d !== void 0 ? _d : "" }));
2276
+ }
2277
+ else if (selectedTabData.renderComp) {
2278
+ return react_1.default.createElement(react_1.default.Fragment, null, selectedTabData.renderComp());
2279
+ }
2280
+ }
2281
+ return null;
2282
+ };
2283
+ var renderNotification = function (location) {
2284
+ var _a;
2285
+ if (notification) {
2286
+ var correctIcon = (react_1.default.createElement(outline_1.CheckCircleIcon, { className: "w-10 h-10 text-primary-600" }));
2287
+ var incorrectIcon = (react_1.default.createElement(outline_1.XCircleIcon, { className: "w-10 h-10 text-primary-600" }));
2288
+ if (location === "modal" && !modalVisible)
2289
+ return null;
2290
+ if (location === "root" && modalVisible)
2291
+ return null;
2292
+ return (react_1.default.createElement(notification_1.Notification, { icon: notification.type ? correctIcon : incorrectIcon, notificationAttribute: {
2293
+ title: notification.title,
2294
+ desc: notification.msg,
2295
+ visible: true,
2296
+ }, lib: {
2297
+ Transition: (_a = props.lib) === null || _a === void 0 ? void 0 : _a.Transition,
2298
+ }, onClose: function () {
2299
+ setNotification(null);
2300
+ return "";
2301
+ } }));
2302
+ }
2303
+ return null;
2304
+ };
2182
2305
  var renderModalContent = function () {
2183
2306
  var _a;
2184
2307
  if (loading) {
2185
- return (react_1.default.createElement(react_1.default.Fragment, null,
2308
+ return (react_1.default.createElement("div", { className: "mt-5" },
2186
2309
  react_1.default.createElement(loading_1.Loading, null),
2187
2310
  react_1.default.createElement("div", { className: "mt-3 text-center sm:mt-5" },
2188
2311
  react_1.default.createElement("h3", { className: "text-lg leading-6 font-medium text-gray-900", id: "modal-title" }, "Loading"),
@@ -2249,37 +2372,47 @@ function DataTemplate(props) {
2249
2372
  }); } }))));
2250
2373
  }
2251
2374
  else {
2252
- return (react_1.default.createElement(react_1.default.Fragment, null,
2253
- react_1.default.createElement("div", { className: "px-3 sm:px-0" },
2254
- react_1.default.createElement("div", { className: "flex" },
2255
- react_1.default.createElement("h2", { className: "mt-2 mb-2 text-xl font-bold text-gray-900" }, "Delete Confirmation")),
2256
- react_1.default.createElement("p", { className: "mt-2 mb-2" }, "Are you sure you want to delete this data?"),
2257
- react_1.default.createElement("div", { className: "flex flex-row space-x-2 mt-6 pt-5 justify-end" },
2258
- react_1.default.createElement(button_1.Button, { text: "Close", size: "small", type: "light", onClick: function () {
2259
- handlePopUpModal(false);
2260
- } }),
2261
- react_1.default.createElement(button_1.Button, { text: "Delete", size: "small", type: "danger", onClick: function () {
2262
- handleRemoveSelectedData();
2263
- } })))));
2375
+ return react_1.default.createElement(react_1.default.Fragment, null);
2264
2376
  }
2265
2377
  }
2266
2378
  };
2379
+ var renderDeleteModalContent = function () {
2380
+ return (react_1.default.createElement(react_1.default.Fragment, null,
2381
+ react_1.default.createElement("div", { className: "px-3 sm:px-0" },
2382
+ react_1.default.createElement("div", { className: "flex" },
2383
+ react_1.default.createElement("h2", { className: "mt-2 mb-2 text-xl font-bold text-gray-900" }, "Delete Confirmation")),
2384
+ react_1.default.createElement("p", { className: "mt-2 mb-2" }, "Are you sure you want to delete this data?"),
2385
+ react_1.default.createElement("div", { className: "flex flex-row space-x-2 mt-6 pt-5 justify-end" },
2386
+ react_1.default.createElement(button_1.Button, { text: "Close", size: "small", type: "light", onClick: function () {
2387
+ handlePopUpModal(false);
2388
+ } }),
2389
+ react_1.default.createElement(button_1.Button, { text: "Delete", size: "small", type: "danger", onClick: function () {
2390
+ handleRemoveSelectedData();
2391
+ } })))));
2392
+ };
2267
2393
  var renderModalTitle = function () {
2268
2394
  if (excelModal)
2269
2395
  return "Import CSV";
2396
+ else if (queryModal)
2397
+ return "Create a new Query";
2270
2398
  else if (exportExcel)
2271
2399
  return "Export CSV";
2272
2400
  else
2273
2401
  return "";
2274
2402
  };
2403
+ var handleClosePopUpModal = function () {
2404
+ handlePopUpModal(false);
2405
+ };
2275
2406
  return (react_1.default.createElement(react_1.default.Fragment, null,
2276
2407
  renderNotification("root"),
2277
- react_1.default.createElement(modal_1.Modal, { open: modalVisible, title: renderModalTitle(), lib: { Dialog: (_d = props.lib) === null || _d === void 0 ? void 0 : _d.Dialog, Transition: (_e = props.lib) === null || _e === void 0 ? void 0 : _e.Transition }, renderContent: renderModalContent, onClose: loading
2408
+ react_1.default.createElement(modal_1.Modal, { maxWidth: selectedObjectStructureId ? "2xl" : undefined, open: modalVisible || queryModal, title: renderModalTitle(), lib: { Dialog: (_d = props.lib) === null || _d === void 0 ? void 0 : _d.Dialog, Transition: (_e = props.lib) === null || _e === void 0 ? void 0 : _e.Transition }, renderContent: queryModal ? renderQueryModalContent : renderModalContent, onClose: loading
2278
2409
  ? function () { }
2279
- : function () {
2280
- handlePopUpModal(false);
2281
- }, notification: react_1.default.createElement(react_1.default.Fragment, null, renderNotification("modal")) }),
2282
- react_1.default.createElement(modal_1.Modal, { title: "Create a new Query", open: queryModal, lib: { Dialog: (_f = props.lib) === null || _f === void 0 ? void 0 : _f.Dialog, Transition: (_g = props.lib) === null || _g === void 0 ? void 0 : _g.Transition }, renderContent: renderQueryModalContent, onClose: handleQueryModal, notification: react_1.default.createElement(react_1.default.Fragment, null, renderNotification("modal")) }),
2410
+ : queryModal
2411
+ ? handleQueryModal
2412
+ : handleClosePopUpModal, notification: react_1.default.createElement(react_1.default.Fragment, null, renderNotification("modal")) }),
2413
+ react_1.default.createElement(modal_1.Modal, { open: deleteModal, lib: { Dialog: (_f = props.lib) === null || _f === void 0 ? void 0 : _f.Dialog, Transition: (_g = props.lib) === null || _g === void 0 ? void 0 : _g.Transition }, renderContent: renderDeleteModalContent, onClose: function () {
2414
+ setDeleteModal(!deleteModal);
2415
+ }, notification: react_1.default.createElement(react_1.default.Fragment, null, renderNotification("modal")) }),
2283
2416
  renderContent()));
2284
2417
  }
2285
2418
  exports.DataTemplate = DataTemplate;