@solidxai/core-ui 0.1.17-beta.2 → 0.1.17

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.
Files changed (37) hide show
  1. package/dist/components/core/card/SolidCardView.d.ts +0 -1
  2. package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
  3. package/dist/components/core/card/SolidCardView.js +2 -2
  4. package/dist/components/core/card/SolidCardView.js.map +1 -1
  5. package/dist/components/core/card/SolidCardView.tsx +0 -3
  6. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  7. package/dist/components/core/common/SolidGlobalSearchElement.js +114 -342
  8. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  9. package/dist/components/core/common/SolidGlobalSearchElement.tsx +47 -285
  10. package/dist/components/core/json/SolidJsonEditor.css +0 -89
  11. package/dist/components/core/kanban/SolidKanbanView.d.ts +0 -1
  12. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  13. package/dist/components/core/kanban/SolidKanbanView.js +1 -3
  14. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  15. package/dist/components/core/kanban/SolidKanbanView.tsx +1 -4
  16. package/dist/components/core/list/SolidListView.d.ts +0 -1
  17. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  18. package/dist/components/core/list/SolidListView.js +1 -2
  19. package/dist/components/core/list/SolidListView.js.map +1 -1
  20. package/dist/components/core/list/SolidListView.tsx +0 -3
  21. package/dist/components/core/tree/SolidTreeView.d.ts +0 -3
  22. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  23. package/dist/components/core/tree/SolidTreeView.js +1 -7
  24. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  25. package/dist/components/core/tree/SolidTreeView.tsx +0 -10
  26. package/dist/constants/error-messages.d.ts +0 -4
  27. package/dist/constants/error-messages.d.ts.map +1 -1
  28. package/dist/constants/error-messages.js +0 -4
  29. package/dist/constants/error-messages.js.map +1 -1
  30. package/dist/constants/error-messages.ts +0 -4
  31. package/dist/resources/solid-custom.css +18 -3
  32. package/dist/resources/themes/solid-dark-enterprise/theme.css +481 -4
  33. package/dist/resources/themes/solid-dark-modern/theme.css +167 -1
  34. package/dist/resources/themes/solid-light-enterprise/theme.css +486 -4
  35. package/dist/resources/themes/solid-light-modern/theme.css +204 -7
  36. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.css +1 -1
  37. package/package.json +1 -1
@@ -1,11 +1,9 @@
1
1
  import React, { forwardRef, useCallback, useEffect, useId, useImperativeHandle, useMemo, useRef, useState } from "react";
2
- import { useDispatch } from "react-redux";
3
2
  import FilterComponent, { FilterOperator, FilterRule, FilterRuleType } from "../../../components/core/common/FilterComponent";
4
3
  import { toTitleCase } from "../../../helpers/helpers";
5
4
  import {clearFilterObjectFromLocalStorage,getFilterObjectFromLocalStorage,setFilterObjectToLocalStorage,
6
5
  } from "./globalSearchPersistence";
7
6
  import { createSolidEntityApi } from "../../../redux/api/solidEntityApi";
8
- import { showToast } from "../../../redux/features/toastSlice";
9
7
  import qs from "qs";
10
8
  import { SolidSaveCustomFilterForm } from "./SolidSaveCustomFilterForm";
11
9
  import { ERROR_MESSAGES } from "../../../constants/error-messages";
@@ -420,12 +418,10 @@ export const mergeAllDiffFilters = (customFilter: any, searchFilter: any, savedF
420
418
  return filters;
421
419
  }
422
420
 
