@universe-platform/ui 0.1.0-beta.34 → 0.1.0-beta.36

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.
package/dist/index.js CHANGED
@@ -66,6 +66,7 @@ __export(src_exports, {
66
66
  COLUMN_TYPE_LABELS: () => COLUMN_TYPE_LABELS,
67
67
  ColumnHeaderTitle: () => ColumnHeaderTitle,
68
68
  CreateTemplateModal: () => CreateTemplateModal,
69
+ DEFAULT_FILTER_COLUMN_TYPES: () => DEFAULT_FILTER_COLUMN_TYPES,
69
70
  DEFAULT_PLACEMENT_STATUS_COLORS: () => DEFAULT_PLACEMENT_STATUS_COLORS,
70
71
  DatePickerCell: () => DatePickerCell,
71
72
  DynamicFiltersBlock: () => DynamicFiltersBlock,
@@ -80,6 +81,7 @@ __export(src_exports, {
80
81
  RELATION_BUTTON_COUNTS_ACTION: () => RELATION_BUTTON_COUNTS_ACTION,
81
82
  RELATION_LABEL_KEY: () => RELATION_LABEL_KEY,
82
83
  RELATION_SEP: () => RELATION_SEP,
84
+ RESOLVE_DEFAULT_FILTERS_ACTION: () => RESOLVE_DEFAULT_FILTERS_ACTION,
83
85
  RelationFilterPopover: () => RelationFilterPopover,
84
86
  RelationPickerCell: () => RelationPickerCell,
85
87
  SettingsAndActionsBlock: () => SettingsAndActionsBlock,
@@ -100,6 +102,7 @@ __export(src_exports, {
100
102
  buildRelationRef: () => buildRelationRef,
101
103
  calculateMinColumnWidth: () => calculateMinColumnWidth,
102
104
  checkElementTruncation: () => checkElementTruncation,
105
+ cleanPlacementFilterDefaults: () => cleanPlacementFilterDefaults,
103
106
  cn: () => cn,
104
107
  columnRefLabel: () => columnRefLabel,
105
108
  computeFormulaValue: () => computeFormulaValue,
@@ -115,6 +118,8 @@ __export(src_exports, {
115
118
  formatTimeInput: () => formatTimeInput,
116
119
  formatTimeIso: () => formatTimeIso,
117
120
  generateWhatsAppLink: () => generateWhatsAppLink,
121
+ getColumnDefaultFilter: () => getColumnDefaultFilter,
122
+ getDefaultFilterColumns: () => getDefaultFilterColumns,
118
123
  getDeterministicPastelBadge: () => getDeterministicPastelBadge,
119
124
  getEligibleCopyTargets: () => getEligibleCopyTargets,
120
125
  getNextVariableIndex: () => getNextVariableIndex,
@@ -150,11 +155,14 @@ __export(src_exports, {
150
155
  renameCopyTarget: () => renameCopyTarget,
151
156
  resolveDefaultStatusId: () => resolveDefaultStatusId,
152
157
  resolveProtocol: () => resolveProtocol,
158
+ sanitizeDefaultFilter: () => sanitizeDefaultFilter,
153
159
  sanitizePhoneNumber: () => sanitizePhoneNumber,
154
160
  sanitizeTemplateNameInput: () => sanitizeTemplateNameInput,
155
161
  seamlessVariableEngine: () => seamlessVariableEngine,
156
162
  splitHeaderTitle: () => splitHeaderTitle,
163
+ supportsDefaultFilter: () => supportsDefaultFilter,
157
164
  tableColumns: () => tableColumns,
165
+ toColumnFilterValue: () => toColumnFilterValue,
158
166
  useColumnReorder: () => useColumnReorder,
159
167
  useColumnResize: () => useColumnResize,
160
168
  useSmartTooltip: () => useSmartTooltip,
@@ -166,7 +174,8 @@ __export(src_exports, {
166
174
  validateTemplateBody: () => validateTemplateBody,
167
175
  validateTemplateButtons: () => validateTemplateButtons,
168
176
  validateWhatsAppTemplate: () => validateWhatsAppTemplate,
169
- validateWordToVariableRatio: () => validateWordToVariableRatio
177
+ validateWordToVariableRatio: () => validateWordToVariableRatio,
178
+ withDefaultFilter: () => withDefaultFilter
170
179
  });
171
180
  module.exports = __toCommonJS(src_exports);
172
181
 
@@ -1203,8 +1212,57 @@ function getRelationButtonColumns(columns) {
1203
1212
  return (columns || []).filter((c) => isRelationButtonsColumn(c) && c.name !== "_id");
1204
1213
  }
1205
1214
 
1215
+ // ../shared/src/defaultFilters.ts
1216
+ var DEFAULT_FILTER_COLUMN_TYPES = ["STRING", "RELATION"];
1217
+ var RESOLVE_DEFAULT_FILTERS_ACTION = "RESOLVE_DEFAULT_FILTERS";
1218
+ var isString = (v) => typeof v === "string";
1219
+ function supportsDefaultFilter(type) {
1220
+ if (!type) return false;
1221
+ return DEFAULT_FILTER_COLUMN_TYPES.includes(String(type).toUpperCase());
1222
+ }
1223
+ function sanitizeDefaultFilter(raw) {
1224
+ if (!raw || typeof raw !== "object") return null;
1225
+ const value = raw.value;
1226
+ if (!isString(value) || value.trim() === "") return null;
1227
+ const label = raw.label;
1228
+ return __spreadValues({ value: value.trim() }, isString(label) && label.trim() ? { label: label.trim() } : {});
1229
+ }
1230
+ function getColumnDefaultFilter(col) {
1231
+ var _a;
1232
+ if (!col || !supportsDefaultFilter(col.type)) return null;
1233
+ return sanitizeDefaultFilter((_a = col.config) == null ? void 0 : _a.defaultFilter);
1234
+ }
1235
+ function getDefaultFilterColumns(columns) {
1236
+ const out = [];
1237
+ for (const c of columns || []) {
1238
+ if (!(c == null ? void 0 : c.name) || c.name === "_id") continue;
1239
+ const setting = getColumnDefaultFilter(c);
1240
+ if (setting) out.push({ name: c.name, type: String(c.type).toUpperCase(), setting });
1241
+ }
1242
+ return out;
1243
+ }
1244
+ function toColumnFilterValue(type, value) {
1245
+ return String(type).toUpperCase() === "RELATION" ? [value] : value;
1246
+ }
1247
+ function withDefaultFilter(config, type, setting) {
1248
+ const next = __spreadValues({}, config || {});
1249
+ const clean = supportsDefaultFilter(type) ? sanitizeDefaultFilter(setting) : null;
1250
+ if (clean) next.defaultFilter = clean;
1251
+ else delete next.defaultFilter;
1252
+ return next;
1253
+ }
1254
+ function cleanPlacementFilterDefaults(defaults, allowedKeys) {
1255
+ if (!defaults || typeof defaults !== "object") return void 0;
1256
+ const out = {};
1257
+ for (const key of allowedKeys) {
1258
+ const v = defaults[key];
1259
+ if (key && isString(v) && v.trim() !== "") out[key] = v;
1260
+ }
1261
+ return Object.keys(out).length > 0 ? out : void 0;
1262
+ }
1263
+
1206
1264
  // src/components/TableBlock/TableBlockClient.tsx
1207
- var import_react17 = __toESM(require("react"));
1265
+ var import_react18 = __toESM(require("react"));
1208
1266
 
1209
1267
  // src/hooks/useToast.ts
1210
1268
  var import_react2 = require("react");
@@ -3359,6 +3417,18 @@ function RelationPickerCell({
3359
3417
  _displayLabel: resolveRelationLabel(opt, column) || opt.label || "",
3360
3418
  data: opt.data
3361
3419
  })).filter((opt) => opt._displayLabel && opt._displayLabel.trim() !== "" && !isRawObjectId(opt._displayLabel));
3420
+ if (mapped.some((o) => {
3421
+ var _a2;
3422
+ return typeof ((_a2 = o.data) == null ? void 0 : _a2._order) === "number";
3423
+ })) {
3424
+ mapped.sort((a, b) => {
3425
+ var _a2, _b2;
3426
+ const oa = typeof ((_a2 = a.data) == null ? void 0 : _a2._order) === "number" ? a.data._order : Number.POSITIVE_INFINITY;
3427
+ const ob = typeof ((_b2 = b.data) == null ? void 0 : _b2._order) === "number" ? b.data._order : Number.POSITIVE_INFINITY;
3428
+ return oa === ob ? 0 : oa - ob;
3429
+ });
3430
+ return mapped;
3431
+ }
3362
3432
  const orderField = mapped.some((o) => {
3363
3433
  var _a2;
3364
3434
  return ((_a2 = o.data) == null ? void 0 : _a2["\u05DE\u05E1\u05E4\u05E8 \u05E9\u05E0\u05D4"]) !== void 0;
@@ -6245,6 +6315,49 @@ function RelationButtonsBar({
6245
6315
  );
6246
6316
  }
6247
6317
 
6318
+ // src/components/TableBlock/useDefaultColumnFilters.ts
6319
+ var import_react17 = require("react");
6320
+ var RESOLVE_TIMEOUT_MS = 8e3;
6321
+ function unwrap2(res) {
6322
+ const body = (res == null ? void 0 : res.data) && typeof res.data === "object" && !Array.isArray(res.data) ? res.data : res;
6323
+ const filters = body == null ? void 0 : body.filters;
6324
+ return filters && typeof filters === "object" ? filters : {};
6325
+ }
6326
+ function useDefaultColumnFilters({ columns, tableId, executeAction, onResolved }) {
6327
+ const hasDefaults = getDefaultFilterColumns(columns).length > 0;
6328
+ const [ready, setReady] = (0, import_react17.useState)(() => !hasDefaults);
6329
+ const doneRef = (0, import_react17.useRef)(false);
6330
+ const onResolvedRef = (0, import_react17.useRef)(onResolved);
6331
+ onResolvedRef.current = onResolved;
6332
+ const actionRef = (0, import_react17.useRef)(executeAction);
6333
+ actionRef.current = executeAction;
6334
+ (0, import_react17.useEffect)(() => {
6335
+ if (doneRef.current || !hasDefaults) return;
6336
+ doneRef.current = true;
6337
+ const exec = actionRef.current;
6338
+ if (!tableId || !exec) {
6339
+ setReady(true);
6340
+ return;
6341
+ }
6342
+ let settled = false;
6343
+ const finish = (filters) => {
6344
+ if (settled) return;
6345
+ settled = true;
6346
+ if (filters && Object.keys(filters).length > 0) onResolvedRef.current(filters);
6347
+ setReady(true);
6348
+ };
6349
+ const timer = setTimeout(() => finish(), RESOLVE_TIMEOUT_MS);
6350
+ Promise.resolve(exec(RESOLVE_DEFAULT_FILTERS_ACTION, { tableId })).then(
6351
+ (res) => finish(unwrap2(res)),
6352
+ (err) => {
6353
+ console.warn("[TableBlock] Failed to resolve default filters:", err);
6354
+ finish();
6355
+ }
6356
+ ).finally(() => clearTimeout(timer));
6357
+ }, [hasDefaults, tableId]);
6358
+ return ready;
6359
+ }
6360
+
6248
6361
  // src/components/TableBlock/TableBlockClient.tsx
6249
6362
  var import_jsx_runtime15 = require("react/jsx-runtime");
6250
6363
  function TableBlockClient({
@@ -6273,7 +6386,7 @@ function TableBlockClient({
6273
6386
  hideRelationButtons
6274
6387
  }) {
6275
6388
  const { showError, addToast } = useToast();
6276
- const [isExporting, setIsExporting] = (0, import_react17.useState)(false);
6389
+ const [isExporting, setIsExporting] = (0, import_react18.useState)(false);
6277
6390
  const resolvedRole = role ? getRolePermissions(role) : void 0;
6278
6391
  const effectivePermissions = permissions || (resolvedRole == null ? void 0 : resolvedRole.permissions) || {
6279
6392
  canCreate: !readOnly,
@@ -6292,18 +6405,18 @@ function TableBlockClient({
6292
6405
  return calculateMinColumnWidth(colName, false, col == null ? void 0 : col.type);
6293
6406
  }
6294
6407
  });
6295
- const executeActionRef = (0, import_react17.useRef)(executeAction);
6296
- (0, import_react17.useEffect)(() => {
6408
+ const executeActionRef = (0, import_react18.useRef)(executeAction);
6409
+ (0, import_react18.useEffect)(() => {
6297
6410
  executeActionRef.current = executeAction;
6298
6411
  }, [executeAction]);
6299
- const [isMounted, setIsMounted] = (0, import_react17.useState)(false);
6300
- const [isInitialLoading, setIsInitialLoading] = (0, import_react17.useState)(true);
6301
- const [page, setPage] = (0, import_react17.useState)(1);
6302
- const [limit, setLimit] = (0, import_react17.useState)(50);
6303
- const [totalRecords, setTotalRecords] = (0, import_react17.useState)(0);
6304
- const [totalPages, setTotalPages] = (0, import_react17.useState)(1);
6305
- const [showSummary, setShowSummary] = (0, import_react17.useState)(false);
6306
- (0, import_react17.useEffect)(() => {
6412
+ const [isMounted, setIsMounted] = (0, import_react18.useState)(false);
6413
+ const [isInitialLoading, setIsInitialLoading] = (0, import_react18.useState)(true);
6414
+ const [page, setPage] = (0, import_react18.useState)(1);
6415
+ const [limit, setLimit] = (0, import_react18.useState)(50);
6416
+ const [totalRecords, setTotalRecords] = (0, import_react18.useState)(0);
6417
+ const [totalPages, setTotalPages] = (0, import_react18.useState)(1);
6418
+ const [showSummary, setShowSummary] = (0, import_react18.useState)(false);
6419
+ (0, import_react18.useEffect)(() => {
6307
6420
  if (typeof window !== "undefined") {
6308
6421
  const savedSummary = localStorage.getItem(`table_summary_${tableKey}`);
6309
6422
  if (savedSummary !== null) {
@@ -6352,7 +6465,7 @@ function TableBlockClient({
6352
6465
  return __spreadProps(__spreadValues({}, row), { id: String(row.id || ""), data: rowData });
6353
6466
  });
6354
6467
  };
6355
- const mergeColumnDefs = (0, import_react17.useCallback)((existingCols, incomingCols) => {
6468
+ const mergeColumnDefs = (0, import_react18.useCallback)((existingCols, incomingCols) => {
6356
6469
  if (!incomingCols || incomingCols.length === 0) return existingCols || [];
6357
6470
  if (!existingCols || existingCols.length === 0) return incomingCols;
6358
6471
  const existingMap = new Map(existingCols.map((c) => [c.name, c]));
@@ -6372,18 +6485,18 @@ function TableBlockClient({
6372
6485
  return ((_a = a.order) != null ? _a : 0) - ((_b = b.order) != null ? _b : 0);
6373
6486
  });
6374
6487
  }, []);
6375
- const [localColumns, setLocalColumns] = (0, import_react17.useState)(() => (schema == null ? void 0 : schema.columns) || []);
6376
- (0, import_react17.useEffect)(() => {
6488
+ const [localColumns, setLocalColumns] = (0, import_react18.useState)(() => (schema == null ? void 0 : schema.columns) || []);
6489
+ (0, import_react18.useEffect)(() => {
6377
6490
  if ((schema == null ? void 0 : schema.columns) && schema.columns.length > 0) {
6378
6491
  setLocalColumns((prev) => mergeColumnDefs(prev, schema.columns));
6379
6492
  }
6380
6493
  }, [schema == null ? void 0 : schema.columns, mergeColumnDefs]);
6381
- const [dirty, setDirty] = (0, import_react17.useState)({ added: [], modified: {}, deleted: [] });
6382
- const dirtyRef = (0, import_react17.useRef)(dirty);
6383
- (0, import_react17.useEffect)(() => {
6494
+ const [dirty, setDirty] = (0, import_react18.useState)({ added: [], modified: {}, deleted: [] });
6495
+ const dirtyRef = (0, import_react18.useRef)(dirty);
6496
+ (0, import_react18.useEffect)(() => {
6384
6497
  dirtyRef.current = dirty;
6385
6498
  }, [dirty]);
6386
- const mergeWithDirty = (0, import_react17.useCallback)((baseRecords) => {
6499
+ const mergeWithDirty = (0, import_react18.useCallback)((baseRecords) => {
6387
6500
  const { added, modified, deleted } = dirtyRef.current;
6388
6501
  const nonDeleted = (baseRecords || []).filter((r) => !deleted.includes(r.id));
6389
6502
  const modifiedRecords = nonDeleted.map((r) => {
@@ -6396,8 +6509,8 @@ function TableBlockClient({
6396
6509
  const uniqueAdded = added.filter((r) => !baseIds.has(r.id));
6397
6510
  return [...uniqueAdded, ...modifiedRecords];
6398
6511
  }, []);
6399
- const [data, setData] = (0, import_react17.useState)(() => normalizeRecords(initialRecords));
6400
- const [serverRecords, setServerRecords] = (0, import_react17.useState)(() => normalizeRecords(initialRecords));
6512
+ const [data, setData] = (0, import_react18.useState)(() => normalizeRecords(initialRecords));
6513
+ const [serverRecords, setServerRecords] = (0, import_react18.useState)(() => normalizeRecords(initialRecords));
6401
6514
  const filteredData = data;
6402
6515
  const isEqualValues = (a, b) => {
6403
6516
  if (a === b) return true;
@@ -6409,30 +6522,30 @@ function TableBlockClient({
6409
6522
  }
6410
6523
  return false;
6411
6524
  };
6412
- const [baseRecordsMap, setBaseRecordsMap] = (0, import_react17.useState)(() => {
6525
+ const [baseRecordsMap, setBaseRecordsMap] = (0, import_react18.useState)(() => {
6413
6526
  const map = /* @__PURE__ */ new Map();
6414
6527
  (normalizeRecords(initialRecords) || []).forEach((r) => map.set(r.id, __spreadValues({}, r.data)));
6415
6528
  return map;
6416
6529
  });
6417
- (0, import_react17.useEffect)(() => {
6530
+ (0, import_react18.useEffect)(() => {
6418
6531
  if (initialRecords && initialRecords.length > 0) {
6419
6532
  const map = /* @__PURE__ */ new Map();
6420
6533
  (normalizeRecords(initialRecords) || []).forEach((r) => map.set(r.id, __spreadValues({}, r.data)));
6421
6534
  setBaseRecordsMap(map);
6422
6535
  }
6423
6536
  }, [initialRecords]);
6424
- const [searchQuery, setSearchQuery] = (0, import_react17.useState)("");
6425
- const [columnFilters, setColumnFilters] = (0, import_react17.useState)({});
6426
- const [activeSearchCol, setActiveSearchCol] = (0, import_react17.useState)(null);
6427
- const activeSearchRef = (0, import_react17.useRef)(null);
6428
- const [activeRelationCol, setActiveRelationCol] = (0, import_react17.useState)(null);
6429
- const [relationTriggerRect, setRelationTriggerRect] = (0, import_react17.useState)(null);
6430
- const filterButtonRefs = (0, import_react17.useRef)({});
6431
- const [relationOptions, setRelationOptions] = (0, import_react17.useState)({});
6432
- const [relationFilterOptions, setRelationFilterOptions] = (0, import_react17.useState)({});
6433
- const [loadingFilterCol, setLoadingFilterCol] = (0, import_react17.useState)(null);
6434
- const relationDictionaryRef = (0, import_react17.useRef)({});
6435
- const mergeRelationOptions = (0, import_react17.useCallback)((colName, newOptions) => {
6537
+ const [searchQuery, setSearchQuery] = (0, import_react18.useState)("");
6538
+ const [columnFilters, setColumnFilters] = (0, import_react18.useState)({});
6539
+ const [activeSearchCol, setActiveSearchCol] = (0, import_react18.useState)(null);
6540
+ const activeSearchRef = (0, import_react18.useRef)(null);
6541
+ const [activeRelationCol, setActiveRelationCol] = (0, import_react18.useState)(null);
6542
+ const [relationTriggerRect, setRelationTriggerRect] = (0, import_react18.useState)(null);
6543
+ const filterButtonRefs = (0, import_react18.useRef)({});
6544
+ const [relationOptions, setRelationOptions] = (0, import_react18.useState)({});
6545
+ const [relationFilterOptions, setRelationFilterOptions] = (0, import_react18.useState)({});
6546
+ const [loadingFilterCol, setLoadingFilterCol] = (0, import_react18.useState)(null);
6547
+ const relationDictionaryRef = (0, import_react18.useRef)({});
6548
+ const mergeRelationOptions = (0, import_react18.useCallback)((colName, newOptions) => {
6436
6549
  if (!Array.isArray(newOptions) || newOptions.length === 0) return;
6437
6550
  if (!relationDictionaryRef.current[colName]) {
6438
6551
  relationDictionaryRef.current[colName] = /* @__PURE__ */ new Map();
@@ -6455,7 +6568,7 @@ function TableBlockClient({
6455
6568
  }));
6456
6569
  }
6457
6570
  }, []);
6458
- (0, import_react17.useEffect)(() => {
6571
+ (0, import_react18.useEffect)(() => {
6459
6572
  if (!activeSearchCol) return;
6460
6573
  const handleMouseDown = (e) => {
6461
6574
  if (activeSearchRef.current && !activeSearchRef.current.contains(e.target)) {
@@ -6467,7 +6580,7 @@ function TableBlockClient({
6467
6580
  document.removeEventListener("mousedown", handleMouseDown);
6468
6581
  };
6469
6582
  }, [activeSearchCol]);
6470
- const filtersKey = (0, import_react17.useMemo)(() => {
6583
+ const filtersKey = (0, import_react18.useMemo)(() => {
6471
6584
  const active = {};
6472
6585
  Object.entries(columnFilters).forEach(([k, v]) => {
6473
6586
  if (Array.isArray(v) && v.length > 0) active[k] = v;
@@ -6476,24 +6589,30 @@ function TableBlockClient({
6476
6589
  });
6477
6590
  return JSON.stringify(active);
6478
6591
  }, [columnFilters]);
6479
- const [debouncedSearch, setDebouncedSearch] = (0, import_react17.useState)(searchQuery);
6480
- (0, import_react17.useEffect)(() => {
6592
+ const defaultFiltersReady = useDefaultColumnFilters({
6593
+ columns: localColumns,
6594
+ tableId: (schema == null ? void 0 : schema.tableMetaId) || (schema == null ? void 0 : schema.tableId) || (schema == null ? void 0 : schema.id),
6595
+ executeAction,
6596
+ onResolved: (resolved) => setColumnFilters((prev) => __spreadValues(__spreadValues({}, resolved), prev))
6597
+ });
6598
+ const [debouncedSearch, setDebouncedSearch] = (0, import_react18.useState)(searchQuery);
6599
+ (0, import_react18.useEffect)(() => {
6481
6600
  const timer = setTimeout(() => {
6482
6601
  setDebouncedSearch(searchQuery.trim());
6483
6602
  }, 300);
6484
6603
  return () => clearTimeout(timer);
6485
6604
  }, [searchQuery]);
6486
- const isSearchMountedRef = (0, import_react17.useRef)(false);
6487
- (0, import_react17.useEffect)(() => {
6605
+ const isSearchMountedRef = (0, import_react18.useRef)(false);
6606
+ (0, import_react18.useEffect)(() => {
6488
6607
  if (!isSearchMountedRef.current) {
6489
6608
  isSearchMountedRef.current = true;
6490
6609
  return;
6491
6610
  }
6492
6611
  setPage(1);
6493
6612
  }, [debouncedSearch]);
6494
- const [isFetching, setIsFetching] = (0, import_react17.useState)(false);
6495
- const fetchRequestIdRef = (0, import_react17.useRef)(0);
6496
- const fetchTableData = (0, import_react17.useCallback)((targetPage, targetLimit, targetSearch, targetFiltersKey) => {
6613
+ const [isFetching, setIsFetching] = (0, import_react18.useState)(false);
6614
+ const fetchRequestIdRef = (0, import_react18.useRef)(0);
6615
+ const fetchTableData = (0, import_react18.useCallback)((targetPage, targetLimit, targetSearch, targetFiltersKey) => {
6497
6616
  const tableId = (schema == null ? void 0 : schema.tableMetaId) || (schema == null ? void 0 : schema.tableId) || (schema == null ? void 0 : schema.id);
6498
6617
  const action = executeActionRef.current;
6499
6618
  if (!tableId || !action) {
@@ -6617,11 +6736,12 @@ function TableBlockClient({
6617
6736
  }
6618
6737
  });
6619
6738
  }, [schema == null ? void 0 : schema.tableMetaId, schema == null ? void 0 : schema.tableId, schema == null ? void 0 : schema.id, mergeColumnDefs, mergeWithDirty, mergeRelationOptions]);
6620
- (0, import_react17.useEffect)(() => {
6739
+ (0, import_react18.useEffect)(() => {
6740
+ if (!defaultFiltersReady) return;
6621
6741
  fetchTableData(page, limit, debouncedSearch, filtersKey);
6622
- }, [page, limit, debouncedSearch, filtersKey, fetchTableData]);
6623
- (0, import_react17.useEffect)(() => {
6624
- if (initialRecords) {
6742
+ }, [page, limit, debouncedSearch, filtersKey, fetchTableData, defaultFiltersReady]);
6743
+ (0, import_react18.useEffect)(() => {
6744
+ if (initialRecords && defaultFiltersReady) {
6625
6745
  const norm = normalizeRecords(initialRecords);
6626
6746
  setServerRecords(norm);
6627
6747
  const hasActiveFilters = Boolean(debouncedSearch) || Object.keys(columnFilters).length > 0;
@@ -6682,11 +6802,11 @@ function TableBlockClient({
6682
6802
  setData(mergeWithDirty(norm));
6683
6803
  }
6684
6804
  }
6685
- }, [initialRecords, mergeWithDirty, debouncedSearch, columnFilters, fetchTableData, page, limit, filtersKey]);
6686
- const refetchTableData = (0, import_react17.useCallback)(() => {
6805
+ }, [initialRecords, mergeWithDirty, debouncedSearch, columnFilters, fetchTableData, page, limit, filtersKey, defaultFiltersReady]);
6806
+ const refetchTableData = (0, import_react18.useCallback)(() => {
6687
6807
  return fetchTableData(page, limit, debouncedSearch, filtersKey);
6688
6808
  }, [page, limit, debouncedSearch, filtersKey, fetchTableData]);
6689
- const handleApplyColumnFilter = (0, import_react17.useCallback)((colName, nextVal) => {
6809
+ const handleApplyColumnFilter = (0, import_react18.useCallback)((colName, nextVal) => {
6690
6810
  setColumnFilters((prev) => {
6691
6811
  const next = __spreadValues({}, prev);
6692
6812
  if (nextVal === void 0 || Array.isArray(nextVal) && nextVal.length === 0 || typeof nextVal === "string" && !nextVal.trim() || typeof nextVal === "object" && "values" in nextVal && Array.isArray(nextVal.values) && nextVal.values.length === 0) {
@@ -6711,9 +6831,9 @@ function TableBlockClient({
6711
6831
  const handleNextPage = () => {
6712
6832
  setPage((prev) => Math.min(totalPages, prev + 1));
6713
6833
  };
6714
- const [selectedIds, setSelectedIds] = (0, import_react17.useState)(/* @__PURE__ */ new Set());
6715
- const isExternalSyncRef = (0, import_react17.useRef)(false);
6716
- (0, import_react17.useEffect)(() => {
6834
+ const [selectedIds, setSelectedIds] = (0, import_react18.useState)(/* @__PURE__ */ new Set());
6835
+ const isExternalSyncRef = (0, import_react18.useRef)(false);
6836
+ (0, import_react18.useEffect)(() => {
6717
6837
  if (selectedRowIds !== void 0) {
6718
6838
  const nextSet = new Set(selectedRowIds);
6719
6839
  setSelectedIds((prev) => {
@@ -6725,8 +6845,8 @@ function TableBlockClient({
6725
6845
  });
6726
6846
  }
6727
6847
  }, [selectedRowIds]);
6728
- const isFirstSelectionChangeRef = (0, import_react17.useRef)(true);
6729
- (0, import_react17.useEffect)(() => {
6848
+ const isFirstSelectionChangeRef = (0, import_react18.useRef)(true);
6849
+ (0, import_react18.useEffect)(() => {
6730
6850
  if (isFirstSelectionChangeRef.current) {
6731
6851
  isFirstSelectionChangeRef.current = false;
6732
6852
  if (selectedIds.size === 0) return;
@@ -6737,13 +6857,13 @@ function TableBlockClient({
6737
6857
  }
6738
6858
  onSelectionChange == null ? void 0 : onSelectionChange(Array.from(selectedIds));
6739
6859
  }, [selectedIds, onSelectionChange]);
6740
- const [pendingDeletions, setPendingDeletions] = (0, import_react17.useState)([]);
6741
- const [isSaving, setIsSaving] = (0, import_react17.useState)(false);
6860
+ const [pendingDeletions, setPendingDeletions] = (0, import_react18.useState)([]);
6861
+ const [isSaving, setIsSaving] = (0, import_react18.useState)(false);
6742
6862
  const isUpdatingActive = Boolean(isUpdating || isSaving);
6743
- const [isSaveSuccess, setIsSaveSuccess] = (0, import_react17.useState)(false);
6744
- const [expandedRowIds, setExpandedRowIds] = (0, import_react17.useState)(/* @__PURE__ */ new Set());
6745
- const schemaColsString = (0, import_react17.useMemo)(() => JSON.stringify(localColumns || []), [localColumns]);
6746
- const refetchRelation = (0, import_react17.useCallback)(async (colName, params) => {
6863
+ const [isSaveSuccess, setIsSaveSuccess] = (0, import_react18.useState)(false);
6864
+ const [expandedRowIds, setExpandedRowIds] = (0, import_react18.useState)(/* @__PURE__ */ new Set());
6865
+ const schemaColsString = (0, import_react18.useMemo)(() => JSON.stringify(localColumns || []), [localColumns]);
6866
+ const refetchRelation = (0, import_react18.useCallback)(async (colName, params) => {
6747
6867
  var _a, _b, _c, _d, _e, _f, _g;
6748
6868
  let parsedCols = [];
6749
6869
  try {
@@ -6782,7 +6902,7 @@ function TableBlockClient({
6782
6902
  }
6783
6903
  return [];
6784
6904
  }, [schemaColsString, executeAction, mergeRelationOptions]);
6785
- const fetchRelationFilterOptions = (0, import_react17.useCallback)(async (colName) => {
6905
+ const fetchRelationFilterOptions = (0, import_react18.useCallback)(async (colName) => {
6786
6906
  var _a;
6787
6907
  let parsedCols = [];
6788
6908
  try {
@@ -6818,8 +6938,8 @@ function TableBlockClient({
6818
6938
  setLoadingFilterCol(null);
6819
6939
  }
6820
6940
  }, [schemaColsString, schema == null ? void 0 : schema.tableMetaId, schema == null ? void 0 : schema.tableId, schema == null ? void 0 : schema.id, executeAction, mergeRelationOptions]);
6821
- const requestedRelationIdsRef = (0, import_react17.useRef)({});
6822
- (0, import_react17.useEffect)(() => {
6941
+ const requestedRelationIdsRef = (0, import_react18.useRef)({});
6942
+ (0, import_react18.useEffect)(() => {
6823
6943
  if (!executeAction || !data || data.length === 0) return;
6824
6944
  let parsedCols = [];
6825
6945
  try {
@@ -6872,7 +6992,7 @@ function TableBlockClient({
6872
6992
  }
6873
6993
  });
6874
6994
  }, [data, schemaColsString, executeAction, relationOptions, mergeRelationOptions]);
6875
- (0, import_react17.useEffect)(() => {
6995
+ (0, import_react18.useEffect)(() => {
6876
6996
  let parsedCols = [];
6877
6997
  try {
6878
6998
  parsedCols = JSON.parse(schemaColsString);
@@ -6886,7 +7006,7 @@ function TableBlockClient({
6886
7006
  refetchRelation(col.name);
6887
7007
  });
6888
7008
  }, [schemaColsString, refetchRelation]);
6889
- const normalizedColumns = (0, import_react17.useMemo)(() => {
7009
+ const normalizedColumns = (0, import_react18.useMemo)(() => {
6890
7010
  return (localColumns || []).map((col, idx) => {
6891
7011
  const isRequired = col.isRequired === true || String(col.isRequired) === "true";
6892
7012
  const isUnique = col.isUnique === true || String(col.isUnique) === "true";
@@ -6900,17 +7020,17 @@ function TableBlockClient({
6900
7020
  return ((_a = a.order) != null ? _a : 0) - ((_b = b.order) != null ? _b : 0);
6901
7021
  });
6902
7022
  }, [localColumns]);
6903
- const filteredColumns = (0, import_react17.useMemo)(() => {
7023
+ const filteredColumns = (0, import_react18.useMemo)(() => {
6904
7024
  const systemFields = ["_id", "createdAt", "updatedAt", "orgId", "tableId"];
6905
7025
  return normalizedColumns.filter((col) => !systemFields.includes(col.name) && !col.isHidden);
6906
7026
  }, [normalizedColumns]);
6907
- const customizableColumns = (0, import_react17.useMemo)(() => {
7027
+ const customizableColumns = (0, import_react18.useMemo)(() => {
6908
7028
  const systemFields = ["_id", "createdAt", "updatedAt", "orgId", "tableId"];
6909
7029
  return normalizedColumns.filter((col) => !systemFields.includes(col.name));
6910
7030
  }, [normalizedColumns]);
6911
- const [isColumnsDropdownOpen, setIsColumnsDropdownOpen] = (0, import_react17.useState)(false);
6912
- const dropdownRef = (0, import_react17.useRef)(null);
6913
- (0, import_react17.useEffect)(() => {
7031
+ const [isColumnsDropdownOpen, setIsColumnsDropdownOpen] = (0, import_react18.useState)(false);
7032
+ const dropdownRef = (0, import_react18.useRef)(null);
7033
+ (0, import_react18.useEffect)(() => {
6914
7034
  const handleClickOutside = (e) => {
6915
7035
  if (dropdownRef.current && !dropdownRef.current.contains(e.target)) {
6916
7036
  setIsColumnsDropdownOpen(false);
@@ -7120,7 +7240,7 @@ function TableBlockClient({
7120
7240
  setData((prev) => [newRow, ...prev]);
7121
7241
  setDirty((prev) => __spreadProps(__spreadValues({}, prev), { added: [newRow, ...prev.added] }));
7122
7242
  };
7123
- const handleCellChange = (0, import_react17.useCallback)((rowId, colName, value) => {
7243
+ const handleCellChange = (0, import_react18.useCallback)((rowId, colName, value) => {
7124
7244
  setData((prev) => prev.map(
7125
7245
  (row) => row.id === rowId ? __spreadProps(__spreadValues({}, row), { data: __spreadProps(__spreadValues({}, row.data), { [colName]: value }) }) : row
7126
7246
  ));
@@ -7153,13 +7273,13 @@ function TableBlockClient({
7153
7273
  });
7154
7274
  }, [baseRecordsMap]);
7155
7275
  const handleCellChangeWithCopy = useRelationCopyHandler({ columns: localColumns, handleCellChange });
7156
- const triggerSaveSuccess = (0, import_react17.useCallback)(() => {
7276
+ const triggerSaveSuccess = (0, import_react18.useCallback)(() => {
7157
7277
  setIsSaveSuccess(true);
7158
7278
  setTimeout(() => {
7159
7279
  setIsSaveSuccess(false);
7160
7280
  }, 2500);
7161
7281
  }, []);
7162
- const handleQuietCellChange = (0, import_react17.useCallback)((rowId, colName, value) => {
7282
+ const handleQuietCellChange = (0, import_react18.useCallback)((rowId, colName, value) => {
7163
7283
  setData((prev) => prev.map(
7164
7284
  (row) => row.id === rowId ? __spreadProps(__spreadValues({}, row), { data: __spreadProps(__spreadValues({}, row.data), { [colName]: value }) }) : row
7165
7285
  ));
@@ -7183,12 +7303,12 @@ function TableBlockClient({
7183
7303
  });
7184
7304
  }
7185
7305
  }, []);
7186
- const toggleSelectAll = (0, import_react17.useCallback)((checked) => {
7306
+ const toggleSelectAll = (0, import_react18.useCallback)((checked) => {
7187
7307
  onRowToggle == null ? void 0 : onRowToggle("ALL", checked);
7188
7308
  const next = checked ? new Set(filteredData.map((r) => r.id)) : /* @__PURE__ */ new Set();
7189
7309
  setSelectedIds(next);
7190
7310
  }, [filteredData, onRowToggle]);
7191
- const toggleSelectRow = (0, import_react17.useCallback)((rowId, checked) => {
7311
+ const toggleSelectRow = (0, import_react18.useCallback)((rowId, checked) => {
7192
7312
  onRowToggle == null ? void 0 : onRowToggle(rowId, checked);
7193
7313
  setSelectedIds((prev) => {
7194
7314
  const next = new Set(prev);
@@ -7197,7 +7317,7 @@ function TableBlockClient({
7197
7317
  return next;
7198
7318
  });
7199
7319
  }, [onRowToggle]);
7200
- const handleToggleExpand = (0, import_react17.useCallback)((rowId) => {
7320
+ const handleToggleExpand = (0, import_react18.useCallback)((rowId) => {
7201
7321
  setExpandedRowIds((prev) => {
7202
7322
  const next = new Set(prev);
7203
7323
  if (next.has(rowId)) next.delete(rowId);
@@ -7205,7 +7325,7 @@ function TableBlockClient({
7205
7325
  return next;
7206
7326
  });
7207
7327
  }, []);
7208
- const handleMarkForDeletion = (0, import_react17.useCallback)((fileId) => {
7328
+ const handleMarkForDeletion = (0, import_react18.useCallback)((fileId) => {
7209
7329
  setPendingDeletions((prev) => [...prev, fileId]);
7210
7330
  }, []);
7211
7331
  const handleDeleteSelected = () => {
@@ -7433,7 +7553,7 @@ function TableBlockClient({
7433
7553
  setIsSaving(false);
7434
7554
  }
7435
7555
  };
7436
- const getRowRelationLabels = (0, import_react17.useCallback)((rowVal, col) => {
7556
+ const getRowRelationLabels = (0, import_react18.useCallback)((rowVal, col) => {
7437
7557
  const ids = normalizeRelationValue(rowVal);
7438
7558
  if (ids.length === 0) return [];
7439
7559
  const options = relationOptions[col.name] || [];
@@ -7452,7 +7572,7 @@ function TableBlockClient({
7452
7572
  return "";
7453
7573
  }).filter(Boolean);
7454
7574
  }, [relationOptions]);
7455
- const getUniqueRelationOptions = (0, import_react17.useCallback)((col) => {
7575
+ const getUniqueRelationOptions = (0, import_react18.useCallback)((col) => {
7456
7576
  if (relationFilterOptions[col.name]) {
7457
7577
  return relationFilterOptions[col.name];
7458
7578
  }
@@ -7484,7 +7604,7 @@ function TableBlockClient({
7484
7604
  return results.sort((a, b) => a.label.localeCompare(b.label));
7485
7605
  }, [data, relationOptions, relationFilterOptions]);
7486
7606
  const errorMessage = error ? typeof error === "string" ? error : error.message || String(error) : null;
7487
- const columnTotals = (0, import_react17.useMemo)(() => {
7607
+ const columnTotals = (0, import_react18.useMemo)(() => {
7488
7608
  const totals = {};
7489
7609
  if (!showSummary) return totals;
7490
7610
  filteredColumns.forEach((col) => {
@@ -8173,7 +8293,7 @@ function ExpandedSubTables({
8173
8293
  context
8174
8294
  }) {
8175
8295
  var _a;
8176
- const [activeTab, setActiveTab] = (0, import_react17.useState)((_a = subTableColumns[0]) == null ? void 0 : _a.name);
8296
+ const [activeTab, setActiveTab] = (0, import_react18.useState)((_a = subTableColumns[0]) == null ? void 0 : _a.name);
8177
8297
  if (subTableColumns.length === 0) return null;
8178
8298
  if (subTableColumns.length === 1) {
8179
8299
  const stCol = subTableColumns[0];
@@ -8214,7 +8334,7 @@ function ExpandedSubTables({
8214
8334
  ) })
8215
8335
  ] }) });
8216
8336
  }
8217
- var TableRow = import_react17.default.memo(function TableRow2({
8337
+ var TableRow = import_react18.default.memo(function TableRow2({
8218
8338
  row,
8219
8339
  isSelected,
8220
8340
  rowStatus,
@@ -8246,7 +8366,7 @@ var TableRow = import_react17.default.memo(function TableRow2({
8246
8366
  permissions
8247
8367
  }) {
8248
8368
  const lockedCopyTargets = getRelationCopyLockedTargets(schema == null ? void 0 : schema.columns);
8249
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_react17.default.Fragment, { children: [
8369
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_react18.default.Fragment, { children: [
8250
8370
  /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("tr", { className: `transition-colors group hover:bg-blue-50 ${isSelected ? "bg-blue-50" : ""}`, children: [
8251
8371
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("td", { className: "border-b border-l border-slate-200 p-1.5 text-center bg-white group-hover:bg-transparent", style: { width: 80, minWidth: 80, maxWidth: 80 }, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-center justify-center gap-1.5", children: [
8252
8372
  rowStatus && (() => {
@@ -8402,13 +8522,13 @@ function TableBlock(props) {
8402
8522
  }
8403
8523
 
8404
8524
  // src/components/PlacementBlock/PlacementBlock.tsx
8405
- var import_react20 = require("react");
8525
+ var import_react21 = require("react");
8406
8526
  var import_ag_grid_react = require("ag-grid-react");
8407
8527
  var import_ag_grid_community = require("ag-grid-community");
8408
8528
  var import_lucide_react10 = require("lucide-react");
8409
8529
 
8410
8530
  // src/components/PlacementBlock/PlacementSettings.tsx
8411
- var import_react18 = __toESM(require("react"));
8531
+ var import_react19 = __toESM(require("react"));
8412
8532
 
8413
8533
  // src/components/PlacementBlock/placementColumns.ts
8414
8534
  var RELATION_SEP = "::";
@@ -8530,7 +8650,7 @@ var SummaryRow = ({ label, value, hint }) => /* @__PURE__ */ (0, import_jsx_runt
8530
8650
  ] });
8531
8651
  var PlacementStatusEditor = ({ config, onChange }) => {
8532
8652
  var _a;
8533
- const radioName = `placement-default-status-${import_react18.default.useId()}`;
8653
+ const radioName = `placement-default-status-${import_react19.default.useId()}`;
8534
8654
  const statuses = ((_a = config.statusColors) == null ? void 0 : _a.length) ? config.statusColors : DEFAULT_PLACEMENT_STATUS_COLORS;
8535
8655
  const defaultStatusId = resolveDefaultStatusId(statuses, config.defaultReturnStatusId);
8536
8656
  const setStatuses = (next, defId = defaultStatusId) => {
@@ -8801,7 +8921,7 @@ var PlacementSettings = ({ config, onChange, tables }) => {
8801
8921
  };
8802
8922
 
8803
8923
  // src/components/PlacementBlock/PlacementRelationButtons.tsx
8804
- var import_react19 = require("react");
8924
+ var import_react20 = require("react");
8805
8925
  var import_jsx_runtime18 = require("react/jsx-runtime");
8806
8926
  var GROUP_COLORS = [
8807
8927
  { title: "bg-blue-600 text-white", active: "bg-blue-600 border-blue-600 text-white hover:bg-blue-700", count: "text-blue-700" },
@@ -8823,7 +8943,7 @@ var PlacementRelationButtons = ({
8823
8943
  relationOptions,
8824
8944
  className = ""
8825
8945
  }) => {
8826
- const groups = (0, import_react19.useMemo)(() => {
8946
+ const groups = (0, import_react20.useMemo)(() => {
8827
8947
  const activeEntries = Object.entries(filters).filter(([, v]) => v !== void 0 && v !== null && v !== "");
8828
8948
  return (columnNames || []).map((colName) => {
8829
8949
  var _a, _b, _c, _d;
@@ -8899,6 +9019,43 @@ var PlacementRelationButtons = ({
8899
9019
  );
8900
9020
  };
8901
9021
 
9022
+ // src/components/PlacementBlock/placementDefaultFilters.ts
9023
+ function getPlacementFilterRefs(config) {
9024
+ const defined = Array.isArray(config == null ? void 0 : config.filterFields) ? config.filterFields : [];
9025
+ const legacy = [config == null ? void 0 : config.targetFilterField1Id, config == null ? void 0 : config.targetFilterField2Id].filter(Boolean);
9026
+ return (defined.length > 0 ? defined : legacy).filter((r) => typeof r === "string" && r);
9027
+ }
9028
+ function resolveFilterColName(ref, targetColumns) {
9029
+ const direct = (targetColumns || []).find((c) => (c == null ? void 0 : c.id) === ref || (c == null ? void 0 : c.name) === ref);
9030
+ if (direct) return direct.name;
9031
+ const { relationColumn } = parseColumnRef(ref);
9032
+ if (relationColumn) {
9033
+ const rel = (targetColumns || []).find(
9034
+ (c) => (c == null ? void 0 : c.name) === relationColumn && String(c == null ? void 0 : c.type).toUpperCase() === "RELATION"
9035
+ );
9036
+ if (rel) return rel.name;
9037
+ }
9038
+ return ref;
9039
+ }
9040
+ function computePlacementDefaultFilters(args) {
9041
+ const { refs, defaults, targetColumns, rows, getText } = args;
9042
+ const applied = {};
9043
+ if (!defaults) return applied;
9044
+ for (const ref of refs) {
9045
+ const want = defaults[ref];
9046
+ if (typeof want !== "string" || want === "") continue;
9047
+ const colName = resolveFilterColName(ref, targetColumns);
9048
+ if (colName in applied) continue;
9049
+ const validRows = rows.filter(
9050
+ (r) => Object.entries(applied).every(([name, value]) => getText(name, r.data) === value)
9051
+ );
9052
+ if (validRows.some((r) => getText(colName, r.data) === want)) {
9053
+ applied[colName] = want;
9054
+ }
9055
+ }
9056
+ return applied;
9057
+ }
9058
+
8902
9059
  // src/components/PlacementBlock/PlacementBlock.tsx
8903
9060
  var import_jsx_runtime19 = require("react/jsx-runtime");
8904
9061
  import_ag_grid_community.ModuleRegistry.registerModules([import_ag_grid_community.AllCommunityModule]);
@@ -8976,7 +9133,7 @@ var CheckHeader = (props) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div"
8976
9133
  }
8977
9134
  ) });
8978
9135
  var RelationFilterHeader = (props) => {
8979
- const btnRef = (0, import_react20.useRef)(null);
9136
+ const btnRef = (0, import_react21.useRef)(null);
8980
9137
  return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex flex-col items-center justify-center w-full min-w-0 leading-tight select-none", title: props.displayName, children: [
8981
9138
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
8982
9139
  "button",
@@ -9003,20 +9160,20 @@ var RelationFilterHeader = (props) => {
9003
9160
  var PlacementBlock = (props) => {
9004
9161
  var _a, _b;
9005
9162
  const { executeAction, fetchSourceData, fetchTargetData, updateAssignment, className = "" } = props;
9006
- const config = (0, import_react20.useMemo)(() => {
9163
+ const config = (0, import_react21.useMemo)(() => {
9007
9164
  var _a2, _b2, _c;
9008
9165
  const raw = (_a2 = props.config) != null ? _a2 : props.settings;
9009
9166
  if (!raw) return void 0;
9010
9167
  return ((_b2 = raw.config) == null ? void 0 : _b2.sourceTableId) || ((_c = raw.config) == null ? void 0 : _c.targetTableId) ? raw.config : raw;
9011
9168
  }, [props.config, props.settings]);
9012
- const statuses = (0, import_react20.useMemo)(
9169
+ const statuses = (0, import_react21.useMemo)(
9013
9170
  () => {
9014
9171
  var _a2;
9015
9172
  return ((_a2 = config == null ? void 0 : config.statusColors) == null ? void 0 : _a2.length) ? config.statusColors : DEFAULT_PLACEMENT_STATUS_COLORS;
9016
9173
  },
9017
9174
  [config == null ? void 0 : config.statusColors]
9018
9175
  );
9019
- const defaultStatusId = (0, import_react20.useMemo)(
9176
+ const defaultStatusId = (0, import_react21.useMemo)(
9020
9177
  () => resolveDefaultStatusId(statuses, config == null ? void 0 : config.defaultReturnStatusId),
9021
9178
  [statuses, config == null ? void 0 : config.defaultReturnStatusId]
9022
9179
  );
@@ -9024,31 +9181,31 @@ var PlacementBlock = (props) => {
9024
9181
  const targetTableId = config == null ? void 0 : config.targetTableId;
9025
9182
  const displayField = (config == null ? void 0 : config.sourceDisplayFieldId) || "name";
9026
9183
  const assignmentField = config == null ? void 0 : config.targetAssignmentFieldId;
9027
- const executeActionRef = (0, import_react20.useRef)(executeAction);
9184
+ const executeActionRef = (0, import_react21.useRef)(executeAction);
9028
9185
  executeActionRef.current = executeAction;
9029
- const legacyRef = (0, import_react20.useRef)({ fetchSourceData, fetchTargetData, updateAssignment });
9186
+ const legacyRef = (0, import_react21.useRef)({ fetchSourceData, fetchTargetData, updateAssignment });
9030
9187
  legacyRef.current = { fetchSourceData, fetchTargetData, updateAssignment };
9031
- const [sourceRows, setSourceRows] = (0, import_react20.useState)([]);
9032
- const [sourceColumns, setSourceColumns] = (0, import_react20.useState)([]);
9033
- const [sourceRelOptions, setSourceRelOptions] = (0, import_react20.useState)({});
9034
- const [sourceRelFilters, setSourceRelFilters] = (0, import_react20.useState)({});
9035
- const [targetRows, setTargetRows] = (0, import_react20.useState)([]);
9036
- const [targetColumns, setTargetColumns] = (0, import_react20.useState)([]);
9037
- const [targetRelOptions, setTargetRelOptions] = (0, import_react20.useState)({});
9038
- const [selectedTargetId, setSelectedTargetId] = (0, import_react20.useState)("");
9039
- const [candidateIds, setCandidateIds] = (0, import_react20.useState)([]);
9040
- const [checkedIds, setCheckedIds] = (0, import_react20.useState)([]);
9041
- const [isSaving, setIsSaving] = (0, import_react20.useState)(false);
9042
- const [sourceSearch, setSourceSearch] = (0, import_react20.useState)("");
9043
- const [candidateSearch, setCandidateSearch] = (0, import_react20.useState)("");
9044
- const [statusMap, setStatusMap] = (0, import_react20.useState)({});
9045
- const [isLoading, setIsLoading] = (0, import_react20.useState)(false);
9046
- const [loadError, setLoadError] = (0, import_react20.useState)(null);
9047
- const [saveError, setSaveError] = (0, import_react20.useState)(null);
9048
- const [colFilters, setColFilters] = (0, import_react20.useState)({ source: {}, cand: {} });
9049
- const [filterPopover, setFilterPopover] = (0, import_react20.useState)(null);
9050
- const [targetFilters, setTargetFilters] = (0, import_react20.useState)({});
9051
- const loadTable = (0, import_react20.useCallback)(async (tableId, kind) => {
9188
+ const [sourceRows, setSourceRows] = (0, import_react21.useState)([]);
9189
+ const [sourceColumns, setSourceColumns] = (0, import_react21.useState)([]);
9190
+ const [sourceRelOptions, setSourceRelOptions] = (0, import_react21.useState)({});
9191
+ const [sourceRelFilters, setSourceRelFilters] = (0, import_react21.useState)({});
9192
+ const [targetRows, setTargetRows] = (0, import_react21.useState)([]);
9193
+ const [targetColumns, setTargetColumns] = (0, import_react21.useState)([]);
9194
+ const [targetRelOptions, setTargetRelOptions] = (0, import_react21.useState)({});
9195
+ const [selectedTargetId, setSelectedTargetId] = (0, import_react21.useState)("");
9196
+ const [candidateIds, setCandidateIds] = (0, import_react21.useState)([]);
9197
+ const [checkedIds, setCheckedIds] = (0, import_react21.useState)([]);
9198
+ const [isSaving, setIsSaving] = (0, import_react21.useState)(false);
9199
+ const [sourceSearch, setSourceSearch] = (0, import_react21.useState)("");
9200
+ const [candidateSearch, setCandidateSearch] = (0, import_react21.useState)("");
9201
+ const [statusMap, setStatusMap] = (0, import_react21.useState)({});
9202
+ const [isLoading, setIsLoading] = (0, import_react21.useState)(false);
9203
+ const [loadError, setLoadError] = (0, import_react21.useState)(null);
9204
+ const [saveError, setSaveError] = (0, import_react21.useState)(null);
9205
+ const [colFilters, setColFilters] = (0, import_react21.useState)({ source: {}, cand: {} });
9206
+ const [filterPopover, setFilterPopover] = (0, import_react21.useState)(null);
9207
+ const [targetFilters, setTargetFilters] = (0, import_react21.useState)({});
9208
+ const loadTable = (0, import_react21.useCallback)(async (tableId, kind) => {
9052
9209
  const exec = executeActionRef.current;
9053
9210
  if (exec) {
9054
9211
  const res = await exec("FETCH_TABLE_DATA", { tableId, tableMetaId: tableId, limit: FETCH_LIMIT, skip: 0 });
@@ -9061,7 +9218,7 @@ var PlacementBlock = (props) => {
9061
9218
  }
9062
9219
  throw new Error("executeAction \u05DC\u05D0 \u05D4\u05D5\u05E2\u05D1\u05E8 \u05DC\u05E8\u05DB\u05D9\u05D1 \u05D4\u05E9\u05D9\u05D1\u05D5\u05E5");
9063
9220
  }, []);
9064
- (0, import_react20.useEffect)(() => {
9221
+ (0, import_react21.useEffect)(() => {
9065
9222
  if (!sourceTableId || !targetTableId) return;
9066
9223
  let cancelled = false;
9067
9224
  (async () => {
@@ -9089,7 +9246,7 @@ var PlacementBlock = (props) => {
9089
9246
  cancelled = true;
9090
9247
  };
9091
9248
  }, [sourceTableId, targetTableId, loadTable]);
9092
- const displayValue = (0, import_react20.useCallback)((col, val) => {
9249
+ const displayValue = (0, import_react21.useCallback)((col, val) => {
9093
9250
  var _a2, _b2, _c, _d, _e;
9094
9251
  let text2 = cellText(val);
9095
9252
  if (text2 && /^[a-fA-F0-9]{24}$/.test(text2)) {
@@ -9109,7 +9266,7 @@ var PlacementBlock = (props) => {
9109
9266
  }
9110
9267
  return text2;
9111
9268
  }, [targetRelOptions, targetRows, sourceRows]);
9112
- const relationLabelMaps = (0, import_react20.useMemo)(() => {
9269
+ const relationLabelMaps = (0, import_react21.useMemo)(() => {
9113
9270
  const maps = {};
9114
9271
  Object.entries(sourceRelOptions || {}).forEach(([colName, opts]) => {
9115
9272
  const m = /* @__PURE__ */ new Map();
@@ -9122,7 +9279,7 @@ var PlacementBlock = (props) => {
9122
9279
  });
9123
9280
  return maps;
9124
9281
  }, [sourceRelOptions]);
9125
- const relationLabelsOf = (0, import_react20.useCallback)((row, colName) => {
9282
+ const relationLabelsOf = (0, import_react21.useCallback)((row, colName) => {
9126
9283
  var _a2;
9127
9284
  const map = relationLabelMaps[colName];
9128
9285
  const ids = normalizeRelationValue((_a2 = row.data) == null ? void 0 : _a2[colName]);
@@ -9131,7 +9288,7 @@ var PlacementBlock = (props) => {
9131
9288
  const txt = cellText(readColumnValue(row.data, colName));
9132
9289
  return txt && !/^[a-fA-F0-9]{24}$/.test(txt) ? txt.split(", ").filter(Boolean) : [];
9133
9290
  }, [relationLabelMaps]);
9134
- const rowPassesColFilters = (0, import_react20.useCallback)((row, filters) => {
9291
+ const rowPassesColFilters = (0, import_react21.useCallback)((row, filters) => {
9135
9292
  return Object.entries(filters).every(([colName, f]) => {
9136
9293
  if (!f) return true;
9137
9294
  const labels = relationLabelsOf(row, colName);
@@ -9140,7 +9297,7 @@ var PlacementBlock = (props) => {
9140
9297
  return true;
9141
9298
  });
9142
9299
  }, [relationLabelsOf]);
9143
- const setColFilter = (0, import_react20.useCallback)((grid, colName, payload) => {
9300
+ const setColFilter = (0, import_react21.useCallback)((grid, colName, payload) => {
9144
9301
  setColFilters((prev) => {
9145
9302
  const next = __spreadValues({}, prev[grid]);
9146
9303
  if (payload === void 0) delete next[colName];
@@ -9148,11 +9305,11 @@ var PlacementBlock = (props) => {
9148
9305
  return __spreadProps(__spreadValues({}, prev), { [grid]: next });
9149
9306
  });
9150
9307
  }, []);
9151
- const openColFilter = (0, import_react20.useCallback)((grid, colName, rect) => {
9308
+ const openColFilter = (0, import_react21.useCallback)((grid, colName, rect) => {
9152
9309
  setFilterPopover((cur) => cur && cur.grid === grid && cur.colName === colName ? null : { grid, colName, rect });
9153
9310
  }, []);
9154
- const closeColFilter = (0, import_react20.useCallback)(() => setFilterPopover(null), []);
9155
- const filterColumns = (0, import_react20.useMemo)(() => {
9311
+ const closeColFilter = (0, import_react21.useCallback)(() => setFilterPopover(null), []);
9312
+ const filterColumns = (0, import_react21.useMemo)(() => {
9156
9313
  const definedFilters = (config == null ? void 0 : config.filterFields) || [];
9157
9314
  const legacyFilters = [config == null ? void 0 : config.targetFilterField1Id, config == null ? void 0 : config.targetFilterField2Id].filter(Boolean);
9158
9315
  const fieldsToUse = definedFilters.length > 0 ? definedFilters : legacyFilters;
@@ -9178,7 +9335,7 @@ var PlacementBlock = (props) => {
9178
9335
  return targetColumns.filter((c) => isUserColumn(c) && c.name !== assignmentField && !["id", "_id", "id_", "statusId"].includes(c.name)).slice(0, 3);
9179
9336
  }, [targetColumns, assignmentField, config]);
9180
9337
  const rawSelectorField = (config == null ? void 0 : config.targetSelectorFieldId) || (config == null ? void 0 : config.targetDisplayFieldId) || ((_a = filterColumns[0]) == null ? void 0 : _a.name) || "";
9181
- const selectorField = (0, import_react20.useMemo)(() => {
9338
+ const selectorField = (0, import_react21.useMemo)(() => {
9182
9339
  const { relationColumn } = parseColumnRef(rawSelectorField);
9183
9340
  if (relationColumn && !targetColumns.some((c) => c.name === rawSelectorField) && targetColumns.some((c) => {
9184
9341
  var _a2;
@@ -9188,7 +9345,7 @@ var PlacementBlock = (props) => {
9188
9345
  }
9189
9346
  return rawSelectorField;
9190
9347
  }, [rawSelectorField, targetColumns]);
9191
- const filteredTargetRows = (0, import_react20.useMemo)(() => {
9348
+ const filteredTargetRows = (0, import_react21.useMemo)(() => {
9192
9349
  return targetRows.filter((r) => {
9193
9350
  return filterColumns.every((col) => {
9194
9351
  const filterVal = targetFilters[col.name];
@@ -9197,7 +9354,7 @@ var PlacementBlock = (props) => {
9197
9354
  });
9198
9355
  });
9199
9356
  }, [targetRows, targetFilters, filterColumns, displayValue]);
9200
- (0, import_react20.useEffect)(() => {
9357
+ (0, import_react21.useEffect)(() => {
9201
9358
  if (filteredTargetRows.length > 0) {
9202
9359
  if (!selectedTargetId || !filteredTargetRows.some((r) => r.id === selectedTargetId)) {
9203
9360
  setSelectedTargetId(filteredTargetRows[0].id);
@@ -9206,11 +9363,27 @@ var PlacementBlock = (props) => {
9206
9363
  setSelectedTargetId("");
9207
9364
  }
9208
9365
  }, [filteredTargetRows, selectedTargetId]);
9209
- const assignmentColumn = (0, import_react20.useMemo)(() => targetColumns.find((c) => c.name === assignmentField), [targetColumns, assignmentField]);
9366
+ const appliedDefaultsKeyRef = (0, import_react21.useRef)("");
9367
+ (0, import_react21.useEffect)(() => {
9368
+ const defaults = config == null ? void 0 : config.targetFilterDefaults;
9369
+ if (isLoading || !defaults || targetRows.length === 0 || targetColumns.length === 0) return;
9370
+ const key = `${targetTableId}|${JSON.stringify(defaults)}`;
9371
+ if (appliedDefaultsKeyRef.current === key) return;
9372
+ appliedDefaultsKeyRef.current = key;
9373
+ const resolved = computePlacementDefaultFilters({
9374
+ refs: getPlacementFilterRefs(config),
9375
+ defaults,
9376
+ targetColumns,
9377
+ rows: targetRows,
9378
+ getText: (colName, data) => displayValue(targetColumns.find((c) => c.name === colName) || { name: colName }, readColumnValue(data, colName))
9379
+ });
9380
+ if (Object.keys(resolved).length > 0) setTargetFilters((prev) => __spreadValues(__spreadValues({}, resolved), prev));
9381
+ }, [config, isLoading, targetRows, targetColumns, targetTableId, displayValue]);
9382
+ const assignmentColumn = (0, import_react21.useMemo)(() => targetColumns.find((c) => c.name === assignmentField), [targetColumns, assignmentField]);
9210
9383
  const isRelationField = ((_b = assignmentColumn == null ? void 0 : assignmentColumn.type) == null ? void 0 : _b.toUpperCase()) === "RELATION";
9211
9384
  const assignmentLabel = (assignmentColumn == null ? void 0 : assignmentColumn.label) || (assignmentColumn == null ? void 0 : assignmentColumn.name) || assignmentField || "";
9212
- const nameOf = (0, import_react20.useCallback)((row) => cellText(readColumnValue(row.data, displayField)) || "\u05DC\u05DC\u05D0 \u05E9\u05DD", [displayField]);
9213
- const assignedIds = (0, import_react20.useMemo)(() => {
9385
+ const nameOf = (0, import_react21.useCallback)((row) => cellText(readColumnValue(row.data, displayField)) || "\u05DC\u05DC\u05D0 \u05E9\u05DD", [displayField]);
9386
+ const assignedIds = (0, import_react21.useMemo)(() => {
9214
9387
  var _a2;
9215
9388
  const target = targetRows.find((r) => r.id === selectedTargetId);
9216
9389
  if (!target || !assignmentField) return [];
@@ -9224,36 +9397,36 @@ var PlacementBlock = (props) => {
9224
9397
  }).filter((id) => !!id && sourceRows.some((s) => s.id === id));
9225
9398
  return Array.from(new Set(ids));
9226
9399
  }, [selectedTargetId, targetRows, sourceRows, assignmentField, isRelationField, nameOf]);
9227
- const assignedIdsRef = (0, import_react20.useRef)(assignedIds);
9400
+ const assignedIdsRef = (0, import_react21.useRef)(assignedIds);
9228
9401
  assignedIdsRef.current = assignedIds;
9229
- (0, import_react20.useEffect)(() => {
9402
+ (0, import_react21.useEffect)(() => {
9230
9403
  setCandidateIds(assignedIdsRef.current);
9231
9404
  setCheckedIds(assignedIdsRef.current);
9232
9405
  }, [selectedTargetId, sourceRows]);
9233
- const toGridRow = (0, import_react20.useCallback)((r, checked = false) => __spreadProps(__spreadValues({}, r.data), { id: r.id, __label: nameOf(r), __checked: checked, statusId: statusMap[r.id] || defaultStatusId }), [nameOf, statusMap, defaultStatusId]);
9234
- const candidateRows = (0, import_react20.useMemo)(() => candidateIds.map((id) => sourceRows.find((r) => r.id === id)).filter((r) => !!r), [candidateIds, sourceRows]);
9235
- const candidateGridData = (0, import_react20.useMemo)(() => {
9406
+ const toGridRow = (0, import_react21.useCallback)((r, checked = false) => __spreadProps(__spreadValues({}, r.data), { id: r.id, __label: nameOf(r), __checked: checked, statusId: statusMap[r.id] || defaultStatusId }), [nameOf, statusMap, defaultStatusId]);
9407
+ const candidateRows = (0, import_react21.useMemo)(() => candidateIds.map((id) => sourceRows.find((r) => r.id === id)).filter((r) => !!r), [candidateIds, sourceRows]);
9408
+ const candidateGridData = (0, import_react21.useMemo)(() => {
9236
9409
  const checked = new Set(checkedIds);
9237
9410
  return candidateRows.filter((r) => rowPassesColFilters(r, colFilters.cand)).map((r) => toGridRow(r, checked.has(r.id)));
9238
9411
  }, [candidateRows, checkedIds, toGridRow, rowPassesColFilters, colFilters.cand]);
9239
- const availableRows = (0, import_react20.useMemo)(() => {
9412
+ const availableRows = (0, import_react21.useMemo)(() => {
9240
9413
  const set = new Set(candidateIds);
9241
9414
  return sourceRows.filter((r) => !set.has(r.id));
9242
9415
  }, [candidateIds, sourceRows]);
9243
- const relationButtonColumns = (0, import_react20.useMemo)(() => {
9416
+ const relationButtonColumns = (0, import_react21.useMemo)(() => {
9244
9417
  const wanted = Array.isArray(config == null ? void 0 : config.relationButtonColumns) ? config.relationButtonColumns : [];
9245
9418
  return wanted.filter((name) => sourceColumns.some((c) => (c == null ? void 0 : c.name) === name && String(c == null ? void 0 : c.type).toUpperCase() === "RELATION"));
9246
9419
  }, [config, sourceColumns]);
9247
9420
  const hasRelationButtons = relationButtonColumns.length > 0;
9248
- const handleRelationFilterChange = (0, import_react20.useCallback)((colName, id) => {
9421
+ const handleRelationFilterChange = (0, import_react21.useCallback)((colName, id) => {
9249
9422
  setSourceRelFilters((prev) => __spreadProps(__spreadValues({}, prev), { [colName]: id }));
9250
9423
  }, []);
9251
- const availableGridData = (0, import_react20.useMemo)(() => {
9424
+ const availableGridData = (0, import_react21.useMemo)(() => {
9252
9425
  const active = Object.entries(sourceRelFilters).filter(([name, v]) => !!v && relationButtonColumns.includes(name));
9253
9426
  const byButtons = active.length === 0 ? availableRows : availableRows.filter((r) => active.every(([name, v]) => rowMatchesRelationFilter(r, name, v)));
9254
9427
  return byButtons.filter((r) => rowPassesColFilters(r, colFilters.source)).map((r) => toGridRow(r));
9255
9428
  }, [availableRows, sourceRelFilters, relationButtonColumns, toGridRow, rowPassesColFilters, colFilters.source]);
9256
- const persistAssignment = (0, import_react20.useCallback)(async (nextIds) => {
9429
+ const persistAssignment = (0, import_react21.useCallback)(async (nextIds) => {
9257
9430
  const exec = executeActionRef.current;
9258
9431
  if (exec && targetTableId && assignmentField && selectedTargetId) {
9259
9432
  const value = isRelationField ? nextIds : nextIds.map((id) => sourceRows.find((r) => r.id === id)).filter((r) => !!r).map(nameOf).join(", ");
@@ -9265,33 +9438,33 @@ var PlacementBlock = (props) => {
9265
9438
  for (const id of nextIds.filter((i) => !assignedIds.includes(i))) await legacyRef.current.updateAssignment(selectedTargetId, id);
9266
9439
  }
9267
9440
  }, [targetTableId, assignmentField, selectedTargetId, isRelationField, sourceRows, nameOf, assignedIds]);
9268
- const moveToCandidates = (0, import_react20.useCallback)((id) => {
9441
+ const moveToCandidates = (0, import_react21.useCallback)((id) => {
9269
9442
  setCandidateIds((prev) => prev.includes(id) ? prev : [...prev, id]);
9270
9443
  }, []);
9271
- const moveToSource = (0, import_react20.useCallback)((id) => {
9444
+ const moveToSource = (0, import_react21.useCallback)((id) => {
9272
9445
  setCandidateIds((prev) => prev.filter((x) => x !== id));
9273
9446
  setCheckedIds((prev) => prev.filter((x) => x !== id));
9274
9447
  setStatusMap((prev) => __spreadProps(__spreadValues({}, prev), { [id]: defaultStatusId }));
9275
9448
  }, [defaultStatusId]);
9276
- const moveToCandidatesRef = (0, import_react20.useRef)(moveToCandidates);
9449
+ const moveToCandidatesRef = (0, import_react21.useRef)(moveToCandidates);
9277
9450
  moveToCandidatesRef.current = moveToCandidates;
9278
- const moveToSourceRef = (0, import_react20.useRef)(moveToSource);
9451
+ const moveToSourceRef = (0, import_react21.useRef)(moveToSource);
9279
9452
  moveToSourceRef.current = moveToSource;
9280
- const toggleChecked = (0, import_react20.useCallback)((id) => {
9453
+ const toggleChecked = (0, import_react21.useCallback)((id) => {
9281
9454
  setCheckedIds((prev) => prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]);
9282
9455
  }, []);
9283
9456
  const allChecked = candidateIds.length > 0 && candidateIds.every((id) => checkedIds.includes(id));
9284
9457
  const someChecked = candidateIds.some((id) => checkedIds.includes(id));
9285
- const toggleAll = (0, import_react20.useCallback)(() => {
9458
+ const toggleAll = (0, import_react21.useCallback)(() => {
9286
9459
  setCheckedIds(allChecked ? [] : [...candidateIds]);
9287
9460
  }, [allChecked, candidateIds]);
9288
- const returnAll = (0, import_react20.useCallback)(() => {
9461
+ const returnAll = (0, import_react21.useCallback)(() => {
9289
9462
  setCandidateIds([]);
9290
9463
  setCheckedIds([]);
9291
9464
  }, []);
9292
- const checkedCandidates = (0, import_react20.useMemo)(() => candidateIds.filter((id) => checkedIds.includes(id)), [candidateIds, checkedIds]);
9465
+ const checkedCandidates = (0, import_react21.useMemo)(() => candidateIds.filter((id) => checkedIds.includes(id)), [candidateIds, checkedIds]);
9293
9466
  const isDirty = checkedCandidates.length !== assignedIds.length || checkedCandidates.some((id) => !assignedIds.includes(id));
9294
- const submitAssignment = (0, import_react20.useCallback)(async () => {
9467
+ const submitAssignment = (0, import_react21.useCallback)(async () => {
9295
9468
  if (!selectedTargetId) {
9296
9469
  alert("\u05D0\u05E0\u05D0 \u05D1\u05D7\u05E8 \u05E7\u05D5\u05D3\u05DD \u05E8\u05E9\u05D5\u05DE\u05EA \u05D9\u05E2\u05D3 \u05DC\u05E4\u05E0\u05D9 \u05D4\u05E9\u05D9\u05D1\u05D5\u05E5");
9297
9470
  return;
@@ -9307,14 +9480,14 @@ var PlacementBlock = (props) => {
9307
9480
  setIsSaving(false);
9308
9481
  }
9309
9482
  }, [selectedTargetId, persistAssignment, checkedCandidates]);
9310
- const cycleStatus = (0, import_react20.useCallback)((recordId) => {
9483
+ const cycleStatus = (0, import_react21.useCallback)((recordId) => {
9311
9484
  setStatusMap((prev) => {
9312
9485
  const current = prev[recordId] || defaultStatusId;
9313
9486
  const idx = statuses.findIndex((c) => c.id === current);
9314
9487
  return __spreadProps(__spreadValues({}, prev), { [recordId]: statuses[(idx + 1) % statuses.length].id });
9315
9488
  });
9316
9489
  }, [statuses, defaultStatusId]);
9317
- const cancelAssignment = (0, import_react20.useCallback)(async () => {
9490
+ const cancelAssignment = (0, import_react21.useCallback)(async () => {
9318
9491
  if (!selectedTargetId || assignedIds.length === 0) return;
9319
9492
  if (!window.confirm(`\u05DC\u05D1\u05D8\u05DC \u05D0\u05EA \u05D4\u05E9\u05D9\u05D1\u05D5\u05E5 \u05D5\u05DC\u05DE\u05D7\u05D5\u05E7 \u05D0\u05EA \u05D4\u05E0\u05EA\u05D5\u05DF \u05DE\u05E9\u05D3\u05D4 "${assignmentLabel}"?`)) return;
9320
9493
  const removed = new Set(assignedIds);
@@ -9330,7 +9503,7 @@ var PlacementBlock = (props) => {
9330
9503
  setIsSaving(false);
9331
9504
  }
9332
9505
  }, [selectedTargetId, assignedIds, assignmentLabel, persistAssignment]);
9333
- const makeColDefs = (0, import_react20.useCallback)((columns, fallbackName, grid, withCheckbox = false) => {
9506
+ const makeColDefs = (0, import_react21.useCallback)((columns, fallbackName, grid, withCheckbox = false) => {
9334
9507
  const gridFilters = colFilters[grid];
9335
9508
  const defs = [];
9336
9509
  if (withCheckbox) {
@@ -9375,36 +9548,36 @@ var PlacementBlock = (props) => {
9375
9548
  return defs;
9376
9549
  }, [cycleStatus, statuses, defaultStatusId, displayField, displayValue, toggleChecked, toggleAll, allChecked, someChecked, colFilters, openColFilter]);
9377
9550
  const sourceHeader = displayField === "name" ? "\u05E9\u05DD" : columnRefLabel(displayField);
9378
- const sourceColDefs = (0, import_react20.useMemo)(() => makeColDefs(sourceColumns, sourceHeader, "source"), [makeColDefs, sourceColumns, sourceHeader]);
9379
- const candidateColDefs = (0, import_react20.useMemo)(() => makeColDefs(sourceColumns, sourceHeader, "cand", true), [makeColDefs, sourceColumns, sourceHeader]);
9380
- const defaultColDef = (0, import_react20.useMemo)(() => ({ resizable: true }), []);
9551
+ const sourceColDefs = (0, import_react21.useMemo)(() => makeColDefs(sourceColumns, sourceHeader, "source"), [makeColDefs, sourceColumns, sourceHeader]);
9552
+ const candidateColDefs = (0, import_react21.useMemo)(() => makeColDefs(sourceColumns, sourceHeader, "cand", true), [makeColDefs, sourceColumns, sourceHeader]);
9553
+ const defaultColDef = (0, import_react21.useMemo)(() => ({ resizable: true }), []);
9381
9554
  const scrollableColIds = (defs) => defs.filter((d) => !d.pinned).map((d) => {
9382
9555
  var _a2;
9383
9556
  return (_a2 = d.colId) != null ? _a2 : d.field;
9384
9557
  }).filter(Boolean);
9385
- const expandColumns = (0, import_react20.useCallback)((api) => {
9558
+ const expandColumns = (0, import_react21.useCallback)((api) => {
9386
9559
  api == null ? void 0 : api.sizeColumnsToFit();
9387
9560
  }, []);
9388
- const shrinkColumns = (0, import_react20.useCallback)((api, defs) => {
9561
+ const shrinkColumns = (0, import_react21.useCallback)((api, defs) => {
9389
9562
  api == null ? void 0 : api.autoSizeColumns(scrollableColIds(defs));
9390
9563
  }, []);
9391
- const popoverOptions = (0, import_react20.useMemo)(() => {
9564
+ const popoverOptions = (0, import_react21.useMemo)(() => {
9392
9565
  if (!filterPopover) return [];
9393
9566
  const rows = filterPopover.grid === "source" ? availableRows : candidateRows;
9394
9567
  const set = /* @__PURE__ */ new Set();
9395
9568
  rows.forEach((r) => relationLabelsOf(r, filterPopover.colName).forEach((l) => set.add(l)));
9396
9569
  return Array.from(set).sort((a, b) => a.localeCompare(b, "he")).map((label) => ({ id: label, label }));
9397
9570
  }, [filterPopover, availableRows, candidateRows, relationLabelsOf]);
9398
- const popoverColumn = (0, import_react20.useMemo)(
9571
+ const popoverColumn = (0, import_react21.useMemo)(
9399
9572
  () => filterPopover ? sourceColumns.find((c) => c.name === filterPopover.colName) : void 0,
9400
9573
  [filterPopover, sourceColumns]
9401
9574
  );
9402
- const getRowId = (0, import_react20.useCallback)((p) => p.data.id, []);
9403
- const sourceContainerRef = (0, import_react20.useRef)(null);
9404
- const assignedContainerRef = (0, import_react20.useRef)(null);
9405
- const [sourceApi, setSourceApi] = (0, import_react20.useState)(null);
9406
- const [assignedApi, setAssignedApi] = (0, import_react20.useState)(null);
9407
- (0, import_react20.useEffect)(() => {
9575
+ const getRowId = (0, import_react21.useCallback)((p) => p.data.id, []);
9576
+ const sourceContainerRef = (0, import_react21.useRef)(null);
9577
+ const assignedContainerRef = (0, import_react21.useRef)(null);
9578
+ const [sourceApi, setSourceApi] = (0, import_react21.useState)(null);
9579
+ const [assignedApi, setAssignedApi] = (0, import_react21.useState)(null);
9580
+ (0, import_react21.useEffect)(() => {
9408
9581
  if (!sourceApi || !assignedApi) return;
9409
9582
  const toAssigned = { getContainer: () => assignedContainerRef.current, onDragStop: (p) => {
9410
9583
  var _a2, _b2;
@@ -9427,20 +9600,20 @@ var PlacementBlock = (props) => {
9427
9600
  }
9428
9601
  };
9429
9602
  }, [sourceApi, assignedApi]);
9430
- const selectorLabel = (0, import_react20.useMemo)(() => {
9603
+ const selectorLabel = (0, import_react21.useMemo)(() => {
9431
9604
  const col = targetColumns.find((c) => c.name === selectorField || c.id === selectorField);
9432
9605
  return (col == null ? void 0 : col.label) || columnRefLabel(selectorField) || "\u05D1\u05D7\u05D9\u05E8\u05EA \u05E8\u05E9\u05D5\u05DE\u05D4 \u05DC\u05E9\u05D9\u05D1\u05D5\u05E5";
9433
9606
  }, [targetColumns, selectorField]);
9434
- const assignedText = (0, import_react20.useMemo)(
9607
+ const assignedText = (0, import_react21.useMemo)(
9435
9608
  () => assignedIds.map((id) => sourceRows.find((r) => r.id === id)).filter((r) => !!r).map(nameOf).join(", "),
9436
9609
  [assignedIds, sourceRows, nameOf]
9437
9610
  );
9438
9611
  const activeTarget = targetRows.find((r) => r.id === selectedTargetId);
9439
- const targetLabel = (0, import_react20.useCallback)((r) => {
9612
+ const targetLabel = (0, import_react21.useCallback)((r) => {
9440
9613
  const col = targetColumns.find((c) => c.name === selectorField || c.id === selectorField);
9441
9614
  return displayValue(col || { name: selectorField }, readColumnValue(r.data, selectorField)) || "\u05DC\u05DC\u05D0 \u05E9\u05DD";
9442
9615
  }, [selectorField, targetColumns, displayValue]);
9443
- const previewColumns = (0, import_react20.useMemo)(() => targetColumns.filter((c) => isUserColumn(c) && c.name !== assignmentField && !["id", "_id", "id_", "statusId"].includes(c.name)), [targetColumns, assignmentField]);
9616
+ const previewColumns = (0, import_react21.useMemo)(() => targetColumns.filter((c) => isUserColumn(c) && c.name !== assignmentField && !["id", "_id", "id_", "statusId"].includes(c.name)), [targetColumns, assignmentField]);
9444
9617
  if (!config || !sourceTableId || !targetTableId) {
9445
9618
  return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "p-4 text-xs text-slate-500 border border-dashed border-slate-300 rounded-xl", dir: "rtl", children: "\u05E8\u05DB\u05D9\u05D1 \u05D4\u05E9\u05D9\u05D1\u05D5\u05E5 \u05DC\u05D0 \u05D4\u05D5\u05D2\u05D3\u05E8 (\u05D7\u05E1\u05E8\u05D5\u05EA \u05D8\u05D1\u05DC\u05EA \u05DE\u05E7\u05D5\u05E8 / \u05D8\u05D1\u05DC\u05EA \u05D9\u05E2\u05D3)." });
9446
9619
  }
@@ -9603,11 +9776,11 @@ var PlacementBlock = (props) => {
9603
9776
  };
9604
9777
 
9605
9778
  // src/components/WhatsAppComponent/WhatsAppComponent.tsx
9606
- var import_react26 = __toESM(require("react"));
9779
+ var import_react27 = __toESM(require("react"));
9607
9780
  var import_lucide_react17 = require("lucide-react");
9608
9781
 
9609
9782
  // src/components/WhatsAppComponent/CreateTemplateModal.tsx
9610
- var import_react21 = require("react");
9783
+ var import_react22 = require("react");
9611
9784
  var import_lucide_react11 = require("lucide-react");
9612
9785
  var import_emoji_picker_react = __toESM(require("emoji-picker-react"));
9613
9786
 
@@ -9737,26 +9910,26 @@ function CreateTemplateModal({
9737
9910
  executeAction,
9738
9911
  orgId
9739
9912
  }) {
9740
- const [templateName, setTemplateName] = (0, import_react21.useState)("");
9741
- const [language, setLanguage] = (0, import_react21.useState)("he");
9742
- const [category, setCategory] = (0, import_react21.useState)("MARKETING");
9743
- const [bodyText, setBodyText] = (0, import_react21.useState)("");
9744
- const [variableSamples, setVariableSamples] = (0, import_react21.useState)({});
9745
- const [hasFileHeader, setHasFileHeader] = (0, import_react21.useState)(false);
9746
- const [selectedFile, setSelectedFile] = (0, import_react21.useState)(null);
9747
- const [fileBase64, setFileBase64] = (0, import_react21.useState)("");
9748
- const [buttons, setButtons] = (0, import_react21.useState)([]);
9749
- const [isAddButtonOpen, setIsAddButtonOpen] = (0, import_react21.useState)(false);
9750
- const addButtonDropdownRef = (0, import_react21.useRef)(null);
9751
- const [isSubmitting, setIsSubmitting] = (0, import_react21.useState)(false);
9752
- const [submittingStep, setSubmittingStep] = (0, import_react21.useState)("");
9753
- const [submitError, setSubmitError] = (0, import_react21.useState)(null);
9754
- const [fileError, setFileError] = (0, import_react21.useState)(null);
9755
- const textareaRef = (0, import_react21.useRef)(null);
9756
- const fileInputRef = (0, import_react21.useRef)(null);
9757
- const emojiPickerRef = (0, import_react21.useRef)(null);
9758
- const [isEmojiPickerOpen, setIsEmojiPickerOpen] = (0, import_react21.useState)(false);
9759
- (0, import_react21.useEffect)(() => {
9913
+ const [templateName, setTemplateName] = (0, import_react22.useState)("");
9914
+ const [language, setLanguage] = (0, import_react22.useState)("he");
9915
+ const [category, setCategory] = (0, import_react22.useState)("MARKETING");
9916
+ const [bodyText, setBodyText] = (0, import_react22.useState)("");
9917
+ const [variableSamples, setVariableSamples] = (0, import_react22.useState)({});
9918
+ const [hasFileHeader, setHasFileHeader] = (0, import_react22.useState)(false);
9919
+ const [selectedFile, setSelectedFile] = (0, import_react22.useState)(null);
9920
+ const [fileBase64, setFileBase64] = (0, import_react22.useState)("");
9921
+ const [buttons, setButtons] = (0, import_react22.useState)([]);
9922
+ const [isAddButtonOpen, setIsAddButtonOpen] = (0, import_react22.useState)(false);
9923
+ const addButtonDropdownRef = (0, import_react22.useRef)(null);
9924
+ const [isSubmitting, setIsSubmitting] = (0, import_react22.useState)(false);
9925
+ const [submittingStep, setSubmittingStep] = (0, import_react22.useState)("");
9926
+ const [submitError, setSubmitError] = (0, import_react22.useState)(null);
9927
+ const [fileError, setFileError] = (0, import_react22.useState)(null);
9928
+ const textareaRef = (0, import_react22.useRef)(null);
9929
+ const fileInputRef = (0, import_react22.useRef)(null);
9930
+ const emojiPickerRef = (0, import_react22.useRef)(null);
9931
+ const [isEmojiPickerOpen, setIsEmojiPickerOpen] = (0, import_react22.useState)(false);
9932
+ (0, import_react22.useEffect)(() => {
9760
9933
  function handleClickOutside(event) {
9761
9934
  if (emojiPickerRef.current && !emojiPickerRef.current.contains(event.target)) {
9762
9935
  setIsEmojiPickerOpen(false);
@@ -9780,7 +9953,7 @@ function CreateTemplateModal({
9780
9953
  document.removeEventListener("keydown", handleKeyDown2);
9781
9954
  };
9782
9955
  }, [isEmojiPickerOpen, isAddButtonOpen]);
9783
- (0, import_react21.useEffect)(() => {
9956
+ (0, import_react22.useEffect)(() => {
9784
9957
  if (isOpen) {
9785
9958
  setTemplateName("");
9786
9959
  setLanguage("he");
@@ -9799,10 +9972,10 @@ function CreateTemplateModal({
9799
9972
  setIsEmojiPickerOpen(false);
9800
9973
  }
9801
9974
  }, [isOpen]);
9802
- const uniqueVariables = (0, import_react21.useMemo)(() => {
9975
+ const uniqueVariables = (0, import_react22.useMemo)(() => {
9803
9976
  return extractUniqueVariableIndices(bodyText);
9804
9977
  }, [bodyText]);
9805
- (0, import_react21.useEffect)(() => {
9978
+ (0, import_react22.useEffect)(() => {
9806
9979
  setVariableSamples((prev) => {
9807
9980
  const next = {};
9808
9981
  uniqueVariables.forEach((idx) => {
@@ -9813,7 +9986,7 @@ function CreateTemplateModal({
9813
9986
  }, [uniqueVariables]);
9814
9987
  const isNameEmpty = templateName.trim().length === 0;
9815
9988
  const isNamePatternValid = isValidTemplateName(templateName);
9816
- const isNameDuplicate = (0, import_react21.useMemo)(() => {
9989
+ const isNameDuplicate = (0, import_react22.useMemo)(() => {
9817
9990
  const trimmedName = templateName.trim().toLowerCase();
9818
9991
  if (!trimmedName) return false;
9819
9992
  if (existingTemplates && existingTemplates.length > 0) {
@@ -9823,9 +9996,9 @@ function CreateTemplateModal({
9823
9996
  }
9824
9997
  return isDuplicateTemplateName(trimmedName, existingTemplateNames, language);
9825
9998
  }, [templateName, language, existingTemplates, existingTemplateNames]);
9826
- const ratioInfo = (0, import_react21.useMemo)(() => validateWordToVariableRatio(bodyText), [bodyText]);
9827
- const seqInfo = (0, import_react21.useMemo)(() => validateSequentialVariables(bodyText), [bodyText]);
9828
- const validationResult = (0, import_react21.useMemo)(() => {
9999
+ const ratioInfo = (0, import_react22.useMemo)(() => validateWordToVariableRatio(bodyText), [bodyText]);
10000
+ const seqInfo = (0, import_react22.useMemo)(() => validateSequentialVariables(bodyText), [bodyText]);
10001
+ const validationResult = (0, import_react22.useMemo)(() => {
9829
10002
  return validateWhatsAppTemplate({
9830
10003
  name: templateName,
9831
10004
  language,
@@ -10819,7 +10992,7 @@ function CreateTemplateModal({
10819
10992
  }
10820
10993
 
10821
10994
  // src/components/WhatsAppComponent/hooks/useWhatsAppState.ts
10822
- var import_react22 = require("react");
10995
+ var import_react23 = require("react");
10823
10996
 
10824
10997
  // src/components/WhatsAppComponent/utils/recipientEngine.ts
10825
10998
  var STORAGE_KEY_TEST_PHONE = "whatsapp_test_phone";
@@ -12124,29 +12297,29 @@ function useWhatsAppState(props) {
12124
12297
  data: injectedData
12125
12298
  } = props;
12126
12299
  const orgId = props.orgId || props.organizationId || (settings == null ? void 0 : settings.orgId) || (settings == null ? void 0 : settings.organizationId) || (injectedData == null ? void 0 : injectedData.orgId) || (injectedData == null ? void 0 : injectedData.organizationId);
12127
- const [tableColumns2, setTableColumns] = (0, import_react22.useState)(() => {
12300
+ const [tableColumns2, setTableColumns] = (0, import_react23.useState)(() => {
12128
12301
  return Array.isArray(settings == null ? void 0 : settings.columns) ? settings.columns : [];
12129
12302
  });
12130
- const [rawRecords, setRawRecords] = (0, import_react22.useState)(() => {
12303
+ const [rawRecords, setRawRecords] = (0, import_react23.useState)(() => {
12131
12304
  if (Array.isArray(injectedData)) return injectedData;
12132
12305
  if (Array.isArray(injectedData == null ? void 0 : injectedData.records)) return injectedData.records;
12133
12306
  return [];
12134
12307
  });
12135
- const [relationOptions, setRelationOptions] = (0, import_react22.useState)(() => {
12308
+ const [relationOptions, setRelationOptions] = (0, import_react23.useState)(() => {
12136
12309
  return (injectedData == null ? void 0 : injectedData.relationOptions) || {};
12137
12310
  });
12138
- const [isLoadingTableData, setIsLoadingTableData] = (0, import_react22.useState)(() => Boolean(settings == null ? void 0 : settings.tableMetaId));
12139
- const [activeSubtableScans, setActiveSubtableScans] = (0, import_react22.useState)(0);
12140
- const [tableError, setTableError] = (0, import_react22.useState)(null);
12141
- const [filters, setFilters] = (0, import_react22.useState)({});
12142
- const [selectedRowIds, setSelectedRowIds] = (0, import_react22.useState)([]);
12143
- const [autoSelectCount, setAutoSelectCount] = (0, import_react22.useState)(null);
12144
- const isAutoSelectingRef = (0, import_react22.useRef)(false);
12145
- const isManualOverrideRef = (0, import_react22.useRef)(false);
12146
- const prevAutoSelectCountRef = (0, import_react22.useRef)(null);
12147
- const fetchedTableIdsRef = (0, import_react22.useRef)(/* @__PURE__ */ new Set());
12148
- const fullyFetchedRelationKeysRef = (0, import_react22.useRef)(/* @__PURE__ */ new Set());
12149
- const loadTableData = (0, import_react22.useCallback)(async () => {
12311
+ const [isLoadingTableData, setIsLoadingTableData] = (0, import_react23.useState)(() => Boolean(settings == null ? void 0 : settings.tableMetaId));
12312
+ const [activeSubtableScans, setActiveSubtableScans] = (0, import_react23.useState)(0);
12313
+ const [tableError, setTableError] = (0, import_react23.useState)(null);
12314
+ const [filters, setFilters] = (0, import_react23.useState)({});
12315
+ const [selectedRowIds, setSelectedRowIds] = (0, import_react23.useState)([]);
12316
+ const [autoSelectCount, setAutoSelectCount] = (0, import_react23.useState)(null);
12317
+ const isAutoSelectingRef = (0, import_react23.useRef)(false);
12318
+ const isManualOverrideRef = (0, import_react23.useRef)(false);
12319
+ const prevAutoSelectCountRef = (0, import_react23.useRef)(null);
12320
+ const fetchedTableIdsRef = (0, import_react23.useRef)(/* @__PURE__ */ new Set());
12321
+ const fullyFetchedRelationKeysRef = (0, import_react23.useRef)(/* @__PURE__ */ new Set());
12322
+ const loadTableData = (0, import_react23.useCallback)(async () => {
12150
12323
  var _a2;
12151
12324
  const tableId = (settings == null ? void 0 : settings.tableMetaId) || (injectedData == null ? void 0 : injectedData.tableMetaId) || (injectedData == null ? void 0 : injectedData.tableId);
12152
12325
  if (!tableId || !executeAction) return;
@@ -12213,10 +12386,10 @@ function useWhatsAppState(props) {
12213
12386
  executeAction,
12214
12387
  orgId
12215
12388
  ]);
12216
- (0, import_react22.useEffect)(() => {
12389
+ (0, import_react23.useEffect)(() => {
12217
12390
  loadTableData();
12218
12391
  }, [loadTableData]);
12219
- const filterableColumns = (0, import_react22.useMemo)(() => {
12392
+ const filterableColumns = (0, import_react23.useMemo)(() => {
12220
12393
  return (tableColumns2 || []).filter((col) => {
12221
12394
  var _a2;
12222
12395
  if (!col || col.name === "_id" || col.id === "_id") return false;
@@ -12224,15 +12397,15 @@ function useWhatsAppState(props) {
12224
12397
  return type === "RELATION" || type === "BOOLEAN";
12225
12398
  });
12226
12399
  }, [tableColumns2]);
12227
- const [referencedTableSchemas, setReferencedTableSchemas] = (0, import_react22.useState)({});
12228
- const subtableCols = (0, import_react22.useMemo)(() => {
12400
+ const [referencedTableSchemas, setReferencedTableSchemas] = (0, import_react23.useState)({});
12401
+ const subtableCols = (0, import_react23.useMemo)(() => {
12229
12402
  return (tableColumns2 || []).filter((col) => {
12230
12403
  var _a2;
12231
12404
  const type = (_a2 = col.type) == null ? void 0 : _a2.toUpperCase();
12232
12405
  return type === "RELATION" || type === "SUB_TABLE" || type === "SUBTABLE";
12233
12406
  });
12234
12407
  }, [tableColumns2]);
12235
- (0, import_react22.useEffect)(() => {
12408
+ (0, import_react23.useEffect)(() => {
12236
12409
  if (!executeAction) return;
12237
12410
  const unrequestedCols = subtableCols.filter((col) => {
12238
12411
  var _a2;
@@ -12278,20 +12451,20 @@ function useWhatsAppState(props) {
12278
12451
  const isScanningPhoneColumns = Boolean(
12279
12452
  isLoadingTableData || activeSubtableScans > 0 || tableColumns2.length === 0 && Boolean(settings == null ? void 0 : settings.tableMetaId)
12280
12453
  );
12281
- const targetPhoneOptions = (0, import_react22.useMemo)(() => {
12454
+ const targetPhoneOptions = (0, import_react23.useMemo)(() => {
12282
12455
  const cols = tableColumns2 && tableColumns2.length > 0 ? tableColumns2 : Array.isArray(settings == null ? void 0 : settings.columns) ? settings.columns : [];
12283
12456
  return scanTargetPhoneOptions(cols, referencedTableSchemas);
12284
12457
  }, [tableColumns2, settings == null ? void 0 : settings.columns, referencedTableSchemas]);
12285
- const phoneColumns = (0, import_react22.useMemo)(() => {
12458
+ const phoneColumns = (0, import_react23.useMemo)(() => {
12286
12459
  return targetPhoneOptions.map((opt) => ({ name: opt.label, id: opt.id, type: "PHONE" }));
12287
12460
  }, [targetPhoneOptions]);
12288
- const [phoneColumnId, setPhoneColumnId] = (0, import_react22.useState)("");
12289
- const [subtableFilterColumn, setSubtableFilterColumn] = (0, import_react22.useState)("");
12290
- const [subtableFilterValue, setSubtableFilterValue] = (0, import_react22.useState)("");
12291
- const [subtableSendLimit, setSubtableSendLimit] = (0, import_react22.useState)(
12461
+ const [phoneColumnId, setPhoneColumnId] = (0, import_react23.useState)("");
12462
+ const [subtableFilterColumn, setSubtableFilterColumn] = (0, import_react23.useState)("");
12463
+ const [subtableFilterValue, setSubtableFilterValue] = (0, import_react23.useState)("");
12464
+ const [subtableSendLimit, setSubtableSendLimit] = (0, import_react23.useState)(
12292
12465
  (settings == null ? void 0 : settings.subtableSendLimit) || "PRIMARY"
12293
12466
  );
12294
- (0, import_react22.useEffect)(() => {
12467
+ (0, import_react23.useEffect)(() => {
12295
12468
  if (targetPhoneOptions.length > 0) {
12296
12469
  const isValid = targetPhoneOptions.some(
12297
12470
  (opt) => opt.id === phoneColumnId || opt.columnName === phoneColumnId
@@ -12303,13 +12476,13 @@ function useWhatsAppState(props) {
12303
12476
  setPhoneColumnId("");
12304
12477
  }
12305
12478
  }, [targetPhoneOptions, phoneColumnId]);
12306
- const selectedPhoneOption = (0, import_react22.useMemo)(() => {
12479
+ const selectedPhoneOption = (0, import_react23.useMemo)(() => {
12307
12480
  if (!phoneColumnId) return targetPhoneOptions[0] || null;
12308
12481
  return targetPhoneOptions.find(
12309
12482
  (opt) => opt.id === phoneColumnId || opt.columnName === phoneColumnId
12310
12483
  ) || targetPhoneOptions[0] || null;
12311
12484
  }, [targetPhoneOptions, phoneColumnId]);
12312
- const subtableFilterableColumns = (0, import_react22.useMemo)(() => {
12485
+ const subtableFilterableColumns = (0, import_react23.useMemo)(() => {
12313
12486
  var _a2, _b2, _c;
12314
12487
  if (!selectedPhoneOption || selectedPhoneOption.type !== "SUBTABLE") {
12315
12488
  return [];
@@ -12328,14 +12501,14 @@ function useWhatsAppState(props) {
12328
12501
  return type === "BOOLEAN" || type === "RELATION";
12329
12502
  });
12330
12503
  }, [selectedPhoneOption, referencedTableSchemas, tableColumns2]);
12331
- const selectedSubtableFilterCol = (0, import_react22.useMemo)(() => {
12504
+ const selectedSubtableFilterCol = (0, import_react23.useMemo)(() => {
12332
12505
  return subtableFilterableColumns.find((c) => c.name === subtableFilterColumn);
12333
12506
  }, [subtableFilterableColumns, subtableFilterColumn]);
12334
- const [enablePostSendAction, setEnablePostSendAction] = (0, import_react22.useState)(false);
12335
- const [postSendActionColumn, setPostSendActionColumn] = (0, import_react22.useState)("");
12336
- const [postSendActionValue, setPostSendActionValue] = (0, import_react22.useState)("");
12337
- const [postSendActionTargetType, setPostSendActionTargetType] = (0, import_react22.useState)("MAIN");
12338
- const postSendActionTargetOptions = (0, import_react22.useMemo)(() => {
12507
+ const [enablePostSendAction, setEnablePostSendAction] = (0, import_react23.useState)(false);
12508
+ const [postSendActionColumn, setPostSendActionColumn] = (0, import_react23.useState)("");
12509
+ const [postSendActionValue, setPostSendActionValue] = (0, import_react23.useState)("");
12510
+ const [postSendActionTargetType, setPostSendActionTargetType] = (0, import_react23.useState)("MAIN");
12511
+ const postSendActionTargetOptions = (0, import_react23.useMemo)(() => {
12339
12512
  var _a2, _b2, _c;
12340
12513
  const options = [];
12341
12514
  (tableColumns2 || []).forEach((col) => {
@@ -12380,14 +12553,14 @@ function useWhatsAppState(props) {
12380
12553
  }
12381
12554
  return options;
12382
12555
  }, [tableColumns2, selectedPhoneOption, referencedTableSchemas]);
12383
- const selectedPostSendOption = (0, import_react22.useMemo)(() => {
12556
+ const selectedPostSendOption = (0, import_react23.useMemo)(() => {
12384
12557
  return postSendActionTargetOptions.find(
12385
12558
  (opt) => opt.id === postSendActionColumn || opt.columnName === postSendActionColumn
12386
12559
  );
12387
12560
  }, [postSendActionTargetOptions, postSendActionColumn]);
12388
12561
  const selectedPostSendCol = selectedPostSendOption;
12389
- const [isTestPromptOpen, setIsTestPromptOpen] = (0, import_react22.useState)(false);
12390
- const [testPhoneNumber, setTestPhoneNumber] = (0, import_react22.useState)(() => {
12562
+ const [isTestPromptOpen, setIsTestPromptOpen] = (0, import_react23.useState)(false);
12563
+ const [testPhoneNumber, setTestPhoneNumber] = (0, import_react23.useState)(() => {
12391
12564
  if (typeof window !== "undefined") {
12392
12565
  try {
12393
12566
  return localStorage.getItem(STORAGE_KEY_TEST_PHONE) || "";
@@ -12397,10 +12570,10 @@ function useWhatsAppState(props) {
12397
12570
  }
12398
12571
  return "";
12399
12572
  });
12400
- const [testFeedback, setTestFeedback] = (0, import_react22.useState)(null);
12401
- const [isSendingTest, setIsSendingTest] = (0, import_react22.useState)(false);
12402
- const [isSendingBroadcast, setIsSendingBroadcast] = (0, import_react22.useState)(false);
12403
- const [broadcastProgress, setBroadcastProgress] = (0, import_react22.useState)({
12573
+ const [testFeedback, setTestFeedback] = (0, import_react23.useState)(null);
12574
+ const [isSendingTest, setIsSendingTest] = (0, import_react23.useState)(false);
12575
+ const [isSendingBroadcast, setIsSendingBroadcast] = (0, import_react23.useState)(false);
12576
+ const [broadcastProgress, setBroadcastProgress] = (0, import_react23.useState)({
12404
12577
  current: 0,
12405
12578
  total: 0,
12406
12579
  successful: 0,
@@ -12408,12 +12581,12 @@ function useWhatsAppState(props) {
12408
12581
  skipped: 0,
12409
12582
  percent: 0
12410
12583
  });
12411
- const [broadcastSummary, setBroadcastSummary] = (0, import_react22.useState)(null);
12412
- const [rowStatusMap, setRowStatusMap] = (0, import_react22.useState)({});
12413
- const clearBroadcastSummary = (0, import_react22.useCallback)(() => {
12584
+ const [broadcastSummary, setBroadcastSummary] = (0, import_react23.useState)(null);
12585
+ const [rowStatusMap, setRowStatusMap] = (0, import_react23.useState)({});
12586
+ const clearBroadcastSummary = (0, import_react23.useCallback)(() => {
12414
12587
  setBroadcastSummary(null);
12415
12588
  }, []);
12416
- const handleTestPhoneChange = (0, import_react22.useCallback)((val) => {
12589
+ const handleTestPhoneChange = (0, import_react23.useCallback)((val) => {
12417
12590
  setTestPhoneNumber(val);
12418
12591
  if (typeof window !== "undefined") {
12419
12592
  try {
@@ -12423,7 +12596,7 @@ function useWhatsAppState(props) {
12423
12596
  }
12424
12597
  }
12425
12598
  }, []);
12426
- const getRelationOptionsForCol = (0, import_react22.useCallback)(
12599
+ const getRelationOptionsForCol = (0, import_react23.useCallback)(
12427
12600
  (colName, parentColName) => {
12428
12601
  var _a2, _b2, _c, _d;
12429
12602
  if (parentColName) {
@@ -12466,7 +12639,7 @@ function useWhatsAppState(props) {
12466
12639
  },
12467
12640
  [relationOptions, subtableFilterableColumns, postSendActionTargetOptions, tableColumns2, filterableColumns]
12468
12641
  );
12469
- (0, import_react22.useEffect)(() => {
12642
+ (0, import_react23.useEffect)(() => {
12470
12643
  var _a2, _b2, _c, _d, _e;
12471
12644
  if (!executeAction) return;
12472
12645
  const targets = [];
@@ -12560,7 +12733,7 @@ function useWhatsAppState(props) {
12560
12733
  }
12561
12734
  });
12562
12735
  }, [filterableColumns, selectedPhoneOption, referencedTableSchemas, tableColumns2, executeAction, selectedPostSendOption, orgId]);
12563
- (0, import_react22.useEffect)(() => {
12736
+ (0, import_react23.useEffect)(() => {
12564
12737
  var _a2, _b2, _c;
12565
12738
  if (!executeAction || !selectedSubtableFilterCol) return;
12566
12739
  if (((_a2 = selectedSubtableFilterCol.type) == null ? void 0 : _a2.toUpperCase()) !== "RELATION") return;
@@ -12611,7 +12784,7 @@ function useWhatsAppState(props) {
12611
12784
  }
12612
12785
  })();
12613
12786
  }, [selectedSubtableFilterCol, selectedPhoneOption, executeAction, orgId]);
12614
- (0, import_react22.useEffect)(() => {
12787
+ (0, import_react23.useEffect)(() => {
12615
12788
  var _a2, _b2;
12616
12789
  if (!executeAction || !selectedPostSendOption) return;
12617
12790
  if (selectedPostSendOption.type !== "RELATION") return;
@@ -12664,7 +12837,7 @@ function useWhatsAppState(props) {
12664
12837
  }
12665
12838
  })();
12666
12839
  }, [selectedPostSendOption, executeAction, orgId]);
12667
- const filteredRecords = (0, import_react22.useMemo)(() => {
12840
+ const filteredRecords = (0, import_react23.useMemo)(() => {
12668
12841
  const activeEntries = Object.entries(filters).filter(
12669
12842
  ([_, val]) => val !== void 0 && val !== null && val !== ""
12670
12843
  );
@@ -12696,7 +12869,7 @@ function useWhatsAppState(props) {
12696
12869
  });
12697
12870
  }, [rawRecords, filters, filterableColumns]);
12698
12871
  const filteredData = filteredRecords;
12699
- (0, import_react22.useEffect)(() => {
12872
+ (0, import_react23.useEffect)(() => {
12700
12873
  if (autoSelectCount !== null && autoSelectCount > 0) {
12701
12874
  isAutoSelectingRef.current = true;
12702
12875
  const sliced = filteredData.slice(0, autoSelectCount);
@@ -12714,7 +12887,7 @@ function useWhatsAppState(props) {
12714
12887
  isManualOverrideRef.current = false;
12715
12888
  prevAutoSelectCountRef.current = autoSelectCount;
12716
12889
  }, [autoSelectCount, filteredData]);
12717
- const embeddedTableExecuteAction = (0, import_react22.useCallback)(async (actionType, payload) => {
12890
+ const embeddedTableExecuteAction = (0, import_react23.useCallback)(async (actionType, payload) => {
12718
12891
  if (actionType === "FETCH_TABLE_DATA") {
12719
12892
  const colFilters = (payload == null ? void 0 : payload.columnFilters) || (payload == null ? void 0 : payload.filters);
12720
12893
  const searchQuery = payload == null ? void 0 : payload.search;
@@ -12757,10 +12930,10 @@ function useWhatsAppState(props) {
12757
12930
  const handleClearFilters = () => {
12758
12931
  setFilters({});
12759
12932
  };
12760
- const activeFiltersCount = (0, import_react22.useMemo)(() => {
12933
+ const activeFiltersCount = (0, import_react23.useMemo)(() => {
12761
12934
  return Object.values(filters).filter((v) => v !== "").length;
12762
12935
  }, [filters]);
12763
- const handleSelectionChange = (0, import_react22.useCallback)((selectedIds) => {
12936
+ const handleSelectionChange = (0, import_react23.useCallback)((selectedIds) => {
12764
12937
  setSelectedRowIds((prev) => {
12765
12938
  if (prev.length === selectedIds.length && prev.every((id, idx) => id === selectedIds[idx])) {
12766
12939
  return prev;
@@ -12774,13 +12947,13 @@ function useWhatsAppState(props) {
12774
12947
  return selectedIds;
12775
12948
  });
12776
12949
  }, [autoSelectCount]);
12777
- const handleRowToggle = (0, import_react22.useCallback)((rowId, checked) => {
12950
+ const handleRowToggle = (0, import_react23.useCallback)((rowId, checked) => {
12778
12951
  if (autoSelectCount !== null && autoSelectCount > 0) {
12779
12952
  isManualOverrideRef.current = true;
12780
12953
  setAutoSelectCount(null);
12781
12954
  }
12782
12955
  }, [autoSelectCount]);
12783
- const toggleRowSelection = (0, import_react22.useCallback)((rowId, checked) => {
12956
+ const toggleRowSelection = (0, import_react23.useCallback)((rowId, checked) => {
12784
12957
  if (autoSelectCount !== null && autoSelectCount > 0) {
12785
12958
  isManualOverrideRef.current = true;
12786
12959
  setAutoSelectCount(null);
@@ -12796,15 +12969,15 @@ function useWhatsAppState(props) {
12796
12969
  return prev;
12797
12970
  });
12798
12971
  }, [autoSelectCount]);
12799
- const [templates, setTemplates] = (0, import_react22.useState)([]);
12800
- const [selectedTemplateId, setSelectedTemplateId] = (0, import_react22.useState)(null);
12801
- const [isLoading, setIsLoading] = (0, import_react22.useState)(true);
12802
- const [fetchError, setFetchError] = (0, import_react22.useState)(null);
12803
- const [isModalOpen, setIsModalOpen] = (0, import_react22.useState)(false);
12804
- const [isDropdownOpen, setIsDropdownOpen] = (0, import_react22.useState)(false);
12805
- const [isDeleting, setIsDeleting] = (0, import_react22.useState)(false);
12806
- const [feedback, setFeedback] = (0, import_react22.useState)(null);
12807
- const loadTemplates = (0, import_react22.useCallback)(async () => {
12972
+ const [templates, setTemplates] = (0, import_react23.useState)([]);
12973
+ const [selectedTemplateId, setSelectedTemplateId] = (0, import_react23.useState)(null);
12974
+ const [isLoading, setIsLoading] = (0, import_react23.useState)(true);
12975
+ const [fetchError, setFetchError] = (0, import_react23.useState)(null);
12976
+ const [isModalOpen, setIsModalOpen] = (0, import_react23.useState)(false);
12977
+ const [isDropdownOpen, setIsDropdownOpen] = (0, import_react23.useState)(false);
12978
+ const [isDeleting, setIsDeleting] = (0, import_react23.useState)(false);
12979
+ const [feedback, setFeedback] = (0, import_react23.useState)(null);
12980
+ const loadTemplates = (0, import_react23.useCallback)(async () => {
12808
12981
  var _a2, _b2;
12809
12982
  if (!executeAction) {
12810
12983
  setIsLoading(false);
@@ -12856,13 +13029,13 @@ function useWhatsAppState(props) {
12856
13029
  setIsLoading(false);
12857
13030
  }
12858
13031
  }, [executeAction, orgId]);
12859
- (0, import_react22.useEffect)(() => {
13032
+ (0, import_react23.useEffect)(() => {
12860
13033
  loadTemplates();
12861
13034
  }, [loadTemplates]);
12862
- const selectedTemplate = (0, import_react22.useMemo)(() => {
13035
+ const selectedTemplate = (0, import_react23.useMemo)(() => {
12863
13036
  return templates.find((t) => t.id === selectedTemplateId) || null;
12864
13037
  }, [templates, selectedTemplateId]);
12865
- const templateBodyText = (0, import_react22.useMemo)(() => {
13038
+ const templateBodyText = (0, import_react23.useMemo)(() => {
12866
13039
  if (!(selectedTemplate == null ? void 0 : selectedTemplate.components)) return "";
12867
13040
  const bodyComp = selectedTemplate.components.find(
12868
13041
  (c) => {
@@ -12872,7 +13045,7 @@ function useWhatsAppState(props) {
12872
13045
  );
12873
13046
  return (bodyComp == null ? void 0 : bodyComp.text) || "";
12874
13047
  }, [selectedTemplate]);
12875
- const templateHeaderComp = (0, import_react22.useMemo)(() => {
13048
+ const templateHeaderComp = (0, import_react23.useMemo)(() => {
12876
13049
  if (!(selectedTemplate == null ? void 0 : selectedTemplate.components)) return null;
12877
13050
  return selectedTemplate.components.find(
12878
13051
  (c) => {
@@ -12881,8 +13054,8 @@ function useWhatsAppState(props) {
12881
13054
  }
12882
13055
  ) || null;
12883
13056
  }, [selectedTemplate]);
12884
- const [headerMediaUrl, setHeaderMediaUrl] = (0, import_react22.useState)("");
12885
- (0, import_react22.useEffect)(() => {
13057
+ const [headerMediaUrl, setHeaderMediaUrl] = (0, import_react23.useState)("");
13058
+ (0, import_react23.useEffect)(() => {
12886
13059
  if (!templateHeaderComp) {
12887
13060
  setHeaderMediaUrl("");
12888
13061
  return;
@@ -12899,7 +13072,7 @@ function useWhatsAppState(props) {
12899
13072
  setHeaderMediaUrl("");
12900
13073
  }
12901
13074
  }, [templateHeaderComp, selectedTemplate == null ? void 0 : selectedTemplate.name]);
12902
- const handleHeaderMediaUrlChange = (0, import_react22.useCallback)(
13075
+ const handleHeaderMediaUrlChange = (0, import_react23.useCallback)(
12903
13076
  (newUrl) => {
12904
13077
  setHeaderMediaUrl(newUrl);
12905
13078
  if ((selectedTemplate == null ? void 0 : selectedTemplate.name) && typeof window !== "undefined") {
@@ -12918,7 +13091,7 @@ function useWhatsAppState(props) {
12918
13091
  },
12919
13092
  [selectedTemplate == null ? void 0 : selectedTemplate.name]
12920
13093
  );
12921
- const handleResetHeaderMediaUrl = (0, import_react22.useCallback)(() => {
13094
+ const handleResetHeaderMediaUrl = (0, import_react23.useCallback)(() => {
12922
13095
  if ((selectedTemplate == null ? void 0 : selectedTemplate.name) && typeof window !== "undefined") {
12923
13096
  try {
12924
13097
  localStorage.removeItem(`whatsapp_template_media_${selectedTemplate.name}`);
@@ -12932,8 +13105,8 @@ function useWhatsAppState(props) {
12932
13105
  );
12933
13106
  setHeaderMediaUrl(defaultUrl || "");
12934
13107
  }, [templateHeaderComp, selectedTemplate == null ? void 0 : selectedTemplate.name]);
12935
- const [isUploadingMedia, setIsUploadingMedia] = (0, import_react22.useState)(false);
12936
- const handleFileUpload = (0, import_react22.useCallback)(
13108
+ const [isUploadingMedia, setIsUploadingMedia] = (0, import_react23.useState)(false);
13109
+ const handleFileUpload = (0, import_react23.useCallback)(
12937
13110
  async (file, templateName) => {
12938
13111
  const tplName = templateName || (selectedTemplate == null ? void 0 : selectedTemplate.name) || "";
12939
13112
  if (!file) return;
@@ -12974,14 +13147,14 @@ function useWhatsAppState(props) {
12974
13147
  },
12975
13148
  [selectedTemplate == null ? void 0 : selectedTemplate.name]
12976
13149
  );
12977
- const templateVariables = (0, import_react22.useMemo)(() => {
13150
+ const templateVariables = (0, import_react23.useMemo)(() => {
12978
13151
  return extractTemplateVariables(selectedTemplate);
12979
13152
  }, [selectedTemplate]);
12980
- const [variableMapping, setVariableMapping] = (0, import_react22.useState)({});
12981
- (0, import_react22.useEffect)(() => {
13153
+ const [variableMapping, setVariableMapping] = (0, import_react23.useState)({});
13154
+ (0, import_react23.useEffect)(() => {
12982
13155
  setVariableMapping({});
12983
13156
  }, [selectedTemplateId]);
12984
- const textableColumnOptions = (0, import_react22.useMemo)(() => {
13157
+ const textableColumnOptions = (0, import_react23.useMemo)(() => {
12985
13158
  return getTextableColumnOptions({
12986
13159
  tableColumns: tableColumns2,
12987
13160
  selectedPhoneOption,
@@ -13007,7 +13180,7 @@ function useWhatsAppState(props) {
13007
13180
  });
13008
13181
  });
13009
13182
  };
13010
- const existingTemplateNames = (0, import_react22.useMemo)(() => {
13183
+ const existingTemplateNames = (0, import_react23.useMemo)(() => {
13011
13184
  return templates.map((t) => t.name);
13012
13185
  }, [templates]);
13013
13186
  const handleDeleteTemplate = async () => {
@@ -13054,14 +13227,14 @@ function useWhatsAppState(props) {
13054
13227
  postSendActionColumn,
13055
13228
  postSendActionValue
13056
13229
  );
13057
- const isStaticVariableMissing = (0, import_react22.useMemo)(() => {
13230
+ const isStaticVariableMissing = (0, import_react23.useMemo)(() => {
13058
13231
  return isStaticVariableIncomplete(templateVariables, variableMapping);
13059
13232
  }, [templateVariables, variableMapping]);
13060
- const currentRecords = (0, import_react22.useMemo)(() => {
13233
+ const currentRecords = (0, import_react23.useMemo)(() => {
13061
13234
  var _a2;
13062
13235
  return rawRecords && rawRecords.length > 0 ? rawRecords : Array.isArray(props.data) ? props.data : Array.isArray((_a2 = props.data) == null ? void 0 : _a2.records) ? props.data.records : [];
13063
13236
  }, [rawRecords, props.data]);
13064
- const preparedRecipients = (0, import_react22.useMemo)(() => {
13237
+ const preparedRecipients = (0, import_react23.useMemo)(() => {
13065
13238
  return prepareRecipients({
13066
13239
  selectedIds: selectedRowIds,
13067
13240
  records: currentRecords,
@@ -13081,7 +13254,7 @@ function useWhatsAppState(props) {
13081
13254
  selectedSubtableFilterCol
13082
13255
  ]);
13083
13256
  const finalRecipientCount = preparedRecipients.length;
13084
- const validMainRowsCount = (0, import_react22.useMemo)(() => {
13257
+ const validMainRowsCount = (0, import_react23.useMemo)(() => {
13085
13258
  const rowIdSet = new Set(
13086
13259
  preparedRecipients.map((r) => r.mainRowId).filter(Boolean)
13087
13260
  );
@@ -13190,7 +13363,7 @@ function useWhatsAppState(props) {
13190
13363
  setIsSendingTest(false);
13191
13364
  }
13192
13365
  };
13193
- const handleSendMessages = (0, import_react22.useCallback)(async () => {
13366
+ const handleSendMessages = (0, import_react23.useCallback)(async () => {
13194
13367
  var _a2, _b2;
13195
13368
  if (isSendDisabled || isSendingBroadcast) return;
13196
13369
  const recipients = preparedRecipients;
@@ -13496,7 +13669,7 @@ function useWhatsAppState(props) {
13496
13669
  }
13497
13670
 
13498
13671
  // src/components/WhatsAppComponent/ui/TemplateSelectionBlock.tsx
13499
- var import_react23 = require("react");
13672
+ var import_react24 = require("react");
13500
13673
  var import_lucide_react12 = require("lucide-react");
13501
13674
  var import_jsx_runtime21 = require("react/jsx-runtime");
13502
13675
  function TemplateSelectionBlock({
@@ -13524,7 +13697,7 @@ function TemplateSelectionBlock({
13524
13697
  isUploadingMedia = false,
13525
13698
  handleFileUpload
13526
13699
  }) {
13527
- const fileInputRef = (0, import_react23.useRef)(null);
13700
+ const fileInputRef = (0, import_react24.useRef)(null);
13528
13701
  return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "col-span-12 lg:col-span-5 min-h-[26rem] h-full flex flex-col bg-slate-50/70 border border-slate-200 rounded-2xl p-3.5 relative", children: [
13529
13702
  /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-1.5 shrink-0", children: [
13530
13703
  /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center justify-between pb-1.5 border-b border-slate-200/70 shrink-0 gap-2", children: [
@@ -14476,19 +14649,19 @@ function SettingsAndActionsBlock({
14476
14649
  }
14477
14650
 
14478
14651
  // src/components/WhatsAppComponent/inbox/useInboxState.ts
14479
- var import_react24 = require("react");
14652
+ var import_react25 = require("react");
14480
14653
  function useInboxState(orgId, actions) {
14481
- const [conversations, setConversations] = (0, import_react24.useState)([]);
14482
- const [activeConversationId, setActiveConversationId] = (0, import_react24.useState)(null);
14483
- const [messages, setMessages] = (0, import_react24.useState)([]);
14484
- const [isLoading, setIsLoading] = (0, import_react24.useState)(false);
14485
- const [isSending, setIsSending] = (0, import_react24.useState)(false);
14486
- const [error, setError] = (0, import_react24.useState)(null);
14487
- const actionsRef = (0, import_react24.useRef)(actions);
14488
- (0, import_react24.useEffect)(() => {
14654
+ const [conversations, setConversations] = (0, import_react25.useState)([]);
14655
+ const [activeConversationId, setActiveConversationId] = (0, import_react25.useState)(null);
14656
+ const [messages, setMessages] = (0, import_react25.useState)([]);
14657
+ const [isLoading, setIsLoading] = (0, import_react25.useState)(false);
14658
+ const [isSending, setIsSending] = (0, import_react25.useState)(false);
14659
+ const [error, setError] = (0, import_react25.useState)(null);
14660
+ const actionsRef = (0, import_react25.useRef)(actions);
14661
+ (0, import_react25.useEffect)(() => {
14489
14662
  actionsRef.current = actions;
14490
14663
  });
14491
- const fetchConversations = (0, import_react24.useCallback)(async () => {
14664
+ const fetchConversations = (0, import_react25.useCallback)(async () => {
14492
14665
  if (!orgId) return;
14493
14666
  const res = await actionsRef.current.getConversations(orgId);
14494
14667
  if (res.success && res.data) {
@@ -14497,7 +14670,7 @@ function useInboxState(orgId, actions) {
14497
14670
  setError(res.error);
14498
14671
  }
14499
14672
  }, [orgId]);
14500
- const fetchMessages = (0, import_react24.useCallback)(async (conversationId, silent = false) => {
14673
+ const fetchMessages = (0, import_react25.useCallback)(async (conversationId, silent = false) => {
14501
14674
  if (!silent) setIsLoading(true);
14502
14675
  const res = await actionsRef.current.getMessages(conversationId);
14503
14676
  if (res.success && res.data) {
@@ -14510,7 +14683,7 @@ function useInboxState(orgId, actions) {
14510
14683
  }
14511
14684
  if (!silent) setIsLoading(false);
14512
14685
  }, []);
14513
- (0, import_react24.useEffect)(() => {
14686
+ (0, import_react25.useEffect)(() => {
14514
14687
  fetchConversations();
14515
14688
  const interval = setInterval(() => {
14516
14689
  fetchConversations();
@@ -14609,17 +14782,17 @@ function ConversationList({ conversations, activeId, onSelect }) {
14609
14782
  }
14610
14783
 
14611
14784
  // src/components/WhatsAppComponent/inbox/ChatWindow.tsx
14612
- var import_react25 = require("react");
14785
+ var import_react26 = require("react");
14613
14786
  var import_lucide_react16 = require("lucide-react");
14614
14787
  var import_jsx_runtime25 = require("react/jsx-runtime");
14615
14788
  function ChatWindow({ activeConversation, messages, isLoading, isSending, onSendMessage }) {
14616
- const [inputText, setInputText] = (0, import_react25.useState)("");
14617
- const messagesTopRef = (0, import_react25.useRef)(null);
14789
+ const [inputText, setInputText] = (0, import_react26.useState)("");
14790
+ const messagesTopRef = (0, import_react26.useRef)(null);
14618
14791
  const scrollToTop = () => {
14619
14792
  var _a;
14620
14793
  (_a = messagesTopRef.current) == null ? void 0 : _a.scrollIntoView({ behavior: "smooth" });
14621
14794
  };
14622
- (0, import_react25.useEffect)(() => {
14795
+ (0, import_react26.useEffect)(() => {
14623
14796
  scrollToTop();
14624
14797
  }, [messages.length, activeConversation == null ? void 0 : activeConversation.id]);
14625
14798
  const handleSend = (e) => {
@@ -14735,7 +14908,7 @@ function WhatsAppComponent(props) {
14735
14908
  var _a;
14736
14909
  const { className = "", settings, orgId, componentId, executeAction } = props;
14737
14910
  const state = useWhatsAppState(props);
14738
- const [activeTab, setActiveTab] = import_react26.default.useState("broadcast");
14911
+ const [activeTab, setActiveTab] = import_react27.default.useState("broadcast");
14739
14912
  return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
14740
14913
  "div",
14741
14914
  {
@@ -15140,18 +15313,18 @@ function WhatsAppComponent(props) {
15140
15313
  }
15141
15314
 
15142
15315
  // src/components/FormBlock/FormBlock.tsx
15143
- var import_react27 = require("react");
15316
+ var import_react28 = require("react");
15144
15317
  var import_lucide_react18 = require("lucide-react");
15145
15318
  var import_jsx_runtime28 = require("react/jsx-runtime");
15146
15319
  function FormBlock({ settings: schema, executeAction, componentId, className = "", onSuccess }) {
15147
15320
  const { showError, addToast } = useToast();
15148
- const [formData, setFormData] = (0, import_react27.useState)({});
15149
- const [isSubmitting, setIsSubmitting] = (0, import_react27.useState)(false);
15150
- const [isSubmitted, setIsSubmitted] = (0, import_react27.useState)(false);
15151
- const [columns, setColumns] = (0, import_react27.useState)((schema == null ? void 0 : schema.columns) || []);
15152
- const [isLoadingSchema, setIsLoadingSchema] = (0, import_react27.useState)(false);
15321
+ const [formData, setFormData] = (0, import_react28.useState)({});
15322
+ const [isSubmitting, setIsSubmitting] = (0, import_react28.useState)(false);
15323
+ const [isSubmitted, setIsSubmitted] = (0, import_react28.useState)(false);
15324
+ const [columns, setColumns] = (0, import_react28.useState)((schema == null ? void 0 : schema.columns) || []);
15325
+ const [isLoadingSchema, setIsLoadingSchema] = (0, import_react28.useState)(false);
15153
15326
  const targetTableId = (schema == null ? void 0 : schema.tableMetaId) || (schema == null ? void 0 : schema.tableId) || (schema == null ? void 0 : schema.id);
15154
- (0, import_react27.useEffect)(() => {
15327
+ (0, import_react28.useEffect)(() => {
15155
15328
  let isMounted = true;
15156
15329
  if ((!(schema == null ? void 0 : schema.columns) || schema.columns.length === 0) && targetTableId && executeAction) {
15157
15330
  setIsLoadingSchema(true);
@@ -15317,6 +15490,7 @@ var UNIVERSE_COMPONENTS = {
15317
15490
  COLUMN_TYPE_LABELS,
15318
15491
  ColumnHeaderTitle,
15319
15492
  CreateTemplateModal,
15493
+ DEFAULT_FILTER_COLUMN_TYPES,
15320
15494
  DEFAULT_PLACEMENT_STATUS_COLORS,
15321
15495
  DatePickerCell,
15322
15496
  DynamicFiltersBlock,
@@ -15331,6 +15505,7 @@ var UNIVERSE_COMPONENTS = {
15331
15505
  RELATION_BUTTON_COUNTS_ACTION,
15332
15506
  RELATION_LABEL_KEY,
15333
15507
  RELATION_SEP,
15508
+ RESOLVE_DEFAULT_FILTERS_ACTION,
15334
15509
  RelationFilterPopover,
15335
15510
  RelationPickerCell,
15336
15511
  SettingsAndActionsBlock,
@@ -15351,6 +15526,7 @@ var UNIVERSE_COMPONENTS = {
15351
15526
  buildRelationRef,
15352
15527
  calculateMinColumnWidth,
15353
15528
  checkElementTruncation,
15529
+ cleanPlacementFilterDefaults,
15354
15530
  cn,
15355
15531
  columnRefLabel,
15356
15532
  computeFormulaValue,
@@ -15366,6 +15542,8 @@ var UNIVERSE_COMPONENTS = {
15366
15542
  formatTimeInput,
15367
15543
  formatTimeIso,
15368
15544
  generateWhatsAppLink,
15545
+ getColumnDefaultFilter,
15546
+ getDefaultFilterColumns,
15369
15547
  getDeterministicPastelBadge,
15370
15548
  getEligibleCopyTargets,
15371
15549
  getNextVariableIndex,
@@ -15401,11 +15579,14 @@ var UNIVERSE_COMPONENTS = {
15401
15579
  renameCopyTarget,
15402
15580
  resolveDefaultStatusId,
15403
15581
  resolveProtocol,
15582
+ sanitizeDefaultFilter,
15404
15583
  sanitizePhoneNumber,
15405
15584
  sanitizeTemplateNameInput,
15406
15585
  seamlessVariableEngine,
15407
15586
  splitHeaderTitle,
15587
+ supportsDefaultFilter,
15408
15588
  tableColumns,
15589
+ toColumnFilterValue,
15409
15590
  useColumnReorder,
15410
15591
  useColumnResize,
15411
15592
  useSmartTooltip,
@@ -15417,5 +15598,6 @@ var UNIVERSE_COMPONENTS = {
15417
15598
  validateTemplateBody,
15418
15599
  validateTemplateButtons,
15419
15600
  validateWhatsAppTemplate,
15420
- validateWordToVariableRatio
15601
+ validateWordToVariableRatio,
15602
+ withDefaultFilter
15421
15603
  });