blixify-ui-web 1.2.20 → 1.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/lib/components/data/dataTemplate/index.d.ts.map +1 -1
  2. package/lib/components/data/dataTemplate/index.js +933 -323
  3. package/lib/components/data/dataTemplate/index.js.map +1 -1
  4. package/lib/components/data/dataTemplate/indexedDb.d.ts +20 -0
  5. package/lib/components/data/dataTemplate/indexedDb.d.ts.map +1 -1
  6. package/lib/components/data/dataTemplate/indexedDb.js +86 -0
  7. package/lib/components/data/dataTemplate/indexedDb.js.map +1 -1
  8. package/lib/components/data/dataTemplate/model.d.ts +77 -0
  9. package/lib/components/data/dataTemplate/model.d.ts.map +1 -1
  10. package/lib/components/data/dataTemplate/socket.d.ts +34 -0
  11. package/lib/components/data/dataTemplate/socket.d.ts.map +1 -0
  12. package/lib/components/data/dataTemplate/socket.js +161 -0
  13. package/lib/components/data/dataTemplate/socket.js.map +1 -0
  14. package/lib/components/data/dataTemplate/workspaceModel.d.ts +6 -0
  15. package/lib/components/data/dataTemplate/workspaceModel.d.ts.map +1 -1
  16. package/lib/components/data/readQueryHoc/index.d.ts.map +1 -1
  17. package/lib/components/data/readQueryHoc/index.js +61 -15
  18. package/lib/components/data/readQueryHoc/index.js.map +1 -1
  19. package/lib/components/data/testSchema.d.ts.map +1 -1
  20. package/lib/components/data/testSchema.js +1 -0
  21. package/lib/components/data/testSchema.js.map +1 -1
  22. package/lib/components/data/updateModule.d.ts.map +1 -1
  23. package/lib/components/data/updateModule.js +32 -10
  24. package/lib/components/data/updateModule.js.map +1 -1
  25. package/lib/components/data/utils.d.ts.map +1 -1
  26. package/lib/components/data/utils.js +2 -0
  27. package/lib/components/data/utils.js.map +1 -1
  28. package/package.json +1 -1
@@ -142,13 +142,14 @@ var activityModal_1 = require("./activityModal");
142
142
  var authModal_1 = require("./authModal");
143
143
  var dataStateModel_1 = require("./dataStateModel");
144
144
  var indexedDb_1 = require("./indexedDb");
145
+ var socket_1 = require("./socket");
145
146
  var pagination_1 = require("./pagination");
146
147
  var referenceModal_1 = require("./referenceModal");
147
148
  var settingsModal_1 = require("./settingsModal");
148
149
  var flexFilterModel_1 = require("./flexFilterModel");
149
150
  var flexFilterModule_1 = require("./flexFilterModule");
150
151
  exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
151
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41;
152
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44;
152
153
  var intialiseDefaultFilterValues = function () {
153
154
  var _a;
154
155
  var initialFilterSearch = {};
@@ -209,136 +210,143 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
209
210
  initialFilterReferenceDate: initialFilterReferenceDate,
210
211
  };
211
212
  };
212
- var _42 = intialiseDefaultFilterValues(), initialFilterSearch = _42.initialFilterSearch, initialFilterSearchParams = _42.initialFilterSearchParams, initialFilterSelection = _42.initialFilterSelection, initialFilterReference = _42.initialFilterReference, initialFilterReferenceDate = _42.initialFilterReferenceDate;
213
- var _43 = (0, react_1.useState)(false), loading = _43[0], setLoading = _43[1];
214
- var _44 = (0, react_1.useState)(), notification = _44[0], setNotification = _44[1];
213
+ var _45 = intialiseDefaultFilterValues(), initialFilterSearch = _45.initialFilterSearch, initialFilterSearchParams = _45.initialFilterSearchParams, initialFilterSelection = _45.initialFilterSelection, initialFilterReference = _45.initialFilterReference, initialFilterReferenceDate = _45.initialFilterReferenceDate;
214
+ var _46 = (0, react_1.useState)(false), loading = _46[0], setLoading = _46[1];
215
+ var _47 = (0, react_1.useState)(), notification = _47[0], setNotification = _47[1];
215
216
  //INFO : Used by List
216
- var _45 = (0, react_1.useState)(initialFilterSearch), filterSearch = _45[0], setFilterSearch = _45[1];
217
- var _46 = (0, react_1.useState)(initialFilterSearchParams), filterSearchParams = _46[0], setFilterSearchParams = _46[1];
218
- var _47 = (0, react_1.useState)(initialFilterSelection), filterSelection = _47[0], setFilterSelection = _47[1];
219
- var _48 = (0, react_1.useState)(initialFilterReference), filterReference = _48[0], setFilterReference = _48[1];
220
- var _49 = (0, react_1.useState)({}), filterReferenceSearch = _49[0], setFilterReferenceSearch = _49[1];
221
- var _50 = (0, react_1.useState)({}), filterReferenceList = _50[0], setFilterReferenceList = _50[1];
222
- var _51 = (0, react_1.useState)(initialFilterReferenceDate), filterReferenceDate = _51[0], setFilterReferenceDate = _51[1];
223
- var _52 = (0, react_1.useState)(true), tableLoading = _52[0], setTableLoading = _52[1];
224
- var _53 = (0, react_1.useState)(""), cursor = _53[0], setCursor = _53[1];
225
- var _54 = (0, react_1.useState)(""), lastCursor = _54[0], setLastCursor = _54[1];
226
- var _55 = (0, react_1.useState)([]), tableData = _55[0], setTableData = _55[1];
227
- var _56 = (0, react_1.useState)([]), spaceTableData = _56[0], setSpaceTableData = _56[1];
228
- var _57 = (0, react_1.useState)(0), size = _57[0], setSize = _57[1];
229
- var _58 = (0, react_1.useState)((_b = (_a = props.organise) === null || _a === void 0 ? void 0 : _a.pageIndex) !== null && _b !== void 0 ? _b : 0), pageIndex = _58[0], setPageIndex = _58[1];
230
- var _59 = (0, react_1.useState)([]), selectedIds = _59[0], setSelectedIds = _59[1];
231
- var _60 = (0, react_1.useState)(false), selectAll = _60[0], setSelectAll = _60[1];
232
- var _61 = (0, react_1.useState)(""), deletePasscode = _61[0], setDeletePasscode = _61[1];
233
- var _62 = (0, react_1.useState)(""), deletePasscodeInput = _62[0], setDeletePasscodeInput = _62[1];
234
- var _63 = (0, react_1.useState)(""), deleteFeedId = _63[0], setDeleteFeedId = _63[1];
217
+ var _48 = (0, react_1.useState)(initialFilterSearch), filterSearch = _48[0], setFilterSearch = _48[1];
218
+ var _49 = (0, react_1.useState)(initialFilterSearchParams), filterSearchParams = _49[0], setFilterSearchParams = _49[1];
219
+ var _50 = (0, react_1.useState)(initialFilterSelection), filterSelection = _50[0], setFilterSelection = _50[1];
220
+ var _51 = (0, react_1.useState)(initialFilterReference), filterReference = _51[0], setFilterReference = _51[1];
221
+ var _52 = (0, react_1.useState)({}), filterReferenceSearch = _52[0], setFilterReferenceSearch = _52[1];
222
+ var _53 = (0, react_1.useState)({}), filterReferenceList = _53[0], setFilterReferenceList = _53[1];
223
+ var _54 = (0, react_1.useState)(initialFilterReferenceDate), filterReferenceDate = _54[0], setFilterReferenceDate = _54[1];
224
+ var _55 = (0, react_1.useState)(true), tableLoading = _55[0], setTableLoading = _55[1];
225
+ var _56 = (0, react_1.useState)(""), cursor = _56[0], setCursor = _56[1];
226
+ var _57 = (0, react_1.useState)(""), lastCursor = _57[0], setLastCursor = _57[1];
227
+ var _58 = (0, react_1.useState)([]), tableData = _58[0], setTableData = _58[1];
228
+ var _59 = (0, react_1.useState)([]), spaceTableData = _59[0], setSpaceTableData = _59[1];
229
+ var _60 = (0, react_1.useState)(0), size = _60[0], setSize = _60[1];
230
+ var _61 = (0, react_1.useState)((_b = (_a = props.organise) === null || _a === void 0 ? void 0 : _a.pageIndex) !== null && _b !== void 0 ? _b : 0), pageIndex = _61[0], setPageIndex = _61[1];
231
+ var _62 = (0, react_1.useState)([]), selectedIds = _62[0], setSelectedIds = _62[1];
232
+ var _63 = (0, react_1.useState)(false), selectAll = _63[0], setSelectAll = _63[1];
233
+ var _64 = (0, react_1.useState)(""), deletePasscode = _64[0], setDeletePasscode = _64[1];
234
+ var _65 = (0, react_1.useState)(""), deletePasscodeInput = _65[0], setDeletePasscodeInput = _65[1];
235
+ var _66 = (0, react_1.useState)(""), deleteFeedId = _66[0], setDeleteFeedId = _66[1];
235
236
  //INFO : Used by List Organise
236
- var _64 = (0, react_1.useState)(false), sortModal = _64[0], setSortModal = _64[1];
237
- var _65 = (0, react_1.useState)(false), filterModal = _65[0], setFilterModal = _65[1];
238
- var _66 = (0, react_1.useState)(false), filterDraft = _66[0], setFilterDraft = _66[1];
239
- var _67 = (0, react_1.useState)(false), addTabModal = _67[0], setAddTabModal = _67[1];
240
- var _68 = (0, react_1.useState)(false), overviewModal = _68[0], setOverviewModal = _68[1];
241
- var _69 = (0, react_1.useState)(props.defaultTab
237
+ var _67 = (0, react_1.useState)(false), sortModal = _67[0], setSortModal = _67[1];
238
+ var _68 = (0, react_1.useState)(false), filterModal = _68[0], setFilterModal = _68[1];
239
+ var _69 = (0, react_1.useState)(false), filterDraft = _69[0], setFilterDraft = _69[1];
240
+ var _70 = (0, react_1.useState)(false), addTabModal = _70[0], setAddTabModal = _70[1];
241
+ var _71 = (0, react_1.useState)(false), overviewModal = _71[0], setOverviewModal = _71[1];
242
+ var _72 = (0, react_1.useState)(props.defaultTab
242
243
  ? (0, listModule_1.renderSelectedRefreshTab)(props.localURLEndpoint, props.type, props.collectionId, props.id, (_c = props.organise) === null || _c === void 0 ? void 0 : _c.extendedTabs, (_d = props.organise) === null || _d === void 0 ? void 0 : _d.viewId)
243
- : ""), selectedTab = _69[0], setSelectedTab = _69[1];
244
- var _70 = (0, react_1.useState)("dayGridMonth"), calendarView = _70[0], setCalendarView = _70[1];
245
- var _71 = (0, react_1.useState)(new Date()), calendarTabMonth = _71[0], setCalendarTabMonth = _71[1];
246
- var _72 = (0, react_1.useState)(true), kanbanDroppable = _72[0], setKanbanDroppable = _72[1];
247
- var _73 = (0, react_1.useState)([]), kanbanOptions = _73[0], setKanbanOptions = _73[1];
248
- var _74 = (0, react_1.useState)(false), queryForm = _74[0], setQueryForm = _74[1];
249
- var _75 = (0, react_1.useState)(false), batchUpdateModal = _75[0], setBatchUpdateModal = _75[1];
250
- var _76 = (0, react_1.useState)({
244
+ : ""), selectedTab = _72[0], setSelectedTab = _72[1];
245
+ var _73 = (0, react_1.useState)("dayGridMonth"), calendarView = _73[0], setCalendarView = _73[1];
246
+ var _74 = (0, react_1.useState)(new Date()), calendarTabMonth = _74[0], setCalendarTabMonth = _74[1];
247
+ var _75 = (0, react_1.useState)(true), kanbanDroppable = _75[0], setKanbanDroppable = _75[1];
248
+ var _76 = (0, react_1.useState)([]), kanbanOptions = _76[0], setKanbanOptions = _76[1];
249
+ var _77 = (0, react_1.useState)(false), queryForm = _77[0], setQueryForm = _77[1];
250
+ var _78 = (0, react_1.useState)(false), batchUpdateModal = _78[0], setBatchUpdateModal = _78[1];
251
+ var _79 = (0, react_1.useState)({
251
252
  columnId: "",
252
253
  columnData: {},
253
- }), batchUpdateData = _76[0], setBatchUpdateData = _76[1];
254
- var _77 = (0, react_1.useState)((props === null || props === void 0 ? void 0 : props.model) || []), structure = _77[0], setStructure = _77[1];
255
- var _78 = (0, react_1.useState)(((_e = props === null || props === void 0 ? void 0 : props.organise) === null || _e === void 0 ? void 0 : _e.additionalQuery) || []), additionalQuery = _78[0], setAdditionalQuery = _78[1];
254
+ }), batchUpdateData = _79[0], setBatchUpdateData = _79[1];
255
+ var _80 = (0, react_1.useState)((props === null || props === void 0 ? void 0 : props.model) || []), structure = _80[0], setStructure = _80[1];
256
+ var _81 = (0, react_1.useState)(((_e = props === null || props === void 0 ? void 0 : props.organise) === null || _e === void 0 ? void 0 : _e.additionalQuery) || []), additionalQuery = _81[0], setAdditionalQuery = _81[1];
256
257
  // INFO: State for user-configurable flex filters (Monday.com-style)
257
258
  // INFO: Initialize with one empty row so users see inputs immediately without clicking "Add Filter"
258
- var _79 = (0, react_1.useState)([
259
+ var _82 = (0, react_1.useState)([
259
260
  {
260
261
  id: "flex-filter-init-row",
261
262
  columnId: "",
262
263
  operator: "=",
263
264
  value: undefined,
264
265
  },
265
- ]), flexFilters = _79[0], setFlexFilters = _79[1];
266
- var _80 = (0, react_1.useState)({}), flexFilterReferenceOptions = _80[0], setFlexFilterReferenceOptions = _80[1];
267
- var _81 = (0, react_1.useState)({}), flexFilterReferenceSearch = _81[0], setFlexFilterReferenceSearch = _81[1];
268
- var _82 = (0, react_1.useState)(false), flexFilterModalOpen = _82[0], setFlexFilterModalOpen = _82[1];
266
+ ]), flexFilters = _82[0], setFlexFilters = _82[1];
267
+ var _83 = (0, react_1.useState)({}), flexFilterReferenceOptions = _83[0], setFlexFilterReferenceOptions = _83[1];
268
+ var _84 = (0, react_1.useState)({}), flexFilterReferenceSearch = _84[0], setFlexFilterReferenceSearch = _84[1];
269
+ var _85 = (0, react_1.useState)(false), flexFilterModalOpen = _85[0], setFlexFilterModalOpen = _85[1];
269
270
  //INFO : Used by Auth
270
- var _83 = (0, react_1.useState)({
271
+ var _86 = (0, react_1.useState)({
271
272
  email: "",
272
273
  google: "",
273
274
  phone: "",
274
275
  disabled: false,
275
276
  create: false,
276
- }), authMethods = _83[0], setAuthMethods = _83[1];
277
- var _84 = (0, react_1.useState)(""), selectedAuthMethod = _84[0], setSelectedAuthMethod = _84[1];
277
+ }), authMethods = _86[0], setAuthMethods = _86[1];
278
+ var _87 = (0, react_1.useState)(""), selectedAuthMethod = _87[0], setSelectedAuthMethod = _87[1];
278
279
  // INFO: Used by Activity Log
