blixify-ui-web 1.2.182 → 1.2.184

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.
@@ -91,6 +91,7 @@ var BookmarkIcon_1 = __importDefault(require("@heroicons/react/24/outline/Bookma
91
91
  var solid_1 = require("@heroicons/react/24/solid");
92
92
  var html2canvas_1 = __importDefault(require("html2canvas"));
93
93
  var jspdf_1 = __importDefault(require("jspdf"));
94
+ var react_dom_1 = require("react-dom");
94
95
  var react_1 = __importStar(require("react"));
95
96
  var uuid_1 = require("uuid");
96
97
  var button_1 = require("../../action/button");
@@ -137,7 +138,6 @@ var blobModule_1 = require("../blobModule");
137
138
  var listModule_1 = require("../listModule");
138
139
  var formula_1 = require("../formula");
139
140
  var moduleUtils_1 = require("../moduleUtils");
140
- var queryForm_1 = require("../queryForm");
141
141
  var readModule_1 = require("../readModule");
142
142
  var readQuery_1 = require("../readQuery");
143
143
  var unionPagination_1 = require("./unionPagination");
@@ -147,7 +147,6 @@ var utils_1 = require("../utils");
147
147
  var writeQuery_1 = require("../writeQuery");
148
148
  var activityModal_1 = require("./activityModal");
149
149
  var authModal_1 = require("./authModal");
150
- var dataStateModel_1 = require("./dataStateModel");
151
150
  var indexedDb_1 = require("./indexedDb");
152
151
  var socket_1 = require("./socket");
153
152
  var newPagination_1 = require("../../display/newPagination");
@@ -216,10 +215,10 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
216
215
  // Every read of the view type below uses resolvedType. The distinction matters
217
216
  // most in effect dependency arrays — following props.type there would leave
218
217
  // the list never refetching while the panel is open, which fails silently.
219
- 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, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94;
218
+ 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, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94, _95, _96;
220
219
  // INFO: the panel cannot navigate its way out — handleNavigate("read") is
221
220
  // routed straight back into it — so expand-to-full-page is local state.
222
- var _95 = (0, react_1.useState)(false), drawerPageView = _95[0], setDrawerPageView = _95[1];
221
+ var _97 = (0, react_1.useState)(false), drawerPageView = _97[0], setDrawerPageView = _97[1];
223
222
  // INFO: the panel keeps rendering the record it was opened with rather than
224
223
  // live props. Without this, navigating back to the list would re-render the
225
224
  // still-mounted panel as a second list behind the overlay.
@@ -311,18 +310,18 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
311
310
  initialFilterReferenceDate: initialFilterReferenceDate,
312
311
  };
313
312
  };
314
- var _96 = intialiseDefaultFilterValues(), initialFilterSearch = _96.initialFilterSearch, initialFilterSearchParams = _96.initialFilterSearchParams, initialFilterSelection = _96.initialFilterSelection, initialFilterReference = _96.initialFilterReference, initialFilterReferenceDate = _96.initialFilterReferenceDate;
313
+ var _98 = intialiseDefaultFilterValues(), initialFilterSearch = _98.initialFilterSearch, initialFilterSearchParams = _98.initialFilterSearchParams, initialFilterSelection = _98.initialFilterSelection, initialFilterReference = _98.initialFilterReference, initialFilterReferenceDate = _98.initialFilterReferenceDate;
315
314
  // INFO: Persist view state hook — handles storage read/write for filter/sort/column state
316
- var _97 = (0, viewStatePersistence_1.usePersistedViewState)({
315
+ var _99 = (0, viewStatePersistence_1.usePersistedViewState)({
317
316
  mode: (_b = props.organise) === null || _b === void 0 ? void 0 : _b.persistViewState,
318
317
  collectionId: props.collectionId,
319
318
  persistKey: (_c = props.organise) === null || _c === void 0 ? void 0 : _c.persistKey,
320
319
  type: resolvedType,
321
- }), rawPersistedState = _97.persistedState, isPersistEnabled = _97.isEnabled, handleSaveView = _97.handleSaveView, handleRegisterViewSnapshot = _97.handleRegisterViewSnapshot;
320
+ }), rawPersistedState = _99.persistedState, isPersistEnabled = _99.isEnabled, handleSaveView = _99.handleSaveView, handleRegisterViewSnapshot = _99.handleRegisterViewSnapshot;
322
321
  // INFO: drop stored filters/sort on removed columns — they would empty the table
323
322
  var persistedState = (0, react_1.useMemo)(function () { return (0, viewStatePersistence_1.handlePruneStaleColumns)(rawPersistedState, props.model); }, [rawPersistedState, props.model]);
324
- var _98 = (0, react_1.useState)(false), loading = _98[0], setLoading = _98[1];
325
- var _99 = (0, react_1.useState)(), notification = _99[0], setNotification = _99[1];
323
+ var _100 = (0, react_1.useState)(false), loading = _100[0], setLoading = _100[1];
324
+ var _101 = (0, react_1.useState)(), notification = _101[0], setNotification = _101[1];
326
325
  // INFO: a success toast is confirmation, not a decision — it clears itself so
327
326
  // it never sits on the floating step bar; errors stay until dismissed
328
327
  (0, react_1.useEffect)(function () {
@@ -332,63 +331,62 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
332
331
  return function () { return clearTimeout(timer); };
333
332
  }, [notification]);
334
333
  //INFO : Used by List
335
- var _100 = (0, react_1.useState)((_d = persistedState === null || persistedState === void 0 ? void 0 : persistedState.filterSearchParams) !== null && _d !== void 0 ? _d : initialFilterSearch), filterSearch = _100[0], setFilterSearch = _100[1];
336
- var _101 = (0, react_1.useState)((_e = persistedState === null || persistedState === void 0 ? void 0 : persistedState.filterSearchParams) !== null && _e !== void 0 ? _e : initialFilterSearchParams), filterSearchParams = _101[0], setFilterSearchParams = _101[1];
337
- var _102 = (0, react_1.useState)((_f = persistedState === null || persistedState === void 0 ? void 0 : persistedState.filterSelection) !== null && _f !== void 0 ? _f : initialFilterSelection), filterSelection = _102[0], setFilterSelection = _102[1];
338
- var _103 = (0, react_1.useState)((_g = persistedState === null || persistedState === void 0 ? void 0 : persistedState.filterReference) !== null && _g !== void 0 ? _g : initialFilterReference), filterReference = _103[0], setFilterReference = _103[1];
339
- var _104 = (0, react_1.useState)({}), filterReferenceSearch = _104[0], setFilterReferenceSearch = _104[1];
340
- var _105 = (0, react_1.useState)({}), filterReferenceList = _105[0], setFilterReferenceList = _105[1];
341
- var _106 = (0, react_1.useState)((persistedState === null || persistedState === void 0 ? void 0 : persistedState.filterReferenceDate)
334
+ var _102 = (0, react_1.useState)((_d = persistedState === null || persistedState === void 0 ? void 0 : persistedState.filterSearchParams) !== null && _d !== void 0 ? _d : initialFilterSearch), filterSearch = _102[0], setFilterSearch = _102[1];
335
+ var _103 = (0, react_1.useState)((_e = persistedState === null || persistedState === void 0 ? void 0 : persistedState.filterSearchParams) !== null && _e !== void 0 ? _e : initialFilterSearchParams), filterSearchParams = _103[0], setFilterSearchParams = _103[1];
336
+ var _104 = (0, react_1.useState)((_f = persistedState === null || persistedState === void 0 ? void 0 : persistedState.filterSelection) !== null && _f !== void 0 ? _f : initialFilterSelection), filterSelection = _104[0], setFilterSelection = _104[1];
337
+ var _105 = (0, react_1.useState)((_g = persistedState === null || persistedState === void 0 ? void 0 : persistedState.filterReference) !== null && _g !== void 0 ? _g : initialFilterReference), filterReference = _105[0], setFilterReference = _105[1];
338
+ var _106 = (0, react_1.useState)({}), filterReferenceSearch = _106[0], setFilterReferenceSearch = _106[1];
339
+ var _107 = (0, react_1.useState)({}), filterReferenceList = _107[0], setFilterReferenceList = _107[1];
340
+ var _108 = (0, react_1.useState)((persistedState === null || persistedState === void 0 ? void 0 : persistedState.filterReferenceDate)
342
341
  ? (0, viewStatePersistence_1.parseDateFilterState)(persistedState.filterReferenceDate)
343
- : initialFilterReferenceDate), filterReferenceDate = _106[0], setFilterReferenceDate = _106[1];
344
- var _107 = (0, react_1.useState)(true), tableLoading = _107[0], setTableLoading = _107[1];
345
- var _108 = (0, react_1.useState)(""), cursor = _108[0], setCursor = _108[1];
346
- var _109 = (0, react_1.useState)(""), lastCursor = _109[0], setLastCursor = _109[1];
347
- var _110 = (0, react_1.useState)([]), tableData = _110[0], setTableData = _110[1];
348
- var _111 = (0, react_1.useState)([]), spaceTableData = _111[0], setSpaceTableData = _111[1];
342
+ : initialFilterReferenceDate), filterReferenceDate = _108[0], setFilterReferenceDate = _108[1];
343
+ var _109 = (0, react_1.useState)(true), tableLoading = _109[0], setTableLoading = _109[1];
344
+ var _110 = (0, react_1.useState)(""), cursor = _110[0], setCursor = _110[1];
345
+ var _111 = (0, react_1.useState)(""), lastCursor = _111[0], setLastCursor = _111[1];
346
+ var _112 = (0, react_1.useState)([]), tableData = _112[0], setTableData = _112[1];
347
+ var _113 = (0, react_1.useState)([]), spaceTableData = _113[0], setSpaceTableData = _113[1];
349
348
  // INFO: a save resolves after later renders, so it reads the table from here —
350
349
  // the state it closed over can predate an earlier save on the same row
351
350
  var tableDataRef = (0, react_1.useRef)([]);
352
351
  var spaceTableDataRef = (0, react_1.useRef)([]);
353
352
  tableDataRef.current = tableData;
354
353
  spaceTableDataRef.current = spaceTableData;
