@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.
Files changed (58) hide show
  1. package/dist/components/common/SolidBreadcrumb.d.ts.map +1 -1
  2. package/dist/components/common/SolidBreadcrumb.js +5 -3
  3. package/dist/components/common/SolidBreadcrumb.js.map +1 -1
  4. package/dist/components/common/SolidBreadcrumb.tsx +5 -3
  5. package/dist/components/core/common/SolidCreateButton.d.ts +1 -1
  6. package/dist/components/core/common/SolidCreateButton.d.ts.map +1 -1
  7. package/dist/components/core/common/SolidCreateButton.js +3 -4
  8. package/dist/components/core/common/SolidCreateButton.js.map +1 -1
  9. package/dist/components/core/common/SolidCreateButton.tsx +3 -6
  10. package/dist/components/core/form/SolidFormActionHeader.d.ts +2 -0
  11. package/dist/components/core/form/SolidFormActionHeader.d.ts.map +1 -0
  12. package/dist/components/core/form/SolidFormActionHeader.js +66 -0
  13. package/dist/components/core/form/SolidFormActionHeader.js.map +1 -0
  14. package/dist/components/core/form/SolidFormActionHeader.tsx +216 -0
  15. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  16. package/dist/components/core/form/SolidFormView.js +13 -76
  17. package/dist/components/core/form/SolidFormView.js.map +1 -1
  18. package/dist/components/core/form/SolidFormView.tsx +26 -249
  19. package/dist/components/core/list/SolidEmptyListViewPlaceholder.d.ts +2 -0
  20. package/dist/components/core/list/SolidEmptyListViewPlaceholder.d.ts.map +1 -0
  21. package/dist/components/core/list/SolidEmptyListViewPlaceholder.js +16 -0
  22. package/dist/components/core/list/SolidEmptyListViewPlaceholder.js.map +1 -0
  23. package/dist/components/core/list/SolidEmptyListViewPlaceholder.tsx +41 -0
  24. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  25. package/dist/components/core/list/SolidListView.js +15 -3
  26. package/dist/components/core/list/SolidListView.js.map +1 -1
  27. package/dist/components/core/list/SolidListView.tsx +24 -4
  28. package/dist/components/core/list/SolidListViewColumn.d.ts.map +1 -1
  29. package/dist/components/core/list/SolidListViewColumn.js +3 -0
  30. package/dist/components/core/list/SolidListViewColumn.js.map +1 -1
  31. package/dist/components/core/list/SolidListViewColumn.tsx +3 -0
  32. package/dist/components/core/list/SolidListViewShimmerLoading.d.ts +2 -0
  33. package/dist/components/core/list/SolidListViewShimmerLoading.d.ts.map +1 -0
  34. package/dist/components/core/list/SolidListViewShimmerLoading.js +7 -0
  35. package/dist/components/core/list/SolidListViewShimmerLoading.js.map +1 -0
  36. package/dist/components/core/list/SolidListViewShimmerLoading.tsx +77 -0
  37. package/dist/components/core/list/widgets/SolidShortTextAvatarWidget.d.ts.map +1 -1
  38. package/dist/components/core/list/widgets/SolidShortTextAvatarWidget.js +0 -1
  39. package/dist/components/core/list/widgets/SolidShortTextAvatarWidget.js.map +1 -1
  40. package/dist/components/core/list/widgets/SolidShortTextAvatarWidget.tsx +0 -1
  41. package/dist/components/layout/AppSidebar.js +1 -1
  42. package/dist/components/layout/AppSidebar.js.map +1 -1
  43. package/dist/components/layout/AppSidebar.tsx +2 -2
  44. package/dist/resources/globals.css +78 -1
  45. package/dist/resources/solid-primereact.css +1 -1
  46. package/package.json +1 -1
  47. package/src/components/common/SolidBreadcrumb.tsx +5 -3
  48. package/src/components/core/common/SolidCreateButton.tsx +3 -6
  49. package/src/components/core/form/SolidFormActionHeader.tsx +216 -0
  50. package/src/components/core/form/SolidFormView.tsx +26 -249
  51. package/src/components/core/list/SolidEmptyListViewPlaceholder.tsx +41 -0
  52. package/src/components/core/list/SolidListView.tsx +24 -4
  53. package/src/components/core/list/SolidListViewColumn.tsx +3 -0
  54. package/src/components/core/list/SolidListViewShimmerLoading.tsx +77 -0
  55. package/src/components/core/list/widgets/SolidShortTextAvatarWidget.tsx +0 -1
  56. package/src/components/layout/AppSidebar.tsx +2 -2
  57. package/src/resources/globals.css +78 -1
  58. 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
- if (viewModeFromURL === "edit" || viewModeFromURL === "view") {
376
- setViewMode(viewModeFromURL);
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("edit");
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
- }, [viewModeFromURL]);
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
- <div className="solid-form-header">
1113
- {params.id === "new" ? (
1114
- <>
1115
- <div className="flex align-items-center gap-3">
1116
- {params.embeded !== true && <BackButton />}
1117
- <div className="form-wrapper-title"> {createHeaderTitle}</div>
1118
- </div>
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={loading || isLoading}
795
- loadingIcon="pi pi-spinner"
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
+ }
@@ -46,7 +46,6 @@ export const SolidShortTextAvatarWidget = ({ rowData, solidListViewMetaData, fie
46
46
  justifyContent: 'center',
47
47
  fontWeight: 600,
48
48
  fontSize: 12,
49
- boxShadow: '0 0 0 2px rgba(0,0,0,0.1)',
50
49
  }}
51
50
  >
52
51
  {initials}
@@ -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
  }
@@ -1312,7 +1312,7 @@
1312
1312
  }
1313
1313
 
1314
1314
  .p-datatable .p-paginator-bottom {
1315
- border-width: 1px 0 1px 0;
1315
+ border-width: 1px 0 0 0;
1316
1316
  border-radius: 0;
1317
1317
  }
1318
1318