279
- var _85 = (0, react_1.useState)(false), activityModal = _85[0], setActivityModal = _85[1];
280
- var _86 = (0, react_1.useState)(""), activityId = _86[0], setActivityId = _86[1];
280
+ var _88 = (0, react_1.useState)(false), activityModal = _88[0], setActivityModal = _88[1];
281
+ var _89 = (0, react_1.useState)(""), activityId = _89[0], setActivityId = _89[1];
281
282
  //INFO : Used by Export
282
- var _87 = (0, react_1.useState)(null), csvFile = _87[0], setCSVFile = _87[1];
283
- var _88 = (0, react_1.useState)([]), csvFileData = _88[0], setCSVFileData = _88[1];
284
- var _89 = (0, react_1.useState)(0), stepCSVIndex = _89[0], setStepCSVIndex = _89[1];
285
- var _90 = (0, react_1.useState)({}), listCSVMapAttribute = _90[0], setListCSVMapAttribute = _90[1];
286
- var _91 = (0, react_1.useState)({}), listCSVObjAttribute = _91[0], setListCSVObjAttribute = _91[1];
287
- var _92 = (0, react_1.useState)([]), csvAPIAttribute = _92[0], setCSVAPIAttribute = _92[1];
288
- var _93 = (0, react_1.useState)(((_f = props.devSettings.currentUser) === null || _f === void 0 ? void 0 : _f.userEmail) || ""), exportCSVEmail = _93[0], setExportCSVEmail = _93[1];
289
- var _94 = (0, react_1.useState)(((_h = (_g = props.organise) === null || _g === void 0 ? void 0 : _g.exportSettings) === null || _h === void 0 ? void 0 : _h.defaultExportPDFName) || ""), exportPDFTitle = _94[0], setExportPDFTitle = _94[1];
290
- var _95 = (0, react_1.useState)(false), exportPDFLoading = _95[0], setExportPDFLoading = _95[1];
291
- var _96 = (0, react_1.useState)(false), exportReadPDFLoading = _96[0], setExportReadPDFLoading = _96[1];
292
- var _97 = (0, react_1.useState)((_l = (_k = (_j = props.organise) === null || _j === void 0 ? void 0 : _j.exportSettings) === null || _k === void 0 ? void 0 : _k.sumColumnId) !== null && _l !== void 0 ? _l : []), exportSumAttributeIds = _97[0], setExportSumAttributeIds = _97[1];
293
- var _98 = (0, react_1.useState)((_p = (_o = (_m = props.organise) === null || _m === void 0 ? void 0 : _m.exportSettings) === null || _o === void 0 ? void 0 : _o.hideSubItems) !== null && _p !== void 0 ? _p : false), hideSubItems = _98[0], setHideSubItems = _98[1];
294
- var _99 = (0, react_1.useState)([]), importTableData = _99[0], setImportTableData = _99[1];
295
- var _100 = (0, react_1.useState)([]), queryList = _100[0], setQueryList = _100[1];
296
- var _101 = (0, react_1.useState)(undefined), allQueryList = _101[0], setAllQueryList = _101[1];
297
- var _102 = (0, react_1.useState)(-1), queryIndex = _102[0], setQueryIndex = _102[1];
298
- var _103 = (0, react_1.useState)((_q = props.organise) === null || _q === void 0 ? void 0 : _q.groupBy), groupId = _103[0], setGroupId = _103[1];
299
- var _104 = (0, react_1.useState)(""), readTabSection = _104[0], setReadTabSection = _104[1];
300
- var _105 = (0, react_1.useState)(false), readFloatingNav = _105[0], setReadFloatingNav = _105[1];
283
+ var _90 = (0, react_1.useState)(null), csvFile = _90[0], setCSVFile = _90[1];
284
+ var _91 = (0, react_1.useState)([]), csvFileData = _91[0], setCSVFileData = _91[1];
285
+ var _92 = (0, react_1.useState)(0), stepCSVIndex = _92[0], setStepCSVIndex = _92[1];
286
+ var _93 = (0, react_1.useState)({}), listCSVMapAttribute = _93[0], setListCSVMapAttribute = _93[1];
287
+ var _94 = (0, react_1.useState)({}), listCSVObjAttribute = _94[0], setListCSVObjAttribute = _94[1];
288
+ var _95 = (0, react_1.useState)([]), csvAPIAttribute = _95[0], setCSVAPIAttribute = _95[1];
289
+ var _96 = (0, react_1.useState)(((_f = props.devSettings.currentUser) === null || _f === void 0 ? void 0 : _f.userEmail) || ""), exportCSVEmail = _96[0], setExportCSVEmail = _96[1];
290
+ var _97 = (0, react_1.useState)(((_h = (_g = props.organise) === null || _g === void 0 ? void 0 : _g.exportSettings) === null || _h === void 0 ? void 0 : _h.defaultExportPDFName) || ""), exportPDFTitle = _97[0], setExportPDFTitle = _97[1];
291
+ var _98 = (0, react_1.useState)(false), exportPDFLoading = _98[0], setExportPDFLoading = _98[1];
292
+ var _99 = (0, react_1.useState)(false), exportReadPDFLoading = _99[0], setExportReadPDFLoading = _99[1];
293
+ var _100 = (0, react_1.useState)((_l = (_k = (_j = props.organise) === null || _j === void 0 ? void 0 : _j.exportSettings) === null || _k === void 0 ? void 0 : _k.sumColumnId) !== null && _l !== void 0 ? _l : []), exportSumAttributeIds = _100[0], setExportSumAttributeIds = _100[1];
294
+ var _101 = (0, react_1.useState)((_p = (_o = (_m = props.organise) === null || _m === void 0 ? void 0 : _m.exportSettings) === null || _o === void 0 ? void 0 : _o.hideSubItems) !== null && _p !== void 0 ? _p : false), hideSubItems = _101[0], setHideSubItems = _101[1];
295
+ var _102 = (0, react_1.useState)([]), importTableData = _102[0], setImportTableData = _102[1];
296
+ var _103 = (0, react_1.useState)([]), queryList = _103[0], setQueryList = _103[1];
297
+ var _104 = (0, react_1.useState)(undefined), allQueryList = _104[0], setAllQueryList = _104[1];
298
+ var _105 = (0, react_1.useState)(-1), queryIndex = _105[0], setQueryIndex = _105[1];
299
+ var _106 = (0, react_1.useState)((_q = props.organise) === null || _q === void 0 ? void 0 : _q.groupBy), groupId = _106[0], setGroupId = _106[1];
300
+ var _107 = (0, react_1.useState)(""), readTabSection = _107[0], setReadTabSection = _107[1];
301
+ var _108 = (0, react_1.useState)(false), readFloatingNav = _108[0], setReadFloatingNav = _108[1];
301
302
  var readTabSectionRefs = (0, react_1.useRef)({});
302
303
  //INFO : Used by Read
303
304
  //INFO : Used by Update
304
- var _106 = (0, react_1.useState)(false), modalVisible = _106[0], setModalVisible = _106[1];
305
- var _107 = (0, react_1.useState)(false), deleteModal = _107[0], setDeleteModal = _107[1];
306
- var _108 = (0, react_1.useState)(false), excelModal = _108[0], setExcelModal = _108[1];
307
- var _109 = (0, react_1.useState)(false), exportExcel = _109[0], setExportExcel = _109[1];
308
- var _110 = (0, react_1.useState)(""), exportType = _110[0], setExportType = _110[1];
309
- var _111 = (0, react_1.useState)(false), exportQR = _111[0], setExportQR = _111[1];
310
- var _112 = (0, react_1.useState)(function () {
305
+ var _109 = (0, react_1.useState)(false), modalVisible = _109[0], setModalVisible = _109[1];
306
+ var _110 = (0, react_1.useState)(false), deleteModal = _110[0], setDeleteModal = _110[1];
307
+ var _111 = (0, react_1.useState)(false), excelModal = _111[0], setExcelModal = _111[1];
308
+ var _112 = (0, react_1.useState)(false), exportExcel = _112[0], setExportExcel = _112[1];
309
+ var _113 = (0, react_1.useState)(""), exportType = _113[0], setExportType = _113[1];
310
+ var _114 = (0, react_1.useState)(false), exportQR = _114[0], setExportQR = _114[1];
311
+ var _115 = (0, react_1.useState)(function () {
311
312
  var _a, _b;
312
313
  var firstTabId = (_b = (_a = structure.find(function (item) { return item.tabId; })) === null || _a === void 0 ? void 0 : _a.tabId) !== null && _b !== void 0 ? _b : "";
313
314
  return firstTabId;
314
- }), activeTab = _112[0], setActiveTab = _112[1];
315
- var _113 = (0, react_1.useState)(false), signatureSigning = _113[0], setSignatureSigning = _113[1];
316
- var _114 = (0, react_1.useState)({}), selectedData = _114[0], setSelectedData = _114[1];
317
- var _115 = (0, react_1.useState)(""), selectedObjectStructureId = _115[0], setSelectedObjectStructureId = _115[1];
318
- var _116 = (0, react_1.useState)(""), selectedObjectId = _116[0], setSelectedObjectId = _116[1];
319
- var _117 = (0, react_1.useState)(""), selectedListAddressId = _117[0], setSelectedListAddressId = _117[1];
320
- var _118 = (0, react_1.useState)(-1), selectedListAddressIndex = _118[0], setSelectedListAddressIndex = _118[1];
321
- var _119 = (0, react_1.useState)({
315
+ }), activeTab = _115[0], setActiveTab = _115[1];
316
+ var _116 = (0, react_1.useState)(false), signatureSigning = _116[0], setSignatureSigning = _116[1];
317
+ var _117 = (0, react_1.useState)({}), selectedData = _117[0], setSelectedData = _117[1];
318
+ var _118 = (0, react_1.useState)(""), selectedObjectStructureId = _118[0], setSelectedObjectStructureId = _118[1];
319
+ var _119 = (0, react_1.useState)(""), selectedObjectId = _119[0], setSelectedObjectId = _119[1];
320
+ var _120 = (0, react_1.useState)(""), selectedListAddressId = _120[0], setSelectedListAddressId = _120[1];
321
+ var _121 = (0, react_1.useState)(-1), selectedListAddressIndex = _121[0], setSelectedListAddressIndex = _121[1];
322
+ var _122 = (0, react_1.useState)({
322
323
  lat: 0,
323
324
  lng: 0,
324
325
  name: "",
325
- }), selectedListAddress = _119[0], setSelectedListAddress = _119[1];
326
- var _120 = (0, react_1.useState)({}), selectedObjectData = _120[0], setSelectedObjectData = _120[1];
327
- var _121 = (0, react_1.useState)(false), referenceLoading = _121[0], setReferenceLoading = _121[1];
328
- var _122 = (0, react_1.useState)({}), referencesOptions = _122[0], setReferencesOptions = _122[1];
329
- var _123 = (0, react_1.useState)({}), referencesDetails = _123[0], setReferencesDetails = _123[1];
330
- var _124 = (0, react_1.useState)({}), referenceDeleteTableData = _124[0], setReferenceDeleteTableData = _124[1];
331
- var _125 = (0, react_1.useState)(0), referenceDeleteIndex = _125[0], setReferenceDeleteIndex = _125[1];
332
- var _126 = (0, react_1.useState)({
326
+ }), selectedListAddress = _122[0], setSelectedListAddress = _122[1];
327
+ var _123 = (0, react_1.useState)({}), selectedObjectData = _123[0], setSelectedObjectData = _123[1];
328
+ var _124 = (0, react_1.useState)(false), referenceLoading = _124[0], setReferenceLoading = _124[1];
329
+ var _125 = (0, react_1.useState)({}), referencesOptions = _125[0], setReferencesOptions = _125[1];
330
+ var _126 = (0, react_1.useState)({}), referencesDetails = _126[0], setReferencesDetails = _126[1];
331
+ var _127 = (0, react_1.useState)({}), referenceDeleteTableData = _127[0], setReferenceDeleteTableData = _127[1];
332
+ var _128 = (0, react_1.useState)(0), referenceDeleteIndex = _128[0], setReferenceDeleteIndex = _128[1];
333
+ var _129 = (0, react_1.useState)({
333
334
  id: "",
334
335
  name: "",
335
336
  type: "string",
336
- }), referenceCreationModal = _126[0], setReferenceCreationModal = _126[1];
337
- var _127 = (0, react_1.useState)({}), referenceModelSchema = _127[0], setReferenceSchema = _127[1];
338
- var _128 = (0, react_1.useState)([]), kanbanChecked = _128[0], setKanbanChecked = _128[1];
337
+ }), referenceCreationModal = _129[0], setReferenceCreationModal = _129[1];
338
+ var _130 = (0, react_1.useState)({}), referenceModelSchema = _130[0], setReferenceSchema = _130[1];
339
+ var _131 = (0, react_1.useState)([]), kanbanChecked = _131[0], setKanbanChecked = _131[1];
339
340
  //INFO : Offline
340
- var _129 = (0, react_1.useState)(0), offlineDataLength = _129[0], setOfflineDataLength = _129[1];
341
- var _130 = (0, react_1.useState)(false), offlineModal = _130[0], setOfflineModal = _130[1];
341
+ var _132 = (0, react_1.useState)(0), offlineDataLength = _132[0], setOfflineDataLength = _132[1];
342
+ var _133 = (0, react_1.useState)(false), offlineModal = _133[0], setOfflineModal = _133[1];
343
+ // INFO: live-stream state — driven by socket connection and navigator.onLine
344
+ var _134 = (0, react_1.useState)(false), isLive = _134[0], setIsLive = _134[1];
345
+ var _135 = (0, react_1.useState)(false), isLiveOffline = _135[0], setIsLiveOffline = _135[1];
346
+ // INFO: true when navigator is offline — used to switch ReadQueryHoc between
347
+ // server reads (online, full pagination) and IndexedDB reads (offline, cached data).
348
+ // Independent of SSE status so it works even when bareSocketName is not set.
349
+ var _136 = (0, react_1.useState)(typeof navigator !== "undefined" ? !navigator.onLine : false), isNetworkOffline = _136[0], setIsNetworkOffline = _136[1];
342
350
  var previousType = (0, react_1.useRef)(null);
343
351
  var previousSelectedData = (0, react_1.useRef)(null);
344
352
  var scrollSentinelRef = (0, react_1.useRef)(null);
@@ -348,6 +356,18 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
348
356
  // Intentionally separate from previousSelectedData, which advances on every
349
357
  // edit and therefore cannot serve as a stable submit baseline.
350
358
  var loadedSelectedData = (0, react_1.useRef)(null);
359
+ // INFO: live-stream SSE client — created on mount when bareSocketName is set
360
+ var socketClientRef = (0, react_1.useRef)(null);
361
+ // INFO: always-current ref for handleApplyEnvelope — updated on every render
362
+ // so the LiveStreamClient's onEnvelope callback never holds a stale closure
363
+ // over props.type or other values that change without triggering the SSE useEffect.
364
+ var handleApplyEnvelopeRef = (0, react_1.useRef)(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
365
+ return [2 /*return*/];
366
+ }); }); });
367
+ // INFO: always-current ref for handleRefresh — kept in sync below so the
368
+ // polling setInterval never captures a stale closure over filters/pagination
369
+ // state that changed after the interval was first registered.
370
+ var handleRefreshRef = (0, react_1.useRef)(function () { });
351
371
  // INFO: Cumulative set of field IDs the user explicitly interacted with (dirty tracking).
