@solidstarters/solid-core-ui 1.1.11 → 1.1.13

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 (179) hide show
  1. package/dist/components/auth/SolidForgotPassword.d.ts.map +1 -1
  2. package/dist/components/auth/SolidForgotPassword.js +2 -1
  3. package/dist/components/auth/SolidForgotPassword.js.map +1 -1
  4. package/dist/components/auth/SolidInitialLoginOtp.d.ts.map +1 -1
  5. package/dist/components/auth/SolidInitialLoginOtp.js +2 -1
  6. package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
  7. package/dist/components/auth/SolidInitiateRegisterOtp.d.ts.map +1 -1
  8. package/dist/components/auth/SolidInitiateRegisterOtp.js +2 -1
  9. package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
  10. package/dist/components/auth/SolidLogin.d.ts.map +1 -1
  11. package/dist/components/auth/SolidLogin.js +2 -1
  12. package/dist/components/auth/SolidLogin.js.map +1 -1
  13. package/dist/components/auth/SolidOTPVerify.d.ts.map +1 -1
  14. package/dist/components/auth/SolidOTPVerify.js +2 -1
  15. package/dist/components/auth/SolidOTPVerify.js.map +1 -1
  16. package/dist/components/auth/SolidRegister.d.ts.map +1 -1
  17. package/dist/components/auth/SolidRegister.js +125 -103
  18. package/dist/components/auth/SolidRegister.js.map +1 -1
  19. package/dist/components/auth/SolidResetPassword.d.ts.map +1 -1
  20. package/dist/components/auth/SolidResetPassword.js +2 -1
  21. package/dist/components/auth/SolidResetPassword.js.map +1 -1
  22. package/dist/components/common/DropzonePlaceholder.js +1 -1
  23. package/dist/components/common/DropzonePlaceholder.js.map +1 -1
  24. package/dist/components/common/GeneralSettings.d.ts.map +1 -1
  25. package/dist/components/common/GeneralSettings.js +43 -31
  26. package/dist/components/common/GeneralSettings.js.map +1 -1
  27. package/dist/components/core/common/FilterComponent.d.ts +2 -1
  28. package/dist/components/core/common/FilterComponent.d.ts.map +1 -1
  29. package/dist/components/core/common/FilterComponent.js +52 -16
  30. package/dist/components/core/common/FilterComponent.js.map +1 -1
  31. package/dist/components/core/common/SolidConfigureLayoutElement.d.ts +1 -1
  32. package/dist/components/core/common/SolidConfigureLayoutElement.d.ts.map +1 -1
  33. package/dist/components/core/common/SolidConfigureLayoutElement.js +5 -2
  34. package/dist/components/core/common/SolidConfigureLayoutElement.js.map +1 -1
  35. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  36. package/dist/components/core/common/SolidGlobalSearchElement.js +131 -23
  37. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  38. package/dist/components/core/filter/SolidManyToOneFilterElement.d.ts.map +1 -1
  39. package/dist/components/core/filter/SolidManyToOneFilterElement.js +1 -1
  40. package/dist/components/core/filter/SolidManyToOneFilterElement.js.map +1 -1
  41. package/dist/components/core/filter/SolidSelectionDynamicFilterElement.js +1 -1
  42. package/dist/components/core/filter/SolidSelectionDynamicFilterElement.js.map +1 -1
  43. package/dist/components/core/filter/SolidSelectionStaticFilterElement.js +1 -1
  44. package/dist/components/core/filter/SolidSelectionStaticFilterElement.js.map +1 -1
  45. package/dist/components/core/filter/SolidVarInputsFilterElement.d.ts.map +1 -1
  46. package/dist/components/core/filter/SolidVarInputsFilterElement.js +11 -10
  47. package/dist/components/core/filter/SolidVarInputsFilterElement.js.map +1 -1
  48. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  49. package/dist/components/core/form/SolidFormView.js +18 -9
  50. package/dist/components/core/form/SolidFormView.js.map +1 -1
  51. package/dist/components/core/form/fields/SolidBooleanField.d.ts.map +1 -1
  52. package/dist/components/core/form/fields/SolidBooleanField.js +4 -4
  53. package/dist/components/core/form/fields/SolidBooleanField.js.map +1 -1
  54. package/dist/components/core/form/fields/SolidDateField.js +7 -7
  55. package/dist/components/core/form/fields/SolidDateField.js.map +1 -1
  56. package/dist/components/core/form/fields/SolidDateTimeField.d.ts.map +1 -1
  57. package/dist/components/core/form/fields/SolidDateTimeField.js +7 -7
  58. package/dist/components/core/form/fields/SolidDateTimeField.js.map +1 -1
  59. package/dist/components/core/form/fields/SolidDecimalField.d.ts.map +1 -1
  60. package/dist/components/core/form/fields/SolidDecimalField.js +4 -4
  61. package/dist/components/core/form/fields/SolidDecimalField.js.map +1 -1
  62. package/dist/components/core/form/fields/SolidIntegerField.d.ts.map +1 -1
  63. package/dist/components/core/form/fields/SolidIntegerField.js +4 -4
  64. package/dist/components/core/form/fields/SolidIntegerField.js.map +1 -1
  65. package/dist/components/core/form/fields/SolidJsonField.d.ts.map +1 -1
  66. package/dist/components/core/form/fields/SolidJsonField.js +2 -2
  67. package/dist/components/core/form/fields/SolidJsonField.js.map +1 -1
  68. package/dist/components/core/form/fields/SolidLongTextField.d.ts.map +1 -1
  69. package/dist/components/core/form/fields/SolidLongTextField.js +2 -2
  70. package/dist/components/core/form/fields/SolidLongTextField.js.map +1 -1
  71. package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
  72. package/dist/components/core/form/fields/SolidMediaMultipleField.js +155 -46
  73. package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
  74. package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
  75. package/dist/components/core/form/fields/SolidMediaSingleField.js +87 -31
  76. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  77. package/dist/components/core/form/fields/SolidRichTextField.d.ts.map +1 -1
  78. package/dist/components/core/form/fields/SolidRichTextField.js +2 -2
  79. package/dist/components/core/form/fields/SolidRichTextField.js.map +1 -1
  80. package/dist/components/core/form/fields/SolidSelectionDynamicField.d.ts.map +1 -1
  81. package/dist/components/core/form/fields/SolidSelectionDynamicField.js +4 -4
  82. package/dist/components/core/form/fields/SolidSelectionDynamicField.js.map +1 -1
  83. package/dist/components/core/form/fields/SolidSelectionStaticField.d.ts.map +1 -1
  84. package/dist/components/core/form/fields/SolidSelectionStaticField.js +4 -4
  85. package/dist/components/core/form/fields/SolidSelectionStaticField.js.map +1 -1
  86. package/dist/components/core/form/fields/SolidShortTextField.d.ts.map +1 -1
  87. package/dist/components/core/form/fields/SolidShortTextField.js +2 -2
  88. package/dist/components/core/form/fields/SolidShortTextField.js.map +1 -1
  89. package/dist/components/core/form/fields/SolidTimeField.d.ts.map +1 -1
  90. package/dist/components/core/form/fields/SolidTimeField.js +7 -7
  91. package/dist/components/core/form/fields/SolidTimeField.js.map +1 -1
  92. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +2 -2
  93. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
  94. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  95. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +2 -2
  96. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  97. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js +2 -2
  98. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js.map +1 -1
  99. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  100. package/dist/components/core/list/SolidListView.js +57 -54
  101. package/dist/components/core/list/SolidListView.js.map +1 -1
  102. package/dist/components/core/model/CreateModel.d.ts.map +1 -1
  103. package/dist/components/core/model/CreateModel.js +20 -16
  104. package/dist/components/core/model/CreateModel.js.map +1 -1
  105. package/dist/components/core/module/CreateModule.d.ts.map +1 -1
  106. package/dist/components/core/module/CreateModule.js +23 -23
  107. package/dist/components/core/module/CreateModule.js.map +1 -1
  108. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  109. package/dist/components/layout/AppSidebar.js +42 -11
  110. package/dist/components/layout/AppSidebar.js.map +1 -1
  111. package/dist/components/layout/navbar-two-menu.d.ts.map +1 -1
  112. package/dist/components/layout/navbar-two-menu.js +6 -2
  113. package/dist/components/layout/navbar-two-menu.js.map +1 -1
  114. package/dist/components/layout/user-profile-menu.d.ts.map +1 -1
  115. package/dist/components/layout/user-profile-menu.js +7 -3
  116. package/dist/components/layout/user-profile-menu.js.map +1 -1
  117. package/dist/helpers/AppTitle.d.ts +4 -0
  118. package/dist/helpers/AppTitle.d.ts.map +1 -0
  119. package/dist/helpers/AppTitle.js +8 -0
  120. package/dist/helpers/AppTitle.js.map +1 -0
  121. package/dist/index.d.ts +1 -0
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +3 -2
  124. package/dist/index.js.map +1 -1
  125. package/package.json +1 -1
  126. package/src/components/auth/SolidForgotPassword.tsx +2 -6
  127. package/src/components/auth/SolidInitialLoginOtp.tsx +2 -6
  128. package/src/components/auth/SolidInitiateRegisterOtp.tsx +2 -6
  129. package/src/components/auth/SolidLogin.tsx +2 -5
  130. package/src/components/auth/SolidOTPVerify.tsx +4 -7
  131. package/src/components/auth/SolidRegister.tsx +207 -178
  132. package/src/components/auth/SolidResetPassword.tsx +2 -6
  133. package/src/components/common/DropzonePlaceholder.tsx +1 -1
  134. package/src/components/common/GeneralSettings.tsx +310 -193
  135. package/src/components/core/common/FilterComponent.tsx +148 -202
  136. package/src/components/core/common/SolidConfigureLayoutElement.tsx +6 -4
  137. package/src/components/core/common/SolidGlobalSearchElement.tsx +193 -50
  138. package/src/components/core/filter/SolidManyToOneFilterElement.tsx +3 -1
  139. package/src/components/core/filter/SolidSelectionDynamicFilterElement.tsx +1 -1
  140. package/src/components/core/filter/SolidSelectionStaticFilterElement.tsx +1 -1
  141. package/src/components/core/filter/SolidVarInputsFilterElement.tsx +103 -135
  142. package/src/components/core/form/SolidFormView.tsx +32 -21
  143. package/src/components/core/form/fields/SolidBooleanField.tsx +8 -6
  144. package/src/components/core/form/fields/SolidDateField.tsx +5 -5
  145. package/src/components/core/form/fields/SolidDateTimeField.tsx +23 -22
  146. package/src/components/core/form/fields/SolidDecimalField.tsx +5 -3
  147. package/src/components/core/form/fields/SolidIntegerField.tsx +18 -16
  148. package/src/components/core/form/fields/SolidJsonField.tsx +14 -12
  149. package/src/components/core/form/fields/SolidLongTextField.tsx +18 -17
  150. package/src/components/core/form/fields/SolidMediaMultipleField.tsx +257 -79
  151. package/src/components/core/form/fields/SolidMediaSingleField.tsx +148 -61
  152. package/src/components/core/form/fields/SolidRichTextField.tsx +6 -4
  153. package/src/components/core/form/fields/SolidSelectionDynamicField.tsx +6 -5
  154. package/src/components/core/form/fields/SolidSelectionStaticField.tsx +24 -23
  155. package/src/components/core/form/fields/SolidShortTextField.tsx +19 -17
  156. package/src/components/core/form/fields/SolidTimeField.tsx +23 -21
  157. package/src/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +2 -2
  158. package/src/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +17 -16
  159. package/src/components/core/form/fields/relations/SolidRelationOneToManyField.tsx +2 -2
  160. package/src/components/core/list/SolidListView.tsx +60 -43
  161. package/src/components/core/model/CreateModel.tsx +92 -81
  162. package/src/components/core/module/CreateModule.tsx +181 -183
  163. package/src/components/layout/AppSidebar.tsx +35 -10
  164. package/src/components/layout/navbar-two-menu.tsx +6 -1
  165. package/src/components/layout/user-profile-menu.tsx +20 -8
  166. package/src/helpers/AppTitle.tsx +14 -0
  167. package/src/index.ts +2 -1
  168. package/dist/components/common/FilterComponent.d.ts +0 -3
  169. package/dist/components/common/FilterComponent.d.ts.map +0 -1
  170. package/dist/components/common/FilterComponent.js +0 -214
  171. package/dist/components/common/FilterComponent.js.map +0 -1
  172. package/dist/components/core/extension/dynamicComponentMap.d.ts +0 -3
  173. package/dist/components/core/extension/dynamicComponentMap.d.ts.map +0 -1
  174. package/dist/components/core/extension/dynamicComponentMap.js +0 -6
  175. package/dist/components/core/extension/dynamicComponentMap.js.map +0 -1
  176. package/dist/components/core/hooks/GlobalStateContext.d.ts +0 -11
  177. package/dist/components/core/hooks/GlobalStateContext.d.ts.map +0 -1
  178. package/dist/components/core/hooks/GlobalStateContext.js +0 -17
  179. package/dist/components/core/hooks/GlobalStateContext.js.map +0 -1
