@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.mjs CHANGED
@@ -1064,8 +1064,57 @@ function getRelationButtonColumns(columns) {
1064
1064
  return (columns || []).filter((c) => isRelationButtonsColumn(c) && c.name !== "_id");
1065
1065
  }
1066
1066
 
1067
+ // ../shared/src/defaultFilters.ts
1068
+ var DEFAULT_FILTER_COLUMN_TYPES = ["STRING", "RELATION"];
1069
+ var RESOLVE_DEFAULT_FILTERS_ACTION = "RESOLVE_DEFAULT_FILTERS";
1070
+ var isString = (v) => typeof v === "string";
1071
+ function supportsDefaultFilter(type) {
1072
+ if (!type) return false;
1073
+ return DEFAULT_FILTER_COLUMN_TYPES.includes(String(type).toUpperCase());
1074
+ }
1075
+ function sanitizeDefaultFilter(raw) {
1076
+ if (!raw || typeof raw !== "object") return null;
1077
+ const value = raw.value;
1078
+ if (!isString(value) || value.trim() === "") return null;
1079
+ const label = raw.label;
1080
+ return __spreadValues({ value: value.trim() }, isString(label) && label.trim() ? { label: label.trim() } : {});
1081
+ }
1082
+ function getColumnDefaultFilter(col) {
1083
+ var _a;
1084
+ if (!col || !supportsDefaultFilter(col.type)) return null;
1085
+ return sanitizeDefaultFilter((_a = col.config) == null ? void 0 : _a.defaultFilter);
1086
+ }
1087
+ function getDefaultFilterColumns(columns) {
1088
+ const out = [];
1089
+ for (const c of columns || []) {
1090
+ if (!(c == null ? void 0 : c.name) || c.name === "_id") continue;
1091
+ const setting = getColumnDefaultFilter(c);
1092
+ if (setting) out.push({ name: c.name, type: String(c.type).toUpperCase(), setting });
1093
+ }
1094
+ return out;
1095
+ }
1096
+ function toColumnFilterValue(type, value) {
1097
+ return String(type).toUpperCase() === "RELATION" ? [value] : value;
1098
+ }
1099
+ function withDefaultFilter(config, type, setting) {
1100
+ const next = __spreadValues({}, config || {});
1101
+ const clean = supportsDefaultFilter(type) ? sanitizeDefaultFilter(setting) : null;
1102
+ if (clean) next.defaultFilter = clean;
1103
+ else delete next.defaultFilter;
1104
+ return next;
1105
+ }
1106
+ function cleanPlacementFilterDefaults(defaults, allowedKeys) {
1107
+ if (!defaults || typeof defaults !== "object") return void 0;
1108
+ const out = {};
1109
+ for (const key of allowedKeys) {
1110
+ const v = defaults[key];
1111
+ if (key && isString(v) && v.trim() !== "") out[key] = v;
1112
+ }
1113
+ return Object.keys(out).length > 0 ? out : void 0;
1114
+ }
1115
+
1067
1116
  // src/components/TableBlock/TableBlockClient.tsx
1068
- import React13, { useState as useState14, useMemo as useMemo7, useEffect as useEffect12, useCallback as useCallback12, useRef as useRef12 } from "react";
1117
+ import React13, { useState as useState15, useMemo as useMemo7, useEffect as useEffect13, useCallback as useCallback12, useRef as useRef13 } from "react";
1069
1118
 
1070
1119
  // src/hooks/useToast.ts
1071
1120
  import { useContext as useContext2 } from "react";
@@ -3220,6 +3269,18 @@ function RelationPickerCell({
3220
3269
  _displayLabel: resolveRelationLabel(opt, column) || opt.label || "",
3221
3270
  data: opt.data
3222
3271
  })).filter((opt) => opt._displayLabel && opt._displayLabel.trim() !== "" && !isRawObjectId(opt._displayLabel));
