@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.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +497 -315
- package/dist/index.mjs +368 -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";
|
|
@@ -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] =
|
|
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 =
|
|
6157
|
-
|
|
6260
|
+
const executeActionRef = useRef13(executeAction);
|
|
6261
|
+
useEffect13(() => {
|
|
6158
6262
|
executeActionRef.current = executeAction;
|
|
6159
6263
|
}, [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
|
-
|
|
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] =
|
|
6237
|
-
|
|
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] =
|
|
6243
|
-
const dirtyRef =
|
|
6244
|
-
|
|
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] =
|
|
6261
|
-
const [serverRecords, setServerRecords] =
|
|
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] =
|
|
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
|
-
|
|
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] =
|
|
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 =
|
|
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
|
-
|
|
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
|
|
6341
|
-
|
|
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 =
|
|
6348
|
-
|
|
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] =
|
|
6356
|
-
const fetchRequestIdRef =
|
|
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
|
-
|
|
6591
|
+
useEffect13(() => {
|
|
6592
|
+
if (!defaultFiltersReady) return;
|
|
6482
6593
|
fetchTableData(page, limit, debouncedSearch, filtersKey);
|
|
6483
|
-
}, [page, limit, debouncedSearch, filtersKey, fetchTableData]);
|
|
6484
|
-
|
|
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] =
|
|
6576
|
-
const isExternalSyncRef =
|
|
6577
|
-
|
|
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 =
|
|
6590
|
-
|
|
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] =
|
|
6602
|
-
const [isSaving, setIsSaving] =
|
|
6712
|
+
const [pendingDeletions, setPendingDeletions] = useState15([]);
|
|
6713
|
+
const [isSaving, setIsSaving] = useState15(false);
|
|
6603
6714
|
const isUpdatingActive = Boolean(isUpdating || isSaving);
|
|
6604
|
-
const [isSaveSuccess, setIsSaveSuccess] =
|
|
6605
|
-
const [expandedRowIds, setExpandedRowIds] =
|
|
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 =
|
|
6683
|
-
|
|
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
|
-
|
|
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] =
|
|
6773
|
-
const dropdownRef =
|
|
6774
|
-
|
|
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] =
|
|
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
|
|
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 =
|
|
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 =
|
|
9039
|
+
const executeActionRef = useRef14(executeAction);
|
|
8892
9040
|
executeActionRef.current = executeAction;
|
|
8893
|
-
const legacyRef =
|
|
9041
|
+
const legacyRef = useRef14({ fetchSourceData, fetchTargetData, updateAssignment });
|
|
8894
9042
|
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] =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
9255
|
+
const assignedIdsRef = useRef14(assignedIds);
|
|
9092
9256
|
assignedIdsRef.current = assignedIds;
|
|
9093
|
-
|
|
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 =
|
|
9304
|
+
const moveToCandidatesRef = useRef14(moveToCandidates);
|
|
9141
9305
|
moveToCandidatesRef.current = moveToCandidates;
|
|
9142
|
-
const moveToSourceRef =
|
|
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 =
|
|
9268
|
-
const assignedContainerRef =
|
|
9269
|
-
const [sourceApi, setSourceApi] =
|
|
9270
|
-
const [assignedApi, setAssignedApi] =
|
|
9271
|
-
|
|
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
|
|
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] =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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] =
|
|
12178
|
+
const [tableColumns2, setTableColumns] = useState18(() => {
|
|
12015
12179
|
return Array.isArray(settings == null ? void 0 : settings.columns) ? settings.columns : [];
|
|
12016
12180
|
});
|
|
12017
|
-
const [rawRecords, setRawRecords] =
|
|
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] =
|
|
12186
|
+
const [relationOptions, setRelationOptions] = useState18(() => {
|
|
12023
12187
|
return (injectedData == null ? void 0 : injectedData.relationOptions) || {};
|
|
12024
12188
|
});
|
|
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 =
|
|
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
|
-
|
|
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] =
|
|
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
|
-
|
|
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] =
|
|
12176
|
-
const [subtableFilterColumn, setSubtableFilterColumn] =
|
|
12177
|
-
const [subtableFilterValue, setSubtableFilterValue] =
|
|
12178
|
-
const [subtableSendLimit, setSubtableSendLimit] =
|
|
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
|
-
|
|
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] =
|
|
12222
|
-
const [postSendActionColumn, setPostSendActionColumn] =
|
|
12223
|
-
const [postSendActionValue, setPostSendActionValue] =
|
|
12224
|
-
const [postSendActionTargetType, setPostSendActionTargetType] =
|
|
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] =
|
|
12277
|
-
const [testPhoneNumber, setTestPhoneNumber] =
|
|
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] =
|
|
12288
|
-
const [isSendingTest, setIsSendingTest] =
|
|
12289
|
-
const [isSendingBroadcast, setIsSendingBroadcast] =
|
|
12290
|
-
const [broadcastProgress, setBroadcastProgress] =
|
|
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] =
|
|
12299
|
-
const [rowStatusMap, setRowStatusMap] =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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] =
|
|
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] =
|
|
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
|
-
|
|
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] =
|
|
12772
|
-
|
|
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] =
|
|
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] =
|
|
12868
|
-
|
|
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
|
|
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 =
|
|
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
|
|
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] =
|
|
14399
|
-
const [activeConversationId, setActiveConversationId] =
|
|
14400
|
-
const [messages, setMessages] =
|
|
14401
|
-
const [isLoading, setIsLoading] =
|
|
14402
|
-
const [isSending, setIsSending] =
|
|
14403
|
-
const [error, setError] =
|
|
14404
|
-
const actionsRef =
|
|
14405
|
-
|
|
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
|
-
|
|
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
|
|
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] =
|
|
14534
|
-
const messagesTopRef =
|
|
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
|
-
|
|
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
|
|
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] =
|
|
15066
|
-
const [isSubmitting, setIsSubmitting] =
|
|
15067
|
-
const [isSubmitted, setIsSubmitted] =
|
|
15068
|
-
const [columns, setColumns] =
|
|
15069
|
-
const [isLoadingSchema, setIsLoadingSchema] =
|
|
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
|
-
|
|
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
|
};
|