@solidstarters/solid-core-ui 1.1.72 → 1.1.74
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/common/SolidBreadcrumb.d.ts.map +1 -1
- package/dist/components/common/SolidBreadcrumb.js +5 -3
- package/dist/components/common/SolidBreadcrumb.js.map +1 -1
- package/dist/components/common/SolidBreadcrumb.tsx +5 -3
- package/dist/components/core/common/SolidCreateButton.d.ts +1 -1
- package/dist/components/core/common/SolidCreateButton.d.ts.map +1 -1
- package/dist/components/core/common/SolidCreateButton.js +3 -4
- package/dist/components/core/common/SolidCreateButton.js.map +1 -1
- package/dist/components/core/common/SolidCreateButton.tsx +3 -6
- package/dist/components/core/form/SolidFormActionHeader.d.ts +2 -0
- package/dist/components/core/form/SolidFormActionHeader.d.ts.map +1 -0
- package/dist/components/core/form/SolidFormActionHeader.js +66 -0
- package/dist/components/core/form/SolidFormActionHeader.js.map +1 -0
- package/dist/components/core/form/SolidFormActionHeader.tsx +216 -0
- package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
- package/dist/components/core/form/SolidFormView.js +13 -76
- package/dist/components/core/form/SolidFormView.js.map +1 -1
- package/dist/components/core/form/SolidFormView.tsx +26 -249
- package/dist/components/core/list/SolidEmptyListViewPlaceholder.d.ts +2 -0
- package/dist/components/core/list/SolidEmptyListViewPlaceholder.d.ts.map +1 -0
- package/dist/components/core/list/SolidEmptyListViewPlaceholder.js +16 -0
- package/dist/components/core/list/SolidEmptyListViewPlaceholder.js.map +1 -0
- package/dist/components/core/list/SolidEmptyListViewPlaceholder.tsx +41 -0
- package/dist/components/core/list/SolidListView.d.ts.map +1 -1
- package/dist/components/core/list/SolidListView.js +15 -3
- package/dist/components/core/list/SolidListView.js.map +1 -1
- package/dist/components/core/list/SolidListView.tsx +24 -4
- package/dist/components/core/list/SolidListViewColumn.d.ts.map +1 -1
- package/dist/components/core/list/SolidListViewColumn.js +3 -0
- package/dist/components/core/list/SolidListViewColumn.js.map +1 -1
- package/dist/components/core/list/SolidListViewColumn.tsx +3 -0
- package/dist/components/core/list/SolidListViewShimmerLoading.d.ts +2 -0
- package/dist/components/core/list/SolidListViewShimmerLoading.d.ts.map +1 -0
- package/dist/components/core/list/SolidListViewShimmerLoading.js +7 -0
- package/dist/components/core/list/SolidListViewShimmerLoading.js.map +1 -0
- package/dist/components/core/list/SolidListViewShimmerLoading.tsx +77 -0
- package/dist/components/core/list/widgets/SolidShortTextAvatarWidget.d.ts.map +1 -1
- package/dist/components/core/list/widgets/SolidShortTextAvatarWidget.js +0 -1
- package/dist/components/core/list/widgets/SolidShortTextAvatarWidget.js.map +1 -1
- package/dist/components/core/list/widgets/SolidShortTextAvatarWidget.tsx +0 -1
- package/dist/components/layout/AppSidebar.js +1 -1
- package/dist/components/layout/AppSidebar.js.map +1 -1
- package/dist/components/layout/AppSidebar.tsx +2 -2
- package/dist/resources/globals.css +78 -1
- package/dist/resources/solid-primereact.css +1 -1
- package/package.json +1 -1
- package/src/components/common/SolidBreadcrumb.tsx +5 -3
- package/src/components/core/common/SolidCreateButton.tsx +3 -6
- package/src/components/core/form/SolidFormActionHeader.tsx +216 -0
- package/src/components/core/form/SolidFormView.tsx +26 -249
- package/src/components/core/list/SolidEmptyListViewPlaceholder.tsx +41 -0
- package/src/components/core/list/SolidListView.tsx +24 -4
- package/src/components/core/list/SolidListViewColumn.tsx +3 -0
- package/src/components/core/list/SolidListViewShimmerLoading.tsx +77 -0
- package/src/components/core/list/widgets/SolidShortTextAvatarWidget.tsx +0 -1
- package/src/components/layout/AppSidebar.tsx +2 -2
- package/src/resources/globals.css +78 -1
- package/src/resources/solid-primereact.css +1 -1
|
@@ -50,6 +50,7 @@ import Download from "yet-another-react-lightbox/plugins/download";
|
|
|
50
50
|
import "yet-another-react-lightbox/styles.css";
|
|
51
51
|
import "yet-another-react-lightbox/plugins/counter.css";
|
|
52
52
|
import { SolidChatter } from "../chatter/SolidChatter";
|
|
53
|
+
import { SolidFormActionHeader } from "./SolidFormActionHeader";
|
|
53
54
|
|
|
54
55
|
export type SolidFormViewProps = {
|
|
55
56
|
moduleName: string;
|
|
@@ -353,7 +354,6 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
353
354
|
const router = useRouter();
|
|
354
355
|
const toast = useRef<Toast>(null);
|
|
355
356
|
const searchParams = useSearchParams();
|
|
356
|
-
const viewModeFromURL = searchParams.get("viewMode");
|
|
357
357
|
|
|
358
358
|
const [redirectToList, setRedirectToList] = useState(false);
|
|
359
359
|
|
|
@@ -372,15 +372,20 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
372
372
|
const op = useRef(null);
|
|
373
373
|
|
|
374
374
|
useEffect(() => {
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
} else {
|
|
378
|
-
setViewMode("view"); // Default to 'view' if not present
|
|
379
|
-
}
|
|
375
|
+
const mode = searchParams.get('viewMode');
|
|
376
|
+
|
|
380
377
|
if (params.id === 'new') {
|
|
381
|
-
setViewMode(
|
|
378
|
+
setViewMode('edit');
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// Set the viewMode based on the URL
|
|
383
|
+
if (mode === 'view' || mode === 'edit') {
|
|
384
|
+
setViewMode(mode);
|
|
385
|
+
} else {
|
|
386
|
+
setViewMode('view'); // Default to 'view' if no valid mode is provided
|
|
382
387
|
}
|
|
383
|
-
}, [
|
|
388
|
+
}, [searchParams, params.id]);
|
|
384
389
|
|
|
385
390
|
|
|
386
391
|
// function that updates view mode
|
|
@@ -529,12 +534,6 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
529
534
|
isEntityUpdateError
|
|
530
535
|
]);
|
|
531
536
|
|
|
532
|
-
const showError = async () => {
|
|
533
|
-
// Trigger validation and get the updated errors
|
|
534
|
-
const errors = await formik.validateForm();
|
|
535
|
-
const errorMessages = Object.values(errors);
|
|
536
|
-
};
|
|
537
|
-
|
|
538
537
|
const showToast = (severity: "success" | "error", summary: string, detail: string) => {
|
|
539
538
|
toast.current?.show({
|
|
540
539
|
severity,
|
|
@@ -759,9 +758,6 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
759
758
|
const solidView = solidFormViewMetaData.data.solidView;
|
|
760
759
|
const solidFieldsMetadata = solidFormViewMetaData.data.solidFieldsMetadata;
|
|
761
760
|
|
|
762
|
-
const createHeaderTitle = `Create ${solidView.model.displayName}`;
|
|
763
|
-
const editHeaderTitle = `Edit ${solidView.model.displayName}`;
|
|
764
|
-
|
|
765
761
|
const validationSchema = {};
|
|
766
762
|
const initialValues = {};
|
|
767
763
|
|
|
@@ -1029,72 +1025,6 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
1029
1025
|
const onDeleteClose = () => {
|
|
1030
1026
|
setDeleteDialogVisible(false);
|
|
1031
1027
|
}
|
|
1032
|
-
|
|
1033
|
-
const formActionDropdown = () => {
|
|
1034
|
-
return (
|
|
1035
|
-
<div>
|
|
1036
|
-
<Button
|
|
1037
|
-
outlined
|
|
1038
|
-
severity="secondary"
|
|
1039
|
-
type="button"
|
|
1040
|
-
icon={'pi pi-cog'}
|
|
1041
|
-
size="small"
|
|
1042
|
-
className="surface-card p-0"
|
|
1043
|
-
style={{
|
|
1044
|
-
height: 33.06,
|
|
1045
|
-
width: 33.06
|
|
1046
|
-
}}
|
|
1047
|
-
onClick={(e) =>
|
|
1048
|
-
// @ts-ignore
|
|
1049
|
-
op.current.toggle(e)
|
|
1050
|
-
}
|
|
1051
|
-
/>
|
|
1052
|
-
<OverlayPanel ref={op} className="solid-custom-overlay">
|
|
1053
|
-
<div className="flex flex-column gap-1 p-1">
|
|
1054
|
-
{/* <Button
|
|
1055
|
-
text
|
|
1056
|
-
type="button"
|
|
1057
|
-
className="w-8rem text-left gap-2 text-color"
|
|
1058
|
-
label="Duplicate"
|
|
1059
|
-
size="small"
|
|
1060
|
-
iconPos="left"
|
|
1061
|
-
icon={<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
|
|
1062
|
-
<path d="M6 11.9997C5.63333 11.9997 5.31944 11.8691 5.05833 11.608C4.79722 11.3469 4.66667 11.033 4.66667 10.6663V2.66634C4.66667 2.29967 4.79722 1.98579 5.05833 1.72467C5.31944 1.46356 5.63333 1.33301 6 1.33301H12C12.3667 1.33301 12.6806 1.46356 12.9417 1.72467C13.2028 1.98579 13.3333 2.29967 13.3333 2.66634V10.6663C13.3333 11.033 13.2028 11.3469 12.9417 11.608C12.6806 11.8691 12.3667 11.9997 12 11.9997H6ZM6 10.6663H12V2.66634H6V10.6663ZM3.33333 14.6663C2.96667 14.6663 2.65278 14.5358 2.39167 14.2747C2.13056 14.0136 2 13.6997 2 13.333V3.99967H3.33333V13.333H10.6667V14.6663H3.33333Z" fill="black" fill-opacity="0.88" />
|
|
1063
|
-
</svg>}
|
|
1064
|
-
/> */}
|
|
1065
|
-
{params.embeded !== true &&
|
|
1066
|
-
params.id !== "new" &&
|
|
1067
|
-
actionsAllowed.includes(`${deletePermission(params.modelName)}`) &&
|
|
1068
|
-
!formViewLayout.attrs.readonly &&
|
|
1069
|
-
<Button
|
|
1070
|
-
text
|
|
1071
|
-
type="button"
|
|
1072
|
-
className="w-8rem text-left gap-2"
|
|
1073
|
-
label="Delete"
|
|
1074
|
-
size="small"
|
|
1075
|
-
iconPos="left"
|
|
1076
|
-
severity="danger"
|
|
1077
|
-
icon={'pi pi-trash'}
|
|
1078
|
-
onClick={() => setDeleteDialogVisible(true)}
|
|
1079
|
-
/>
|
|
1080
|
-
}
|
|
1081
|
-
<Button
|
|
1082
|
-
text
|
|
1083
|
-
type="button"
|
|
1084
|
-
className="w-8rem text-left gap-2 purple-200"
|
|
1085
|
-
label="Layout"
|
|
1086
|
-
size="small"
|
|
1087
|
-
iconPos="left"
|
|
1088
|
-
severity="contrast"
|
|
1089
|
-
icon={'pi pi-objects-column'}
|
|
1090
|
-
onClick={() => setLayoutDialogVisible(true)}
|
|
1091
|
-
/>
|
|
1092
|
-
</div>
|
|
1093
|
-
</OverlayPanel>
|
|
1094
|
-
</div>
|
|
1095
|
-
)
|
|
1096
|
-
}
|
|
1097
|
-
|
|
1098
1028
|
// TODO: This was simply to demonstrate how we can use dynamic components, we will remove this and use it in a more sensible way in the layout.
|
|
1099
1029
|
// TODO: to demonstrated this you can simply add the below to the layout of the book form view.
|
|
1100
1030
|
// TODO: "header": "BookFormViewDynamicComponent",
|
|
@@ -1109,173 +1039,20 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
1109
1039
|
<Toast ref={toast} />
|
|
1110
1040
|
<div className="solid-form-section" style={{ borderRight: params.embeded !== true ? '1px solid var(--primary-light-color' : '' }} >
|
|
1111
1041
|
<form style={{ width: '100%' }} onSubmit={formik.handleSubmit}>
|
|
1112
|
-
<
|
|
1113
|
-
{
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
<div className="gap-3 flex">
|
|
1120
|
-
{params.embeded !== true &&
|
|
1121
|
-
actionsAllowed.includes(`${createPermission(params.modelName)}`) &&
|
|
1122
|
-
!formViewLayout.attrs.readonly &&
|
|
1123
|
-
formik.dirty &&
|
|
1124
|
-
<div>
|
|
1125
|
-
<Button
|
|
1126
|
-
label="Save"
|
|
1127
|
-
size="small"
|
|
1128
|
-
onClick={() => showError()}
|
|
1129
|
-
type="submit"
|
|
1130
|
-
/>
|
|
1131
|
-
</div>
|
|
1132
|
-
}
|
|
1133
|
-
{/* {params.embeded !== true &&
|
|
1134
|
-
actionsAllowed.includes(`${createPermission(params.modelName)}`) &&
|
|
1135
|
-
!formViewLayout.attrs.readonly &&
|
|
1136
|
-
<div>
|
|
1137
|
-
<Button
|
|
1138
|
-
label="Save & Close"
|
|
1139
|
-
size="small"
|
|
1140
|
-
onClick={() => {
|
|
1141
|
-
setRedirectToList(true);
|
|
1142
|
-
showError()
|
|
1143
|
-
}}
|
|
1144
|
-
type="submit"
|
|
1145
|
-
/>
|
|
1146
|
-
</div>
|
|
1147
|
-
} */}
|
|
1148
|
-
|
|
1149
|
-
{/* Inline */}
|
|
1150
|
-
{params.embeded == true &&
|
|
1151
|
-
actionsAllowed.includes(`${createPermission(params.modelName)}`) &&
|
|
1152
|
-
!formViewLayout.attrs.readonly &&
|
|
1153
|
-
formik.dirty &&
|
|
1154
|
-
<div>
|
|
1155
|
-
<Button
|
|
1156
|
-
label="Save"
|
|
1157
|
-
size="small"
|
|
1158
|
-
onClick={() => {
|
|
1159
|
-
setRedirectToList(false);
|
|
1160
|
-
showError()
|
|
1161
|
-
}}
|
|
1162
|
-
type="submit"
|
|
1163
|
-
/>
|
|
1164
|
-
</div>
|
|
1165
|
-
}
|
|
1166
|
-
{params.embeded == true &&
|
|
1167
|
-
<Button outlined size="small" type="button" label="Close" onClick={() => params.handlePopupClose()} className='bg-primary-reverse' />
|
|
1168
|
-
|
|
1169
|
-
}
|
|
1170
|
-
{params.embeded !== true &&
|
|
1171
|
-
<SolidCancelButton />
|
|
1172
|
-
}
|
|
1173
|
-
{formActionDropdown()}
|
|
1174
|
-
</div>
|
|
1175
|
-
</>
|
|
1176
|
-
) : (
|
|
1177
|
-
<>
|
|
1178
|
-
<div className="flex align-items-center gap-3">
|
|
1179
|
-
{params.embeded !== true && <BackButton />}
|
|
1180
|
-
<div className="form-wrapper-title"> {editHeaderTitle}</div>
|
|
1181
|
-
</div>
|
|
1182
|
-
<div className="gap-3 flex">
|
|
1183
|
-
{params.embeded !== true && viewMode === "view" &&
|
|
1184
|
-
<div>
|
|
1185
|
-
<Button
|
|
1186
|
-
label="Edit"
|
|
1187
|
-
size="small"
|
|
1188
|
-
onClick={() => updateViewMode("edit")}
|
|
1189
|
-
type="button"
|
|
1190
|
-
/>
|
|
1191
|
-
</div>
|
|
1192
|
-
}
|
|
1193
|
-
|
|
1194
|
-
{params.embeded !== true &&
|
|
1195
|
-
actionsAllowed.includes(`${updatePermission(params.modelName)}`) &&
|
|
1196
|
-
!formViewLayout.attrs.readonly &&
|
|
1197
|
-
formik.dirty &&
|
|
1198
|
-
<div>
|
|
1199
|
-
<Button
|
|
1200
|
-
label="Save"
|
|
1201
|
-
size="small"
|
|
1202
|
-
onClick={() => showError()}
|
|
1203
|
-
type="submit"
|
|
1204
|
-
/>
|
|
1205
|
-
</div>
|
|
1206
|
-
}
|
|
1207
|
-
|
|
1208
|
-
{/* Inline */}
|
|
1209
|
-
{params.embeded == true &&
|
|
1210
|
-
actionsAllowed.includes(`${updatePermission(params.modelName)}`) &&
|
|
1211
|
-
!formViewLayout.attrs.readonly &&
|
|
1212
|
-
formik.dirty &&
|
|
1213
|
-
<div>
|
|
1214
|
-
<Button
|
|
1215
|
-
label="Save"
|
|
1216
|
-
size="small"
|
|
1217
|
-
onClick={() => showError()}
|
|
1218
|
-
type="submit"
|
|
1219
|
-
/>
|
|
1220
|
-
</div>
|
|
1221
|
-
}
|
|
1222
|
-
{/* {params.embeded !== true &&
|
|
1223
|
-
actionsAllowed.includes(`${updatePermission(params.modelName)}`) &&
|
|
1224
|
-
!formViewLayout.attrs.readonly &&
|
|
1225
|
-
<div>
|
|
1226
|
-
<Button
|
|
1227
|
-
label="Save & Close"
|
|
1228
|
-
size="small"
|
|
1229
|
-
onClick={() => {
|
|
1230
|
-
setRedirectToList(true);
|
|
1231
|
-
showError()
|
|
1232
|
-
}}
|
|
1233
|
-
type="submit"
|
|
1234
|
-
/>
|
|
1235
|
-
</div>
|
|
1236
|
-
} */}
|
|
1237
|
-
{params.embeded == true &&
|
|
1238
|
-
actionsAllowed.includes(`${deletePermission(params.modelName)}`) &&
|
|
1239
|
-
!formViewLayout.attrs.readonly &&
|
|
1240
|
-
<div>
|
|
1241
|
-
<Button
|
|
1242
|
-
size="small"
|
|
1243
|
-
type="button"
|
|
1244
|
-
label="Delete"
|
|
1245
|
-
severity="danger"
|
|
1246
|
-
onClick={() => setDeleteDialogVisible(true)}
|
|
1247
|
-
/>
|
|
1248
|
-
</div>
|
|
1249
|
-
}
|
|
1250
|
-
{params.embeded == true &&
|
|
1251
|
-
<Button outlined size="small" type="button" label="Close" onClick={() => params.handlePopupClose()} className='bg-primary-reverse' />
|
|
1252
|
-
|
|
1253
|
-
}
|
|
1254
|
-
{params.embeded !== true &&
|
|
1255
|
-
<SolidCancelButton />
|
|
1256
|
-
}
|
|
1257
|
-
{formActionDropdown()}
|
|
1258
|
-
</div>
|
|
1259
|
-
</>
|
|
1260
|
-
)}
|
|
1261
|
-
</div>
|
|
1262
|
-
{/* {params.embeded !== true &&
|
|
1263
|
-
<SolidBreadcrumb
|
|
1264
|
-
solidViewData={solidFormViewMetaData?.data?.solidView?.model}
|
|
1042
|
+
<SolidFormActionHeader
|
|
1043
|
+
formik={formik}
|
|
1044
|
+
params={params}
|
|
1045
|
+
actionsAllowed={actionsAllowed}
|
|
1046
|
+
formViewLayout={formViewLayout}
|
|
1047
|
+
solidView={solidView}
|
|
1048
|
+
solidFormViewMetaData={solidFormViewMetaData}
|
|
1265
1049
|
initialEntityData={initialEntityData}
|
|
1050
|
+
setDeleteDialogVisible={setDeleteDialogVisible}
|
|
1051
|
+
setLayoutDialogVisible={setLayoutDialogVisible}
|
|
1052
|
+
setRedirectToList={setRedirectToList}
|
|
1053
|
+
viewMode={viewMode}
|
|
1054
|
+
setViewMode={setViewMode}
|
|
1266
1055
|
/>
|
|
1267
|
-
} */}
|
|
1268
|
-
{params.embeded !== true &&
|
|
1269
|
-
// <div className="solid-form-stepper">
|
|
1270
|
-
<SolidFormHeader
|
|
1271
|
-
// solidFormViewMetaData={solidFormViewMetaData?.data?.solidView?.model}
|
|
1272
|
-
solidFormViewMetaData={solidFormViewMetaData}
|
|
1273
|
-
initialEntityData={initialEntityData}
|
|
1274
|
-
modelName={params.modelName}
|
|
1275
|
-
id={params.id}
|
|
1276
|
-
/>
|
|
1277
|
-
// </div>
|
|
1278
|
-
}
|
|
1279
1056
|
<div className="p-4 solid-form-content">
|
|
1280
1057
|
{DynamicHeaderComponent && <DynamicHeaderComponent />}
|
|
1281
1058
|
{renderFormDynamically(formViewMetaData)}
|
|
@@ -1304,7 +1081,7 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
1304
1081
|
size="small"
|
|
1305
1082
|
className="px-0"
|
|
1306
1083
|
style={{ width: 30 }}
|
|
1307
|
-
onClick={() => {setShowChatter(true); setRefreshChatterMessage(true);}}
|
|
1084
|
+
onClick={() => { setShowChatter(true); setRefreshChatterMessage(true); }}
|
|
1308
1085
|
/>
|
|
1309
1086
|
</div>
|
|
1310
1087
|
: <SolidChatter solidFormViewMetaData={solidFormViewMetaData} id={params.id} refreshChatterMessage={refreshChatterMessage} setRefreshChatterMessage={setRefreshChatterMessage} />
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { createPermission } from '@/helpers/permissions'
|
|
2
|
+
import { SolidCreateButton } from '../common/SolidCreateButton'
|
|
3
|
+
import Image from 'next/image'
|
|
4
|
+
|
|
5
|
+
export const SolidEmptyListViewPlaceholder = ({ createButtonUrl, actionsAllowed, params, solidListViewMetaData }: any) => {
|
|
6
|
+
const noDataText = solidListViewMetaData?.data?.solidView?.layout?.attrs?.listViewNoDataHelperText
|
|
7
|
+
?? (process.env.NEXT_PUBLIC_DEFAULT_LIST_VIEW_NODATA_HELPER_TEXT && solidListViewMetaData?.data?.solidView?.displayName
|
|
8
|
+
? `${process.env.NEXT_PUBLIC_DEFAULT_LIST_VIEW_NODATA_HELPER_TEXT} ${solidListViewMetaData.data.solidView.displayName}`
|
|
9
|
+
: null)
|
|
10
|
+
return (
|
|
11
|
+
<div className="page-parent-wrapper">
|
|
12
|
+
<div className="page-header">
|
|
13
|
+
<p className="m-0 view-title">{solidListViewMetaData?.data?.solidView?.displayName}</p>
|
|
14
|
+
</div>
|
|
15
|
+
<div className='solid-empty-listview-placeholder-container'>
|
|
16
|
+
{process.env.NEXT_PUBLIC_DEFAULT_LIST_VIEW_NODATA_IMAGE &&
|
|
17
|
+
<Image
|
|
18
|
+
alt={solidListViewMetaData?.data?.solidView?.displayName}
|
|
19
|
+
src={process.env.NEXT_PUBLIC_DEFAULT_LIST_VIEW_NODATA_IMAGE}
|
|
20
|
+
className='relative'
|
|
21
|
+
height={385}
|
|
22
|
+
width={617}
|
|
23
|
+
/>
|
|
24
|
+
}
|
|
25
|
+
<div className='text-base font-bold'>
|
|
26
|
+
No Data Available.
|
|
27
|
+
</div>
|
|
28
|
+
{noDataText &&
|
|
29
|
+
<div className='text-sm mt-1'>
|
|
30
|
+
{noDataText}
|
|
31
|
+
</div>
|
|
32
|
+
}
|
|
33
|
+
{actionsAllowed.includes(`${createPermission(params.modelName)}`) && solidListViewMetaData?.data?.solidView?.layout?.attrs?.create !== false && params.embeded !== true &&
|
|
34
|
+
<div className='mt-2'>
|
|
35
|
+
<SolidCreateButton url={createButtonUrl} title={solidListViewMetaData?.data?.solidView?.displayName} />
|
|
36
|
+
</div>
|
|
37
|
+
}
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
)
|
|
41
|
+
}
|
|
@@ -43,6 +43,8 @@ import Download from "yet-another-react-lightbox/plugins/download";
|
|
|
43
43
|
import "yet-another-react-lightbox/styles.css";
|
|
44
44
|
import "yet-another-react-lightbox/plugins/counter.css";
|
|
45
45
|
import { SolidListViewConfigure } from "./SolidListViewConfigure";
|
|
46
|
+
import { SolidListViewShimmerLoading } from "./SolidListViewShimmerLoading";
|
|
47
|
+
import { SolidEmptyListViewPlaceholder } from "./SolidEmptyListViewPlaceholder";
|
|
46
48
|
|
|
47
49
|
|
|
48
50
|
const getRandomInt = (min: number, max: number) => {
|
|
@@ -708,6 +710,23 @@ export const SolidListView = (params: SolidListViewParams) => {
|
|
|
708
710
|
setListViewRowActionPopupState(false)
|
|
709
711
|
}
|
|
710
712
|
|
|
713
|
+
if (loading || isLoading) {
|
|
714
|
+
return <SolidListViewShimmerLoading />;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
const isListViewEmptyWithoutFilters = !loading && (!filters || Object.keys(filters).length === 0) && listViewData.length === 0;
|
|
718
|
+
|
|
719
|
+
if (isListViewEmptyWithoutFilters) {
|
|
720
|
+
return (
|
|
721
|
+
<SolidEmptyListViewPlaceholder
|
|
722
|
+
createButtonUrl={createButtonUrl}
|
|
723
|
+
actionsAllowed={actionsAllowed}
|
|
724
|
+
params={params}
|
|
725
|
+
solidListViewMetaData={solidListViewMetaData}
|
|
726
|
+
/>
|
|
727
|
+
);
|
|
728
|
+
}
|
|
729
|
+
|
|
711
730
|
return (
|
|
712
731
|
<div className="page-parent-wrapper">
|
|
713
732
|
<div className="page-header">
|
|
@@ -791,8 +810,9 @@ export const SolidListView = (params: SolidListViewParams) => {
|
|
|
791
810
|
onSort={(e: DataTableStateEvent) => onSort(e)}
|
|
792
811
|
sortField={sortField}
|
|
793
812
|
sortOrder={sortOrder === 1 || sortOrder === -1 ? sortOrder : 0}
|
|
794
|
-
loading={
|
|
795
|
-
|
|
813
|
+
loading={false}
|
|
814
|
+
// loading={loading || isLoading}
|
|
815
|
+
// loadingIcon="pi pi-spinner"
|
|
796
816
|
selection={[...selectedRecords, ...selectedRecoverRecords]}
|
|
797
817
|
onSelectionChange={onSelectionChange}
|
|
798
818
|
selectionMode="checkbox"
|
|
@@ -818,7 +838,7 @@ export const SolidListView = (params: SolidListViewParams) => {
|
|
|
818
838
|
if (typeof window !== "undefined") {
|
|
819
839
|
sessionStorage.setItem("fromView", "list");
|
|
820
840
|
}
|
|
821
|
-
router.push(`${editButtonUrl}/${rowData?.id}`);
|
|
841
|
+
router.push(`${editButtonUrl}/${rowData?.id}?viewMode=view`);
|
|
822
842
|
}
|
|
823
843
|
}}
|
|
824
844
|
>
|
|
@@ -848,7 +868,7 @@ export const SolidListView = (params: SolidListViewParams) => {
|
|
|
848
868
|
if (params.embeded == true) {
|
|
849
869
|
params.handlePopUpOpen(selectedSolidViewData?.id);
|
|
850
870
|
} else {
|
|
851
|
-
router.push(`${editButtonUrl}/${selectedSolidViewData?.id}`)
|
|
871
|
+
router.push(`${editButtonUrl}/${selectedSolidViewData?.id}?viewMode=edit`)
|
|
852
872
|
}
|
|
853
873
|
}}
|
|
854
874
|
/>
|
|
@@ -100,6 +100,9 @@ export const SolidListViewColumn = ({ solidListViewMetaData, fieldMetadata, colu
|
|
|
100
100
|
if (fieldMetadata.type === 'richText') {
|
|
101
101
|
return SolidRichTextColumn({ solidListViewMetaData, fieldMetadata, column });
|
|
102
102
|
}
|
|
103
|
+
if (fieldMetadata.type === 'email') {
|
|
104
|
+
return SolidShortTextColumn({ solidListViewMetaData, fieldMetadata, column });
|
|
105
|
+
}
|
|
103
106
|
if (fieldMetadata.type === 'boolean') {
|
|
104
107
|
return SolidBooleanColumn({ solidListViewMetaData, fieldMetadata, column });
|
|
105
108
|
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Skeleton } from 'primereact/skeleton'
|
|
2
|
+
import React from 'react'
|
|
3
|
+
|
|
4
|
+
export const SolidListViewShimmerLoading = () => {
|
|
5
|
+
const rows = Array.from({ length: 14 });
|
|
6
|
+
return (
|
|
7
|
+
<div className='h-screen surface-0'>
|
|
8
|
+
<div className="page-header">
|
|
9
|
+
<div className='flex align-items-center gap-3'>
|
|
10
|
+
<Skeleton width="50px" className='border-round-lg'></Skeleton>
|
|
11
|
+
<Skeleton width="300px" className='border-round-lg'></Skeleton>
|
|
12
|
+
</div>
|
|
13
|
+
<div className='flex align-items-center gap-3'>
|
|
14
|
+
<Skeleton width="4rem" height="2rem"></Skeleton>
|
|
15
|
+
<Skeleton width="4rem" height="2rem"></Skeleton>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
<div className='solid-list-skeleton-wrapper'>
|
|
19
|
+
<table className="solid-list-skeleton-table" style={{ borderCollapse: 'collapse', width: '100%' }}>
|
|
20
|
+
<thead>
|
|
21
|
+
<tr className="solid-list-skeleton-header">
|
|
22
|
+
<th className="solid-list-skeleton-col-1">
|
|
23
|
+
<Skeleton width="16px" height='16px' className='border-round-xs' />
|
|
24
|
+
</th>
|
|
25
|
+
<th className="solid-list-skeleton-col-2">
|
|
26
|
+
<Skeleton width="70px" className='border-round-lg' />
|
|
27
|
+
</th>
|
|
28
|
+
<th className="solid-list-skeleton-col-3">
|
|
29
|
+
<Skeleton width="90px" className='border-round-lg' />
|
|
30
|
+
</th>
|
|
31
|
+
<th className="solid-list-skeleton-col-4">
|
|
32
|
+
<Skeleton width="80px" className='border-round-lg' />
|
|
33
|
+
</th>
|
|
34
|
+
<th className="solid-list-skeleton-col-5">
|
|
35
|
+
<Skeleton width="90px" className='border-round-lg' />
|
|
36
|
+
</th>
|
|
37
|
+
<th className="solid-list-skeleton-col-6">
|
|
38
|
+
<Skeleton width="100px" className='border-round-lg' />
|
|
39
|
+
</th>
|
|
40
|
+
<th className="solid-list-skeleton-col-7">
|
|
41
|
+
<Skeleton width="30px" className='border-round-lg' />
|
|
42
|
+
</th>
|
|
43
|
+
<th className="solid-list-skeleton-col-8">
|
|
44
|
+
<Skeleton width="30px" className='border-round-lg' />
|
|
45
|
+
</th>
|
|
46
|
+
</tr>
|
|
47
|
+
</thead>
|
|
48
|
+
<tbody>
|
|
49
|
+
{rows.map((_, i) => (
|
|
50
|
+
<tr className="solid-list-skeleton-row" key={i}>
|
|
51
|
+
<td><Skeleton width="16px" height='16px' className='border-round-xs'/></td>
|
|
52
|
+
<td><Skeleton width="50%" /></td>
|
|
53
|
+
<td><Skeleton width="50%" /></td>
|
|
54
|
+
<td><Skeleton width="50%" /></td>
|
|
55
|
+
<td><Skeleton width="50%" /></td>
|
|
56
|
+
<td><Skeleton width="50%" /></td>
|
|
57
|
+
<td><Skeleton shape="circle" height='15px' width='15px' /></td>
|
|
58
|
+
<td><Skeleton width="5px" height='20px' /></td>
|
|
59
|
+
</tr>
|
|
60
|
+
))}
|
|
61
|
+
</tbody>
|
|
62
|
+
</table>
|
|
63
|
+
<div className='solid-list-skeleton-footer flex align-items-center justify-content-between'>
|
|
64
|
+
<div className='flex align-items-center gap-3'>
|
|
65
|
+
<Skeleton width="5rem" height="1rem"></Skeleton>
|
|
66
|
+
<Skeleton width="30px" height='15px' className='border-round-sm'></Skeleton>
|
|
67
|
+
</div>
|
|
68
|
+
<div className='flex align-items-center gap-3'>
|
|
69
|
+
<Skeleton width="70px"></Skeleton>
|
|
70
|
+
<Skeleton width="10px" height='15px' className='border-round-sm'></Skeleton>
|
|
71
|
+
<Skeleton width="15px" height='15px' className='border-round-sm'></Skeleton>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
)
|
|
77
|
+
}
|
|
@@ -188,7 +188,7 @@ const AppSidebar = () => {
|
|
|
188
188
|
<div className={`sidebar-right ${visibleNavbar ? "open" : ""}`}>
|
|
189
189
|
|
|
190
190
|
<div className="flex relative justify-content-between align-items-center py-4 px-3">
|
|
191
|
-
<div className="text-base font-semibold">{currentMainMenu && currentMainMenu}</div>
|
|
191
|
+
<div className="text-base sidebar-title font-semibold">{currentMainMenu && currentMainMenu}</div>
|
|
192
192
|
{/* <button
|
|
193
193
|
className="sidebar-toggle-button"
|
|
194
194
|
onClick={handleToggle}
|
|
@@ -213,7 +213,7 @@ const AppSidebar = () => {
|
|
|
213
213
|
/>
|
|
214
214
|
</div>
|
|
215
215
|
</div> */}
|
|
216
|
-
<div className="px-3">
|
|
216
|
+
<div className="px-3 solid-sidebar-menuitems-wrapper">
|
|
217
217
|
<NavbarTwoMenu menuItems={currentMenu}></NavbarTwoMenu>
|
|
218
218
|
</div>
|
|
219
219
|
</div>
|
|
@@ -3112,7 +3112,84 @@ flex-shrink: 0; */
|
|
|
3112
3112
|
}
|
|
3113
3113
|
|
|
3114
3114
|
.solid-global-search-element input {
|
|
3115
|
-
|
|
3116
3115
|
min-width: 300px;
|
|
3116
|
+
}
|
|
3117
|
+
|
|
3118
|
+
.solid-empty-listview-placeholder-container {
|
|
3119
|
+
border-top: 1px solid var(--primary-light-color) !important;
|
|
3120
|
+
height: calc(100vh - 54px);
|
|
3121
|
+
background-color: var(--solid-list-view-placeholder);
|
|
3122
|
+
display: flex;
|
|
3123
|
+
flex-direction: column;
|
|
3124
|
+
align-items: center;
|
|
3125
|
+
justify-content: center;
|
|
3126
|
+
gap: 12px;
|
|
3127
|
+
}
|
|
3128
|
+
|
|
3129
|
+
.solid-list-skeleton-wrapper {
|
|
3130
|
+
height: calc(100vh - 60px);
|
|
3131
|
+
display: flex;
|
|
3132
|
+
flex-direction: column;
|
|
3133
|
+
justify-content: space-between;
|
|
3134
|
+
}
|
|
3135
|
+
|
|
3136
|
+
.solid-list-skeleton-col-1 {
|
|
3137
|
+
width: 50px;
|
|
3138
|
+
}
|
|
3139
|
+
|
|
3140
|
+
.solid-list-skeleton-col-2 {
|
|
3141
|
+
width: 120px;
|
|
3142
|
+
}
|
|
3143
|
+
|
|
3144
|
+
.solid-list-skeleton-col-8 {
|
|
3145
|
+
width: 50px;
|
|
3146
|
+
}
|
|
3147
|
+
|
|
3148
|
+
.solid-list-skeleton-col-3,
|
|
3149
|
+
.solid-list-skeleton-col-4,
|
|
3150
|
+
.solid-list-skeleton-col-5,
|
|
3151
|
+
.solid-list-skeleton-col-6 {
|
|
3152
|
+
width: auto;
|
|
3153
|
+
}
|
|
3154
|
+
|
|
3155
|
+
.solid-list-skeleton-header th {
|
|
3156
|
+
border-top: 1px solid #CED0D6;
|
|
3157
|
+
border-bottom: 1px solid #CED0D6;
|
|
3158
|
+
text-align: left;
|
|
3159
|
+
padding: 8px 15px;
|
|
3160
|
+
height: 45px;
|
|
3161
|
+
position: relative;
|
|
3162
|
+
}
|
|
3163
|
+
|
|
3164
|
+
.solid-list-skeleton-header th::after {
|
|
3165
|
+
content: '';
|
|
3166
|
+
position: absolute;
|
|
3167
|
+
right: 0;
|
|
3168
|
+
top: 50%;
|
|
3169
|
+
transform: translateY(-50%);
|
|
3170
|
+
height: 60%;
|
|
3171
|
+
width: 0.0625rem;
|
|
3172
|
+
background-color: #D8E2EA
|
|
3173
|
+
}
|
|
3174
|
+
|
|
3175
|
+
.solid-list-skeleton-row td {
|
|
3176
|
+
border-bottom: 1px solid rgba(216, 226, 234, 0.40);
|
|
3177
|
+
padding: 8px 15px;
|
|
3178
|
+
height: 45px;
|
|
3179
|
+
vertical-align: middle;
|
|
3180
|
+
}
|
|
3117
3181
|
|
|
3182
|
+
.solid-list-skeleton-row td .p-skeleton {
|
|
3183
|
+
height: 1rem;
|
|
3184
|
+
/* Set skeleton height to 0.75rem */
|
|
3185
|
+
}
|
|
3186
|
+
|
|
3187
|
+
.solid-list-skeleton-footer {
|
|
3188
|
+
border-top: 1px solid rgba(216, 226, 234, 0.40);
|
|
3189
|
+
padding: 20px;
|
|
3190
|
+
}
|
|
3191
|
+
|
|
3192
|
+
.solid-sidebar-menuitems-wrapper {
|
|
3193
|
+
height: calc(100vh - 64px);
|
|
3194
|
+
overflow-y: auto;
|
|
3118
3195
|
}
|