@solidstarters/solid-core-ui 1.1.10 → 1.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/auth/SolidForgotPassword.d.ts.map +1 -1
- package/dist/components/auth/SolidForgotPassword.js +2 -1
- package/dist/components/auth/SolidForgotPassword.js.map +1 -1
- package/dist/components/auth/SolidInitialLoginOtp.d.ts.map +1 -1
- package/dist/components/auth/SolidInitialLoginOtp.js +2 -1
- package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
- package/dist/components/auth/SolidInitiateRegisterOtp.d.ts.map +1 -1
- package/dist/components/auth/SolidInitiateRegisterOtp.js +2 -1
- package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
- package/dist/components/auth/SolidLogin.d.ts.map +1 -1
- package/dist/components/auth/SolidLogin.js +2 -1
- package/dist/components/auth/SolidLogin.js.map +1 -1
- package/dist/components/auth/SolidOTPVerify.d.ts.map +1 -1
- package/dist/components/auth/SolidOTPVerify.js +2 -1
- package/dist/components/auth/SolidOTPVerify.js.map +1 -1
- package/dist/components/auth/SolidRegister.d.ts.map +1 -1
- package/dist/components/auth/SolidRegister.js +125 -103
- package/dist/components/auth/SolidRegister.js.map +1 -1
- package/dist/components/auth/SolidResetPassword.d.ts.map +1 -1
- package/dist/components/auth/SolidResetPassword.js +2 -1
- package/dist/components/auth/SolidResetPassword.js.map +1 -1
- package/dist/components/common/DropzonePlaceholder.js +1 -1
- package/dist/components/common/DropzonePlaceholder.js.map +1 -1
- package/dist/components/common/GeneralSettings.d.ts.map +1 -1
- package/dist/components/common/GeneralSettings.js +43 -31
- package/dist/components/common/GeneralSettings.js.map +1 -1
- package/dist/components/core/common/FilterComponent.d.ts +2 -1
- package/dist/components/core/common/FilterComponent.d.ts.map +1 -1
- package/dist/components/core/common/FilterComponent.js +52 -16
- package/dist/components/core/common/FilterComponent.js.map +1 -1
- package/dist/components/core/common/SolidConfigureLayoutElement.d.ts +1 -1
- package/dist/components/core/common/SolidConfigureLayoutElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidConfigureLayoutElement.js +5 -2
- package/dist/components/core/common/SolidConfigureLayoutElement.js.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.js +131 -23
- package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
- package/dist/components/core/filter/SolidManyToOneFilterElement.d.ts.map +1 -1
- package/dist/components/core/filter/SolidManyToOneFilterElement.js +8 -6
- package/dist/components/core/filter/SolidManyToOneFilterElement.js.map +1 -1
- package/dist/components/core/filter/SolidSelectionDynamicFilterElement.js +1 -1
- package/dist/components/core/filter/SolidSelectionDynamicFilterElement.js.map +1 -1
- package/dist/components/core/filter/SolidSelectionStaticFilterElement.js +1 -1
- package/dist/components/core/filter/SolidSelectionStaticFilterElement.js.map +1 -1
- package/dist/components/core/filter/SolidVarInputsFilterElement.d.ts.map +1 -1
- package/dist/components/core/filter/SolidVarInputsFilterElement.js +11 -10
- package/dist/components/core/filter/SolidVarInputsFilterElement.js.map +1 -1
- package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
- package/dist/components/core/form/SolidFormView.js +49 -14
- package/dist/components/core/form/SolidFormView.js.map +1 -1
- package/dist/components/core/form/fields/SolidBooleanField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidBooleanField.js +9 -5
- package/dist/components/core/form/fields/SolidBooleanField.js.map +1 -1
- package/dist/components/core/form/fields/SolidDateField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidDateField.js +12 -8
- package/dist/components/core/form/fields/SolidDateField.js.map +1 -1
- package/dist/components/core/form/fields/SolidDateTimeField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidDateTimeField.js +12 -8
- package/dist/components/core/form/fields/SolidDateTimeField.js.map +1 -1
- package/dist/components/core/form/fields/SolidDecimalField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidDecimalField.js +9 -5
- package/dist/components/core/form/fields/SolidDecimalField.js.map +1 -1
- package/dist/components/core/form/fields/SolidIntegerField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidIntegerField.js +9 -5
- package/dist/components/core/form/fields/SolidIntegerField.js.map +1 -1
- package/dist/components/core/form/fields/SolidJsonField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidJsonField.js +2 -2
- package/dist/components/core/form/fields/SolidJsonField.js.map +1 -1
- package/dist/components/core/form/fields/SolidLongTextField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidLongTextField.js +7 -3
- package/dist/components/core/form/fields/SolidLongTextField.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidMediaMultipleField.js +155 -46
- package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.js +87 -31
- package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidRichTextField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidRichTextField.js +2 -2
- package/dist/components/core/form/fields/SolidRichTextField.js.map +1 -1
- package/dist/components/core/form/fields/SolidSelectionDynamicField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidSelectionDynamicField.js +4 -4
- package/dist/components/core/form/fields/SolidSelectionDynamicField.js.map +1 -1
- package/dist/components/core/form/fields/SolidSelectionStaticField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidSelectionStaticField.js +18 -9
- package/dist/components/core/form/fields/SolidSelectionStaticField.js.map +1 -1
- package/dist/components/core/form/fields/SolidShortTextField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidShortTextField.js +7 -3
- package/dist/components/core/form/fields/SolidShortTextField.js.map +1 -1
- package/dist/components/core/form/fields/SolidTimeField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidTimeField.js +12 -8
- package/dist/components/core/form/fields/SolidTimeField.js.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +22 -15
- package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +11 -8
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js +2 -2
- package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js.map +1 -1
- package/dist/components/core/list/SolidListView.d.ts.map +1 -1
- package/dist/components/core/list/SolidListView.js +88 -63
- package/dist/components/core/list/SolidListView.js.map +1 -1
- package/dist/components/core/list/SolidManyToOneFilterElement.js +7 -5
- package/dist/components/core/list/SolidManyToOneFilterElement.js.map +1 -1
- package/dist/components/core/list/columns/SolidBooleanColumn.js +3 -1
- package/dist/components/core/list/columns/SolidBooleanColumn.js.map +1 -1
- package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +2 -1
- package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
- package/dist/components/core/model/CreateModel.d.ts.map +1 -1
- package/dist/components/core/model/CreateModel.js +20 -16
- package/dist/components/core/model/CreateModel.js.map +1 -1
- package/dist/components/core/model/FieldMetaDataForm.d.ts.map +1 -1
- package/dist/components/core/model/FieldMetaDataForm.js +67 -54
- package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
- package/dist/components/core/model/FieldSelector.js +1 -1
- package/dist/components/core/model/FieldSelector.js.map +1 -1
- package/dist/components/core/model/ModelMetaData.d.ts.map +1 -1
- package/dist/components/core/model/ModelMetaData.js +12 -17
- package/dist/components/core/model/ModelMetaData.js.map +1 -1
- package/dist/components/core/module/CreateModule.d.ts.map +1 -1
- package/dist/components/core/module/CreateModule.js +23 -23
- package/dist/components/core/module/CreateModule.js.map +1 -1
- package/dist/components/layout/AppSidebar.d.ts.map +1 -1
- package/dist/components/layout/AppSidebar.js +42 -11
- package/dist/components/layout/AppSidebar.js.map +1 -1
- package/dist/components/layout/navbar-two-menu.d.ts.map +1 -1
- package/dist/components/layout/navbar-two-menu.js +6 -2
- package/dist/components/layout/navbar-two-menu.js.map +1 -1
- package/dist/components/layout/user-profile-menu.d.ts.map +1 -1
- package/dist/components/layout/user-profile-menu.js +7 -3
- package/dist/components/layout/user-profile-menu.js.map +1 -1
- package/dist/helpers/AppTitle.d.ts +4 -0
- package/dist/helpers/AppTitle.d.ts.map +1 -0
- package/dist/helpers/AppTitle.js +8 -0
- package/dist/helpers/AppTitle.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/auth/SolidForgotPassword.tsx +2 -6
- package/src/components/auth/SolidInitialLoginOtp.tsx +2 -6
- package/src/components/auth/SolidInitiateRegisterOtp.tsx +2 -6
- package/src/components/auth/SolidLogin.tsx +2 -5
- package/src/components/auth/SolidOTPVerify.tsx +4 -7
- package/src/components/auth/SolidRegister.tsx +207 -178
- package/src/components/auth/SolidResetPassword.tsx +2 -6
- package/src/components/common/DropzonePlaceholder.tsx +1 -1
- package/src/components/common/GeneralSettings.tsx +310 -193
- package/src/components/core/common/FilterComponent.tsx +148 -202
- package/src/components/core/common/SolidConfigureLayoutElement.tsx +6 -4
- package/src/components/core/common/SolidGlobalSearchElement.tsx +193 -50
- package/src/components/core/filter/SolidManyToOneFilterElement.tsx +5 -3
- package/src/components/core/filter/SolidSelectionDynamicFilterElement.tsx +1 -1
- package/src/components/core/filter/SolidSelectionStaticFilterElement.tsx +1 -1
- package/src/components/core/filter/SolidVarInputsFilterElement.tsx +103 -135
- package/src/components/core/form/SolidFormView.tsx +64 -25
- package/src/components/core/form/fields/SolidBooleanField.tsx +12 -5
- package/src/components/core/form/fields/SolidDateField.tsx +9 -4
- package/src/components/core/form/fields/SolidDateTimeField.tsx +27 -21
- package/src/components/core/form/fields/SolidDecimalField.tsx +9 -2
- package/src/components/core/form/fields/SolidIntegerField.tsx +22 -15
- package/src/components/core/form/fields/SolidJsonField.tsx +14 -12
- package/src/components/core/form/fields/SolidLongTextField.tsx +22 -16
- package/src/components/core/form/fields/SolidMediaMultipleField.tsx +257 -79
- package/src/components/core/form/fields/SolidMediaSingleField.tsx +148 -61
- package/src/components/core/form/fields/SolidRichTextField.tsx +6 -4
- package/src/components/core/form/fields/SolidSelectionDynamicField.tsx +6 -5
- package/src/components/core/form/fields/SolidSelectionStaticField.tsx +34 -23
- package/src/components/core/form/fields/SolidShortTextField.tsx +23 -16
- package/src/components/core/form/fields/SolidTimeField.tsx +27 -20
- package/src/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +9 -9
- package/src/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +20 -19
- package/src/components/core/form/fields/relations/SolidRelationOneToManyField.tsx +2 -2
- package/src/components/core/list/SolidListView.tsx +91 -49
- package/src/components/core/list/SolidManyToOneFilterElement.tsx +2 -2
- package/src/components/core/list/columns/SolidBooleanColumn.tsx +2 -2
- package/src/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +1 -1
- package/src/components/core/model/CreateModel.tsx +92 -81
- package/src/components/core/model/FieldMetaDataForm.tsx +166 -87
- package/src/components/core/model/FieldSelector.tsx +1 -1
- package/src/components/core/model/ModelMetaData.tsx +8 -7
- package/src/components/core/module/CreateModule.tsx +181 -183
- package/src/components/layout/AppSidebar.tsx +35 -10
- package/src/components/layout/navbar-two-menu.tsx +6 -1
- package/src/components/layout/user-profile-menu.tsx +20 -8
- package/src/helpers/AppTitle.tsx +14 -0
- package/src/index.ts +2 -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,
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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
|
-
|
|
156
|
-
|
|
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
|
-
|
|
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
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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
|
-
<
|
|
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
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
|
193
|
-
<div className="flex
|
|
194
|
-
<
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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
|
});
|
|
@@ -19,7 +19,7 @@ export const SolidManyToOneFilterElement = ({ value, updateInputs, index, fieldM
|
|
|
19
19
|
offset: 0,
|
|
20
20
|
limit: 10,
|
|
21
21
|
filters: {
|
|
22
|
-
[fieldMetadata
|
|
22
|
+
[fieldMetadata?.relationModel?.userKeyField?.name]: {
|
|
23
23
|
$containsi: event.query
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -38,7 +38,7 @@ export const SolidManyToOneFilterElement = ({ value, updateInputs, index, fieldM
|
|
|
38
38
|
if (autocompleteData) {
|
|
39
39
|
const autoCompleteItems = autocompleteData.records.map((item: any) => {
|
|
40
40
|
return {
|
|
41
|
-
label: item[fieldMetadata
|
|
41
|
+
label: item[fieldMetadata?.relationModel?.userKeyField?.name],
|
|
42
42
|
value: item['id']
|
|
43
43
|
}
|
|
44
44
|
});
|
|
@@ -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
|
|
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
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
{
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
{
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}
|
|
132
|
-
{
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
{
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
{
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
{
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|
}
|