355
- var _112 = (0, react_1.useState)(0), size = _112[0], setSize = _112[1];
356
- var _113 = (0, react_1.useState)((_k = (_h = persistedState === null || persistedState === void 0 ? void 0 : persistedState.pageIndex) !== null && _h !== void 0 ? _h : (_j = props.organise) === null || _j === void 0 ? void 0 : _j.pageIndex) !== null && _k !== void 0 ? _k : 0), pageIndex = _113[0], setPageIndex = _113[1];
357
- var _114 = (0, react_1.useState)([]), selectedIds = _114[0], setSelectedIds = _114[1];
358
- var _115 = (0, react_1.useState)(false), selectAll = _115[0], setSelectAll = _115[1];
359
- var _116 = (0, react_1.useState)(""), deletePasscode = _116[0], setDeletePasscode = _116[1];
360
- var _117 = (0, react_1.useState)(""), deletePasscodeInput = _117[0], setDeletePasscodeInput = _117[1];
361
- var _118 = (0, react_1.useState)(""), deleteFeedId = _118[0], setDeleteFeedId = _118[1];
354
+ var _114 = (0, react_1.useState)(0), size = _114[0], setSize = _114[1];
355
+ var _115 = (0, react_1.useState)((_k = (_h = persistedState === null || persistedState === void 0 ? void 0 : persistedState.pageIndex) !== null && _h !== void 0 ? _h : (_j = props.organise) === null || _j === void 0 ? void 0 : _j.pageIndex) !== null && _k !== void 0 ? _k : 0), pageIndex = _115[0], setPageIndex = _115[1];
356
+ var _116 = (0, react_1.useState)([]), selectedIds = _116[0], setSelectedIds = _116[1];
357
+ var _117 = (0, react_1.useState)(false), selectAll = _117[0], setSelectAll = _117[1];
358
+ var _118 = (0, react_1.useState)(""), deletePasscode = _118[0], setDeletePasscode = _118[1];
359
+ var _119 = (0, react_1.useState)(""), deletePasscodeInput = _119[0], setDeletePasscodeInput = _119[1];
360
+ var _120 = (0, react_1.useState)(""), deleteFeedId = _120[0], setDeleteFeedId = _120[1];
362
361
  //INFO : Used by List Organise
363
362
  // INFO: Internal sort state that overrides props.organise?.sort when
364
363
  // persistViewState is enabled and a persisted sort exists
365
- var _119 = (0, react_1.useState)((_l = persistedState === null || persistedState === void 0 ? void 0 : persistedState.sort) !== null && _l !== void 0 ? _l : undefined), persistedSort = _119[0], setPersistedSort = _119[1];
366
- var _120 = (0, react_1.useState)(false), filterDraft = _120[0], setFilterDraft = _120[1];
367
- var _121 = (0, react_1.useState)(false), addTabModal = _121[0], setAddTabModal = _121[1];
368
- var _122 = (0, react_1.useState)(-1), editTabIndex = _122[0], setEditTabIndex = _122[1];
364
+ var _121 = (0, react_1.useState)((_l = persistedState === null || persistedState === void 0 ? void 0 : persistedState.sort) !== null && _l !== void 0 ? _l : undefined), persistedSort = _121[0], setPersistedSort = _121[1];
365
+ var _122 = (0, react_1.useState)(false), filterDraft = _122[0], setFilterDraft = _122[1];
366
+ var _123 = (0, react_1.useState)(false), addTabModal = _123[0], setAddTabModal = _123[1];
367
+ var _124 = (0, react_1.useState)(-1), editTabIndex = _124[0], setEditTabIndex = _124[1];
369
368
  //INFO : resolve the initial tab synchronously so the mount cond is already
370
369
  // tab-scoped — an empty initial tab caused a second wasted list fetch
371
- var _123 = (0, react_1.useState)(function () {
370
+ var _125 = (0, react_1.useState)(function () {
372
371
  var _a, _b;
373
372
  return (0, listModule_1.renderSelectedRefreshTab)(props.localURLEndpoint, resolvedType, props.collectionId, props.id, (_a = props.organise) === null || _a === void 0 ? void 0 : _a.extendedTabs, (_b = props.organise) === null || _b === void 0 ? void 0 : _b.viewId);
374
- }), selectedTab = _123[0], setSelectedTab = _123[1];
375
- var _124 = (0, react_1.useState)("dayGridMonth"), calendarView = _124[0], setCalendarView = _124[1];
373
+ }), selectedTab = _125[0], setSelectedTab = _125[1];
374
+ var _126 = (0, react_1.useState)("dayGridMonth"), calendarView = _126[0], setCalendarView = _126[1];
376
375
  // INFO: bareNewDTW calendar viewSwitch mode — drives the NewCalendar variant
377
376
  // (calendarView above drives the matching range query)
378
- var _125 = (0, react_1.useState)("month"), newCalendarViewMode = _125[0], setNewCalendarViewMode = _125[1];
379
- var _126 = (0, react_1.useState)(new Date()), calendarTabMonth = _126[0], setCalendarTabMonth = _126[1];
377
+ var _127 = (0, react_1.useState)("month"), newCalendarViewMode = _127[0], setNewCalendarViewMode = _127[1];
378
+ var _128 = (0, react_1.useState)(new Date()), calendarTabMonth = _128[0], setCalendarTabMonth = _128[1];
380
379
  // INFO: defaultViewSwitch picks the opening view only — the tab re-inits
381
380
  // whenever its settings change, and that must not undo the user's switch
382
381
  var calendarViewInitRef = (0, react_1.useRef)(false);
383
- var _127 = (0, react_1.useState)(true), kanbanDroppable = _127[0], setKanbanDroppable = _127[1];
384
- var _128 = (0, react_1.useState)([]), kanbanOptions = _128[0], setKanbanOptions = _128[1];
385
- var _129 = (0, react_1.useState)(false), queryForm = _129[0], setQueryForm = _129[1];
386
- var _130 = (0, react_1.useState)(false), batchUpdateModal = _130[0], setBatchUpdateModal = _130[1];
387
- var _131 = (0, react_1.useState)({
382
+ var _129 = (0, react_1.useState)(true), kanbanDroppable = _129[0], setKanbanDroppable = _129[1];
383
+ var _130 = (0, react_1.useState)([]), kanbanOptions = _130[0], setKanbanOptions = _130[1];
384
+ var _131 = (0, react_1.useState)(false), batchUpdateModal = _131[0], setBatchUpdateModal = _131[1];
385
+ var _132 = (0, react_1.useState)({
388
386
  columnId: "",
389
387
  columnData: {},
390
- }), batchUpdateData = _131[0], setBatchUpdateData = _131[1];
391
- var _132 = (0, react_1.useState)(function () {
388
+ }), batchUpdateData = _132[0], setBatchUpdateData = _132[1];
389
+ var _133 = (0, react_1.useState)(function () {
392
390
  var baseModel = (props === null || props === void 0 ? void 0 : props.model) || [];
393
391
  if (!persistedState)
394
392
  return baseModel;
@@ -414,8 +412,8 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
414
412
  });
415
413
  }
416
414
  return model;
417
- }), structure = _132[0], setStructure = _132[1];
418
- var _133 = (0, react_1.useState)(((_m = props === null || props === void 0 ? void 0 : props.organise) === null || _m === void 0 ? void 0 : _m.additionalQuery) || []), additionalQuery = _133[0], setAdditionalQuery = _133[1];
415
+ }), structure = _133[0], setStructure = _133[1];
416
+ var _134 = (0, react_1.useState)(((_m = props === null || props === void 0 ? void 0 : props.organise) === null || _m === void 0 ? void 0 : _m.additionalQuery) || []), additionalQuery = _134[0], setAdditionalQuery = _134[1];
419
417
  // INFO: State for user-configurable flex filters (Monday.com-style)
420
418
  // INFO: Initialize with one empty row so users see inputs immediately without clicking "Add Filter"
421
419
  var defaultFlexFilterRow = [
@@ -426,9 +424,9 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
426
424
  value: undefined,
427
425
  },
428
426
  ];
429
- var _134 = (0, react_1.useState)((persistedState === null || persistedState === void 0 ? void 0 : persistedState.flexFilters) && persistedState.flexFilters.length > 0
427
+ var _135 = (0, react_1.useState)((persistedState === null || persistedState === void 0 ? void 0 : persistedState.flexFilters) && persistedState.flexFilters.length > 0
430
428
  ? persistedState.flexFilters
431
- : defaultFlexFilterRow), flexFilters = _134[0], setFlexFilters = _134[1];
429
+ : defaultFlexFilterRow), flexFilters = _135[0], setFlexFilters = _135[1];
432
430
  // INFO: always-current mirror of flexFilters, read by the imperative apply/
433
431
  // clear methods so chained calls in one tick aren't stale.
434
432
  var flexFiltersRef = (0, react_1.useRef)(flexFilters);
@@ -441,74 +439,76 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
441
439
  }, [flexFilters]);
442
440
  // INFO: Debounced version of flexFilters used by renderImpSearchFilterConditions
443
441
  // to prevent API calls on every keystroke when typing in value inputs
444
- var _135 = (0, react_1.useState)((persistedState === null || persistedState === void 0 ? void 0 : persistedState.flexFilters) && persistedState.flexFilters.length > 0
442
+ var _136 = (0, react_1.useState)((persistedState === null || persistedState === void 0 ? void 0 : persistedState.flexFilters) && persistedState.flexFilters.length > 0
445
443
  ? persistedState.flexFilters
446
- : defaultFlexFilterRow), flexFiltersDebounced = _135[0], setFlexFiltersDebounced = _135[1];
447
- var _136 = (0, react_1.useState)({}), flexFilterReferenceOptions = _136[0], setFlexFilterReferenceOptions = _136[1];
448
- var _137 = (0, react_1.useState)({}), flexFilterReferenceSearch = _137[0], setFlexFilterReferenceSearch = _137[1];
449
- var _138 = (0, react_1.useState)(false), flexFilterModalOpen = _138[0], setFlexFilterModalOpen = _138[1];
450
- var _139 = (0, react_1.useState)(false), viewSettingsModalOpen = _139[0], setViewSettingsModalOpen = _139[1];
444
+ : defaultFlexFilterRow), flexFiltersDebounced = _136[0], setFlexFiltersDebounced = _136[1];
445
+ // INFO: the filter rows of the export being set up — started from the
446
+ // list's own when the export opens, so changing them leaves the list as it is
447
+ var _137 = (0, react_1.useState)(defaultFlexFilterRow), exportFlexFilters = _137[0], setExportFlexFilters = _137[1];
448
+ var _138 = (0, react_1.useState)({}), flexFilterReferenceOptions = _138[0], setFlexFilterReferenceOptions = _138[1];
449
+ var _139 = (0, react_1.useState)({}), flexFilterReferenceSearch = _139[0], setFlexFilterReferenceSearch = _139[1];
450
+ var _140 = (0, react_1.useState)(false), flexFilterModalOpen = _140[0], setFlexFilterModalOpen = _140[1];
451
+ var _141 = (0, react_1.useState)(false), viewSettingsModalOpen = _141[0], setViewSettingsModalOpen = _141[1];
451
452
  // INFO: Columns the end user chose to hide (bareSettings.bareViewSettings).
452
453
  // Deliberately kept out of `structure`: the props-sync effect below resets
453
454
  // structure to props.model whenever props change, which would wipe the
454
455
  // choice, and the persist effect derives schema-level hiddenColumnIds from
455
456
  // structure — writing user hides there would blur the two concepts.
