@solidxai/core-ui 0.1.3 → 0.1.4-beta.0

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 (127) hide show
  1. package/dist/components/auth/SolidInitialLoginOtp.d.ts.map +1 -1
  2. package/dist/components/auth/SolidInitialLoginOtp.js +0 -5
  3. package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
  4. package/dist/components/auth/SolidInitialLoginOtp.tsx +0 -5
  5. package/dist/components/auth/SolidLogin.d.ts.map +1 -1
  6. package/dist/components/auth/SolidLogin.js +7 -5
  7. package/dist/components/auth/SolidLogin.js.map +1 -1
  8. package/dist/components/auth/SolidLogin.tsx +10 -8
  9. package/dist/components/common/GeneralSettings.d.ts.map +1 -1
  10. package/dist/components/common/GeneralSettings.js +48 -47
  11. package/dist/components/common/GeneralSettings.js.map +1 -1
  12. package/dist/components/common/GeneralSettings.tsx +41 -10
  13. package/dist/components/core/common/FilterComponent.js.map +1 -1
  14. package/dist/components/core/common/FilterComponent.tsx +1 -1
  15. package/dist/components/core/common/GroupingComponent.d.ts +54 -0
  16. package/dist/components/core/common/GroupingComponent.d.ts.map +1 -0
  17. package/dist/components/core/common/GroupingComponent.js +196 -0
  18. package/dist/components/core/common/GroupingComponent.js.map +1 -0
  19. package/dist/components/core/common/GroupingComponent.tsx +452 -0
  20. package/dist/components/core/common/SolidGlobalSearchElement.d.ts +18 -1
  21. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  22. package/dist/components/core/common/SolidGlobalSearchElement.js +146 -47
  23. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  24. package/dist/components/core/common/SolidGlobalSearchElement.tsx +191 -18
  25. package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.d.ts +19 -0
  26. package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.d.ts.map +1 -0
  27. package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.js +90 -0
  28. package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.js.map +1 -0
  29. package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.tsx +59 -0
  30. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.d.ts.map +1 -1
  31. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js +7 -3
  32. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js.map +1 -1
  33. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx +45 -40
  34. package/dist/components/core/filter/SolidOneToManyFilterElement.d.ts +2 -0
  35. package/dist/components/core/filter/SolidOneToManyFilterElement.d.ts.map +1 -0
  36. package/dist/components/core/filter/SolidOneToManyFilterElement.js +86 -0
  37. package/dist/components/core/filter/SolidOneToManyFilterElement.js.map +1 -0
  38. package/dist/components/core/filter/SolidOneToManyFilterElement.tsx +62 -0
  39. package/dist/components/core/filter/SolidVarInputsFilterElement.d.ts +1 -0
  40. package/dist/components/core/filter/SolidVarInputsFilterElement.d.ts.map +1 -1
  41. package/dist/components/core/filter/SolidVarInputsFilterElement.js +4 -1
  42. package/dist/components/core/filter/SolidVarInputsFilterElement.js.map +1 -1
  43. package/dist/components/core/filter/SolidVarInputsFilterElement.tsx +10 -0
  44. package/dist/components/core/filter/fields/SolidRelationField.d.ts.map +1 -1
  45. package/dist/components/core/filter/fields/SolidRelationField.js +4 -2
  46. package/dist/components/core/filter/fields/SolidRelationField.js.map +1 -1
  47. package/dist/components/core/filter/fields/SolidRelationField.tsx +4 -2
  48. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.d.ts +4 -0
  49. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.d.ts.map +1 -0
  50. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.js +25 -0
  51. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.js.map +1 -0
  52. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.tsx +60 -0
  53. package/dist/components/core/form/SolidFormFooter.js +4 -4
  54. package/dist/components/core/form/SolidFormFooter.js.map +1 -1
  55. package/dist/components/core/form/SolidFormFooter.tsx +4 -4
  56. package/dist/components/core/form/fields/SolidBooleanField.d.ts.map +1 -1
  57. package/dist/components/core/form/fields/SolidBooleanField.js +11 -8
  58. package/dist/components/core/form/fields/SolidBooleanField.js.map +1 -1
  59. package/dist/components/core/form/fields/SolidBooleanField.tsx +20 -8
  60. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
  61. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +26 -21
  62. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
  63. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +27 -17
  64. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.d.ts +1 -0
  65. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.d.ts.map +1 -1
  66. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.js +51 -0
  67. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.js.map +1 -1
  68. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.ts +51 -0
  69. package/dist/components/core/kanban/SolidKanbanView.js +5 -5
  70. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  71. package/dist/components/core/kanban/SolidKanbanView.tsx +5 -5
  72. package/dist/components/core/list/SolidListView.d.ts +12 -7
  73. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  74. package/dist/components/core/list/SolidListView.js +138 -150
  75. package/dist/components/core/list/SolidListView.js.map +1 -1
  76. package/dist/components/core/list/SolidListView.tsx +84 -91
  77. package/dist/components/core/list/listViewRegistry.js.map +1 -1
  78. package/dist/components/core/list/listViewRegistry.ts +1 -2
  79. package/dist/components/core/tree/SolidTreeView.d.ts +38 -0
  80. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -0
  81. package/dist/components/core/tree/SolidTreeView.js +1170 -0
  82. package/dist/components/core/tree/SolidTreeView.js.map +1 -0
  83. package/dist/components/core/tree/SolidTreeView.tsx +1603 -0
  84. package/dist/components/core/tree/treeViewRegistry.d.ts +7 -0
  85. package/dist/components/core/tree/treeViewRegistry.d.ts.map +1 -0
  86. package/dist/components/core/tree/treeViewRegistry.js +17 -0
  87. package/dist/components/core/tree/treeViewRegistry.js.map +1 -0
  88. package/dist/components/core/tree/treeViewRegistry.ts +23 -0
  89. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  90. package/dist/components/core/users/CreateUser.js +19 -6
  91. package/dist/components/core/users/CreateUser.js.map +1 -1
  92. package/dist/components/core/users/CreateUser.tsx +39 -0
  93. package/dist/helpers/helpers.d.ts +2 -0
  94. package/dist/helpers/helpers.d.ts.map +1 -1
  95. package/dist/helpers/helpers.js +3 -1
  96. package/dist/helpers/helpers.js.map +1 -1
  97. package/dist/helpers/helpers.ts +4 -1
  98. package/dist/helpers/registry.d.ts.map +1 -1
  99. package/dist/helpers/registry.js +2 -0
  100. package/dist/helpers/registry.js.map +1 -1
  101. package/dist/helpers/registry.ts +3 -1
  102. package/dist/index.d.ts +3 -1
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +2 -0
  105. package/dist/index.js.map +1 -1
  106. package/dist/index.ts +6 -1
  107. package/dist/resources/globals.css +18 -4
  108. package/dist/routes/pages/admin/core/ListPage.d.ts.map +1 -1
  109. package/dist/routes/pages/admin/core/ListPage.js +1 -1
  110. package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
  111. package/dist/routes/pages/admin/core/ListPage.tsx +2 -1
  112. package/dist/routes/pages/admin/core/TreePage.d.ts +2 -0
  113. package/dist/routes/pages/admin/core/TreePage.d.ts.map +1 -0
  114. package/dist/routes/pages/admin/core/TreePage.js +37 -0
  115. package/dist/routes/pages/admin/core/TreePage.js.map +1 -0
  116. package/dist/routes/pages/admin/core/TreePage.tsx +30 -0
  117. package/dist/routes/solidRoutes.d.ts.map +1 -1
  118. package/dist/routes/solidRoutes.js +2 -0
  119. package/dist/routes/solidRoutes.js.map +1 -1
  120. package/dist/routes/solidRoutes.tsx +3 -1
  121. package/dist/routes/types.d.ts +1 -1
  122. package/dist/routes/types.d.ts.map +1 -1
  123. package/dist/routes/types.js.map +1 -1
  124. package/dist/routes/types.ts +1 -0
  125. package/dist/types/index.d.ts +8 -2
  126. package/dist/types/solid-core.d.ts +40 -0
  127. package/package.json +1 -1