@@ -7,8 +7,7 @@ import { Button } from "primereact/button";
7
7
  import { InputText } from "primereact/inputtext";
8
8
  import { OverlayPanel } from "primereact/overlaypanel";
9
9
  import { Divider } from "primereact/divider";
10
-
11
-
10
+ import { Chips } from "primereact/chips";
12
11
 
13
12
  const getRandomInt = (min: number, max: number) => {
14
13
  return Math.floor(Math.random() * (max - min + 1)) + min;
@@ -101,8 +100,7 @@ const transformRulesToFilters = (input: any) => {
101
100
 
102
101
  }
103
102
 
104
- export const SolidGlobalSearchElement = forwardRef(({ viewData, handleApplyCustomFilter, setShowArchived, showArchived }: any, ref) => {
105
-
103
+ export const SolidGlobalSearchElement = forwardRef(({ viewData, handleApplyCustomFilter, filters, clearFilter }: any, ref) => {
106
104
  const initialState: FilterRule[] = [
107
105
  {
108
106
  id: 1,
@@ -131,8 +129,88 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, handleApplyCusto
131
129
  ]
132
130
  }
133
131
  ];
132
+
133
+ const op = useRef<OverlayPanel>(null);
134
+ const chipsRef = useRef<HTMLDivElement | null>(null);
135
+
134
136
  const [filterRules, setFilterRules] = useState<FilterRule[]>(initialState);
137
+ const [fields, setFields] = useState<any[]>([]);
135
138
  const [showGlobalSearchElement, setShowGlobalSearchElement] = useState<boolean>(false);
139
+ const [customChip, setCustomChip] = useState("");
140
+ const [searchChips, setSearchChips] = useState<{ columnName?: string; value: string }[]>([]);
141
+ const [inputValue, setInputValue] = useState<string | null>("");
142
+
143
+ useImperativeHandle(ref, () => ({
144
+ clearFilter: () => {
145
+ setFilterRules(initialState);
146
+ }
147
+ }));
148
+
149
+ useEffect(() => {
150
+ if (viewData?.data?.solidFieldsMetadata) {
151
+ const fieldsData = viewData?.data?.solidFieldsMetadata
152
+ const fieldsList = Object.entries(fieldsData).map(([key, value]: any) => ({ name: key, value: key }));
153
+ setFields(fieldsList)
154
+ }
155
+ }, [])
156
+
157
+ useEffect(() => {
158
+ if (chipsRef.current) {
159
+ const inputElement = chipsRef.current.querySelector("input");
160
+ if (inputElement) {
161
+ inputElement.addEventListener("input", (e) => {
162
+ setInputValue((e.target as HTMLInputElement).value);
163
+ });
164
+ }
165
+ }
166
+ }, []);
167
+
168
+ useEffect(() => {
169
+ // Get the last valid filter
170
+ const validFilters = filters?.$or?.filter((filter: any) => filter !== undefined) || [];
171
+ if (validFilters.length > 0) {
172
+ setCustomChip(validFilters.length.toString()); // Store only the number
173
+ } else {
174
+ setCustomChip(""); // Reset when no filters are present
175
+ }
176
+ }, [filters]);
177
+
178
+ const handleChipChange = (e: any) => {
179
+ setInputValue(e.target.value);
180
+ if (op.current && e.target) {
181
+ op.current.show;
182
+ }
183
+ if (e.value && e.value.length > 0) {
184
+ const newChip = e.value[e.value.length - 1];
185
+ if (!searchChips.some(chip => chip.value === newChip.value)) {
186
+ setSearchChips([...searchChips, newChip]);
187
+ }
188
+ }
189
+ };
190
+
191
+ const firstFilterableFieldName = viewData?.data?.solidView?.layout?.children?.find(
192
+ (value: any) => value?.attrs?.filterable
193
+ )?.attrs?.name;
194
+
195
+ const handleAddChip = (columnName?: string) => {
196
+ if (inputValue?.trim()) {
197
+ const newChip = { columnName: columnName || firstFilterableFieldName, value: inputValue.trim() };
198
+
199
+ setSearchChips((prevChips) => {
200
+ const updatedChips = [...prevChips, newChip];
201
+ return updatedChips
202
+ });
203
+ }
204
+ }
205
+
206
+ const handleKeyDown = (e: any) => {
207
+ if (e.key === "Enter" && inputValue?.trim()) {
208
+ handleAddChip();
209
+ setInputValue(null);
210
+ e.preventDefault(); // Prevent form submission or unexpected behavior
211
+ }
212
+ };
213
+
136
214
  const transformFilterRules = (filterRules: any) => {
137
215
  const transformedFilter = transformRulesToFilters(filterRules[0]);
138
216
  if (transformedFilter) {
@@ -141,79 +219,144 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, handleApplyCusto
141
219
  setShowGlobalSearchElement(false)
142
220
  }
143
221
 
144
- useImperativeHandle(ref, () => ({
145
- clearFilter: () => {
146
- setFilterRules(initialState);
222
+ useEffect(() => {
223
+ const formattedChips = {
224
+ id: 1,
225
+ matchOperator: "and",
226
+ parentRule: null,
227
+ type: "rule_group",
228
+ children: searchChips.map((chip) => ({
229
+ children: [],
230
+ fieldName: chip.columnName,
231
+ id: null,
232
+ matchMode: "$containsi",
233
+ parentRule: 1,
234
+ type: "rule",
235
+ value: [chip.value]
236
+ }))
237
+ };
238
+ if (formattedChips.children.length > 0) {
239
+ const transformedFilter = transformRulesToFilters(formattedChips);
240
+ handleApplyCustomFilter(transformedFilter);
147
241
  }
148
- }));
242
+ }, [searchChips]);
149
243
 
244
+ const groupedSearchChips = searchChips.reduce((acc, chip) => {
245
+ const key = chip.columnName || firstFilterableFieldName;
246
+ if (!acc[key]) {
247
+ acc[key] = [];
248
+ }
249
+ acc[key].push(chip.value);
250
+ return acc;
251
+ }, {} as Record<string, string[]>);
150
252
 
253
+ const chipsToDisplay = [
254
+ ...(customChip ? [customChip] : []),
255
+ ...Object.entries(groupedSearchChips).map(([columnName, values]) => `<div class="custom-chip-column">${columnName}</div> <div class="custom-chip-value">${values.join("<span class='custom-chip-or'> or</span> ")}</div>`)
256
+ ];
151
257
 
152
- const [fields, setFields] = useState<any[]>([]);
153
258
 
154
259
  useEffect(() => {
155
- if (viewData?.data?.solidFieldsMetadata) {
156
- const fieldsData = viewData?.data?.solidFieldsMetadata
157
- const fieldsList = Object.entries(fieldsData).map(([key, value]: any) => ({ name: key, value: key }));
260
+ console.log("Input Value", customChip, "Input Value", searchChips, "Input Value", inputValue);
261
+ }, [chipsToDisplay])
158
262
 
159
- setFields(fieldsList)
263
+ const customChipTemplate = (item: any) => {
264
+ if (item === customChip) {
265
+ return (
266
+ <div className="flex align-items-center gap-2 text-base">
267
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" onClick={() => setShowGlobalSearchElement(true)} >
268
+ <rect width="20" height="20" rx="4" fill="#722ED1" />
269
+ <path d="M8.66667 15V13.3333H11.3333V15H8.66667ZM6 10.8333V9.16667H14V10.8333H6ZM4 6.66667V5H16V6.66667H4Z" fill="white" />
270
+ </svg>
271
+ <span><strong>{customChip}</strong> rule{customChip === "1" ? '' : 's'} applied</span>
272
+ </div>
273
+ );
160
274
  }
161
- }, [])
162
-
163
- const op = useRef<OverlayPanel>(null);
275
+ return <div className="flex align-items-center gap-2 text-base" dangerouslySetInnerHTML={{ __html: item }}></div>;
276
+ };
164
277
 
165
278
  return (
166
279
  <div className="flex justify-content-center solid-custom-filter-wrapper">
167
280
  <div className="p-inputgroup flex-1"
168
- onClick={(e) =>
169
- // @ts-ignore
170
- op.current.toggle(e)}
281
+ ref={chipsRef}
282
+ onClick={(e) => {
283
+ e.preventDefault();
284
+ if (op.current && e.target) {
285
+ op.current.toggle(e);
286
+ }
287
+ }}
171
288
  >
172
- <InputText placeholder="Search Here" className="p-inputtext-sm" />
289
+ <Chips
290
+ value={chipsToDisplay}
291
+ onChange={handleChipChange}
292
+ onRemove={(e) => {
293
+ setCustomChip("");
294
+ setSearchChips([]);
295
+ clearFilter();
296
+ }}
297
+ itemTemplate={customChipTemplate}
298
+ onKeyDown={handleKeyDown}
299
+ className="custom-filter-chip"
300
+ placeholder="Search..."
301
+ removeIcon='pi pi-times'
302
+ removable
303
+ />
173
304
  <Button
174
305
  icon="pi pi-search"
175
306
  severity="secondary"
176
307
  outlined size="small"
308
+ onClick={(e) => {
309
+ if (op.current && e.target) {
310
+ op.current.toggle(e);
311
+ }
312
+ }}
177
313
  />
178
314
  </div>
179
315
  <OverlayPanel ref={op} className="solid-custom-overlay" style={{ minWidth: 378 }}>
180
- <div className="px-4 py-3">
181
- <p className="m-0">Searching...</p>
182
- </div>
183
- <Divider className="m-0" />
316
+ {inputValue ? (
317
+ <>
318
+ <div className="custom-filter-search-options px-2 py-2 flex flex-column">
319
+ {viewData?.data?.solidView?.layout?.children
320
+ .filter((value: any) => value?.attrs?.filterable) // Only keep filterable fields
321
+ .map((value: any, index: any) => (
322
+ <Button
323
+ key={index}
324
+ className="p-2 flex gap-1 text-color"
325
+ onClick={() => handleAddChip(value?.attrs?.name)}
326
+ text
327
+ severity="secondary"
328
+ >
329
+ Search <strong>{value?.attrs?.name}</strong> for :
330
+ <span className="font-bold" style={{ color: '#000' }}>{inputValue}</span>
331
+ </Button>
332
+ ))
333
+ }
334
+ </div>
335
+ <Divider className="m-0" />
336
+ </>
337
+ ) :
338
+ <>
339
+ <div className="p-3">Search Here...</div>
340
+ <Divider className="m-0" />
341
+ </>
342
+ }
184
343
  <div className="px-2 py-1">
185
344
  <Button text size="small" label="Custom Filter" iconPos="left" icon='pi pi-plus' onClick={() => setShowGlobalSearchElement(true)} />
186
345
  </div>
187
346
  <Divider className="m-0" />
188
- {viewData?.data?.solidView?.model?.enableSoftDelete && <div className="px-2 py-1">
189
- <Button text size="small" label={showArchived ? "Hide Archived Records" : "Show Archived Records"} iconPos="left" onClick={() => {setShowArchived(!showArchived); op.current?.hide()}} />
190
- </div>}
191
347
  </OverlayPanel>
192
- <Dialog header={false} className="search-filter-popup" showHeader={false} visible={showGlobalSearchElement} style={{ width: '50vw' }} onHide={() => { if (!showGlobalSearchElement) return; setShowGlobalSearchElement(false); }}>
193
- <div className="flex field-popup-navigation gap-3 justify-content-between ">
194
- <div className="flex text-2xl font-bold align-items-center ml-4" style={{ color: '#000' }}>
195
- <i className="pi pi-search" style={{ marginRight: '5px', color: "#06b6d4" }}></i>
196
- <p className="popup-heading m-0">Search and Filter</p>
197
- </div>
198
- <div className="flex align-items-center gap-3 close-popup">
199
- <Button icon="pi pi-times" rounded text aria-label="Cancel" type="reset" size="small" onClick={() => setShowGlobalSearchElement(false)} />
200
- </div>
348
+ <Dialog header={false} className="solid-global-search-filter" showHeader={false} visible={showGlobalSearchElement} style={{ width: '50vw' }} onHide={() => { if (!showGlobalSearchElement) return; setShowGlobalSearchElement(false); }}>
349
+ <div className="flex align-items-center justify-content-between px-3">
350
+ <h5 className="solid-custom-title m-0">Add Custom Filter</h5>
351
+ <Button icon="pi pi-times" rounded text aria-label="Cancel" type="reset" size="small" onClick={() => setShowGlobalSearchElement(false)} />
352
+ </div>
353
+ <Divider className="m-0" />
354
+ <div className="p-4">
355
+ {fields.length > 0 &&
356
+ <FilterComponent viewData={viewData} fields={fields} filterRules={filterRules} setFilterRules={setFilterRules} transformFilterRules={transformFilterRules} closeDialog={() => setShowGlobalSearchElement(false)}></FilterComponent>
357
+ }
201
358
  </div>
202
- <div className="card relative">
203
- <TabView >
204
- <TabPanel header="Search">
205
- <SolidSearchBox viewData={viewData}></SolidSearchBox>
206
- </TabPanel>
207
- <TabPanel header="Filter" >
208
- {fields.length > 0 &&
209
- <FilterComponent viewData={viewData} fields={fields} filterRules={filterRules} setFilterRules={setFilterRules} transformFilterRules={transformFilterRules} ></FilterComponent>
210
- }
211
- {/* <SolidKanbanFilter solidKanbanViewMetaData={solidKanbanViewMetaData} handleApplyFilter={handleApplyFilter} filterValues={filterValues} setFilterValues={setFilterValues}></SolidKanbanFilter> */}
212
- </TabPanel>
213
- </TabView>
214
- </div >
215
359
  </Dialog>
216
360
  </div>
217
361
  )
218
-
219
362
  });
@@ -52,6 +52,8 @@ export const SolidManyToOneFilterElement = ({ value, updateInputs, index, fieldM
52
52
  value={value}
53
53
  suggestions={autoCompleteItems}
54
54
  completeMethod={autoCompleteSearch}
55
- onChange={(e) => updateInputs(index, e.value)} />
55
+ onChange={(e) => updateInputs(index, e.value)}
56
+ className="w-full"
57
+ />
56
58
  )
57
59
  }
@@ -41,7 +41,7 @@ export const SolidSelectionDynamicFilterElement = ({ value, updateInputs, index,
41
41
  field="label"
42
42
  value={value}
43
43
  dropdown
44
- className="w-full small-input"
44
+ className="w-full"
45
45
  suggestions={selectionDynamicItems}
46
46
  completeMethod={selectionDynamicSearch}
47
47
  onChange={(e) => updateInputs(index, e.value)} />
@@ -23,7 +23,7 @@ export const SolidSelectionStaticFilterElement = ({ value, updateInputs, index,
23
23
  field="label"
24
24
  value={value}
25
25
  dropdown
26
- className="w-full small-input"
26
+ className="w-full"
27
27
  suggestions={selectionStaticItems}
28
28
  completeMethod={selectionStaticSearch}
29
29
  onChange={(e) => updateInputs(index, e.value)} />
@@ -5,6 +5,7 @@ import { useEffect, useState } from "react";
5
5
  import { SolidManyToOneFilterElement } from "./SolidManyToOneFilterElement";
6
6
  import { SolidSelectionDynamicFilterElement } from "./SolidSelectionDynamicFilterElement";
7
7
  import { SolidSelectionStaticFilterElement } from "./SolidSelectionStaticFilterElement";
8
+ import { Button } from "primereact/button";
8
9
 
9
10
  export enum InputTypes {
10
11
  Date = 'Date',
@@ -68,140 +69,107 @@ export const SolidVarInputsFilterElement = ({ values, onChange, inputType = Inpu
68
69
 
69
70
 
70
71
  return (
71
- <div className="grid formgrid">
72
- <div className="col-12">
73
- <div className="flex flex-column gap-2">
74
- {inputs && inputs.map((value: any, index: number) => (
75
-
76
- <div key={index} className="flex align-items-center gap-2">
77
-
78
- {inputType === InputTypes.Text &&
79
- <InputText
80
- value={value}
81
- onChange={(e) => updateInputs(index, e.target.value)}
82
- placeholder=""
83
- className="p-inputtext-sm small-input w-full"
84
- />
85
- }
86
- {inputType === InputTypes.Numeric &&
87
- <InputNumber
88
- value={value}
89
- onChange={(e) => updateInputs(index, e.value)}
90
- placeholder=""
91
- className="p-inputtext-sm small-input w-full"
92
- />
93
- }
94
- {inputType === InputTypes.Date &&
95
- <Calendar
96
- value={value}
97
- onChange={(e) => updateInputs(index, e.target.value)}
98
- dateFormat="mm/dd/yy"
99
- placeholder="mm/dd/yyyy"
100
- mask="99/99/9999"
101
- />
102
- }
103
- {inputType === InputTypes.DateTime &&
104
- <Calendar
105
- value={value}
106
- onChange={(e) => updateInputs(index, e.target.value)}
107
- dateFormat="mm/dd/yy"
108
- placeholder="mm/dd/yyyy hh:mm"
109
- mask="99/99/9999 99:99"
110
- showTime
111
- hourFormat="24"
112
- />
113
- }
114
- {inputType === InputTypes.Time &&
115
- <Calendar
116
- value={value}
117
- onChange={(e) => updateInputs(index, e.target.value)}
118
- placeholder="hh:mm"
119
- mask="99:99"
120
- timeOnly
121
- hourFormat="24"
122
- />
123
- }
124
- {inputType === InputTypes.RelationManyToOne &&
125
- <SolidManyToOneFilterElement
126
- value={value}
127
- index={index}
128
- updateInputs={updateInputs}
129
- fieldMetadata={fieldMetadata}
130
- ></SolidManyToOneFilterElement>
131
- }
132
- {inputType === InputTypes.SelectionDynamic &&
133
- <SolidSelectionDynamicFilterElement
134
- value={value}
135
- index={index}
136
- updateInputs={updateInputs}
137
- fieldMetadata={fieldMetadata}
138
- ></SolidSelectionDynamicFilterElement>
139
- }
140
- {inputType === InputTypes.SelectionStatic &&
141
-
142
- <SolidSelectionStaticFilterElement
143
- value={value}
144
- index={index}
145
- updateInputs={updateInputs}
146
- fieldMetadata={fieldMetadata}
147
- ></SolidSelectionStaticFilterElement>
148
- }
149
-
150
- {numberOfInputs === null &&
151
- <>
152
- {/* Plus Button to add a new row */}
153
- {/* < Button
154
- icon="pi pi-plus"
155
- size="small"
156
- className="small-button"
157
- onClick={addInput}
158
- type="button"
159
- /> */}
160
-
161
- {/* Trash Button to delete the row */}
162
- {/* <Button
163
- icon="pi pi-trash"
164
- size="small"
165
- className="small-button"
166
- onClick={() => deleteInput(index)}
167
- severity="danger"
168
- type="button"
169
- /> */}
170
- <button onClick={() => addInput()}>
171
- <div className="card flex justify-content-center">
172
-
173
- <i className="custom-target-icon pi pi-plus-circle p-text-secondary p-overlay-badge"
174
- data-pr-tooltip="Add Group"
175
- data-pr-position="right"
176
- data-pr-at="right+5 top"
177
- data-pr-my="left center-2"
178
- style={{ fontSize: '1.2rem', cursor: 'pointer' }}>
179
- </i>
180
- </div>
181
-
182
- </button>
183
-
184
- <button onClick={() => deleteInput(index)}>
185
- <div className="card flex justify-content-center">
186
-
187
- <i className="custom-target-icon pi pi-trash p-text-secondary p-overlay-badge"
188
- data-pr-tooltip="Delete Rule"
189
- data-pr-position="right"
190
- data-pr-at="right+5 top"
191
- data-pr-my="left center-2"
192
- style={{ fontSize: '1.2rem', cursor: 'pointer' }}>
193
- </i>
194
- </div>
195
- </button>
196
- </>
197
- }
198
- </div>
199
-
200
- ))}
201
-
202
- </div>
203
-
204
- </div>
205
- </div>
72
+ <>
73
+ {inputs && inputs.map((value: any, index: number) => (
74
+ <>
75
+ {inputType === InputTypes.Text &&
76
+ <InputText
77
+ value={value}
78
+ onChange={(e) => updateInputs(index, e.target.value)}
79
+ placeholder=""
80
+ className='w-full'
81
+ />
82
+ }
83
+ {inputType === InputTypes.Numeric &&
84
+ <InputNumber
85
+ value={value}
86
+ onChange={(e) => updateInputs(index, e.value)}
87
+ placeholder=""
88
+ className='w-full'
89
+ />
90
+ }
91
+ {inputType === InputTypes.Date &&
92
+ <Calendar
93
+ value={value}
94
+ onChange={(e) => updateInputs(index, e.target.value)}
95
+ dateFormat="mm/dd/yy"
96
+ placeholder="mm/dd/yyyy"
97
+ mask="99/99/9999"
98
+ />
99
+ }
100
+ {inputType === InputTypes.DateTime &&
101
+ <Calendar
102
+ value={value}
103
+ onChange={(e) => updateInputs(index, e.target.value)}
104
+ dateFormat="mm/dd/yy"
105
+ placeholder="mm/dd/yyyy hh:mm"
106
+ mask="99/99/9999 99:99"
107
+ showTime
108
+ hourFormat="24"
109
+ />
110
+ }
111
+ {inputType === InputTypes.Time &&
112
+ <Calendar
113
+ value={value}
114
+ onChange={(e) => updateInputs(index, e.target.value)}
115
+ placeholder="hh:mm"
116
+ mask="99:99"
117
+ timeOnly
118
+ hourFormat="24"
119
+ />
120
+ }
121
+ {inputType === InputTypes.RelationManyToOne &&
122
+ <SolidManyToOneFilterElement
123
+ value={value}
124
+ index={index}
125
+ updateInputs={updateInputs}
126
+ fieldMetadata={fieldMetadata}
127
+ ></SolidManyToOneFilterElement>
128
+ }
129
+ {inputType === InputTypes.SelectionDynamic &&
130
+ <SolidSelectionDynamicFilterElement
131
+ value={value}
132
+ index={index}
133
+ updateInputs={updateInputs}
134
+ fieldMetadata={fieldMetadata}
135
+ ></SolidSelectionDynamicFilterElement>
136
+ }
137
+ {inputType === InputTypes.SelectionStatic &&
138
+
139
+ <SolidSelectionStaticFilterElement
140
+ value={value}
141
+ index={index}
142
+ updateInputs={updateInputs}
143
+ fieldMetadata={fieldMetadata}
144
+ ></SolidSelectionStaticFilterElement>
145
+ }
146
+ {numberOfInputs === null &&
147
+ <>
148
+ {/* Plus Button to add a new row */}
149
+ {/* < Button
150
+ icon="pi pi-plus"
151
+ size="small"
152
+ className="small-button"
153
+ onClick={addInput}
154
+ type="button"
155
+ /> */}
156
+
157
+ {/* Trash Button to delete the row */}
158
+ {/* <Button
159
+ icon="pi pi-trash"
160
+ size="small"
161
+ className="small-button"
162
+ onClick={() => deleteInput(index)}
163
+ severity="danger"
164
+ type="button"
165
+ /> */}
166
+ <Button text icon="pi pi-plus-circle" size="small" onClick={() => addInput()} />
167
+ <Button text icon="pi pi-trash" size="small" onClick={() => deleteInput(index)} />
168
+ </>
169
+ }
170
+ </>
171
+
172
+ ))}
173
+ </>
206
174
  )
207
175
  }