456
- var _140 = (0, react_1.useState)((_o = persistedState === null || persistedState === void 0 ? void 0 : persistedState.userHiddenColumnIds) !== null && _o !== void 0 ? _o : []), userHiddenColumnIds = _140[0], setUserHiddenColumnIds = _140[1];
457
- var _141 = (0, react_1.useState)(""), columnSearch = _141[0], setColumnSearch = _141[1];
458
- var _142 = (0, react_1.useState)([]), savedViews = _142[0], setSavedViews = _142[1];
459
- var _143 = (0, react_1.useState)(null), activeSavedViewId = _143[0], setActiveSavedViewId = _143[1];
457
+ var _142 = (0, react_1.useState)((_o = persistedState === null || persistedState === void 0 ? void 0 : persistedState.userHiddenColumnIds) !== null && _o !== void 0 ? _o : []), userHiddenColumnIds = _142[0], setUserHiddenColumnIds = _142[1];
458
+ var _143 = (0, react_1.useState)(""), columnSearch = _143[0], setColumnSearch = _143[1];
459
+ var _144 = (0, react_1.useState)([]), savedViews = _144[0], setSavedViews = _144[1];
460
+ var _145 = (0, react_1.useState)(null), activeSavedViewId = _145[0], setActiveSavedViewId = _145[1];
460
461
  // INFO: null while the name box is closed
461
- var _144 = (0, react_1.useState)(null), savedViewName = _144[0], setSavedViewName = _144[1];
462
- var _145 = (0, react_1.useState)(null), deletingSavedViewId = _145[0], setDeletingSavedViewId = _145[1];
463
- var _146 = (0, react_1.useState)(null), draggingColumnId = _146[0], setDraggingColumnId = _146[1];
462
+ var _146 = (0, react_1.useState)(null), savedViewName = _146[0], setSavedViewName = _146[1];
463
+ var _147 = (0, react_1.useState)(null), deletingSavedViewId = _147[0], setDeletingSavedViewId = _147[1];
464
+ var _148 = (0, react_1.useState)(null), draggingColumnId = _148[0], setDraggingColumnId = _148[1];
464
465
  var columnRowRefs = (0, react_1.useRef)({});
465
466
  //INFO : Used by Auth
466
- var _147 = (0, react_1.useState)({
467
+ var _149 = (0, react_1.useState)({
467
468
  email: "",
468
469
  google: "",
469
470
  phone: "",
470
471
  disabled: false,
471
472
  create: false,
472
- }), authMethods = _147[0], setAuthMethods = _147[1];
473
- var _148 = (0, react_1.useState)(""), selectedAuthMethod = _148[0], setSelectedAuthMethod = _148[1];
473
+ }), authMethods = _149[0], setAuthMethods = _149[1];
474
+ var _150 = (0, react_1.useState)(""), selectedAuthMethod = _150[0], setSelectedAuthMethod = _150[1];
474
475
  // INFO: the sign-in check of a users datasheet's record is running; the
475
476
  // panel shows a spinner rather than nothing, which read as "no login"
476
- var _149 = (0, react_1.useState)(false), authLoading = _149[0], setAuthLoading = _149[1];
477
+ var _151 = (0, react_1.useState)(false), authLoading = _151[0], setAuthLoading = _151[1];
477
478
  // INFO: a delete is running — the ref answers a second tap at once, before
478
479
  // the state has rendered, and the state disables the confirm button
479
480
  var deletingRef = (0, react_1.useRef)(false);
480
- var _150 = (0, react_1.useState)(false), deleting = _150[0], setDeleting = _150[1];
481
+ var _152 = (0, react_1.useState)(false), deleting = _152[0], setDeleting = _152[1];
481
482
  // INFO: Used by Activity Log
482
- var _151 = (0, react_1.useState)(false), activityModal = _151[0], setActivityModal = _151[1];
483
- var _152 = (0, react_1.useState)(""), activityId = _152[0], setActivityId = _152[1];
483
+ var _153 = (0, react_1.useState)(false), activityModal = _153[0], setActivityModal = _153[1];
484
+ var _154 = (0, react_1.useState)(""), activityId = _154[0], setActivityId = _154[1];
484
485
  //INFO : Used by Export
485
- var _153 = (0, react_1.useState)(null), csvFile = _153[0], setCSVFile = _153[1];
486
- var _154 = (0, react_1.useState)([]), csvFileData = _154[0], setCSVFileData = _154[1];
487
- var _155 = (0, react_1.useState)(0), stepCSVIndex = _155[0], setStepCSVIndex = _155[1];
488
- var _156 = (0, react_1.useState)({}), listCSVMapAttribute = _156[0], setListCSVMapAttribute = _156[1];
489
- var _157 = (0, react_1.useState)({}), listCSVObjAttribute = _157[0], setListCSVObjAttribute = _157[1];
490
- var _158 = (0, react_1.useState)([]), csvAPIAttribute = _158[0], setCSVAPIAttribute = _158[1];
491
- var _159 = (0, react_1.useState)(((_p = props.devSettings.currentUser) === null || _p === void 0 ? void 0 : _p.userEmail) || ""), exportCSVEmail = _159[0], setExportCSVEmail = _159[1];
492
- var _160 = (0, react_1.useState)(((_r = (_q = props.organise) === null || _q === void 0 ? void 0 : _q.exportSettings) === null || _r === void 0 ? void 0 : _r.defaultExportPDFName) || ""), exportPDFTitle = _160[0], setExportPDFTitle = _160[1];
493
- var _161 = (0, react_1.useState)(false), exportPDFLoading = _161[0], setExportPDFLoading = _161[1];
494
- var _162 = (0, react_1.useState)(false), exportReadPDFLoading = _162[0], setExportReadPDFLoading = _162[1];
495
- var _163 = (0, react_1.useState)((_u = (_t = (_s = props.organise) === null || _s === void 0 ? void 0 : _s.exportSettings) === null || _t === void 0 ? void 0 : _t.sumColumnId) !== null && _u !== void 0 ? _u : []), exportSumAttributeIds = _163[0], setExportSumAttributeIds = _163[1];
496
- var _164 = (0, react_1.useState)((_x = (_w = (_v = props.organise) === null || _v === void 0 ? void 0 : _v.exportSettings) === null || _w === void 0 ? void 0 : _w.hideSubItems) !== null && _x !== void 0 ? _x : false), hideSubItems = _164[0], setHideSubItems = _164[1];
497
- var _165 = (0, react_1.useState)([]), importTableData = _165[0], setImportTableData = _165[1];
498
- var _166 = (0, react_1.useState)([]), queryList = _166[0], setQueryList = _166[1];
499
- var _167 = (0, react_1.useState)(undefined), allQueryList = _167[0], setAllQueryList = _167[1];
500
- var _168 = (0, react_1.useState)(-1), queryIndex = _168[0], setQueryIndex = _168[1];
486
+ var _155 = (0, react_1.useState)(null), csvFile = _155[0], setCSVFile = _155[1];
487
+ var _156 = (0, react_1.useState)([]), csvFileData = _156[0], setCSVFileData = _156[1];
488
+ var _157 = (0, react_1.useState)(0), stepCSVIndex = _157[0], setStepCSVIndex = _157[1];
489
+ var _158 = (0, react_1.useState)({}), listCSVMapAttribute = _158[0], setListCSVMapAttribute = _158[1];
490
+ var _159 = (0, react_1.useState)({}), listCSVObjAttribute = _159[0], setListCSVObjAttribute = _159[1];
491
+ var _160 = (0, react_1.useState)([]), csvAPIAttribute = _160[0], setCSVAPIAttribute = _160[1];
492
+ var _161 = (0, react_1.useState)(((_p = props.devSettings.currentUser) === null || _p === void 0 ? void 0 : _p.userEmail) || ""), exportCSVEmail = _161[0], setExportCSVEmail = _161[1];
493
+ var _162 = (0, react_1.useState)(((_r = (_q = props.organise) === null || _q === void 0 ? void 0 : _q.exportSettings) === null || _r === void 0 ? void 0 : _r.defaultExportPDFName) || ""), exportPDFTitle = _162[0], setExportPDFTitle = _162[1];
494
+ var _163 = (0, react_1.useState)(false), exportPDFLoading = _163[0], setExportPDFLoading = _163[1];
495
+ var _164 = (0, react_1.useState)(false), exportReadPDFLoading = _164[0], setExportReadPDFLoading = _164[1];
496
+ var _165 = (0, react_1.useState)((_u = (_t = (_s = props.organise) === null || _s === void 0 ? void 0 : _s.exportSettings) === null || _t === void 0 ? void 0 : _t.sumColumnId) !== null && _u !== void 0 ? _u : []), exportSumAttributeIds = _165[0], setExportSumAttributeIds = _165[1];
497
+ var _166 = (0, react_1.useState)((_x = (_w = (_v = props.organise) === null || _v === void 0 ? void 0 : _v.exportSettings) === null || _w === void 0 ? void 0 : _w.hideSubItems) !== null && _x !== void 0 ? _x : false), hideSubItems = _166[0], setHideSubItems = _166[1];
498
+ var _167 = (0, react_1.useState)([]), importTableData = _167[0], setImportTableData = _167[1];
499
+ var _168 = (0, react_1.useState)([]), queryList = _168[0], setQueryList = _168[1];
500
+ var _169 = (0, react_1.useState)(undefined), allQueryList = _169[0], setAllQueryList = _169[1];
501
501
  // INFO: a restored state wins over the prop; its "" is a list the user
502
502
  // ungrouped, so it opens ungrouped
503
- var _169 = (0, react_1.useState)((persistedState === null || persistedState === void 0 ? void 0 : persistedState.groupBy) !== undefined
503
+ var _170 = (0, react_1.useState)((persistedState === null || persistedState === void 0 ? void 0 : persistedState.groupBy) !== undefined
504
504
  ? persistedState.groupBy || undefined
505
- : (_y = props.organise) === null || _y === void 0 ? void 0 : _y.groupBy), groupId = _169[0], setGroupId = _169[1];
505
+ : (_y = props.organise) === null || _y === void 0 ? void 0 : _y.groupBy), groupId = _170[0], setGroupId = _170[1];
506
506
  // INFO: Monday-board per-group paging. Keyed by the group key that
507
507
  // handleBuildNewTableGroups() produces (a list option or "Unknown/No Value").
508
508
  // Each group tracks its own loaded cursor + total so it can lazily load its
509
509
  // next page as the user scrolls inside that band, independent of every other
510
510
  // group. Only used when renderCheckGroupPaging() is true.
511
- var _170 = (0, react_1.useState)({}), groupPageState = _170[0], setGroupPageState = _170[1];
511
+ var _171 = (0, react_1.useState)({}), groupPageState = _171[0], setGroupPageState = _171[1];
512
512
  // INFO: read fresh inside the async per-group fetch so chained scroll fires
513
513
  // in one tick do not re-fetch an already in-flight page.
514
514
  var groupPageStateRef = (0, react_1.useRef)({});
@@ -517,59 +517,59 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
517
517
  // list was re-read (new search, filter, sort or grouping) is dropped on
518
518
  // arrival instead of appending rows that belong to the old list
519
519
  var groupPagingGenRef = (0, react_1.useRef)(0);
520
- var _171 = (0, react_1.useState)(""), readTabSection = _171[0], setReadTabSection = _171[1];
521
- var _172 = (0, react_1.useState)(false), readFloatingNav = _172[0], setReadFloatingNav = _172[1];
520
+ var _172 = (0, react_1.useState)(""), readTabSection = _172[0], setReadTabSection = _172[1];
521
+ var _173 = (0, react_1.useState)(false), readFloatingNav = _173[0], setReadFloatingNav = _173[1];
522
522
  var readTabSectionRefs = (0, react_1.useRef)({});