423
- const SavedFilterList = ({ savedfilter, activeSavedFilterReference, activeSavedFilterReferences, applySavedFilter, openSavedCustomFilter, setSavedFilterTobeDeleted, setIsDeleteSQDialogVisible, isFocused, onMouseEnter, optionId }: any) => {
424
- const isActive = activeSavedFilterReferences
425
- ? activeSavedFilterReferences.includes(savedfilter?.systemKey ? `system:${savedfilter.systemKey}` : `id:${savedfilter.id}`)
426
- : savedfilter?.systemKey
427
- ? activeSavedFilterReference === savedfilter.systemKey
428
- : String(activeSavedFilterReference) === String(savedfilter.id);
421
+ const SavedFilterList = ({ savedfilter, activeSavedFilterReference, applySavedFilter, openSavedCustomFilter, setSavedFilterTobeDeleted, setIsDeleteSQDialogVisible, isFocused, onMouseEnter, optionId }: any) => {
422
+ const isActive = savedfilter?.systemKey
423
+ ? activeSavedFilterReference === savedfilter.systemKey
424
+ : String(activeSavedFilterReference) === String(savedfilter.id);
429
425
 
430
426
  return (
431
427
  <div className="solid-saved-filter-item" onMouseEnter={onMouseEnter}>
@@ -440,10 +436,6 @@ const SavedFilterList = ({ savedfilter, activeSavedFilterReference, activeSavedF
440
436
  aria-label={`${savedfilter.name}${isActive ? ", applied" : ""}`}
441
437
  onMouseDown={(e) => {
442
438
  e.preventDefault();
443
- e.stopPropagation();
444
- }}
445
- onClick={(e) => {
446
- e.stopPropagation();
447
439
  applySavedFilter(savedfilter);
448
440
  }}
449
441
  title={savedfilter?.description}
@@ -579,8 +571,7 @@ type RelationCache = Map<string, { label: string; value: number }>;
579
571
 
580
572
 
581
573
 
582
- export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handleApplyCustomFilter, showSaveFilterPopup, setShowSaveFilterPopup, filterPredicates, allowMultipleSavedFilters = false }: any, ref) => {
583
- const dispatch = useDispatch();
574
+ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handleApplyCustomFilter, showSaveFilterPopup, setShowSaveFilterPopup, filterPredicates }: any, ref) => {
584
575
  type OverlayOption =
585
576
  | { id: string; kind: "field"; field: any }
586
577
  | { id: string; kind: "predefined"; predefined: any }
@@ -690,8 +681,6 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
690
681
  const [currentSavedFilterQuery, setCurrentSavedFilterQuery] = useState<any>();
691
682
  const [currentSavedFilterVariables, setCurrentSavedFilterVariables] = useState<Record<string, any>>({});
692
683
  const [currentSavedFilterRules, setCurrentSavedFilterRules] = useState<any>();
693
- const [activeSavedFilters, setActiveSavedFilters] = useState<any[]>([]);
694
- const [editingSavedFilterKey, setEditingSavedFilterKey] = useState<string | null>(null);
695
684
  const [showSavedFilterComponent, setShowSavedFilterComponent] = useState<boolean>(false);
696
685
 
697
686
 
@@ -845,27 +834,6 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
845
834
  viewData?.data?.solidView?.model?.id,
846
835
  user?.id
847
836
  ])
848
-
849
- const getSavedFilterKey = (savedFilter: any) =>
850
- savedFilter?.systemKey ? `system:${savedFilter.systemKey}` : `id:${savedFilter?.id}`;
851
-
852
- const getPersistedSavedFilterItems = (queryObject: any): any[] => {
853
- if (!allowMultipleSavedFilters) return [];
854
- if (Array.isArray(queryObject?.saved_filter_items)) {
855
- return queryObject.saved_filter_items;
856
- }
857
- if (queryObject?.saved_filter_predicate) {
858
- return [{
859
- id: queryObject.saved_filter_id,
860
- systemKey: queryObject.saved_filter_system_key,
861
- name: queryObject.saved_filter_name || "Saved Filter",
862
- predicate: queryObject.saved_filter_predicate,
863
- variables: queryObject.saved_filter_variables || {},
864
- }];
865
- }
866
- return [];
867
- };
868
-
869
837
  // Updates search, custom filter, grouping, aggregation, and UI state from a single shared filter source.
870
838
  const syncFilterUiStateFromSharedSource = useCallback(async (queryObject: any | null) => {
871
839
  const nextSearchFilter = queryObject?.search_predicate || null;
@@ -879,33 +847,9 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
879
847
  nextPredefinedBaseFilter && queryObject?.predefined_search_chip
880
848
  ? queryObject.predefined_search_chip
881
849
  : null;
882
- const persistedSavedFilterItems = getPersistedSavedFilterItems(queryObject);
883
- const nextSavedFilterItems = allowMultipleSavedFilters
884
- ? persistedSavedFilterItems.map((item: any) => {
885
- const savedFilter = availableSavedFilters.find((candidate: any) =>
886
- item?.systemKey
887
- ? candidate?.systemKey === item.systemKey
888
- : String(candidate?.id) === String(item?.id)
889
- );
890
- return {
891
- data: savedFilter || {
892
- id: item?.id,
893
- systemKey: item?.systemKey,
894
- name: item?.name || "Saved Filter",
895
- filterQueryJson: JSON.stringify(item?.predicate || {}),
896
- },
897
- query: item?.predicate || {},
898
- variables: item?.variables || {},
899
- };
900
- })
901
- : [];
902
- const nextSavedFilter = allowMultipleSavedFilters
903
- ? (nextSavedFilterItems.length > 0 ? { $or: nextSavedFilterItems.map((item: any) => item.query) } : null)
904
- : queryObject?.saved_filter_predicate || null;
850
+ const nextSavedFilter = queryObject?.saved_filter_predicate || null;
905
851
  const nextSavedFilterVariables = queryObject?.saved_filter_variables ?? {};
906
- const nextSavedFilterData = allowMultipleSavedFilters
907
- ? (nextSavedFilterItems.length > 0 ? nextSavedFilterItems[nextSavedFilterItems.length - 1].data : null)
908
- : nextSavedFilter
852
+ const nextSavedFilterData = nextSavedFilter
909
853
  ? availableSavedFilters.find((savedFilter: any) => {
910
854
  if (queryObject?.saved_filter_system_key) {
911
855
  return savedFilter?.systemKey === queryObject.saved_filter_system_key;
@@ -930,7 +874,6 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
930
874
  setCurrentSavedFilterData((prev: any) => areFilterStateValuesEqual(prev, nextSavedFilterData) ? prev : nextSavedFilterData);
931
875
  setCurrentSavedFilterQuery((prev: any) => areFilterStateValuesEqual(prev, nextSavedFilter) ? prev : nextSavedFilter);
932
876
  setCurrentSavedFilterVariables((prev) => areFilterStateValuesEqual(prev, nextSavedFilterVariables) ? prev : nextSavedFilterVariables);
933
- setActiveSavedFilters((prev) => areFilterStateValuesEqual(prev, nextSavedFilterItems) ? prev : nextSavedFilterItems);
934
877
 
935
878
  if (nextCustomFilter && viewData?.data) {
936
879
  const rules: FilterRule = transformFiltersToRules(nextCustomFilter);
@@ -966,7 +909,7 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
966
909
 
967
910
  setGroupingRules((prev) => areFilterStateValuesEqual(prev, nextGroupingRules) ? prev : nextGroupingRules);
968
911
  setAggregationRules((prev) => areFilterStateValuesEqual(prev, nextAggregationRules) ? prev : nextAggregationRules);
969
- }, [allowMultipleSavedFilters, availableSavedFilters, initialState, viewData]);
912
+ }, [availableSavedFilters, initialState, viewData]);
970
913
 
971
914
  const resetAppliedFilters = ({ preserveGrouping = false }: { preserveGrouping?: boolean } = {}) => {
972
915
  setSearchChips([]);
@@ -979,8 +922,6 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
979
922
  setCurrentSavedFilterQuery(null);
980
923
  setCurrentSavedFilterVariables({});
981
924
  setCurrentSavedFilterRules(null);
982
- setActiveSavedFilters([]);
983
- setEditingSavedFilterKey(null);
984
925
  if (!preserveGrouping) {
985
926
  setGroupingRules(defaultGroupingRules);
986
927
  setAggregationRules(defaultAggregationRules);
@@ -1280,15 +1221,6 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1280
1221
  // };
1281
1222
  // }
1282
1223
  setCurrentSavedFilterQuery(finalCustomFilter);
1283
- if (allowMultipleSavedFilters && editingSavedFilterKey) {
1284
- const nextItems = activeSavedFilters.map((item: any) =>
1285
- getSavedFilterKey(item.data) === editingSavedFilterKey
1286
- ? { ...item, query: finalCustomFilter }
1287
- : item
1288
- );
1289
- setActiveSavedFilters(nextItems);
1290
- persistActiveSavedFilters(nextItems);
1291
- }
1292
1224
  setShowSavedFilterComponent(false);
1293
1225
  setHasSearched(true)
1294
1226
  setRefreshKey((prev) => prev + 1)
@@ -1330,9 +1262,7 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1330
1262
  const finalSearchFilter = tranformSearchToFilters(formattedChips);
1331
1263
  setSearchFilter(finalSearchFilter);
1332
1264
 
1333
- const finalSavedFilter: any = allowMultipleSavedFilters
1334
- ? (activeSavedFilters.length > 0 ? { $or: activeSavedFilters.map((item: any) => item.query) } : null)
1335
- : currentSavedFilterQuery;
1265
+ let finalSavedFilter: any = currentSavedFilterQuery
1336
1266
  const finalPredefinedFilter = predefinedSearchBaseFilter
1337
1267
 
1338
1268
  const finalCustomFilter = customFilter
@@ -1341,31 +1271,19 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1341
1271
  finalPredefinedFilter && predefinedSearchChip
1342
1272
  ? predefinedSearchChip
1343
1273
  : null;
1344
- if (allowMultipleSavedFilters && activeSavedFilters.length > 0) {
1345
- const resolvedItems = activeSavedFilters.map((item: any) => resolveSavedFilterVariables(item.query, user?.id, item.variables || {}));
1346
- if (resolvedItems.some((item: any) => item.missingVariables.length > 0)) return;
1347
- finalFilter.resolved_saved_filter_predicate = { $or: resolvedItems.map((item: any) => item.value) };
1348
- finalFilter.saved_filter_variables = {};
1349
- finalFilter.saved_filter_items = activeSavedFilters.map((item: any) => ({
1350
- id: item.data?.id ?? null,
1351
- systemKey: item.data?.systemKey ?? null,
1352
- name: item.data?.name ?? null,
1353
- predicate: item.query,
1354
- variables: item.variables || {},
1355
- }));
1356
- } else if (finalSavedFilter && Object.keys(finalSavedFilter).length > 0) {
1274
+ if (finalSavedFilter && Object.keys(finalSavedFilter).length > 0) {
1357
1275
  const resolved = resolveSavedFilterVariables(finalSavedFilter, user?.id, currentSavedFilterVariables);
1358
1276
  if (resolved.missingVariables.length > 0) return;
1359
1277
  finalFilter.resolved_saved_filter_predicate = resolved.value;
1360
1278
  finalFilter.saved_filter_variables = currentSavedFilterVariables;
1361
1279
  }
1362
- if (!allowMultipleSavedFilters && currentSavedFilterData?.id) {
1280
+ if (currentSavedFilterData?.id) {
1363
1281
  finalFilter.saved_filter_id = currentSavedFilterData.id;
1364
1282
  }
1365
- if (!allowMultipleSavedFilters && currentSavedFilterData?.systemKey) {
1283
+ if (currentSavedFilterData?.systemKey) {
1366
1284
  finalFilter.saved_filter_system_key = currentSavedFilterData.systemKey;
1367
1285
  }
1368
- if (!allowMultipleSavedFilters && currentSavedFilterData?.name) {
1286
+ if (currentSavedFilterData?.name) {
1369
1287
  finalFilter.saved_filter_name = currentSavedFilterData.name;
1370
1288
  }
1371
1289
  handleApplyCustomFilter(finalFilter, true);
@@ -1397,19 +1315,16 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1397
1315
  // }
1398
1316
 
1399
1317
 
1400
- if (!allowMultipleSavedFilters) {
1401
- setSearchChips([]);
1402
- setSearchFilter(null);
1403
- setFilterRules(initialState);
1404
- setCustomFilter(null)
1405
- setPredefinedSearchChip(null);
1406
- setPredefinedSearchBaseFilter(null);
1407
- }
1318
+ setSearchChips([]);
1319
+ setSearchFilter(null);
1320
+ setFilterRules(initialState);
1321
+ setCustomFilter(null)
1322
+ setPredefinedSearchChip(null);
1323
+ setPredefinedSearchBaseFilter(null);
1408
1324
 
1409
1325
  if (savedfilter?.id) {
1410
1326
  const savedfilterId = savedfilter.id;
1411
1327
  setShowOverlay(false);
1412
- setEditingSavedFilterKey(getSavedFilterKey(savedfilter));
1413
1328
  const currentSavedFilterData: any = availableSavedFilters.find((savedFilter: any) => savedFilter.id === savedfilterId);
1414
1329
  setCurrentSavedFilterData(currentSavedFilterData);
1415
1330
  if (currentSavedFilterData) {
@@ -1431,32 +1346,7 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1431
1346
  }
1432
1347
  }
1433
1348
 
1434
- const persistActiveSavedFilters = (items: any[]) => {
1435
- const first = items[0];
1436
- const persistedFilter = {
1437
- ...(getFilterObjectFromLocalStorage() || {}),
1438
- saved_filter_items: items.map((item) => ({
1439
- id: item.data?.id ?? null,
1440
- systemKey: item.data?.systemKey ?? null,
1441
- name: item.data?.name ?? null,
1442
- predicate: item.query,
1443
- variables: item.variables || {},
1444
- })),
1445
- saved_filter_predicate: items.length > 0 ? (items.length === 1 ? first.query : { $or: items.map((item) => item.query) }) : null,
1446
- saved_filter_variables: items.length === 1 ? (first.variables || {}) : {},
1447
- saved_filter_id: items.length === 1 ? first.data?.id ?? null : null,
1448
- saved_filter_system_key: items.length === 1 ? first.data?.systemKey ?? null : null,
1449
- saved_filter_name: items.length === 1 ? first.data?.name ?? null : null,
1450
- };
1451
- delete persistedFilter.finalFullFilter;
1452
- setFilterObjectToLocalStorage(persistedFilter);
1453
- };
1454
-
1455
1349
  const persistActiveSavedFilter = (savedFilter: any, filterJson: any, variables: Record<string, any>) => {
1456
- if (allowMultipleSavedFilters) {
1457
- persistActiveSavedFilters([{ data: savedFilter, query: filterJson, variables }]);
1458
- return;
1459
- }
1460
1350
  const persistedFilter = {
1461
1351
  ...(getFilterObjectFromLocalStorage() || {}),
1462
1352
  custom_filter_predicate: null,
@@ -1482,7 +1372,6 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1482
1372
 
1483
1373
  const persistedFilter = {
1484
1374
  ...(getFilterObjectFromLocalStorage() || {}),
1485
- saved_filter_items: [],
1486
1375
  saved_filter_predicate: null,
1487
1376
  saved_filter_variables: {},
1488
1377
  saved_filter_id: null,
@@ -1497,40 +1386,15 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1497
1386
  };
1498
1387
 
1499
1388
  const deleteSavedFilter = async () => {
1500
- try {
1501
- await deleteEntity(savedFilterTobeDeleted).unwrap();
1502
- dispatch(showToast({
1503
- severity: "success",
1504
- summary: ERROR_MESSAGES.DELETED,
1505
- detail: ERROR_MESSAGES.ENTITY_DELETE,
1506
- }));
1507
-
1508
- if (allowMultipleSavedFilters) {
1509
- const nextItems = activeSavedFilters.filter((item: any) => String(item.data?.id) !== String(savedFilterTobeDeleted));
1510
- setActiveSavedFilters(nextItems);
1511
- if (String(savedFilterTobeDeleted) === String(currentSavedFilterData?.id)) {
1512
- setCurrentSavedFilterData(null);
1513
- setCurrentSavedFilterQuery(null);
1514
- setCurrentSavedFilterVariables({});
1515
- }
1516
- persistActiveSavedFilters(nextItems);
1517
- setHasSearched(true);
1518
- setRefreshKey((prev) => prev + 1);
1519
- } else if (String(savedFilterTobeDeleted) === String(currentSavedFilterData?.id)) {
1520
- removeSavedFilter();
1521
- }
1522
- setIsDeleteSQDialogVisible(false);
1523
- setTimeout(() => {
1524
- setSavedFilterFetchDataRefreshKey(prev => prev + 1)
1525
- }, 500)
1526
- } catch (error: any) {
1527
- const errorMessage = error?.data?.message || error?.data?.error || error?.message || ERROR_MESSAGES.SOMETHING_WRONG;
1528
- dispatch(showToast({
1529
- severity: "error",
1530
- summary: ERROR_MESSAGES.DELETE_FAIELD,
1531
- detail: errorMessage,
1532
- }));
1389
+ // delte the saved filter with id
1390
+ await deleteEntity(savedFilterTobeDeleted);
1391
+ if (String(savedFilterTobeDeleted) === String(currentSavedFilterData?.id)) {
1392
+ clearActiveSavedFilter();
1533
1393
  }
1394
+ setIsDeleteSQDialogVisible(false);
1395
+ setTimeout(() => {
1396
+ setSavedFilterFetchDataRefreshKey(prev => prev + 1)
1397
+ }, 500)
1534
1398
  }
1535
1399
  const handleSaveFilter = async (formValues: any) => {
1536
1400
  setShowSaveFilterPopup(false)
@@ -1547,20 +1411,13 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1547
1411
  formData.append("userId", user?.id);
1548
1412
 
1549
1413
  await updateEntity({ id: +formValues.id, data: formData }).unwrap();
1550
- dispatch(showToast({
1551
- severity: "success",
1552
- summary: ERROR_MESSAGES.SAVED_FILTER_UPDATED,
1553
- detail: ERROR_MESSAGES.SAVED_FILTER_UPDATED_SUCCESSFULLY,
1554
- }));
1555
-
1556
- if (!allowMultipleSavedFilters) {
1557
- setSearchChips([]);
1558
- setSearchFilter(null);
1559
- setFilterRules(initialState);
1560
- setCustomFilter(null)
1561
- setPredefinedSearchChip(null);
1562
- setPredefinedSearchBaseFilter(null);
1563
- }
1414
+
1415
+ setSearchChips([]);
1416
+ setSearchFilter(null);
1417
+ setFilterRules(initialState);
1418
+ setCustomFilter(null)
1419
+ setPredefinedSearchChip(null);
1420
+ setPredefinedSearchBaseFilter(null);
1564
1421
  // Apply the rename immediately, both to the active filter and to
1565
1422
  // the cached list — otherwise the list still holds the pre-rename
1566
1423
  // entry, which wins the id-based lookup the next time saved-filter
@@ -1570,17 +1427,7 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1570
1427
  setSavedFilters((prev) => prev.map((f: any) => String(f?.id) === String(formValues.id) ? { ...f, ...savedFilterRecord } : f));
1571
1428
  setCurrentSavedFilterData(savedFilterRecord);
1572
1429
  setCurrentSavedFilterQuery(filterJson);
1573
- if (allowMultipleSavedFilters) {
1574
- const nextItems = activeSavedFilters.map((item: any) =>
1575
- getSavedFilterKey(item.data) === getSavedFilterKey(savedFilterRecord)
1576
- ? { data: savedFilterRecord, query: filterJson, variables: currentSavedFilterVariables }
1577
- : item
1578
- );
1579
- setActiveSavedFilters(nextItems);
1580
- persistActiveSavedFilters(nextItems);
1581
- } else {
1582
- persistActiveSavedFilter(savedFilterRecord, filterJson, currentSavedFilterVariables);
1583
- }
1430
+ persistActiveSavedFilter(savedFilterRecord, filterJson, currentSavedFilterVariables);
1584
1431
  setHasSearched(true);
1585
1432
  setRefreshKey((prev) => prev + 1);
1586
1433
  } else {
@@ -1594,11 +1441,6 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1594
1441
  formData.append("isPrivate", formValues.isPrivate);
1595
1442
  formData.append("userId", user?.id);
1596
1443
  const result = await createEntity(formData).unwrap();
1597
- dispatch(showToast({
1598
- severity: "success",
1599
- summary: ERROR_MESSAGES.SAVED_FILTER_CREATED,
1600
- detail: ERROR_MESSAGES.SAVED_FILTER_CREATED_SUCCESSFULLY,
1601
- }));
1602
1444
 
1603
1445
  setSearchChips([]);
1604
1446
  setSearchFilter(null);
@@ -1608,31 +1450,17 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1608
1450
  setPredefinedSearchBaseFilter(null);
1609
1451
  // The custom filter just became this saved filter — apply it, and
1610
1452
  // seed the cached list with it, immediately (see rename branch above).
1611
- // A newly created saved filter replaces any other active filters/saved
1612
- // filters rather than joining them — only applying an existing saved
1613
- // filter is additive when allowMultipleSavedFilters is on.
1614
1453
  const savedFilterRecord = { id: result.data.id, name: formValues.name, isPrivate: formValues.isPrivate, filterQueryJson: JSON.stringify(filterJson, null, 2) };
1615
1454
  setSavedFilters((prev) => [savedFilterRecord, ...prev]);
1616
1455
  setCurrentSavedFilterData(savedFilterRecord);
1617
1456
  setCurrentSavedFilterQuery(filterJson);
1618
1457
  setCurrentSavedFilterVariables({});
1619
- if (allowMultipleSavedFilters) {
1620
- const nextItems = [{ data: savedFilterRecord, query: filterJson, variables: {} }];
1621
- setActiveSavedFilters(nextItems);
1622
- persistActiveSavedFilters(nextItems);
1623
- } else {
1624
- persistActiveSavedFilter(savedFilterRecord, filterJson, {});
1625
- }
1458
+ persistActiveSavedFilter(savedFilterRecord, filterJson, {});
1626
1459
  setHasSearched(true);
1627
1460
  setRefreshKey((prev) => prev + 1);
1628
1461
  }
1629
- } catch (error: any) {
1630
- const errorMessage = error?.data?.message || error?.data?.error || error?.message || ERROR_MESSAGES.SOMETHING_WRONG;
1631
- dispatch(showToast({
1632
- severity: "error",
1633
- summary: ERROR_MESSAGES.ERROR,
1634
- detail: errorMessage,
1635
- }));
1462
+ } catch (error) {
1463
+
1636
1464
  }
1637
1465
  }
1638
1466
 
@@ -1725,28 +1553,6 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1725
1553
  return false;
1726
1554
  }
1727
1555
 
1728
- if (allowMultipleSavedFilters) {
1729
- const key = getSavedFilterKey(savedfilter);
1730
- const nextItem = { data: savedfilter, query: filterJson, variables };
1731
- const existingItem = activeSavedFilters.find((item: any) => getSavedFilterKey(item.data) === key);
1732
- if (existingItem && areFilterStateValuesEqual(existingItem.query, filterJson) && areFilterStateValuesEqual(existingItem.variables, variables)) {
1733
- return true;
1734
- }
1735
- const nextItems = existingItem
1736
- ? activeSavedFilters.map((item: any) => getSavedFilterKey(item.data) === key ? nextItem : item)
1737
- : [...activeSavedFilters, nextItem];
1738
- setActiveSavedFilters(nextItems);
1739
- setCurrentSavedFilterData(savedfilter);
1740
- setCurrentSavedFilterQuery(filterJson);
1741
- setCurrentSavedFilterVariables(variables);
1742
- setEditingSavedFilterKey(null);
1743
- persistActiveSavedFilters(nextItems);
1744
- setShowOverlay(false);
1745
- setHasSearched(true);
1746
- setRefreshKey((prev) => prev + 1);
1747
- return true;
1748
- }
1749
-
1750
1556
  // Applying the already-active filter must be a no-op. This is important
1751
1557
  // for lifecycle extensions: applying a filter causes a new list load,
1752
1558
  // which invokes onBeforeListDataLoad/onListLoad again.
@@ -1783,19 +1589,6 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1783
1589
  }
1784
1590
 
1785
1591
  const removeSavedFilter = () => {
1786
- if (allowMultipleSavedFilters) {
1787
- const key = getSavedFilterKey(currentSavedFilterData);
1788
- const nextItems = activeSavedFilters.filter((item: any) => getSavedFilterKey(item.data) !== key);
1789
- setActiveSavedFilters(nextItems);
1790
- setCurrentSavedFilterData(null);
1791
- setCurrentSavedFilterQuery(null);
1792
- setCurrentSavedFilterVariables({});
1793
- setEditingSavedFilterKey(null);
1794
- persistActiveSavedFilters(nextItems);
1795
- setHasSearched(true);
1796
- setRefreshKey((prev) => prev + 1);
1797
- return;
1798
- }
1799
1592
  clearActiveSavedFilter();
1800
1593
  }
1801
1594
 
@@ -1905,35 +1698,14 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1905
1698
  const managedChipItems = useMemo<ManagedChipItem[]>(() => {
1906
1699
  const items: ManagedChipItem[] = [];
1907
1700
 
1908
- const savedItems = allowMultipleSavedFilters
1909
- ? activeSavedFilters
1910
- : (currentSavedFilterData?.name ? [{ data: currentSavedFilterData }] : []);
1911
- savedItems.forEach((item: any) => {
1912
- if (item.data?.name) {
1913
- items.push({
1914
- id: `saved-filter:${getSavedFilterKey(item.data)}`,
1915
- type: "saved",
1916
- label: `Saved: ${item.data.name}`,
1917
- onRemove: () => {
1918
- if (!allowMultipleSavedFilters) {
1919
- removeSavedFilter();
1920
- return;
1921
- }
1922
- const nextItems = activeSavedFilters.filter((active: any) => getSavedFilterKey(active.data) !== getSavedFilterKey(item.data));
1923
- setActiveSavedFilters(nextItems);
1924
- if (getSavedFilterKey(currentSavedFilterData) === getSavedFilterKey(item.data)) {
1925
- setCurrentSavedFilterData(null);
1926
- setCurrentSavedFilterQuery(null);
1927
- setCurrentSavedFilterVariables({});
1928
- }
1929
- persistActiveSavedFilters(nextItems);
1930
- setHasSearched(true);
1931
- setRefreshKey((prev) => prev + 1);
1932
- },
1933
- ...(allowMultipleSavedFilters ? { onOpen: () => openSavedCustomFilter(item.data) } : {}),
1934
- });
1935
- }
1936
- });
1701
+ if (currentSavedFilterData?.name) {
1702
+ items.push({
1703
+ id: "saved-filter",
1704
+ type: "saved",
1705
+ label: `Saved: ${currentSavedFilterData.name}`,
1706
+ onRemove: () => removeSavedFilter(),
1707
+ });
1708
+ }
1937
1709
 
1938
1710
  if (predefinedSearchChip?.name && predefinedSearchChip?.value) {
1939
1711
  items.push({
@@ -1979,8 +1751,6 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1979
1751
  return items;
1980
1752
  }, [
1981
1753
  currentSavedFilterData,
1982
- activeSavedFilters,
1983
- allowMultipleSavedFilters,
1984
1754
  predefinedSearchChip,
1985
1755
  customFilter,
1986
1756
  customRuleCount,
@@ -2217,6 +1987,7 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
2217
1987
  const removePredefinedSearchChip = () => {
2218
1988
  setPredefinedSearchChip(null);
2219
1989
  setPredefinedSearchBaseFilter(null)
1990
+ setCustomFilter(null);
2220
1991
  setHasSearched(true);
2221
1992
  setRefreshKey((prev) => prev + 1)
2222
1993
  };
@@ -2421,10 +2192,6 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
2421
2192
  className={`text-color solid-search-overlay-option ${focusedIndex === optionIndex ? "solid-search-overlay-option-active" : ""}`}
2422
2193
  onMouseDown={(e) => {
2423
2194
  e.preventDefault();
2424
- e.stopPropagation();
2425
- }}
2426
- onClick={(e) => {
2427
- e.stopPropagation();
2428
2195
  handlePredefinedSearch(predefinedSearch);
2429
2196
  }}
2430
2197
  onMouseEnter={() => setFocusedIndex(optionIndex)}
@@ -2467,10 +2234,6 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
2467
2234
  className={`text-color solid-search-overlay-option ${focusedIndex === optionIndex ? "solid-search-overlay-option-active" : ""}`}
2468
2235
  onMouseDown={(e) => {
2469
2236
  e.preventDefault();
2470
- e.stopPropagation();
2471
- }}
2472
- onClick={(e) => {
2473
- e.stopPropagation();
2474
2237
  const currentValue = inputValue?.trim();
2475
2238
  if (currentValue) {
2476
2239
  const values = currentValue.split(",").map((v) => v.trim()).filter((v) => v !== "");
@@ -2554,7 +2317,6 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
2554
2317
  key={savedfilter.id}
2555
2318
  savedfilter={savedfilter}
2556
2319
  activeSavedFilterReference={currentSavedFilterData?.systemKey || currentSavedFilterData?.id}
2557
- activeSavedFilterReferences={allowMultipleSavedFilters ? activeSavedFilters.map((item: any) => getSavedFilterKey(item.data)) : undefined}
2558
2320
  applySavedFilter={applySavedFilter}
2559
2321
  openSavedCustomFilter={openSavedCustomFilter}
2560
2322
  setSavedFilterTobeDeleted={setSavedFilterTobeDeleted}
@@ -200,92 +200,3 @@
200
200
  .solid-json-editor.is-readonly .ace-jsoneditor .ace_cursor {
201
201
  opacity: 0.45;
202
202
  }
203
-
204
- /* Keep the code editor surface aligned with the application theme. The
205
- datasource introspection Review Mapping tab shares this editor with the
206
- model and module explorers. */
207
- html.dark .solid-json-editor .ace-jsoneditor,
208
- html.dark .solid-json-editor .ace-jsoneditor .ace_gutter,
209
- html.dark .solid-json-editor .ace-jsoneditor .ace_scroller,
210
- html.dark .solid-json-editor .ace-jsoneditor .ace_content,
211
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor,
212
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_gutter,
213
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_scroller,
214
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_content {
215
- background: var(--surface-ground, var(--background)) !important;
216
- color: var(--foreground) !important;
217
- }
218
-
219
- html.dark .solid-json-editor .ace-jsoneditor .ace_gutter,
220
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_gutter {
221
- color: var(--muted-foreground) !important;
222
- border-right: 1px solid var(--border);
223
- }
224
-
225
- html.dark .solid-json-editor .ace-jsoneditor .ace_gutter-active-line,
226
- html.dark .solid-json-editor .ace-jsoneditor .ace_active-line,
227
- html.dark .solid-json-editor .ace-jsoneditor .ace_marker-layer .ace_active-line,
228
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_gutter-active-line,
229
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_active-line,
230
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_marker-layer .ace_active-line {
231
- background: color-mix(in srgb, var(--foreground) 10%, transparent) !important;
232
- }
233
-
234
- html.dark .solid-json-editor .ace-jsoneditor .ace_marker-layer .ace_selection,
235
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_marker-layer .ace_selection {
236
- background: color-mix(in srgb, var(--primary) 28%, transparent) !important;
237
- }
238
-
239
- html.dark .solid-json-editor .ace-jsoneditor .ace_marker-layer .ace_bracket,
240
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_marker-layer .ace_bracket {
241
- border: 1px solid color-mix(in srgb, var(--foreground) 58%, transparent) !important;
242
- }
243
-
244
- html.dark .solid-json-editor .ace-jsoneditor .ace_cursor,
245
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_cursor {
246
- border-left-color: var(--foreground) !important;
247
- }
248
-
249
- html.dark .solid-json-editor .ace-jsoneditor .ace_print-margin,
250
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_print-margin {
251
- background: color-mix(in srgb, var(--foreground) 10%, transparent) !important;
252
- }
253
-
254
- html.dark .solid-json-editor .ace-jsoneditor .ace_constant,
255
- html.dark .solid-json-editor .ace-jsoneditor .ace_constant.ace_numeric,
256
- html.dark .solid-json-editor .ace-jsoneditor .ace_constant.ace_language,
257
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_constant,
258
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_constant.ace_numeric,
259
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_constant.ace_language {
260
- color: var(--primary) !important;
261
- }
262
-
263
- html.dark .solid-json-editor .ace-jsoneditor .ace_string,
264
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_string {
265
- color: color-mix(in srgb, var(--primary) 68%, var(--foreground)) !important;
266
- }
267
-
268
- html.dark .solid-json-editor .ace-jsoneditor .ace_keyword,
269
- html.dark .solid-json-editor .ace-jsoneditor .ace_meta,
270
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_keyword,
271
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_meta {
272
- color: color-mix(in srgb, var(--primary) 72%, var(--foreground)) !important;
273
- }
274
-
275
- html.dark .solid-json-editor .ace-jsoneditor .ace_variable,
276
- html.dark .solid-json-editor .ace-jsoneditor .ace_variable.ace_parameter,
277
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_variable,
278
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_variable.ace_parameter {
279
- color: color-mix(in srgb, var(--destructive) 72%, var(--foreground)) !important;
280
- }
281
-
282
- html.dark .solid-json-editor .ace-jsoneditor .ace_comment,
283
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_comment {
284
- color: var(--muted-foreground) !important;
285
- }
286
-
287
- html.dark .solid-json-editor .ace-jsoneditor .ace_invalid,
288
- [data-theme="dark"] .solid-json-editor .ace-jsoneditor .ace_invalid {
289
- color: var(--destructive) !important;
290
- background: color-mix(in srgb, var(--destructive) 28%, transparent) !important;
291
- }
@@ -9,7 +9,6 @@ type SolidKanbanFilterInput = {
9
9
  custom_filter_predicate?: any;
10
10
  search_predicate?: any;
11
11
  saved_filter_predicate?: any;
12
- saved_filter_items?: any[];
13
12
  predefined_search_predicate?: any;
14
13
  };
15
14
  export type SolidKanbanViewHandle = {
@@ -1 +1 @@
1
- {"version":3,"file":"SolidKanbanView.d.ts","sourceRoot":"","sources":["../../../../src/components/core/kanban/SolidKanbanView.tsx"],"names":[],"mappings":";AAkDA,KAAK,qBAAqB,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,uBAAuB,CAAC,EAAE,GAAG,CAAC;IAC9B,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,sBAAsB,CAAC,EAAE,GAAG,CAAC;IAC7B,kBAAkB,CAAC,EAAE,GAAG,EAAE,CAAC;IAC3B,2BAA2B,CAAC,EAAE,GAAG,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtD,eAAe,EAAE,MAAM,GAAG,EAAE,CAAC;IAC7B,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;IAC7E,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,MAAM;QACd,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,EAAE,GAAG,CAAC;QACb,gBAAgB,EAAE,GAAG,CAAC;QACtB,UAAU,EAAE,GAAG,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH,CAAC;AAqEF,eAAO,MAAM,eAAe,yHAupC1B,CAAC"}
1
+ {"version":3,"file":"SolidKanbanView.d.ts","sourceRoot":"","sources":["../../../../src/components/core/kanban/SolidKanbanView.tsx"],"names":[],"mappings":";AAkDA,KAAK,qBAAqB,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,uBAAuB,CAAC,EAAE,GAAG,CAAC;IAC9B,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,sBAAsB,CAAC,EAAE,GAAG,CAAC;IAC7B,2BAA2B,CAAC,EAAE,GAAG,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtD,eAAe,EAAE,MAAM,GAAG,EAAE,CAAC;IAC7B,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;IAC7E,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,MAAM;QACd,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,EAAE,GAAG,CAAC;QACb,gBAAgB,EAAE,GAAG,CAAC;QACtB,UAAU,EAAE,GAAG,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH,CAAC;AAqEF,eAAO,MAAM,eAAe,yHAqpC1B,CAAC"}