@solidstarters/solid-core-ui 1.1.47 → 1.1.50
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/core/common/FilterComponent.d.ts.map +1 -1
- package/dist/components/core/common/FilterComponent.js +26 -10
- package/dist/components/core/common/FilterComponent.js.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.js +160 -94
- package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
- package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
- package/dist/components/core/form/SolidFormView.js +43 -16
- package/dist/components/core/form/SolidFormView.js.map +1 -1
- package/dist/components/core/form/fields/ISolidField.d.ts +1 -0
- package/dist/components/core/form/fields/ISolidField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidBooleanField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidBooleanField.js +9 -2
- 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 +27 -11
- 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 +28 -11
- 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 +24 -5
- package/dist/components/core/form/fields/SolidDecimalField.js.map +1 -1
- package/dist/components/core/form/fields/SolidEmailField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidEmailField.js +24 -5
- package/dist/components/core/form/fields/SolidEmailField.js.map +1 -1
- package/dist/components/core/form/fields/SolidIntegerField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidIntegerField.js +24 -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 +22 -3
- 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 +30 -4
- 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 +52 -29
- 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 +39 -16
- package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidPasswordField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidPasswordField.js +23 -3
- package/dist/components/core/form/fields/SolidPasswordField.js.map +1 -1
- package/dist/components/core/form/fields/SolidRichTextField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidRichTextField.js +23 -3
- 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 +14 -5
- 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 +10 -2
- 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 +28 -8
- 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 +27 -8
- package/dist/components/core/form/fields/SolidTimeField.js.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +15 -4
- 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 +13 -4
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.d.ts.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js +17 -5
- package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js.map +1 -1
- package/dist/components/core/form/fields/widgets/SolidBooleanCheckboxFieldWidget.js +1 -1
- package/dist/components/core/form/fields/widgets/SolidBooleanCheckboxFieldWidget.js.map +1 -1
- package/dist/components/core/form/fields/widgets/SolidBooleanSelectFieldWidget.js +1 -1
- package/dist/components/core/form/fields/widgets/SolidBooleanSelectFieldWidget.js.map +1 -1
- package/dist/components/core/form/fields/widgets/SolidFormFieldJsonViewModeWidget.d.ts +2 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldJsonViewModeWidget.d.ts.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldJsonViewModeWidget.js +9 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldJsonViewModeWidget.js.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldMediaViewModeWidget.d.ts +2 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldMediaViewModeWidget.d.ts.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldMediaViewModeWidget.js +8 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldMediaViewModeWidget.js.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldPasswordViewModeWidget.d.ts +2 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldPasswordViewModeWidget.d.ts.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldPasswordViewModeWidget.js +9 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldPasswordViewModeWidget.js.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldRelationViewModeWidget.d.ts +2 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldRelationViewModeWidget.d.ts.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldRelationViewModeWidget.js +20 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldRelationViewModeWidget.js.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldRichTextViewModeWidget.d.ts +2 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldRichTextViewModeWidget.d.ts.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldRichTextViewModeWidget.js +7 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldRichTextViewModeWidget.js.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldViewMediaMultipleWidget.d.ts +3 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldViewMediaMultipleWidget.d.ts.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldViewMediaMultipleWidget.js +74 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldViewMediaMultipleWidget.js.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldViewMediaSingleWidget.d.ts +3 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldViewMediaSingleWidget.d.ts.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldViewMediaSingleWidget.js +58 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldViewMediaSingleWidget.js.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldViewModeWidget.d.ts +2 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldViewModeWidget.d.ts.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldViewModeWidget.js +6 -0
- package/dist/components/core/form/fields/widgets/SolidFormFieldViewModeWidget.js.map +1 -0
- package/dist/components/core/form/fields/widgets/SolidSelectionStaticAutocompleteFieldWidget.js +1 -1
- package/dist/components/core/form/fields/widgets/SolidSelectionStaticAutocompleteFieldWidget.js.map +1 -1
- package/dist/components/core/form/fields/widgets/SolidSelectionStaticRadioFieldWidget.js +1 -1
- package/dist/components/core/form/fields/widgets/SolidSelectionStaticRadioFieldWidget.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.js +37 -14
- package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
- package/dist/components/core/list/SolidListView.d.ts +3 -0
- package/dist/components/core/list/SolidListView.d.ts.map +1 -1
- package/dist/components/core/list/SolidListView.js +167 -95
- package/dist/components/core/list/SolidListView.js.map +1 -1
- package/dist/components/core/model/FieldMetaDataForm.js +1 -1
- package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
- package/dist/components/core/users/CreateUser.js +1 -3
- package/dist/components/core/users/CreateUser.js.map +1 -1
- package/dist/helpers/registry.d.ts.map +1 -1
- package/dist/helpers/registry.js +16 -0
- package/dist/helpers/registry.js.map +1 -1
- package/dist/resources/globals.css +81 -2
- package/package.json +1 -1
- package/src/components/core/common/FilterComponent.tsx +39 -10
- package/src/components/core/common/SolidGlobalSearchElement.tsx +228 -135
- package/src/components/core/form/SolidFormView.tsx +69 -21
- package/src/components/core/form/fields/ISolidField.tsx +1 -0
- package/src/components/core/form/fields/SolidBooleanField.tsx +39 -25
- package/src/components/core/form/fields/SolidDateField.tsx +46 -32
- package/src/components/core/form/fields/SolidDateTimeField.tsx +47 -34
- package/src/components/core/form/fields/SolidDecimalField.tsx +42 -26
- package/src/components/core/form/fields/SolidEmailField.tsx +43 -27
- package/src/components/core/form/fields/SolidIntegerField.tsx +42 -25
- package/src/components/core/form/fields/SolidJsonField.tsx +40 -23
- package/src/components/core/form/fields/SolidLongTextField.tsx +86 -53
- package/src/components/core/form/fields/SolidMediaMultipleField.tsx +170 -139
- package/src/components/core/form/fields/SolidMediaSingleField.tsx +124 -93
- package/src/components/core/form/fields/SolidPasswordField.tsx +42 -25
- package/src/components/core/form/fields/SolidRichTextField.tsx +41 -24
- package/src/components/core/form/fields/SolidSelectionDynamicField.tsx +46 -28
- package/src/components/core/form/fields/SolidSelectionStaticField.tsx +38 -22
- package/src/components/core/form/fields/SolidShortTextField.tsx +63 -47
- package/src/components/core/form/fields/SolidTimeField.tsx +47 -30
- package/src/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +30 -8
- package/src/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +49 -31
- package/src/components/core/form/fields/relations/SolidRelationOneToManyField.tsx +38 -19
- package/src/components/core/form/fields/widgets/SolidBooleanCheckboxFieldWidget.tsx +1 -1
- package/src/components/core/form/fields/widgets/SolidBooleanSelectFieldWidget.tsx +1 -1
- package/src/components/core/form/fields/widgets/SolidFormFieldJsonViewModeWidget.tsx +23 -0
- package/src/components/core/form/fields/widgets/SolidFormFieldMediaViewModeWidget.tsx +13 -0
- package/src/components/core/form/fields/widgets/SolidFormFieldPasswordViewModeWidget.tsx +23 -0
- package/src/components/core/form/fields/widgets/SolidFormFieldRelationViewModeWidget.tsx +32 -0
- package/src/components/core/form/fields/widgets/SolidFormFieldRichTextViewModeWidget.tsx +17 -0
- package/src/components/core/form/fields/widgets/SolidFormFieldViewMediaMultipleWidget.tsx +157 -0
- package/src/components/core/form/fields/widgets/SolidFormFieldViewMediaSingleWidget.tsx +98 -0
- package/src/components/core/form/fields/widgets/SolidFormFieldViewModeWidget.tsx +11 -0
- package/src/components/core/form/fields/widgets/SolidSelectionStaticAutocompleteFieldWidget.tsx +1 -1
- package/src/components/core/form/fields/widgets/SolidSelectionStaticRadioFieldWidget.tsx +1 -1
- package/src/components/core/kanban/SolidKanbanView.tsx +26 -5
- package/src/components/core/list/SolidListView.tsx +166 -105
- package/src/components/core/model/FieldMetaDataForm.tsx +1 -1
- package/src/components/core/users/CreateUser.tsx +5 -5
- package/src/helpers/registry.ts +16 -0
- package/src/resources/globals.css +81 -2
- package/src/types/solid-core.d.ts +6 -1
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { Button } from "primereact/button";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { FileReaderExt } from "@/components/common/FileReaderExt";
|
|
5
|
+
import Link from "next/link";
|
|
6
|
+
import { downloadMediaFile } from "@/helpers/downloadMediaFile";
|
|
7
|
+
import { SolidMediaSingleFieldWidgetProps } from "@/types/solid-core";
|
|
8
|
+
import { Dialog } from "primereact/dialog";
|
|
9
|
+
|
|
10
|
+
export const SolidFormFieldViewMediaMultipleWidget = ({ formik, fieldContext }: SolidMediaSingleFieldWidgetProps) => {
|
|
11
|
+
const [fileDetails, setFileDetails] = useState<{ name: string; type: string; size: number, id: number, fileUrl: string }[]>([]);
|
|
12
|
+
const [isShowAllFiles, setShowAllFiles] = useState(false);
|
|
13
|
+
const fieldMetadata = fieldContext.fieldMetadata;
|
|
14
|
+
const fieldLayoutInfo = fieldContext.field;
|
|
15
|
+
const className = fieldLayoutInfo.attrs?.className || 'field col-12';
|
|
16
|
+
const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;
|
|
17
|
+
const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;
|
|
18
|
+
|
|
19
|
+
useEffect(() => { formik.setFieldValue(fieldLayoutInfo.attrs.name, "false") }, [])
|
|
20
|
+
|
|
21
|
+
const formatFileSize = (size: number) => {
|
|
22
|
+
return size >= 1024 * 1024
|
|
23
|
+
? `${(size / (1024 * 1024)).toFixed(1)} MB`
|
|
24
|
+
: `${(size / 1024).toFixed(1)} KB`;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
const fieldValue = formik?.values[fieldLayoutInfo.attrs.name];
|
|
29
|
+
|
|
30
|
+
if (Array.isArray(fieldValue) && fieldValue.length > 0) {
|
|
31
|
+
const urls: string[] = [];
|
|
32
|
+
const details: { name: string; type: string; size: number, id: any, fileUrl: string }[] = [];
|
|
33
|
+
const objectUrls: string[] = [];
|
|
34
|
+
fieldValue.forEach((file: File | any) => {
|
|
35
|
+
if (file instanceof File) {
|
|
36
|
+
// New file (from local upload)
|
|
37
|
+
const fileUrl = URL.createObjectURL(file);
|
|
38
|
+
objectUrls.push(fileUrl); // Store URL for cleanup
|
|
39
|
+
urls.push(fileUrl);
|
|
40
|
+
|
|
41
|
+
details.push({
|
|
42
|
+
name: file.name,
|
|
43
|
+
type: file.type,
|
|
44
|
+
size: file.size,
|
|
45
|
+
id: `${file.name}-${file.size}`,
|
|
46
|
+
fileUrl: fileUrl // ✅ Store the generated object URL
|
|
47
|
+
});
|
|
48
|
+
} else if (typeof file === "object" && file._full_url) {
|
|
49
|
+
urls.push(file._full_url);
|
|
50
|
+
details.push({
|
|
51
|
+
name: file.originalFileName,
|
|
52
|
+
type: file.mimeType,
|
|
53
|
+
size: file.fileSize,
|
|
54
|
+
id: file.id,
|
|
55
|
+
fileUrl: file._full_url
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
setFileDetails(details);
|
|
60
|
+
}
|
|
61
|
+
}, [formik.values, fieldLayoutInfo.attrs.name]);
|
|
62
|
+
|
|
63
|
+
return (
|
|
64
|
+
<div className={className}>
|
|
65
|
+
{showFieldLabel != false &&
|
|
66
|
+
<label htmlFor={fieldLayoutInfo.attrs.name} className="form-field-label mt-4 font-medium">{fieldLabel}
|
|
67
|
+
</label>
|
|
68
|
+
}
|
|
69
|
+
{fileDetails.length > 0 &&
|
|
70
|
+
<div className="solid-file-view-wrapper">
|
|
71
|
+
<div className="flex align-items-center gap-2">
|
|
72
|
+
<FileReaderExt fileDetails={fileDetails[0]} />
|
|
73
|
+
<div className="w-full flex flex-column gap-1">
|
|
74
|
+
<div className="flex align-items-center justify-content-between">
|
|
75
|
+
<Link className="font-normal w-11" href={`${fileDetails[0]?.fileUrl}`} target="_blank">{fileDetails[0].name}</Link>
|
|
76
|
+
<div className="flex align-items-center gap-2">
|
|
77
|
+
<div>
|
|
78
|
+
<Button
|
|
79
|
+
type="button"
|
|
80
|
+
text
|
|
81
|
+
icon={"pi pi-download"}
|
|
82
|
+
size="small"
|
|
83
|
+
style={{
|
|
84
|
+
height: 16,
|
|
85
|
+
width: 16
|
|
86
|
+
}}
|
|
87
|
+
onClick={() => downloadMediaFile(fileDetails[0]?.fileUrl, fileDetails[0]?.name)}
|
|
88
|
+
/>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
<div className="flex align-items-center gap-2 text-sm">
|
|
93
|
+
{formatFileSize(fileDetails[0].size)}
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
{fileDetails.length > 1 &&
|
|
101
|
+
<div className="flex align-items-center mt-1">
|
|
102
|
+
<p className="m-0">
|
|
103
|
+
{fileDetails.length - 1} items
|
|
104
|
+
</p>
|
|
105
|
+
<div>
|
|
106
|
+
<Button type="button" size="small" text label="View" onClick={() => setShowAllFiles(true)} />
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
<Dialog
|
|
112
|
+
visible={isShowAllFiles}
|
|
113
|
+
header="Items Uploaded"
|
|
114
|
+
modal
|
|
115
|
+
onHide={() => setShowAllFiles(false)}
|
|
116
|
+
style={{ minWidth: 450 }}
|
|
117
|
+
>
|
|
118
|
+
{fileDetails.length > 1 &&
|
|
119
|
+
fileDetails.map((file, index) => {
|
|
120
|
+
const fileId = `${file.name}-${file.size}`;
|
|
121
|
+
return (
|
|
122
|
+
<div key={fileId} className="solid-file-view-wrapper">
|
|
123
|
+
<div className="flex align-items-center gap-2">
|
|
124
|
+
<FileReaderExt fileDetails={file} />
|
|
125
|
+
<div className="w-full flex flex-column gap-1">
|
|
126
|
+
<div className="flex align-items-center justify-content-between">
|
|
127
|
+
<Link className="font-normal w-11" href={file?.fileUrl} target="_blank">{file.name}</Link>
|
|
128
|
+
<div className="flex align-items-center gap-2">
|
|
129
|
+
<div>
|
|
130
|
+
<Button
|
|
131
|
+
type="button"
|
|
132
|
+
text
|
|
133
|
+
icon={"pi pi-download"}
|
|
134
|
+
size="small"
|
|
135
|
+
style={{
|
|
136
|
+
height: 16,
|
|
137
|
+
width: 16
|
|
138
|
+
}}
|
|
139
|
+
onClick={() => downloadMediaFile(file?.fileUrl, file?.name)}
|
|
140
|
+
/>
|
|
141
|
+
</div>
|
|
142
|
+
</div>
|
|
143
|
+
</div>
|
|
144
|
+
<div className="flex align-items-center gap-2 text-sm">
|
|
145
|
+
{formatFileSize(file.size)}
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
);
|
|
151
|
+
})
|
|
152
|
+
}
|
|
153
|
+
</Dialog>
|
|
154
|
+
|
|
155
|
+
</div>
|
|
156
|
+
);
|
|
157
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { Button } from "primereact/button";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { FileReaderExt } from "@/components/common/FileReaderExt";
|
|
5
|
+
import Link from "next/link";
|
|
6
|
+
import { downloadMediaFile } from "@/helpers/downloadMediaFile";
|
|
7
|
+
import { SolidMediaSingleFieldWidgetProps } from "@/types/solid-core";
|
|
8
|
+
|
|
9
|
+
export const SolidFormFieldViewMediaSingleWidget = ({ formik, fieldContext }: SolidMediaSingleFieldWidgetProps) => {
|
|
10
|
+
const [fileDetails, setFileDetails] = useState<{ name: string; type: string, fileUrl: string, fileSize: number } | null>(null);
|
|
11
|
+
const fieldMetadata = fieldContext.fieldMetadata;
|
|
12
|
+
const fieldLayoutInfo = fieldContext.field;
|
|
13
|
+
const className = fieldLayoutInfo.attrs?.className || 'field col-12';
|
|
14
|
+
const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;
|
|
15
|
+
const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;
|
|
16
|
+
|
|
17
|
+
useEffect(() => { formik.setFieldValue(fieldLayoutInfo.attrs.name, "false") }, [])
|
|
18
|
+
|
|
19
|
+
const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];
|
|
20
|
+
const formatFileSize = (size: number) => {
|
|
21
|
+
return size >= 1024 * 1024
|
|
22
|
+
? `${(size / (1024 * 1024)).toFixed(1)} MB`
|
|
23
|
+
: `${(size / 1024).toFixed(1)} KB`;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
const fieldValue = formik?.values[fieldLayoutInfo.attrs.name];
|
|
28
|
+
|
|
29
|
+
if (fieldValue && typeof fieldValue === "object") {
|
|
30
|
+
let fileUrl = "";
|
|
31
|
+
let fileName = "Unknown File";
|
|
32
|
+
let fileSize = 0;
|
|
33
|
+
|
|
34
|
+
if (fieldValue instanceof File) {
|
|
35
|
+
fileUrl = URL.createObjectURL(fieldValue);
|
|
36
|
+
fileName = fieldValue.name;
|
|
37
|
+
fileSize = fieldValue.size;
|
|
38
|
+
} else if (fieldValue._full_url) {
|
|
39
|
+
fileUrl = fieldValue._full_url;
|
|
40
|
+
fileName = fieldValue.originalFileName;
|
|
41
|
+
fileSize = fieldValue.fileSize;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
setFileDetails({
|
|
45
|
+
name: fileName,
|
|
46
|
+
type: fieldValue.mimeType,
|
|
47
|
+
fileUrl,
|
|
48
|
+
fileSize
|
|
49
|
+
});
|
|
50
|
+
// Ensure formik has the correct value
|
|
51
|
+
formik.setFieldValue(fieldLayoutInfo.attrs.name, fieldValue);
|
|
52
|
+
}
|
|
53
|
+
}, [formik.values, fieldLayoutInfo.attrs.name]);
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<div className={className}>
|
|
57
|
+
<div className="flex flex-column gap-2 mt-4 relative">
|
|
58
|
+
{showFieldLabel != false &&
|
|
59
|
+
<label htmlFor={fieldLayoutInfo.attrs.name} className="form-field-label font-medium">{fieldLabel}
|
|
60
|
+
</label>
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
{fileDetails && (
|
|
64
|
+
<div className="solid-file-view-wrapper mt-4">
|
|
65
|
+
<div className="flex align-items-center gap-2">
|
|
66
|
+
<FileReaderExt fileDetails={fileDetails} />
|
|
67
|
+
<div className="w-full flex flex-column gap-1">
|
|
68
|
+
<div className="flex align-items-start justify-content-between">
|
|
69
|
+
<Link className="font-normal w-9 text-primary" href={fileDetails.fileUrl} target="_blank">{fileDetails.name}</Link>
|
|
70
|
+
<div className="flex align-items-center gap-2">
|
|
71
|
+
<div>
|
|
72
|
+
<Button
|
|
73
|
+
type="button"
|
|
74
|
+
text
|
|
75
|
+
icon={"pi pi-download"}
|
|
76
|
+
size="small"
|
|
77
|
+
severity="secondary"
|
|
78
|
+
// className="p-2"
|
|
79
|
+
style={{
|
|
80
|
+
height: 16,
|
|
81
|
+
width: 16
|
|
82
|
+
}}
|
|
83
|
+
onClick={() => downloadMediaFile(fileDetails?.fileUrl, fileDetails?.name)}
|
|
84
|
+
/>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
<div className="flex align-items-center gap-2 text-sm">
|
|
89
|
+
{fileDetails && formatFileSize(fileDetails.fileSize)}
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
)}
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
);
|
|
98
|
+
}
|
package/src/components/core/form/fields/widgets/SolidSelectionStaticAutocompleteFieldWidget.tsx
CHANGED
|
@@ -39,7 +39,7 @@ export const SolidSelectionStaticAutocompleteWidget = ({ formik, fieldContext }:
|
|
|
39
39
|
<div className="relative">
|
|
40
40
|
<div className="flex flex-column gap-2 mt-4">
|
|
41
41
|
{showFieldLabel != false &&
|
|
42
|
-
<label htmlFor={fieldLayoutInfo.attrs.name} className="form-field-label">{fieldLabel}
|
|
42
|
+
<label htmlFor={fieldLayoutInfo.attrs.name} className="form-field-label font-medium">{fieldLabel}
|
|
43
43
|
{fieldMetadata.required && <span className="text-red-500"> *</span>}
|
|
44
44
|
{/* {fieldDescription && <span className="form_field_help">({fieldDescription}) </span>} */}
|
|
45
45
|
</label>
|
|
@@ -36,7 +36,7 @@ export const SolidSelectionStaticRadioWidget = ({ formik, fieldContext }: SolidS
|
|
|
36
36
|
<div className="relative">
|
|
37
37
|
<div className="flex flex-column gap-2 mt-4">
|
|
38
38
|
{showFieldLabel !== false && (
|
|
39
|
-
<label htmlFor={fieldName} className="form-field-label">
|
|
39
|
+
<label htmlFor={fieldName} className="form-field-label font-medium">
|
|
40
40
|
{fieldLabel}
|
|
41
41
|
{fieldMetadata.required && <span className="text-red-500"> *</span>}
|
|
42
42
|
</label>
|
|
@@ -26,6 +26,7 @@ import Counter from "yet-another-react-lightbox/plugins/counter";
|
|
|
26
26
|
import Download from "yet-another-react-lightbox/plugins/download";
|
|
27
27
|
import "yet-another-react-lightbox/styles.css";
|
|
28
28
|
import "yet-another-react-lightbox/plugins/counter.css";
|
|
29
|
+
import { useRouter, useSearchParams } from "next/navigation";
|
|
29
30
|
|
|
30
31
|
|
|
31
32
|
|
|
@@ -38,7 +39,8 @@ type SolidKanbanViewParams = {
|
|
|
38
39
|
|
|
39
40
|
export const SolidKanbanView = (params: SolidKanbanViewParams) => {
|
|
40
41
|
const solidGlobalSearchElementRef = useRef();
|
|
41
|
-
|
|
42
|
+
const searchParams = useSearchParams().toString(); // Converts the query params to a string
|
|
43
|
+
const router = useRouter();
|
|
42
44
|
// TODO: The initial filter state will be created based on the fields which are present on this kanban view.
|
|
43
45
|
const [filters, setFilters] = useState<any>();
|
|
44
46
|
const [toPopulate, setToPopulate] = useState<string[]>([]);
|
|
@@ -58,9 +60,22 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
|
|
|
58
60
|
const [triggerCheckIfPermissionExists] = useLazyCheckIfPermissionExistsQuery();
|
|
59
61
|
const [openLightbox, setOpenLightbox] = useState(false);
|
|
60
62
|
const [lightboxUrls, setLightboxUrls] = useState({});
|
|
63
|
+
const [filterQueryString, setFilterQueryString] = useState<any>();
|
|
61
64
|
|
|
62
65
|
|
|
63
66
|
|
|
67
|
+
const pushFiltersToRouter = (filterQueryString: any) => {
|
|
68
|
+
router.push(`?${filterQueryString}`, undefined, { shallow: true });
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
if (filterQueryString) {
|
|
73
|
+
pushFiltersToRouter(filterQueryString);
|
|
74
|
+
}
|
|
75
|
+
}, [filterQueryString]);
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
64
79
|
useEffect(() => {
|
|
65
80
|
const fetchPermissions = async () => {
|
|
66
81
|
if (params.modelName) {
|
|
@@ -286,10 +301,15 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
|
|
|
286
301
|
// sort: [`id:desc`],
|
|
287
302
|
};
|
|
288
303
|
// fields=status&groupBy=status&fields=count(status)&populateGroup=true
|
|
289
|
-
|
|
304
|
+
let queryString = qs.stringify(queryData, {
|
|
290
305
|
encodeValuesOnly: true
|
|
291
306
|
});
|
|
292
|
-
|
|
307
|
+
if(searchParams) {
|
|
308
|
+
queryString = searchParams;
|
|
309
|
+
setFilterQueryString(searchParams)
|
|
310
|
+
}else{
|
|
311
|
+
setFilterQueryString(queryString)
|
|
312
|
+
}
|
|
293
313
|
triggerGetSolidEntities(queryString);
|
|
294
314
|
setSelectedRecords([]);
|
|
295
315
|
}
|
|
@@ -408,7 +428,7 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
|
|
|
408
428
|
const queryString = qs.stringify(queryData, {
|
|
409
429
|
encodeValuesOnly: true
|
|
410
430
|
});
|
|
411
|
-
|
|
431
|
+
setFilterQueryString(queryString);
|
|
412
432
|
const data: any = await triggerGetSolidEntities(queryString);
|
|
413
433
|
const newRecords = data.data.records;
|
|
414
434
|
const currentData = kanbanViewData;
|
|
@@ -561,7 +581,7 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
|
|
|
561
581
|
const queryString = qs.stringify(queryData, {
|
|
562
582
|
encodeValuesOnly: true
|
|
563
583
|
});
|
|
564
|
-
|
|
584
|
+
setFilterQueryString(queryString);
|
|
565
585
|
const data: any = await triggerGetSolidEntities(queryString);
|
|
566
586
|
if (data && data?.data?.groupRecords.length > 0) {
|
|
567
587
|
const updatedData = [...kanbanViewData, ...data.data.groupRecords];
|
|
@@ -600,6 +620,7 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
|
|
|
600
620
|
});
|
|
601
621
|
|
|
602
622
|
// triggerGetSolidEntities(queryString);
|
|
623
|
+
setFilterQueryString(queryString);
|
|
603
624
|
const data: any = await triggerGetSolidEntities(queryString);
|
|
604
625
|
if (data && data?.data?.groupRecords.length > 0) {
|
|
605
626
|
const updatedData = [...data.data.groupRecords];
|