352
372
  // Populated via the bareUpdateHandleData useEffect which detects per-render field changes.
353
373
  // Used as the PRIMARY condition for deciding what to submit:
@@ -632,12 +652,106 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
632
652
  ? JSON.parse(JSON.stringify(newBaseline))
633
653
  : null;
634
654
  },
655
+ // INFO: expose live-stream status so consumers can render indicators externally
656
+ isLive: isLive,
657
+ isLiveOffline: isLiveOffline,
635
658
  }); });
636
659
  (0, react_1.useEffect)(function () {
637
660
  handleCheckOfflineDataLength();
638
661
  /* eslint-disable */
639
662
  }, [props.collectionId]);
640
663
  /* eslint-enable */
664
+ // INFO: offline prefetch — fires on mount when bareOffline:true and navigator is online.
665
+ // Runs whenever collectionId or bareOffline changes (e.g. story switching in Storybook).
666
+ // handleOfflinePrefetch is a no-op when offline so safe to call unconditionally here.
667
+ (0, react_1.useEffect)(function () {
668
+ handleOfflinePrefetch();
669
+ /* eslint-disable */
670
+ }, [props.collectionId, (_34 = props.bareSettings) === null || _34 === void 0 ? void 0 : _34.bareOffline]);
671
+ /* eslint-enable */
672
+ // INFO: MRQ polling — calls handleRefresh every N ms (e.g. 1500) as a fallback.
673
+ // Calls through handleRefreshRef so the interval always dispatches the latest
674
+ // closure, even when filters or pagination state changes between ticks.
675
+ // Skips firing when SSE is connected (isLive) to avoid a jarring table
676
+ // re-fetch overwriting rows that SSE already delivered live.
677
+ // Also skips when the device is offline (isNetworkOffline) to avoid
678
+ // unnecessary failed network requests during offline periods.
679
+ (0, react_1.useEffect)(function () {
680
+ var _a;
681
+ var interval = (_a = props.bareSettings) === null || _a === void 0 ? void 0 : _a.barePollingInterval;
682
+ if (!interval)
683
+ return;
684
+ var timer = setInterval(function () {
685
+ if (!isLive && !isNetworkOffline)
686
+ handleRefreshRef.current();
687
+ }, interval);
688
+ return function () { return clearInterval(timer); };
689
+ /* eslint-disable */
690
+ }, [(_35 = props.bareSettings) === null || _35 === void 0 ? void 0 : _35.barePollingInterval, isLive, isNetworkOffline]);
691
+ /* eslint-enable */
692
+ // INFO: Pub/Sub → SSE live-stream — driven by bareSettings.bareSocketName
693
+ // EventSource URL: {sseEndpoint}/{room}?bm_apiToken={token}
694
+ // Mirrors Verdant's emitDeliveryEvent / pages/api/events.ts pattern on the client.
695
+ (0, react_1.useEffect)(function () {
696
+ var _a;
697
+ var room = (_a = props.bareSettings) === null || _a === void 0 ? void 0 : _a.bareSocketName;
698
+ var sseEndpoint = props.devSettings.sseEndpoint;
699
+ if (process.env.NODE_ENV !== "production") {
700
+ console.debug("[DTW SSE] room=", room, "sseEndpoint=", sseEndpoint, "→", room && sseEndpoint
701
+ ? "connecting"
702
+ : "skipped (missing room or sseEndpoint)");
703
+ }
704
+ if (!room || !sseEndpoint)
705
+ return;
706
+ var client = new socket_1.LiveStreamClient({
707
+ url: (0, socket_1.buildSSEUrl)(sseEndpoint, room, props.devSettings.dbAPIToken, props.devSettings.dbUserToken),
708
+ onEnvelope: function (env) {
709
+ if (process.env.NODE_ENV !== "production") {
710
+ console.debug("[DTW SSE] envelope received", env);
711
+ }
712
+ handleApplyEnvelopeRef.current(env);
713
+ },
714
+ onStatusChange: function (status) {
715
+ if (process.env.NODE_ENV !== "production") {
716
+ console.debug("[DTW SSE] status →", status, "room=", room);
717
+ }
718
+ setIsLive(status === "connected");
719
+ setIsLiveOffline(status === "offline");
720
+ },
721
+ });
722
+ socketClientRef.current = client;
723
+ client.connect();
724
+ return function () {
725
+ client.disconnect();
726
+ socketClientRef.current = null;
727
+ setIsLive(false);
728
+ setIsLiveOffline(false);
729
+ };
730
+ /* eslint-disable */
731
+ }, [
732
+ (_36 = props.bareSettings) === null || _36 === void 0 ? void 0 : _36.bareSocketName,
733
+ props.collectionId,
734
+ props.devSettings.sseEndpoint,
735
+ props.devSettings.dbAPIToken,
736
+ ]);
737
+ /* eslint-enable */
738
+ // INFO: track real network connectivity independently of SSE so
739
+ // ReadQueryHoc can switch between server (online) and IndexedDB (offline)
740
+ // even when bareSocketName is not set.
741
+ (0, react_1.useEffect)(function () {
742
+ var handleOnline = function () { return setIsNetworkOffline(false); };
743
+ var handleOffline = function () { return setIsNetworkOffline(true); };
744
+ if (typeof window !== "undefined") {
745
+ window.addEventListener("online", handleOnline);
746
+ window.addEventListener("offline", handleOffline);
747
+ }
748
+ return function () {
749
+ if (typeof window !== "undefined") {
750
+ window.removeEventListener("online", handleOnline);
751
+ window.removeEventListener("offline", handleOffline);
752
+ }
753
+ };
754
+ }, []);
641
755
  // INFO: scroll-mode auto-pagination. Observes a sentinel below the list;
642
756
  // when it enters the viewport we fire handlePagination("next"). End-of-list
643
757
  // is per-backend — Firebase relies on cursor presence; non-Firebase uses
@@ -679,7 +793,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
679
793
  }, [tableData.length]);
680
794
  //INFO : Change Data Type & ID Refresh
681
795
  (0, react_1.useEffect)(function () {
682
- var _a, _b, _c;
796
+ var _a, _b, _c, _d;
683
797
  switch (props.type) {
684
798
  case "read":
685
799
  case "update":
@@ -703,6 +817,11 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
703
817
  }
704
818
  if (props.id === "new") {
705
819
  (0, updateModule_1.handleRetrieveReferenceOptions)(selectedData, props.model, dbModule, devSettings, setReferencesOptions, setReferencesDetails);
820
+ }
821
+ // INFO: skip online reference fetch when offline — referencesOptions
822
+ // is already populated from IndexedDB cache in handleRetrieveSelectedData.
823
+ // When online, runs for all read/update views (both new and existing docs).
824
+ if (!((_d = props.bareSettings) === null || _d === void 0 ? void 0 : _d.bareOffline)) {
706
825
  handleObjectReferenceOptions();
707
826
  }
708
827
  //INFO : Auth Feature
@@ -839,10 +958,10 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
839
958
  props.collectionId,
840
959
  props.model,
841
960
  props.localURLEndpoint,
842
- (_34 = props.organise) === null || _34 === void 0 ? void 0 : _34.extendedTabs,
843
- (_35 = props.organise) === null || _35 === void 0 ? void 0 : _35.viewId,
844
- (_36 = props.organise) === null || _36 === void 0 ? void 0 : _36.additionalQuery,
845
- (_37 = props.organise) === null || _37 === void 0 ? void 0 : _37.groupBy,
961
+ (_37 = props.organise) === null || _37 === void 0 ? void 0 : _37.extendedTabs,
962
+ (_38 = props.organise) === null || _38 === void 0 ? void 0 : _38.viewId,
963
+ (_39 = props.organise) === null || _39 === void 0 ? void 0 : _39.additionalQuery,
964
+ (_40 = props.organise) === null || _40 === void 0 ? void 0 : _40.groupBy,
846
965
  props.type,
847
966
  ]);
848
967
  (0, react_1.useEffect)(function () {
@@ -932,7 +1051,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
932
1051
  };
933
1052
  }, 100);
934
1053
  return function () { return clearTimeout(timeoutId); };