523
523
  //INFO : Used by Read
524
524
  //INFO : Used by Update
525
- var _173 = (0, react_1.useState)(false), modalVisible = _173[0], setModalVisible = _173[1];
526
- var _174 = (0, react_1.useState)(false), deleteModal = _174[0], setDeleteModal = _174[1];
527
- var _175 = (0, react_1.useState)(false), excelModal = _175[0], setExcelModal = _175[1];
528
- var _176 = (0, react_1.useState)(false), exportExcel = _176[0], setExportExcel = _176[1];
529
- var _177 = (0, react_1.useState)(""), exportType = _177[0], setExportType = _177[1];
530
- var _178 = (0, react_1.useState)(false), exportQR = _178[0], setExportQR = _178[1];
531
- var _179 = (0, react_1.useState)(function () {
525
+ var _174 = (0, react_1.useState)(false), modalVisible = _174[0], setModalVisible = _174[1];
526
+ var _175 = (0, react_1.useState)(false), deleteModal = _175[0], setDeleteModal = _175[1];
527
+ var _176 = (0, react_1.useState)(false), excelModal = _176[0], setExcelModal = _176[1];
528
+ var _177 = (0, react_1.useState)(false), exportExcel = _177[0], setExportExcel = _177[1];
529
+ var _178 = (0, react_1.useState)(""), exportType = _178[0], setExportType = _178[1];
530
+ var _179 = (0, react_1.useState)(false), exportQR = _179[0], setExportQR = _179[1];
531
+ var _180 = (0, react_1.useState)(function () {
532
532
  var _a, _b;
533
533
  var firstTabId = (_b = (_a = structure.find(function (item) { return item.tabId; })) === null || _a === void 0 ? void 0 : _a.tabId) !== null && _b !== void 0 ? _b : "";
534
534
  return firstTabId;
535
- }), activeTab = _179[0], setActiveTab = _179[1];
536
- var _180 = (0, react_1.useState)(false), signatureSigning = _180[0], setSignatureSigning = _180[1];
537
- var _181 = (0, react_1.useState)({}), selectedData = _181[0], setSelectedData = _181[1];
538
- var _182 = (0, react_1.useState)(""), selectedObjectStructureId = _182[0], setSelectedObjectStructureId = _182[1];
539
- var _183 = (0, react_1.useState)(""), selectedObjectId = _183[0], setSelectedObjectId = _183[1];
540
- var _184 = (0, react_1.useState)(""), selectedListAddressId = _184[0], setSelectedListAddressId = _184[1];
541
- var _185 = (0, react_1.useState)(-1), selectedListAddressIndex = _185[0], setSelectedListAddressIndex = _185[1];
542
- var _186 = (0, react_1.useState)({
535
+ }), activeTab = _180[0], setActiveTab = _180[1];
536
+ var _181 = (0, react_1.useState)(false), signatureSigning = _181[0], setSignatureSigning = _181[1];
537
+ var _182 = (0, react_1.useState)({}), selectedData = _182[0], setSelectedData = _182[1];
538
+ var _183 = (0, react_1.useState)(""), selectedObjectStructureId = _183[0], setSelectedObjectStructureId = _183[1];
539
+ var _184 = (0, react_1.useState)(""), selectedObjectId = _184[0], setSelectedObjectId = _184[1];
540
+ var _185 = (0, react_1.useState)(""), selectedListAddressId = _185[0], setSelectedListAddressId = _185[1];
541
+ var _186 = (0, react_1.useState)(-1), selectedListAddressIndex = _186[0], setSelectedListAddressIndex = _186[1];
542
+ var _187 = (0, react_1.useState)({
543
543
  lat: 0,
544
544
  lng: 0,
545
545
  name: "",
546
- }), selectedListAddress = _186[0], setSelectedListAddress = _186[1];
547
- var _187 = (0, react_1.useState)({}), selectedObjectData = _187[0], setSelectedObjectData = _187[1];
548
- var _188 = (0, react_1.useState)(null), objectCellEdit = _188[0], setObjectCellEdit = _188[1];
549
- var _189 = (0, react_1.useState)(false), referenceLoading = _189[0], setReferenceLoading = _189[1];
550
- var _190 = (0, react_1.useState)({}), referencesOptions = _190[0], setReferencesOptions = _190[1];
551
- var _191 = (0, react_1.useState)({}), referencesDetails = _191[0], setReferencesDetails = _191[1];
552
- var _192 = (0, react_1.useState)({}), listReferencesOptions = _192[0], setListReferencesOptions = _192[1];
553
- var _193 = (0, react_1.useState)({}), referenceDeleteTableData = _193[0], setReferenceDeleteTableData = _193[1];
554
- var _194 = (0, react_1.useState)([]), relatedSections = _194[0], setRelatedSections = _194[1];
555
- var _195 = (0, react_1.useState)(0), referenceDeleteIndex = _195[0], setReferenceDeleteIndex = _195[1];
556
- var _196 = (0, react_1.useState)({
546
+ }), selectedListAddress = _187[0], setSelectedListAddress = _187[1];
547
+ var _188 = (0, react_1.useState)({}), selectedObjectData = _188[0], setSelectedObjectData = _188[1];
548
+ var _189 = (0, react_1.useState)(null), objectCellEdit = _189[0], setObjectCellEdit = _189[1];
549
+ var _190 = (0, react_1.useState)(false), referenceLoading = _190[0], setReferenceLoading = _190[1];
550
+ var _191 = (0, react_1.useState)({}), referencesOptions = _191[0], setReferencesOptions = _191[1];
551
+ var _192 = (0, react_1.useState)({}), referencesDetails = _192[0], setReferencesDetails = _192[1];
552
+ var _193 = (0, react_1.useState)({}), listReferencesOptions = _193[0], setListReferencesOptions = _193[1];
553
+ var _194 = (0, react_1.useState)({}), referenceDeleteTableData = _194[0], setReferenceDeleteTableData = _194[1];
554
+ var _195 = (0, react_1.useState)([]), relatedSections = _195[0], setRelatedSections = _195[1];
555
+ var _196 = (0, react_1.useState)(0), referenceDeleteIndex = _196[0], setReferenceDeleteIndex = _196[1];
556
+ var _197 = (0, react_1.useState)({
557
557
  id: "",
558
558
  name: "",
559
559
  type: "string",
560
- }), referenceCreationModal = _196[0], setReferenceCreationModal = _196[1];
561
- var _197 = (0, react_1.useState)({}), referenceModelSchema = _197[0], setReferenceSchema = _197[1];
562
- var _198 = (0, react_1.useState)([]), kanbanChecked = _198[0], setKanbanChecked = _198[1];
560
+ }), referenceCreationModal = _197[0], setReferenceCreationModal = _197[1];
561
+ var _198 = (0, react_1.useState)({}), referenceModelSchema = _198[0], setReferenceSchema = _198[1];
562
+ var _199 = (0, react_1.useState)([]), kanbanChecked = _199[0], setKanbanChecked = _199[1];
563
563
  //INFO : Offline
564
- var _199 = (0, react_1.useState)(0), offlineDataLength = _199[0], setOfflineDataLength = _199[1];
565
- var _200 = (0, react_1.useState)(false), offlineModal = _200[0], setOfflineModal = _200[1];
564
+ var _200 = (0, react_1.useState)(0), offlineDataLength = _200[0], setOfflineDataLength = _200[1];
565
+ var _201 = (0, react_1.useState)(false), offlineModal = _201[0], setOfflineModal = _201[1];
566
566
  // INFO: live-stream state — driven by socket connection and navigator.onLine
567
- var _201 = (0, react_1.useState)(false), isLive = _201[0], setIsLive = _201[1];
568
- var _202 = (0, react_1.useState)(false), isLiveOffline = _202[0], setIsLiveOffline = _202[1];
567
+ var _202 = (0, react_1.useState)(false), isLive = _202[0], setIsLive = _202[1];
568
+ var _203 = (0, react_1.useState)(false), isLiveOffline = _203[0], setIsLiveOffline = _203[1];
569
569
  // INFO: true when navigator is offline — used to switch ReadQueryHoc between
570
570
  // server reads (online, full pagination) and IndexedDB reads (offline, cached data).
571
571
  // Independent of SSE status so it works even when bareSocketName is not set.
572
- var _203 = (0, react_1.useState)(typeof navigator !== "undefined" ? !navigator.onLine : false), isNetworkOffline = _203[0], setIsNetworkOffline = _203[1];
572
+ var _204 = (0, react_1.useState)(typeof navigator !== "undefined" ? !navigator.onLine : false), isNetworkOffline = _204[0], setIsNetworkOffline = _204[1];
573
573
  var previousType = (0, react_1.useRef)(null);
574
574
  var previousSelectedData = (0, react_1.useRef)(null);
575
575
  var scrollSentinelRef = (0, react_1.useRef)(null);
@@ -789,7 +789,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
789
789
  var isSchemaHideMode = ((_10 = props.organise) === null || _10 === void 0 ? void 0 : _10.onChangeHide) ? true : false;
790
790
  // INFO: rows per page is a view setting the user can change, so it starts from
791
791
  // the persisted value and falls back to the consumer's limit
792
- var _204 = (0, react_1.useState)((_12 = (_11 = (isPersistEnabled ? persistedState === null || persistedState === void 0 ? void 0 : persistedState.pageLimit : undefined)) !== null && _11 !== void 0 ? _11 : props.limit) !== null && _12 !== void 0 ? _12 : 10), pageLimit = _204[0], setPageLimit = _204[1];
792
+ var _205 = (0, react_1.useState)((_12 = (_11 = (isPersistEnabled ? persistedState === null || persistedState === void 0 ? void 0 : persistedState.pageLimit : undefined)) !== null && _11 !== void 0 ? _11 : props.limit) !== null && _12 !== void 0 ? _12 : 10), pageLimit = _205[0], setPageLimit = _205[1];
793
793
  var limit = pageLimit;
794
794
  var isSavedViewsEnabled = !!((_13 = props.organise) === null || _13 === void 0 ? void 0 : _13.savedViews) && resolvedType === "list";
795
795
  // INFO: an app that stores views takes over from this browser's storage, so
@@ -843,6 +843,10 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
843
843
  var flexFilterStructure = isFormulaViewSupported
844
844
  ? structure
845
845
  : structure.filter(function (eachModel) { return eachModel.type !== "formula"; });
846
+ // INFO: an export's filters run on the export server, which cannot work out
847
+ // a formula, so its rows leave formula columns out — a formula filter on
848
+ // the list still narrows the export, by the ids of the rows it kept
849
+ var exportFilterStructure = structure.filter(function (eachModel) { return eachModel.type !== "formula"; });
846
850
  // INFO: every matching row of a formula view, unsorted — pages are cut
847
851
  // from it locally, so paging does not read the collection again
848
852
  // INFO: the formula sort and filter the row cap was last announced for
@@ -880,7 +884,7 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
880
884
  displayRows: filtered.map(function (eachEntry) { return eachEntry.displayRow; }),
881
885
  };
882
886
  };
