@solidxai/core-ui 0.1.9-beta.1 → 0.1.9-beta.10

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 (128) hide show
  1. package/dist/components/auth/AuthLayout.d.ts.map +1 -1
  2. package/dist/components/auth/AuthLayout.js +16 -15
  3. package/dist/components/auth/AuthLayout.js.map +1 -1
  4. package/dist/components/auth/AuthLayout.tsx +3 -1
  5. package/dist/components/auth/ForgotPasswordThankYou.js +1 -1
  6. package/dist/components/auth/ForgotPasswordThankYou.js.map +1 -1
  7. package/dist/components/auth/ForgotPasswordThankYou.tsx +2 -2
  8. package/dist/components/auth/SolidForgotPassword.js +1 -1
  9. package/dist/components/auth/SolidForgotPassword.js.map +1 -1
  10. package/dist/components/auth/SolidForgotPassword.tsx +2 -2
  11. package/dist/components/auth/SolidInitialLoginOtp.js +8 -8
  12. package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
  13. package/dist/components/auth/SolidInitialLoginOtp.tsx +1 -1
  14. package/dist/components/auth/SolidInitiateRegisterOtp.js +8 -8
  15. package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
  16. package/dist/components/auth/SolidInitiateRegisterOtp.tsx +1 -1
  17. package/dist/components/auth/SolidLogin.js +7 -8
  18. package/dist/components/auth/SolidLogin.js.map +1 -1
  19. package/dist/components/auth/SolidLogin.tsx +1 -1
  20. package/dist/components/auth/SolidRegister.js +9 -9
  21. package/dist/components/auth/SolidRegister.js.map +1 -1
  22. package/dist/components/auth/SolidRegister.tsx +2 -2
  23. package/dist/components/common/SocialMediaLogin.js +1 -1
  24. package/dist/components/common/SocialMediaLogin.js.map +1 -1
  25. package/dist/components/common/SocialMediaLogin.tsx +4 -4
  26. package/dist/components/core/form/SolidFormActionHeader.d.ts.map +1 -1
  27. package/dist/components/core/form/SolidFormActionHeader.js +1 -0
  28. package/dist/components/core/form/SolidFormActionHeader.js.map +1 -1
  29. package/dist/components/core/form/SolidFormActionHeader.tsx +2 -1
  30. package/dist/components/core/form/SolidFormFooter.d.ts.map +1 -1
  31. package/dist/components/core/form/SolidFormFooter.js +14 -7
  32. package/dist/components/core/form/SolidFormFooter.js.map +1 -1
  33. package/dist/components/core/form/SolidFormFooter.tsx +14 -6
  34. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  35. package/dist/components/core/form/SolidFormView.js +7 -3
  36. package/dist/components/core/form/SolidFormView.js.map +1 -1
  37. package/dist/components/core/form/SolidFormView.tsx +5 -2
  38. package/dist/components/core/form/fields/SolidBooleanField.d.ts.map +1 -1
  39. package/dist/components/core/form/fields/SolidBooleanField.js +10 -1
  40. package/dist/components/core/form/fields/SolidBooleanField.js.map +1 -1
  41. package/dist/components/core/form/fields/SolidBooleanField.tsx +13 -1
  42. package/dist/components/core/form/fields/SolidDecimalField.d.ts.map +1 -1
  43. package/dist/components/core/form/fields/SolidDecimalField.js +7 -1
  44. package/dist/components/core/form/fields/SolidDecimalField.js.map +1 -1
  45. package/dist/components/core/form/fields/SolidDecimalField.tsx +10 -1
  46. package/dist/components/core/form/fields/SolidIntegerField.d.ts.map +1 -1
  47. package/dist/components/core/form/fields/SolidIntegerField.js +14 -2
  48. package/dist/components/core/form/fields/SolidIntegerField.js.map +1 -1
  49. package/dist/components/core/form/fields/SolidIntegerField.tsx +20 -2
  50. package/dist/components/core/form/fields/SolidJsonField.d.ts.map +1 -1
  51. package/dist/components/core/form/fields/SolidJsonField.js +9 -1
  52. package/dist/components/core/form/fields/SolidJsonField.js.map +1 -1
  53. package/dist/components/core/form/fields/SolidJsonField.tsx +12 -1
  54. package/dist/components/core/form/fields/SolidLongTextField.d.ts.map +1 -1
  55. package/dist/components/core/form/fields/SolidLongTextField.js +23 -3
  56. package/dist/components/core/form/fields/SolidLongTextField.js.map +1 -1
  57. package/dist/components/core/form/fields/SolidLongTextField.tsx +32 -3
  58. package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
  59. package/dist/components/core/form/fields/SolidMediaMultipleField.js +15 -2
  60. package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
  61. package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +20 -4
  62. package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
  63. package/dist/components/core/form/fields/SolidMediaSingleField.js +21 -3
  64. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  65. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +30 -3
  66. package/dist/components/core/form/fields/SolidPasswordField.d.ts.map +1 -1
  67. package/dist/components/core/form/fields/SolidPasswordField.js +2 -1
  68. package/dist/components/core/form/fields/SolidPasswordField.js.map +1 -1
  69. package/dist/components/core/form/fields/SolidPasswordField.tsx +13 -1
  70. package/dist/components/core/form/fields/SolidRichTextField.d.ts.map +1 -1
  71. package/dist/components/core/form/fields/SolidRichTextField.js +9 -1
  72. package/dist/components/core/form/fields/SolidRichTextField.js.map +1 -1
  73. package/dist/components/core/form/fields/SolidRichTextField.tsx +12 -1
  74. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  75. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +2 -2
  76. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  77. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +8 -2
  78. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.d.ts.map +1 -1
  79. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js +14 -3
  80. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js.map +1 -1
  81. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.tsx +20 -3
  82. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  83. package/dist/components/core/list/SolidListView.js +66 -2
  84. package/dist/components/core/list/SolidListView.js.map +1 -1
  85. package/dist/components/core/list/SolidListView.tsx +67 -2
  86. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.d.ts +3 -0
  87. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.d.ts.map +1 -0
  88. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.js +39 -0
  89. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.js.map +1 -0
  90. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.tsx +50 -0
  91. package/dist/components/core/tree/SolidTreeTable.d.ts +1 -1
  92. package/dist/components/core/tree/SolidTreeTable.d.ts.map +1 -1
  93. package/dist/components/core/tree/SolidTreeTable.js +78 -78
  94. package/dist/components/core/tree/SolidTreeTable.js.map +1 -1
  95. package/dist/components/core/tree/SolidTreeTable.tsx +1 -10
  96. package/dist/components/core/users/CreateUser.css +27 -2
  97. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  98. package/dist/components/core/users/CreateUser.js +52 -24
  99. package/dist/components/core/users/CreateUser.js.map +1 -1
  100. package/dist/components/core/users/CreateUser.tsx +46 -33
  101. package/dist/helpers/registry.d.ts.map +1 -1
  102. package/dist/helpers/registry.js +3 -0
  103. package/dist/helpers/registry.js.map +1 -1
  104. package/dist/helpers/registry.ts +4 -0
  105. package/dist/index.d.ts +2 -0
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +1 -0
  108. package/dist/index.js.map +1 -1
  109. package/dist/index.ts +2 -0
  110. package/dist/resources/shadcn-base.css +17 -9
  111. package/dist/routes/SolidRouteMetadataBoundary.d.ts +5 -0
  112. package/dist/routes/SolidRouteMetadataBoundary.d.ts.map +1 -0
  113. package/dist/routes/SolidRouteMetadataBoundary.js +72 -0
  114. package/dist/routes/SolidRouteMetadataBoundary.js.map +1 -0
  115. package/dist/routes/SolidRouteMetadataBoundary.tsx +77 -0
  116. package/dist/routes/pages/studio/StudioLandingPage.d.ts.map +1 -1
  117. package/dist/routes/pages/studio/StudioLandingPage.js +35 -7
  118. package/dist/routes/pages/studio/StudioLandingPage.js.map +1 -1
  119. package/dist/routes/pages/studio/StudioLandingPage.tsx +42 -6
  120. package/dist/routes/solidRoutes.d.ts.map +1 -1
  121. package/dist/routes/solidRoutes.js +47 -26
  122. package/dist/routes/solidRoutes.js.map +1 -1
  123. package/dist/routes/solidRoutes.tsx +47 -26
  124. package/dist/routes/types.d.ts +7 -0
  125. package/dist/routes/types.d.ts.map +1 -1
  126. package/dist/routes/types.js.map +1 -1
  127. package/dist/routes/types.ts +8 -0
  128. package/package.json +1 -1