935
- }, [(_38 = props.organise) === null || _38 === void 0 ? void 0 : _38.showReadFloatingNav, props.type, props.id, loading]);
1054
+ }, [(_41 = props.organise) === null || _41 === void 0 ? void 0 : _41.showReadFloatingNav, props.type, props.id, loading]);
936
1055
  (0, react_1.useEffect)(function () {
937
1056
  if (props.type !== "read")
938
1057
  return;
@@ -1003,7 +1122,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
1003
1122
  //SECTION: Handle List
1004
1123
  //=====================================================================================
1005
1124
  var handleCheckOfflineDataLength = function () { return __awaiter(void 0, void 0, void 0, function () {
1006
- var offlineDataResp, offlineData;
1125
+ var offlineDataResp, offlineData, pendingCount;
1007
1126
  var _a;
1008
1127
  return __generator(this, function (_b) {
1009
1128
  switch (_b.label) {
@@ -1011,11 +1130,345 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
1011
1130
  case 1:
1012
1131
  offlineDataResp = _b.sent();
1013
1132
  offlineData = (_a = offlineDataResp === null || offlineDataResp === void 0 ? void 0 : offlineDataResp.data) !== null && _a !== void 0 ? _a : [];
1014
- setOfflineDataLength(offlineData.length);
1133
+ pendingCount = offlineData.filter(function (doc) { return !(doc.baseOnline === true && doc.syncStatus === "synced"); }).length;
1134
+ setOfflineDataLength(pendingCount);
1135
+ return [2 /*return*/];
1136
+ }
1137
+ });
1138
+ }); };
1139
+ // INFO: Offline prefetch — runs on mount when bareOffline:true and navigator is online.
1140
+ // Pulls the latest N docs from the main collection and all reference collections into
1141
+ // IndexedDB so the full offline experience works immediately after connectivity drops.
1142
+ //
1143
+ // Main collection → IndexedDB key "{collectionId}" stamped { baseOnline: true }
1144
+ // Reference tables → IndexedDB key "ref_{collectionId}" read-only, no limit by default
1145
+ var handleOfflinePrefetch = function () { return __awaiter(void 0, void 0, void 0, function () {
1146
+ var prefetchLimit, mainRQ, mainResp, stamped, existingResp, existingData, pendingDocs, pendingIds_1, mergedData, _a, references;
1147
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k;
1148
+ return __generator(this, function (_l) {
1149
+ switch (_l.label) {
1150
+ case 0:
1151
+ if (!((_b = props.bareSettings) === null || _b === void 0 ? void 0 : _b.bareOffline))
1152
+ return [2 /*return*/];
1153
+ if (typeof navigator !== "undefined" && !navigator.onLine)
1154
+ return [2 /*return*/];
1155
+ if (!((_c = props.lib) === null || _c === void 0 ? void 0 : _c.axios))
1156
+ return [2 /*return*/];
1157
+ prefetchLimit = (_e = (_d = props.bareSettings) === null || _d === void 0 ? void 0 : _d.bareOfflinePrefetchLimit) !== null && _e !== void 0 ? _e : 10;
1158
+ _l.label = 1;
1159
+ case 1:
1160
+ _l.trys.push([1, 7, , 8]);
1161
+ mainRQ = new readQuery_1.ReadQuery({
1162
+ dbModule: props.lib.axios,
1163
+ dbType: devSettings.server,
1164
+ dbCollection: props.collectionId,
1165
+ dbEndpoint: devSettings.dbEndpoint,
1166
+ dbAPIToken: devSettings.dbAPIToken,
1167
+ dbUserToken: devSettings.dbUserToken,
1168
+ });
1169
+ return [4 /*yield*/, mainRQ.call({
1170
+ type: "list",
1171
+ // INFO: respect the consumer's configured sort so the prefetched page
1172
+ // matches what the user sees online. Fall back to createdAt desc when
1173
+ // no sort is configured (safe default for append-order collections).
1174
+ sort: (_g = (_f = props.organise) === null || _f === void 0 ? void 0 : _f.sort) !== null && _g !== void 0 ? _g : { sortId: "createdAt", type: "desc" },
1175
+ limit: prefetchLimit,
1176
+ })];
1177
+ case 2:
1178
+ mainResp = _l.sent();
1179
+ if (!((mainResp === null || mainResp === void 0 ? void 0 : mainResp.data) && Array.isArray(mainResp.data))) return [3 /*break*/, 6];
1180
+ stamped = mainResp.data.map(function (doc) { return (__assign(__assign({}, doc), { baseOnline: true, syncStatus: "synced", dirtySections: [] })); });
1181
+ return [4 /*yield*/, indexedDb_1.indexedDb.getValue("local", props.collectionId)];
1182
+ case 3:
1183
+ existingResp = _l.sent();
1184
+ existingData = (_h = existingResp === null || existingResp === void 0 ? void 0 : existingResp.data) !== null && _h !== void 0 ? _h : [];
1185
+ pendingDocs = existingData.filter(function (doc) { return !(doc.baseOnline === true && doc.syncStatus === "synced"); });
1186
+ pendingIds_1 = new Set(pendingDocs.map(function (doc) { var _a, _b; return (_b = (_a = doc[serverId]) !== null && _a !== void 0 ? _a : doc._id) !== null && _b !== void 0 ? _b : doc.id; }));
1187
+ mergedData = __spreadArray(__spreadArray([], pendingDocs, true), stamped.filter(function (doc) { var _a, _b; return !pendingIds_1.has((_b = (_a = doc[serverId]) !== null && _a !== void 0 ? _a : doc._id) !== null && _b !== void 0 ? _b : doc.id); }), true);
1188
+ return [4 /*yield*/, indexedDb_1.indexedDb.putValue("local", {
1189
+ type: props.collectionId,
1190
+ data: mergedData,
1191
+ })];
1192
+ case 4:
1193
+ _l.sent();
1194
+ return [4 /*yield*/, handleCheckOfflineDataLength()];
1195
+ case 5:
1196
+ _l.sent();
1197
+ _l.label = 6;
1198
+ case 6: return [3 /*break*/, 8];
1199
+ case 7:
1200
+ _a = _l.sent();
1201
+ return [3 /*break*/, 8];
1202
+ case 8:
1203
+ references = (_k = (_j = props.bareSettings) === null || _j === void 0 ? void 0 : _j.bareOfflineReferences) !== null && _k !== void 0 ? _k : [];
1204
+ return [4 /*yield*/, Promise.all(references.map(function (ref) { return __awaiter(void 0, void 0, void 0, function () {
1205
+ var refRQ, refResp, _a;
1206
+ return __generator(this, function (_b) {
1207
+ switch (_b.label) {
1208
+ case 0:
1209
+ _b.trys.push([0, 5, , 6]);
1210
+ refRQ = new readQuery_1.ReadQuery({
1211
+ dbModule: props.lib.axios,
1212
+ dbType: devSettings.server,
1213
+ dbCollection: ref.collectionId,
1214
+ dbEndpoint: devSettings.dbEndpoint,
1215
+ dbAPIToken: devSettings.dbAPIToken,
1216
+ dbUserToken: devSettings.dbUserToken,
1217
+ });
1218
+ return [4 /*yield*/, refRQ.call(__assign({ type: "list", query: ref.query, sort: ref.sort }, (ref.limit ? { limit: ref.limit } : { stopLimit: true })))];
1219
+ case 1:
1220
+ refResp = _b.sent();
1221
+ if (!((refResp === null || refResp === void 0 ? void 0 : refResp.data) && Array.isArray(refResp.data))) return [3 /*break*/, 3];
1222
+ return [4 /*yield*/, indexedDb_1.indexedDb.putValue("local", {
1223
+ // INFO: key format matches what handleRetrieveSelectedData reads:
1224
+ // eachModel.referenceSpaceId + "-ref" (e.g. "meraque-cycles-ref")
1225
+ type: "".concat(ref.collectionId, "-ref"),
1226
+ data: refResp.data,
1227
+ })];
1228
+ case 2:
1229
+ _b.sent();
1230
+ if (process.env.NODE_ENV !== "production") {
1231
+ console.debug("[DTW prefetch] reference cached", ref.collectionId + "-ref", "count=", refResp.data.length);
1232
+ }
1233
+ return [3 /*break*/, 4];
1234
+ case 3:
1235
+ if (process.env.NODE_ENV !== "production") {
1236
+ console.debug("[DTW prefetch] reference EMPTY or failed", ref.collectionId, refResp);
1237
+ }
1238
+ _b.label = 4;
1239
+ case 4: return [3 /*break*/, 6];
1240
+ case 5:
1241
+ _a = _b.sent();
1242
+ return [3 /*break*/, 6];
1243
+ case 6: return [2 /*return*/];
1244
+ }
1245
+ });
1246
+ }); }))];
1247
+ case 9:
1248
+ _l.sent();
1015
1249
  return [2 /*return*/];
1016
1250
  }
1017
1251
  });
1018
1252
  }); };
1253
+ // INFO: for each reference/listReference field in the schema, look up the
1254
+ // cached ref_{collectionId} in IndexedDB and substitute the label in-place.
1255
+ // This runs in the offline branch of handleGetListData so the list shows
1256
+ // human-readable labels instead of raw UUIDs.
1257
+ var handleResolveOfflineReferences = function (rows) { return __awaiter(void 0, void 0, void 0, function () {
1258
+ var refFields, refCacheMap;
1259
+ return __generator(this, function (_a) {
1260
+ switch (_a.label) {
1261
+ case 0:
1262
+ refFields = structure.filter(function (s) {
1263
+ return (s.type === "reference" || s.type === "listReference") &&
1264
+ s.referenceSpaceId &&
1265
+ s.referenceLabel;
1266
+ });
1267
+ if (refFields.length === 0)
1268
+ return [2 /*return*/, rows];
1269
+ refCacheMap = {};
1270
+ return [4 /*yield*/, Promise.all(refFields.map(function (field) { return __awaiter(void 0, void 0, void 0, function () {
1271
+ var colId, cached;
1272
+ return __generator(this, function (_a) {
1273
+ switch (_a.label) {
1274
+ case 0:
1275
+ colId = field.referenceSpaceId;
1276
+ if (refCacheMap[colId] !== undefined)
1277
+ return [2 /*return*/];
1278
+ return [4 /*yield*/, indexedDb_1.indexedDb.getValue("local", "".concat(colId, "-ref"))];
1279
+ case 1:
1280
+ cached = _a.sent();
1281
+ refCacheMap[colId] = Array.isArray(cached === null || cached === void 0 ? void 0 : cached.data) ? cached.data : [];
1282
+ return [2 /*return*/];
1283
+ }
1284
+ });
1285
+ }); }))];
1286
+ case 1:
1287
+ _a.sent();
1288
+ return [2 /*return*/, rows.map(function (row) {
1289
+ var resolved = __assign({}, row);
1290
+ refFields.forEach(function (field) {
1291
+ var _a, _b;
1292
+ var colId = field.referenceSpaceId;
1293
+ var labelKey = field.referenceLabel;
1294
+ var cache = (_a = refCacheMap[colId]) !== null && _a !== void 0 ? _a : [];
1295
+ var rawValue = row[field.id];
1296
+ if (!rawValue)
1297
+ return;
1298
+ if (field.type === "reference") {
1299
+ // INFO: single reference — replace UUID with the label string
1300
+ if (typeof rawValue !== "string" && typeof rawValue !== "number")
1301
+ return;
1302
+ var found = cache.find(function (r) { return r._id === rawValue || r.id === rawValue; });
1303
+ if (found)
1304
+ resolved[field.id] = (_b = found[labelKey]) !== null && _b !== void 0 ? _b : rawValue;
1305
+ }
1306
+ else if (field.type === "listReference") {
1307
+ // INFO: list reference — guard against non-array values (null, string, etc.)
1308
+ // Keep as array of resolved labels so downstream .map() calls still work.
1309
+ if (!Array.isArray(rawValue))
1310
+ return;
1311
+ resolved[field.id] = rawValue.map(function (id) {
1312
+ var _a;
1313
+ var found = cache.find(function (r) { return r._id === id || r.id === id; });
1314
+ return found ? ((_a = found[labelKey]) !== null && _a !== void 0 ? _a : id) : id;
1315
+ });
1316
+ }
1317
+ });
1318
+ return resolved;
1319
+ })];
1320
+ }
1321
+ });
1322
+ }); };
1323
+ // Behaviour is split by view type:
1324
+ // list → mutate tableData row(s) in-place; drive IndexedDB offline store
1325
+ // read / update → push update into selectedData; on delete navigate back to list
1326
+ var handleApplyEnvelope = function (envelope) { return __awaiter(void 0, void 0, void 0, function () {
1327
+ var isListView, _a, record_1, record_2, record, deletedId_1, snapData_1, record_3, safeFields_1, record, record;
1328
+ var _b;
1329
+ return __generator(this, function (_c) {
1330
+ switch (_c.label) {
1331
+ case 0:
1332
+ isListView = props.type === "list";
1333
+ if (!isListView) return [3 /*break*/, 10];
1334
+ _a = envelope.type;
1335
+ switch (_a) {
1336
+ case "insert": return [3 /*break*/, 1];
1337
+ case "update": return [3 /*break*/, 3];
1338
+ case "delete": return [3 /*break*/, 5];
1339
+ case "snapshot": return [3 /*break*/, 7];
1340
+ }
1341
+ return [3 /*break*/, 9];
1342
+ case 1:
1343
+ record_1 = envelope.payload;
1344
+ setTableData(function (prev) {
1345
+ if (prev.some(function (r) { return r._id === record_1._id; }))
1346
+ return prev;
1347
+ return __spreadArray([record_1], prev, true); // INFO: prepend — newest row at top
1348
+ });
1349
+ return [4 /*yield*/, indexedDb_1.indexedDb.handleUpsertLive(props.collectionId, record_1)];
1350
+ case 2:
1351
+ _c.sent();
1352
+ return [3 /*break*/, 9];
1353
+ case 3:
1354
+ record_2 = envelope.payload;
1355
+ setTableData(function (prev) {
1356
+ var idx = prev.findIndex(function (r) { return r._id === record_2._id; });
1357
+ if (idx < 0)
1358
+ return prev; // INFO: row not in current page — skip
1359
+ var next = __spreadArray([], prev, true);
1360
+ next[idx] = __assign(__assign({}, next[idx]), record_2);
1361
+ return next;
1362
+ });
1363
+ return [4 /*yield*/, indexedDb_1.indexedDb.handleUpsertLive(props.collectionId, record_2)];
1364
+ case 4:
1365
+ _c.sent();
1366
+ return [3 /*break*/, 9];
1367
+ case 5:
1368
+ record = envelope.payload;
1369
+ deletedId_1 = record._id;
1370
+ setTableData(function (prev) {
1371
+ return prev.filter(function (r) { return r._id !== deletedId_1; });
1372
+ });
1373
+ return [4 /*yield*/, indexedDb_1.indexedDb.handleDeleteLive(props.collectionId, deletedId_1)];
1374
+ case 6:
1375
+ _c.sent();
1376
+ return [3 /*break*/, 9];
1377
+ case 7:
1378
+ snapData_1 = Array.isArray(envelope.payload)
1379
+ ? envelope.payload
1380
+ : [envelope.payload];
1381
+ setTableData(function (prev) {
1382
+ var map = new Map(prev.map(function (r) { return [r._id, r]; }));
1383
+ snapData_1.forEach(function (r) {
1384
+ return map.set(r._id, __assign(__assign({}, map.get(r._id)), r));
1385
+ });
1386
+ return Array.from(map.values());
1387
+ });
1388
+ // INFO: persist reconciled docs to IndexedDB so offline mode stays
1389
+ // consistent after a snapshot — mirrors what insert/update/delete do
1390
+ // via handleUpsertLive.
1391
+ return [4 /*yield*/, Promise.all(snapData_1.map(function (r) {
1392
+ return indexedDb_1.indexedDb.handleUpsertLive(props.collectionId, r);
1393
+ }))];
1394
+ case 8:
1395
+ // INFO: persist reconciled docs to IndexedDB so offline mode stays
1396
+ // consistent after a snapshot — mirrors what insert/update/delete do
1397
+ // via handleUpsertLive.
1398
+ _c.sent();
1399
+ return [3 /*break*/, 9];
1400
+ case 9: return [3 /*break*/, 11];
1401
+ case 10:
1402
+ // INFO: read / update view — push update into form; navigate away on delete
1403
+ switch (envelope.type) {
1404
+ case "update": {
1405
+ record_3 = envelope.payload;
1406
+ if (!Array.isArray(record_3)) {
1407
+ // INFO: verify the envelope targets the document currently open —
1408
+ // when using a collection-level room the server may broadcast updates
1409
+ // for sibling documents; applying them here would corrupt the form.
1410
+ if (record_3._id && record_3._id !== props.id)
1411
+ break;
1412
+ if (dirtyFieldsRef.current.size > 0) {
1413
+ safeFields_1 = Object.fromEntries(Object.entries(record_3).filter(function (_a) {
1414
+ var key = _a[0];
1415
+ return !dirtyFieldsRef.current.has(key);
1416
+ }));
1417
+ if (Object.keys(safeFields_1).length > 0) {
1418
+ setSelectedData(function (prev) { return (__assign(__assign({}, prev), safeFields_1)); });
1419
+ }
1420
+ }
1421
+ else {
1422
+ setSelectedData(function (prev) { return (__assign(__assign({}, prev), record_3)); });
1423
+ }
1424
+ }
1425
+ break;
1426
+ }
1427
+ case "snapshot": {
1428
+ record = envelope.payload;
1429
+ if (!Array.isArray(record)) {
1430
+ if (record._id && record._id !== props.id)
1431
+ break;
1432
+ setSelectedData(record);
1433
+ }
1434
+ break;
1435
+ }
1436
+ case "delete": {
1437
+ record = envelope.payload;
1438
+ if ((record === null || record === void 0 ? void 0 : record._id) && record._id !== props.id)
1439
+ break;
1440
+ // INFO: document deleted externally — navigate back to list if possible,
1441
+ // otherwise show an in-form notification so the user isn't left on a
1442
+ // stale deleted document with zero feedback (navigate may be null when
1443
+ // DataTemplateWrapper is used without a router integration)
1444
+ if ((_b = props.lib) === null || _b === void 0 ? void 0 : _b.navigate) {
1445
+ props.lib.navigate(-1);
1446
+ }
1447
+ else {
1448
+ setNotification({
1449
+ type: false,
1450
+ title: "Record Deleted",
1451
+ msg: "This record was deleted by another user.",
1452
+ });
1453
+ }
1454
+ break;
1455
+ }
1456
+ default:
1457
+ // INFO: insert envelopes are not expected on a read/update view
1458
+ // (document-level rooms never emit inserts). Silently ignore to
1459
+ // handle collection-level rooms that may broadcast all event types.
1460
+ break;
1461
+ }
1462
+ _c.label = 11;
1463
+ case 11: return [2 /*return*/];
1464
+ }
1465
+ });
1466
+ }); };
1467
+ // INFO: keep ref current after every render so the SSE client always
1468
+ // dispatches through the latest closure — captures current props.type,
1469
+ // props.collectionId, and any state values without requiring the SSE
1470
+ // useEffect to re-run (which would tear down and rebuild the EventSource).
1471
+ handleApplyEnvelopeRef.current = handleApplyEnvelope;
1019
1472
  var handleReadQueryHocSort = function (query) {
1020
1473
  var _a, _b;
1021
1474
  var sort = (_b = (_a = props.organise) === null || _a === void 0 ? void 0 : _a.sort) !== null && _b !== void 0 ? _b : undefined;
@@ -1261,22 +1714,25 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
1261
1714
  }
1262
1715
  };
1263
1716
  var handleGetListData = function (responseData, type, rowId) { return __awaiter(void 0, void 0, void 0, function () {
1264
- var dataList, prettierDataList, clonedTableData, clonedSpaceTableData, dummyPrettierDataList_1, selectedIndex_1, isScrollMode, newTableData, newPrettierTableData, isExists, cursorResp, lastDataId, err_1;
1265
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
1266
- return __generator(this, function (_p) {
1267
- switch (_p.label) {
1717
+ var dataList, prettierDataList, clonedTableData, clonedSpaceTableData, dummyPrettierDataList_1, resolvedData, selectedIndex_1, isScrollMode, newTableData, newPrettierTableData, isExists, cursorResp, lastDataId, err_1;
1718
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
1719
+ return __generator(this, function (_o) {
1720
+ switch (_o.label) {
1268
1721
  case 0:
1269
1722
  dataList = [];
1270
1723
  prettierDataList = [];
1271
- _p.label = 1;
1724
+ _o.label = 1;
1272
1725
  case 1:
1273
- _p.trys.push([1, 6, , 7]);
1726
+ _o.trys.push([1, 7, , 8]);
1274
1727
  clonedTableData = JSON.parse(JSON.stringify(tableData));
1275
1728
  clonedSpaceTableData = JSON.parse(JSON.stringify(spaceTableData));
1276
- if (!(responseData === null || responseData === void 0 ? void 0 : responseData.data)) return [3 /*break*/, 5];
1277
- if (!((_a = props.bareSettings) === null || _a === void 0 ? void 0 : _a.bareOffline)) return [3 /*break*/, 2];
1729
+ if (!(responseData === null || responseData === void 0 ? void 0 : responseData.data)) return [3 /*break*/, 6];
1730
+ if (!((_a = props.bareSettings) === null || _a === void 0 ? void 0 : _a.bareOffline)) return [3 /*break*/, 3];
1278
1731
  dummyPrettierDataList_1 = [];
1279
- (_b = responseData === null || responseData === void 0 ? void 0 : responseData.data) === null || _b === void 0 ? void 0 : _b.map(function (eachData) {
1732
+ return [4 /*yield*/, handleResolveOfflineReferences(responseData.data)];
1733
+ case 2:
1734
+ resolvedData = _o.sent();
1735
+ resolvedData.map(function (eachData) {
1280
1736
  var _a, _b;
1281
1737
  var tempData = eachData;
1282
1738
  (0, listModule_1.handleDataEditButton)(tempData, (_a = props.organise) === null || _a === void 0 ? void 0 : _a.handleNavigate, (_b = props.bareSettings) === null || _b === void 0 ? void 0 : _b.bareListActionBtns);
@@ -1284,10 +1740,10 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
1284
1740
  return null;
1285
1741
  });
1286
1742
  prettierDataList = dummyPrettierDataList_1;
1287
- return [3 /*break*/, 4];
1288
- case 2: return [4 /*yield*/, (0, listModule_1.handleListDataBasedOnModel)(responseData === null || responseData === void 0 ? void 0 : responseData.data, props.devSettings, (_c = props.lib) === null || _c === void 0 ? void 0 : _c.axios, structure, (_d = props.organise) === null || _d === void 0 ? void 0 : _d.handleNavigate, ((_e = props.organise) === null || _e === void 0 ? void 0 : _e.viewId) === "general", setActivityModal, setActivityId, isActivityLog ? (_f = props.edit) === null || _f === void 0 ? void 0 : _f.activityLog : undefined, (_g = props.bareSettings) === null || _g === void 0 ? void 0 : _g.bareListActionBtns, (_h = props.edit) === null || _h === void 0 ? void 0 : _h.disabledUpdate)];
1289
- case 3:
1290
- prettierDataList = _p.sent();
1743
+ return [3 /*break*/, 5];
1744
+ case 3: return [4 /*yield*/, (0, listModule_1.handleListDataBasedOnModel)(responseData === null || responseData === void 0 ? void 0 : responseData.data, props.devSettings, (_b = props.lib) === null || _b === void 0 ? void 0 : _b.axios, structure, (_c = props.organise) === null || _c === void 0 ? void 0 : _c.handleNavigate, ((_d = props.organise) === null || _d === void 0 ? void 0 : _d.viewId) === "general", setActivityModal, setActivityId, isActivityLog ? (_e = props.edit) === null || _e === void 0 ? void 0 : _e.activityLog : undefined, (_f = props.bareSettings) === null || _f === void 0 ? void 0 : _f.bareListActionBtns, (_g = props.edit) === null || _g === void 0 ? void 0 : _g.disabledUpdate)];
1745
+ case 4:
1746
+ prettierDataList = _o.sent();
1291
1747
  if (props.groupId) {
1292
1748
  prettierDataList.forEach(function (item, idx) {
1293
1749
  var _a, _b;
@@ -1296,9 +1752,9 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
1296
1752
  }
1297
1753
  });
1298
1754
  }
1299
- _p.label = 4;
1300
- case 4:
1301
- (_j = responseData === null || responseData === void 0 ? void 0 : responseData.data) === null || _j === void 0 ? void 0 : _j.map(function (eachData) {
1755
+ _o.label = 5;
1756
+ case 5:
1757
+ (_h = responseData === null || responseData === void 0 ? void 0 : responseData.data) === null || _h === void 0 ? void 0 : _h.map(function (eachData) {
1302
1758
  if (eachData["_id"]) {
1303
1759
  eachData["id"] = eachData["_id"];
1304
1760
  delete eachData["_id"];
@@ -1306,8 +1762,8 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
1306
1762
  return null;
1307
1763
  });
1308
1764
  dataList = responseData.data;
1309
- _p.label = 5;
1310
- case 5:
1765
+ _o.label = 6;
1766
+ case 6:
1311
1767
  if (type === "update" || type === "create") {
1312
1768
  try {
1313
1769
  if (type === "update") {
@@ -1318,12 +1774,12 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
1318
1774
  return null;
1319
1775
  });
1320
1776
  if (selectedIndex_1 > -1) {
1321
- clonedTableData[selectedIndex_1] = (_k = responseData === null || responseData === void 0 ? void 0 : responseData.data) === null || _k === void 0 ? void 0 : _k[0];
1777
+ clonedTableData[selectedIndex_1] = (_j = responseData === null || responseData === void 0 ? void 0 : responseData.data) === null || _j === void 0 ? void 0 : _j[0];
1322
1778
  clonedSpaceTableData[selectedIndex_1] = prettierDataList === null || prettierDataList === void 0 ? void 0 : prettierDataList[0];
1323
1779
  }
1324
1780
  }
1325
1781
  else {
1326
- clonedTableData.push((_l = responseData === null || responseData === void 0 ? void 0 : responseData.data) === null || _l === void 0 ? void 0 : _l[0]);
1782
+ clonedTableData.push((_k = responseData === null || responseData === void 0 ? void 0 : responseData.data) === null || _k === void 0 ? void 0 : _k[0]);
1327
1783
  clonedSpaceTableData.push(prettierDataList === null || prettierDataList === void 0 ? void 0 : prettierDataList[0]);
1328
1784
  }
1329
1785
  handleSetListData(clonedTableData, clonedSpaceTableData);
@@ -1334,7 +1790,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
1334
1790
  isScrollMode = renderCheckScrollMode();
1335
1791
  if (!isScrollMode && !isFirebase) {
1336
1792
  handleSetListData(dataList, prettierDataList);
1337
- setSize((_m = responseData.count) !== null && _m !== void 0 ? _m : 0);
1793
+ setSize((_l = responseData.count) !== null && _l !== void 0 ? _l : 0);
1338
1794
  }
1339
1795
  else {
1340
1796
  newTableData = [];
@@ -1365,15 +1821,15 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
1365
1821
  }
1366
1822
  setCursor(cursorResp);
1367
1823
  if (isScrollMode && !isFirebase) {
1368
- setSize((_o = responseData.count) !== null && _o !== void 0 ? _o : 0);
1824
+ setSize((_m = responseData.count) !== null && _m !== void 0 ? _m : 0);
1369
1825
  }
1370
1826
  }
1371
1827
  }
1372
- return [3 /*break*/, 7];
1373
- case 6:
1374
- err_1 = _p.sent();
1375
- return [3 /*break*/, 7];
1828
+ return [3 /*break*/, 8];
1376
1829
  case 7:
1830
+ err_1 = _o.sent();
1831
+ return [3 /*break*/, 8];
1832
+ case 8:
1377
1833
  setTableLoading(false);
1378
1834
  return [2 /*return*/];
1379
1835
  }
@@ -1400,6 +1856,9 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
1400
1856
  handleCheckOfflineDataLength();
1401
1857
  }, 500);
1402
1858
  };
1859
+ // INFO: keep polling ref current so the setInterval always fires the latest
1860
+ // handleRefresh closure (captures current filters, pagination, etc.)
1861
+ handleRefreshRef.current = handleRefresh;
1403
1862
  var handleObjectReferenceOptions = function () { return __awaiter(void 0, void 0, void 0, function () {
1404
1863
  var clonedOptions_1, clonedDetails_1, model, err_2;
1405
1864
  var _a;
@@ -2605,7 +3064,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
2605
3064
  });
2606
3065
  }); };
2607
3066
  var handleRemoveSelectedData = function () { return __awaiter(void 0, void 0, void 0, function () {
2608
- var deletable, selectedId_1, deleteIds, res, offlineDataResp, offlineData, selectedIndex_2, err_13;
3067
+ var deletable, selectedId_1, deleteIds, res, offlineDataResp, offlineData, selectedIndex_2, doc, err_13;
2609
3068
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
2610
3069
  return __generator(this, function (_k) {
2611
3070
  switch (_k.label) {
@@ -2641,8 +3100,25 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
2641
3100
  selectedIndex_2 = index;
2642
3101
  return null;
2643
3102
  });
2644
- if (selectedIndex_2 >= 0)
3103
+ if (selectedIndex_2 >= 0) {
3104
+ doc = offlineData[selectedIndex_2];
3105
+ // INFO: block delete for server-originated docs when offline —
3106
+ // the source of truth is online and we can't safely remove it
3107
+ // locally without risking data loss on the server.
3108
+ // Only locally-created docs (baseOnline: false) can be deleted offline.
3109
+ if (doc.baseOnline === true) {
3110
+ setNotification({
3111
+ type: false,
3112
+ title: "Delete Not Allowed Offline",
3113
+ msg: "This record was created on the server and cannot be deleted while offline. Please reconnect and try again.",
3114
+ });
3115
+ setLoading(false);
3116
+ setModalVisible(false);
3117
+ setDeleteModal(false);
3118
+ return [2 /*return*/];
3119
+ }
2645
3120
  offlineData.splice(selectedIndex_2, 1);
3121
+ }
2646
3122
  return [4 /*yield*/, indexedDb_1.indexedDb.putValue("local", {
2647
3123
  data: offlineData,
2648
3124
  type: props.collectionId,
@@ -3082,23 +3558,26 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3082
3558
  });
3083
3559
  }); };
3084
3560
  var handleUploadOfflineData = function () { return __awaiter(void 0, void 0, void 0, function () {
3085
- var dataUploadedId, offlineDataResp, offlineData, offlineDataIds, updateDataRes, updateDataList, _loop_1, i, err_18, success, filteredData;
3086
- var _a, _b, _c, _d, _e;
3087
- return __generator(this, function (_f) {
3088
- switch (_f.label) {
3561
+ var dataUploadedId, offlineDataResp, offlineData, offlineDataIds, updateDataRes, updateDataList, _loop_1, i, err_18, success, fullDataResp, fullData, updatedData;
3562
+ var _a, _b, _c, _d, _e, _f;
3563
+ return __generator(this, function (_g) {
3564
+ switch (_g.label) {
3089
3565
  case 0:
3090
3566
  setLoading(true);
3091
3567
  dataUploadedId = [];
3092
3568
  return [4 /*yield*/, indexedDb_1.indexedDb.getValue("local", props.collectionId)];
3093
3569
  case 1:
3094
- offlineDataResp = _f.sent();
3570
+ offlineDataResp = _g.sent();
3095
3571
  offlineData = (_a = offlineDataResp === null || offlineDataResp === void 0 ? void 0 : offlineDataResp.data) !== null && _a !== void 0 ? _a : [];
3572
+ // INFO: only upload docs that need syncing — skip prefetched server docs
3573
+ // (baseOnline: true, syncStatus: "synced") which are already on the server
3574
+ offlineData = offlineData.filter(function (doc) { return !(doc.baseOnline === true && doc.syncStatus === "synced"); });
3096
3575
  offlineDataIds = offlineData.map(function (eachData) {
3097
3576
  return eachData[serverId];
3098
3577
  });
3099
- _f.label = 2;
3578
+ _g.label = 2;
3100
3579
  case 2:
3101
- _f.trys.push([2, 8, , 9]);
3580
+ _g.trys.push([2, 8, , 9]);
3102
3581
  if (!(offlineData.length > 0)) return [3 /*break*/, 7];
3103
3582
  return [4 /*yield*/, readServerQuery.call({
3104
3583
  type: "list",
@@ -3112,18 +3591,18 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3112
3591
  stopLimit: true,
3113
3592
  })];
3114
3593
  case 3:
3115
- updateDataRes = _f.sent();
3594
+ updateDataRes = _g.sent();
3116
3595
  updateDataList = (_b = updateDataRes === null || updateDataRes === void 0 ? void 0 : updateDataRes.data) !== null && _b !== void 0 ? _b : [];
3117
3596
  _loop_1 = function (i) {
3118
3597
  var eachOfflineData, offlineDataId, storedBaseline, serverDoc, preComplete, isUpdate, res, err_19;
3119
- var _g;
3120
- return __generator(this, function (_h) {
3121
- switch (_h.label) {
3598
+ var _h;
3599
+ return __generator(this, function (_j) {
3600
+ switch (_j.label) {
3122
3601
  case 0:
3123
3602
  eachOfflineData = offlineData[i];
3124
3603
  return [4 /*yield*/, (0, utils_1.sleep)(300)];
3125
3604
  case 1:
3126
- _h.sent();
3605
+ _j.sent();
3127
3606
  offlineDataId = eachOfflineData[serverId];
3128
3607
  storedBaseline = (_c = eachOfflineData.__offlineBaseline) !== null && _c !== void 0 ? _c : null;
3129
3608
  delete eachOfflineData.__offlineBaseline;
@@ -3157,46 +3636,46 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3157
3636
  if (!((_d = props.bareSettings) === null || _d === void 0 ? void 0 : _d.bareUpdateHandlePreComplete)) return [3 /*break*/, 3];
3158
3637
  return [4 /*yield*/, props.bareSettings.bareUpdateHandlePreComplete(eachOfflineData)];
3159
3638
  case 2:
3160
- preComplete = _h.sent();
3639
+ preComplete = _j.sent();
3161
3640
  if (!preComplete)
3162
3641
  return [2 /*return*/, "continue"]; // Skip this item
3163
- _h.label = 3;
3642
+ _j.label = 3;
3164
3643
  case 3:
3165
3644
  isUpdate = !!serverDoc;
3166
3645
  return [4 /*yield*/, handleSubmitData(undefined, undefined, undefined, eachOfflineData, offlineDataId, isUpdate)];
3167
3646
  case 4:
3168
- res = _h.sent();
3647
+ res = _j.sent();
3169
3648
  if (!res) return [3 /*break*/, 8];
3170
3649
  dataUploadedId.push(offlineDataId);
3171
3650
  if (!((_e = props.bareSettings) === null || _e === void 0 ? void 0 : _e.bareUpdateHandlePostComplete)) return [3 /*break*/, 8];
3172
- _h.label = 5;
3651
+ _j.label = 5;
3173
3652
  case 5:
3174
- _h.trys.push([5, 7, , 8]);
3175
- return [4 /*yield*/, props.bareSettings.bareUpdateHandlePostComplete(__assign((_g = {}, _g[serverId] = res, _g), eachOfflineData))];
3653
+ _j.trys.push([5, 7, , 8]);
3654
+ return [4 /*yield*/, props.bareSettings.bareUpdateHandlePostComplete(__assign((_h = {}, _h[serverId] = res, _h), eachOfflineData))];
3176
3655
  case 6:
3177
- _h.sent();
3656
+ _j.sent();
3178
3657
  return [3 /*break*/, 8];
3179
3658
  case 7:
3180
- err_19 = _h.sent();
3659
+ err_19 = _j.sent();
3181
3660
  return [3 /*break*/, 8];
3182
3661
  case 8: return [2 /*return*/];
3183
3662
  }
3184
3663
  });
3185
3664
  };
3186
3665
  i = 0;
3187
- _f.label = 4;
3666
+ _g.label = 4;
3188
3667
  case 4:
3189
3668
  if (!(i < offlineData.length)) return [3 /*break*/, 7];
3190
3669
  return [5 /*yield**/, _loop_1(i)];
3191
3670
  case 5:
3192
- _f.sent();
3193
- _f.label = 6;
3671
+ _g.sent();
3672
+ _g.label = 6;
3194
3673
  case 6:
3195
3674
  i++;
3196
3675
  return [3 /*break*/, 4];
3197
3676
  case 7: return [3 /*break*/, 9];
3198
3677
  case 8:
3199
- err_18 = _f.sent();
3678
+ err_18 = _g.sent();
3200
3679
  return [3 /*break*/, 9];
3201
3680
  case 9:
3202
3681
  success = dataUploadedId.length === offlineData.length;
@@ -3207,13 +3686,22 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3207
3686
  ? dataUploadedId.length
3208
3687
  : offlineData.length - dataUploadedId.length, " offline data have been ").concat(success ? "success" : "failed", " uploaded to cloud"),
3209
3688
  });
3210
- filteredData = offlineData.filter(function (eachOfflineData) { return !dataUploadedId.includes(eachOfflineData[serverId]); });
3689
+ return [4 /*yield*/, indexedDb_1.indexedDb.getValue("local", props.collectionId)];
3690
+ case 10:
3691
+ fullDataResp = _g.sent();
3692
+ fullData = (_f = fullDataResp === null || fullDataResp === void 0 ? void 0 : fullDataResp.data) !== null && _f !== void 0 ? _f : [];
3693
+ updatedData = fullData.map(function (doc) {
3694
+ if (dataUploadedId.includes(doc[serverId])) {
3695
+ return __assign(__assign({}, doc), { syncStatus: "synced", baseOnline: true });
3696
+ }
3697
+ return doc;
3698
+ });
3211
3699
  return [4 /*yield*/, indexedDb_1.indexedDb.putValue("local", {
3212
- data: filteredData,
3700
+ data: updatedData,
3213
3701
  type: props.collectionId,
3214
3702
  })];
3215
- case 10:
3216
- _f.sent();
3703
+ case 11:
3704
+ _g.sent();
3217
3705
  handleRefresh();
3218
3706
  setLoading(false);
3219
3707
  handlePopUpModal(false);
@@ -3222,50 +3710,52 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3222
3710
  });
3223
3711
  }); };
3224
3712
  var handleSubmitData = function (type, rowId, columnId, data, offlineId, isOfflineUpdate, isDraft) { return __awaiter(void 0, void 0, void 0, function () {
3225
- var selectedId_2, id_1, createSelectedData_1, uniqueDataStructure, uniqueColumnId, res, offlineDataResp, offlineData, clonedForOffline, tempData, selectedIndex_3, err_20, isExistingDoc, newRecordData_1, changedAttributeIds, baseDraftValue, hasBaseDraftChange, offlineDataResp, clonedForOffline, tempData, selectedIndex_4, offlineData, err_21, dataToSubmit_2, changedAttributeIds, baseDraftValue, hasBaseDraftChange, operationType, selectedIndex_5, dataId, err_22;
3226
- var _a, _b;
3227
- var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
3228
- return __generator(this, function (_t) {
3229
- switch (_t.label) {
3713
+ var selectedId, id, createSelectedData_1, uniqueDataStructure, uniqueColumnId, res, offlineDataResp, offlineData, clonedForOffline, tempData, selectedIndex_3, err_20, isExistingDoc, newRecordData_1, changedAttributeIds, baseDraftValue, hasBaseDraftChange, offlineDataResp, clonedForOffline, tempData, selectedIndex_4, offlineData, err_21, dataToSubmit_2, changedAttributeIds, baseDraftValue, hasBaseDraftChange, operationType, selectedIndex_5, dataId, err_22, offlineDataResp, offlineData, clonedForOffline, tempData, selectedIndex_6, _a;
3714
+ var _b, _c;
3715
+ var _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
3716
+ return __generator(this, function (_w) {
3717
+ switch (_w.label) {
3230
3718
  case 0:
3231
- _t.trys.push([0, 35, , 36]);
3232
- selectedId_2 = "";
3719
+ selectedId = "";
3720
+ id = "";
3721
+ _w.label = 1;
3722
+ case 1:
3723
+ _w.trys.push([1, 37, , 43]);
3233
3724
  if (type === "update")
3234
- selectedId_2 = rowId !== null && rowId !== void 0 ? rowId : "";
3725
+ selectedId = rowId !== null && rowId !== void 0 ? rowId : "";
3235
3726
  else if (type === "create")
3236
- selectedId_2 = "new";
3727
+ selectedId = "new";
3237
3728
  else if (props.id)
3238
- selectedId_2 = props.id;
3729
+ selectedId = props.id;
3239
3730
  else
3240
- selectedId_2 = "new";
3241
- id_1 = "";
3731
+ selectedId = "new";
3242
3732
  if (type === "update")
3243
- id_1 = rowId !== null && rowId !== void 0 ? rowId : "";
3244
- else if (selectedId_2 === "new" && !showId) {
3733
+ id = rowId !== null && rowId !== void 0 ? rowId : "";
3734
+ else if (selectedId === "new" && !showId) {
3245
3735
  if (idField && selectedData[idField])
3246
- id_1 = selectedData[idField];
3736
+ id = selectedData[idField];
3247
3737
  else
3248
- id_1 = (0, uuid_1.v4)();
3738
+ id = (0, uuid_1.v4)();
3249
3739
  }
3250
3740
  else
3251
- id_1 = (_c = props.id) !== null && _c !== void 0 ? _c : "";
3741
+ id = (_d = props.id) !== null && _d !== void 0 ? _d : "";
3252
3742
  if (offlineId) {
3253
- selectedId_2 = offlineId;
3254
- id_1 = offlineId;
3743
+ selectedId = offlineId;
3744
+ id = offlineId;
3255
3745
  }
3256
- if (!(isOffline && !offlineId)) return [3 /*break*/, 1];
3746
+ if (!(isOffline && !offlineId)) return [3 /*break*/, 2];
3257
3747
  createSelectedData_1 = selectedData;
3258
- return [3 /*break*/, 3];
3259
- case 1: return [4 /*yield*/, handleUploadImage(id_1, data)];
3260
- case 2:
3261
- createSelectedData_1 = _t.sent();
3262
- _t.label = 3;
3748
+ return [3 /*break*/, 4];
3749
+ case 2: return [4 /*yield*/, handleUploadImage(id, data)];
3263
3750
  case 3:
3751
+ createSelectedData_1 = _w.sent();
3752
+ _w.label = 4;
3753
+ case 4:
3264
3754
  uniqueDataStructure = structure.filter(function (eachStructure) {
3265
3755
  return eachStructure.unique;
3266
3756
  });
3267
3757
  uniqueColumnId = uniqueDataStructure.length > 0 ? uniqueDataStructure[0].id : undefined;
3268
- if ((_d = props.bareSettings) === null || _d === void 0 ? void 0 : _d.bareUpdatePrefill) {
3758
+ if ((_e = props.bareSettings) === null || _e === void 0 ? void 0 : _e.bareUpdatePrefill) {
3269
3759
  props.bareSettings.bareUpdatePrefill(selectedData).map(function (eachField) {
3270
3760
  var key = eachField.key, value = eachField.value;
3271
3761
  createSelectedData_1[key] = value;
@@ -3273,26 +3763,30 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3273
3763
  });
3274
3764
  }
3275
3765
  res = "";
3276
- if (!(selectedId_2 === "new")) return [3 /*break*/, 16];
3766
+ if (!(selectedId === "new")) return [3 /*break*/, 17];
3277
3767
  if (!showId)
3278
- createSelectedData_1[serverId] = id_1;
3768
+ createSelectedData_1[serverId] = id;
3279
3769
  if (isDraft)
3280
3770
  createSelectedData_1["baseDraft"] = true;
3281
- if (!isOffline) return [3 /*break*/, 9];
3282
- _t.label = 4;
3283
- case 4:
3284
- _t.trys.push([4, 7, , 8]);
3285
- return [4 /*yield*/, indexedDb_1.indexedDb.getValue("local", props.collectionId)];
3771
+ if (!isOffline) return [3 /*break*/, 10];
3772
+ _w.label = 5;
3286
3773
  case 5:
3287
- offlineDataResp = _t.sent();
3288
- offlineData = (_e = offlineDataResp === null || offlineDataResp === void 0 ? void 0 : offlineDataResp.data) !== null && _e !== void 0 ? _e : [];
3774
+ _w.trys.push([5, 8, , 9]);
3775
+ return [4 /*yield*/, indexedDb_1.indexedDb.getValue("local", props.collectionId)];
3776
+ case 6:
3777
+ offlineDataResp = _w.sent();
3778
+ offlineData = (_f = offlineDataResp === null || offlineDataResp === void 0 ? void 0 : offlineDataResp.data) !== null && _f !== void 0 ? _f : [];
3289
3779
  clonedForOffline = (0, updateModule_1.handleClonedDataAttribute)(selectedData, structure, props.devSettings.server, true, showId);
3290
3780
  tempData = (0, updateModule_1.handleParseOfflineWrite)(clonedForOffline, structure);
3291
3781
  // INFO: Stamp the _id on the offline entry so subsequent saves can find and update it
3292
3782
  if (!tempData[serverId])
3293
- tempData[serverId] = id_1;
3783
+ tempData[serverId] = id;
3294
3784
  // INFO: Remove non-serializable keys that IDB's structured clone can't handle
3295
3785
  delete tempData["update"];
3786
+ // INFO: mark as pending sync so handleCheckOfflineDataLength counts it
3787
+ // and the upload button appears in the list view
3788
+ tempData.syncStatus = "pending";
3789
+ tempData.baseOnline = false; // INFO: locally created, never synced
3296
3790
  // INFO: Store original baseline on first offline save so the upload
3297
3791
  // diff can identify which fields the user actually changed.
3298
3792
  if (!tempData.__offlineBaseline) {
@@ -3303,7 +3797,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3303
3797
  selectedIndex_3 = -1;
3304
3798
  offlineData.map(function (eachOfflineData, index) {
3305
3799
  var offlineDataId = eachOfflineData[serverId];
3306
- if (id_1 === offlineDataId)
3800
+ if (id === offlineDataId)
3307
3801
  selectedIndex_3 = index;
3308
3802
  return null;
3309
3803
  });
@@ -3323,27 +3817,27 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3323
3817
  data: offlineData,
3324
3818
  type: props.collectionId,
3325
3819
  })];
3326
- case 6:
3327
- _t.sent();
3328
- res = true;
3329
- return [3 /*break*/, 8];
3330
3820
  case 7:
3331
- err_20 = _t.sent();
3332
- return [3 /*break*/, 8];
3333
- case 8: return [3 /*break*/, 15];
3334
- case 9:
3821
+ _w.sent();
3822
+ res = true;
3823
+ return [3 /*break*/, 9];
3824
+ case 8:
3825
+ err_20 = _w.sent();
3826
+ return [3 /*break*/, 9];
3827
+ case 9: return [3 /*break*/, 16];
3828
+ case 10:
3335
3829
  if (!((idField && selectedData[idField]) ||
3336
- ((_f = props.bareSettings) === null || _f === void 0 ? void 0 : _f.bareUpsertPartialUpdate))) return [3 /*break*/, 11];
3337
- isExistingDoc = ((_g = props.bareSettings) === null || _g === void 0 ? void 0 : _g.bareUpsertPartialUpdate) &&
3830
+ ((_g = props.bareSettings) === null || _g === void 0 ? void 0 : _g.bareUpsertPartialUpdate))) return [3 /*break*/, 12];
3831
+ isExistingDoc = ((_h = props.bareSettings) === null || _h === void 0 ? void 0 : _h.bareUpsertPartialUpdate) &&
3338
3832
  loadedSelectedData.current != null;
3339
3833
  if (isExistingDoc) {
3340
3834
  changedAttributeIds = (0, updateModule_1.compareUpdatedFields)(loadedSelectedData.current, createSelectedData_1).changedAttributeIds;
3341
3835
  baseDraftValue = isDraft ? true : false;
3342
- hasBaseDraftChange = ((_j = (_h = loadedSelectedData.current) === null || _h === void 0 ? void 0 : _h["baseDraft"]) !== null && _j !== void 0 ? _j : false) !==
3836
+ hasBaseDraftChange = ((_k = (_j = loadedSelectedData.current) === null || _j === void 0 ? void 0 : _j["baseDraft"]) !== null && _k !== void 0 ? _k : false) !==
3343
3837
  baseDraftValue;
3344
3838
  // INFO: if nothing changed (including baseDraft), skip the write
3345
3839
  if (changedAttributeIds.length === 0 && !hasBaseDraftChange)
3346
- return [2 /*return*/, id_1];
3840
+ return [2 /*return*/, id];
3347
3841
  newRecordData_1 = {};
3348
3842
  changedAttributeIds.forEach(function (key) {
3349
3843
  var _a;
@@ -3385,69 +3879,73 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3385
3879
  newRecordData_1 = createSelectedData_1;
3386
3880
  }
3387
3881
  return [4 /*yield*/, writeServerQuery.call("update", {
3388
- id: id_1,
3882
+ id: id,
3389
3883
  data: newRecordData_1,
3390
3884
  upsert: true,
3391
3885
  })];
3392
- case 10:
3393
- res = _t.sent();
3394
- return [3 /*break*/, 15];
3395
3886
  case 11:
3887
+ res = _w.sent();
3888
+ return [3 /*break*/, 16];
3889
+ case 12:
3396
3890
  // INFO: stepper create guard — if a create is already in-flight, queue this
3397
3891
  // draft save and return early. It will be replayed as an update once the
3398
3892
  // in-flight create resolves.
3399
- if (selectedId_2 === "new" && isCreatingRef.current) {
3893
+ if (selectedId === "new" && isCreatingRef.current) {
3400
3894
  pendingDraftSaveRef.current = true;
3401
3895
  return [2 /*return*/, ""];
3402
3896
  }
3403
- if (selectedId_2 === "new") {
3897
+ if (selectedId === "new") {
3404
3898
  isCreatingRef.current = true;
3405
- inflightIdRef.current = id_1; // INFO: id is the UUID already generated above
3899
+ inflightIdRef.current = id; // INFO: id is the UUID already generated above
3406
3900
  }
3407
3901
  return [4 /*yield*/, writeServerQuery.call("create", {
3408
3902
  data: createSelectedData_1,
3409
3903
  unique: uniqueColumnId,
3410
3904
  })];
3411
- case 12:
3905
+ case 13:
3412
3906
  //INFO: [CREATE] Create new data
3413
- res = _t.sent();
3414
- if (!(selectedId_2 === "new")) return [3 /*break*/, 15];
3907
+ res = _w.sent();
3908
+ if (!(selectedId === "new")) return [3 /*break*/, 16];
3415
3909
  isCreatingRef.current = false;
3416
- if (!pendingDraftSaveRef.current) return [3 /*break*/, 14];
3910
+ if (!pendingDraftSaveRef.current) return [3 /*break*/, 15];
3417
3911
  pendingDraftSaveRef.current = false;
3418
3912
  // INFO: replay as update — inflightIdRef.current holds the real _id
3419
3913
  return [4 /*yield*/, writeServerQuery.call("update", {
3420
3914
  id: inflightIdRef.current,
3421
3915
  data: __assign(__assign({}, createSelectedData_1), { baseDraft: true }),
3422
3916
  })];
3423
- case 13:
3424
- // INFO: replay as update — inflightIdRef.current holds the real _id
3425
- _t.sent();
3426
- _t.label = 14;
3427
3917
  case 14:
3918
+ // INFO: replay as update — inflightIdRef.current holds the real _id
3919
+ _w.sent();
3920
+ _w.label = 15;
3921
+ case 15:
3428
3922
  inflightIdRef.current = "";
3429
- _t.label = 15;
3430
- case 15: return [3 /*break*/, 24];
3431
- case 16:
3432
- if (!selectedId_2) return [3 /*break*/, 24];
3433
- if (!(isOffline && !offlineId)) return [3 /*break*/, 22];
3434
- _t.label = 17;
3923
+ _w.label = 16;
3924
+ case 16: return [3 /*break*/, 25];
3435
3925
  case 17:
3436
- _t.trys.push([17, 20, , 21]);
3437
- return [4 /*yield*/, indexedDb_1.indexedDb.getValue("local", props.collectionId)];
3926
+ if (!selectedId) return [3 /*break*/, 25];
3927
+ if (!(isOffline && !offlineId)) return [3 /*break*/, 23];
3928
+ _w.label = 18;
3438
3929
  case 18:
3439
- offlineDataResp = _t.sent();
3930
+ _w.trys.push([18, 21, , 22]);
3931
+ return [4 /*yield*/, indexedDb_1.indexedDb.getValue("local", props.collectionId)];
3932
+ case 19:
3933
+ offlineDataResp = _w.sent();
3440
3934
  clonedForOffline = (0, updateModule_1.handleClonedDataAttribute)(selectedData, structure, props.devSettings.server, true, showId);
3441
3935
  tempData = (0, updateModule_1.handleParseOfflineWrite)(clonedForOffline, structure);
3442
- tempData[serverId] = selectedId_2;
3936
+ tempData[serverId] = selectedId;
3443
3937
  // INFO: Remove non-serializable keys that IDB's structured clone can't handle
3444
3938
  // (e.g. 'update' which is a React element injected by bareUpdateActionComponent)
3445
3939
  delete tempData["update"];
3940
+ // INFO: mark as pending so handleCheckOfflineDataLength counts it
3941
+ // and the upload button appears — overrides syncStatus:"synced" from prefetch
3942
+ tempData.syncStatus = "pending";
3943
+ tempData.baseOnline = true; // INFO: existing server doc, updated offline
3446
3944
  selectedIndex_4 = -1;
3447
- offlineData = (_k = offlineDataResp === null || offlineDataResp === void 0 ? void 0 : offlineDataResp.data) !== null && _k !== void 0 ? _k : [];
3945
+ offlineData = (_l = offlineDataResp === null || offlineDataResp === void 0 ? void 0 : offlineDataResp.data) !== null && _l !== void 0 ? _l : [];
3448
3946
  offlineData.map(function (eachOfflineData, index) {
3449
3947
  var offlineDataId = eachOfflineData[serverId];
3450
- if (selectedId_2 === offlineDataId)
3948
+ if (selectedId === offlineDataId)
3451
3949
  selectedIndex_4 = index;
3452
3950
  return null;
3453
3951
  });
@@ -3473,28 +3971,28 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3473
3971
  data: offlineData,
3474
3972
  type: props.collectionId,
3475
3973
  })];
3476
- case 19:
3477
- _t.sent();
3478
- res = true;
3479
- return [3 /*break*/, 21];
3480
3974
  case 20:
3481
- err_21 = _t.sent();
3482
- return [3 /*break*/, 21];
3483
- case 21: return [3 /*break*/, 24];
3484
- case 22:
3975
+ _w.sent();
3976
+ res = true;
3977
+ return [3 /*break*/, 22];
3978
+ case 21:
3979
+ err_21 = _w.sent();
3980
+ return [3 /*break*/, 22];
3981
+ case 22: return [3 /*break*/, 25];
3982
+ case 23:
3485
3983
  if (type === "update" && columnId) {
3486
- dataToSubmit_2 = (_a = {},
3487
- _a[columnId] = createSelectedData_1[columnId],
3488
- _a);
3984
+ dataToSubmit_2 = (_b = {},
3985
+ _b[columnId] = createSelectedData_1[columnId],
3986
+ _b);
3489
3987
  }
3490
- else if ((_l = props.bareSettings) === null || _l === void 0 ? void 0 : _l.bareUpsertPartialUpdate) {
3491
- changedAttributeIds = (0, updateModule_1.compareUpdatedFields)((_m = loadedSelectedData.current) !== null && _m !== void 0 ? _m : {}, createSelectedData_1).changedAttributeIds;
3988
+ else if ((_m = props.bareSettings) === null || _m === void 0 ? void 0 : _m.bareUpsertPartialUpdate) {
3989
+ changedAttributeIds = (0, updateModule_1.compareUpdatedFields)((_o = loadedSelectedData.current) !== null && _o !== void 0 ? _o : {}, createSelectedData_1).changedAttributeIds;
3492
3990
  baseDraftValue = isDraft ? true : false;
3493
- hasBaseDraftChange = ((_p = (_o = loadedSelectedData.current) === null || _o === void 0 ? void 0 : _o["baseDraft"]) !== null && _p !== void 0 ? _p : false) !==
3991
+ hasBaseDraftChange = ((_q = (_p = loadedSelectedData.current) === null || _p === void 0 ? void 0 : _p["baseDraft"]) !== null && _q !== void 0 ? _q : false) !==
3494
3992
  baseDraftValue;
3495
3993
  // INFO: if nothing changed (including baseDraft), skip the write entirely
3496
3994
  if (changedAttributeIds.length === 0 && !hasBaseDraftChange)
3497
- return [2 /*return*/, id_1];
3995
+ return [2 /*return*/, id];
3498
3996
  dataToSubmit_2 = {};
3499
3997
  changedAttributeIds.forEach(function (key) {
3500
3998
  var _a;
@@ -3552,25 +4050,25 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3552
4050
  ? "create"
3553
4051
  : "update";
3554
4052
  return [4 /*yield*/, writeServerQuery.call(operationType, {
3555
- id: selectedId_2,
4053
+ id: selectedId,
3556
4054
  data: dataToSubmit_2,
3557
4055
  unique: uniqueColumnId,
3558
4056
  // INFO: bareUpsertPartialUpdate — upsert so the doc is created if it
3559
4057
  // doesn't exist yet (covers deterministicId passed directly as props.id).
3560
4058
  // Also applies to offline upload path so the doc is created if it was
3561
4059
  // deleted between the existence check and the write call.
3562
- upsert: ((_q = props.bareSettings) === null || _q === void 0 ? void 0 : _q.bareUpsertPartialUpdate) && !isOfflineUpdate
4060
+ upsert: ((_r = props.bareSettings) === null || _r === void 0 ? void 0 : _r.bareUpsertPartialUpdate) && !isOfflineUpdate
3563
4061
  ? true
3564
4062
  : undefined,
3565
4063
  })];
3566
- case 23:
3567
- res = _t.sent();
3568
- _t.label = 24;
3569
4064
  case 24:
3570
- if (!(type === "update" || type === "create")) return [3 /*break*/, 32];
3571
- if (!res) return [3 /*break*/, 31];
3572
- if (!(type === "update")) return [3 /*break*/, 27];
3573
- if (!columnId) return [3 /*break*/, 26];
4065
+ res = _w.sent();
4066
+ _w.label = 25;
4067
+ case 25:
4068
+ if (!(type === "update" || type === "create")) return [3 /*break*/, 33];
4069
+ if (!res) return [3 /*break*/, 32];
4070
+ if (!(type === "update")) return [3 /*break*/, 28];
4071
+ if (!columnId) return [3 /*break*/, 27];
3574
4072
  selectedIndex_5 = -1;
3575
4073
  tableData.map(function (eachData, index) {
3576
4074
  if (eachData.id === rowId || eachData._id === rowId) {
@@ -3580,26 +4078,29 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3580
4078
  return null;
3581
4079
  });
3582
4080
  return [4 /*yield*/, handleGetListData({ data: tableData[selectedIndex_5] }, "update", rowId)];
3583
- case 25:
3584
- _t.sent();
3585
- _t.label = 26;
3586
- case 26: return [3 /*break*/, 29];
3587
- case 27: return [4 /*yield*/, handleGetListData({ data: [createSelectedData_1] }, "create")];
3588
- case 28:
3589
- _t.sent();
3590
- _t.label = 29;
4081
+ case 26:
4082
+ _w.sent();
4083
+ _w.label = 27;
4084
+ case 27: return [3 /*break*/, 30];
4085
+ case 28: return [4 /*yield*/, handleGetListData({ data: [createSelectedData_1] }, "create")];
3591
4086
  case 29:
3592
- if (!((_r = props.bareSettings) === null || _r === void 0 ? void 0 : _r.bareUpdateHandlePostComplete)) return [3 /*break*/, 31];
3593
- return [4 /*yield*/, props.bareSettings.bareUpdateHandlePostComplete(__assign((_b = {}, _b[serverId] = id_1, _b), createSelectedData_1))];
4087
+ _w.sent();
4088
+ _w.label = 30;
3594
4089
  case 30:
3595
- _t.sent();
3596
- _t.label = 31;
3597
- case 31: return [3 /*break*/, 34];
3598
- case 32:
3599
- createSelectedData_1[serverId] = id_1;
3600
- return [4 /*yield*/, handleGetListData({ data: [createSelectedData_1] }, selectedId_2 === "new" ? "create" : "update", id_1)];
4090
+ if (!((_s = props.bareSettings) === null || _s === void 0 ? void 0 : _s.bareUpdateHandlePostComplete)) return [3 /*break*/, 32];
4091
+ return [4 /*yield*/, props.bareSettings.bareUpdateHandlePostComplete(__assign((_c = {}, _c[serverId] = id, _c), createSelectedData_1))];
4092
+ case 31:
4093
+ _w.sent();
4094
+ _w.label = 32;
4095
+ case 32: return [3 /*break*/, 36];
3601
4096
  case 33:
3602
- _t.sent();
4097
+ createSelectedData_1[serverId] = id;
4098
+ if (!!isOffline) return [3 /*break*/, 35];
4099
+ return [4 /*yield*/, handleGetListData({ data: [createSelectedData_1] }, selectedId === "new" ? "create" : "update", id)];
4100
+ case 34:
4101
+ _w.sent();
4102
+ _w.label = 35;
4103
+ case 35:
3603
4104
  setNotification({
3604
4105
  type: true,
3605
4106
  title: props.id === "new"
@@ -3609,12 +4110,12 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3609
4110
  ? "Data sucessfully created"
3610
4111
  : "Data sucessfully updated",
3611
4112
  });
3612
- _t.label = 34;
3613
- case 34:
3614
- dataId = res ? id_1 : "";
4113
+ _w.label = 36;
4114
+ case 36:
4115
+ dataId = res ? id : "";
3615
4116
  return [2 /*return*/, dataId];
3616
- case 35:
3617
- err_22 = _t.sent();
4117
+ case 37:
4118
+ err_22 = _w.sent();
3618
4119
  console.log("error", err_22);
3619
4120
  // INFO: clear in-flight guard on failure so the next save retries as a create
3620
4121
  if (isCreatingRef.current) {
@@ -3622,8 +4123,71 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3622
4123
  pendingDraftSaveRef.current = false;
3623
4124
  inflightIdRef.current = "";
3624
4125
  }
4126
+ if (!(((_t = props.bareSettings) === null || _t === void 0 ? void 0 : _t.bareOffline) &&
4127
+ id &&
4128
+ !offlineId &&
4129
+ !isOfflineUpdate &&
4130
+ !err_22.response)) return [3 /*break*/, 42];
4131
+ _w.label = 38;
4132
+ case 38:
4133
+ _w.trys.push([38, 41, , 42]);
4134
+ return [4 /*yield*/, indexedDb_1.indexedDb.getValue("local", props.collectionId)];
4135
+ case 39:
4136
+ offlineDataResp = _w.sent();
4137
+ offlineData = (_u = offlineDataResp === null || offlineDataResp === void 0 ? void 0 : offlineDataResp.data) !== null && _u !== void 0 ? _u : [];
4138
+ clonedForOffline = (0, updateModule_1.handleClonedDataAttribute)(selectedData, structure, props.devSettings.server, true, showId);
4139
+ tempData = (0, updateModule_1.handleParseOfflineWrite)(clonedForOffline, structure);
4140
+ if (!tempData[serverId])
4141
+ tempData[serverId] = id;
4142
+ delete tempData["update"];
4143
+ // INFO: existing server doc edited while "online" but write failed
4144
+ // → baseOnline:true so it can be patched on next successful sync.
4145
+ // New doc that never reached the server → baseOnline:false.
4146
+ tempData.syncStatus = "pending";
4147
+ tempData.baseOnline = selectedId !== "new";
4148
+ if (!tempData.__offlineBaseline) {
4149
+ tempData.__offlineBaseline = loadedSelectedData.current
4150
+ ? JSON.parse(JSON.stringify(loadedSelectedData.current))
4151
+ : null;
4152
+ }
4153
+ selectedIndex_6 = -1;
4154
+ offlineData.forEach(function (d, i) {
4155
+ if (d[serverId] === id)
4156
+ selectedIndex_6 = i;
4157
+ });
4158
+ if (selectedIndex_6 >= 0) {
4159
+ if (!tempData.__offlineBaseline &&
4160
+ offlineData[selectedIndex_6].__offlineBaseline) {
4161
+ tempData.__offlineBaseline =
4162
+ offlineData[selectedIndex_6].__offlineBaseline;
4163
+ }
4164
+ offlineData[selectedIndex_6] = tempData;
4165
+ }
4166
+ else {
4167
+ offlineData.push(tempData);
4168
+ }
4169
+ return [4 /*yield*/, indexedDb_1.indexedDb.putValue("local", {
4170
+ data: offlineData,
4171
+ type: props.collectionId,
4172
+ })];
4173
+ case 40:
4174
+ _w.sent();
4175
+ setNotification({
4176
+ type: false,
4177
+ title: selectedId === "new"
4178
+ ? "Create Failed — Saved Offline"
4179
+ : "Update Failed — Saved Offline",
4180
+ msg: "Network unavailable. Changes saved locally and will sync when reconnected.",
4181
+ });
4182
+ handleCheckOfflineDataLength();
4183
+ // INFO: return id so handleSubmit can navigate as if the save succeeded
4184
+ return [2 /*return*/, id];
4185
+ case 41:
4186
+ _a = _w.sent();
4187
+ return [3 /*break*/, 42];
4188
+ case 42:
3625
4189
  if (err_22.response && err_22.response.status === 400) {
3626
- if (typeof ((_s = err_22.response.data) === null || _s === void 0 ? void 0 : _s.err) === "string")
4190
+ if (typeof ((_v = err_22.response.data) === null || _v === void 0 ? void 0 : _v.err) === "string")
3627
4191
  setNotification({
3628
4192
  type: false,
3629
4193
  title: "Error",
@@ -3636,8 +4200,8 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3636
4200
  msg: "Please contact our administrator for assistance or try your request again later. We apologize for any inconvenience",
3637
4201
  });
3638
4202
  }
3639
- return [3 /*break*/, 36];
3640
- case 36: return [2 /*return*/];
4203
+ return [3 /*break*/, 43];
4204
+ case 43: return [2 /*return*/];
3641
4205
  }
3642
4206
  });
3643
4207
  }); };
@@ -3833,22 +4397,34 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3833
4397
  });
3834
4398
  }); };
3835
4399
  var handleRetrieveSelectedData = function (responseData) { return __awaiter(void 0, void 0, void 0, function () {
3836
- var clonedReferencesOptions_1, dummyRespData, dummyReferenceModelSchema, newRespData, _a;
3837
- var _b, _c, _d, _e, _f, _g;
3838
- return __generator(this, function (_h) {
3839
- switch (_h.label) {
4400
+ var resolved, clonedReferencesOptions_1, dummyRespData, dummyReferenceModelSchema, newRespData, _a;
4401
+ var _b, _c, _d, _e, _f, _g, _h, _j;
4402
+ return __generator(this, function (_k) {
4403
+ switch (_k.label) {
3840
4404
  case 0:
3841
- if (!responseData.data) return [3 /*break*/, 6];
3842
- if (!((_b = props.bareSettings) === null || _b === void 0 ? void 0 : _b.bareOffline)) return [3 /*break*/, 2];
4405
+ if (process.env.NODE_ENV !== "production") {
4406
+ console.debug("[DTW read] handleRetrieveSelectedData called", "offline=", (_b = props.bareSettings) === null || _b === void 0 ? void 0 : _b.bareOffline, "hasData=", !!(responseData === null || responseData === void 0 ? void 0 : responseData.data), "type=", props.type);
4407
+ }
4408
+ if (!responseData.data) return [3 /*break*/, 9];
4409
+ if (!((_c = props.bareSettings) === null || _c === void 0 ? void 0 : _c.bareOffline)) return [3 /*break*/, 5];
3843
4410
  // INFO: Mark as programmatic so initial data load doesn't populate dirtyFields
3844
4411
  programmaticUpdateRef.current = true;
4412
+ if (!(props.type === "read")) return [3 /*break*/, 2];
4413
+ return [4 /*yield*/, handleResolveOfflineReferences([
4414
+ responseData.data,
4415
+ ])];
4416
+ case 1:
4417
+ resolved = _k.sent();
4418
+ setSelectedData(resolved[0]);
4419
+ return [3 /*break*/, 3];
4420
+ case 2:
3845
4421
  setSelectedData(responseData.data);
3846
- // INFO: stamp the load baseline so bareUpsertPartialUpdate can diff
3847
- // against the original doc rather than the post-edit state.
3848
- // Deep clone to prevent shared-reference mutations from making the
3849
- // diff see no changes (e.g. listObject array pushes).
4422
+ _k.label = 3;
4423
+ case 3:
4424
+ // INFO: always baseline the raw doc (IDs intact) so diff/submit paths
4425
+ // compare against actual field values, not display labels.
3850
4426
  loadedSelectedData.current = JSON.parse(JSON.stringify(responseData.data));
3851
- if ((_c = props.bareSettings) === null || _c === void 0 ? void 0 : _c.bareReadHandleData)
4427
+ if ((_d = props.bareSettings) === null || _d === void 0 ? void 0 : _d.bareReadHandleData)
3852
4428
  props.bareSettings.bareReadHandleData(responseData.data);
3853
4429
  clonedReferencesOptions_1 = JSON.parse(JSON.stringify(referencesOptions));
3854
4430
  return [4 /*yield*/, Promise.all(structure.map(function (eachModel) { return __awaiter(void 0, void 0, void 0, function () {
@@ -3862,7 +4438,29 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3862
4438
  case 1:
3863
4439
  offlineDataResp = _c.sent();
3864
4440
  offlineData = (_a = offlineDataResp === null || offlineDataResp === void 0 ? void 0 : offlineDataResp.data) !== null && _a !== void 0 ? _a : [];
3865
- clonedReferencesOptions_1[eachModel.id] = offlineData;
4441
+ if (process.env.NODE_ENV !== "production") {
4442
+ console.debug("[DTW offline ref]", eachModel.id, "key=", eachModel.referenceSpaceId + "-ref", "count=", offlineData.length, "sample=", offlineData[0]);
4443
+ }
4444
+ // INFO: convert raw docs to Option[] format so reference Select
4445
+ // components receive { key, label, secondaryLabel } as expected
4446
+ // (mirrors the shape handleRetrieveObjectReferenceOptions builds online)
4447
+ if ((eachModel.type === "reference" ||
4448
+ eachModel.type === "listReference") &&
4449
+ eachModel.referenceLabel) {
4450
+ clonedReferencesOptions_1[eachModel.id] = offlineData.map(function (r) {
4451
+ var _a, _b, _c, _d;
4452
+ return ({
4453
+ key: (_b = (_a = r._id) !== null && _a !== void 0 ? _a : r.id) !== null && _b !== void 0 ? _b : "",
4454
+ label: (_d = (_c = r[eachModel.referenceLabel]) !== null && _c !== void 0 ? _c : r._id) !== null && _d !== void 0 ? _d : "",
4455
+ secondaryLabel: eachModel.referenceSecondaryLabel
4456
+ ? r[eachModel.referenceSecondaryLabel]
4457
+ : undefined,
4458
+ });
4459
+ });
4460
+ }
4461
+ else {
4462
+ clonedReferencesOptions_1[eachModel.id] = offlineData;
4463
+ }
3866
4464
  if (!(isObject && eachModel.objectData)) return [3 /*break*/, 3];
3867
4465
  prefix_1 = eachModel.id;
3868
4466
  return [4 /*yield*/, Promise.all((_b = eachModel.objectData) === null || _b === void 0 ? void 0 : _b.map(function (eachObjectData) { return __awaiter(void 0, void 0, void 0, function () {
@@ -3895,25 +4493,28 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3895
4493
  }
3896
4494
  });
3897
4495
  }); }))];
3898
- case 1:
3899
- _h.sent();
4496
+ case 4:
4497
+ _k.sent();
3900
4498
  setReferencesOptions(clonedReferencesOptions_1);
3901
- return [3 /*break*/, 6];
3902
- case 2:
4499
+ if (process.env.NODE_ENV !== "production") {
4500
+ console.debug("[DTW offline ref] setReferencesOptions done, keys=", Object.keys(clonedReferencesOptions_1), "pilotId count=", (_e = clonedReferencesOptions_1["pilotId"]) === null || _e === void 0 ? void 0 : _e.length);
4501
+ }
4502
+ return [3 /*break*/, 9];
4503
+ case 5:
3903
4504
  dummyRespData = JSON.parse(JSON.stringify(responseData.data), utils_1.jsonReviver);
3904
4505
  dummyReferenceModelSchema = JSON.parse(JSON.stringify(referenceModelSchema));
3905
- if (!(props.type === "read")) return [3 /*break*/, 4];
4506
+ if (!(props.type === "read")) return [3 /*break*/, 7];
3906
4507
  return [4 /*yield*/, (0, readModule_1.handleRetrieveDeepModel)(dummyRespData, structure !== null && structure !== void 0 ? structure : [], dbModule, devSettings, {
3907
- assetParentId: (_d = props.id) !== null && _d !== void 0 ? _d : "",
3908
- bucketName: (_e = devSettings.bucketName) !== null && _e !== void 0 ? _e : "",
3909
- }, dummyReferenceModelSchema, setReferenceSchema, (_f = props.organise) === null || _f === void 0 ? void 0 : _f.handleCustomDownloadFile)];
3910
- case 3:
3911
- _a = _h.sent();
3912
- return [3 /*break*/, 5];
3913
- case 4:
4508
+ assetParentId: (_f = props.id) !== null && _f !== void 0 ? _f : "",
4509
+ bucketName: (_g = devSettings.bucketName) !== null && _g !== void 0 ? _g : "",
4510
+ }, dummyReferenceModelSchema, setReferenceSchema, (_h = props.organise) === null || _h === void 0 ? void 0 : _h.handleCustomDownloadFile)];
4511
+ case 6:
4512
+ _a = _k.sent();
4513
+ return [3 /*break*/, 8];
4514
+ case 7:
3914
4515
  _a = dummyRespData;
3915
- _h.label = 5;
3916
- case 5:
4516
+ _k.label = 8;
4517
+ case 8:
3917
4518
  newRespData = _a;
3918
4519
  // INFO: Mark as programmatic so initial data load doesn't populate dirtyFields
3919
4520
  programmaticUpdateRef.current = true;
@@ -3923,14 +4524,14 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
3923
4524
  // Deep clone to prevent shared-reference mutations from making the
3924
4525
  // diff see no changes (e.g. listObject array pushes).
3925
4526
  loadedSelectedData.current = JSON.parse(JSON.stringify(newRespData));
3926
- if ((_g = props.bareSettings) === null || _g === void 0 ? void 0 : _g.bareReadHandleData)
4527
+ if ((_j = props.bareSettings) === null || _j === void 0 ? void 0 : _j.bareReadHandleData)
3927
4528
  props.bareSettings.bareReadHandleData(newRespData);
3928
4529
  if ((props.type === "update" || props.type === "read") &&
3929
4530
  props.id !== "new") {
3930
4531
  (0, updateModule_1.handleRetrieveReferenceOptions)(newRespData, structure, dbModule, devSettings, setReferencesOptions, setReferencesDetails);
3931
4532
  }
3932
- _h.label = 6;
3933
- case 6:
4533
+ _k.label = 9;
4534
+ case 9:
3934
4535
  setModalVisible(false);
3935
4536
  setLoading(false);
3936
4537
  return [2 /*return*/];
@@ -5684,7 +6285,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
5684
6285
  authList));
5685
6286
  };
5686
6287
  var renderContent = function () {
5687
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26;
6288
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28;
5688
6289
  var isBottom = ((_a = props.bareSettings) === null || _a === void 0 ? void 0 : _a.bareUpdateActionBottom) ? true : false;
5689
6290
  var tabs = renderTabs();
5690
6291
  var pages = [
@@ -5714,7 +6315,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
5714
6315
  type: "get",
5715
6316
  id: props.id,
5716
6317
  pipeline: pipeline,
5717
- }, offline: (_g = props.bareSettings) === null || _g === void 0 ? void 0 : _g.bareOffline, onChangeData: handleRetrieveSelectedData, onError: handleGetItemError }),
6318
+ }, offline: ((_g = props.bareSettings) === null || _g === void 0 ? void 0 : _g.bareOffline) && isNetworkOffline, onChangeData: handleRetrieveSelectedData, onError: handleGetItemError }),
5718
6319
  !loading && (react_1.default.createElement(react_1.default.Fragment, null,
5719
6320
  renderBreadcrumb(pages),
5720
6321
  react_1.default.createElement("div", null,
@@ -5906,7 +6507,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
5906
6507
  type: "get",
5907
6508
  id: props.id,
5908
6509
  pipeline: pipeline,
5909
- }, offline: (_6 = props.bareSettings) === null || _6 === void 0 ? void 0 : _6.bareOffline, onChangeData: handleRetrieveSelectedData, onError: handleGetItemError })),
6510
+ }, offline: ((_6 = props.bareSettings) === null || _6 === void 0 ? void 0 : _6.bareOffline) && isNetworkOffline, onChangeData: handleRetrieveSelectedData, onError: handleGetItemError })),
5910
6511
  renderBreadcrumb(pages),
5911
6512
  react_1.default.createElement("div", { className: "flex flex-col py-2 sm:items-center sm:flex-row" },
5912
6513
  (props.title || props.description) && (react_1.default.createElement("div", { className: "flex flex-col w-full" },
@@ -5978,7 +6579,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
5978
6579
  dbEndpoint: devSettings.dbEndpoint,
5979
6580
  dbAPIToken: devSettings.dbAPIToken,
5980
6581
  dbUserToken: devSettings.dbUserToken,
5981
- }, cond: handleReadQueryHocCond(), offline: (_21 = props.bareSettings) === null || _21 === void 0 ? void 0 : _21.bareOffline, onChangeData: function (data) {
6582
+ }, cond: handleReadQueryHocCond(), offline: ((_21 = props.bareSettings) === null || _21 === void 0 ? void 0 : _21.bareOffline) && isNetworkOffline, onChangeData: function (data) {
5982
6583
  handleGetListData(data, "", "");
5983
6584
  }, onError: handleGetItemError }));
5984
6585
  if ((_22 = props.renderSettings) === null || _22 === void 0 ? void 0 : _22.renderListUI) {
@@ -6160,15 +6761,24 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
6160
6761
  ? "w-full flex-row flex-wrap sm:flex-nowrap items-end"
6161
6762
  : "flex-col md:items-end md:flex-row") },
6162
6763
  (props.title || props.description) && (react_1.default.createElement("div", { className: "flex flex-col" },
6163
- props.title && (react_1.default.createElement("p", { className: "text-xl font-medium" }, props.title)),
6764
+ props.title && (react_1.default.createElement("div", { className: "flex items-center gap-2" },
6765
+ react_1.default.createElement("p", { className: "text-xl font-medium" }, props.title),
6766
+ ((_24 = props.bareSettings) === null || _24 === void 0 ? void 0 : _24.bareSocketName) &&
6767
+ isLive &&
6768
+ !isLiveOffline && (react_1.default.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-700" },
6769
+ react_1.default.createElement("span", { className: "h-1.5 w-1.5 rounded-full bg-green-500" }),
6770
+ "LIVE")),
6771
+ ((_25 = props.bareSettings) === null || _25 === void 0 ? void 0 : _25.bareSocketName) && isLiveOffline && (react_1.default.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-orange-100 px-2 py-0.5 text-xs font-medium text-orange-700" },
6772
+ react_1.default.createElement("span", { className: "h-1.5 w-1.5 rounded-full bg-orange-400" }),
6773
+ "OFFLINE")))),
6164
6774
  props.description && (react_1.default.createElement("span", { className: "text-sm text-gray-500" }, props.description)))),
6165
- react_1.default.createElement("div", { className: ((_24 = props.bareSettings) === null || _24 === void 0 ? void 0 : _24.bareCompactMode)
6775
+ react_1.default.createElement("div", { className: ((_26 = props.bareSettings) === null || _26 === void 0 ? void 0 : _26.bareCompactMode)
6166
6776
  ? "hidden sm:block grow"
6167
6777
  : "grow" }),
6168
6778
  renderListFilterElements(),
6169
6779
  renderListActionElements()),
6170
6780
  renderListNewRowFilterElements(),
6171
- (schemaPresent || ((_25 = props.bareSettings) === null || _25 === void 0 ? void 0 : _25.bareReadListTabs)) && (react_1.default.createElement(tabs_1.Tabs, { tabs: tabs, selectedId: viewType, linkType: props.linkType, custom: props.custom, onClick: function (id) { return handleSelectTab(id); }, darkMode: (_26 = props.organise) === null || _26 === void 0 ? void 0 : _26.darkMode })),
6781
+ (schemaPresent || ((_27 = props.bareSettings) === null || _27 === void 0 ? void 0 : _27.bareReadListTabs)) && (react_1.default.createElement(tabs_1.Tabs, { tabs: tabs, selectedId: viewType, linkType: props.linkType, custom: props.custom, onClick: function (id) { return handleSelectTab(id); }, darkMode: (_28 = props.organise) === null || _28 === void 0 ? void 0 : _28.darkMode })),
6172
6782
  renderTabContent(tabs, props.type, viewType),
6173
6783
  isBottom && renderActionButtons(props.type, true)));
6174
6784
  default:
@@ -7735,7 +8345,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
7735
8345
  };
7736
8346
  return (react_1.default.createElement(react_1.default.Fragment, null,
7737
8347
  renderNotification("root"),
7738
- ((_40 = (_39 = props.renderSettings) === null || _39 === void 0 ? void 0 : _39.renderLoadingUI) === null || _40 === void 0 ? void 0 : _40.call(_39)) && loading ? ((_41 = props.renderSettings) === null || _41 === void 0 ? void 0 : _41.renderLoadingUI()) : (react_1.default.createElement(modal_1.Modal, { maxWidth: selectedObjectStructureId || excelModal ? "2xl" : undefined, open: modalVisible, title: renderModalTitle(), renderContent: renderModalContent, onClose: function () {
8348
+ ((_43 = (_42 = props.renderSettings) === null || _42 === void 0 ? void 0 : _42.renderLoadingUI) === null || _43 === void 0 ? void 0 : _43.call(_42)) && loading ? ((_44 = props.renderSettings) === null || _44 === void 0 ? void 0 : _44.renderLoadingUI()) : (react_1.default.createElement(modal_1.Modal, { maxWidth: selectedObjectStructureId || excelModal ? "2xl" : undefined, open: modalVisible, title: renderModalTitle(), renderContent: renderModalContent, onClose: function () {
7739
8349
  var _a, _b;
7740
8350
  if (loading)
7741
8351
  return;