883
- var _205 = (0, permissions_1.handleResolveDataTemplateWritePermissions)(props.edit), canUpdateRecord = _205.canUpdateRecord, canInlineUpdate = _205.canInlineUpdate, canBatchUpdate = _205.canBatchUpdate, canDeleteRecord = _205.canDeleteRecord;
887
+ var _206 = (0, permissions_1.handleResolveDataTemplateWritePermissions)(props.edit), canUpdateRecord = _206.canUpdateRecord, canInlineUpdate = _206.canInlineUpdate, canBatchUpdate = _206.canBatchUpdate, canDeleteRecord = _206.canDeleteRecord;
884
888
  var isEditor = ((_19 = props.edit) === null || _19 === void 0 ? void 0 : _19.allEditable) ? true : false;
885
889
  var isOffline = (_20 = props.bareSettings) === null || _20 === void 0 ? void 0 : _20.bareOffline;
886
890
  // INFO: when bareOfflineNetworkAware is true, the save path is also gated on
@@ -1245,8 +1249,61 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
1245
1249
  return (__assign(__assign({}, prev), (_a = {}, _a[columnId] = search, _a)));
1246
1250
  });
1247
1251
  };
1248
- var renderImpSearchFilterConditions = function () {
1252
+ // INFO: the export's own filter rows, handled like the list's but never
1253
+ // reading the list again — a reference column's options are shared with it
1254
+ var handleNewExportFilterRow = function () { return ({
1255
+ id: (0, uuid_1.v4)(),
1256
+ columnId: "",
1257
+ operator: "=",
1258
+ value: undefined,
1259
+ }); };
1260
+ var exportFlexActions = {
1261
+ handleAddFilter: function () {
1262
+ return setExportFlexFilters(function (previous) { return __spreadArray(__spreadArray([], previous, true), [
1263
+ handleNewExportFilterRow(),
1264
+ ], false); });
1265
+ },
1266
+ handleRemoveFilter: function (filterId) {
1267
+ return setExportFlexFilters(function (previous) {
1268
+ var remaining = previous.filter(function (each) { return each.id !== filterId; });
1269
+ return remaining.length > 0 ? remaining : [handleNewExportFilterRow()];
1270
+ });
1271
+ },
1272
+ handleClearAllFilters: function () {
1273
+ return setExportFlexFilters([handleNewExportFilterRow()]);
1274
+ },
1275
+ handleColumnChange: function (filterId, columnId) {
1276
+ return setExportFlexFilters(function (previous) {
1277
+ return previous.map(function (each) {
1278
+ var _a, _b, _c;
1279
+ if (each.id !== filterId)
1280
+ return each;
1281
+ var operators = flexFilter_1.FLEX_FILTER_OPERATOR_MAP[(_b = (_a = structure.find(function (eachModel) { return eachModel.id === columnId; })) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : ""];
1282
+ return __assign(__assign({}, each), { columnId: columnId, operator: (_c = operators === null || operators === void 0 ? void 0 : operators[0]) !== null && _c !== void 0 ? _c : "=", value: undefined });
1283
+ });
1284
+ });
1285
+ },
1286
+ handleOperatorChange: function (filterId, operator) {
1287
+ return setExportFlexFilters(function (previous) {
1288
+ return previous.map(function (each) {
1289
+ return each.id === filterId ? __assign(__assign({}, each), { operator: operator, value: undefined }) : each;
1290
+ });
1291
+ });
1292
+ },
1293
+ handleValueChange: function (filterId, value) {
1294
+ return setExportFlexFilters(function (previous) {
1295
+ return previous.map(function (each) {
1296
+ return each.id === filterId ? __assign(__assign({}, each), { value: value }) : each;
1297
+ });
1298
+ });
1299
+ },
1300
+ handleReferenceOptionsLoaded: handleFlexFilterReferenceOptionsLoaded,
1301
+ handleReferenceSearch: handleFlexFilterReferenceSearch,
1302
+ };
1303
+ // INFO: flexRows defaults to the list's filters; an export passes its own
1304
+ var renderImpSearchFilterConditions = function (flexRows) {
1249
1305
  var _a;
1306
+ if (flexRows === void 0) { flexRows = flexFiltersDebounced; }
1250
1307
  var query = (0, listModule_1.renderSearchFilterConditions)(structure, devSettings, {
1251
1308
  filterSearchParams: filterSearchParams,
1252
1309
  filterSelection: filterSelection,
@@ -1255,10 +1312,10 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
1255
1312
  filterDraft: filterDraft,
1256
1313
  }, additionalQuery !== null && additionalQuery !== void 0 ? additionalQuery : [], (_a = props.bareSettings) === null || _a === void 0 ? void 0 : _a.bareListFilterQuery, selectedTab);
1257
1314
  // INFO: Merge flex filter conditions into the query array (uses debounced state to avoid API calls on every keystroke)
1258
- if (flexFiltersDebounced.length > 0) {
1315
+ if (flexRows.length > 0) {
1259
1316
  // INFO: formula conditions never reach the server — the field is not
1260
1317
  // stored — and are applied to the rows by handleApplyFormulaView
1261
- var flexQuery = (0, listModule_1.renderFlexFilterConditions)(flexFiltersDebounced, structure).filter(function (eachQuery) { var _a; return !formulaColumnIds.includes((_a = eachQuery.queryId) !== null && _a !== void 0 ? _a : ""); });
1318
+ var flexQuery = (0, listModule_1.renderFlexFilterConditions)(flexRows, structure).filter(function (eachQuery) { var _a; return !formulaColumnIds.includes((_a = eachQuery.queryId) !== null && _a !== void 0 ? _a : ""); });
1262
1319
  if (flexQuery.length > 0) {
1263
1320
  if (query) {
1264
1321
  query = __spreadArray(__spreadArray([], query, true), flexQuery, true);
@@ -2113,6 +2170,17 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
2113
2170
  if (props.devSettings.schemaReference)
2114
2171
  setReferenceSchema(props.devSettings.schemaReference);
2115
2172
  }, [props.devSettings.schemaReference]);
2173
+ // INFO: an export starts from the filters the list shows, formula rows
2174
+ // aside (see exportFilterStructure)
2175
+ (0, react_1.useEffect)(function () {
2176
+ if (!exportExcel && !exportQR)
2177
+ return;
2178
+ var rows = flexFiltersRef.current.filter(function (eachFilter) { return !formulaColumnIds.includes(eachFilter.columnId); });
2179
+ setExportFlexFilters(rows.length > 0
2180
+ ? JSON.parse(JSON.stringify(rows))
2181
+ : [handleNewExportFilterRow()]);
2182
+ // eslint-disable-next-line react-hooks/exhaustive-deps
2183
+ }, [exportExcel, exportQR]);
2116
2184
  (0, react_1.useEffect)(function () {
2117
2185
  var _a;
2118
2186
  var newQuery = renderImpSearchFilterConditions();
@@ -6570,14 +6638,14 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
6570
6638
  }); };
6571
6639
  var handleExportCSVData = function (downloadLinkOnly, printOnly) { return __awaiter(void 0, void 0, void 0, function () {
6572
6640
  var exportQueryList, formulaRows, kept, baseUrl, apiEndpoint, reqData, res, dataList, csvDownloadLink, notificaitonMsg, err_27;
6573
- 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;
6574
- return __generator(this, function (_1) {
6575
- switch (_1.label) {
6641
+ 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;
6642
+ return __generator(this, function (_2) {
6643
+ switch (_2.label) {
6576
6644
  case 0:
6577
- _1.trys.push([0, 5, , 6]);
6645
+ _2.trys.push([0, 5, , 6]);
6578
6646
  setLoading(true);
6579
- exportQueryList = JSON.parse(JSON.stringify(queryList));
6580
- if ((_a = props.bareSettings) === null || _a === void 0 ? void 0 : _a.bareCSVExportSettings) {
6647
+ exportQueryList = ((_a = renderImpSearchFilterConditions(exportFlexFilters)) !== null && _a !== void 0 ? _a : []).filter(function (eachQuery) { return eachQuery.type !== "search"; });
6648
+ if ((_b = props.bareSettings) === null || _b === void 0 ? void 0 : _b.bareCSVExportSettings) {
6581
6649
  if (props.bareSettings.bareListFilterQuery)
6582
6650
  exportQueryList.push.apply(exportQueryList, props.bareSettings.bareListFilterQuery);
6583
6651
  }
@@ -6607,20 +6675,20 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
6607
6675
  apiEndpoint += "/handleExportCSV";
6608
6676
  reqData = __assign(__assign({ spaceId: props.collectionId, query: exportQueryList, userData: {
6609
6677
  userEmail: downloadLinkOnly ? "" : exportCSVEmail,
6610
- userName: (_c = (_b = props.devSettings.currentUser) === null || _b === void 0 ? void 0 : _b.userName) !== null && _c !== void 0 ? _c : "",
6611
- }, downloadLinkOnly: downloadLinkOnly, exportType: exportType === "excel" ? "excel" : undefined, excludeReferenceId: (_e = (_d = props.organise) === null || _d === void 0 ? void 0 : _d.exportSettings) === null || _e === void 0 ? void 0 : _e.excludeReferenceId, excludeSecondaryLabel: (_g = (_f = props.organise) === null || _f === void 0 ? void 0 : _f.exportSettings) === null || _g === void 0 ? void 0 : _g.excludeSecondaryLabel, csvHeaderUseName: (_j = (_h = props.organise) === null || _h === void 0 ? void 0 : _h.exportSettings) === null || _j === void 0 ? void 0 : _j.csvHeaderUseName, dateFormatString: (_l = (_k = props.organise) === null || _k === void 0 ? void 0 : _k.exportSettings) === null || _l === void 0 ? void 0 : _l.dateFormatString, excludeDataId: (_o = (_m = props.organise) === null || _m === void 0 ? void 0 : _m.exportSettings) === null || _o === void 0 ? void 0 : _o.excludeDataId, columnIds: (_q = (_p = props.organise) === null || _p === void 0 ? void 0 : _p.exportSettings) === null || _q === void 0 ? void 0 : _q.columnIds, sort: (_s = (_r = props.organise) === null || _r === void 0 ? void 0 : _r.exportSettings) === null || _s === void 0 ? void 0 : _s.sort, groupBy: groupId, sumAttributeId: exportSumAttributeIds, viewId: (selectedTab === null || selectedTab === void 0 ? void 0 : selectedTab.id) !== "general" ? selectedTab === null || selectedTab === void 0 ? void 0 : selectedTab.name : undefined }, (exportType === "qr-data" && {
6678
+ userName: (_d = (_c = props.devSettings.currentUser) === null || _c === void 0 ? void 0 : _c.userName) !== null && _d !== void 0 ? _d : "",
6679
+ }, downloadLinkOnly: downloadLinkOnly, exportType: exportType === "excel" ? "excel" : undefined, excludeReferenceId: (_f = (_e = props.organise) === null || _e === void 0 ? void 0 : _e.exportSettings) === null || _f === void 0 ? void 0 : _f.excludeReferenceId, excludeSecondaryLabel: (_h = (_g = props.organise) === null || _g === void 0 ? void 0 : _g.exportSettings) === null || _h === void 0 ? void 0 : _h.excludeSecondaryLabel, csvHeaderUseName: (_k = (_j = props.organise) === null || _j === void 0 ? void 0 : _j.exportSettings) === null || _k === void 0 ? void 0 : _k.csvHeaderUseName, dateFormatString: (_m = (_l = props.organise) === null || _l === void 0 ? void 0 : _l.exportSettings) === null || _m === void 0 ? void 0 : _m.dateFormatString, excludeDataId: (_p = (_o = props.organise) === null || _o === void 0 ? void 0 : _o.exportSettings) === null || _p === void 0 ? void 0 : _p.excludeDataId, columnIds: (_r = (_q = props.organise) === null || _q === void 0 ? void 0 : _q.exportSettings) === null || _r === void 0 ? void 0 : _r.columnIds, sort: (_t = (_s = props.organise) === null || _s === void 0 ? void 0 : _s.exportSettings) === null || _t === void 0 ? void 0 : _t.sort, groupBy: groupId, sumAttributeId: exportSumAttributeIds, viewId: (selectedTab === null || selectedTab === void 0 ? void 0 : selectedTab.id) !== "general" ? selectedTab === null || selectedTab === void 0 ? void 0 : selectedTab.name : undefined }, (exportType === "qr-data" && {
6612
6680
  public: true,
6613
6681
  publicLink: window.location.origin,
6614
6682
  })), { hideSubItems: hideSubItems });
6615
- return [4 /*yield*/, ((_t = props.lib) === null || _t === void 0 ? void 0 : _t.axios({
6683
+ return [4 /*yield*/, ((_u = props.lib) === null || _u === void 0 ? void 0 : _u.axios({
6616
6684
  url: apiEndpoint,
6617
6685
  method: "post",
6618
6686
  data: { data: reqData },
6619
6687
  }))];
6620
6688
  case 1:
6621
- res = _1.sent();
6622
- if (!(downloadLinkOnly && ((_u = res === null || res === void 0 ? void 0 : res.data) === null || _u === void 0 ? void 0 : _u.dataList))) return [3 /*break*/, 4];
6623
- dataList = (_v = res === null || res === void 0 ? void 0 : res.data) === null || _v === void 0 ? void 0 : _v.dataList;
6689
+ res = _2.sent();
6690
+ if (!(downloadLinkOnly && ((_v = res === null || res === void 0 ? void 0 : res.data) === null || _v === void 0 ? void 0 : _v.dataList))) return [3 /*break*/, 4];
6691
+ dataList = (_w = res === null || res === void 0 ? void 0 : res.data) === null || _w === void 0 ? void 0 : _w.dataList;
6624
6692
  if (!(dataList && typeof dataList === "object")) return [3 /*break*/, 4];
6625
6693
  csvDownloadLink = Object.values(dataList)[0];
6626
6694
  if (!(exportType === "csv" ||
@@ -6632,10 +6700,10 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
6632
6700
  if (!(exportType === "pdf" ||
6633
6701
  printOnly ||
6634
6702
  exportType === "print")) return [3 /*break*/, 4];
6635
- return [4 /*yield*/, (0, listModule_1.handleExportPDF)(csvDownloadLink, exportPDFTitle, printOnly, (_y = (_x = (_w = props.organise) === null || _w === void 0 ? void 0 : _w.exportSettings) === null || _x === void 0 ? void 0 : _x.generateBy) !== null && _y !== void 0 ? _y : "Admin")];
6703
+ return [4 /*yield*/, (0, listModule_1.handleExportPDF)(csvDownloadLink, exportPDFTitle, printOnly, (_z = (_y = (_x = props.organise) === null || _x === void 0 ? void 0 : _x.exportSettings) === null || _y === void 0 ? void 0 : _y.generateBy) !== null && _z !== void 0 ? _z : "Admin")];
6636
6704
  case 3:
6637
- _1.sent();
6638
- _1.label = 4;
6705
+ _2.sent();
6706
+ _2.label = 4;
6639
6707
  case 4:
6640
6708
  notificaitonMsg = "A download link will be sent to your email. This may take a while if the data is huge, contact our team if you do not receive any email after 10 minutes (Check your Junk Email too).";
6641
6709
  if (downloadLinkOnly)
@@ -6649,10 +6717,10 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
6649
6717
  }
6650
6718
  setLoading(false);
6651
6719
  handlePopUpModal(false);
6652
- setExportCSVEmail((_0 = (_z = props.devSettings.currentUser) === null || _z === void 0 ? void 0 : _z.userEmail) !== null && _0 !== void 0 ? _0 : "");
6720
+ setExportCSVEmail((_1 = (_0 = props.devSettings.currentUser) === null || _0 === void 0 ? void 0 : _0.userEmail) !== null && _1 !== void 0 ? _1 : "");
6653
6721
  return [3 /*break*/, 6];
6654
6722
  case 5:
6655
- err_27 = _1.sent();
6723
+ err_27 = _2.sent();
6656
6724
  setNotification({
6657
6725
  type: true,
6658
6726
  title: "Export Failed",
@@ -7038,43 +7106,6 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
7038
7106
  }
7039
7107
  });
7040
7108
  }); };
7041
- var handleViewQuery = function (index) {
7042
- setQueryIndex(index);
7043
- setQueryForm(!queryForm);
7044
- };
7045
- var handleSortQuery = function (index, sortType) {
7046
- var _a;
7047
- var sortList = JSON.parse(JSON.stringify(queryList));
7048
- var ascIndex = sortType === "up" ? index - 1 : index + 1;
7049
- _a = [
7050
- sortList[ascIndex],
7051
- sortList[index],
7052
- ], sortList[index] = _a[0], sortList[ascIndex] = _a[1];
7053
- setQueryList(sortList);
7054
- };
7055
- var handlePushQueryList = function (queryInput, queryIndex) {
7056
- var tempQueryList = [];
7057
- tempQueryList = queryList;
7058
- if (!tempQueryList.some(function (eachQuery) { return eachQuery.queryId === queryInput.queryId; })) {
7059
- tempQueryList.push(queryInput);
7060
- setQueryList(tempQueryList);
7061
- setQueryForm(false);
7062
- }
7063
- else if (queryIndex >= 0) {
7064
- var newQueryList = tempQueryList.map(function (eachQuery) {
7065
- return eachQuery.queryId === queryInput.queryId ? queryInput : eachQuery;
7066
- });
7067
- setQueryList(newQueryList);
7068
- handleViewQuery(-1);
7069
- }
7070
- else {
7071
- setNotification({
7072
- type: false,
7073
- title: "Failed to add",
7074
- msg: "Query with column ID already exists",
7075
- });
7076
- }
7077
- };
7078
7109
  //=====================================================================================
7079
7110
  //SECTION: Handle Utils
7080
7111
  //=====================================================================================
@@ -7139,16 +7170,18 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
7139
7170
  var header = Object.keys(csvFileData[0]);
7140
7171
  var dataList = [];
7141
7172
  csvAPIAttribute.map(function (eachAttribute) {
7173
+ var _a, _b;
7142
7174
  dataList.push({
7143
7175
  header: header[eachAttribute.ori],
7144
- detail: eachAttribute.id,
7176
+ // INFO: the field's name, as the mapping step showed it
7177
+ detail: (_b = (_a = structure.find(function (eachModel) { return eachModel.id === eachAttribute.id; })) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : eachAttribute.id,
7145
7178
  });
7146
7179
  return null;
7147
7180
  });
7148
7181
  return dataList;
7149
7182
  };
7150
7183
  var renderStepCSV = function () {
7151
- var _a;
7184
+ var _a, _b;
7152
7185
  switch (stepCSVIndex) {
7153
7186
  case 0:
7154
7187
  return (react_1.default.createElement(uploadInput_1.UploadInput, { lib: { axios: (_a = props.lib) === null || _a === void 0 ? void 0 : _a.axios }, label: "Please insert a csv file", fileDescription: "CSV file thats doesn't exceeds 30MB and row not more than 100 data", accept: ".csv", hidePreview: true, onChange: handleOnChangeCSV }));
@@ -7164,37 +7197,47 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
7164
7197
  }
7165
7198
  return "";
7166
7199
  });
7167
- return (react_1.default.createElement(react_1.default.Fragment, null, csvFileData.length > 0 && (react_1.default.createElement("div", { className: "pb-32" }, Object.entries(csvFileData[0]).map(function (eachRow, index) {
7168
- var eachKey = eachRow[0];
7169
- if (!eachKey)
7170
- return null;
7171
- var clonedListValue = JSON.parse(JSON.stringify(listCSVMapAttribute));
7172
- var selectedObjectModel = structure.find(function (eachModel) {
7173
- return ((eachModel.id === clonedListValue[index] &&
7174
- eachModel.type === "listObject") ||
7175
- (eachModel.id === clonedListValue[index] &&
7176
- eachModel.type === "object"));
7177
- });
7178
- return (react_1.default.createElement(react_1.default.Fragment, null,
7179
- react_1.default.createElement("div", { className: "grid items-center grid-cols-3 mt-6" },
7180
- eachKey,
7181
- react_1.default.createElement(select_1.Select, { portalDropdown: true, containerClassName: selectedObjectModel ? "ml-2" : "ml-2 col-span-2", label: "", options: filterOptions_1, value: clonedListValue[index], onChange: function (value) {
7182
- var clonedListValueAttribute = JSON.parse(JSON.stringify(listCSVMapAttribute));
7183
- clonedListValueAttribute[index] = value;
7184
- setListCSVMapAttribute(clonedListValueAttribute);
7185
- } }),
7186
- selectedObjectModel && (react_1.default.createElement(select_1.Select, { portalDropdown: true, containerClassName: "ml-4", label: "", options: (0, readModule_1.renderObjectOptions)(selectedObjectModel.objectData), value: listCSVObjAttribute[index], onChange: function (value) {
7187
- var clonedListObjectValueAttribute = JSON.parse(JSON.stringify(listCSVObjAttribute));
7188
- clonedListObjectValueAttribute[index] = value;
7189
- setListCSVObjAttribute(clonedListObjectValueAttribute);
7190
- } })))));
7191
- })))));
7200
+ return (react_1.default.createElement(react_1.default.Fragment, null, csvFileData.length > 0 && (
7201
+ // INFO: one compact row per Excel column — its header, then the
7202
+ // field it fills — so a wide sheet maps without a long form
7203
+ react_1.default.createElement("div", { className: "pb-32" },
7204
+ react_1.default.createElement("div", { className: "grid grid-cols-[minmax(0,2fr)_1rem_minmax(0,3fr)] items-center gap-x-2 border-b pb-1 text-xs font-medium ".concat(((_b = props.organise) === null || _b === void 0 ? void 0 : _b.darkMode) ? "border-gray-700 text-gray-400" : "border-gray-200 text-gray-500") },
7205
+ react_1.default.createElement("span", null, "Excel column"),
7206
+ react_1.default.createElement("span", null),
7207
+ react_1.default.createElement("span", null, "Field")),
7208
+ Object.entries(csvFileData[0]).map(function (eachRow, index) {
7209
+ var _a;
7210
+ var eachKey = eachRow[0];
7211
+ if (!eachKey)
7212
+ return null;
7213
+ var clonedListValue = JSON.parse(JSON.stringify(listCSVMapAttribute));
7214
+ var selectedObjectModel = structure.find(function (eachModel) {
7215
+ return ((eachModel.id === clonedListValue[index] &&
7216
+ eachModel.type === "listObject") ||
7217
+ (eachModel.id === clonedListValue[index] &&
7218
+ eachModel.type === "object"));
7219
+ });
7220
+ return (react_1.default.createElement("div", { key: "".concat(eachKey, "-").concat(index), className: "grid grid-cols-[minmax(0,2fr)_1rem_minmax(0,3fr)] items-center gap-x-2 py-1.5" },
7221
+ react_1.default.createElement("span", { className: "truncate text-sm ".concat(((_a = props.organise) === null || _a === void 0 ? void 0 : _a.darkMode) ? "text-gray-200" : "text-gray-700") }, eachKey),
7222
+ react_1.default.createElement(outline_1.ArrowRightIcon, { className: "h-4 w-4 text-gray-400", "aria-hidden": "true" }),
7223
+ react_1.default.createElement("div", { className: "flex min-w-0 gap-x-2" },
7224
+ react_1.default.createElement(select_1.Select, { portalDropdown: true, size: "xs", containerClassName: "min-w-0 flex-1", label: "", options: filterOptions_1, value: clonedListValue[index], onChange: function (value) {
7225
+ var clonedListValueAttribute = JSON.parse(JSON.stringify(listCSVMapAttribute));
7226
+ clonedListValueAttribute[index] = value;
7227
+ setListCSVMapAttribute(clonedListValueAttribute);
7228
+ } }),
7229
+ selectedObjectModel && (react_1.default.createElement(select_1.Select, { portalDropdown: true, size: "xs", containerClassName: "min-w-0 flex-1", label: "", options: (0, readModule_1.renderObjectOptions)(selectedObjectModel.objectData), value: listCSVObjAttribute[index], onChange: function (value) {
7230
+ var clonedListObjectValueAttribute = JSON.parse(JSON.stringify(listCSVObjAttribute));
7231
+ clonedListObjectValueAttribute[index] = value;
7232
+ setListCSVObjAttribute(clonedListObjectValueAttribute);
7233
+ } })))));
7234
+ })))));
7192
7235
  case 2:
7193
7236
  return (react_1.default.createElement(react_1.default.Fragment, null,
7194
7237
  react_1.default.createElement("div", { className: "flex flex-col mx-auto mt-2" }, "Mapped Column"),
7195
7238
  react_1.default.createElement(table_1.Table, { loading: false, data: renderExcelReviewData(), hidePagination: true, limit: csvAPIAttribute.length + 1, header: [
7196
- { key: "header", title: "Excel Column" },
7197
- { key: "detail", title: "Mapping Column" },
7239
+ { key: "header", title: "Excel column" },
7240
+ { key: "detail", title: "Field" },
7198
7241
  ] })));
7199
7242
  case 3:
7200
7243
  return (react_1.default.createElement(react_1.default.Fragment, null,
@@ -7207,40 +7250,6 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
7207
7250
  return null;
7208
7251
  }
7209
7252
  };
7210
- var renderQueryData = function () {
7211
- var queryStructureView = [];
7212
- var sortComponent = undefined;
7213
- queryList.map(function (data, index) {
7214
- if (queryList.length > 1) {
7215
- var upData_1 = index === queryList.length - 1;
7216
- sortComponent = (react_1.default.createElement("div", { className: "ml-2 cursor-pointer", onClick: function () {
7217
- handleSortQuery(index, upData_1 ? "up" : "down");
7218
- } }, upData_1 ? (react_1.default.createElement(outline_1.ArrowUpIcon, { className: "block w-5 h-5 text-primary-600" })) : (react_1.default.createElement(outline_1.ArrowDownIcon, { className: "block w-5 h-5 text-primary-600" }))));
7219
- }
7220
- var value = data.value;
7221
- var isDate = (0, dayjs_1.default)(value);
7222
- if (isDate.isValid())
7223
- value = (0, dayjs_1.default)(value).format("DD/MM/YYYY h:mm a");
7224
- queryStructureView.push({
7225
- key: index,
7226
- name: data.queryId,
7227
- value: value,
7228
- sort: sortComponent,
7229
- view: (react_1.default.createElement("div", { className: "ml-2 cursor-pointer", onClick: function () {
7230
- handleViewQuery(index);
7231
- } },
7232
- react_1.default.createElement(outline_1.EyeIcon, { className: "block w-5 h-5 text-primary-600" }))),
7233
- del: (react_1.default.createElement("div", { className: "ml-2 cursor-pointer", onClick: function () {
7234
- var temp = JSON.parse(JSON.stringify(queryList));
7235
- temp.splice(index, 1);
7236
- setQueryList(temp);
7237
- } },
7238
- react_1.default.createElement(outline_1.TrashIcon, { className: "block w-5 h-5 text-primary-600" }))),
7239
- });
7240
- return "";
7241
- });
7242
- return queryStructureView;
7243
- };
7244
7253
  //=====================================================================================
7245
7254
  //SECTION: Render CRUD
7246
7255
  //=====================================================================================
@@ -7943,7 +7952,10 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
7943
7952
  else if (type === "list") {
7944
7953
  var listActionBtns = [];
7945
7954
  if (isActivityLog) {
7946
- listActionBtns.push(react_1.default.createElement(iconButton_1.IconButton, { icon: react_1.default.createElement(HeroIcons.ClockIcon, { className: "h-7 w-7 text-white" }), onClick: function () { return setActivityModal(true); }, background: "bg-primary-500 hover:bg-primary-600" }));
7955
+ listActionBtns.push(react_1.default.createElement(iconButton_1.IconButton, { icon: react_1.default.createElement(HeroIcons.ClockIcon, { className: "h-7 w-7 text-white" }), onClick: function () {
7956
+ setActivityId("");
7957
+ setActivityModal(true);
7958
+ }, background: "bg-primary-500 hover:bg-primary-600" }));
7947
7959
  }
7948
7960
  if (bareActionComponent) {
7949
7961
  listActionBtns.push(bareActionComponent);
@@ -9645,6 +9657,14 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
9645
9657
  // INFO: when bareNewDTW is enabled, render NewTable instead of legacy Table
9646
9658
  if ((_b = props.bareSettings) === null || _b === void 0 ? void 0 : _b.bareNewDTW) {
9647
9659
  return (react_1.default.createElement(newTable_1.NewTable, { darkModeBg: (_c = props.organise) === null || _c === void 0 ? void 0 : _c.darkModeBg, showId: showId, paginationType: renderResolvedPaginationType(), data: tableData, spaceData: spaceTableData !== null && spaceTableData !== void 0 ? spaceTableData : [], referencesOptions: listReferencesOptions, groups: handleBuildNewTableGroups(),
9660
+ // INFO: the bubble beside each record's title opens its comments and
9661
+ // logs, for anyone who can see the row — not only those who can edit
9662
+ onRowActivity: isActivityLog
9663
+ ? function (id) {
9664
+ setActivityId(id);
9665
+ setActivityModal(true);
9666
+ }
9667
+ : undefined,
9648
9668
  // INFO: per-group paging — scroll appends inside a band, page
9649
9669
  // mode gives each band its own pager; undefined = bands as before
9650
9670
  onGroupLoadMore: renderCheckGroupPaging() && renderCheckScrollMode()
@@ -10984,52 +11004,37 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
10984
11004
  }
10985
11005
  else if (exportExcel || exportQR) {
10986
11006
  var showEmail = exportType !== "pdf" && !((_f = (_e = props.organise) === null || _e === void 0 ? void 0 : _e.exportSettings) === null || _f === void 0 ? void 0 : _f.disableEmail);
10987
- return (react_1.default.createElement(react_1.default.Fragment, null, queryForm ? (react_1.default.createElement(queryForm_1.QueryForm, { dbModule: (_g = props.lib) === null || _g === void 0 ? void 0 : _g.axios, model: structure, updateQuery: queryIndex >= 0 ? queryList[queryIndex] : undefined, devSettings: props.devSettings, handleCloseForm: function () {
10988
- handleViewQuery(-1);
10989
- }, handleQueryOnComplete: function (queryData) {
10990
- handlePushQueryList(queryData, queryIndex);
10991
- }, renderReferenceLabelOptions: ((_h = props.organise) === null || _h === void 0 ? void 0 : _h.renderReferenceLabelOptions)
10992
- ? (_j = props.organise) === null || _j === void 0 ? void 0 : _j.renderReferenceLabelOptions
10993
- : function () {
10994
- return [];
10995
- } })) : (react_1.default.createElement("div", null,
10996
- showEmail ? (react_1.default.createElement(react_1.default.Fragment, null,
10997
- react_1.default.createElement("div", null,
10998
- react_1.default.createElement("h1", null, "Download file or send it via email."),
10999
- react_1.default.createElement("p", { className: "pt-2 mb-4 text-sm text-gray-600" },
11000
- exportExcel
11001
- ? "Export your data to .csv format to be viewable on Excel."
11002
- : "Export your data to .pdf format to be viewable on Adobe/Browser.",
11003
- "Filter your data exported based on conditions by creating queries at the table below."),
11004
- react_1.default.createElement(react_1.default.Fragment, null,
11005
- react_1.default.createElement(textInput_1.TextInput, { ref: exportCSVEmailInputRef, value: exportCSVEmail, type: "email", label: "Email", subLabel: "A download link will be sent to your email", placeholder: (_l = (_k = props.devSettings.currentUser) === null || _k === void 0 ? void 0 : _k.userEmail) !== null && _l !== void 0 ? _l : "Enter your email", onChange: function (e) { return setExportCSVEmail(e.target.value); } }),
11006
- react_1.default.createElement("div", { className: "flex mt-5 items-center justify-end" },
11007
- react_1.default.createElement(iconButton_1.IconButton, { className: "sm", icon: react_1.default.createElement(outline_1.PlusCircleIcon, { className: "w-6 h-6 text-white" }), background: "bg-primary-500 hover:bg-primary-600", onClick: function () { return setQueryForm(!queryForm); } })))),
11008
- react_1.default.createElement(table_1.Table, { className: "mt-5", header: dataStateModel_1.queryTableHeader, data: renderQueryData(), loading: false }))) : (react_1.default.createElement(react_1.default.Fragment, null,
11009
- react_1.default.createElement("p", null, "Click the button below to download."),
11010
- (exportType === "pdf" || exportType === "print") && (react_1.default.createElement(textInput_1.TextInput, { containerClassName: "mt-5", value: exportPDFTitle, type: "text", label: "Title (Optional)", placeholder: (_p = (_o = (_m = props.organise) === null || _m === void 0 ? void 0 : _m.exportSettings) === null || _o === void 0 ? void 0 : _o.defaultExportPDFName) !== null && _p !== void 0 ? _p : "Enter your report title", onChange: function (e) { return setExportPDFTitle(e.target.value); } })),
11011
- (exportType === "pdf" || exportType === "print") && (react_1.default.createElement(select_1.Select, { portalDropdown: true, label: "Sum Attribute", containerClassName: "mt-5", value: exportSumAttributeIds, options: (_s = (_r = (_q = props.organise) === null || _q === void 0 ? void 0 : _q.renderReferenceLabelOptions) === null || _r === void 0 ? void 0 : _r.call(_q, "", false, "number")) !== null && _s !== void 0 ? _s : [], staticDropdown: true, onChange: function (value) {
11012
- setExportSumAttributeIds(value);
11013
- } })))),
11014
- react_1.default.createElement("div", { className: "mt-5 flex items-center justify-between" },
11015
- react_1.default.createElement("label", { className: "text-sm font-medium ".concat(((_t = props.organise) === null || _t === void 0 ? void 0 : _t.darkMode) ? "text-gray-200" : "text-gray-700") }, "Hide Sub Items"),
11016
- react_1.default.createElement(toggle_1.Toggle, { text: "", direction: "right", value: hideSubItems, onClick: function () { return setHideSubItems(!hideSubItems); } })),
11017
- react_1.default.createElement("div", { className: "flex justify-end mt-5 " },
11018
- showEmail && (react_1.default.createElement(button_1.Button, { text: "Send to email", size: "small", type: "normal", onClick: function () { return __awaiter(void 0, void 0, void 0, function () {
11019
- return __generator(this, function (_a) {
11020
- switch (_a.label) {
11021
- case 0: return [4 /*yield*/, exportCSVEmailInputRef.current.handleSubmit()];
11022
- case 1:
11023
- if (_a.sent()) {
11024
- handleExportCSVData();
11025
- }
11026
- return [2 /*return*/];
11027
- }
11028
- });
11029
- }); } })),
11030
- react_1.default.createElement(button_1.Button, { type: "normal", text: "Download", size: "small", className: "ml-3", onClick: function () {
11031
- return handleExportCSVData(true, exportType === "print");
11032
- } }))))));
11007
+ return (react_1.default.createElement(react_1.default.Fragment, null,
11008
+ react_1.default.createElement("div", null,
11009
+ showEmail ? (react_1.default.createElement(textInput_1.TextInput, { ref: exportCSVEmailInputRef, value: exportCSVEmail, type: "email", label: "Email", size: "xs", placeholder: (_h = (_g = props.devSettings.currentUser) === null || _g === void 0 ? void 0 : _g.userEmail) !== null && _h !== void 0 ? _h : "Enter your email", onChange: function (e) { return setExportCSVEmail(e.target.value); } })) : (react_1.default.createElement(react_1.default.Fragment, null,
11010
+ react_1.default.createElement("p", null, "Click the button below to download."),
11011
+ (exportType === "pdf" || exportType === "print") && (react_1.default.createElement(textInput_1.TextInput, { containerClassName: "mt-5", value: exportPDFTitle, type: "text", label: "Title (Optional)", placeholder: (_l = (_k = (_j = props.organise) === null || _j === void 0 ? void 0 : _j.exportSettings) === null || _k === void 0 ? void 0 : _k.defaultExportPDFName) !== null && _l !== void 0 ? _l : "Enter your report title", onChange: function (e) { return setExportPDFTitle(e.target.value); } })),
11012
+ (exportType === "pdf" || exportType === "print") && (react_1.default.createElement(select_1.Select, { portalDropdown: true, label: "Sum Attribute", containerClassName: "mt-5", value: exportSumAttributeIds, options: (_p = (_o = (_m = props.organise) === null || _m === void 0 ? void 0 : _m.renderReferenceLabelOptions) === null || _o === void 0 ? void 0 : _o.call(_m, "", false, "number")) !== null && _p !== void 0 ? _p : [], staticDropdown: true, onChange: function (value) {
11013
+ setExportSumAttributeIds(value);
11014
+ } })))),
11015
+ react_1.default.createElement("div", { className: "mt-3 -mx-4 [&>div]:w-full [&>div]:max-w-none" }, (0, flexFilter_1.renderFlexFilterPopupContent)(exportFlexFilters, exportFilterStructure, devSettings, dbModule, flexFilterReferenceOptions, flexFilterReferenceSearch, exportFlexActions, (_q = props.bareSettings) === null || _q === void 0 ? void 0 : _q.bareListFilterQuery, undefined, undefined, true, {
11016
+ darkMode: (_r = props.organise) === null || _r === void 0 ? void 0 : _r.darkMode,
11017
+ darkModeBg: (_s = props.organise) === null || _s === void 0 ? void 0 : _s.darkModeBg,
11018
+ })),
11019
+ react_1.default.createElement("div", { className: "mt-3 flex items-center justify-between" },
11020
+ react_1.default.createElement("label", { className: "text-sm font-medium ".concat(((_t = props.organise) === null || _t === void 0 ? void 0 : _t.darkMode) ? "text-gray-200" : "text-gray-700") }, "Hide Sub Items"),
11021
+ react_1.default.createElement(toggle_1.Toggle, { text: "", direction: "right", value: hideSubItems, onClick: function () { return setHideSubItems(!hideSubItems); } })),
11022
+ react_1.default.createElement("div", { className: "flex justify-end mt-5 " },
11023
+ showEmail && (react_1.default.createElement(button_1.Button, { text: "Send to email", size: "small", type: "normal", onClick: function () { return __awaiter(void 0, void 0, void 0, function () {
11024
+ return __generator(this, function (_a) {
11025
+ switch (_a.label) {
11026
+ case 0: return [4 /*yield*/, exportCSVEmailInputRef.current.handleSubmit()];
11027
+ case 1:
11028
+ if (_a.sent()) {
11029
+ handleExportCSVData();
11030
+ }
11031
+ return [2 /*return*/];
11032
+ }
11033
+ });
11034
+ }); } })),
11035
+ react_1.default.createElement(button_1.Button, { type: "normal", text: "Download", size: "small", className: "ml-3", onClick: function () {
11036
+ return handleExportCSVData(true, exportType === "print");
11037
+ } })))));
11033
11038
  }
11034
11039
  else if (addTabModal) {
11035
11040
  return (react_1.default.createElement(settingsModal_1.TabModal, { type: resolvedType, tabs: (_u = props.organise) === null || _u === void 0 ? void 0 : _u.extendedTabs, editIndex: editTabIndex >= 0 ? editTabIndex : undefined, onChangeTabs: (_v = props.organise) === null || _v === void 0 ? void 0 : _v.onChangeTabs, model: structure, collectionId: props.collectionId, renderReferenceLabelOptions: (_w = props.organise) === null || _w === void 0 ? void 0 : _w.renderReferenceLabelOptions, onClose: function () {
@@ -11391,12 +11396,8 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
11391
11396
  var _a, _b;
11392
11397
  if (loading)
11393
11398
  return;
11394
- if (queryForm)
11395
- handleViewQuery(-1);
11396
- else {
11397
- handlePopUpModal(false);
11398
- setExportCSVEmail((_b = (_a = props.devSettings.currentUser) === null || _a === void 0 ? void 0 : _a.userEmail) !== null && _b !== void 0 ? _b : "");
11399
- }
11399
+ handlePopUpModal(false);
11400
+ setExportCSVEmail((_b = (_a = props.devSettings.currentUser) === null || _a === void 0 ? void 0 : _a.userEmail) !== null && _b !== void 0 ? _b : "");
11400
11401
  }, notification: react_1.default.createElement(react_1.default.Fragment, null, renderNotification("modal")) })),
11401
11402
  react_1.default.createElement(modal_1.Modal, { darkMode: (_83 = props.organise) === null || _83 === void 0 ? void 0 : _83.darkMode, darkModeBg: (_84 = props.organise) === null || _84 === void 0 ? void 0 : _84.darkModeBg, maxWidth: "2xl", open: referenceCreationModal.id ? true : false, renderContent: function () {
11402
11403
  return (react_1.default.createElement(referenceModal_1.ReferenceModal, { referenceModelSchema: referenceModelSchema, referenceDataStructure: referenceCreationModal, devSettings: props.devSettings, handleCreateRefId: function (dataId) {
@@ -11434,17 +11435,20 @@ exports.DataTemplate = (0, react_1.forwardRef)(function (props, ref) {
11434
11435
  }, onClose: function () {
11435
11436
  setSelectedAuthMethod("");
11436
11437
  } }),
11437
- isActivityLog && (react_1.default.createElement(modal_1.Modal, { darkMode: (_93 = props.organise) === null || _93 === void 0 ? void 0 : _93.darkMode, darkModeBg: (_94 = props.organise) === null || _94 === void 0 ? void 0 : _94.darkModeBg, open: activityModal, title: "Activity Log", renderContent: function () {
11438
- var _a, _b;
11439
- return (react_1.default.createElement(activityModal_1.ActivityModal, { title: props.title && typeof props.title === "string"
11440
- ? props.title
11441
- : "this collection", devSettings: props.devSettings, collectionId: props.collectionId, dataId: resolvedType === "read" ? ((_a = props.id) !== null && _a !== void 0 ? _a : "") : activityId, activityLog: (_b = props.edit) === null || _b === void 0 ? void 0 : _b.activityLog, model: structure }));
11442
- }, maxWidth: "4xl", onClose: function () {
11443
- setActivityModal(false);
11444
- setActivityId("");
11445
- }, notification: react_1.default.createElement(react_1.default.Fragment, null, renderNotification("modal")) })),
11446
11438
  renderContent(),
11447
11439
  renderReadDrawer(),
11440
+ isActivityLog &&
11441
+ typeof document !== "undefined" &&
11442
+ (0, react_dom_1.createPortal)(
11443
+ // INFO: z-50 lifts it over a Modal the table may sit in (z-40)
11444
+ react_1.default.createElement("div", { className: "relative z-50" },
11445
+ react_1.default.createElement(drawer_1.Drawer, { darkMode: (_93 = props.organise) === null || _93 === void 0 ? void 0 : _93.darkMode, darkModeBg: (_94 = props.organise) === null || _94 === void 0 ? void 0 : _94.darkModeBg, testId: "dt-activity-drawer", open: activityModal,
11446
+ // INFO: the record stays set while the drawer slides out — clearing it
11447
+ // would remount the hidden panel collection-wide and fetch again. The
11448
+ // toolbar's collection-wide button clears it when it opens.
11449
+ onClose: function () { return setActivityModal(false); }, anchor: "responsive", maxWidth: "2xl", maxHeight: "75", title: "Activity Log", content: react_1.default.createElement(activityModal_1.ActivityModal, { title: props.title && typeof props.title === "string"
11450
+ ? props.title
11451
+ : "this collection", devSettings: props.devSettings, collectionId: props.collectionId, dataId: resolvedType === "read" ? ((_95 = props.id) !== null && _95 !== void 0 ? _95 : "") : activityId, activityLog: (_96 = props.edit) === null || _96 === void 0 ? void 0 : _96.activityLog, model: structure }) })), document.body),
11448
11452
  renderScrollSentinel()));
11449
11453
  });
11450
11454
  //# sourceMappingURL=index.js.map