@universe-platform/ui 0.1.0-beta.34 → 0.1.0-beta.35
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.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +485 -315
- package/dist/index.mjs +356 -195
- package/package.json +1 -1
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
|
|
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";
|
|
@@ -6106,6 +6155,49 @@ function RelationButtonsBar({
|
|
|
6106
6155
|
);
|
|
6107
6156
|
}
|
|
6108
6157
|
|
|
6158
|
+
// src/components/TableBlock/useDefaultColumnFilters.ts
|
|
6159
|
+
import { useEffect as useEffect12, useRef as useRef12, useState as useState14 } from "react";
|
|
6160
|
+
var RESOLVE_TIMEOUT_MS = 8e3;
|
|
6161
|
+
function unwrap2(res) {
|
|
6162
|
+
const body = (res == null ? void 0 : res.data) && typeof res.data === "object" && !Array.isArray(res.data) ? res.data : res;
|
|
6163
|
+
const filters = body == null ? void 0 : body.filters;
|
|
6164
|
+
return filters && typeof filters === "object" ? filters : {};
|
|
6165
|
+
}
|
|
6166
|
+
function useDefaultColumnFilters({ columns, tableId, executeAction, onResolved }) {
|
|
6167
|
+
const hasDefaults = getDefaultFilterColumns(columns).length > 0;
|
|
6168
|
+
const [ready, setReady] = useState14(() => !hasDefaults);
|
|
6169
|
+
const doneRef = useRef12(false);
|
|
6170
|
+
const onResolvedRef = useRef12(onResolved);
|
|
6171
|
+
onResolvedRef.current = onResolved;
|
|
6172
|
+
const actionRef = useRef12(executeAction);
|
|
6173
|
+
actionRef.current = executeAction;
|
|
6174
|
+
useEffect12(() => {
|
|
6175
|
+
if (doneRef.current || !hasDefaults) return;
|
|
6176
|
+
doneRef.current = true;
|
|
6177
|
+
const exec = actionRef.current;
|
|
6178
|
+
if (!tableId || !exec) {
|
|
6179
|
+
setReady(true);
|
|
6180
|
+
return;
|
|
6181
|
+
}
|
|
6182
|
+
let settled = false;
|
|
6183
|
+
const finish = (filters) => {
|
|
6184
|
+
if (settled) return;
|
|
6185
|
+
settled = true;
|
|
6186
|
+
if (filters && Object.keys(filters).length > 0) onResolvedRef.current(filters);
|
|
6187
|
+
setReady(true);
|
|
6188
|
+
};
|
|
6189
|
+
const timer = setTimeout(() => finish(), RESOLVE_TIMEOUT_MS);
|
|
6190
|
+
Promise.resolve(exec(RESOLVE_DEFAULT_FILTERS_ACTION, { tableId })).then(
|
|
6191
|
+
(res) => finish(unwrap2(res)),
|
|
6192
|
+
(err) => {
|
|
6193
|
+
console.warn("[TableBlock] Failed to resolve default filters:", err);
|
|
6194
|
+
finish();
|
|
6195
|
+
}
|
|
6196
|
+
).finally(() => clearTimeout(timer));
|
|
6197
|
+
}, [hasDefaults, tableId]);
|
|
6198
|
+
return ready;
|
|
6199
|
+
}
|
|
6200
|
+
|
|
6109
6201
|
// src/components/TableBlock/TableBlockClient.tsx
|
|
6110
6202
|
import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
6111
6203
|
function TableBlockClient({
|
|
@@ -6134,7 +6226,7 @@ function TableBlockClient({
|
|
|
6134
6226
|
hideRelationButtons
|
|
6135
6227
|
}) {
|
|
6136
6228
|
const { showError, addToast } = useToast();
|
|
6137
|
-
const [isExporting, setIsExporting] =
|
|
6229
|
+
const [isExporting, setIsExporting] = useState15(false);
|
|
6138
6230
|
const resolvedRole = role ? getRolePermissions(role) : void 0;
|
|
6139
6231
|
const effectivePermissions = permissions || (resolvedRole == null ? void 0 : resolvedRole.permissions) || {
|
|
6140
6232
|
canCreate: !readOnly,
|
|
@@ -6153,18 +6245,18 @@ function TableBlockClient({
|
|
|
6153
6245
|
return calculateMinColumnWidth(colName, false, col == null ? void 0 : col.type);
|
|
6154
6246
|
}
|
|
6155
6247
|
});
|
|
6156
|
-
const executeActionRef =
|
|
6157
|
-
|
|
6248
|
+
const executeActionRef = useRef13(executeAction);
|
|
6249
|
+
useEffect13(() => {
|
|
6158
6250
|
executeActionRef.current = executeAction;
|
|
6159
6251
|
}, [executeAction]);
|
|
6160
|
-
const [isMounted, setIsMounted] =
|
|
6161
|
-
const [isInitialLoading, setIsInitialLoading] =
|
|
6162
|
-
const [page, setPage] =
|
|
6163
|
-
const [limit, setLimit] =
|
|
6164
|
-
const [totalRecords, setTotalRecords] =
|
|
6165
|
-
const [totalPages, setTotalPages] =
|
|
6166
|
-
const [showSummary, setShowSummary] =
|
|
6167
|
-
|
|
6252
|
+
const [isMounted, setIsMounted] = useState15(false);
|
|
6253
|
+
const [isInitialLoading, setIsInitialLoading] = useState15(true);
|
|
6254
|
+
const [page, setPage] = useState15(1);
|
|
6255
|
+
const [limit, setLimit] = useState15(50);
|
|
6256
|
+
const [totalRecords, setTotalRecords] = useState15(0);
|
|
6257
|
+
const [totalPages, setTotalPages] = useState15(1);
|
|
6258
|
+
const [showSummary, setShowSummary] = useState15(false);
|
|
6259
|
+
useEffect13(() => {
|
|
6168
6260
|
if (typeof window !== "undefined") {
|
|
6169
6261
|
const savedSummary = localStorage.getItem(`table_summary_${tableKey}`);
|
|
6170
6262
|
if (savedSummary !== null) {
|
|
@@ -6233,15 +6325,15 @@ function TableBlockClient({
|
|
|
6233
6325
|
return ((_a = a.order) != null ? _a : 0) - ((_b = b.order) != null ? _b : 0);
|
|
6234
6326
|
});
|
|
6235
6327
|
}, []);
|
|
6236
|
-
const [localColumns, setLocalColumns] =
|
|
6237
|
-
|
|
6328
|
+
const [localColumns, setLocalColumns] = useState15(() => (schema == null ? void 0 : schema.columns) || []);
|
|
6329
|
+
useEffect13(() => {
|
|
6238
6330
|
if ((schema == null ? void 0 : schema.columns) && schema.columns.length > 0) {
|
|
6239
6331
|
setLocalColumns((prev) => mergeColumnDefs(prev, schema.columns));
|
|
6240
6332
|
}
|
|
6241
6333
|
}, [schema == null ? void 0 : schema.columns, mergeColumnDefs]);
|
|
6242
|
-
const [dirty, setDirty] =
|
|
6243
|
-
const dirtyRef =
|
|
6244
|
-
|
|
6334
|
+
const [dirty, setDirty] = useState15({ added: [], modified: {}, deleted: [] });
|
|
6335
|
+
const dirtyRef = useRef13(dirty);
|
|
6336
|
+
useEffect13(() => {
|
|
6245
6337
|
dirtyRef.current = dirty;
|
|
6246
6338
|
}, [dirty]);
|
|
6247
6339
|
const mergeWithDirty = useCallback12((baseRecords) => {
|
|
@@ -6257,8 +6349,8 @@ function TableBlockClient({
|
|
|
6257
6349
|
const uniqueAdded = added.filter((r) => !baseIds.has(r.id));
|
|
6258
6350
|
return [...uniqueAdded, ...modifiedRecords];
|
|
6259
6351
|
}, []);
|
|
6260
|
-
const [data, setData] =
|
|
6261
|
-
const [serverRecords, setServerRecords] =
|
|
6352
|
+
const [data, setData] = useState15(() => normalizeRecords(initialRecords));
|
|
6353
|
+
const [serverRecords, setServerRecords] = useState15(() => normalizeRecords(initialRecords));
|
|
6262
6354
|
const filteredData = data;
|
|
6263
6355
|
const isEqualValues = (a, b) => {
|
|
6264
6356
|
if (a === b) return true;
|
|
@@ -6270,29 +6362,29 @@ function TableBlockClient({
|
|
|
6270
6362
|
}
|
|
6271
6363
|
return false;
|
|
6272
6364
|
};
|
|
6273
|
-
const [baseRecordsMap, setBaseRecordsMap] =
|
|
6365
|
+
const [baseRecordsMap, setBaseRecordsMap] = useState15(() => {
|
|
6274
6366
|
const map = /* @__PURE__ */ new Map();
|
|
6275
6367
|
(normalizeRecords(initialRecords) || []).forEach((r) => map.set(r.id, __spreadValues({}, r.data)));
|
|
6276
6368
|
return map;
|
|
6277
6369
|
});
|
|
6278
|
-
|
|
6370
|
+
useEffect13(() => {
|
|
6279
6371
|
if (initialRecords && initialRecords.length > 0) {
|
|
6280
6372
|
const map = /* @__PURE__ */ new Map();
|
|
6281
6373
|
(normalizeRecords(initialRecords) || []).forEach((r) => map.set(r.id, __spreadValues({}, r.data)));
|
|
6282
6374
|
setBaseRecordsMap(map);
|
|
6283
6375
|
}
|
|
6284
6376
|
}, [initialRecords]);
|
|
6285
|
-
const [searchQuery, setSearchQuery] =
|
|
6286
|
-
const [columnFilters, setColumnFilters] =
|
|
6287
|
-
const [activeSearchCol, setActiveSearchCol] =
|
|
6288
|
-
const activeSearchRef =
|
|
6289
|
-
const [activeRelationCol, setActiveRelationCol] =
|
|
6290
|
-
const [relationTriggerRect, setRelationTriggerRect] =
|
|
6291
|
-
const filterButtonRefs =
|
|
6292
|
-
const [relationOptions, setRelationOptions] =
|
|
6293
|
-
const [relationFilterOptions, setRelationFilterOptions] =
|
|
6294
|
-
const [loadingFilterCol, setLoadingFilterCol] =
|
|
6295
|
-
const relationDictionaryRef =
|
|
6377
|
+
const [searchQuery, setSearchQuery] = useState15("");
|
|
6378
|
+
const [columnFilters, setColumnFilters] = useState15({});
|
|
6379
|
+
const [activeSearchCol, setActiveSearchCol] = useState15(null);
|
|
6380
|
+
const activeSearchRef = useRef13(null);
|
|
6381
|
+
const [activeRelationCol, setActiveRelationCol] = useState15(null);
|
|
6382
|
+
const [relationTriggerRect, setRelationTriggerRect] = useState15(null);
|
|
6383
|
+
const filterButtonRefs = useRef13({});
|
|
6384
|
+
const [relationOptions, setRelationOptions] = useState15({});
|
|
6385
|
+
const [relationFilterOptions, setRelationFilterOptions] = useState15({});
|
|
6386
|
+
const [loadingFilterCol, setLoadingFilterCol] = useState15(null);
|
|
6387
|
+
const relationDictionaryRef = useRef13({});
|
|
6296
6388
|
const mergeRelationOptions = useCallback12((colName, newOptions) => {
|
|
6297
6389
|
if (!Array.isArray(newOptions) || newOptions.length === 0) return;
|
|
6298
6390
|
if (!relationDictionaryRef.current[colName]) {
|
|
@@ -6316,7 +6408,7 @@ function TableBlockClient({
|
|
|
6316
6408
|
}));
|
|
6317
6409
|
}
|
|
6318
6410
|
}, []);
|
|
6319
|
-
|
|
6411
|
+
useEffect13(() => {
|
|
6320
6412
|
if (!activeSearchCol) return;
|
|
6321
6413
|
const handleMouseDown = (e) => {
|
|
6322
6414
|
if (activeSearchRef.current && !activeSearchRef.current.contains(e.target)) {
|
|
@@ -6337,23 +6429,29 @@ function TableBlockClient({
|
|
|
6337
6429
|
});
|
|
6338
6430
|
return JSON.stringify(active);
|
|
6339
6431
|
}, [columnFilters]);
|
|
6340
|
-
const
|
|
6341
|
-
|
|
6432
|
+
const defaultFiltersReady = useDefaultColumnFilters({
|
|
6433
|
+
columns: localColumns,
|
|
6434
|
+
tableId: (schema == null ? void 0 : schema.tableMetaId) || (schema == null ? void 0 : schema.tableId) || (schema == null ? void 0 : schema.id),
|
|
6435
|
+
executeAction,
|
|
6436
|
+
onResolved: (resolved) => setColumnFilters((prev) => __spreadValues(__spreadValues({}, resolved), prev))
|
|
6437
|
+
});
|
|
6438
|
+
const [debouncedSearch, setDebouncedSearch] = useState15(searchQuery);
|
|
6439
|
+
useEffect13(() => {
|
|
6342
6440
|
const timer = setTimeout(() => {
|
|
6343
6441
|
setDebouncedSearch(searchQuery.trim());
|
|
6344
6442
|
}, 300);
|
|
6345
6443
|
return () => clearTimeout(timer);
|
|
6346
6444
|
}, [searchQuery]);
|
|
6347
|
-
const isSearchMountedRef =
|
|
6348
|
-
|
|
6445
|
+
const isSearchMountedRef = useRef13(false);
|
|
6446
|
+
useEffect13(() => {
|
|
6349
6447
|
if (!isSearchMountedRef.current) {
|
|
6350
6448
|
isSearchMountedRef.current = true;
|
|
6351
6449
|
return;
|
|
6352
6450
|
}
|
|
6353
6451
|
setPage(1);
|
|
6354
6452
|
}, [debouncedSearch]);
|
|
6355
|
-
const [isFetching, setIsFetching] =
|
|
6356
|
-
const fetchRequestIdRef =
|
|
6453
|
+
const [isFetching, setIsFetching] = useState15(false);
|
|
6454
|
+
const fetchRequestIdRef = useRef13(0);
|
|
6357
6455
|
const fetchTableData = useCallback12((targetPage, targetLimit, targetSearch, targetFiltersKey) => {
|
|
6358
6456
|
const tableId = (schema == null ? void 0 : schema.tableMetaId) || (schema == null ? void 0 : schema.tableId) || (schema == null ? void 0 : schema.id);
|
|
6359
6457
|
const action = executeActionRef.current;
|
|
@@ -6478,11 +6576,12 @@ function TableBlockClient({
|
|
|
6478
6576
|
}
|
|
6479
6577
|
});
|
|
6480
6578
|
}, [schema == null ? void 0 : schema.tableMetaId, schema == null ? void 0 : schema.tableId, schema == null ? void 0 : schema.id, mergeColumnDefs, mergeWithDirty, mergeRelationOptions]);
|
|
6481
|
-
|
|
6579
|
+
useEffect13(() => {
|
|
6580
|
+
if (!defaultFiltersReady) return;
|
|
6482
6581
|
fetchTableData(page, limit, debouncedSearch, filtersKey);
|
|
6483
|
-
}, [page, limit, debouncedSearch, filtersKey, fetchTableData]);
|
|
6484
|
-
|
|
6485
|
-
if (initialRecords) {
|
|
6582
|
+
}, [page, limit, debouncedSearch, filtersKey, fetchTableData, defaultFiltersReady]);
|
|
6583
|
+
useEffect13(() => {
|
|
6584
|
+
if (initialRecords && defaultFiltersReady) {
|
|
6486
6585
|
const norm = normalizeRecords(initialRecords);
|
|
6487
6586
|
setServerRecords(norm);
|
|
6488
6587
|
const hasActiveFilters = Boolean(debouncedSearch) || Object.keys(columnFilters).length > 0;
|
|
@@ -6543,7 +6642,7 @@ function TableBlockClient({
|
|
|
6543
6642
|
setData(mergeWithDirty(norm));
|
|
6544
6643
|
}
|
|
6545
6644
|
}
|
|
6546
|
-
}, [initialRecords, mergeWithDirty, debouncedSearch, columnFilters, fetchTableData, page, limit, filtersKey]);
|
|
6645
|
+
}, [initialRecords, mergeWithDirty, debouncedSearch, columnFilters, fetchTableData, page, limit, filtersKey, defaultFiltersReady]);
|
|
6547
6646
|
const refetchTableData = useCallback12(() => {
|
|
6548
6647
|
return fetchTableData(page, limit, debouncedSearch, filtersKey);
|
|
6549
6648
|
}, [page, limit, debouncedSearch, filtersKey, fetchTableData]);
|
|
@@ -6572,9 +6671,9 @@ function TableBlockClient({
|
|
|
6572
6671
|
const handleNextPage = () => {
|
|
6573
6672
|
setPage((prev) => Math.min(totalPages, prev + 1));
|
|
6574
6673
|
};
|
|
6575
|
-
const [selectedIds, setSelectedIds] =
|
|
6576
|
-
const isExternalSyncRef =
|
|
6577
|
-
|
|
6674
|
+
const [selectedIds, setSelectedIds] = useState15(/* @__PURE__ */ new Set());
|
|
6675
|
+
const isExternalSyncRef = useRef13(false);
|
|
6676
|
+
useEffect13(() => {
|
|
6578
6677
|
if (selectedRowIds !== void 0) {
|
|
6579
6678
|
const nextSet = new Set(selectedRowIds);
|
|
6580
6679
|
setSelectedIds((prev) => {
|
|
@@ -6586,8 +6685,8 @@ function TableBlockClient({
|
|
|
6586
6685
|
});
|
|
6587
6686
|
}
|
|
6588
6687
|
}, [selectedRowIds]);
|
|
6589
|
-
const isFirstSelectionChangeRef =
|
|
6590
|
-
|
|
6688
|
+
const isFirstSelectionChangeRef = useRef13(true);
|
|
6689
|
+
useEffect13(() => {
|
|
6591
6690
|
if (isFirstSelectionChangeRef.current) {
|
|
6592
6691
|
isFirstSelectionChangeRef.current = false;
|
|
6593
6692
|
if (selectedIds.size === 0) return;
|
|
@@ -6598,11 +6697,11 @@ function TableBlockClient({
|
|
|
6598
6697
|
}
|
|
6599
6698
|
onSelectionChange == null ? void 0 : onSelectionChange(Array.from(selectedIds));
|
|
6600
6699
|
}, [selectedIds, onSelectionChange]);
|
|
6601
|
-
const [pendingDeletions, setPendingDeletions] =
|
|
6602
|
-
const [isSaving, setIsSaving] =
|
|
6700
|
+
const [pendingDeletions, setPendingDeletions] = useState15([]);
|
|
6701
|
+
const [isSaving, setIsSaving] = useState15(false);
|
|
6603
6702
|
const isUpdatingActive = Boolean(isUpdating || isSaving);
|
|
6604
|
-
const [isSaveSuccess, setIsSaveSuccess] =
|
|
6605
|
-
const [expandedRowIds, setExpandedRowIds] =
|
|
6703
|
+
const [isSaveSuccess, setIsSaveSuccess] = useState15(false);
|
|
6704
|
+
const [expandedRowIds, setExpandedRowIds] = useState15(/* @__PURE__ */ new Set());
|
|
6606
6705
|
const schemaColsString = useMemo7(() => JSON.stringify(localColumns || []), [localColumns]);
|
|
6607
6706
|
const refetchRelation = useCallback12(async (colName, params) => {
|
|
6608
6707
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
@@ -6679,8 +6778,8 @@ function TableBlockClient({
|
|
|
6679
6778
|
setLoadingFilterCol(null);
|
|
6680
6779
|
}
|
|
6681
6780
|
}, [schemaColsString, schema == null ? void 0 : schema.tableMetaId, schema == null ? void 0 : schema.tableId, schema == null ? void 0 : schema.id, executeAction, mergeRelationOptions]);
|
|
6682
|
-
const requestedRelationIdsRef =
|
|
6683
|
-
|
|
6781
|
+
const requestedRelationIdsRef = useRef13({});
|
|
6782
|
+
useEffect13(() => {
|
|
6684
6783
|
if (!executeAction || !data || data.length === 0) return;
|
|
6685
6784
|
let parsedCols = [];
|
|
6686
6785
|
try {
|
|
@@ -6733,7 +6832,7 @@ function TableBlockClient({
|
|
|
6733
6832
|
}
|
|
6734
6833
|
});
|
|
6735
6834
|
}, [data, schemaColsString, executeAction, relationOptions, mergeRelationOptions]);
|
|
6736
|
-
|
|
6835
|
+
useEffect13(() => {
|
|
6737
6836
|
let parsedCols = [];
|
|
6738
6837
|
try {
|
|
6739
6838
|
parsedCols = JSON.parse(schemaColsString);
|
|
@@ -6769,9 +6868,9 @@ function TableBlockClient({
|
|
|
6769
6868
|
const systemFields = ["_id", "createdAt", "updatedAt", "orgId", "tableId"];
|
|
6770
6869
|
return normalizedColumns.filter((col) => !systemFields.includes(col.name));
|
|
6771
6870
|
}, [normalizedColumns]);
|
|
6772
|
-
const [isColumnsDropdownOpen, setIsColumnsDropdownOpen] =
|
|
6773
|
-
const dropdownRef =
|
|
6774
|
-
|
|
6871
|
+
const [isColumnsDropdownOpen, setIsColumnsDropdownOpen] = useState15(false);
|
|
6872
|
+
const dropdownRef = useRef13(null);
|
|
6873
|
+
useEffect13(() => {
|
|
6775
6874
|
const handleClickOutside = (e) => {
|
|
6776
6875
|
if (dropdownRef.current && !dropdownRef.current.contains(e.target)) {
|
|
6777
6876
|
setIsColumnsDropdownOpen(false);
|
|
@@ -8034,7 +8133,7 @@ function ExpandedSubTables({
|
|
|
8034
8133
|
context
|
|
8035
8134
|
}) {
|
|
8036
8135
|
var _a;
|
|
8037
|
-
const [activeTab, setActiveTab] =
|
|
8136
|
+
const [activeTab, setActiveTab] = useState15((_a = subTableColumns[0]) == null ? void 0 : _a.name);
|
|
8038
8137
|
if (subTableColumns.length === 0) return null;
|
|
8039
8138
|
if (subTableColumns.length === 1) {
|
|
8040
8139
|
const stCol = subTableColumns[0];
|
|
@@ -8263,7 +8362,7 @@ function TableBlock(props) {
|
|
|
8263
8362
|
}
|
|
8264
8363
|
|
|
8265
8364
|
// src/components/PlacementBlock/PlacementBlock.tsx
|
|
8266
|
-
import { useState as
|
|
8365
|
+
import { useState as useState16, useEffect as useEffect14, useRef as useRef14, useCallback as useCallback13, useMemo as useMemo9 } from "react";
|
|
8267
8366
|
import { AgGridReact } from "ag-grid-react";
|
|
8268
8367
|
import {
|
|
8269
8368
|
ModuleRegistry,
|
|
@@ -8763,6 +8862,43 @@ var PlacementRelationButtons = ({
|
|
|
8763
8862
|
);
|
|
8764
8863
|
};
|
|
8765
8864
|
|
|
8865
|
+
// src/components/PlacementBlock/placementDefaultFilters.ts
|
|
8866
|
+
function getPlacementFilterRefs(config) {
|
|
8867
|
+
const defined = Array.isArray(config == null ? void 0 : config.filterFields) ? config.filterFields : [];
|
|
8868
|
+
const legacy = [config == null ? void 0 : config.targetFilterField1Id, config == null ? void 0 : config.targetFilterField2Id].filter(Boolean);
|
|
8869
|
+
return (defined.length > 0 ? defined : legacy).filter((r) => typeof r === "string" && r);
|
|
8870
|
+
}
|
|
8871
|
+
function resolveFilterColName(ref, targetColumns) {
|
|
8872
|
+
const direct = (targetColumns || []).find((c) => (c == null ? void 0 : c.id) === ref || (c == null ? void 0 : c.name) === ref);
|
|
8873
|
+
if (direct) return direct.name;
|
|
8874
|
+
const { relationColumn } = parseColumnRef(ref);
|
|
8875
|
+
if (relationColumn) {
|
|
8876
|
+
const rel = (targetColumns || []).find(
|
|
8877
|
+
(c) => (c == null ? void 0 : c.name) === relationColumn && String(c == null ? void 0 : c.type).toUpperCase() === "RELATION"
|
|
8878
|
+
);
|
|
8879
|
+
if (rel) return rel.name;
|
|
8880
|
+
}
|
|
8881
|
+
return ref;
|
|
8882
|
+
}
|
|
8883
|
+
function computePlacementDefaultFilters(args) {
|
|
8884
|
+
const { refs, defaults, targetColumns, rows, getText } = args;
|
|
8885
|
+
const applied = {};
|
|
8886
|
+
if (!defaults) return applied;
|
|
8887
|
+
for (const ref of refs) {
|
|
8888
|
+
const want = defaults[ref];
|
|
8889
|
+
if (typeof want !== "string" || want === "") continue;
|
|
8890
|
+
const colName = resolveFilterColName(ref, targetColumns);
|
|
8891
|
+
if (colName in applied) continue;
|
|
8892
|
+
const validRows = rows.filter(
|
|
8893
|
+
(r) => Object.entries(applied).every(([name, value]) => getText(name, r.data) === value)
|
|
8894
|
+
);
|
|
8895
|
+
if (validRows.some((r) => getText(colName, r.data) === want)) {
|
|
8896
|
+
applied[colName] = want;
|
|
8897
|
+
}
|
|
8898
|
+
}
|
|
8899
|
+
return applied;
|
|
8900
|
+
}
|
|
8901
|
+
|
|
8766
8902
|
// src/components/PlacementBlock/PlacementBlock.tsx
|
|
8767
8903
|
import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
8768
8904
|
ModuleRegistry.registerModules([AllCommunityModule]);
|
|
@@ -8840,7 +8976,7 @@ var CheckHeader = (props) => /* @__PURE__ */ jsx19("div", { className: "flex ite
|
|
|
8840
8976
|
}
|
|
8841
8977
|
) });
|
|
8842
8978
|
var RelationFilterHeader = (props) => {
|
|
8843
|
-
const btnRef =
|
|
8979
|
+
const btnRef = useRef14(null);
|
|
8844
8980
|
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
8981
|
/* @__PURE__ */ jsx19(
|
|
8846
8982
|
"button",
|
|
@@ -8888,30 +9024,30 @@ var PlacementBlock = (props) => {
|
|
|
8888
9024
|
const targetTableId = config == null ? void 0 : config.targetTableId;
|
|
8889
9025
|
const displayField = (config == null ? void 0 : config.sourceDisplayFieldId) || "name";
|
|
8890
9026
|
const assignmentField = config == null ? void 0 : config.targetAssignmentFieldId;
|
|
8891
|
-
const executeActionRef =
|
|
9027
|
+
const executeActionRef = useRef14(executeAction);
|
|
8892
9028
|
executeActionRef.current = executeAction;
|
|
8893
|
-
const legacyRef =
|
|
9029
|
+
const legacyRef = useRef14({ fetchSourceData, fetchTargetData, updateAssignment });
|
|
8894
9030
|
legacyRef.current = { fetchSourceData, fetchTargetData, updateAssignment };
|
|
8895
|
-
const [sourceRows, setSourceRows] =
|
|
8896
|
-
const [sourceColumns, setSourceColumns] =
|
|
8897
|
-
const [sourceRelOptions, setSourceRelOptions] =
|
|
8898
|
-
const [sourceRelFilters, setSourceRelFilters] =
|
|
8899
|
-
const [targetRows, setTargetRows] =
|
|
8900
|
-
const [targetColumns, setTargetColumns] =
|
|
8901
|
-
const [targetRelOptions, setTargetRelOptions] =
|
|
8902
|
-
const [selectedTargetId, setSelectedTargetId] =
|
|
8903
|
-
const [candidateIds, setCandidateIds] =
|
|
8904
|
-
const [checkedIds, setCheckedIds] =
|
|
8905
|
-
const [isSaving, setIsSaving] =
|
|
8906
|
-
const [sourceSearch, setSourceSearch] =
|
|
8907
|
-
const [candidateSearch, setCandidateSearch] =
|
|
8908
|
-
const [statusMap, setStatusMap] =
|
|
8909
|
-
const [isLoading, setIsLoading] =
|
|
8910
|
-
const [loadError, setLoadError] =
|
|
8911
|
-
const [saveError, setSaveError] =
|
|
8912
|
-
const [colFilters, setColFilters] =
|
|
8913
|
-
const [filterPopover, setFilterPopover] =
|
|
8914
|
-
const [targetFilters, setTargetFilters] =
|
|
9031
|
+
const [sourceRows, setSourceRows] = useState16([]);
|
|
9032
|
+
const [sourceColumns, setSourceColumns] = useState16([]);
|
|
9033
|
+
const [sourceRelOptions, setSourceRelOptions] = useState16({});
|
|
9034
|
+
const [sourceRelFilters, setSourceRelFilters] = useState16({});
|
|
9035
|
+
const [targetRows, setTargetRows] = useState16([]);
|
|
9036
|
+
const [targetColumns, setTargetColumns] = useState16([]);
|
|
9037
|
+
const [targetRelOptions, setTargetRelOptions] = useState16({});
|
|
9038
|
+
const [selectedTargetId, setSelectedTargetId] = useState16("");
|
|
9039
|
+
const [candidateIds, setCandidateIds] = useState16([]);
|
|
9040
|
+
const [checkedIds, setCheckedIds] = useState16([]);
|
|
9041
|
+
const [isSaving, setIsSaving] = useState16(false);
|
|
9042
|
+
const [sourceSearch, setSourceSearch] = useState16("");
|
|
9043
|
+
const [candidateSearch, setCandidateSearch] = useState16("");
|
|
9044
|
+
const [statusMap, setStatusMap] = useState16({});
|
|
9045
|
+
const [isLoading, setIsLoading] = useState16(false);
|
|
9046
|
+
const [loadError, setLoadError] = useState16(null);
|
|
9047
|
+
const [saveError, setSaveError] = useState16(null);
|
|
9048
|
+
const [colFilters, setColFilters] = useState16({ source: {}, cand: {} });
|
|
9049
|
+
const [filterPopover, setFilterPopover] = useState16(null);
|
|
9050
|
+
const [targetFilters, setTargetFilters] = useState16({});
|
|
8915
9051
|
const loadTable = useCallback13(async (tableId, kind) => {
|
|
8916
9052
|
const exec = executeActionRef.current;
|
|
8917
9053
|
if (exec) {
|
|
@@ -8925,7 +9061,7 @@ var PlacementBlock = (props) => {
|
|
|
8925
9061
|
}
|
|
8926
9062
|
throw new Error("executeAction \u05DC\u05D0 \u05D4\u05D5\u05E2\u05D1\u05E8 \u05DC\u05E8\u05DB\u05D9\u05D1 \u05D4\u05E9\u05D9\u05D1\u05D5\u05E5");
|
|
8927
9063
|
}, []);
|
|
8928
|
-
|
|
9064
|
+
useEffect14(() => {
|
|
8929
9065
|
if (!sourceTableId || !targetTableId) return;
|
|
8930
9066
|
let cancelled = false;
|
|
8931
9067
|
(async () => {
|
|
@@ -9061,7 +9197,7 @@ var PlacementBlock = (props) => {
|
|
|
9061
9197
|
});
|
|
9062
9198
|
});
|
|
9063
9199
|
}, [targetRows, targetFilters, filterColumns, displayValue]);
|
|
9064
|
-
|
|
9200
|
+
useEffect14(() => {
|
|
9065
9201
|
if (filteredTargetRows.length > 0) {
|
|
9066
9202
|
if (!selectedTargetId || !filteredTargetRows.some((r) => r.id === selectedTargetId)) {
|
|
9067
9203
|
setSelectedTargetId(filteredTargetRows[0].id);
|
|
@@ -9070,6 +9206,22 @@ var PlacementBlock = (props) => {
|
|
|
9070
9206
|
setSelectedTargetId("");
|
|
9071
9207
|
}
|
|
9072
9208
|
}, [filteredTargetRows, selectedTargetId]);
|
|
9209
|
+
const appliedDefaultsKeyRef = useRef14("");
|
|
9210
|
+
useEffect14(() => {
|
|
9211
|
+
const defaults = config == null ? void 0 : config.targetFilterDefaults;
|
|
9212
|
+
if (isLoading || !defaults || targetRows.length === 0 || targetColumns.length === 0) return;
|
|
9213
|
+
const key = `${targetTableId}|${JSON.stringify(defaults)}`;
|
|
9214
|
+
if (appliedDefaultsKeyRef.current === key) return;
|
|
9215
|
+
appliedDefaultsKeyRef.current = key;
|
|
9216
|
+
const resolved = computePlacementDefaultFilters({
|
|
9217
|
+
refs: getPlacementFilterRefs(config),
|
|
9218
|
+
defaults,
|
|
9219
|
+
targetColumns,
|
|
9220
|
+
rows: targetRows,
|
|
9221
|
+
getText: (colName, data) => displayValue(targetColumns.find((c) => c.name === colName) || { name: colName }, readColumnValue(data, colName))
|
|
9222
|
+
});
|
|
9223
|
+
if (Object.keys(resolved).length > 0) setTargetFilters((prev) => __spreadValues(__spreadValues({}, resolved), prev));
|
|
9224
|
+
}, [config, isLoading, targetRows, targetColumns, targetTableId, displayValue]);
|
|
9073
9225
|
const assignmentColumn = useMemo9(() => targetColumns.find((c) => c.name === assignmentField), [targetColumns, assignmentField]);
|
|
9074
9226
|
const isRelationField = ((_b = assignmentColumn == null ? void 0 : assignmentColumn.type) == null ? void 0 : _b.toUpperCase()) === "RELATION";
|
|
9075
9227
|
const assignmentLabel = (assignmentColumn == null ? void 0 : assignmentColumn.label) || (assignmentColumn == null ? void 0 : assignmentColumn.name) || assignmentField || "";
|
|
@@ -9088,9 +9240,9 @@ var PlacementBlock = (props) => {
|
|
|
9088
9240
|
}).filter((id) => !!id && sourceRows.some((s) => s.id === id));
|
|
9089
9241
|
return Array.from(new Set(ids));
|
|
9090
9242
|
}, [selectedTargetId, targetRows, sourceRows, assignmentField, isRelationField, nameOf]);
|
|
9091
|
-
const assignedIdsRef =
|
|
9243
|
+
const assignedIdsRef = useRef14(assignedIds);
|
|
9092
9244
|
assignedIdsRef.current = assignedIds;
|
|
9093
|
-
|
|
9245
|
+
useEffect14(() => {
|
|
9094
9246
|
setCandidateIds(assignedIdsRef.current);
|
|
9095
9247
|
setCheckedIds(assignedIdsRef.current);
|
|
9096
9248
|
}, [selectedTargetId, sourceRows]);
|
|
@@ -9137,9 +9289,9 @@ var PlacementBlock = (props) => {
|
|
|
9137
9289
|
setCheckedIds((prev) => prev.filter((x) => x !== id));
|
|
9138
9290
|
setStatusMap((prev) => __spreadProps(__spreadValues({}, prev), { [id]: defaultStatusId }));
|
|
9139
9291
|
}, [defaultStatusId]);
|
|
9140
|
-
const moveToCandidatesRef =
|
|
9292
|
+
const moveToCandidatesRef = useRef14(moveToCandidates);
|
|
9141
9293
|
moveToCandidatesRef.current = moveToCandidates;
|
|
9142
|
-
const moveToSourceRef =
|
|
9294
|
+
const moveToSourceRef = useRef14(moveToSource);
|
|
9143
9295
|
moveToSourceRef.current = moveToSource;
|
|
9144
9296
|
const toggleChecked = useCallback13((id) => {
|
|
9145
9297
|
setCheckedIds((prev) => prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]);
|
|
@@ -9264,11 +9416,11 @@ var PlacementBlock = (props) => {
|
|
|
9264
9416
|
[filterPopover, sourceColumns]
|
|
9265
9417
|
);
|
|
9266
9418
|
const getRowId = useCallback13((p) => p.data.id, []);
|
|
9267
|
-
const sourceContainerRef =
|
|
9268
|
-
const assignedContainerRef =
|
|
9269
|
-
const [sourceApi, setSourceApi] =
|
|
9270
|
-
const [assignedApi, setAssignedApi] =
|
|
9271
|
-
|
|
9419
|
+
const sourceContainerRef = useRef14(null);
|
|
9420
|
+
const assignedContainerRef = useRef14(null);
|
|
9421
|
+
const [sourceApi, setSourceApi] = useState16(null);
|
|
9422
|
+
const [assignedApi, setAssignedApi] = useState16(null);
|
|
9423
|
+
useEffect14(() => {
|
|
9272
9424
|
if (!sourceApi || !assignedApi) return;
|
|
9273
9425
|
const toAssigned = { getContainer: () => assignedContainerRef.current, onDragStop: (p) => {
|
|
9274
9426
|
var _a2, _b2;
|
|
@@ -9471,7 +9623,7 @@ import React20 from "react";
|
|
|
9471
9623
|
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
9624
|
|
|
9473
9625
|
// src/components/WhatsAppComponent/CreateTemplateModal.tsx
|
|
9474
|
-
import { useState as
|
|
9626
|
+
import { useState as useState17, useEffect as useEffect15, useRef as useRef15, useMemo as useMemo10 } from "react";
|
|
9475
9627
|
import {
|
|
9476
9628
|
X as X9,
|
|
9477
9629
|
Plus,
|
|
@@ -9624,26 +9776,26 @@ function CreateTemplateModal({
|
|
|
9624
9776
|
executeAction,
|
|
9625
9777
|
orgId
|
|
9626
9778
|
}) {
|
|
9627
|
-
const [templateName, setTemplateName] =
|
|
9628
|
-
const [language, setLanguage] =
|
|
9629
|
-
const [category, setCategory] =
|
|
9630
|
-
const [bodyText, setBodyText] =
|
|
9631
|
-
const [variableSamples, setVariableSamples] =
|
|
9632
|
-
const [hasFileHeader, setHasFileHeader] =
|
|
9633
|
-
const [selectedFile, setSelectedFile] =
|
|
9634
|
-
const [fileBase64, setFileBase64] =
|
|
9635
|
-
const [buttons, setButtons] =
|
|
9636
|
-
const [isAddButtonOpen, setIsAddButtonOpen] =
|
|
9637
|
-
const addButtonDropdownRef =
|
|
9638
|
-
const [isSubmitting, setIsSubmitting] =
|
|
9639
|
-
const [submittingStep, setSubmittingStep] =
|
|
9640
|
-
const [submitError, setSubmitError] =
|
|
9641
|
-
const [fileError, setFileError] =
|
|
9642
|
-
const textareaRef =
|
|
9643
|
-
const fileInputRef =
|
|
9644
|
-
const emojiPickerRef =
|
|
9645
|
-
const [isEmojiPickerOpen, setIsEmojiPickerOpen] =
|
|
9646
|
-
|
|
9779
|
+
const [templateName, setTemplateName] = useState17("");
|
|
9780
|
+
const [language, setLanguage] = useState17("he");
|
|
9781
|
+
const [category, setCategory] = useState17("MARKETING");
|
|
9782
|
+
const [bodyText, setBodyText] = useState17("");
|
|
9783
|
+
const [variableSamples, setVariableSamples] = useState17({});
|
|
9784
|
+
const [hasFileHeader, setHasFileHeader] = useState17(false);
|
|
9785
|
+
const [selectedFile, setSelectedFile] = useState17(null);
|
|
9786
|
+
const [fileBase64, setFileBase64] = useState17("");
|
|
9787
|
+
const [buttons, setButtons] = useState17([]);
|
|
9788
|
+
const [isAddButtonOpen, setIsAddButtonOpen] = useState17(false);
|
|
9789
|
+
const addButtonDropdownRef = useRef15(null);
|
|
9790
|
+
const [isSubmitting, setIsSubmitting] = useState17(false);
|
|
9791
|
+
const [submittingStep, setSubmittingStep] = useState17("");
|
|
9792
|
+
const [submitError, setSubmitError] = useState17(null);
|
|
9793
|
+
const [fileError, setFileError] = useState17(null);
|
|
9794
|
+
const textareaRef = useRef15(null);
|
|
9795
|
+
const fileInputRef = useRef15(null);
|
|
9796
|
+
const emojiPickerRef = useRef15(null);
|
|
9797
|
+
const [isEmojiPickerOpen, setIsEmojiPickerOpen] = useState17(false);
|
|
9798
|
+
useEffect15(() => {
|
|
9647
9799
|
function handleClickOutside(event) {
|
|
9648
9800
|
if (emojiPickerRef.current && !emojiPickerRef.current.contains(event.target)) {
|
|
9649
9801
|
setIsEmojiPickerOpen(false);
|
|
@@ -9667,7 +9819,7 @@ function CreateTemplateModal({
|
|
|
9667
9819
|
document.removeEventListener("keydown", handleKeyDown2);
|
|
9668
9820
|
};
|
|
9669
9821
|
}, [isEmojiPickerOpen, isAddButtonOpen]);
|
|
9670
|
-
|
|
9822
|
+
useEffect15(() => {
|
|
9671
9823
|
if (isOpen) {
|
|
9672
9824
|
setTemplateName("");
|
|
9673
9825
|
setLanguage("he");
|
|
@@ -9689,7 +9841,7 @@ function CreateTemplateModal({
|
|
|
9689
9841
|
const uniqueVariables = useMemo10(() => {
|
|
9690
9842
|
return extractUniqueVariableIndices(bodyText);
|
|
9691
9843
|
}, [bodyText]);
|
|
9692
|
-
|
|
9844
|
+
useEffect15(() => {
|
|
9693
9845
|
setVariableSamples((prev) => {
|
|
9694
9846
|
const next = {};
|
|
9695
9847
|
uniqueVariables.forEach((idx) => {
|
|
@@ -10706,7 +10858,7 @@ function CreateTemplateModal({
|
|
|
10706
10858
|
}
|
|
10707
10859
|
|
|
10708
10860
|
// src/components/WhatsAppComponent/hooks/useWhatsAppState.ts
|
|
10709
|
-
import { useState as
|
|
10861
|
+
import { useState as useState18, useEffect as useEffect16, useRef as useRef16, useMemo as useMemo11, useCallback as useCallback14 } from "react";
|
|
10710
10862
|
|
|
10711
10863
|
// src/components/WhatsAppComponent/utils/recipientEngine.ts
|
|
10712
10864
|
var STORAGE_KEY_TEST_PHONE = "whatsapp_test_phone";
|
|
@@ -12011,28 +12163,28 @@ function useWhatsAppState(props) {
|
|
|
12011
12163
|
data: injectedData
|
|
12012
12164
|
} = props;
|
|
12013
12165
|
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] =
|
|
12166
|
+
const [tableColumns2, setTableColumns] = useState18(() => {
|
|
12015
12167
|
return Array.isArray(settings == null ? void 0 : settings.columns) ? settings.columns : [];
|
|
12016
12168
|
});
|
|
12017
|
-
const [rawRecords, setRawRecords] =
|
|
12169
|
+
const [rawRecords, setRawRecords] = useState18(() => {
|
|
12018
12170
|
if (Array.isArray(injectedData)) return injectedData;
|
|
12019
12171
|
if (Array.isArray(injectedData == null ? void 0 : injectedData.records)) return injectedData.records;
|
|
12020
12172
|
return [];
|
|
12021
12173
|
});
|
|
12022
|
-
const [relationOptions, setRelationOptions] =
|
|
12174
|
+
const [relationOptions, setRelationOptions] = useState18(() => {
|
|
12023
12175
|
return (injectedData == null ? void 0 : injectedData.relationOptions) || {};
|
|
12024
12176
|
});
|
|
12025
|
-
const [isLoadingTableData, setIsLoadingTableData] =
|
|
12026
|
-
const [activeSubtableScans, setActiveSubtableScans] =
|
|
12027
|
-
const [tableError, setTableError] =
|
|
12028
|
-
const [filters, setFilters] =
|
|
12029
|
-
const [selectedRowIds, setSelectedRowIds] =
|
|
12030
|
-
const [autoSelectCount, setAutoSelectCount] =
|
|
12031
|
-
const isAutoSelectingRef =
|
|
12032
|
-
const isManualOverrideRef =
|
|
12033
|
-
const prevAutoSelectCountRef =
|
|
12034
|
-
const fetchedTableIdsRef =
|
|
12035
|
-
const fullyFetchedRelationKeysRef =
|
|
12177
|
+
const [isLoadingTableData, setIsLoadingTableData] = useState18(() => Boolean(settings == null ? void 0 : settings.tableMetaId));
|
|
12178
|
+
const [activeSubtableScans, setActiveSubtableScans] = useState18(0);
|
|
12179
|
+
const [tableError, setTableError] = useState18(null);
|
|
12180
|
+
const [filters, setFilters] = useState18({});
|
|
12181
|
+
const [selectedRowIds, setSelectedRowIds] = useState18([]);
|
|
12182
|
+
const [autoSelectCount, setAutoSelectCount] = useState18(null);
|
|
12183
|
+
const isAutoSelectingRef = useRef16(false);
|
|
12184
|
+
const isManualOverrideRef = useRef16(false);
|
|
12185
|
+
const prevAutoSelectCountRef = useRef16(null);
|
|
12186
|
+
const fetchedTableIdsRef = useRef16(/* @__PURE__ */ new Set());
|
|
12187
|
+
const fullyFetchedRelationKeysRef = useRef16(/* @__PURE__ */ new Set());
|
|
12036
12188
|
const loadTableData = useCallback14(async () => {
|
|
12037
12189
|
var _a2;
|
|
12038
12190
|
const tableId = (settings == null ? void 0 : settings.tableMetaId) || (injectedData == null ? void 0 : injectedData.tableMetaId) || (injectedData == null ? void 0 : injectedData.tableId);
|
|
@@ -12100,7 +12252,7 @@ function useWhatsAppState(props) {
|
|
|
12100
12252
|
executeAction,
|
|
12101
12253
|
orgId
|
|
12102
12254
|
]);
|
|
12103
|
-
|
|
12255
|
+
useEffect16(() => {
|
|
12104
12256
|
loadTableData();
|
|
12105
12257
|
}, [loadTableData]);
|
|
12106
12258
|
const filterableColumns = useMemo11(() => {
|
|
@@ -12111,7 +12263,7 @@ function useWhatsAppState(props) {
|
|
|
12111
12263
|
return type === "RELATION" || type === "BOOLEAN";
|
|
12112
12264
|
});
|
|
12113
12265
|
}, [tableColumns2]);
|
|
12114
|
-
const [referencedTableSchemas, setReferencedTableSchemas] =
|
|
12266
|
+
const [referencedTableSchemas, setReferencedTableSchemas] = useState18({});
|
|
12115
12267
|
const subtableCols = useMemo11(() => {
|
|
12116
12268
|
return (tableColumns2 || []).filter((col) => {
|
|
12117
12269
|
var _a2;
|
|
@@ -12119,7 +12271,7 @@ function useWhatsAppState(props) {
|
|
|
12119
12271
|
return type === "RELATION" || type === "SUB_TABLE" || type === "SUBTABLE";
|
|
12120
12272
|
});
|
|
12121
12273
|
}, [tableColumns2]);
|
|
12122
|
-
|
|
12274
|
+
useEffect16(() => {
|
|
12123
12275
|
if (!executeAction) return;
|
|
12124
12276
|
const unrequestedCols = subtableCols.filter((col) => {
|
|
12125
12277
|
var _a2;
|
|
@@ -12172,13 +12324,13 @@ function useWhatsAppState(props) {
|
|
|
12172
12324
|
const phoneColumns = useMemo11(() => {
|
|
12173
12325
|
return targetPhoneOptions.map((opt) => ({ name: opt.label, id: opt.id, type: "PHONE" }));
|
|
12174
12326
|
}, [targetPhoneOptions]);
|
|
12175
|
-
const [phoneColumnId, setPhoneColumnId] =
|
|
12176
|
-
const [subtableFilterColumn, setSubtableFilterColumn] =
|
|
12177
|
-
const [subtableFilterValue, setSubtableFilterValue] =
|
|
12178
|
-
const [subtableSendLimit, setSubtableSendLimit] =
|
|
12327
|
+
const [phoneColumnId, setPhoneColumnId] = useState18("");
|
|
12328
|
+
const [subtableFilterColumn, setSubtableFilterColumn] = useState18("");
|
|
12329
|
+
const [subtableFilterValue, setSubtableFilterValue] = useState18("");
|
|
12330
|
+
const [subtableSendLimit, setSubtableSendLimit] = useState18(
|
|
12179
12331
|
(settings == null ? void 0 : settings.subtableSendLimit) || "PRIMARY"
|
|
12180
12332
|
);
|
|
12181
|
-
|
|
12333
|
+
useEffect16(() => {
|
|
12182
12334
|
if (targetPhoneOptions.length > 0) {
|
|
12183
12335
|
const isValid = targetPhoneOptions.some(
|
|
12184
12336
|
(opt) => opt.id === phoneColumnId || opt.columnName === phoneColumnId
|
|
@@ -12218,10 +12370,10 @@ function useWhatsAppState(props) {
|
|
|
12218
12370
|
const selectedSubtableFilterCol = useMemo11(() => {
|
|
12219
12371
|
return subtableFilterableColumns.find((c) => c.name === subtableFilterColumn);
|
|
12220
12372
|
}, [subtableFilterableColumns, subtableFilterColumn]);
|
|
12221
|
-
const [enablePostSendAction, setEnablePostSendAction] =
|
|
12222
|
-
const [postSendActionColumn, setPostSendActionColumn] =
|
|
12223
|
-
const [postSendActionValue, setPostSendActionValue] =
|
|
12224
|
-
const [postSendActionTargetType, setPostSendActionTargetType] =
|
|
12373
|
+
const [enablePostSendAction, setEnablePostSendAction] = useState18(false);
|
|
12374
|
+
const [postSendActionColumn, setPostSendActionColumn] = useState18("");
|
|
12375
|
+
const [postSendActionValue, setPostSendActionValue] = useState18("");
|
|
12376
|
+
const [postSendActionTargetType, setPostSendActionTargetType] = useState18("MAIN");
|
|
12225
12377
|
const postSendActionTargetOptions = useMemo11(() => {
|
|
12226
12378
|
var _a2, _b2, _c;
|
|
12227
12379
|
const options = [];
|
|
@@ -12273,8 +12425,8 @@ function useWhatsAppState(props) {
|
|
|
12273
12425
|
);
|
|
12274
12426
|
}, [postSendActionTargetOptions, postSendActionColumn]);
|
|
12275
12427
|
const selectedPostSendCol = selectedPostSendOption;
|
|
12276
|
-
const [isTestPromptOpen, setIsTestPromptOpen] =
|
|
12277
|
-
const [testPhoneNumber, setTestPhoneNumber] =
|
|
12428
|
+
const [isTestPromptOpen, setIsTestPromptOpen] = useState18(false);
|
|
12429
|
+
const [testPhoneNumber, setTestPhoneNumber] = useState18(() => {
|
|
12278
12430
|
if (typeof window !== "undefined") {
|
|
12279
12431
|
try {
|
|
12280
12432
|
return localStorage.getItem(STORAGE_KEY_TEST_PHONE) || "";
|
|
@@ -12284,10 +12436,10 @@ function useWhatsAppState(props) {
|
|
|
12284
12436
|
}
|
|
12285
12437
|
return "";
|
|
12286
12438
|
});
|
|
12287
|
-
const [testFeedback, setTestFeedback] =
|
|
12288
|
-
const [isSendingTest, setIsSendingTest] =
|
|
12289
|
-
const [isSendingBroadcast, setIsSendingBroadcast] =
|
|
12290
|
-
const [broadcastProgress, setBroadcastProgress] =
|
|
12439
|
+
const [testFeedback, setTestFeedback] = useState18(null);
|
|
12440
|
+
const [isSendingTest, setIsSendingTest] = useState18(false);
|
|
12441
|
+
const [isSendingBroadcast, setIsSendingBroadcast] = useState18(false);
|
|
12442
|
+
const [broadcastProgress, setBroadcastProgress] = useState18({
|
|
12291
12443
|
current: 0,
|
|
12292
12444
|
total: 0,
|
|
12293
12445
|
successful: 0,
|
|
@@ -12295,8 +12447,8 @@ function useWhatsAppState(props) {
|
|
|
12295
12447
|
skipped: 0,
|
|
12296
12448
|
percent: 0
|
|
12297
12449
|
});
|
|
12298
|
-
const [broadcastSummary, setBroadcastSummary] =
|
|
12299
|
-
const [rowStatusMap, setRowStatusMap] =
|
|
12450
|
+
const [broadcastSummary, setBroadcastSummary] = useState18(null);
|
|
12451
|
+
const [rowStatusMap, setRowStatusMap] = useState18({});
|
|
12300
12452
|
const clearBroadcastSummary = useCallback14(() => {
|
|
12301
12453
|
setBroadcastSummary(null);
|
|
12302
12454
|
}, []);
|
|
@@ -12353,7 +12505,7 @@ function useWhatsAppState(props) {
|
|
|
12353
12505
|
},
|
|
12354
12506
|
[relationOptions, subtableFilterableColumns, postSendActionTargetOptions, tableColumns2, filterableColumns]
|
|
12355
12507
|
);
|
|
12356
|
-
|
|
12508
|
+
useEffect16(() => {
|
|
12357
12509
|
var _a2, _b2, _c, _d, _e;
|
|
12358
12510
|
if (!executeAction) return;
|
|
12359
12511
|
const targets = [];
|
|
@@ -12447,7 +12599,7 @@ function useWhatsAppState(props) {
|
|
|
12447
12599
|
}
|
|
12448
12600
|
});
|
|
12449
12601
|
}, [filterableColumns, selectedPhoneOption, referencedTableSchemas, tableColumns2, executeAction, selectedPostSendOption, orgId]);
|
|
12450
|
-
|
|
12602
|
+
useEffect16(() => {
|
|
12451
12603
|
var _a2, _b2, _c;
|
|
12452
12604
|
if (!executeAction || !selectedSubtableFilterCol) return;
|
|
12453
12605
|
if (((_a2 = selectedSubtableFilterCol.type) == null ? void 0 : _a2.toUpperCase()) !== "RELATION") return;
|
|
@@ -12498,7 +12650,7 @@ function useWhatsAppState(props) {
|
|
|
12498
12650
|
}
|
|
12499
12651
|
})();
|
|
12500
12652
|
}, [selectedSubtableFilterCol, selectedPhoneOption, executeAction, orgId]);
|
|
12501
|
-
|
|
12653
|
+
useEffect16(() => {
|
|
12502
12654
|
var _a2, _b2;
|
|
12503
12655
|
if (!executeAction || !selectedPostSendOption) return;
|
|
12504
12656
|
if (selectedPostSendOption.type !== "RELATION") return;
|
|
@@ -12583,7 +12735,7 @@ function useWhatsAppState(props) {
|
|
|
12583
12735
|
});
|
|
12584
12736
|
}, [rawRecords, filters, filterableColumns]);
|
|
12585
12737
|
const filteredData = filteredRecords;
|
|
12586
|
-
|
|
12738
|
+
useEffect16(() => {
|
|
12587
12739
|
if (autoSelectCount !== null && autoSelectCount > 0) {
|
|
12588
12740
|
isAutoSelectingRef.current = true;
|
|
12589
12741
|
const sliced = filteredData.slice(0, autoSelectCount);
|
|
@@ -12683,14 +12835,14 @@ function useWhatsAppState(props) {
|
|
|
12683
12835
|
return prev;
|
|
12684
12836
|
});
|
|
12685
12837
|
}, [autoSelectCount]);
|
|
12686
|
-
const [templates, setTemplates] =
|
|
12687
|
-
const [selectedTemplateId, setSelectedTemplateId] =
|
|
12688
|
-
const [isLoading, setIsLoading] =
|
|
12689
|
-
const [fetchError, setFetchError] =
|
|
12690
|
-
const [isModalOpen, setIsModalOpen] =
|
|
12691
|
-
const [isDropdownOpen, setIsDropdownOpen] =
|
|
12692
|
-
const [isDeleting, setIsDeleting] =
|
|
12693
|
-
const [feedback, setFeedback] =
|
|
12838
|
+
const [templates, setTemplates] = useState18([]);
|
|
12839
|
+
const [selectedTemplateId, setSelectedTemplateId] = useState18(null);
|
|
12840
|
+
const [isLoading, setIsLoading] = useState18(true);
|
|
12841
|
+
const [fetchError, setFetchError] = useState18(null);
|
|
12842
|
+
const [isModalOpen, setIsModalOpen] = useState18(false);
|
|
12843
|
+
const [isDropdownOpen, setIsDropdownOpen] = useState18(false);
|
|
12844
|
+
const [isDeleting, setIsDeleting] = useState18(false);
|
|
12845
|
+
const [feedback, setFeedback] = useState18(null);
|
|
12694
12846
|
const loadTemplates = useCallback14(async () => {
|
|
12695
12847
|
var _a2, _b2;
|
|
12696
12848
|
if (!executeAction) {
|
|
@@ -12743,7 +12895,7 @@ function useWhatsAppState(props) {
|
|
|
12743
12895
|
setIsLoading(false);
|
|
12744
12896
|
}
|
|
12745
12897
|
}, [executeAction, orgId]);
|
|
12746
|
-
|
|
12898
|
+
useEffect16(() => {
|
|
12747
12899
|
loadTemplates();
|
|
12748
12900
|
}, [loadTemplates]);
|
|
12749
12901
|
const selectedTemplate = useMemo11(() => {
|
|
@@ -12768,8 +12920,8 @@ function useWhatsAppState(props) {
|
|
|
12768
12920
|
}
|
|
12769
12921
|
) || null;
|
|
12770
12922
|
}, [selectedTemplate]);
|
|
12771
|
-
const [headerMediaUrl, setHeaderMediaUrl] =
|
|
12772
|
-
|
|
12923
|
+
const [headerMediaUrl, setHeaderMediaUrl] = useState18("");
|
|
12924
|
+
useEffect16(() => {
|
|
12773
12925
|
if (!templateHeaderComp) {
|
|
12774
12926
|
setHeaderMediaUrl("");
|
|
12775
12927
|
return;
|
|
@@ -12819,7 +12971,7 @@ function useWhatsAppState(props) {
|
|
|
12819
12971
|
);
|
|
12820
12972
|
setHeaderMediaUrl(defaultUrl || "");
|
|
12821
12973
|
}, [templateHeaderComp, selectedTemplate == null ? void 0 : selectedTemplate.name]);
|
|
12822
|
-
const [isUploadingMedia, setIsUploadingMedia] =
|
|
12974
|
+
const [isUploadingMedia, setIsUploadingMedia] = useState18(false);
|
|
12823
12975
|
const handleFileUpload = useCallback14(
|
|
12824
12976
|
async (file, templateName) => {
|
|
12825
12977
|
const tplName = templateName || (selectedTemplate == null ? void 0 : selectedTemplate.name) || "";
|
|
@@ -12864,8 +13016,8 @@ function useWhatsAppState(props) {
|
|
|
12864
13016
|
const templateVariables = useMemo11(() => {
|
|
12865
13017
|
return extractTemplateVariables(selectedTemplate);
|
|
12866
13018
|
}, [selectedTemplate]);
|
|
12867
|
-
const [variableMapping, setVariableMapping] =
|
|
12868
|
-
|
|
13019
|
+
const [variableMapping, setVariableMapping] = useState18({});
|
|
13020
|
+
useEffect16(() => {
|
|
12869
13021
|
setVariableMapping({});
|
|
12870
13022
|
}, [selectedTemplateId]);
|
|
12871
13023
|
const textableColumnOptions = useMemo11(() => {
|
|
@@ -13383,7 +13535,7 @@ function useWhatsAppState(props) {
|
|
|
13383
13535
|
}
|
|
13384
13536
|
|
|
13385
13537
|
// src/components/WhatsAppComponent/ui/TemplateSelectionBlock.tsx
|
|
13386
|
-
import { useRef as
|
|
13538
|
+
import { useRef as useRef17 } from "react";
|
|
13387
13539
|
import {
|
|
13388
13540
|
FileText as FileText3,
|
|
13389
13541
|
Trash2 as Trash23,
|
|
@@ -13426,7 +13578,7 @@ function TemplateSelectionBlock({
|
|
|
13426
13578
|
isUploadingMedia = false,
|
|
13427
13579
|
handleFileUpload
|
|
13428
13580
|
}) {
|
|
13429
|
-
const fileInputRef =
|
|
13581
|
+
const fileInputRef = useRef17(null);
|
|
13430
13582
|
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
13583
|
/* @__PURE__ */ jsxs18("div", { className: "space-y-1.5 shrink-0", children: [
|
|
13432
13584
|
/* @__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 +14545,16 @@ function SettingsAndActionsBlock({
|
|
|
14393
14545
|
}
|
|
14394
14546
|
|
|
14395
14547
|
// src/components/WhatsAppComponent/inbox/useInboxState.ts
|
|
14396
|
-
import { useState as
|
|
14548
|
+
import { useState as useState19, useEffect as useEffect17, useCallback as useCallback15, useRef as useRef18 } from "react";
|
|
14397
14549
|
function useInboxState(orgId, actions) {
|
|
14398
|
-
const [conversations, setConversations] =
|
|
14399
|
-
const [activeConversationId, setActiveConversationId] =
|
|
14400
|
-
const [messages, setMessages] =
|
|
14401
|
-
const [isLoading, setIsLoading] =
|
|
14402
|
-
const [isSending, setIsSending] =
|
|
14403
|
-
const [error, setError] =
|
|
14404
|
-
const actionsRef =
|
|
14405
|
-
|
|
14550
|
+
const [conversations, setConversations] = useState19([]);
|
|
14551
|
+
const [activeConversationId, setActiveConversationId] = useState19(null);
|
|
14552
|
+
const [messages, setMessages] = useState19([]);
|
|
14553
|
+
const [isLoading, setIsLoading] = useState19(false);
|
|
14554
|
+
const [isSending, setIsSending] = useState19(false);
|
|
14555
|
+
const [error, setError] = useState19(null);
|
|
14556
|
+
const actionsRef = useRef18(actions);
|
|
14557
|
+
useEffect17(() => {
|
|
14406
14558
|
actionsRef.current = actions;
|
|
14407
14559
|
});
|
|
14408
14560
|
const fetchConversations = useCallback15(async () => {
|
|
@@ -14427,7 +14579,7 @@ function useInboxState(orgId, actions) {
|
|
|
14427
14579
|
}
|
|
14428
14580
|
if (!silent) setIsLoading(false);
|
|
14429
14581
|
}, []);
|
|
14430
|
-
|
|
14582
|
+
useEffect17(() => {
|
|
14431
14583
|
fetchConversations();
|
|
14432
14584
|
const interval = setInterval(() => {
|
|
14433
14585
|
fetchConversations();
|
|
@@ -14526,17 +14678,17 @@ function ConversationList({ conversations, activeId, onSelect }) {
|
|
|
14526
14678
|
}
|
|
14527
14679
|
|
|
14528
14680
|
// src/components/WhatsAppComponent/inbox/ChatWindow.tsx
|
|
14529
|
-
import { useState as
|
|
14681
|
+
import { useState as useState20, useRef as useRef19, useEffect as useEffect18 } from "react";
|
|
14530
14682
|
import { Send as Send2, User as User2, Loader2 as Loader27 } from "lucide-react";
|
|
14531
14683
|
import { jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
14532
14684
|
function ChatWindow({ activeConversation, messages, isLoading, isSending, onSendMessage }) {
|
|
14533
|
-
const [inputText, setInputText] =
|
|
14534
|
-
const messagesTopRef =
|
|
14685
|
+
const [inputText, setInputText] = useState20("");
|
|
14686
|
+
const messagesTopRef = useRef19(null);
|
|
14535
14687
|
const scrollToTop = () => {
|
|
14536
14688
|
var _a;
|
|
14537
14689
|
(_a = messagesTopRef.current) == null ? void 0 : _a.scrollIntoView({ behavior: "smooth" });
|
|
14538
14690
|
};
|
|
14539
|
-
|
|
14691
|
+
useEffect18(() => {
|
|
14540
14692
|
scrollToTop();
|
|
14541
14693
|
}, [messages.length, activeConversation == null ? void 0 : activeConversation.id]);
|
|
14542
14694
|
const handleSend = (e) => {
|
|
@@ -15057,18 +15209,18 @@ function WhatsAppComponent(props) {
|
|
|
15057
15209
|
}
|
|
15058
15210
|
|
|
15059
15211
|
// src/components/FormBlock/FormBlock.tsx
|
|
15060
|
-
import { useState as
|
|
15212
|
+
import { useState as useState21, useEffect as useEffect19 } from "react";
|
|
15061
15213
|
import { Loader2 as Loader29, CheckCircle2 as CheckCircle25 } from "lucide-react";
|
|
15062
15214
|
import { jsx as jsx28, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
15063
15215
|
function FormBlock({ settings: schema, executeAction, componentId, className = "", onSuccess }) {
|
|
15064
15216
|
const { showError, addToast } = useToast();
|
|
15065
|
-
const [formData, setFormData] =
|
|
15066
|
-
const [isSubmitting, setIsSubmitting] =
|
|
15067
|
-
const [isSubmitted, setIsSubmitted] =
|
|
15068
|
-
const [columns, setColumns] =
|
|
15069
|
-
const [isLoadingSchema, setIsLoadingSchema] =
|
|
15217
|
+
const [formData, setFormData] = useState21({});
|
|
15218
|
+
const [isSubmitting, setIsSubmitting] = useState21(false);
|
|
15219
|
+
const [isSubmitted, setIsSubmitted] = useState21(false);
|
|
15220
|
+
const [columns, setColumns] = useState21((schema == null ? void 0 : schema.columns) || []);
|
|
15221
|
+
const [isLoadingSchema, setIsLoadingSchema] = useState21(false);
|
|
15070
15222
|
const targetTableId = (schema == null ? void 0 : schema.tableMetaId) || (schema == null ? void 0 : schema.tableId) || (schema == null ? void 0 : schema.id);
|
|
15071
|
-
|
|
15223
|
+
useEffect19(() => {
|
|
15072
15224
|
let isMounted = true;
|
|
15073
15225
|
if ((!(schema == null ? void 0 : schema.columns) || schema.columns.length === 0) && targetTableId && executeAction) {
|
|
15074
15226
|
setIsLoadingSchema(true);
|
|
@@ -15233,6 +15385,7 @@ export {
|
|
|
15233
15385
|
COLUMN_TYPE_LABELS,
|
|
15234
15386
|
ColumnHeaderTitle,
|
|
15235
15387
|
CreateTemplateModal,
|
|
15388
|
+
DEFAULT_FILTER_COLUMN_TYPES,
|
|
15236
15389
|
DEFAULT_PLACEMENT_STATUS_COLORS,
|
|
15237
15390
|
DatePickerCell,
|
|
15238
15391
|
DynamicFiltersBlock,
|
|
@@ -15247,6 +15400,7 @@ export {
|
|
|
15247
15400
|
RELATION_BUTTON_COUNTS_ACTION,
|
|
15248
15401
|
RELATION_LABEL_KEY,
|
|
15249
15402
|
RELATION_SEP,
|
|
15403
|
+
RESOLVE_DEFAULT_FILTERS_ACTION,
|
|
15250
15404
|
RelationFilterPopover,
|
|
15251
15405
|
RelationPickerCell,
|
|
15252
15406
|
SettingsAndActionsBlock,
|
|
@@ -15267,6 +15421,7 @@ export {
|
|
|
15267
15421
|
buildRelationRef,
|
|
15268
15422
|
calculateMinColumnWidth,
|
|
15269
15423
|
checkElementTruncation,
|
|
15424
|
+
cleanPlacementFilterDefaults,
|
|
15270
15425
|
cn,
|
|
15271
15426
|
columnRefLabel,
|
|
15272
15427
|
computeFormulaValue,
|
|
@@ -15282,6 +15437,8 @@ export {
|
|
|
15282
15437
|
formatTimeInput,
|
|
15283
15438
|
formatTimeIso,
|
|
15284
15439
|
generateWhatsAppLink,
|
|
15440
|
+
getColumnDefaultFilter,
|
|
15441
|
+
getDefaultFilterColumns,
|
|
15285
15442
|
getDeterministicPastelBadge,
|
|
15286
15443
|
getEligibleCopyTargets,
|
|
15287
15444
|
getNextVariableIndex,
|
|
@@ -15317,11 +15474,14 @@ export {
|
|
|
15317
15474
|
renameCopyTarget,
|
|
15318
15475
|
resolveDefaultStatusId,
|
|
15319
15476
|
resolveProtocol,
|
|
15477
|
+
sanitizeDefaultFilter,
|
|
15320
15478
|
sanitizePhoneNumber,
|
|
15321
15479
|
sanitizeTemplateNameInput,
|
|
15322
15480
|
seamlessVariableEngine,
|
|
15323
15481
|
splitHeaderTitle,
|
|
15482
|
+
supportsDefaultFilter,
|
|
15324
15483
|
tableColumns,
|
|
15484
|
+
toColumnFilterValue,
|
|
15325
15485
|
useColumnReorder,
|
|
15326
15486
|
useColumnResize,
|
|
15327
15487
|
useSmartTooltip,
|
|
@@ -15333,5 +15493,6 @@ export {
|
|
|
15333
15493
|
validateTemplateBody,
|
|
15334
15494
|
validateTemplateButtons,
|
|
15335
15495
|
validateWhatsAppTemplate,
|
|
15336
|
-
validateWordToVariableRatio
|
|
15496
|
+
validateWordToVariableRatio,
|
|
15497
|
+
withDefaultFilter
|
|
15337
15498
|
};
|