@@ -49,6 +49,7 @@ export const GeneralSettings = () => {
49
49
  appLogo: solidSettingsData?.data?.appLogo ?? null,
50
50
  companylogo: solidSettingsData?.data?.companylogo ?? null,
51
51
  passwordlessRegistrationValidateWhat: solidSettingsData?.data?.passwordlessRegistrationValidateWhat ?? "email",
52
+ passwordlessLoginValidateWhat: solidSettingsData?.data?.passwordlessLoginValidateWhat ?? "email",
52
53
  allowPublicRegistration: solidSettingsData?.data?.allowPublicRegistration ?? false,
53
54
  passwordBasedAuth: solidSettingsData?.data?.passwordBasedAuth ?? false,
54
55
  passwordLessAuth: solidSettingsData?.data?.passwordLessAuth ?? false,
@@ -829,7 +830,7 @@ export const GeneralSettings = () => {
829
830
  <div className="col-12 mt-3">
830
831
  <div className="formgrid grid align-items-center">
831
832
  <div className="col-12 sm:col-12 lg:col-5 xl:col-5">
832
- <label className="form-field-label">Password Less Authentication Method</label>
833
+ <label className="form-field-label">Password Less Registration Method</label>
833
834
  </div>
834
835
  <div className='col-12 sm:col-12 lg:col-6 xl:col-6'>
835
836
  <div className="flex align-items-center gap-3 mt-3 lg:mt-0">
@@ -853,22 +854,52 @@ export const GeneralSettings = () => {
853
854
  />
854
855
  <label htmlFor="passwordlessRegistrationValidateWhat-mobile" className="ml-2">Mobile</label>
855
856
  </div>
857
+ </div>
858
+ </div>
859
+ </div>
860
+ </div>
861
+ }
862
+ {formik.values.passwordLessAuth === true &&
863
+ <div className="col-12 mt-3">
864
+ <div className="formgrid grid align-items-center">
865
+ <div className="col-12 sm:col-12 lg:col-5 xl:col-5">
866
+ <label className="form-field-label">Password Less Login Method</label>
867
+ </div>
868
+ <div className='col-12 sm:col-12 lg:col-6 xl:col-6'>
869
+ <div className="flex align-items-center gap-3 mt-3 lg:mt-0">
856
870
  <div className="flex align-items-center">
857
871
  <RadioButton
858
- inputId="passwordlessRegistrationValidateWhat-transactional"
859
- name="passwordlessRegistrationValidateWhat"
860
- value="transactional"
861
- checked={formik.values.passwordlessRegistrationValidateWhat === "transactional"}
862
- onChange={(e) => formik.setFieldValue("passwordlessRegistrationValidateWhat", e.value)}
872
+ inputId="passwordlessLoginValidateWhat-email"
873
+ name="passwordlessLoginValidateWhat"
874
+ value="email"
875
+ checked={formik.values.passwordlessLoginValidateWhat === "email"}
876
+ onChange={(e) => formik.setFieldValue("passwordlessLoginValidateWhat", e.value)}
877
+ />
878
+ <label htmlFor="passwordlessLoginValidateWhat-email" className="ml-2">Email</label>
879
+ </div>
880
+ <div className="flex align-items-center">
881
+ <RadioButton
882
+ inputId="passwordlessLoginValidateWhat-mobile"
883
+ name="passwordlessLoginValidateWhat"
884
+ value="mobile"
885
+ checked={formik.values.passwordlessLoginValidateWhat === "mobile"}
886
+ onChange={(e) => formik.setFieldValue("passwordlessLoginValidateWhat", e.value)}
887
+ />
888
+ <label htmlFor="passwordlessLoginValidateWhat-mobile" className="ml-2">Mobile</label>
889
+ </div>
890
+ <div className="flex align-items-center">
891
+ <RadioButton
892
+ inputId="passwordlessLoginValidateWhat-selectable"
893
+ name="passwordlessLoginValidateWhat"
894
+ value="selectable"
895
+ checked={formik.values.passwordlessLoginValidateWhat === "selectable"}
896
+ onChange={(e) => formik.setFieldValue("passwordlessLoginValidateWhat", e.value)}
863
897
  />
864
- <label htmlFor="passwordlessRegistrationValidateWhat-transactional" className="ml-2">Transactional</label>
898
+ <label htmlFor="passwordlessLoginValidateWhat-selectable" className="ml-2">Selectable</label>
865
899
  </div>
866
900
  </div>
867
901
  </div>
868
902
  </div>
869
- {formik.values.passwordlessRegistrationValidateWhat === "transactional" &&
870
- <p className="mt-3 text-sm font-bold">Note : In this method, you can pass the authentication method from the ui with possible values being either email or mobile. You can also pass both the values here</p>
871
- }
872
903
  </div>
873
904
  }
874
905
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"FilterComponent.js","sourceRoot":"","sources":["../../../../src/components/core/common/FilterComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { Calendar } from 'primereact/calendar';\nimport { Dropdown } from 'primereact/dropdown';\nimport { InputNumber } from 'primereact/inputnumber';\nimport { InputText } from 'primereact/inputtext';\nimport { Tooltip } from 'primereact/tooltip';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { SolidFilterFields } from '../filter/SolidFilterFields';\nimport { Button } from 'primereact/button';\nimport { Fieldset } from 'primereact/fieldset';\nimport { OverlayPanel } from 'primereact/overlaypanel';\nimport { AutoComplete } from 'primereact/autocomplete';\n\nexport enum FilterRuleType {\n RULE = 'rule',\n RULE_GROUP = 'rule_group'\n}\n\nexport enum FilterOperator {\n AND = 'and',\n OR = 'or'\n}\n\nexport enum FilterMatchMode {\n STARTS_WITH = 'startsWith',\n CONTAINS = 'contains',\n EQUALS = 'equals',\n GREATER_THAN = 'gt',\n LESS_THAN = 'lt',\n}\n\nexport interface FilterRule {\n id: number;\n type: FilterRuleType;\n matchOperator?: FilterOperator;\n fieldName?: string | null;\n matchMode?: FilterMatchMode | null;\n value?: any;\n parentRule: number | null;\n children?: FilterRule[];\n}\n\nexport interface Field {\n name: string;\n type: 'string' | 'number' | 'date';\n}\n\n// const fields: Field[] = [\n// { name: 'name', type: 'string' },\n// { name: 'dob', type: 'date' },\n// { name: 'lastName', type: 'string' },\n// { name: 'amount', type: 'number' }\n// ];\n\nconst operatorOptions = {\n // string: [FilterMatchMode.CONTAINS, FilterMatchMode.EQUALS],\n // date: [FilterMatchMode.EQUALS, FilterMatchMode.GREATER_THAN, FilterMatchMode.LESS_THAN],\n // number: [FilterMatchMode.GREATER_THAN, FilterMatchMode.LESS_THAN],\n id: [FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.LESS_THAN, FilterMatchMode.LESS_THAN_OR_EQUAL_TO, FilterMatchMode.GREATER_THAN, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO, FilterMatchMode.IN, FilterMatchMode.NOT_IN, FilterMatchMode.BETWEEN],\n int: [FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.LESS_THAN, FilterMatchMode.LESS_THAN_OR_EQUAL_TO, FilterMatchMode.GREATER_THAN, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO, FilterMatchMode.IN, FilterMatchMode.NOT_IN, FilterMatchMode.BETWEEN],\n bigint: [FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.LESS_THAN, FilterMatchMode.LESS_THAN_OR_EQUAL_TO, FilterMatchMode.GREATER_THAN, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO, FilterMatchMode.IN, FilterMatchMode.NOT_IN, FilterMatchMode.BETWEEN],\n float: [FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.LESS_THAN, FilterMatchMode.LESS_THAN_OR_EQUAL_TO, FilterMatchMode.GREATER_THAN, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO, FilterMatchMode.IN, FilterMatchMode.NOT_IN, FilterMatchMode.BETWEEN],\n decimal: [FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.LESS_THAN, FilterMatchMode.LESS_THAN_OR_EQUAL_TO, FilterMatchMode.GREATER_THAN, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO, FilterMatchMode.IN, FilterMatchMode.NOT_IN, FilterMatchMode.BETWEEN],\n shortText: [FilterMatchMode.STARTS_WITH, FilterMatchMode.CONTAINS, FilterMatchMode.NOT_CONTAINS, FilterMatchMode.ENDS_WITH, FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n longText: [FilterMatchMode.STARTS_WITH, FilterMatchMode.CONTAINS, FilterMatchMode.NOT_CONTAINS, FilterMatchMode.ENDS_WITH, FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n richText: [FilterMatchMode.STARTS_WITH, FilterMatchMode.CONTAINS, FilterMatchMode.NOT_CONTAINS, FilterMatchMode.ENDS_WITH, FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n boolean: [FilterMatchMode.EQUALS],\n date: [FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.LESS_THAN, FilterMatchMode.LESS_THAN_OR_EQUAL_TO, FilterMatchMode.GREATER_THAN, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO, FilterMatchMode.IN, FilterMatchMode.NOT_IN, FilterMatchMode.BETWEEN,],\n datetime: [FilterMatchMode.EQUALS],\n time: [FilterMatchMode.EQUALS],\n relation: [FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n mediaSingle: [],\n mediaMultiple: [],\n selectionStatic: [FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n selectionDynamic: [FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n computed: [],\n externalId: [FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n uuid: [FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n\n};\n\nconst getRandomInt = (min, max) => {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\n// Component to render a single filter rule\nconst FilterRuleComponent = ({ viewData, fields, rule, onChange, onAddRule, onAddGroup, onDelete, level }) => {\n // const applicableOperators = rule.fieldName ? operatorOptions[fields.find(f => f.name === rule.fieldName)?.value.type].map(e => { return { name: e } }) : [];\n // const applicableInputField = rule.fieldName ? fields.find(f => f.name === rule.fieldName)?.type : \"\";\n\n const autoCompleteRef = useRef(null);\n\n const [fieldName, setFieldName] = useState({ name: rule.fieldName });\n const [matchMode, setMatchMode] = useState({ name: rule.matchMode });\n\n const [filteredFields, setFilteredFields] = useState<any[]>([]);\n\n const searchFields = (event: any) => {\n const query = event.query.toLowerCase();\n const filtered = !query\n ? fields\n : fields.filter((item: any) =>\n item.name.toLowerCase().startsWith(query)\n );\n setFilteredFields(filtered);\n setTimeout(() => {\n autoCompleteRef.current?.show();\n }, 0);\n };\n return (\n // <div style={{ marginLeft: (level - 1) * 10 + 'px' }} className=\"filter-rule\">\n\n <div className='mt-2'>\n <div className='flex flex-column md:flex-row align-items-start md:align-items-center gap-2 md:gap-3'>\n <div className='formgrid grid w-full'>\n <div className='col-12 md:col-4 pb-2 md:pb-0'>\n <AutoComplete\n ref={autoCompleteRef}\n value={fieldName.name}\n suggestions={filteredFields}\n completeMethod={searchFields}\n field=\"name\"\n dropdown\n forceSelection // only values from list\n placeholder=\"Select Field\"\n className=\"w-full p-inputtext-sm solid-filter-auto-complete-field\"\n onChange={(e) => {\n setFieldName({ name: e.value }); // e.value will be an object or null\n if (e.value) {\n onChange(rule.id, 'fieldName', e.value.value); // send value to parent\n } else {\n onChange(rule.id, 'fieldName', '');\n }\n }}\n />\n </div>\n <div className='col-12 md:col-8'>\n <div className='formgrid grid w-full'>\n {rule.fieldName ?\n <div className='col-12'>\n <SolidFilterFields viewData={viewData} fieldMetadata={viewData.data.solidFieldsMetadata[rule.fieldName]} onChange={onChange} index={rule.id} rule={rule}></SolidFilterFields>\n </div>\n : <>\n <div className='col-12 md:col-6 pb-2 md:pb-0'>\n <InputText\n disabled\n value={rule.value || ''}\n placeholder=\"operator\"\n className='w-full p-inputtext-sm '\n />\n </div>\n <div className='col-12 md:col-6'>\n <InputText\n disabled\n value={rule.value || ''}\n placeholder=\"value\"\n className='w-full p-inputtext-sm'\n />\n </div>\n </>\n }\n </div>\n </div>\n </div>\n <div className='formgrid grid'>\n <div className='col-4 px-0 flex align-items-center'>\n <Button text severity='secondary' icon=\"pi pi-plus\" size='small' onClick={() => onAddRule(rule.parentRule)} className='solid-filter-action-btn' />\n </div>\n <div className='col-4 px-0 flex align-items-center'>\n <Button text severity='secondary' icon={\"pi pi-folder-plus\"} size='small' onClick={() => onAddGroup(rule.id)} className='solid-filter-action-btn' />\n </div>\n <div className='col-4 px-0 flex align-items-center'>\n <Button text severity='secondary' icon=\"pi pi-trash\" size='small' onClick={() => onDelete(rule.id)} className='solid-filter-action-btn' />\n </div>\n </div>\n </div>\n\n {rule.children && rule.children.map(nestedRule => (\n <div className='py-3 nested-custom-filter' key={nestedRule.id}>\n {nestedRule.type === FilterRuleType.RULE\n ? <FilterRuleComponent key={nestedRule.id} viewData={viewData} fields={fields} rule={nestedRule} onChange={onChange} onAddRule={onAddRule} onAddGroup={onAddGroup} onDelete={onDelete} level={level + 1} />\n : <FilterGroupComponent key={nestedRule.id} viewData={viewData} fields={fields} group={nestedRule} onChange={onChange} onAddRule={onAddRule} onAddGroup={onAddGroup} onDelete={onDelete} level={level + 1} />\n }\n </div>\n ))}\n {/* <Button text label='Add Condition' icon=\"pi pi-plus\" size='small' onClick={() => onAddRule(rule.parentRule)} /> */}\n </div>\n );\n};\n\n// Component to render a group of filter rules\nconst FilterGroupComponent = ({ viewData, fields, group, onChange, onAddRule, onAddGroup, onDelete, level }) => {\n const op = useRef(null);\n const legendTemplate = (\n <>\n <Button\n size='small'\n label={group.matchOperator}\n className='small-button'\n icon=\"pi pi-angle-down\"\n iconPos='right'\n onClick={(e) => op.current.toggle(e)}\n style={{\n textTransform: \"uppercase\"\n }}\n />\n <OverlayPanel ref={op} className='m-0'>\n <div className='flex flex-column'>\n <Button\n size=\"small\"\n label=\"AND\"\n text\n className='small-button'\n onClick={(e) => { onChange(group.id, 'matchOperator', FilterOperator.AND); op.current.hide(e) }}\n />\n <Button\n size=\"small\"\n label=\"OR\"\n text\n className='small-button'\n onClick={(e) => { onChange(group.id, 'matchOperator', FilterOperator.OR); op.current.hide(e) }}\n />\n </div>\n </OverlayPanel>\n </>\n // <select className='filter-select'\n // value={group.matchOperator}\n // onChange={e => onChange(group.id, 'matchOperator', e.target.value)}\n // >\n // <option value={FilterOperator.AND}>AND</option>\n // <option value={FilterOperator.OR}>OR</option>\n // </select>\n )\n return (\n <Fieldset legend={legendTemplate} className='primary-filter-fieldset'>\n {group.children && group.children.map(rule => (\n rule.type === FilterRuleType.RULE\n ? <FilterRuleComponent key={rule.id} viewData={viewData} fields={fields} rule={rule} onChange={onChange} onAddRule={onAddRule} onAddGroup={onAddGroup} onDelete={onDelete} level={level + 1} />\n : <FilterGroupComponent key={rule.id} viewData={viewData} fields={fields} group={rule} onChange={onChange} onAddRule={onAddRule} onAddGroup={onAddGroup} onDelete={onDelete} level={level + 1} />\n ))}\n {/* {level > 0 &&\n <div className='mt-2'>\n <Button size=\"small\" severity='danger' icon=\"pi pi-trash \" onClick={() => onDelete(group.id)} />\n </div>\n } */}\n\n {/* Add Condition Button to add parent rule */}\n {level === 0 &&\n <Button text label='Add Condition' icon=\"pi pi-plus\" size='small' onClick={() => onAddRule(group.id)} className='px-0 mt-2' />\n }\n </Fieldset>\n );\n};\n\n// Main Filter component\nconst FilterComponent = ({ viewData, fields, filterRules, setFilterRules, transformFilterRules, closeDialog }) => {\n // const initialState: FilterRule[] = [\n // {\n // id: 1,\n // type: FilterRuleType.RULE_GROUP,\n // matchOperator: FilterOperator.OR,\n // parentRule: null,\n // children: [\n // {\n // id: Date.now() + getRandomInt(1, 500),\n // type: FilterRuleType.RULE,\n // fieldName: null,\n // matchMode: null,\n // value: null,\n // parentRule: 1,\n // children: []\n // }\n // ]\n // }\n // ];\n\n // const [filterRules, setFilterRules] = useState<FilterRule[]>(initialState);\n const [printedState, setPrintedState] = useState<string>('');\n\n const addChild = (rules, parentId, newChild) => {\n return rules.map(rule => {\n if (rule.id === parentId) {\n return {\n ...rule,\n children: [...(rule.children || []), newChild]\n };\n } else if (rule.children) {\n return {\n ...rule,\n children: addChild(rule.children, parentId, newChild)\n };\n }\n return rule;\n });\n };\n\n const handleChange = (id, key, value) => {\n const updateRuleRecursively = (rules) => {\n return rules.map(rule => {\n if (rule.id === id) {\n return { ...rule, [key]: value };\n } else if (rule.children) {\n return {\n ...rule,\n children: updateRuleRecursively(rule.children)\n };\n }\n return rule;\n });\n };\n setFilterRules(prev => updateRuleRecursively(prev));\n };\n\n const handleAddRule = (parentGroupId) => {\n const newRule: FilterRule = {\n id: Date.now(),\n type: FilterRuleType.RULE,\n fieldName: null,\n matchMode: null,\n value: null,\n parentRule: parentGroupId,\n children: []\n };\n setFilterRules(prev => addChild(prev, parentGroupId, newRule));\n };\n\n const handleAddGroup = (parentRuleId) => {\n const newGroupId = Date.now();\n const newGroup: FilterRule = {\n id: newGroupId,\n type: FilterRuleType.RULE_GROUP,\n matchOperator: FilterOperator.AND,\n parentRule: parentRuleId,\n children: [\n {\n id: Date.now() + getRandomInt(1, 500),\n type: FilterRuleType.RULE,\n fieldName: null,\n matchMode: null,\n value: null,\n parentRule: newGroupId,\n children: []\n },\n {\n id: Date.now() + getRandomInt(1, 500),\n type: FilterRuleType.RULE,\n fieldName: null,\n matchMode: null,\n value: null,\n parentRule: newGroupId,\n children: []\n }\n ]\n };\n setFilterRules(prev => addChild(prev, parentRuleId, newGroup));\n };\n\n // const handleDeleteRule = (id) => {\n // const deleteRecursively = (rules, id) => {\n // return rules.filter(rule => rule.id !== id).map(rule => {\n // if (rule.children) {\n // return {\n // ...rule,\n // children: deleteRecursively(rule.children, id)\n // };\n // }\n // return rule;\n // });\n // };\n // setFilterRules(prev => deleteRecursively(prev, id));\n // };\n\n\n const removeEmptyGroups = (rule) => {\n if (rule.type === \"rule_group\" && rule.children.length === 0) {\n return null;\n }\n\n rule.children = rule.children\n .map(removeEmptyGroups) // Recursively process children\n .filter(child => child !== null); // Remove null values\n\n return rule;\n };\n\n\n const handleDeleteRule = (id) => {\n if (filterRules[0].children.length === 1 && filterRules[0].children[0].id === id) {\n return\n }\n const deleteRecursively = (rules, id, isRoot = false) => {\n const mappedData = rules\n .map(rule => {\n if (rule.id === id) {\n return null; // Remove the target rule\n }\n\n if (rule.children) {\n const updatedChildren = deleteRecursively(rule.children, id);\n\n // If this rule had children and now has none, keep it but set children to []\n if (rule.children.length > 0 && updatedChildren.length === 0) {\n return { ...rule, children: [] };\n }\n\n return { ...rule, children: updatedChildren };\n }\n\n return rule;\n })\n .filter(rule => rule !== null); // Remove null values\n\n return mappedData\n };\n\n setFilterRules(prevRules => [removeEmptyGroups(deleteRecursively(prevRules, id, true)[0])]);\n };\n\n\n\n\n\n // const handlePrintState = () => {\n // // setPrintedState(JSON.stringify(filterRules, null, 2)); // Pretty format the state\n // transformFilterRules(filterRules)\n // };\n\n\n\n\n return (\n <div className=''>\n {filterRules.map(rule => (\n <FilterGroupComponent\n key={rule.id}\n viewData={viewData}\n fields={fields}\n group={rule}\n onChange={handleChange}\n onAddRule={handleAddRule}\n onAddGroup={handleAddGroup}\n onDelete={handleDeleteRule}\n level={0} // Top-level group\n />\n ))}\n <div className='flex gap-3 mt-3'>\n <Button label=\"Apply\" size=\"small\" onClick={() => transformFilterRules(filterRules)} type=\"submit\" />\n <Button type='button' label='Cancel' outlined size='small' onClick={closeDialog} />\n {/* \n <br></br>\n <textarea value={printedState} readOnly rows={20} cols={100} style={{ marginTop: '20px' }} /> */}\n </div>\n </div>\n );\n};\n\nexport default FilterComponent;"]}
1
+ {"version":3,"file":"FilterComponent.js","sourceRoot":"","sources":["../../../../src/components/core/common/FilterComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { Calendar } from 'primereact/calendar';\nimport { Dropdown } from 'primereact/dropdown';\nimport { InputNumber } from 'primereact/inputnumber';\nimport { InputText } from 'primereact/inputtext';\nimport { Tooltip } from 'primereact/tooltip';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { SolidFilterFields } from '../filter/SolidFilterFields';\nimport { Button } from 'primereact/button';\nimport { Fieldset } from 'primereact/fieldset';\nimport { OverlayPanel } from 'primereact/overlaypanel';\nimport { AutoComplete } from 'primereact/autocomplete';\n\nexport enum FilterRuleType {\n RULE = 'rule',\n RULE_GROUP = 'rule_group'\n}\n\nexport enum FilterOperator {\n AND = 'and',\n OR = 'or'\n}\n\nexport enum FilterMatchMode {\n STARTS_WITH = 'startsWith',\n CONTAINS = 'contains',\n EQUALS = 'equals',\n GREATER_THAN = 'gt',\n LESS_THAN = 'lt',\n}\n\nexport interface FilterRule {\n id: number;\n type: FilterRuleType;\n matchOperator?: FilterOperator;\n fieldName?: string | null;\n matchMode?: FilterMatchMode | null;\n value?: any;\n parentRule: number | null;\n children?: FilterRule[];\n}\n\nexport interface Field {\n name: string;\n type: 'string' | 'number' | 'date';\n}\n\n// const fields: Field[] = [\n// { name: 'name', type: 'string' },\n// { name: 'dob', type: 'date' },\n// { name: 'lastName', type: 'string' },\n// { name: 'amount', type: 'number' }\n// ];\n\nconst operatorOptions = {\n // string: [FilterMatchMode.CONTAINS, FilterMatchMode.EQUALS],\n // date: [FilterMatchMode.EQUALS, FilterMatchMode.GREATER_THAN, FilterMatchMode.LESS_THAN],\n // number: [FilterMatchMode.GREATER_THAN, FilterMatchMode.LESS_THAN],\n id: [FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.LESS_THAN, FilterMatchMode.LESS_THAN_OR_EQUAL_TO, FilterMatchMode.GREATER_THAN, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO, FilterMatchMode.IN, FilterMatchMode.NOT_IN, FilterMatchMode.BETWEEN],\n int: [FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.LESS_THAN, FilterMatchMode.LESS_THAN_OR_EQUAL_TO, FilterMatchMode.GREATER_THAN, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO, FilterMatchMode.IN, FilterMatchMode.NOT_IN, FilterMatchMode.BETWEEN],\n bigint: [FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.LESS_THAN, FilterMatchMode.LESS_THAN_OR_EQUAL_TO, FilterMatchMode.GREATER_THAN, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO, FilterMatchMode.IN, FilterMatchMode.NOT_IN, FilterMatchMode.BETWEEN],\n float: [FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.LESS_THAN, FilterMatchMode.LESS_THAN_OR_EQUAL_TO, FilterMatchMode.GREATER_THAN, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO, FilterMatchMode.IN, FilterMatchMode.NOT_IN, FilterMatchMode.BETWEEN],\n decimal: [FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.LESS_THAN, FilterMatchMode.LESS_THAN_OR_EQUAL_TO, FilterMatchMode.GREATER_THAN, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO, FilterMatchMode.IN, FilterMatchMode.NOT_IN, FilterMatchMode.BETWEEN],\n shortText: [FilterMatchMode.STARTS_WITH, FilterMatchMode.CONTAINS, FilterMatchMode.NOT_CONTAINS, FilterMatchMode.ENDS_WITH, FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n longText: [FilterMatchMode.STARTS_WITH, FilterMatchMode.CONTAINS, FilterMatchMode.NOT_CONTAINS, FilterMatchMode.ENDS_WITH, FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n richText: [FilterMatchMode.STARTS_WITH, FilterMatchMode.CONTAINS, FilterMatchMode.NOT_CONTAINS, FilterMatchMode.ENDS_WITH, FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n boolean: [FilterMatchMode.EQUALS],\n date: [FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.LESS_THAN, FilterMatchMode.LESS_THAN_OR_EQUAL_TO, FilterMatchMode.GREATER_THAN, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO, FilterMatchMode.IN, FilterMatchMode.NOT_IN, FilterMatchMode.BETWEEN,],\n datetime: [FilterMatchMode.EQUALS],\n time: [FilterMatchMode.EQUALS],\n relation: [FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n mediaSingle: [],\n mediaMultiple: [],\n selectionStatic: [FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n selectionDynamic: [FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n computed: [],\n externalId: [FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n uuid: [FilterMatchMode.IN, FilterMatchMode.NOT_IN],\n\n};\n\nconst getRandomInt = (min, max) => {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\n// Component to render a single filter rule\nconst FilterRuleComponent = ({ viewData, fields, rule, onChange, onAddRule, onAddGroup, onDelete, level }) => {\n // const applicableOperators = rule.fieldName ? operatorOptions[fields.find(f => f.name === rule.fieldName)?.value.type].map(e => { return { name: e } }) : [];\n // const applicableInputField = rule.fieldName ? fields.find(f => f.name === rule.fieldName)?.type : \"\";\n\n const autoCompleteRef = useRef(null);\n\n const [fieldName, setFieldName] = useState({ name: rule.fieldName });\n const [matchMode, setMatchMode] = useState({ name: rule.matchMode });\n\n const [filteredFields, setFilteredFields] = useState<any[]>([]);\n\n const searchFields = (event: any) => {\n const query = event.query.toLowerCase();\n const filtered = !query\n ? fields\n : fields.filter((item: any) =>\n item.name.toLowerCase().startsWith(query)\n );\n setFilteredFields(filtered);\n setTimeout(() => {\n autoCompleteRef.current?.show();\n }, 0);\n };\n return (\n // <div style={{ marginLeft: (level - 1) * 10 + 'px' }} className=\"filter-rule\">\n\n <div className='mt-2'>\n <div className='flex flex-column md:flex-row align-items-start md:align-items-center gap-2 md:gap-3'>\n <div className='formgrid grid w-full'>\n <div className='col-12 md:col-4 pb-2 md:pb-0'>\n <AutoComplete\n ref={autoCompleteRef}\n value={fieldName.name}\n suggestions={filteredFields}\n completeMethod={searchFields}\n field=\"name\"\n dropdown\n forceSelection // only values from list\n placeholder=\"Select Field\"\n className=\"w-full p-inputtext-sm solid-filter-auto-complete-field\"\n onChange={(e) => {\n setFieldName({ name: e.value }); // e.value will be an object or null\n if (e.value) {\n onChange(rule.id, 'fieldName', e.value.value); // send value to parent\n } else {\n onChange(rule.id, 'fieldName', '');\n }\n }}\n />\n </div>\n <div className='col-12 md:col-8'>\n <div className='formgrid grid w-full'>\n {rule.fieldName ?\n <div className='col-12'>\n <SolidFilterFields viewData={viewData} fieldMetadata={viewData.data.solidFieldsMetadata[rule.fieldName]} onChange={onChange} index={rule.id} rule={rule}></SolidFilterFields>\n </div>\n : <>\n <div className='col-12 md:col-6 pb-2 md:pb-0'>\n <InputText\n disabled\n value={rule.value || ''}\n placeholder=\"operator\"\n className='w-full p-inputtext-sm '\n />\n </div>\n <div className='col-12 md:col-6'>\n <InputText\n disabled\n value={rule.value || ''}\n placeholder=\"value\"\n className='w-full p-inputtext-sm'\n />\n </div>\n </>\n }\n </div>\n </div>\n </div>\n <div className='formgrid grid'>\n <div className='col-4 px-0 flex align-items-center'>\n <Button text severity='secondary' icon=\"pi pi-plus\" size='small' onClick={() => onAddRule(rule.parentRule)} className='solid-filter-action-btn' />\n </div>\n <div className='col-4 px-0 flex align-items-center'>\n <Button text severity='secondary' icon={\"pi pi-folder-plus\"} size='small' onClick={() => onAddGroup(rule.id)} className='solid-filter-action-btn' />\n </div>\n <div className='col-4 px-0 flex align-items-center'>\n <Button text severity='secondary' icon=\"pi pi-trash\" size='small' onClick={() => onDelete(rule.id)} className='solid-filter-action-btn' />\n </div>\n </div>\n </div>\n\n {rule.children && rule.children.map(nestedRule => (\n <div className='py-3 nested-custom-filter' key={nestedRule.id}>\n {nestedRule.type === FilterRuleType.RULE\n ? <FilterRuleComponent key={nestedRule.id} viewData={viewData} fields={fields} rule={nestedRule} onChange={onChange} onAddRule={onAddRule} onAddGroup={onAddGroup} onDelete={onDelete} level={level + 1} />\n : <FilterGroupComponent key={nestedRule.id} viewData={viewData} fields={fields} group={nestedRule} onChange={onChange} onAddRule={onAddRule} onAddGroup={onAddGroup} onDelete={onDelete} level={level + 1} />\n }\n </div>\n ))}\n {/* <Button text label='Add Condition' icon=\"pi pi-plus\" size='small' onClick={() => onAddRule(rule.parentRule)} /> */}\n </div>\n );\n};\n\n// Component to render a group of filter rules\nconst FilterGroupComponent = ({ viewData, fields, group, onChange, onAddRule, onAddGroup, onDelete, level }) => {\n const op = useRef(null);\n const legendTemplate = (\n <>\n <Button\n size='small'\n label={group.matchOperator}\n className='small-button'\n icon=\"pi pi-angle-down\"\n iconPos='right'\n onClick={(e) => op.current.toggle(e)}\n style={{\n textTransform: \"uppercase\"\n }}\n />\n <OverlayPanel ref={op} className='m-0'>\n <div className='flex flex-column'>\n <Button\n size=\"small\"\n label=\"AND\"\n text\n className='small-button'\n onClick={(e) => { onChange(group.id, 'matchOperator', FilterOperator.AND); op.current.hide(e) }}\n />\n <Button\n size=\"small\"\n label=\"OR\"\n text\n className='small-button'\n onClick={(e) => { onChange(group.id, 'matchOperator', FilterOperator.OR); op.current.hide(e) }}\n />\n </div>\n </OverlayPanel>\n </>\n // <select className='filter-select'\n // value={group.matchOperator}\n // onChange={e => onChange(group.id, 'matchOperator', e.target.value)}\n // >\n // <option value={FilterOperator.AND}>AND</option>\n // <option value={FilterOperator.OR}>OR</option>\n // </select>\n )\n return (\n <Fieldset legend={legendTemplate} className='primary-filter-fieldset'>\n {group.children && group.children.map(rule => (\n rule.type === FilterRuleType.RULE\n ? <FilterRuleComponent key={rule.id} viewData={viewData} fields={fields} rule={rule} onChange={onChange} onAddRule={onAddRule} onAddGroup={onAddGroup} onDelete={onDelete} level={level + 1} />\n : <FilterGroupComponent key={rule.id} viewData={viewData} fields={fields} group={rule} onChange={onChange} onAddRule={onAddRule} onAddGroup={onAddGroup} onDelete={onDelete} level={level + 1} />\n ))}\n {/* {level > 0 &&\n <div className='mt-2'>\n <Button size=\"small\" severity='danger' icon=\"pi pi-trash \" onClick={() => onDelete(group.id)} />\n </div>\n } */}\n\n {/* Add Condition Button to add parent rule */}\n {level === 0 &&\n <Button text label='Add Condition' icon=\"pi pi-plus\" size='small' onClick={() => onAddRule(group.id)} className='px-0 mt-2' />\n }\n </Fieldset>\n );\n};\n\n// Main Filter component\nconst FilterComponent = ({ viewData, fields, filterRules, setFilterRules, transformFilterRules, closeDialog }) => {\n // const initialState: FilterRule[] = [\n // {\n // id: 1,\n // type: FilterRuleType.RULE_GROUP,\n // matchOperator: FilterOperator.OR,\n // parentRule: null,\n // children: [\n // {\n // id: Date.now() + getRandomInt(1, 500),\n // type: FilterRuleType.RULE,\n // fieldName: null,\n // matchMode: null,\n // value: null,\n // parentRule: 1,\n // children: []\n // }\n // ]\n // }\n // ];\n\n // const [filterRules, setFilterRules] = useState<FilterRule[]>(initialState);\n const [printedState, setPrintedState] = useState<string>('');\n\n const addChild = (rules, parentId, newChild) => {\n return rules.map(rule => {\n if (rule.id === parentId) {\n return {\n ...rule,\n children: [...(rule.children || []), newChild]\n };\n } else if (rule.children) {\n return {\n ...rule,\n children: addChild(rule.children, parentId, newChild)\n };\n }\n return rule;\n });\n };\n\n const handleChange = (id, key, value) => {\n const updateRuleRecursively = (rules) => {\n return rules.map(rule => {\n if (rule.id === id) {\n return { ...rule, [key]: value };\n } else if (rule.children) {\n return {\n ...rule,\n children: updateRuleRecursively(rule.children)\n };\n }\n return rule;\n });\n };\n setFilterRules(prev => updateRuleRecursively(prev));\n };\n\n const handleAddRule = (parentGroupId) => {\n const newRule: FilterRule = {\n id: Date.now(),\n type: FilterRuleType.RULE,\n fieldName: null,\n matchMode: null,\n value: null,\n parentRule: parentGroupId,\n children: []\n };\n setFilterRules(prev => addChild(prev, parentGroupId, newRule));\n };\n\n const handleAddGroup = (parentRuleId) => {\n const newGroupId = Date.now();\n const newGroup: FilterRule = {\n id: newGroupId,\n type: FilterRuleType.RULE_GROUP,\n matchOperator: FilterOperator.AND,\n parentRule: parentRuleId,\n children: [\n {\n id: Date.now() + getRandomInt(1, 500),\n type: FilterRuleType.RULE,\n fieldName: null,\n matchMode: null,\n value: null,\n parentRule: newGroupId,\n children: []\n },\n {\n id: Date.now() + getRandomInt(1, 500),\n type: FilterRuleType.RULE,\n fieldName: null,\n matchMode: null,\n value: null,\n parentRule: newGroupId,\n children: []\n }\n ]\n };\n setFilterRules(prev => addChild(prev, parentRuleId, newGroup));\n };\n\n // const handleDeleteRule = (id) => {\n // const deleteRecursively = (rules, id) => {\n // return rules.filter(rule => rule.id !== id).map(rule => {\n // if (rule.children) {\n // return {\n // ...rule,\n // children: deleteRecursively(rule.children, id)\n // };\n // }\n // return rule;\n // });\n // };\n // setFilterRules(prev => deleteRecursively(prev, id));\n // };\n\n\n const removeEmptyGroups = (rule) => {\n if (rule.type === \"rule_group\" && rule.children.length === 0) {\n return null;\n }\n\n rule.children = rule.children\n .map(removeEmptyGroups) // Recursively process children\n .filter(child => child !== null); // Remove null values\n\n return rule;\n };\n\n\n const handleDeleteRule = (id) => {\n if (filterRules[0].children.length === 1 && filterRules[0].children[0].id === id) {\n return\n }\n const deleteRecursively = (rules, id, isRoot = false) => {\n const mappedData = rules\n .map(rule => {\n if (rule.id === id) {\n return null; // Remove the target rule\n }\n\n if (rule.children) {\n const updatedChildren = deleteRecursively(rule.children, id);\n\n // If this rule had children and now has none, keep it but set children to []\n if (rule.children.length > 0 && updatedChildren.length === 0) {\n return { ...rule, children: [] };\n }\n\n return { ...rule, children: updatedChildren };\n }\n\n return rule;\n })\n .filter(rule => rule !== null); // Remove null values\n\n return mappedData\n };\n\n setFilterRules(prevRules => [removeEmptyGroups(deleteRecursively(prevRules, id, true)[0])]);\n };\n\n\n\n\n\n // const handlePrintState = () => {\n // // setPrintedState(JSON.stringify(filterRules, null, 2)); // Pretty format the state\n // transformFilterRules(filterRules)\n // };\n\n\n\n\n return (\n <div className=''>\n {filterRules.map(rule => (\n <FilterGroupComponent\n key={rule.id}\n viewData={viewData}\n fields={fields}\n group={rule}\n onChange={handleChange}\n onAddRule={handleAddRule}\n onAddGroup={handleAddGroup}\n onDelete={handleDeleteRule}\n level={0} // Top-level group\n />\n ))}\n <div className='flex gap-3 mt-3'>\n <Button label=\"Apply\" size=\"small\" onClick={() => transformFilterRules(filterRules)} type=\"submit\" />\n <Button type='button' label='Cancel' outlined size='small' onClick={closeDialog} />\n {/* \n <br></br>\n <textarea value={printedState} readOnly rows={20} cols={100} style={{ marginTop: '20px' }} /> */}\n </div>\n </div>\n );\n};\n\nexport default FilterComponent;"]}
@@ -104,7 +104,7 @@ const FilterRuleComponent = ({ viewData, fields, rule, onChange, onAddRule, onAd
104
104
  );
105
105
  setFilteredFields(filtered);
106
106
  setTimeout(() => {
107
- autoCompleteRef.current?.show();
107
+ autoCompleteRef.current?.show();
108
108
  }, 0);
109
109
  };
110
110
  return (
@@ -0,0 +1,54 @@
1
+ import { GroupableField } from "./SolidGlobalSearchElement";
2
+ export type AggregationOperator = "count" | "sum" | "avg" | "min" | "max";
3
+ export interface AggregationRule {
4
+ id: number;
5
+ /**
6
+ * Aggregate operator
7
+ */
8
+ operator: AggregationOperator;
9
+ /**
10
+ * Field on which aggregation applies
11
+ * Example:
12
+ * "id"
13
+ * "amount"
14
+ * "price"
15
+ */
16
+ fieldName: string | null;
17
+ /**
18
+ * If true:
19
+ * - Cannot be edited
20
+ * - Cannot be removed
21
+ * Used for default: count-of-id
22
+ */
23
+ locked?: boolean;
24
+ }
25
+ export type DateGroupingFormat = "YYYY" | "MMM" | "YYYY-MM" | "YYYY-MM-DD";
26
+ export interface GroupingRule {
27
+ id: number;
28
+ /**
29
+ * Actual field selected by user.
30
+ * Example:
31
+ * "state"
32
+ * "city"
33
+ * "createdAt"
34
+ * "author.name" // many-to-one resolved key
35
+ */
36
+ fieldName: string | null;
37
+ /**
38
+ * Only used when field type is date or datetime.
39
+ * Null for non-date fields.
40
+ */
41
+ dateGrouping?: DateGroupingFormat | null;
42
+ }
43
+ declare const GroupingComponent: ({ viewData, fields, groupingRules, setGroupingRules, aggregationRules, setAggregationRules, applyGrouping, closeDialog }: {
44
+ viewData: any;
45
+ fields: GroupableField[];
46
+ groupingRules: GroupingRule[];
47
+ setGroupingRules: any;
48
+ aggregationRules: AggregationRule[];
49
+ setAggregationRules: any;
50
+ applyGrouping: any;
51
+ closeDialog: any;
52
+ }) => import("react/jsx-runtime").JSX.Element;
53
+ export default GroupingComponent;
54
+ //# sourceMappingURL=GroupingComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupingComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/core/common/GroupingComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAkD5D,MAAM,MAAM,mBAAmB,GAC3B,OAAO,GACP,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,QAAQ,EAAE,mBAAmB,CAAC;IAE9B;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,KAAK,GACL,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IAEX;;;;;;;OAOG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB;;;OAGG;IACH,YAAY,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC1C;AAGD,QAAA,MAAM,iBAAiB;cASR,GAAG;YAAU,cAAc,EAAE;mBAAiB,YAAY,EAAE;sBAAoB,GAAG;sBAAoB,eAAe,EAAE;yBAAuB,GAAG;mBAAiB,GAAG;iBAAe,GAAG;6CAuUtM,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,196 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
+ if (ar || !(i in from)) {
15
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
16
+ ar[i] = from[i];
17
+ }
18
+ }
19
+ return to.concat(ar || Array.prototype.slice.call(from));
20
+ };
21
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
+ import React, { useMemo } from "react";
23
+ import { Dropdown } from "primereact/dropdown";
24
+ import { Button } from "primereact/button";
25
+ import { AutoComplete } from "primereact/autocomplete";
26
+ var groupedDateOptions = [
27
+ {
28
+ label: "Year",
29
+ items: [
30
+ { label: "Year (YYYY)", value: "YYYY" }
31
+ ]
32
+ },
33
+ {
34
+ label: "Month",
35
+ items: [
36
+ { label: "Month (MMM)", value: "MMM" },
37
+ { label: "Year-Month (YYYY-MM)", value: "YYYY-MM" }
38
+ ]
39
+ },
40
+ {
41
+ label: "Day",
42
+ items: [
43
+ { label: "Full Date (YYYY-MM-DD)", value: "YYYY-MM-DD" }
44
+ ]
45
+ }
46
+ ];
47
+ var aggregateOperators = [
48
+ { label: "Count", value: "count" },
49
+ { label: "Sum", value: "sum" },
50
+ { label: "Avg", value: "avg" },
51
+ { label: "Min", value: "min" },
52
+ { label: "Max", value: "max" }
53
+ ];
54
+ var allowedGroupTypes = [
55
+ "shortText",
56
+ "selectionStatic",
57
+ "selectionDynamic",
58
+ "computed",
59
+ "int",
60
+ "float",
61
+ "boolean",
62
+ "date",
63
+ "datetime",
64
+ "relation"
65
+ ];
66
+ var numericTypes = ["int", "float"];
67
+ var GroupingComponent = function (_a) {
68
+ var viewData = _a.viewData, fields = _a.fields, groupingRules = _a.groupingRules, setGroupingRules = _a.setGroupingRules, aggregationRules = _a.aggregationRules, setAggregationRules = _a.setAggregationRules, applyGrouping = _a.applyGrouping, closeDialog = _a.closeDialog;
69
+ var _b = React.useState(null), groupSearchValue = _b[0], setGroupSearchValue = _b[1];
70
+ var _c = React.useState(null), aggSearchValue = _c[0], setAggSearchValue = _c[1];
71
+ var _d = React.useState([]), filteredGroupingFields = _d[0], setFilteredGroupingFields = _d[1];
72
+ var searchGroupingFields = function (event) {
73
+ var query = event.query.toLowerCase();
74
+ var selectedFields = groupingRules.map(function (r) { return r.fieldName; });
75
+ var filtered = groupableFields.filter(function (field) {
76
+ return field.displayName.toLowerCase().includes(query) && !selectedFields.includes(field.fieldName);
77
+ });
78
+ setFilteredGroupingFields(filtered);
79
+ };
80
+ var _e = React.useState([]), filteredAggregationFields = _e[0], setFilteredAggregationFields = _e[1];
81
+ var searchAggregationFields = function (event) {
82
+ var query = event.query.toLowerCase();
83
+ var filtered = numericFields.filter(function (field) {
84
+ return field.displayName.toLowerCase().includes(query);
85
+ });
86
+ setFilteredAggregationFields(query ? filtered : numericFields);
87
+ };
88
+ // -------------------------------
89
+ // FILTER GROUPABLE FIELDS
90
+ // -------------------------------
91
+ var groupableFields = useMemo(function () {
92
+ return fields.filter(function (f) {
93
+ return allowedGroupTypes.includes(f.type);
94
+ });
95
+ }, [fields]);
96
+ var numericFields = useMemo(function () {
97
+ return fields.filter(function (f) {
98
+ return numericTypes.includes(f.type) ||
99
+ (f.type === "computed" && f.computedFieldValueType === "int") ||
100
+ (f.type === "computed" && f.computedFieldValueType === "float");
101
+ });
102
+ }, [fields]);
103
+ // -------------------------------
104
+ // GROUPING HANDLERS
105
+ // -------------------------------
106
+ var addGroup = function () {
107
+ setGroupingRules(function (prev) { return __spreadArray(__spreadArray([], prev, true), [
108
+ { id: Date.now(), fieldName: null, dateGrouping: null }
109
+ ], false); });
110
+ };
111
+ var removeGroup = function (id) {
112
+ setGroupingRules(function (prev) { return prev.filter(function (r) { return r.id !== id; }); });
113
+ };
114
+ var updateGroup = function (id, key, value) {
115
+ setGroupingRules(function (prev) {
116
+ return prev.map(function (r) {
117
+ var _a;
118
+ return r.id === id ? __assign(__assign({}, r), (_a = {}, _a[key] = value, _a)) : r;
119
+ });
120
+ });
121
+ };
122
+ // -------------------------------
123
+ // AGGREGATION HANDLERS
124
+ // -------------------------------
125
+ var addAggregation = function () {
126
+ setAggregationRules(function (prev) { return __spreadArray(__spreadArray([], prev, true), [
127
+ { id: Date.now(), operator: "sum", fieldName: null }
128
+ ], false); });
129
+ };
130
+ var removeAggregation = function (id) {
131
+ setAggregationRules(function (prev) {
132
+ return prev.filter(function (a) { return a.id !== id || a.locked; });
133
+ });
134
+ };
135
+ var updateAggregation = function (id, key, value) {
136
+ setAggregationRules(function (prev) {
137
+ return prev.map(function (a) {
138
+ var _a;
139
+ return a.id === id ? __assign(__assign({}, a), (_a = {}, _a[key] = value, _a)) : a;
140
+ });
141
+ });
142
+ };
143
+ // -------------------------------
144
+ // READONLY GROUP ORDER DISPLAY
145
+ // -------------------------------
146
+ var groupingSummary = groupingRules
147
+ .filter(function (g) { return g.fieldName; })
148
+ .map(function (g) {
149
+ var fieldMeta = fields.find(function (f) { return f.fieldName === g.fieldName; });
150
+ if (!fieldMeta)
151
+ return null;
152
+ if (["date", "datetime"].includes(fieldMeta.type) && g.dateGrouping) {
153
+ return "".concat(fieldMeta.displayName, " (").concat(g.dateGrouping, ")");
154
+ }
155
+ return fieldMeta.displayName;
156
+ })
157
+ .filter(Boolean)
158
+ .join(" > ");
159
+ var groupedDateItemTemplate = function (option) {
160
+ return (_jsxs("div", { className: "flex align-items-center gap-2", children: [_jsx("i", { className: "pi ".concat(option.label === "Year" ? "pi-calendar" :
161
+ option.label === "Month" ? "pi-calendar-minus" :
162
+ "pi-calendar-plus") }), _jsx("div", { children: option.label })] }));
163
+ };
164
+ var groupedDateValueTemplate = function (option) {
165
+ return (_jsx("div", { className: "pl-3", children: option.label }));
166
+ };
167
+ return (_jsxs("div", { className: "primary-filter-fieldset p-2", children: [_jsx("style", { children: "\n .solid-mini-dropdown {\n border: none !important;\n background: transparent !important;\n border-radius: 4px !important;\n transition: background 0.2s !important;\n }\n .solid-mini-dropdown:hover {\n background: rgba(0, 0, 0, 0.1) !important;\n }\n .solid-mini-dropdown .p-dropdown-label {\n padding: 0 0.5rem !important;\n line-height: 1.5rem !important;\n font-size: 0.75rem !important;\n font-weight: 600 !important;\n color: var(--text-color-secondary) !important;\n }\n .solid-mini-dropdown .p-dropdown-trigger {\n width: 1.5rem !important;\n }\n .solid-chip {\n border: 1px solid var(--surface-300) !important;\n background: var(--surface-100) !important;\n box-shadow: 0 1px 2px rgba(0,0,0,0.05) !important;\n transition: all 0.2s ease-in-out;\n border-radius: 100px !important; /* Made more rounded */\n }\n .solid-chip:hover {\n background: var(--surface-200) !important;\n transform: translateY(-1px);\n }\n .solid-chip .pi-times {\n border: none !important; /* Ensure no border on the x */\n background: transparent !important;\n }\n " }), _jsx("p", { className: "mb-2 font-bold", children: "Apply Groups" }), _jsx("div", { className: "mb-3", children: _jsx(AutoComplete, { value: groupSearchValue, suggestions: filteredGroupingFields, completeMethod: searchGroupingFields, field: "displayName", placeholder: "Search Field to Group By", className: "w-full", dropdown: true, onChange: function (e) { return setGroupSearchValue(e.value); }, onSelect: function (e) {
168
+ if (typeof e.value === "object" && e.value.fieldName) {
169
+ var isDate_1 = ["date", "datetime"].includes(e.value.type);
170
+ setGroupingRules(function (prev) { return __spreadArray(__spreadArray([], prev, true), [
171
+ { id: Date.now(), fieldName: e.value.fieldName, dateGrouping: isDate_1 ? "YYYY-MM-DD" : null }
172
+ ], false); });
173
+ }
174
+ setGroupSearchValue(null);
175
+ } }) }), _jsxs("div", { className: "flex align-items-center gap-2 flex-wrap mb-4", style: { minHeight: '2rem' }, children: [groupingRules.length == 1 && groupingRules[0].fieldName === null && (_jsx("span", { className: "text-sm text-400 italic", children: "No grouping rules applied." })), groupingRules.map(function (rule, index) {
176
+ var fieldMeta = fields.find(function (f) { return f.fieldName === rule.fieldName; });
177
+ if (!fieldMeta)
178
+ return null;
179
+ var isDate = ["date", "datetime"].includes(fieldMeta.type);
180
+ return (_jsxs(React.Fragment, { children: [_jsxs("div", { className: "flex align-items-center gap-2 px-2 py-1 solid-chip text-sm font-medium text-700", children: [_jsx("span", { children: fieldMeta.displayName }), isDate && (_jsx(Dropdown, { value: rule.dateGrouping || "YYYY-MM-DD", options: groupedDateOptions, optionLabel: "label", optionGroupLabel: "label", optionGroupChildren: "items", optionGroupTemplate: groupedDateItemTemplate, itemTemplate: groupedDateValueTemplate, placeholder: "Format", className: "solid-mini-dropdown", style: { height: '1.5rem', fontSize: '0.75rem', padding: '0 0.25rem' }, onChange: function (e) { return updateGroup(rule.id, "dateGrouping", e.value); } })), _jsx("i", { className: "pi pi-times cursor-pointer text-400 hover:text-red-500 transition-colors", onClick: function () { return removeGroup(rule.id); } })] }), index < groupingRules.length - 1 && (_jsx("i", { className: "pi pi-angle-double-right text-400 text-xs" }))] }, rule.id));
181
+ })] }), _jsx("p", { className: "mt-4 mb-2 font-bold", children: "Apply Aggregations" }), _jsx("div", { className: "mb-3", children: _jsx(AutoComplete, { value: aggSearchValue, suggestions: filteredAggregationFields, completeMethod: searchAggregationFields, field: "displayName", placeholder: "Search Field to Aggregate", className: "w-full", dropdown: true, onChange: function (e) { return setAggSearchValue(e.value); }, onSelect: function (e) {
182
+ if (typeof e.value === "object" && e.value.fieldName) {
183
+ setAggregationRules(function (prev) { return __spreadArray(__spreadArray([], prev, true), [
184
+ { id: Date.now(), operator: "count", fieldName: e.value.fieldName }
185
+ ], false); });
186
+ }
187
+ setAggSearchValue(null);
188
+ } }) }), _jsxs("div", { className: "flex align-items-center gap-2 flex-wrap mb-4", style: { minHeight: '3rem' }, children: [aggregationRules.length === 0 && (_jsx("span", { className: "text-sm text-400 italic", children: "No aggregations applied." })), aggregationRules.map(function (rule) {
189
+ var fieldMeta = fields.find(function (f) { return f.fieldName === rule.fieldName; });
190
+ if (!fieldMeta)
191
+ return null;
192
+ return (_jsxs("div", { className: "flex align-items-center gap-2 px-2 py-1 solid-chip text-sm font-medium text-700", children: [_jsx("span", { children: fieldMeta.displayName }), _jsx(Dropdown, { value: rule.operator, options: aggregateOperators, disabled: rule.locked, placeholder: "Op", className: "solid-mini-dropdown", style: { height: '1.5rem', fontSize: '0.75rem', padding: '0 0.25rem' }, onChange: function (e) { return updateAggregation(rule.id, "operator", e.value); } }), !rule.locked && (_jsx("i", { className: "pi pi-times cursor-pointer text-400 hover:text-red-500 transition-colors", onClick: function () { return removeAggregation(rule.id); } }))] }, rule.id));
193
+ })] }), _jsxs("div", { className: "flex justify-content-center gap-2 mt-4 pt-3 surface-border", children: [_jsx(Button, { label: "Apply", icon: "pi pi-check", size: "small", onClick: function () { return applyGrouping(groupingRules, aggregationRules); } }), _jsx(Button, { label: "Cancel", icon: "pi pi-times", size: "small", outlined: true, onClick: closeDialog })] })] }));
194
+ };
195
+ export default GroupingComponent;
196
+ //# sourceMappingURL=GroupingComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupingComponent.js","sourceRoot":"","sources":["../../../../src/components/core/common/GroupingComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useMemo } from \"react\";\nimport { Dropdown } from \"primereact/dropdown\";\nimport { Button } from \"primereact/button\";\nimport { GroupableField } from \"./SolidGlobalSearchElement\";\nimport { AutoComplete } from \"primereact/autocomplete\";\n\nconst groupedDateOptions = [\n {\n label: \"Year\",\n items: [\n { label: \"Year (YYYY)\", value: \"YYYY\" }\n ]\n },\n {\n label: \"Month\",\n items: [\n { label: \"Month (MMM)\", value: \"MMM\" },\n { label: \"Year-Month (YYYY-MM)\", value: \"YYYY-MM\" }\n ]\n },\n {\n label: \"Day\",\n items: [\n { label: \"Full Date (YYYY-MM-DD)\", value: \"YYYY-MM-DD\" }\n ]\n }\n];\n\n\n\nconst aggregateOperators = [\n { label: \"Count\", value: \"count\" },\n { label: \"Sum\", value: \"sum\" },\n { label: \"Avg\", value: \"avg\" },\n { label: \"Min\", value: \"min\" },\n { label: \"Max\", value: \"max\" }\n];\n\nconst allowedGroupTypes = [\n \"shortText\",\n \"selectionStatic\",\n \"selectionDynamic\",\n \"computed\",\n \"int\",\n \"float\",\n \"boolean\",\n \"date\",\n \"datetime\",\n \"relation\"\n];\n\nconst numericTypes = [\"int\", \"float\"];\n\nexport type AggregationOperator =\n | \"count\"\n | \"sum\"\n | \"avg\"\n | \"min\"\n | \"max\";\n\nexport interface AggregationRule {\n id: number;\n\n /**\n * Aggregate operator\n */\n operator: AggregationOperator;\n\n /**\n * Field on which aggregation applies\n * Example:\n * \"id\"\n * \"amount\"\n * \"price\"\n */\n fieldName: string | null;\n\n /**\n * If true:\n * - Cannot be edited\n * - Cannot be removed\n * Used for default: count-of-id\n */\n locked?: boolean;\n}\n\nexport type DateGroupingFormat =\n | \"YYYY\"\n | \"MMM\"\n | \"YYYY-MM\"\n | \"YYYY-MM-DD\";\n\nexport interface GroupingRule {\n id: number;\n\n /**\n * Actual field selected by user.\n * Example:\n * \"state\"\n * \"city\"\n * \"createdAt\"\n * \"author.name\" // many-to-one resolved key\n */\n fieldName: string | null;\n\n /**\n * Only used when field type is date or datetime.\n * Null for non-date fields.\n */\n dateGrouping?: DateGroupingFormat | null;\n}\n\n\nconst GroupingComponent = ({\n viewData,\n fields,\n groupingRules,\n setGroupingRules,\n aggregationRules,\n setAggregationRules,\n applyGrouping,\n closeDialog\n}: { viewData: any, fields: GroupableField[], groupingRules: GroupingRule[], setGroupingRules: any, aggregationRules: AggregationRule[], setAggregationRules: any, applyGrouping: any, closeDialog: any }) => {\n\n\n const [groupSearchValue, setGroupSearchValue] = React.useState<any>(null);\n const [aggSearchValue, setAggSearchValue] = React.useState<any>(null);\n\n const [filteredGroupingFields, setFilteredGroupingFields] = React.useState<GroupableField[]>([]);\n\n const searchGroupingFields = (event: any) => {\n const query = event.query.toLowerCase();\n const selectedFields = groupingRules.map(r => r.fieldName);\n\n const filtered = groupableFields.filter((field) =>\n field.displayName.toLowerCase().includes(query) && !selectedFields.includes(field.fieldName)\n );\n\n setFilteredGroupingFields(filtered);\n };\n\n const [filteredAggregationFields, setFilteredAggregationFields] = React.useState<GroupableField[]>([]);\n\n const searchAggregationFields = (event: any) => {\n const query = event.query.toLowerCase();\n\n const filtered = numericFields.filter((field) =>\n field.displayName.toLowerCase().includes(query)\n );\n setFilteredAggregationFields(query ? filtered : numericFields);\n };\n\n // -------------------------------\n // FILTER GROUPABLE FIELDS\n // -------------------------------\n const groupableFields: GroupableField[] = useMemo(() => {\n return fields.filter(f =>\n allowedGroupTypes.includes(f.type)\n );\n }, [fields]);\n\n const numericFields: GroupableField[] = useMemo(() => {\n return fields.filter((f: any) =>\n numericTypes.includes(f.type) ||\n (f.type === \"computed\" && f.computedFieldValueType === \"int\") ||\n (f.type === \"computed\" && f.computedFieldValueType === \"float\")\n );\n }, [fields]);\n\n // -------------------------------\n // GROUPING HANDLERS\n // -------------------------------\n\n const addGroup = () => {\n setGroupingRules((prev: any) => [\n ...prev,\n { id: Date.now(), fieldName: null, dateGrouping: null }\n ]);\n };\n\n const removeGroup = (id: any) => {\n setGroupingRules((prev: any) => prev.filter((r: any) => r.id !== id));\n };\n\n const updateGroup = (id: any, key: any, value: any) => {\n setGroupingRules((prev: any) =>\n prev.map((r: any) => r.id === id ? { ...r, [key]: value } : r)\n );\n };\n\n // -------------------------------\n // AGGREGATION HANDLERS\n // -------------------------------\n\n const addAggregation = () => {\n setAggregationRules((prev: any) => [\n ...prev,\n { id: Date.now(), operator: \"sum\", fieldName: null }\n ]);\n };\n\n const removeAggregation = (id: any) => {\n setAggregationRules((prev: any) =>\n prev.filter((a: any) => a.id !== id || a.locked)\n );\n };\n\n const updateAggregation = (id: any, key: any, value: any) => {\n setAggregationRules((prev: any) =>\n prev.map((a: any) => a.id === id ? { ...a, [key]: value } : a)\n );\n };\n\n // -------------------------------\n // READONLY GROUP ORDER DISPLAY\n // -------------------------------\n\n const groupingSummary = groupingRules\n .filter((g: GroupingRule) => g.fieldName)\n .map((g: GroupingRule) => {\n const fieldMeta = fields.find((f: GroupableField) => f.fieldName === g.fieldName);\n if (!fieldMeta) return null;\n\n if ([\"date\", \"datetime\"].includes(fieldMeta.type) && g.dateGrouping) {\n return `${fieldMeta.displayName} (${g.dateGrouping})`;\n }\n\n return fieldMeta.displayName;\n })\n .filter(Boolean)\n .join(\" > \");\n\n\n const groupedDateItemTemplate = (option: any) => {\n return (\n <div className=\"flex align-items-center gap-2\">\n <i className={`pi ${option.label === \"Year\" ? \"pi-calendar\" :\n option.label === \"Month\" ? \"pi-calendar-minus\" :\n \"pi-calendar-plus\"\n }`} />\n <div>\n {option.label}\n </div>\n </div>\n );\n };\n\n const groupedDateValueTemplate = (option: any) => {\n return (\n <div className=\"pl-3\">\n {option.label}\n </div>\n );\n };\n\n return (\n <div className=\"primary-filter-fieldset p-2\">\n <style>{`\n .solid-mini-dropdown {\n border: none !important;\n background: transparent !important;\n border-radius: 4px !important;\n transition: background 0.2s !important;\n }\n .solid-mini-dropdown:hover {\n background: rgba(0, 0, 0, 0.1) !important;\n }\n .solid-mini-dropdown .p-dropdown-label {\n padding: 0 0.5rem !important;\n line-height: 1.5rem !important;\n font-size: 0.75rem !important;\n font-weight: 600 !important;\n color: var(--text-color-secondary) !important;\n }\n .solid-mini-dropdown .p-dropdown-trigger {\n width: 1.5rem !important;\n }\n .solid-chip {\n border: 1px solid var(--surface-300) !important;\n background: var(--surface-100) !important;\n box-shadow: 0 1px 2px rgba(0,0,0,0.05) !important;\n transition: all 0.2s ease-in-out;\n border-radius: 100px !important; /* Made more rounded */\n }\n .solid-chip:hover {\n background: var(--surface-200) !important;\n transform: translateY(-1px);\n }\n .solid-chip .pi-times {\n border: none !important; /* Ensure no border on the x */\n background: transparent !important;\n }\n `}</style>\n\n {/* ========================================================= */}\n {/* A. APPLY GROUPS */}\n {/* ========================================================= */}\n <p className=\"mb-2 font-bold\">Apply Groups</p>\n\n <div className=\"mb-3\">\n <AutoComplete\n value={groupSearchValue}\n suggestions={filteredGroupingFields}\n completeMethod={searchGroupingFields}\n field=\"displayName\"\n placeholder=\"Search Field to Group By\"\n className=\"w-full\"\n dropdown\n onChange={(e) => setGroupSearchValue(e.value)}\n onSelect={(e) => {\n if (typeof e.value === \"object\" && e.value.fieldName) {\n const isDate = [\"date\", \"datetime\"].includes(e.value.type);\n setGroupingRules((prev: any) => [\n ...prev,\n { id: Date.now(), fieldName: e.value.fieldName, dateGrouping: isDate ? \"YYYY-MM-DD\" : null }\n ]);\n }\n setGroupSearchValue(null);\n }}\n />\n </div>\n\n <div className=\"flex align-items-center gap-2 flex-wrap mb-4\" style={{ minHeight: '2rem' }}>\n {groupingRules.length == 1 && groupingRules[0].fieldName === null && (\n <span className=\"text-sm text-400 italic\">No grouping rules applied.</span>\n )}\n {groupingRules.map((rule, index) => {\n const fieldMeta = fields.find((f) => f.fieldName === rule.fieldName);\n if (!fieldMeta) return null;\n\n const isDate = [\"date\", \"datetime\"].includes(fieldMeta.type);\n\n return (\n <React.Fragment key={rule.id}>\n <div\n className=\"flex align-items-center gap-2 px-2 py-1 solid-chip text-sm font-medium text-700\"\n >\n <span>{fieldMeta.displayName}</span>\n\n {isDate && (\n <Dropdown\n value={rule.dateGrouping || \"YYYY-MM-DD\"}\n options={groupedDateOptions}\n optionLabel=\"label\"\n optionGroupLabel=\"label\"\n optionGroupChildren=\"items\"\n optionGroupTemplate={groupedDateItemTemplate}\n itemTemplate={groupedDateValueTemplate}\n placeholder=\"Format\"\n className=\"solid-mini-dropdown\"\n style={{ height: '1.5rem', fontSize: '0.75rem', padding: '0 0.25rem' }}\n onChange={(e) => updateGroup(rule.id, \"dateGrouping\", e.value)}\n />\n )}\n\n <i\n className=\"pi pi-times cursor-pointer text-400 hover:text-red-500 transition-colors\"\n onClick={() => removeGroup(rule.id)}\n />\n </div>\n {index < groupingRules.length - 1 && (\n <i className=\"pi pi-angle-double-right text-400 text-xs\" />\n )}\n </React.Fragment>\n );\n })}\n </div>\n\n {/* ========================================================= */}\n {/* B. APPLY AGGREGATIONS */}\n {/* ========================================================= */}\n <p className=\"mt-4 mb-2 font-bold\">Apply Aggregations</p>\n\n <div className=\"mb-3\">\n <AutoComplete\n value={aggSearchValue}\n suggestions={filteredAggregationFields}\n completeMethod={searchAggregationFields}\n field=\"displayName\"\n placeholder=\"Search Field to Aggregate\"\n className=\"w-full\"\n dropdown\n onChange={(e) => setAggSearchValue(e.value)}\n onSelect={(e) => {\n if (typeof e.value === \"object\" && e.value.fieldName) {\n setAggregationRules((prev: any) => [\n ...prev,\n { id: Date.now(), operator: \"count\", fieldName: e.value.fieldName }\n ]);\n }\n setAggSearchValue(null);\n }}\n />\n </div>\n\n <div className=\"flex align-items-center gap-2 flex-wrap mb-4\" style={{ minHeight: '3rem' }}>\n {aggregationRules.length === 0 && (\n <span className=\"text-sm text-400 italic\">No aggregations applied.</span>\n )}\n {aggregationRules.map((rule) => {\n const fieldMeta = fields.find((f) => f.fieldName === rule.fieldName);\n if (!fieldMeta) return null;\n\n return (\n <div\n key={rule.id}\n className=\"flex align-items-center gap-2 px-2 py-1 solid-chip text-sm font-medium text-700\"\n >\n <span>{fieldMeta.displayName}</span>\n\n <Dropdown\n value={rule.operator}\n options={aggregateOperators}\n disabled={rule.locked}\n placeholder=\"Op\"\n className=\"solid-mini-dropdown\"\n style={{ height: '1.5rem', fontSize: '0.75rem', padding: '0 0.25rem' }}\n onChange={(e) => updateAggregation(rule.id, \"operator\", e.value)}\n />\n\n {!rule.locked && (\n <i\n className=\"pi pi-times cursor-pointer text-400 hover:text-red-500 transition-colors\"\n onClick={() => removeAggregation(rule.id)}\n />\n )}\n </div>\n );\n })}\n </div>\n\n {/* FOOTER */}\n <div className=\"flex justify-content-center gap-2 mt-4 pt-3 surface-border\">\n <Button\n label=\"Apply\"\n icon=\"pi pi-check\"\n size=\"small\"\n onClick={() => applyGrouping(groupingRules, aggregationRules)}\n />\n <Button\n label=\"Cancel\"\n icon=\"pi pi-times\"\n size=\"small\"\n outlined\n onClick={closeDialog}\n />\n </div>\n </div>\n );\n};\n\nexport default GroupingComponent;\n"]}