3272
+ if (mapped.some((o) => {
3273
+ var _a2;
3274
+ return typeof ((_a2 = o.data) == null ? void 0 : _a2._order) === "number";
3275
+ })) {
3276
+ mapped.sort((a, b) => {
3277
+ var _a2, _b2;
3278
+ const oa = typeof ((_a2 = a.data) == null ? void 0 : _a2._order) === "number" ? a.data._order : Number.POSITIVE_INFINITY;
3279
+ const ob = typeof ((_b2 = b.data) == null ? void 0 : _b2._order) === "number" ? b.data._order : Number.POSITIVE_INFINITY;
3280
+ return oa === ob ? 0 : oa - ob;
3281
+ });
3282
+ return mapped;
3283
+ }
3223
3284
  const orderField = mapped.some((o) => {
3224
3285
  var _a2;
3225
3286
  return ((_a2 = o.data) == null ? void 0 : _a2["\u05DE\u05E1\u05E4\u05E8 \u05E9\u05E0\u05D4"]) !== void 0;
@@ -6106,6 +6167,49 @@ function RelationButtonsBar({
6106
6167
  );
6107
6168
  }
6108
6169
 
6170
+ // src/components/TableBlock/useDefaultColumnFilters.ts
6171
+ import { useEffect as useEffect12, useRef as useRef12, useState as useState14 } from "react";
6172
+ var RESOLVE_TIMEOUT_MS = 8e3;
6173
+ function unwrap2(res) {
6174
+ const body = (res == null ? void 0 : res.data) && typeof res.data === "object" && !Array.isArray(res.data) ? res.data : res;
6175
+ const filters = body == null ? void 0 : body.filters;
6176
+ return filters && typeof filters === "object" ? filters : {};
6177
+ }
6178
+ function useDefaultColumnFilters({ columns, tableId, executeAction, onResolved }) {
6179
+ const hasDefaults = getDefaultFilterColumns(columns).length > 0;
6180
+ const [ready, setReady] = useState14(() => !hasDefaults);
6181
+ const doneRef = useRef12(false);
6182
+ const onResolvedRef = useRef12(onResolved);
6183
+ onResolvedRef.current = onResolved;
6184
+ const actionRef = useRef12(executeAction);
6185
+ actionRef.current = executeAction;
6186
+ useEffect12(() => {
6187
+ if (doneRef.current || !hasDefaults) return;
6188
+ doneRef.current = true;
6189
+ const exec = actionRef.current;
6190
+ if (!tableId || !exec) {
6191
+ setReady(true);
6192
+ return;
6193
+ }
6194
+ let settled = false;
6195
+ const finish = (filters) => {
6196
+ if (settled) return;
6197
+ settled = true;
6198
+ if (filters && Object.keys(filters).length > 0) onResolvedRef.current(filters);
6199
+ setReady(true);
6200
+ };
6201
+ const timer = setTimeout(() => finish(), RESOLVE_TIMEOUT_MS);
6202
+ Promise.resolve(exec(RESOLVE_DEFAULT_FILTERS_ACTION, { tableId })).then(
6203
+ (res) => finish(unwrap2(res)),
6204
+ (err) => {
6205
+ console.warn("[TableBlock] Failed to resolve default filters:", err);
6206
+ finish();
6207
+ }
6208
+ ).finally(() => clearTimeout(timer));
6209
+ }, [hasDefaults, tableId]);
6210
+ return ready;
6211
+ }
6212
+
6109
6213
  // src/components/TableBlock/TableBlockClient.tsx
6110
6214
  import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
6111
6215
  function TableBlockClient({
@@ -6134,7 +6238,7 @@ function TableBlockClient({
6134
6238
  hideRelationButtons
6135
6239
  }) {
6136
6240
  const { showError, addToast } = useToast();
6137
- const [isExporting, setIsExporting] = useState14(false);
6241
+ const [isExporting, setIsExporting] = useState15(false);
6138
6242
  const resolvedRole = role ? getRolePermissions(role) : void 0;
6139
6243
  const effectivePermissions = permissions || (resolvedRole == null ? void 0 : resolvedRole.permissions) || {
6140
6244
  canCreate: !readOnly,
@@ -6153,18 +6257,18 @@ function TableBlockClient({
6153
6257
  return calculateMinColumnWidth(colName, false, col == null ? void 0 : col.type);
6154
6258
  }
6155
6259
  });
6156
- const executeActionRef = useRef12(executeAction);
6157
- useEffect12(() => {
6260
+ const executeActionRef = useRef13(executeAction);
6261
+ useEffect13(() => {
6158
6262
  executeActionRef.current = executeAction;
6159
6263
  }, [executeAction]);
6160
- const [isMounted, setIsMounted] = useState14(false);
6161
- const [isInitialLoading, setIsInitialLoading] = useState14(true);
6162
- const [page, setPage] = useState14(1);
6163
- const [limit, setLimit] = useState14(50);
6164
- const [totalRecords, setTotalRecords] = useState14(0);
6165
- const [totalPages, setTotalPages] = useState14(1);
6166
- const [showSummary, setShowSummary] = useState14(false);
6167
- useEffect12(() => {
6264
+ const [isMounted, setIsMounted] = useState15(false);
6265
+ const [isInitialLoading, setIsInitialLoading] = useState15(true);
6266
+ const [page, setPage] = useState15(1);
6267
+ const [limit, setLimit] = useState15(50);
6268
+ const [totalRecords, setTotalRecords] = useState15(0);
6269
+ const [totalPages, setTotalPages] = useState15(1);
6270
+ const [showSummary, setShowSummary] = useState15(false);
6271
+ useEffect13(() => {
6168
6272
  if (typeof window !== "undefined") {
6169
6273
  const savedSummary = localStorage.getItem(`table_summary_${tableKey}`);
6170
6274
  if (savedSummary !== null) {
@@ -6233,15 +6337,15 @@ function TableBlockClient({
6233
6337
  return ((_a = a.order) != null ? _a : 0) - ((_b = b.order) != null ? _b : 0);
6234
6338
  });
6235
6339
  }, []);
6236
- const [localColumns, setLocalColumns] = useState14(() => (schema == null ? void 0 : schema.columns) || []);
6237
- useEffect12(() => {
6340
+ const [localColumns, setLocalColumns] = useState15(() => (schema == null ? void 0 : schema.columns) || []);
6341
+ useEffect13(() => {
6238
6342
  if ((schema == null ? void 0 : schema.columns) && schema.columns.length > 0) {
6239
6343
  setLocalColumns((prev) => mergeColumnDefs(prev, schema.columns));
6240
6344
  }
6241
6345
  }, [schema == null ? void 0 : schema.columns, mergeColumnDefs]);
6242
- const [dirty, setDirty] = useState14({ added: [], modified: {}, deleted: [] });
6243
- const dirtyRef = useRef12(dirty);
6244
- useEffect12(() => {
6346
+ const [dirty, setDirty] = useState15({ added: [], modified: {}, deleted: [] });
6347
+ const dirtyRef = useRef13(dirty);
6348
+ useEffect13(() => {
6245
6349
  dirtyRef.current = dirty;
6246
6350
  }, [dirty]);
6247
6351
  const mergeWithDirty = useCallback12((baseRecords) => {
@@ -6257,8 +6361,8 @@ function TableBlockClient({
6257
6361
  const uniqueAdded = added.filter((r) => !baseIds.has(r.id));
6258
6362
  return [...uniqueAdded, ...modifiedRecords];
6259
6363
  }, []);
6260
- const [data, setData] = useState14(() => normalizeRecords(initialRecords));
6261
- const [serverRecords, setServerRecords] = useState14(() => normalizeRecords(initialRecords));
6364
+ const [data, setData] = useState15(() => normalizeRecords(initialRecords));
6365
+ const [serverRecords, setServerRecords] = useState15(() => normalizeRecords(initialRecords));
6262
6366
  const filteredData = data;
6263
6367
  const isEqualValues = (a, b) => {
6264
6368
  if (a === b) return true;
@@ -6270,29 +6374,29 @@ function TableBlockClient({
6270
6374
  }
6271
6375
  return false;
6272
6376
  };
6273
- const [baseRecordsMap, setBaseRecordsMap] = useState14(() => {
6377
+ const [baseRecordsMap, setBaseRecordsMap] = useState15(() => {
6274
6378
  const map = /* @__PURE__ */ new Map();
6275
6379
  (normalizeRecords(initialRecords) || []).forEach((r) => map.set(r.id, __spreadValues({}, r.data)));
6276
6380
  return map;
6277
6381
  });
6278
- useEffect12(() => {
6382
+ useEffect13(() => {
6279
6383
  if (initialRecords && initialRecords.length > 0) {
6280
6384
  const map = /* @__PURE__ */ new Map();
6281
6385
  (normalizeRecords(initialRecords) || []).forEach((r) => map.set(r.id, __spreadValues({}, r.data)));
6282
6386
  setBaseRecordsMap(map);
6283
6387
  }
6284
6388
  }, [initialRecords]);
6285
- const [searchQuery, setSearchQuery] = useState14("");
6286
- const [columnFilters, setColumnFilters] = useState14({});
6287
- const [activeSearchCol, setActiveSearchCol] = useState14(null);
6288
- const activeSearchRef = useRef12(null);
6289
- const [activeRelationCol, setActiveRelationCol] = useState14(null);
6290
- const [relationTriggerRect, setRelationTriggerRect] = useState14(null);
6291
- const filterButtonRefs = useRef12({});
6292
- const [relationOptions, setRelationOptions] = useState14({});
6293
- const [relationFilterOptions, setRelationFilterOptions] = useState14({});
6294
- const [loadingFilterCol, setLoadingFilterCol] = useState14(null);
6295
- const relationDictionaryRef = useRef12({});
6389
+ const [searchQuery, setSearchQuery] = useState15("");
6390
+ const [columnFilters, setColumnFilters] = useState15({});
6391
+ const [activeSearchCol, setActiveSearchCol] = useState15(null);
6392
+ const activeSearchRef = useRef13(null);
6393
+ const [activeRelationCol, setActiveRelationCol] = useState15(null);
6394
+ const [relationTriggerRect, setRelationTriggerRect] = useState15(null);
6395
+ const filterButtonRefs = useRef13({});
6396
+ const [relationOptions, setRelationOptions] = useState15({});
6397
+ const [relationFilterOptions, setRelationFilterOptions] = useState15({});
6398
+ const [loadingFilterCol, setLoadingFilterCol] = useState15(null);
6399
+ const relationDictionaryRef = useRef13({});
6296
6400
  const mergeRelationOptions = useCallback12((colName, newOptions) => {
6297
6401
  if (!Array.isArray(newOptions) || newOptions.length === 0) return;
6298
6402
  if (!relationDictionaryRef.current[colName]) {
@@ -6316,7 +6420,7 @@ function TableBlockClient({
6316
6420
  }));
6317
6421
  }
6318
6422
  }, []);
6319
- useEffect12(() => {
6423
+ useEffect13(() => {
6320
6424
  if (!activeSearchCol) return;
6321
6425
  const handleMouseDown = (e) => {
6322
6426
  if (activeSearchRef.current && !activeSearchRef.current.contains(e.target)) {
@@ -6337,23 +6441,29 @@ function TableBlockClient({
6337
6441
  });
6338
6442
  return JSON.stringify(active);
6339
6443
  }, [columnFilters]);
6340
- const [debouncedSearch, setDebouncedSearch] = useState14(searchQuery);
6341
- useEffect12(() => {
6444
+ const defaultFiltersReady = useDefaultColumnFilters({
6445
+ columns: localColumns,
6446
+ tableId: (schema == null ? void 0 : schema.tableMetaId) || (schema == null ? void 0 : schema.tableId) || (schema == null ? void 0 : schema.id),
6447
+ executeAction,
6448
+ onResolved: (resolved) => setColumnFilters((prev) => __spreadValues(__spreadValues({}, resolved), prev))
6449
+ });
6450
+ const [debouncedSearch, setDebouncedSearch] = useState15(searchQuery);
6451
+ useEffect13(() => {
6342
6452
  const timer = setTimeout(() => {
6343
6453
  setDebouncedSearch(searchQuery.trim());
6344
6454
  }, 300);
6345
6455
  return () => clearTimeout(timer);
6346
6456
  }, [searchQuery]);
6347
- const isSearchMountedRef = useRef12(false);
6348
- useEffect12(() => {
6457
+ const isSearchMountedRef = useRef13(false);
6458
+ useEffect13(() => {
6349
6459
  if (!isSearchMountedRef.current) {
6350
6460
  isSearchMountedRef.current = true;
6351
6461
  return;
6352
6462
  }
6353
6463
  setPage(1);
6354
6464
  }, [debouncedSearch]);
6355
- const [isFetching, setIsFetching] = useState14(false);
6356
- const fetchRequestIdRef = useRef12(0);
6465
+ const [isFetching, setIsFetching] = useState15(false);
6466
+ const fetchRequestIdRef = useRef13(0);
6357
6467
  const fetchTableData = useCallback12((targetPage, targetLimit, targetSearch, targetFiltersKey) => {
6358
6468
  const tableId = (schema == null ? void 0 : schema.tableMetaId) || (schema == null ? void 0 : schema.tableId) || (schema == null ? void 0 : schema.id);
6359
6469
  const action = executeActionRef.current;
@@ -6478,11 +6588,12 @@ function TableBlockClient({
6478
6588
  }
6479
6589
  });
6480
6590
  }, [schema == null ? void 0 : schema.tableMetaId, schema == null ? void 0 : schema.tableId, schema == null ? void 0 : schema.id, mergeColumnDefs, mergeWithDirty, mergeRelationOptions]);
6481
- useEffect12(() => {
6591
+ useEffect13(() => {
6592
+ if (!defaultFiltersReady) return;
6482
6593
  fetchTableData(page, limit, debouncedSearch, filtersKey);
6483
- }, [page, limit, debouncedSearch, filtersKey, fetchTableData]);
6484
- useEffect12(() => {
6485
- if (initialRecords) {
6594
+ }, [page, limit, debouncedSearch, filtersKey, fetchTableData, defaultFiltersReady]);
6595
+ useEffect13(() => {
6596
+ if (initialRecords && defaultFiltersReady) {
6486
6597
  const norm = normalizeRecords(initialRecords);
6487
6598
  setServerRecords(norm);
6488
6599
  const hasActiveFilters = Boolean(debouncedSearch) || Object.keys(columnFilters).length > 0;
@@ -6543,7 +6654,7 @@ function TableBlockClient({
6543
6654
  setData(mergeWithDirty(norm));
6544
6655
  }
6545
6656
  }
6546
- }, [initialRecords, mergeWithDirty, debouncedSearch, columnFilters, fetchTableData, page, limit, filtersKey]);
6657
+ }, [initialRecords, mergeWithDirty, debouncedSearch, columnFilters, fetchTableData, page, limit, filtersKey, defaultFiltersReady]);
6547
6658
  const refetchTableData = useCallback12(() => {
6548
6659
  return fetchTableData(page, limit, debouncedSearch, filtersKey);
6549
6660
  }, [page, limit, debouncedSearch, filtersKey, fetchTableData]);
@@ -6572,9 +6683,9 @@ function TableBlockClient({
6572
6683
  const handleNextPage = () => {
6573
6684
  setPage((prev) => Math.min(totalPages, prev + 1));
6574
6685
  };
6575
- const [selectedIds, setSelectedIds] = useState14(/* @__PURE__ */ new Set());
6576
- const isExternalSyncRef = useRef12(false);
6577
- useEffect12(() => {
6686
+ const [selectedIds, setSelectedIds] = useState15(/* @__PURE__ */ new Set());
6687
+ const isExternalSyncRef = useRef13(false);
6688
+ useEffect13(() => {
6578
6689
  if (selectedRowIds !== void 0) {
6579
6690
  const nextSet = new Set(selectedRowIds);
6580
6691
  setSelectedIds((prev) => {
@@ -6586,8 +6697,8 @@ function TableBlockClient({
6586
6697
  });
6587
6698
  }
6588
6699
  }, [selectedRowIds]);
6589
- const isFirstSelectionChangeRef = useRef12(true);
6590
- useEffect12(() => {
6700
+ const isFirstSelectionChangeRef = useRef13(true);
6701
+ useEffect13(() => {
6591
6702
  if (isFirstSelectionChangeRef.current) {
6592
6703
  isFirstSelectionChangeRef.current = false;
6593
6704
  if (selectedIds.size === 0) return;
@@ -6598,11 +6709,11 @@ function TableBlockClient({
6598
6709
  }
6599
6710
  onSelectionChange == null ? void 0 : onSelectionChange(Array.from(selectedIds));
6600
6711
  }, [selectedIds, onSelectionChange]);
6601
- const [pendingDeletions, setPendingDeletions] = useState14([]);
6602
- const [isSaving, setIsSaving] = useState14(false);
6712
+ const [pendingDeletions, setPendingDeletions] = useState15([]);
6713
+ const [isSaving, setIsSaving] = useState15(false);
6603
6714
  const isUpdatingActive = Boolean(isUpdating || isSaving);
6604
- const [isSaveSuccess, setIsSaveSuccess] = useState14(false);
6605
- const [expandedRowIds, setExpandedRowIds] = useState14(/* @__PURE__ */ new Set());
6715
+ const [isSaveSuccess, setIsSaveSuccess] = useState15(false);
6716
+ const [expandedRowIds, setExpandedRowIds] = useState15(/* @__PURE__ */ new Set());
6606
6717
  const schemaColsString = useMemo7(() => JSON.stringify(localColumns || []), [localColumns]);
6607
6718
  const refetchRelation = useCallback12(async (colName, params) => {
6608
6719
  var _a, _b, _c, _d, _e, _f, _g;
@@ -6679,8 +6790,8 @@ function TableBlockClient({
6679
6790
  setLoadingFilterCol(null);
6680
6791
  }
6681
6792
  }, [schemaColsString, schema == null ? void 0 : schema.tableMetaId, schema == null ? void 0 : schema.tableId, schema == null ? void 0 : schema.id, executeAction, mergeRelationOptions]);
6682
- const requestedRelationIdsRef = useRef12({});
6683
- useEffect12(() => {
6793
+ const requestedRelationIdsRef = useRef13({});
6794
+ useEffect13(() => {
6684
6795
  if (!executeAction || !data || data.length === 0) return;
6685
6796
  let parsedCols = [];
6686
6797
  try {
@@ -6733,7 +6844,7 @@ function TableBlockClient({
6733
6844
  }
6734
6845
  });
6735
6846
  }, [data, schemaColsString, executeAction, relationOptions, mergeRelationOptions]);
6736
- useEffect12(() => {
6847
+ useEffect13(() => {
6737
6848
  let parsedCols = [];
6738
6849
  try {
6739
6850
  parsedCols = JSON.parse(schemaColsString);
@@ -6769,9 +6880,9 @@ function TableBlockClient({
6769
6880
  const systemFields = ["_id", "createdAt", "updatedAt", "orgId", "tableId"];
6770
6881
  return normalizedColumns.filter((col) => !systemFields.includes(col.name));
6771
6882
  }, [normalizedColumns]);
6772
- const [isColumnsDropdownOpen, setIsColumnsDropdownOpen] = useState14(false);
6773
- const dropdownRef = useRef12(null);
6774
- useEffect12(() => {
6883
+ const [isColumnsDropdownOpen, setIsColumnsDropdownOpen] = useState15(false);
6884
+ const dropdownRef = useRef13(null);
6885
+ useEffect13(() => {
6775
6886
  const handleClickOutside = (e) => {
6776
6887
  if (dropdownRef.current && !dropdownRef.current.contains(e.target)) {
6777
6888
  setIsColumnsDropdownOpen(false);
@@ -8034,7 +8145,7 @@ function ExpandedSubTables({
8034
8145
  context
8035
8146
  }) {
8036
8147
  var _a;
8037
- const [activeTab, setActiveTab] = useState14((_a = subTableColumns[0]) == null ? void 0 : _a.name);
8148
+ const [activeTab, setActiveTab] = useState15((_a = subTableColumns[0]) == null ? void 0 : _a.name);
8038
8149
  if (subTableColumns.length === 0) return null;
8039
8150
  if (subTableColumns.length === 1) {
8040
8151
  const stCol = subTableColumns[0];
@@ -8263,7 +8374,7 @@ function TableBlock(props) {
8263
8374
  }
8264
8375
 
8265
8376
  // src/components/PlacementBlock/PlacementBlock.tsx
8266
- import { useState as useState15, useEffect as useEffect13, useRef as useRef13, useCallback as useCallback13, useMemo as useMemo9 } from "react";
8377
+ import { useState as useState16, useEffect as useEffect14, useRef as useRef14, useCallback as useCallback13, useMemo as useMemo9 } from "react";
8267
8378
  import { AgGridReact } from "ag-grid-react";
8268
8379
  import {
8269
8380
  ModuleRegistry,
@@ -8763,6 +8874,43 @@ var PlacementRelationButtons = ({
8763
8874
  );
8764
8875
  };
8765
8876
 
8877
+ // src/components/PlacementBlock/placementDefaultFilters.ts
8878
+ function getPlacementFilterRefs(config) {
8879
+ const defined = Array.isArray(config == null ? void 0 : config.filterFields) ? config.filterFields : [];
8880
+ const legacy = [config == null ? void 0 : config.targetFilterField1Id, config == null ? void 0 : config.targetFilterField2Id].filter(Boolean);
8881
+ return (defined.length > 0 ? defined : legacy).filter((r) => typeof r === "string" && r);
8882
+ }
8883
+ function resolveFilterColName(ref, targetColumns) {
8884
+ const direct = (targetColumns || []).find((c) => (c == null ? void 0 : c.id) === ref || (c == null ? void 0 : c.name) === ref);
8885
+ if (direct) return direct.name;
8886
+ const { relationColumn } = parseColumnRef(ref);
8887
+ if (relationColumn) {
8888
+ const rel = (targetColumns || []).find(
8889
+ (c) => (c == null ? void 0 : c.name) === relationColumn && String(c == null ? void 0 : c.type).toUpperCase() === "RELATION"
8890
+ );
8891
+ if (rel) return rel.name;
8892
+ }
8893
+ return ref;
8894
+ }
8895
+ function computePlacementDefaultFilters(args) {
8896
+ const { refs, defaults, targetColumns, rows, getText } = args;
8897
+ const applied = {};
8898
+ if (!defaults) return applied;
8899
+ for (const ref of refs) {
8900
+ const want = defaults[ref];
8901
+ if (typeof want !== "string" || want === "") continue;
8902
+ const colName = resolveFilterColName(ref, targetColumns);
8903
+ if (colName in applied) continue;
8904
+ const validRows = rows.filter(
8905
+ (r) => Object.entries(applied).every(([name, value]) => getText(name, r.data) === value)
8906
+ );
8907
+ if (validRows.some((r) => getText(colName, r.data) === want)) {
8908
+ applied[colName] = want;
8909
+ }
8910
+ }
8911
+ return applied;
8912
+ }
8913
+
8766
8914
  // src/components/PlacementBlock/PlacementBlock.tsx
8767
8915
  import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
8768
8916
  ModuleRegistry.registerModules([AllCommunityModule]);
@@ -8840,7 +8988,7 @@ var CheckHeader = (props) => /* @__PURE__ */ jsx19("div", { className: "flex ite
8840
8988
  }
8841
8989
  ) });
8842
8990
  var RelationFilterHeader = (props) => {
8843
- const btnRef = useRef13(null);
8991
+ const btnRef = useRef14(null);
8844
8992
  return /* @__PURE__ */ jsxs16("div", { className: "flex flex-col items-center justify-center w-full min-w-0 leading-tight select-none", title: props.displayName, children: [
8845
8993
  /* @__PURE__ */ jsx19(
8846
8994
  "button",
@@ -8888,30 +9036,30 @@ var PlacementBlock = (props) => {
8888
9036
  const targetTableId = config == null ? void 0 : config.targetTableId;
8889
9037
  const displayField = (config == null ? void 0 : config.sourceDisplayFieldId) || "name";
8890
9038
  const assignmentField = config == null ? void 0 : config.targetAssignmentFieldId;
8891
- const executeActionRef = useRef13(executeAction);
9039
+ const executeActionRef = useRef14(executeAction);
8892
9040
  executeActionRef.current = executeAction;
8893
- const legacyRef = useRef13({ fetchSourceData, fetchTargetData, updateAssignment });
9041
+ const legacyRef = useRef14({ fetchSourceData, fetchTargetData, updateAssignment });
8894
9042
  legacyRef.current = { fetchSourceData, fetchTargetData, updateAssignment };
8895
- const [sourceRows, setSourceRows] = useState15([]);
8896
- const [sourceColumns, setSourceColumns] = useState15([]);
8897
- const [sourceRelOptions, setSourceRelOptions] = useState15({});
8898
- const [sourceRelFilters, setSourceRelFilters] = useState15({});
8899
- const [targetRows, setTargetRows] = useState15([]);
8900
- const [targetColumns, setTargetColumns] = useState15([]);
8901
- const [targetRelOptions, setTargetRelOptions] = useState15({});
8902
- const [selectedTargetId, setSelectedTargetId] = useState15("");
8903
- const [candidateIds, setCandidateIds] = useState15([]);
8904
- const [checkedIds, setCheckedIds] = useState15([]);
8905
- const [isSaving, setIsSaving] = useState15(false);
8906
- const [sourceSearch, setSourceSearch] = useState15("");
8907
- const [candidateSearch, setCandidateSearch] = useState15("");
8908
- const [statusMap, setStatusMap] = useState15({});
8909
- const [isLoading, setIsLoading] = useState15(false);
8910
- const [loadError, setLoadError] = useState15(null);
8911
- const [saveError, setSaveError] = useState15(null);
8912
- const [colFilters, setColFilters] = useState15({ source: {}, cand: {} });
8913
- const [filterPopover, setFilterPopover] = useState15(null);
8914
- const [targetFilters, setTargetFilters] = useState15({});
9043
+ const [sourceRows, setSourceRows] = useState16([]);
9044
+ const [sourceColumns, setSourceColumns] = useState16([]);
9045
+ const [sourceRelOptions, setSourceRelOptions] = useState16({});
9046
+ const [sourceRelFilters, setSourceRelFilters] = useState16({});
9047
+ const [targetRows, setTargetRows] = useState16([]);
9048
+ const [targetColumns, setTargetColumns] = useState16([]);
9049
+ const [targetRelOptions, setTargetRelOptions] = useState16({});
9050
+ const [selectedTargetId, setSelectedTargetId] = useState16("");
9051
+ const [candidateIds, setCandidateIds] = useState16([]);
9052
+ const [checkedIds, setCheckedIds] = useState16([]);
9053
+ const [isSaving, setIsSaving] = useState16(false);
9054
+ const [sourceSearch, setSourceSearch] = useState16("");
9055
+ const [candidateSearch, setCandidateSearch] = useState16("");
9056
+ const [statusMap, setStatusMap] = useState16({});
9057
+ const [isLoading, setIsLoading] = useState16(false);
9058
+ const [loadError, setLoadError] = useState16(null);
9059
+ const [saveError, setSaveError] = useState16(null);
9060
+ const [colFilters, setColFilters] = useState16({ source: {}, cand: {} });
9061
+ const [filterPopover, setFilterPopover] = useState16(null);
9062
+ const [targetFilters, setTargetFilters] = useState16({});
8915
9063
  const loadTable = useCallback13(async (tableId, kind) => {
8916
9064
  const exec = executeActionRef.current;
8917
9065
  if (exec) {
@@ -8925,7 +9073,7 @@ var PlacementBlock = (props) => {
8925
9073
  }
8926
9074
  throw new Error("executeAction \u05DC\u05D0 \u05D4\u05D5\u05E2\u05D1\u05E8 \u05DC\u05E8\u05DB\u05D9\u05D1 \u05D4\u05E9\u05D9\u05D1\u05D5\u05E5");
8927
9075
  }, []);
8928
- useEffect13(() => {
9076
+ useEffect14(() => {
8929
9077
  if (!sourceTableId || !targetTableId) return;
8930
9078
  let cancelled = false;
8931
9079
  (async () => {
@@ -9061,7 +9209,7 @@ var PlacementBlock = (props) => {
9061
9209
  });
9062
9210
  });
9063
9211
  }, [targetRows, targetFilters, filterColumns, displayValue]);
9064
- useEffect13(() => {
9212
+ useEffect14(() => {
9065
9213
  if (filteredTargetRows.length > 0) {
9066
9214
  if (!selectedTargetId || !filteredTargetRows.some((r) => r.id === selectedTargetId)) {
9067
9215
  setSelectedTargetId(filteredTargetRows[0].id);
@@ -9070,6 +9218,22 @@ var PlacementBlock = (props) => {
9070
9218
  setSelectedTargetId("");
9071
9219
  }
9072
9220
  }, [filteredTargetRows, selectedTargetId]);
9221
+ const appliedDefaultsKeyRef = useRef14("");
9222
+ useEffect14(() => {
9223
+ const defaults = config == null ? void 0 : config.targetFilterDefaults;
9224
+ if (isLoading || !defaults || targetRows.length === 0 || targetColumns.length === 0) return;
9225
+ const key = `${targetTableId}|${JSON.stringify(defaults)}`;
9226
+ if (appliedDefaultsKeyRef.current === key) return;
9227
+ appliedDefaultsKeyRef.current = key;
9228
+ const resolved = computePlacementDefaultFilters({
9229
+ refs: getPlacementFilterRefs(config),
9230
+ defaults,
9231
+ targetColumns,
9232
+ rows: targetRows,
9233
+ getText: (colName, data) => displayValue(targetColumns.find((c) => c.name === colName) || { name: colName }, readColumnValue(data, colName))
9234
+ });
9235
+ if (Object.keys(resolved).length > 0) setTargetFilters((prev) => __spreadValues(__spreadValues({}, resolved), prev));
9236
+ }, [config, isLoading, targetRows, targetColumns, targetTableId, displayValue]);
9073
9237
  const assignmentColumn = useMemo9(() => targetColumns.find((c) => c.name === assignmentField), [targetColumns, assignmentField]);
9074
9238
  const isRelationField = ((_b = assignmentColumn == null ? void 0 : assignmentColumn.type) == null ? void 0 : _b.toUpperCase()) === "RELATION";
9075
9239
  const assignmentLabel = (assignmentColumn == null ? void 0 : assignmentColumn.label) || (assignmentColumn == null ? void 0 : assignmentColumn.name) || assignmentField || "";
@@ -9088,9 +9252,9 @@ var PlacementBlock = (props) => {
9088
9252
  }).filter((id) => !!id && sourceRows.some((s) => s.id === id));
9089
9253
  return Array.from(new Set(ids));
9090
9254
  }, [selectedTargetId, targetRows, sourceRows, assignmentField, isRelationField, nameOf]);
9091
- const assignedIdsRef = useRef13(assignedIds);
9255
+ const assignedIdsRef = useRef14(assignedIds);
9092
9256
  assignedIdsRef.current = assignedIds;
9093
- useEffect13(() => {
9257
+ useEffect14(() => {
9094
9258
  setCandidateIds(assignedIdsRef.current);
9095
9259
  setCheckedIds(assignedIdsRef.current);
9096
9260
  }, [selectedTargetId, sourceRows]);
@@ -9137,9 +9301,9 @@ var PlacementBlock = (props) => {
9137
9301
  setCheckedIds((prev) => prev.filter((x) => x !== id));
9138
9302
  setStatusMap((prev) => __spreadProps(__spreadValues({}, prev), { [id]: defaultStatusId }));
9139
9303
  }, [defaultStatusId]);
9140
- const moveToCandidatesRef = useRef13(moveToCandidates);
9304
+ const moveToCandidatesRef = useRef14(moveToCandidates);
9141
9305
  moveToCandidatesRef.current = moveToCandidates;
9142
- const moveToSourceRef = useRef13(moveToSource);
9306
+ const moveToSourceRef = useRef14(moveToSource);
9143
9307
  moveToSourceRef.current = moveToSource;
9144
9308
  const toggleChecked = useCallback13((id) => {
9145
9309
  setCheckedIds((prev) => prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]);
@@ -9264,11 +9428,11 @@ var PlacementBlock = (props) => {
9264
9428
  [filterPopover, sourceColumns]
9265
9429
  );
9266
9430
  const getRowId = useCallback13((p) => p.data.id, []);
9267
- const sourceContainerRef = useRef13(null);
9268
- const assignedContainerRef = useRef13(null);
9269
- const [sourceApi, setSourceApi] = useState15(null);
9270
- const [assignedApi, setAssignedApi] = useState15(null);
9271
- useEffect13(() => {
9431
+ const sourceContainerRef = useRef14(null);
9432
+ const assignedContainerRef = useRef14(null);
9433
+ const [sourceApi, setSourceApi] = useState16(null);
9434
+ const [assignedApi, setAssignedApi] = useState16(null);
9435
+ useEffect14(() => {
9272
9436
  if (!sourceApi || !assignedApi) return;
9273
9437
  const toAssigned = { getContainer: () => assignedContainerRef.current, onDragStop: (p) => {
9274
9438
  var _a2, _b2;
@@ -9471,7 +9635,7 @@ import React20 from "react";
9471
9635
  import { CheckCircle2 as CheckCircle24, AlertCircle as AlertCircle5, X as X12, Loader2 as Loader28, Phone as Phone4, Send as Send3, Image as ImageIcon3, FileText as FileText4, Video as Video3 } from "lucide-react";
9472
9636
 
9473
9637
  // src/components/WhatsAppComponent/CreateTemplateModal.tsx
9474
- import { useState as useState16, useEffect as useEffect14, useRef as useRef14, useMemo as useMemo10 } from "react";
9638
+ import { useState as useState17, useEffect as useEffect15, useRef as useRef15, useMemo as useMemo10 } from "react";
9475
9639
  import {
9476
9640
  X as X9,
9477
9641
  Plus,
@@ -9624,26 +9788,26 @@ function CreateTemplateModal({
9624
9788
  executeAction,
9625
9789
  orgId
9626
9790
  }) {
9627
- const [templateName, setTemplateName] = useState16("");
9628
- const [language, setLanguage] = useState16("he");
9629
- const [category, setCategory] = useState16("MARKETING");
9630
- const [bodyText, setBodyText] = useState16("");
9631
- const [variableSamples, setVariableSamples] = useState16({});
9632
- const [hasFileHeader, setHasFileHeader] = useState16(false);
9633
- const [selectedFile, setSelectedFile] = useState16(null);
9634
- const [fileBase64, setFileBase64] = useState16("");
9635
- const [buttons, setButtons] = useState16([]);
9636
- const [isAddButtonOpen, setIsAddButtonOpen] = useState16(false);
9637
- const addButtonDropdownRef = useRef14(null);
9638
- const [isSubmitting, setIsSubmitting] = useState16(false);
9639
- const [submittingStep, setSubmittingStep] = useState16("");
9640
- const [submitError, setSubmitError] = useState16(null);
9641
- const [fileError, setFileError] = useState16(null);
9642
- const textareaRef = useRef14(null);
9643
- const fileInputRef = useRef14(null);
9644
- const emojiPickerRef = useRef14(null);
9645
- const [isEmojiPickerOpen, setIsEmojiPickerOpen] = useState16(false);
9646
- useEffect14(() => {
9791
+ const [templateName, setTemplateName] = useState17("");
9792
+ const [language, setLanguage] = useState17("he");
9793
+ const [category, setCategory] = useState17("MARKETING");
9794
+ const [bodyText, setBodyText] = useState17("");
9795
+ const [variableSamples, setVariableSamples] = useState17({});
9796
+ const [hasFileHeader, setHasFileHeader] = useState17(false);
9797
+ const [selectedFile, setSelectedFile] = useState17(null);
9798
+ const [fileBase64, setFileBase64] = useState17("");
9799
+ const [buttons, setButtons] = useState17([]);
9800
+ const [isAddButtonOpen, setIsAddButtonOpen] = useState17(false);
9801
+ const addButtonDropdownRef = useRef15(null);
9802
+ const [isSubmitting, setIsSubmitting] = useState17(false);
9803
+ const [submittingStep, setSubmittingStep] = useState17("");
9804
+ const [submitError, setSubmitError] = useState17(null);
9805
+ const [fileError, setFileError] = useState17(null);
9806
+ const textareaRef = useRef15(null);
9807
+ const fileInputRef = useRef15(null);
9808
+ const emojiPickerRef = useRef15(null);
9809
+ const [isEmojiPickerOpen, setIsEmojiPickerOpen] = useState17(false);
9810
+ useEffect15(() => {
9647
9811
  function handleClickOutside(event) {
9648
9812
  if (emojiPickerRef.current && !emojiPickerRef.current.contains(event.target)) {
9649
9813
  setIsEmojiPickerOpen(false);
@@ -9667,7 +9831,7 @@ function CreateTemplateModal({
9667
9831
  document.removeEventListener("keydown", handleKeyDown2);
9668
9832
  };
9669
9833
  }, [isEmojiPickerOpen, isAddButtonOpen]);
9670
- useEffect14(() => {
9834
+ useEffect15(() => {
9671
9835
  if (isOpen) {
9672
9836
  setTemplateName("");
9673
9837
  setLanguage("he");
@@ -9689,7 +9853,7 @@ function CreateTemplateModal({
9689
9853
  const uniqueVariables = useMemo10(() => {
9690
9854
  return extractUniqueVariableIndices(bodyText);
9691
9855
  }, [bodyText]);
9692
- useEffect14(() => {
9856
+ useEffect15(() => {
9693
9857
  setVariableSamples((prev) => {
9694
9858
  const next = {};
9695
9859
  uniqueVariables.forEach((idx) => {
@@ -10706,7 +10870,7 @@ function CreateTemplateModal({
10706
10870
  }
10707
10871
 
10708
10872
  // src/components/WhatsAppComponent/hooks/useWhatsAppState.ts
10709
- import { useState as useState17, useEffect as useEffect15, useRef as useRef15, useMemo as useMemo11, useCallback as useCallback14 } from "react";
10873
+ import { useState as useState18, useEffect as useEffect16, useRef as useRef16, useMemo as useMemo11, useCallback as useCallback14 } from "react";
10710
10874
 
10711
10875
  // src/components/WhatsAppComponent/utils/recipientEngine.ts
10712
10876
  var STORAGE_KEY_TEST_PHONE = "whatsapp_test_phone";
@@ -12011,28 +12175,28 @@ function useWhatsAppState(props) {
12011
12175
  data: injectedData
12012
12176
  } = props;
12013
12177
  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);
12014
- const [tableColumns2, setTableColumns] = useState17(() => {
12178
+ const [tableColumns2, setTableColumns] = useState18(() => {
12015
12179
  return Array.isArray(settings == null ? void 0 : settings.columns) ? settings.columns : [];
12016
12180
  });
12017
- const [rawRecords, setRawRecords] = useState17(() => {
12181
+ const [rawRecords, setRawRecords] = useState18(() => {
12018
12182
  if (Array.isArray(injectedData)) return injectedData;
12019
12183
  if (Array.isArray(injectedData == null ? void 0 : injectedData.records)) return injectedData.records;
12020
12184
  return [];
12021
12185
  });
12022
- const [relationOptions, setRelationOptions] = useState17(() => {
12186
+ const [relationOptions, setRelationOptions] = useState18(() => {
12023
12187
  return (injectedData == null ? void 0 : injectedData.relationOptions) || {};
12024
12188
  });
12025
- const [isLoadingTableData, setIsLoadingTableData] = useState17(() => Boolean(settings == null ? void 0 : settings.tableMetaId));
12026
- const [activeSubtableScans, setActiveSubtableScans] = useState17(0);
12027
- const [tableError, setTableError] = useState17(null);
12028
- const [filters, setFilters] = useState17({});
12029
- const [selectedRowIds, setSelectedRowIds] = useState17([]);
12030
- const [autoSelectCount, setAutoSelectCount] = useState17(null);
12031
- const isAutoSelectingRef = useRef15(false);
12032
- const isManualOverrideRef = useRef15(false);
12033
- const prevAutoSelectCountRef = useRef15(null);
12034
- const fetchedTableIdsRef = useRef15(/* @__PURE__ */ new Set());
12035
- const fullyFetchedRelationKeysRef = useRef15(/* @__PURE__ */ new Set());
12189
+ const [isLoadingTableData, setIsLoadingTableData] = useState18(() => Boolean(settings == null ? void 0 : settings.tableMetaId));
12190
+ const [activeSubtableScans, setActiveSubtableScans] = useState18(0);
12191
+ const [tableError, setTableError] = useState18(null);
12192
+ const [filters, setFilters] = useState18({});
12193
+ const [selectedRowIds, setSelectedRowIds] = useState18([]);
12194
+ const [autoSelectCount, setAutoSelectCount] = useState18(null);
12195
+ const isAutoSelectingRef = useRef16(false);
12196
+ const isManualOverrideRef = useRef16(false);
12197
+ const prevAutoSelectCountRef = useRef16(null);
12198
+ const fetchedTableIdsRef = useRef16(/* @__PURE__ */ new Set());
12199
+ const fullyFetchedRelationKeysRef = useRef16(/* @__PURE__ */ new Set());
12036
12200
  const loadTableData = useCallback14(async () => {
12037
12201
  var _a2;
12038
12202
  const tableId = (settings == null ? void 0 : settings.tableMetaId) || (injectedData == null ? void 0 : injectedData.tableMetaId) || (injectedData == null ? void 0 : injectedData.tableId);
@@ -12100,7 +12264,7 @@ function useWhatsAppState(props) {
12100
12264
  executeAction,
12101
12265
  orgId
12102
12266
  ]);
12103
- useEffect15(() => {
12267
+ useEffect16(() => {
12104
12268
  loadTableData();
12105
12269
  }, [loadTableData]);
12106
12270
  const filterableColumns = useMemo11(() => {
@@ -12111,7 +12275,7 @@ function useWhatsAppState(props) {
12111
12275
  return type === "RELATION" || type === "BOOLEAN";
12112
12276
  });
12113
12277
  }, [tableColumns2]);
12114
- const [referencedTableSchemas, setReferencedTableSchemas] = useState17({});
12278
+ const [referencedTableSchemas, setReferencedTableSchemas] = useState18({});
12115
12279
  const subtableCols = useMemo11(() => {
12116
12280
  return (tableColumns2 || []).filter((col) => {
12117
12281
  var _a2;
@@ -12119,7 +12283,7 @@ function useWhatsAppState(props) {
12119
12283
  return type === "RELATION" || type === "SUB_TABLE" || type === "SUBTABLE";
12120
12284
  });
12121
12285
  }, [tableColumns2]);
12122
- useEffect15(() => {
12286
+ useEffect16(() => {
12123
12287
  if (!executeAction) return;
12124
12288
  const unrequestedCols = subtableCols.filter((col) => {
12125
12289
  var _a2;
@@ -12172,13 +12336,13 @@ function useWhatsAppState(props) {
12172
12336
  const phoneColumns = useMemo11(() => {
12173
12337
  return targetPhoneOptions.map((opt) => ({ name: opt.label, id: opt.id, type: "PHONE" }));
12174
12338
  }, [targetPhoneOptions]);
12175
- const [phoneColumnId, setPhoneColumnId] = useState17("");
12176
- const [subtableFilterColumn, setSubtableFilterColumn] = useState17("");
12177
- const [subtableFilterValue, setSubtableFilterValue] = useState17("");
12178
- const [subtableSendLimit, setSubtableSendLimit] = useState17(
12339
+ const [phoneColumnId, setPhoneColumnId] = useState18("");
12340
+ const [subtableFilterColumn, setSubtableFilterColumn] = useState18("");
12341
+ const [subtableFilterValue, setSubtableFilterValue] = useState18("");
12342
+ const [subtableSendLimit, setSubtableSendLimit] = useState18(
12179
12343
  (settings == null ? void 0 : settings.subtableSendLimit) || "PRIMARY"
12180
12344
  );
12181
- useEffect15(() => {
12345
+ useEffect16(() => {
12182
12346
  if (targetPhoneOptions.length > 0) {
12183
12347
  const isValid = targetPhoneOptions.some(
12184
12348
  (opt) => opt.id === phoneColumnId || opt.columnName === phoneColumnId
@@ -12218,10 +12382,10 @@ function useWhatsAppState(props) {
12218
12382
  const selectedSubtableFilterCol = useMemo11(() => {
12219
12383
  return subtableFilterableColumns.find((c) => c.name === subtableFilterColumn);
12220
12384
  }, [subtableFilterableColumns, subtableFilterColumn]);
12221
- const [enablePostSendAction, setEnablePostSendAction] = useState17(false);
12222
- const [postSendActionColumn, setPostSendActionColumn] = useState17("");
12223
- const [postSendActionValue, setPostSendActionValue] = useState17("");
12224
- const [postSendActionTargetType, setPostSendActionTargetType] = useState17("MAIN");
12385
+ const [enablePostSendAction, setEnablePostSendAction] = useState18(false);
12386
+ const [postSendActionColumn, setPostSendActionColumn] = useState18("");
12387
+ const [postSendActionValue, setPostSendActionValue] = useState18("");
12388
+ const [postSendActionTargetType, setPostSendActionTargetType] = useState18("MAIN");
12225
12389
  const postSendActionTargetOptions = useMemo11(() => {
12226
12390
  var _a2, _b2, _c;
12227
12391
  const options = [];
@@ -12273,8 +12437,8 @@ function useWhatsAppState(props) {
12273
12437
  );
12274
12438
  }, [postSendActionTargetOptions, postSendActionColumn]);
12275
12439
  const selectedPostSendCol = selectedPostSendOption;
12276
- const [isTestPromptOpen, setIsTestPromptOpen] = useState17(false);
12277
- const [testPhoneNumber, setTestPhoneNumber] = useState17(() => {
12440
+ const [isTestPromptOpen, setIsTestPromptOpen] = useState18(false);
12441
+ const [testPhoneNumber, setTestPhoneNumber] = useState18(() => {
12278
12442
  if (typeof window !== "undefined") {
12279
12443
  try {
12280
12444
  return localStorage.getItem(STORAGE_KEY_TEST_PHONE) || "";
@@ -12284,10 +12448,10 @@ function useWhatsAppState(props) {
12284
12448
  }
12285
12449
  return "";
12286
12450
  });
12287
- const [testFeedback, setTestFeedback] = useState17(null);
12288
- const [isSendingTest, setIsSendingTest] = useState17(false);
12289
- const [isSendingBroadcast, setIsSendingBroadcast] = useState17(false);
12290
- const [broadcastProgress, setBroadcastProgress] = useState17({
12451
+ const [testFeedback, setTestFeedback] = useState18(null);
12452
+ const [isSendingTest, setIsSendingTest] = useState18(false);
12453
+ const [isSendingBroadcast, setIsSendingBroadcast] = useState18(false);
12454
+ const [broadcastProgress, setBroadcastProgress] = useState18({
12291
12455
  current: 0,
12292
12456
  total: 0,
12293
12457
  successful: 0,
@@ -12295,8 +12459,8 @@ function useWhatsAppState(props) {
12295
12459
  skipped: 0,
12296
12460
  percent: 0
12297
12461
  });
12298
- const [broadcastSummary, setBroadcastSummary] = useState17(null);
12299
- const [rowStatusMap, setRowStatusMap] = useState17({});
12462
+ const [broadcastSummary, setBroadcastSummary] = useState18(null);
12463
+ const [rowStatusMap, setRowStatusMap] = useState18({});
12300
12464
  const clearBroadcastSummary = useCallback14(() => {
12301
12465
  setBroadcastSummary(null);
12302
12466
  }, []);
@@ -12353,7 +12517,7 @@ function useWhatsAppState(props) {
12353
12517
  },
12354
12518
  [relationOptions, subtableFilterableColumns, postSendActionTargetOptions, tableColumns2, filterableColumns]
12355
12519
  );
12356
- useEffect15(() => {
12520
+ useEffect16(() => {
12357
12521
  var _a2, _b2, _c, _d, _e;
12358
12522
  if (!executeAction) return;
12359
12523
  const targets = [];
@@ -12447,7 +12611,7 @@ function useWhatsAppState(props) {
12447
12611
  }
12448
12612
  });
12449
12613
  }, [filterableColumns, selectedPhoneOption, referencedTableSchemas, tableColumns2, executeAction, selectedPostSendOption, orgId]);
12450
- useEffect15(() => {
12614
+ useEffect16(() => {
12451
12615
  var _a2, _b2, _c;
12452
12616
  if (!executeAction || !selectedSubtableFilterCol) return;
12453
12617
  if (((_a2 = selectedSubtableFilterCol.type) == null ? void 0 : _a2.toUpperCase()) !== "RELATION") return;
@@ -12498,7 +12662,7 @@ function useWhatsAppState(props) {
12498
12662
  }
12499
12663
  })();
12500
12664
  }, [selectedSubtableFilterCol, selectedPhoneOption, executeAction, orgId]);
12501
- useEffect15(() => {
12665
+ useEffect16(() => {
12502
12666
  var _a2, _b2;
12503
12667
  if (!executeAction || !selectedPostSendOption) return;
12504
12668
  if (selectedPostSendOption.type !== "RELATION") return;
@@ -12583,7 +12747,7 @@ function useWhatsAppState(props) {
12583
12747
  });
12584
12748
  }, [rawRecords, filters, filterableColumns]);
12585
12749
  const filteredData = filteredRecords;
12586
- useEffect15(() => {
12750
+ useEffect16(() => {
12587
12751
  if (autoSelectCount !== null && autoSelectCount > 0) {
12588
12752
  isAutoSelectingRef.current = true;
12589
12753
  const sliced = filteredData.slice(0, autoSelectCount);
@@ -12683,14 +12847,14 @@ function useWhatsAppState(props) {
12683
12847
  return prev;
12684
12848
  });
12685
12849
  }, [autoSelectCount]);
12686
- const [templates, setTemplates] = useState17([]);
12687
- const [selectedTemplateId, setSelectedTemplateId] = useState17(null);
12688
- const [isLoading, setIsLoading] = useState17(true);
12689
- const [fetchError, setFetchError] = useState17(null);
12690
- const [isModalOpen, setIsModalOpen] = useState17(false);
12691
- const [isDropdownOpen, setIsDropdownOpen] = useState17(false);
12692
- const [isDeleting, setIsDeleting] = useState17(false);
12693
- const [feedback, setFeedback] = useState17(null);
12850
+ const [templates, setTemplates] = useState18([]);
12851
+ const [selectedTemplateId, setSelectedTemplateId] = useState18(null);
12852
+ const [isLoading, setIsLoading] = useState18(true);
12853
+ const [fetchError, setFetchError] = useState18(null);
12854
+ const [isModalOpen, setIsModalOpen] = useState18(false);
12855
+ const [isDropdownOpen, setIsDropdownOpen] = useState18(false);
12856
+ const [isDeleting, setIsDeleting] = useState18(false);
12857
+ const [feedback, setFeedback] = useState18(null);
12694
12858
  const loadTemplates = useCallback14(async () => {
12695
12859
  var _a2, _b2;
12696
12860
  if (!executeAction) {
@@ -12743,7 +12907,7 @@ function useWhatsAppState(props) {
12743
12907
  setIsLoading(false);
12744
12908
  }
12745
12909
  }, [executeAction, orgId]);
12746
- useEffect15(() => {
12910
+ useEffect16(() => {
12747
12911
  loadTemplates();
12748
12912
  }, [loadTemplates]);
12749
12913
  const selectedTemplate = useMemo11(() => {
@@ -12768,8 +12932,8 @@ function useWhatsAppState(props) {
12768
12932
  }
12769
12933
  ) || null;
12770
12934
  }, [selectedTemplate]);
12771
- const [headerMediaUrl, setHeaderMediaUrl] = useState17("");
12772
- useEffect15(() => {
12935
+ const [headerMediaUrl, setHeaderMediaUrl] = useState18("");
12936
+ useEffect16(() => {
12773
12937
  if (!templateHeaderComp) {
12774
12938
  setHeaderMediaUrl("");
12775
12939
  return;
@@ -12819,7 +12983,7 @@ function useWhatsAppState(props) {
12819
12983
  );
12820
12984
  setHeaderMediaUrl(defaultUrl || "");
12821
12985
  }, [templateHeaderComp, selectedTemplate == null ? void 0 : selectedTemplate.name]);
12822
- const [isUploadingMedia, setIsUploadingMedia] = useState17(false);
12986
+ const [isUploadingMedia, setIsUploadingMedia] = useState18(false);
12823
12987
  const handleFileUpload = useCallback14(
12824
12988
  async (file, templateName) => {
12825
12989
  const tplName = templateName || (selectedTemplate == null ? void 0 : selectedTemplate.name) || "";
@@ -12864,8 +13028,8 @@ function useWhatsAppState(props) {
12864
13028
  const templateVariables = useMemo11(() => {
12865
13029
  return extractTemplateVariables(selectedTemplate);
12866
13030
  }, [selectedTemplate]);
12867
- const [variableMapping, setVariableMapping] = useState17({});
12868
- useEffect15(() => {
13031
+ const [variableMapping, setVariableMapping] = useState18({});
13032
+ useEffect16(() => {
12869
13033
  setVariableMapping({});
12870
13034
  }, [selectedTemplateId]);
12871
13035
  const textableColumnOptions = useMemo11(() => {
@@ -13383,7 +13547,7 @@ function useWhatsAppState(props) {
13383
13547
  }
13384
13548
 
13385
13549
  // src/components/WhatsAppComponent/ui/TemplateSelectionBlock.tsx
13386
- import { useRef as useRef16 } from "react";
13550
+ import { useRef as useRef17 } from "react";
13387
13551
  import {
13388
13552
  FileText as FileText3,
13389
13553
  Trash2 as Trash23,
@@ -13426,7 +13590,7 @@ function TemplateSelectionBlock({
13426
13590
  isUploadingMedia = false,
13427
13591
  handleFileUpload
13428
13592
  }) {
13429
- const fileInputRef = useRef16(null);
13593
+ const fileInputRef = useRef17(null);
13430
13594
  return /* @__PURE__ */ jsxs18("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: [
13431
13595
  /* @__PURE__ */ jsxs18("div", { className: "space-y-1.5 shrink-0", children: [
13432
13596
  /* @__PURE__ */ jsxs18("div", { className: "flex items-center justify-between pb-1.5 border-b border-slate-200/70 shrink-0 gap-2", children: [
@@ -14393,16 +14557,16 @@ function SettingsAndActionsBlock({
14393
14557
  }
14394
14558
 
14395
14559
  // src/components/WhatsAppComponent/inbox/useInboxState.ts
14396
- import { useState as useState18, useEffect as useEffect16, useCallback as useCallback15, useRef as useRef17 } from "react";
14560
+ import { useState as useState19, useEffect as useEffect17, useCallback as useCallback15, useRef as useRef18 } from "react";
14397
14561
  function useInboxState(orgId, actions) {
14398
- const [conversations, setConversations] = useState18([]);
14399
- const [activeConversationId, setActiveConversationId] = useState18(null);
14400
- const [messages, setMessages] = useState18([]);
14401
- const [isLoading, setIsLoading] = useState18(false);
14402
- const [isSending, setIsSending] = useState18(false);
14403
- const [error, setError] = useState18(null);
14404
- const actionsRef = useRef17(actions);
14405
- useEffect16(() => {
14562
+ const [conversations, setConversations] = useState19([]);
14563
+ const [activeConversationId, setActiveConversationId] = useState19(null);
14564
+ const [messages, setMessages] = useState19([]);
14565
+ const [isLoading, setIsLoading] = useState19(false);
14566
+ const [isSending, setIsSending] = useState19(false);
14567
+ const [error, setError] = useState19(null);
14568
+ const actionsRef = useRef18(actions);
14569
+ useEffect17(() => {
14406
14570
  actionsRef.current = actions;
14407
14571
  });
14408
14572
  const fetchConversations = useCallback15(async () => {
@@ -14427,7 +14591,7 @@ function useInboxState(orgId, actions) {
14427
14591
  }
14428
14592
  if (!silent) setIsLoading(false);
14429
14593
  }, []);
14430
- useEffect16(() => {
14594
+ useEffect17(() => {
14431
14595
  fetchConversations();
14432
14596
  const interval = setInterval(() => {
14433
14597
  fetchConversations();
@@ -14526,17 +14690,17 @@ function ConversationList({ conversations, activeId, onSelect }) {
14526
14690
  }
14527
14691
 
14528
14692
  // src/components/WhatsAppComponent/inbox/ChatWindow.tsx
14529
- import { useState as useState19, useRef as useRef18, useEffect as useEffect17 } from "react";
14693
+ import { useState as useState20, useRef as useRef19, useEffect as useEffect18 } from "react";
14530
14694
  import { Send as Send2, User as User2, Loader2 as Loader27 } from "lucide-react";
14531
14695
  import { jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
14532
14696
  function ChatWindow({ activeConversation, messages, isLoading, isSending, onSendMessage }) {
14533
- const [inputText, setInputText] = useState19("");
14534
- const messagesTopRef = useRef18(null);
14697
+ const [inputText, setInputText] = useState20("");
14698
+ const messagesTopRef = useRef19(null);
14535
14699
  const scrollToTop = () => {
14536
14700
  var _a;
14537
14701
  (_a = messagesTopRef.current) == null ? void 0 : _a.scrollIntoView({ behavior: "smooth" });
14538
14702
  };
14539
- useEffect17(() => {
14703
+ useEffect18(() => {
14540
14704
  scrollToTop();
14541
14705
  }, [messages.length, activeConversation == null ? void 0 : activeConversation.id]);
14542
14706
  const handleSend = (e) => {
@@ -15057,18 +15221,18 @@ function WhatsAppComponent(props) {
15057
15221
  }
15058
15222
 
15059
15223
  // src/components/FormBlock/FormBlock.tsx
15060
- import { useState as useState20, useEffect as useEffect18 } from "react";
15224
+ import { useState as useState21, useEffect as useEffect19 } from "react";
15061
15225
  import { Loader2 as Loader29, CheckCircle2 as CheckCircle25 } from "lucide-react";
15062
15226
  import { jsx as jsx28, jsxs as jsxs25 } from "react/jsx-runtime";
15063
15227
  function FormBlock({ settings: schema, executeAction, componentId, className = "", onSuccess }) {
15064
15228
  const { showError, addToast } = useToast();
15065
- const [formData, setFormData] = useState20({});
15066
- const [isSubmitting, setIsSubmitting] = useState20(false);
15067
- const [isSubmitted, setIsSubmitted] = useState20(false);
15068
- const [columns, setColumns] = useState20((schema == null ? void 0 : schema.columns) || []);
15069
- const [isLoadingSchema, setIsLoadingSchema] = useState20(false);
15229
+ const [formData, setFormData] = useState21({});
15230
+ const [isSubmitting, setIsSubmitting] = useState21(false);
15231
+ const [isSubmitted, setIsSubmitted] = useState21(false);
15232
+ const [columns, setColumns] = useState21((schema == null ? void 0 : schema.columns) || []);
15233
+ const [isLoadingSchema, setIsLoadingSchema] = useState21(false);
15070
15234
  const targetTableId = (schema == null ? void 0 : schema.tableMetaId) || (schema == null ? void 0 : schema.tableId) || (schema == null ? void 0 : schema.id);
15071
- useEffect18(() => {
15235
+ useEffect19(() => {
15072
15236
  let isMounted = true;
15073
15237
  if ((!(schema == null ? void 0 : schema.columns) || schema.columns.length === 0) && targetTableId && executeAction) {
15074
15238
  setIsLoadingSchema(true);
@@ -15233,6 +15397,7 @@ export {
15233
15397
  COLUMN_TYPE_LABELS,
15234
15398
  ColumnHeaderTitle,
15235
15399
  CreateTemplateModal,
15400
+ DEFAULT_FILTER_COLUMN_TYPES,
15236
15401
  DEFAULT_PLACEMENT_STATUS_COLORS,
15237
15402
  DatePickerCell,
15238
15403
  DynamicFiltersBlock,
@@ -15247,6 +15412,7 @@ export {
15247
15412
  RELATION_BUTTON_COUNTS_ACTION,
15248
15413
  RELATION_LABEL_KEY,
15249
15414
  RELATION_SEP,
15415
+ RESOLVE_DEFAULT_FILTERS_ACTION,
15250
15416
  RelationFilterPopover,
15251
15417
  RelationPickerCell,
15252
15418
  SettingsAndActionsBlock,
@@ -15267,6 +15433,7 @@ export {
15267
15433
  buildRelationRef,
15268
15434
  calculateMinColumnWidth,
15269
15435
  checkElementTruncation,
15436
+ cleanPlacementFilterDefaults,
15270
15437
  cn,
15271
15438
  columnRefLabel,
15272
15439
  computeFormulaValue,
@@ -15282,6 +15449,8 @@ export {
15282
15449
  formatTimeInput,
15283
15450
  formatTimeIso,
15284
15451
  generateWhatsAppLink,
15452
+ getColumnDefaultFilter,
15453
+ getDefaultFilterColumns,
15285
15454
  getDeterministicPastelBadge,
15286
15455
  getEligibleCopyTargets,
15287
15456
  getNextVariableIndex,
@@ -15317,11 +15486,14 @@ export {
15317
15486
  renameCopyTarget,
15318
15487
  resolveDefaultStatusId,
15319
15488
  resolveProtocol,
15489
+ sanitizeDefaultFilter,
15320
15490
  sanitizePhoneNumber,
15321
15491
  sanitizeTemplateNameInput,
15322
15492
  seamlessVariableEngine,
15323
15493
  splitHeaderTitle,
15494
+ supportsDefaultFilter,
15324
15495
  tableColumns,
15496
+ toColumnFilterValue,
15325
15497
  useColumnReorder,
15326
15498
  useColumnResize,
15327
15499
  useSmartTooltip,
@@ -15333,5 +15505,6 @@ export {
15333
15505
  validateTemplateBody,
15334
15506
  validateTemplateButtons,
15335
15507
  validateWhatsAppTemplate,
15336
- validateWordToVariableRatio
15508
+ validateWordToVariableRatio,
15509
+ withDefaultFilter
15337
15510
  };