@@ -244,6 +244,7 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
244
244
  const [filterPredicates, setFilterPredicates] = useState<any>(null);
245
245
  const [showSaveFilterPopup, setShowSaveFilterPopup] = useState<boolean>(false);
246
246
  const [showGlobalSearchElement, setShowGlobalSearchElement] = useState(false);
247
+ const suppressNextFilterPaginationResetRef = useRef(false);
247
248
 
248
249
  const [triggerCheckIfPermissionExists] = useLazyCheckIfPermissionExistsQuery();
249
250
 
@@ -564,6 +565,7 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
564
565
  const queryObject = getFilterObjectFromLocalStorage();
565
566
 
566
567
  if (queryObject) {
568
+ suppressNextFilterPaginationResetRef.current = true;
567
569
  const queryData = {
568
570
  offset: queryObject.offset || 0,
569
571
  limit: queryObject.limit || 25,
@@ -822,8 +824,9 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
822
824
 
823
825
  const queryString = qs.stringify(queryData, { encodeValuesOnly: true });
824
826
 
825
- if (latestFilterPredicatesRef.current && latestFilterPredicatesRef.current.persistFilter) {
827
+ if (latestFilterPredicatesRef.current) {
826
828
  const fileterTobeStored = structuredClone(queryData);
829
+ fileterTobeStored.finalFullFilter = fileterTobeStored.filters;
827
830
  delete fileterTobeStored.filters;
828
831
  fileterTobeStored.custom_filter_predicate = latestFilterPredicatesRef.current.custom_filter_predicate || null;
829
832
  fileterTobeStored.search_predicate = latestFilterPredicatesRef.current.search_predicate || null;
@@ -853,6 +856,22 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
853
856
  }
854
857
  const updatedFilter = queryfilter;
855
858
 
859
+ const previousPredicates = latestFilterPredicatesRef.current;
860
+ const nextPredicatesComparable = {
861
+ custom_filter_predicate: filterPredicates?.custom_filter_predicate || null,
862
+ search_predicate: filterPredicates?.search_predicate || null,
863
+ saved_filter_predicate: filterPredicates?.saved_filter_predicate || null,
864
+ predefined_search_predicate: filterPredicates?.predefined_search_predicate || null,
865
+ };
866
+ const previousPredicatesComparable = {
867
+ custom_filter_predicate: previousPredicates?.custom_filter_predicate || null,
868
+ search_predicate: previousPredicates?.search_predicate || null,
869
+ saved_filter_predicate: previousPredicates?.saved_filter_predicate || null,
870
+ predefined_search_predicate: previousPredicates?.predefined_search_predicate || null,
871
+ };
872
+ const hasPredicateChanged =
873
+ JSON.stringify(previousPredicatesComparable) !== JSON.stringify(nextPredicatesComparable);
874
+
856
875
  // Update refs IMMEDIATELY (synchronously)
857
876
  latestFiltersRef.current = updatedFilter;
858
877
  const updatedFilterPredicates = structuredClone(filterPredicates);
@@ -862,7 +881,53 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
862
881
  // Then update state
863
882
  setFilters(updatedFilter);
864
883
  setFilterPredicates(updatedFilterPredicates);
865
- setFirst(0);
884
+ const hasMeaningfulFilterValueLocal = (value: any): boolean => {
885
+ if (value === null || value === undefined) return false;
886
+ if (typeof value === "string") return value.trim().length > 0;
887
+ if (typeof value === "number" || typeof value === "boolean") return true;
888
+ if (Array.isArray(value)) return value.some((item) => hasMeaningfulFilterValueLocal(item));
889
+ if (typeof value === "object") return hasAppliedFiltersLocal(value);
890
+ return false;
891
+ };
892
+
893
+ const hasAppliedFiltersLocal = (filterObject: any): boolean => {
894
+ if (!filterObject || typeof filterObject !== "object") return false;
895
+
896
+ if (Array.isArray(filterObject)) {
897
+ return filterObject.some((item) => hasAppliedFiltersLocal(item) || hasMeaningfulFilterValueLocal(item));
898
+ }
899
+
900
+ return Object.entries(filterObject).some(([key, val]) => {
901
+ if (key === "matchMode" || key === "operator") return false;
902
+ if (key === "value") return hasMeaningfulFilterValueLocal(val);
903
+ if ((key === "$and" || key === "$or") && Array.isArray(val)) {
904
+ return val.some((item) => hasAppliedFiltersLocal(item) || hasMeaningfulFilterValueLocal(item));
905
+ }
906
+ if (typeof val === "object") return hasAppliedFiltersLocal(val);
907
+ return hasMeaningfulFilterValueLocal(val);
908
+ });
909
+ };
910
+
911
+ const hasCurrentMeaningfulPredicates =
912
+ hasAppliedFiltersLocal(updatedFilterPredicates?.custom_filter_predicate) ||
913
+ hasAppliedFiltersLocal(updatedFilterPredicates?.search_predicate) ||
914
+ hasAppliedFiltersLocal(updatedFilterPredicates?.saved_filter_predicate) ||
915
+ hasAppliedFiltersLocal(updatedFilterPredicates?.predefined_search_predicate);
916
+
917
+ const hasPreviousMeaningfulPredicates =
918
+ hasAppliedFiltersLocal(previousPredicates?.custom_filter_predicate) ||
919
+ hasAppliedFiltersLocal(previousPredicates?.search_predicate) ||
920
+ hasAppliedFiltersLocal(previousPredicates?.saved_filter_predicate) ||
921
+ hasAppliedFiltersLocal(previousPredicates?.predefined_search_predicate);
922
+
923
+ const shouldResetPagination =
924
+ hasPredicateChanged && (hasCurrentMeaningfulPredicates || hasPreviousMeaningfulPredicates);
925
+
926
+ if (suppressNextFilterPaginationResetRef.current) {
927
+ suppressNextFilterPaginationResetRef.current = false;
928
+ } else if (shouldResetPagination) {
929
+ setFirst(0);
930
+ }
866
931
  // Force synchronous state updates
867
932
  };
868
933
 
@@ -0,0 +1,3 @@
1
+ import { SolidListFieldWidgetProps } from "../../../../types/solid-core";
2
+ export declare const SolidUserBlockedStatusListWidget: ({ rowData }: SolidListFieldWidgetProps) => import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=SolidUserBlockedStatusListWidget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolidUserBlockedStatusListWidget.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/list/widgets/SolidUserBlockedStatusListWidget.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAiBzE,eAAO,MAAM,gCAAgC,gBAAiB,yBAAyB,4CA6BtF,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { getSettingsMap } from "../../../../helpers/settingsPayload";
3
+ import { useGetSolidSettingsQuery } from "../../../../redux/api/solidSettingsApi";
4
+ function toNumber(value) {
5
+ if (typeof value === "number" && Number.isFinite(value)) {
6
+ return value;
7
+ }
8
+ if (typeof value === "string" && value.trim() !== "") {
9
+ var parsed = Number(value);
10
+ if (Number.isFinite(parsed)) {
11
+ return parsed;
12
+ }
13
+ }
14
+ return null;
15
+ }
16
+ export var SolidUserBlockedStatusListWidget = function (_a) {
17
+ var _b;
18
+ var rowData = _a.rowData;
19
+ var solidSettingsData = useGetSolidSettingsQuery(undefined).data;
20
+ var settingsMap = getSettingsMap(solidSettingsData);
21
+ var maxFailedLoginAttempts = toNumber(settingsMap === null || settingsMap === void 0 ? void 0 : settingsMap.maxFailedLoginAttempts);
22
+ var failedLoginAttempts = (_b = toNumber(rowData === null || rowData === void 0 ? void 0 : rowData.failedLoginAttempts)) !== null && _b !== void 0 ? _b : 0;
23
+ var isBlocked = maxFailedLoginAttempts !== null && maxFailedLoginAttempts > 0 && failedLoginAttempts >= maxFailedLoginAttempts;
24
+ return (isBlocked ?
25
+ _jsx("span", { style: {
26
+ display: "inline-flex",
27
+ alignItems: "center",
28
+ padding: "0.2rem 0.5rem",
29
+ borderRadius: "999px",
30
+ fontSize: "0.75rem",
31
+ fontWeight: 600,
32
+ backgroundColor: "#fee2e2",
33
+ color: "#991b1b",
34
+ // backgroundColor: isBlocked ? "#fee2e2" : "#dcfce7",
35
+ // color: isBlocked ? "#991b1b" : "#166534",
36
+ }, children: "Blocked" }) :
37
+ _jsx(_Fragment, {}));
38
+ };
39
+ //# sourceMappingURL=SolidUserBlockedStatusListWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolidUserBlockedStatusListWidget.js","sourceRoot":"","sources":["../../../../../src/components/core/list/widgets/SolidUserBlockedStatusListWidget.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAGlF,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACvD,OAAO,KAAK,CAAC;KACd;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACpD,IAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC3B,OAAO,MAAM,CAAC;SACf;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,IAAM,gCAAgC,GAAG,UAAC,EAAsC;;QAApC,OAAO,aAAA;IAChD,IAAM,iBAAiB,GAAK,wBAAwB,CAAC,SAAS,CAAC,KAAxC,CAAyC;IACxE,IAAM,WAAW,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAEtD,IAAM,sBAAsB,GAAG,QAAQ,CAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,sBAAsB,CAAC,CAAC;IAC7E,IAAM,mBAAmB,GAAG,MAAA,QAAQ,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,mBAAmB,CAAC,mCAAI,CAAC,CAAC;IACxE,IAAM,SAAS,GACb,sBAAsB,KAAK,IAAI,IAAI,sBAAsB,GAAG,CAAC,IAAI,mBAAmB,IAAI,sBAAsB,CAAC;IAEjH,OAAO,CACL,SAAS,CAAC,CAAC;QACT,eACE,KAAK,EAAE;gBACL,OAAO,EAAE,aAAa;gBACtB,UAAU,EAAE,QAAQ;gBACpB,OAAO,EAAE,eAAe;gBACxB,YAAY,EAAE,OAAO;gBACrB,QAAQ,EAAE,SAAS;gBACnB,UAAU,EAAE,GAAG;gBACf,eAAe,EAAE,SAAS;gBAC1B,KAAK,EAAE,SAAS;gBAChB,sDAAsD;gBACtD,4CAA4C;aAC7C,wBAGI,CAAC,CAAC;QACT,mBAAK,CACR,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { getSettingsMap } from \"../../../../helpers/settingsPayload\";\nimport { useGetSolidSettingsQuery } from \"../../../../redux/api/solidSettingsApi\";\nimport { SolidListFieldWidgetProps } from \"../../../../types/solid-core\";\n\nfunction toNumber(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === \"string\" && value.trim() !== \"\") {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n\n return null;\n}\n\nexport const SolidUserBlockedStatusListWidget = ({ rowData }: SolidListFieldWidgetProps) => {\n const { data: solidSettingsData } = useGetSolidSettingsQuery(undefined);\n const settingsMap = getSettingsMap(solidSettingsData);\n\n const maxFailedLoginAttempts = toNumber(settingsMap?.maxFailedLoginAttempts);\n const failedLoginAttempts = toNumber(rowData?.failedLoginAttempts) ?? 0;\n const isBlocked =\n maxFailedLoginAttempts !== null && maxFailedLoginAttempts > 0 && failedLoginAttempts >= maxFailedLoginAttempts;\n\n return (\n isBlocked ?\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"0.2rem 0.5rem\",\n borderRadius: \"999px\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n backgroundColor: \"#fee2e2\",\n color: \"#991b1b\",\n // backgroundColor: isBlocked ? \"#fee2e2\" : \"#dcfce7\",\n // color: isBlocked ? \"#991b1b\" : \"#166534\",\n }}\n >\n Blocked\n </span> :\n <></>\n );\n};\n\n"]}
@@ -0,0 +1,50 @@
1
+ import { getSettingsMap } from "../../../../helpers/settingsPayload";
2
+ import { useGetSolidSettingsQuery } from "../../../../redux/api/solidSettingsApi";
3
+ import { SolidListFieldWidgetProps } from "../../../../types/solid-core";
4
+
5
+ function toNumber(value: unknown): number | null {
6
+ if (typeof value === "number" && Number.isFinite(value)) {
7
+ return value;
8
+ }
9
+
10
+ if (typeof value === "string" && value.trim() !== "") {
11
+ const parsed = Number(value);
12
+ if (Number.isFinite(parsed)) {
13
+ return parsed;
14
+ }
15
+ }
16
+
17
+ return null;
18
+ }
19
+
20
+ export const SolidUserBlockedStatusListWidget = ({ rowData }: SolidListFieldWidgetProps) => {
21
+ const { data: solidSettingsData } = useGetSolidSettingsQuery(undefined);
22
+ const settingsMap = getSettingsMap(solidSettingsData);
23
+
24
+ const maxFailedLoginAttempts = toNumber(settingsMap?.maxFailedLoginAttempts);
25
+ const failedLoginAttempts = toNumber(rowData?.failedLoginAttempts) ?? 0;
26
+ const isBlocked =
27
+ maxFailedLoginAttempts !== null && maxFailedLoginAttempts > 0 && failedLoginAttempts >= maxFailedLoginAttempts;
28
+
29
+ return (
30
+ isBlocked ?
31
+ <span
32
+ style={{
33
+ display: "inline-flex",
34
+ alignItems: "center",
35
+ padding: "0.2rem 0.5rem",
36
+ borderRadius: "999px",
37
+ fontSize: "0.75rem",
38
+ fontWeight: 600,
39
+ backgroundColor: "#fee2e2",
40
+ color: "#991b1b",
41
+ // backgroundColor: isBlocked ? "#fee2e2" : "#dcfce7",
42
+ // color: isBlocked ? "#991b1b" : "#166534",
43
+ }}
44
+ >
45
+ Blocked
46
+ </span> :
47
+ <></>
48
+ );
49
+ };
50
+
@@ -68,6 +68,6 @@ type SolidTreeTableProps = {
68
68
  };
69
69
  export declare function SolidTreeColumn(_props: SolidTreeColumnProps): null;
70
70
  export declare const Column: typeof SolidTreeColumn;
71
- export declare function SolidTreeTable({ value, children, loading, expandedKeys, onToggle, onExpand, tableClassName, tableStyle, emptyMessage, selectionMode, selectionKeys, onSelectionChange, sortField, sortOrder, removableSort, onSort, onRowClick, }: SolidTreeTableProps): import("react/jsx-runtime").JSX.Element;
71
+ export declare function SolidTreeTable({ value, children, expandedKeys, onToggle, onExpand, tableClassName, tableStyle, emptyMessage, selectionMode, selectionKeys, onSelectionChange, sortField, sortOrder, removableSort, onSort, onRowClick, }: SolidTreeTableProps): import("react/jsx-runtime").JSX.Element;
72
72
  export {};
73
73
  //# sourceMappingURL=SolidTreeTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SolidTreeTable.d.ts","sourceRoot":"","sources":["../../../../src/components/core/tree/SolidTreeTable.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SolidTreeTable.d.ts","sourceRoot":"","sources":["../../../../src/components/core/tree/SolidTreeTable.tsx"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ var __assign = (this && this.__assign) || function () {
11
11
  };
12
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  import React, { useMemo } from "react";
14
- import { ArrowDownWideNarrow, ArrowUpDown, ArrowUpWideNarrow, ChevronRight, Loader2, Minus } from "lucide-react";
14
+ import { ArrowDownWideNarrow, ArrowUpDown, ArrowUpWideNarrow, ChevronRight, Minus } from "lucide-react";
15
15
  function cx() {
16
16
  var parts = [];
17
17
  for (var _i = 0; _i < arguments.length; _i++) {
@@ -119,7 +119,7 @@ function parseWidthValue(value) {
119
119
  return Number.isFinite(parsed) ? parsed : null;
120
120
  }
121
121
  export function SolidTreeTable(_a) {
122
- var _b = _a.value, value = _b === void 0 ? [] : _b, children = _a.children, _c = _a.loading, loading = _c === void 0 ? false : _c, _d = _a.expandedKeys, expandedKeys = _d === void 0 ? {} : _d, onToggle = _a.onToggle, onExpand = _a.onExpand, tableClassName = _a.tableClassName, tableStyle = _a.tableStyle, emptyMessage = _a.emptyMessage, selectionMode = _a.selectionMode, _e = _a.selectionKeys, selectionKeys = _e === void 0 ? {} : _e, onSelectionChange = _a.onSelectionChange, sortField = _a.sortField, _f = _a.sortOrder, sortOrder = _f === void 0 ? 0 : _f, _g = _a.removableSort, removableSort = _g === void 0 ? true : _g, onSort = _a.onSort, onRowClick = _a.onRowClick;
122
+ var _b = _a.value, value = _b === void 0 ? [] : _b, children = _a.children, _c = _a.expandedKeys, expandedKeys = _c === void 0 ? {} : _c, onToggle = _a.onToggle, onExpand = _a.onExpand, tableClassName = _a.tableClassName, tableStyle = _a.tableStyle, emptyMessage = _a.emptyMessage, selectionMode = _a.selectionMode, _d = _a.selectionKeys, selectionKeys = _d === void 0 ? {} : _d, onSelectionChange = _a.onSelectionChange, sortField = _a.sortField, _e = _a.sortOrder, sortOrder = _e === void 0 ? 0 : _e, _f = _a.removableSort, removableSort = _f === void 0 ? true : _f, onSort = _a.onSort, onRowClick = _a.onRowClick;
123
123
  var columns = useMemo(function () { return normalizeColumns(children); }, [children]);
124
124
  var visibleRows = useMemo(function () { return flattenVisibleNodes(value, expandedKeys); }, [value, expandedKeys]);
125
125
  var selectionWidth = selectionMode === "checkbox" ? 48 : 0;
@@ -188,88 +188,88 @@ export function SolidTreeTable(_a) {
188
188
  }
189
189
  return {};
190
190
  };
191
- return (_jsx("div", { className: "solid-tree-table-root", children: _jsx("div", { className: "solid-data-table-viewport min-h-0 rounded-md border border-border/60 bg-background", children: _jsxs("div", { className: "relative min-h-full", children: [_jsxs("table", { className: cx("w-full text-sm border-collapse", tableClassName), style: tableStyle, children: [_jsx("thead", { className: "solid-data-table-head sticky top-0 z-2", children: _jsxs("tr", { children: [selectionMode === "checkbox" ? (_jsx("th", { className: "solid-data-table-th solid-data-table-selection-col solid-tree-sticky-cell solid-tree-sticky-cell-left", style: getStickyStyles("selection", null, "header"), children: _jsx("input", { type: "checkbox", checked: Boolean(allVisibleSelected), onChange: function (event) {
192
- var next = __assign({}, selectionKeys);
193
- visibleRows.forEach(function (_a) {
194
- var node = _a.node;
195
- updateSubtreeSelection(node, event.currentTarget.checked, next);
191
+ return (_jsx("div", { className: "solid-tree-table-root", children: _jsx("div", { className: "solid-data-table-viewport min-h-0 rounded-md border border-border/60 bg-background", children: _jsx("div", { className: "relative min-h-full", children: _jsxs("table", { className: cx("w-full text-sm border-collapse", tableClassName), style: tableStyle, children: [_jsx("thead", { className: "solid-data-table-head sticky top-0 z-2", children: _jsxs("tr", { children: [selectionMode === "checkbox" ? (_jsx("th", { className: "solid-data-table-th solid-data-table-selection-col solid-tree-sticky-cell solid-tree-sticky-cell-left", style: getStickyStyles("selection", null, "header"), children: _jsx("input", { type: "checkbox", checked: Boolean(allVisibleSelected), onChange: function (event) {
192
+ var next = __assign({}, selectionKeys);
193
+ visibleRows.forEach(function (_a) {
194
+ var node = _a.node;
195
+ updateSubtreeSelection(node, event.currentTarget.checked, next);
196
+ });
197
+ var reconciled = reconcileSelection(value, next);
198
+ onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange({
199
+ value: reconciled,
200
+ originalEvent: event,
201
+ });
202
+ }, "aria-label": "Select visible rows" }) })) : null, columns.map(function (column, index) {
203
+ var _a, _b;
204
+ var props = column.props;
205
+ var isSortable = Boolean(props.sortable && props.field);
206
+ var isActiveSort = isSortable && sortField === props.field;
207
+ var iconNode = resolveSortIcon(Boolean(isActiveSort), sortOrder);
208
+ return (_jsx("th", { className: cx("solid-data-table-th text-left text-foreground whitespace-nowrap", props.frozen && ((_a = props.alignFrozen) !== null && _a !== void 0 ? _a : "left") === "left" && "solid-tree-sticky-cell solid-tree-sticky-cell-left", props.frozen && props.alignFrozen === "right" && "solid-tree-sticky-cell solid-tree-sticky-cell-right", props.headerClassName), style: __assign(__assign(__assign(__assign({}, props.style), props.headerStyle), { textAlign: normalizeTextAlign((_b = props.alignHeader) !== null && _b !== void 0 ? _b : props.align) }), getStickyStyles("column", index, "header")), children: _jsxs("button", { type: "button", className: cx("solid-table-header-button", isSortable ? "is-sortable" : undefined), onClick: function () {
209
+ if (!isSortable)
210
+ return;
211
+ var nextOrder = nextSortOrder(Boolean(isActiveSort), sortOrder, removableSort);
212
+ onSort === null || onSort === void 0 ? void 0 : onSort({
213
+ sortField: nextOrder === 0 ? undefined : props.field,
214
+ sortOrder: nextOrder,
196
215
  });
216
+ }, children: [renderHeaderNode(props.header), isSortable ? iconNode : null] }) }, "tree-header-".concat(index)));
217
+ })] }) }), _jsx("tbody", { children: visibleRows.length === 0 ? (_jsx("tr", { children: _jsx("td", { className: "px-3 py-10 text-center text-muted-foreground", colSpan: Math.max(columns.length + selectionColSpan, 1), children: emptyMessage || "No records found" }) })) : (visibleRows.map(function (_a, rowIndex) {
218
+ var _b, _c;
219
+ var node = _a.node, depth = _a.depth;
220
+ var key = String((_b = node.key) !== null && _b !== void 0 ? _b : rowIndex);
221
+ var isSelected = Boolean((_c = selectionKeys[key]) === null || _c === void 0 ? void 0 : _c.checked);
222
+ return (_jsxs("tr", { className: cx("solid-data-table-row solid-tree-table-row", isSelected && "is-selected"), onClick: function (event) {
223
+ var target = event.target;
224
+ if (target.closest("button,a,input,label,[data-no-row-click='true']"))
225
+ return;
226
+ onRowClick === null || onRowClick === void 0 ? void 0 : onRowClick({ node: node, originalEvent: event });
227
+ }, children: [selectionMode === "checkbox" ? (_jsx("td", { className: "solid-data-table-td solid-data-table-selection-col solid-tree-sticky-cell solid-tree-sticky-cell-left", style: getStickyStyles("selection", null, "body"), children: _jsx("input", { type: "checkbox", checked: isSelected, ref: function (element) {
228
+ var _a;
229
+ if (element) {
230
+ element.indeterminate = Boolean((_a = selectionKeys[key]) === null || _a === void 0 ? void 0 : _a.partialChecked);
231
+ }
232
+ }, onChange: function (event) {
233
+ var next = __assign({}, selectionKeys);
234
+ updateSubtreeSelection(node, event.currentTarget.checked, next);
197
235
  var reconciled = reconcileSelection(value, next);
198
236
  onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange({
199
237
  value: reconciled,
200
238
  originalEvent: event,
201
239
  });
202
- }, "aria-label": "Select visible rows" }) })) : null, columns.map(function (column, index) {
203
- var _a, _b;
240
+ }, onClick: function (event) { return event.stopPropagation(); }, "aria-label": "Select row" }) })) : null, columns.map(function (column, columnIndex) {
241
+ var _a, _b, _c;
204
242
  var props = column.props;
205
- var isSortable = Boolean(props.sortable && props.field);
206
- var isActiveSort = isSortable && sortField === props.field;
207
- var iconNode = resolveSortIcon(Boolean(isActiveSort), sortOrder);
208
- return (_jsx("th", { className: cx("solid-data-table-th text-left text-foreground whitespace-nowrap", props.frozen && ((_a = props.alignFrozen) !== null && _a !== void 0 ? _a : "left") === "left" && "solid-tree-sticky-cell solid-tree-sticky-cell-left", props.frozen && props.alignFrozen === "right" && "solid-tree-sticky-cell solid-tree-sticky-cell-right", props.headerClassName), style: __assign(__assign(__assign(__assign({}, props.style), props.headerStyle), { textAlign: normalizeTextAlign((_b = props.alignHeader) !== null && _b !== void 0 ? _b : props.align) }), getStickyStyles("column", index, "header")), children: _jsxs("button", { type: "button", className: cx("solid-table-header-button", isSortable ? "is-sortable" : undefined), onClick: function () {
209
- if (!isSortable)
210
- return;
211
- var nextOrder = nextSortOrder(Boolean(isActiveSort), sortOrder, removableSort);
212
- onSort === null || onSort === void 0 ? void 0 : onSort({
213
- sortField: nextOrder === 0 ? undefined : props.field,
214
- sortOrder: nextOrder,
215
- });
216
- }, children: [renderHeaderNode(props.header), isSortable ? iconNode : null] }) }, "tree-header-".concat(index)));
217
- })] }) }), _jsx("tbody", { children: visibleRows.length === 0 ? (_jsx("tr", { children: _jsx("td", { className: "px-3 py-10 text-center text-muted-foreground", colSpan: Math.max(columns.length + selectionColSpan, 1), children: emptyMessage || "No records found" }) })) : (visibleRows.map(function (_a, rowIndex) {
218
- var _b, _c;
219
- var node = _a.node, depth = _a.depth;
220
- var key = String((_b = node.key) !== null && _b !== void 0 ? _b : rowIndex);
221
- var isSelected = Boolean((_c = selectionKeys[key]) === null || _c === void 0 ? void 0 : _c.checked);
222
- return (_jsxs("tr", { className: cx("solid-data-table-row solid-tree-table-row", isSelected && "is-selected"), onClick: function (event) {
223
- var target = event.target;
224
- if (target.closest("button,a,input,label,[data-no-row-click='true']"))
225
- return;
226
- onRowClick === null || onRowClick === void 0 ? void 0 : onRowClick({ node: node, originalEvent: event });
227
- }, children: [selectionMode === "checkbox" ? (_jsx("td", { className: "solid-data-table-td solid-data-table-selection-col solid-tree-sticky-cell solid-tree-sticky-cell-left", style: getStickyStyles("selection", null, "body"), children: _jsx("input", { type: "checkbox", checked: isSelected, ref: function (element) {
228
- var _a;
229
- if (element) {
230
- element.indeterminate = Boolean((_a = selectionKeys[key]) === null || _a === void 0 ? void 0 : _a.partialChecked);
231
- }
232
- }, onChange: function (event) {
233
- var next = __assign({}, selectionKeys);
234
- updateSubtreeSelection(node, event.currentTarget.checked, next);
235
- var reconciled = reconcileSelection(value, next);
236
- onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange({
237
- value: reconciled,
238
- originalEvent: event,
239
- });
240
- }, onClick: function (event) { return event.stopPropagation(); }, "aria-label": "Select row" }) })) : null, columns.map(function (column, columnIndex) {
241
- var _a, _b, _c;
242
- var props = column.props;
243
- var canExpand = typeof props.expander === "function"
244
- ? props.expander(node)
245
- : Boolean(props.expander);
246
- var isExpanded = Boolean(expandedKeys[key]);
247
- var hasChildren = Boolean((_a = node.children) === null || _a === void 0 ? void 0 : _a.length);
248
- var showExpander = canExpand;
249
- var expanderDisabled = node.leaf === true;
250
- var content = props.body
251
- ? props.body(node, { depth: depth, rowIndex: rowIndex })
252
- : props.field
253
- ? (_b = node === null || node === void 0 ? void 0 : node.data) === null || _b === void 0 ? void 0 : _b[props.field]
254
- : null;
255
- var isExpanderColumn = showExpander && columnIndex === 0;
256
- return (_jsx("td", { className: cx("solid-data-table-td align-top text-foreground", props.frozen && ((_c = props.alignFrozen) !== null && _c !== void 0 ? _c : "left") === "left" && "solid-tree-sticky-cell solid-tree-sticky-cell-left", props.frozen && props.alignFrozen === "right" && "solid-tree-sticky-cell solid-tree-sticky-cell-right", props.className, props.bodyClassName), style: __assign(__assign(__assign({}, props.style), { textAlign: normalizeTextAlign(props.align) }), getStickyStyles("column", columnIndex, "body")), children: isExpanderColumn ? (_jsxs("div", { className: "solid-tree-cell", children: [_jsx("div", { className: "solid-tree-cell-indent", style: { width: "".concat(depth * 1.25, "rem") }, "aria-hidden": "true" }), _jsx("button", { type: "button", className: "solid-tree-expander", disabled: expanderDisabled, onClick: function (event) {
257
- event.stopPropagation();
258
- if (expanderDisabled)
259
- return;
260
- var nextExpanded = __assign({}, expandedKeys);
261
- if (nextExpanded[key]) {
262
- delete nextExpanded[key];
263
- }
264
- else {
265
- nextExpanded[key] = true;
266
- }
267
- onToggle === null || onToggle === void 0 ? void 0 : onToggle({ value: nextExpanded });
268
- if (!isExpanded) {
269
- onExpand === null || onExpand === void 0 ? void 0 : onExpand({ node: node });
270
- }
271
- }, "aria-label": isExpanded ? "Collapse row" : "Expand row", children: expanderDisabled ? (_jsx(Minus, { size: 14, "aria-hidden": "true" })) : (_jsx(ChevronRight, { size: 14, "aria-hidden": "true", className: cx("solid-tree-expander-icon", isExpanded && "is-expanded") })) }), _jsx("div", { className: "solid-tree-cell-content", children: content })] })) : (content) }, "tree-cell-".concat(key, "-").concat(columnIndex)));
272
- })] }, key));
273
- })) })] }), loading ? (_jsx("div", { className: "solid-tree-table-loading-overlay", "aria-live": "polite", "aria-busy": "true", children: _jsxs("div", { className: "solid-tree-table-loading-pill", children: [_jsx(Loader2, { size: 14, className: "animate-spin" }), _jsx("span", { children: "Loading tree\u2026" })] }) })) : null] }) }) }));
243
+ var canExpand = typeof props.expander === "function"
244
+ ? props.expander(node)
245
+ : Boolean(props.expander);
246
+ var isExpanded = Boolean(expandedKeys[key]);
247
+ var hasChildren = Boolean((_a = node.children) === null || _a === void 0 ? void 0 : _a.length);
248
+ var showExpander = canExpand;
249
+ var expanderDisabled = node.leaf === true;
250
+ var content = props.body
251
+ ? props.body(node, { depth: depth, rowIndex: rowIndex })
252
+ : props.field
253
+ ? (_b = node === null || node === void 0 ? void 0 : node.data) === null || _b === void 0 ? void 0 : _b[props.field]
254
+ : null;
255
+ var isExpanderColumn = showExpander && columnIndex === 0;
256
+ return (_jsx("td", { className: cx("solid-data-table-td align-top text-foreground", props.frozen && ((_c = props.alignFrozen) !== null && _c !== void 0 ? _c : "left") === "left" && "solid-tree-sticky-cell solid-tree-sticky-cell-left", props.frozen && props.alignFrozen === "right" && "solid-tree-sticky-cell solid-tree-sticky-cell-right", props.className, props.bodyClassName), style: __assign(__assign(__assign({}, props.style), { textAlign: normalizeTextAlign(props.align) }), getStickyStyles("column", columnIndex, "body")), children: isExpanderColumn ? (_jsxs("div", { className: "solid-tree-cell", children: [_jsx("div", { className: "solid-tree-cell-indent", style: { width: "".concat(depth * 1.25, "rem") }, "aria-hidden": "true" }), _jsx("button", { type: "button", className: "solid-tree-expander", disabled: expanderDisabled, onClick: function (event) {
257
+ event.stopPropagation();
258
+ if (expanderDisabled)
259
+ return;
260
+ var nextExpanded = __assign({}, expandedKeys);
261
+ if (nextExpanded[key]) {
262
+ delete nextExpanded[key];
263
+ }
264
+ else {
265
+ nextExpanded[key] = true;
266
+ }
267
+ onToggle === null || onToggle === void 0 ? void 0 : onToggle({ value: nextExpanded });
268
+ if (!isExpanded) {
269
+ onExpand === null || onExpand === void 0 ? void 0 : onExpand({ node: node });
270
+ }
271
+ }, "aria-label": isExpanded ? "Collapse row" : "Expand row", children: expanderDisabled ? (_jsx(Minus, { size: 14, "aria-hidden": "true" })) : (_jsx(ChevronRight, { size: 14, "aria-hidden": "true", className: cx("solid-tree-expander-icon", isExpanded && "is-expanded") })) }), _jsx("div", { className: "solid-tree-cell-content", children: content })] })) : (content) }, "tree-cell-".concat(key, "-").concat(columnIndex)));
272
+ })] }, key));
273
+ })) })] }) }) }) }));
274
274
  }
275
275
  //# sourceMappingURL=SolidTreeTable.js.map