@solidxai/core-ui 0.1.2 → 0.1.4-beta.0
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/SolidInitialLoginOtp.d.ts.map +1 -1
- package/dist/components/auth/SolidInitialLoginOtp.js +0 -5
- package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
- package/dist/components/auth/SolidInitialLoginOtp.tsx +0 -5
- package/dist/components/auth/SolidLogin.d.ts.map +1 -1
- package/dist/components/auth/SolidLogin.js +7 -5
- package/dist/components/auth/SolidLogin.js.map +1 -1
- package/dist/components/auth/SolidLogin.tsx +10 -8
- package/dist/components/common/GeneralSettings.d.ts.map +1 -1
- package/dist/components/common/GeneralSettings.js +48 -47
- package/dist/components/common/GeneralSettings.js.map +1 -1
- package/dist/components/common/GeneralSettings.tsx +41 -10
- package/dist/components/core/common/FilterComponent.js.map +1 -1
- package/dist/components/core/common/FilterComponent.tsx +1 -1
- package/dist/components/core/common/GroupingComponent.d.ts +54 -0
- package/dist/components/core/common/GroupingComponent.d.ts.map +1 -0
- package/dist/components/core/common/GroupingComponent.js +196 -0
- package/dist/components/core/common/GroupingComponent.js.map +1 -0
- package/dist/components/core/common/GroupingComponent.tsx +452 -0
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts +18 -1
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.js +197 -74
- package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.tsx +276 -40
- package/dist/components/core/common/SolidImageViewer.d.ts +10 -0
- package/dist/components/core/common/SolidImageViewer.d.ts.map +1 -0
- package/dist/components/core/common/SolidImageViewer.js +59 -0
- package/dist/components/core/common/SolidImageViewer.js.map +1 -0
- package/dist/components/core/common/SolidImageViewer.tsx +84 -0
- package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.d.ts +19 -0
- package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.js +90 -0
- package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.js.map +1 -0
- package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.tsx +59 -0
- package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.d.ts.map +1 -1
- package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js +7 -3
- package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js.map +1 -1
- package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx +45 -40
- package/dist/components/core/filter/SolidOneToManyFilterElement.d.ts +2 -0
- package/dist/components/core/filter/SolidOneToManyFilterElement.d.ts.map +1 -0
- package/dist/components/core/filter/SolidOneToManyFilterElement.js +86 -0
- package/dist/components/core/filter/SolidOneToManyFilterElement.js.map +1 -0
- package/dist/components/core/filter/SolidOneToManyFilterElement.tsx +62 -0
- package/dist/components/core/filter/SolidVarInputsFilterElement.d.ts +1 -0
- package/dist/components/core/filter/SolidVarInputsFilterElement.d.ts.map +1 -1
- package/dist/components/core/filter/SolidVarInputsFilterElement.js +4 -1
- package/dist/components/core/filter/SolidVarInputsFilterElement.js.map +1 -1
- package/dist/components/core/filter/SolidVarInputsFilterElement.tsx +10 -0
- package/dist/components/core/filter/fields/SolidRelationField.d.ts.map +1 -1
- package/dist/components/core/filter/fields/SolidRelationField.js +4 -2
- package/dist/components/core/filter/fields/SolidRelationField.js.map +1 -1
- package/dist/components/core/filter/fields/SolidRelationField.tsx +4 -2
- package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.d.ts +4 -0
- package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.d.ts.map +1 -0
- package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.js +25 -0
- package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.js.map +1 -0
- package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.tsx +60 -0
- package/dist/components/core/form/SolidFormFooter.js +4 -4
- package/dist/components/core/form/SolidFormFooter.js.map +1 -1
- package/dist/components/core/form/SolidFormFooter.tsx +4 -4
- package/dist/components/core/form/fields/SolidBooleanField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidBooleanField.js +11 -8
- package/dist/components/core/form/fields/SolidBooleanField.js.map +1 -1
- package/dist/components/core/form/fields/SolidBooleanField.tsx +20 -8
- package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +26 -21
- package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +27 -17
- package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.d.ts +1 -0
- package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.d.ts.map +1 -1
- package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.js +51 -0
- package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.js.map +1 -1
- package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.ts +51 -0
- package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.d.ts.map +1 -1
- package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.js +80 -79
- package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.js.map +1 -1
- package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.tsx +92 -85
- package/dist/components/core/kanban/SolidKanbanView.js +5 -5
- package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.tsx +5 -5
- package/dist/components/core/list/SolidListView.d.ts +12 -7
- package/dist/components/core/list/SolidListView.d.ts.map +1 -1
- package/dist/components/core/list/SolidListView.js +143 -153
- package/dist/components/core/list/SolidListView.js.map +1 -1
- package/dist/components/core/list/SolidListView.tsx +89 -94
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +16 -17
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +46 -44
- package/dist/components/core/list/columns/SolidMediaSingleColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js +6 -4
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +7 -5
- package/dist/components/core/list/listViewRegistry.js.map +1 -1
- package/dist/components/core/list/listViewRegistry.ts +1 -2
- package/dist/components/core/tree/SolidTreeView.d.ts +38 -0
- package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -0
- package/dist/components/core/tree/SolidTreeView.js +1170 -0
- package/dist/components/core/tree/SolidTreeView.js.map +1 -0
- package/dist/components/core/tree/SolidTreeView.tsx +1603 -0
- package/dist/components/core/tree/treeViewRegistry.d.ts +7 -0
- package/dist/components/core/tree/treeViewRegistry.d.ts.map +1 -0
- package/dist/components/core/tree/treeViewRegistry.js +17 -0
- package/dist/components/core/tree/treeViewRegistry.js.map +1 -0
- package/dist/components/core/tree/treeViewRegistry.ts +23 -0
- package/dist/components/core/users/CreateUser.d.ts.map +1 -1
- package/dist/components/core/users/CreateUser.js +19 -6
- package/dist/components/core/users/CreateUser.js.map +1 -1
- package/dist/components/core/users/CreateUser.tsx +39 -0
- package/dist/helpers/fetchS3Url.d.ts +19 -0
- package/dist/helpers/fetchS3Url.d.ts.map +1 -0
- package/dist/helpers/fetchS3Url.js +60 -0
- package/dist/helpers/fetchS3Url.js.map +1 -0
- package/dist/helpers/fetchS3Url.ts +33 -0
- package/dist/helpers/helpers.d.ts +2 -0
- package/dist/helpers/helpers.d.ts.map +1 -1
- package/dist/helpers/helpers.js +3 -1
- package/dist/helpers/helpers.js.map +1 -1
- package/dist/helpers/helpers.ts +4 -1
- package/dist/helpers/registry.d.ts.map +1 -1
- package/dist/helpers/registry.js +2 -0
- package/dist/helpers/registry.js.map +1 -1
- package/dist/helpers/registry.ts +3 -1
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/index.ts +14 -2
- package/dist/resources/globals.css +18 -4
- package/dist/routes/pages/admin/core/ListPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/ListPage.js +8 -3
- package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
- package/dist/routes/pages/admin/core/ListPage.tsx +11 -3
- package/dist/routes/pages/admin/core/TreePage.d.ts +2 -0
- package/dist/routes/pages/admin/core/TreePage.d.ts.map +1 -0
- package/dist/routes/pages/admin/core/TreePage.js +37 -0
- package/dist/routes/pages/admin/core/TreePage.js.map +1 -0
- package/dist/routes/pages/admin/core/TreePage.tsx +30 -0
- package/dist/routes/solidRoutes.d.ts.map +1 -1
- package/dist/routes/solidRoutes.js +2 -0
- package/dist/routes/solidRoutes.js.map +1 -1
- package/dist/routes/solidRoutes.tsx +3 -1
- package/dist/routes/types.d.ts +1 -1
- package/dist/routes/types.d.ts.map +1 -1
- package/dist/routes/types.js.map +1 -1
- package/dist/routes/types.ts +1 -0
- package/dist/types/index.d.ts +8 -2
- package/dist/types/solid-core.d.ts +40 -0
- package/package.json +1 -1
|
@@ -66,7 +66,7 @@ const getRandomInt = (min: number, max: number) => {
|
|
|
66
66
|
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
67
67
|
};
|
|
68
68
|
|
|
69
|
-
export const
|
|
69
|
+
export const getFilterObjectFromLocalStorage = () => {
|
|
70
70
|
const currentPageUrl = window.location.pathname; // Get the current page URL
|
|
71
71
|
const encodedQueryString = localStorage.getItem(currentPageUrl); // Retrieve the encoded query string from local storage
|
|
72
72
|
|
|
@@ -85,7 +85,7 @@ export const queryStringToQueryObject = () => {
|
|
|
85
85
|
};
|
|
86
86
|
|
|
87
87
|
|
|
88
|
-
export const
|
|
88
|
+
export const getFilterObjectFromLocalStorageByUrl = (url) => {
|
|
89
89
|
const currentPageUrl = url; // Get the current page URL
|
|
90
90
|
const encodedQueryString = localStorage.getItem(currentPageUrl); // Retrieve the encoded query string from local storage
|
|
91
91
|
|
|
@@ -103,7 +103,7 @@ export const queryStringToQueryObjectByUrl = (url) => {
|
|
|
103
103
|
}
|
|
104
104
|
};
|
|
105
105
|
|
|
106
|
-
export const
|
|
106
|
+
export const setFilterObjectToLocalStorage = (queryObject: string) => {
|
|
107
107
|
if (queryObject) {
|
|
108
108
|
const stringifiedObject = JSON.stringify(queryObject);
|
|
109
109
|
// const stringifiedObject = qs.stringify(queryObject, { encodeValuesOnly: true, arrayFormat: "brackets" });
|
|
@@ -116,7 +116,7 @@ export const queryObjectToQueryString = (queryObject: string) => {
|
|
|
116
116
|
};
|
|
117
117
|
|
|
118
118
|
|
|
119
|
-
export const
|
|
119
|
+
export const setFilterObjectToLocalStorageByUrl = (url, queryObject: string) => {
|
|
120
120
|
if (queryObject) {
|
|
121
121
|
const stringifiedObject = JSON.stringify(queryObject);
|
|
122
122
|
// const stringifiedObject = qs.stringify(queryObject, { encodeValuesOnly: true, arrayFormat: "brackets" });
|
|
@@ -175,7 +175,7 @@ export type SolidListViewHandle = {
|
|
|
175
175
|
* Updates sorting state and resets page offset to the first page.
|
|
176
176
|
* Use this for programmatic sort controls to match DataTable behavior.
|
|
177
177
|
*/
|
|
178
|
-
setSort: (
|
|
178
|
+
setSort: (nextMultiSortMeta: { field: string; order: 1 | -1 }[]) => void;
|
|
179
179
|
/**
|
|
180
180
|
* Toggles inclusion of archived/soft-deleted records.
|
|
181
181
|
* Use this to switch between active-only and inclusive list views.
|
|
@@ -188,8 +188,7 @@ export type SolidListViewHandle = {
|
|
|
188
188
|
getState: () => {
|
|
189
189
|
first: number;
|
|
190
190
|
rows: number;
|
|
191
|
-
|
|
192
|
-
sortOrder: 1 | -1 | 0;
|
|
191
|
+
multiSortMeta: { field: string; order: 1 | -1 }[];
|
|
193
192
|
showArchived: boolean;
|
|
194
193
|
filters: any;
|
|
195
194
|
filterPredicates: any;
|
|
@@ -217,8 +216,7 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
217
216
|
const [totalRecords, setTotalRecords] = useState(0);
|
|
218
217
|
const [first, setFirst] = useState(0);
|
|
219
218
|
const [rows, setRows] = useState(solidListViewLayout?.attrs?.defaultPageSize ? solidListViewLayout?.attrs?.defaultPageSize : 10);
|
|
220
|
-
const [
|
|
221
|
-
const [sortOrder, setSortOrder] = useState(-1);
|
|
219
|
+
const [multiSortMeta, setMultiSortMeta] = useState<{ field: string; order: 1 | -1 }[]>([{ field: "id", order: -1 }]);
|
|
222
220
|
const [toPopulate, setToPopulate] = useState<string[]>([]);
|
|
223
221
|
const [toPopulateMedia, setToPopulateMedia] = useState<string[]>([]);
|
|
224
222
|
|
|
@@ -488,9 +486,8 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
488
486
|
const populate = toPopulate;
|
|
489
487
|
const populateMedia = toPopulateMedia;
|
|
490
488
|
const rows = currentLayout?.attrs?.defaultPageSize ?? 25;
|
|
491
|
-
const
|
|
492
|
-
|
|
493
|
-
return { sortField, sortOrder, rows, populate, populateMedia };
|
|
489
|
+
const multiSortMeta = [{ field: "id", order: -1 }];
|
|
490
|
+
return { multiSortMeta, rows, populate, populateMedia };
|
|
494
491
|
};
|
|
495
492
|
|
|
496
493
|
|
|
@@ -646,7 +643,7 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
646
643
|
);
|
|
647
644
|
setQueryDataLoaded(false)
|
|
648
645
|
if (solidListViewMetaData && solidListViewLayout) {
|
|
649
|
-
const queryObject =
|
|
646
|
+
const queryObject = getFilterObjectFromLocalStorage();
|
|
650
647
|
|
|
651
648
|
if (queryObject) {
|
|
652
649
|
const queryData = {
|
|
@@ -654,57 +651,37 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
654
651
|
limit: queryObject.limit || 25,
|
|
655
652
|
populate: queryObject.populate,
|
|
656
653
|
populateMedia: queryObject.populateMedia,
|
|
657
|
-
sort: queryObject.sort
|
|
658
|
-
? queryObject.sort?.map((sortItem: string) => {
|
|
659
|
-
const [field, order] = sortItem.split(":");
|
|
660
|
-
return { field, order };
|
|
661
|
-
})
|
|
662
|
-
: [`id:desc`],
|
|
654
|
+
sort: queryObject.sort,
|
|
663
655
|
filters: queryObject.filters,
|
|
664
656
|
};
|
|
665
|
-
|
|
666
|
-
// $and: [],
|
|
667
|
-
// };
|
|
668
|
-
|
|
669
|
-
// if (queryObject.custom_filter_predicate) {
|
|
670
|
-
// filters.$and.push(queryObject.custom_filter_predicate);
|
|
671
|
-
// }
|
|
672
|
-
// if (queryObject.search_predicate) {
|
|
673
|
-
// filters.$and.push(queryObject.search_predicate);
|
|
674
|
-
// }
|
|
675
|
-
// if (queryObject.saved_filter_predicate) {
|
|
676
|
-
// filters.$and.push(queryObject.saved_filter_predicate);
|
|
677
|
-
// }
|
|
678
|
-
// if (queryObject.predefined_search_predicate) {
|
|
679
|
-
// filters.$and.push(queryObject.predefined_search_predicate);
|
|
680
|
-
// }
|
|
681
|
-
|
|
682
|
-
// if (queryObject.s_filter) {
|
|
683
|
-
// filters.$and.push(queryObject.s_filter);
|
|
684
|
-
// }
|
|
685
|
-
// if (queryObject.c_filter) {
|
|
686
|
-
// filters.$and.push(queryObject.c_filter);
|
|
687
|
-
// }
|
|
657
|
+
|
|
688
658
|
setRows(Number(queryData.limit));
|
|
689
659
|
setFirst(Number(queryData?.offset));
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
660
|
+
const parsedMultiSortMeta: { field: string; order: 1 | -1 }[] =
|
|
661
|
+
Array.isArray(queryData.sort) && queryData.sort.length > 0
|
|
662
|
+
? queryData.sort.map((sortItem: string) => {
|
|
663
|
+
const [field, order] = sortItem.split(":");
|
|
664
|
+
return { field, order: order === "asc" ? 1 : -1 } as { field: string; order: 1 | -1 };
|
|
665
|
+
})
|
|
666
|
+
: [{ field: "id", order: -1 }];
|
|
667
|
+
|
|
668
|
+
setMultiSortMeta(parsedMultiSortMeta);
|
|
669
|
+
const { multiSortMeta, rows, populate, populateMedia } = initialFilterMethod();
|
|
694
670
|
setToPopulate(populate);
|
|
695
671
|
setToPopulateMedia(populateMedia);
|
|
696
672
|
|
|
697
673
|
} else {
|
|
698
|
-
const {
|
|
674
|
+
const { multiSortMeta, rows, populate, populateMedia } = initialFilterMethod();
|
|
699
675
|
setRows(rows);
|
|
700
|
-
|
|
701
|
-
setSortOrder(sortOrder);
|
|
676
|
+
setMultiSortMeta(multiSortMeta);
|
|
702
677
|
setToPopulate(populate);
|
|
703
678
|
setToPopulateMedia(populateMedia);
|
|
704
679
|
setFirst(0);
|
|
705
680
|
}
|
|
681
|
+
//below line was added to handle state stale issue when we converted boilerplate to vite
|
|
682
|
+
//since now we dont need it becuase our component is remounted on every router change
|
|
706
683
|
setFilters(params.customFilter || { $and: [] })
|
|
707
|
-
setFilterPredicates(null);
|
|
684
|
+
//setFilterPredicates(null);
|
|
708
685
|
setSelectedRecords([]);
|
|
709
686
|
setSelectedRecoverRecords([]);
|
|
710
687
|
setQueryDataLoaded(true);
|
|
@@ -775,6 +752,13 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
775
752
|
// Create a ref that always has the latest filters
|
|
776
753
|
const latestFiltersRef = useRef(filters);
|
|
777
754
|
const latestFilterPredicatesRef = useRef(filterPredicates);
|
|
755
|
+
// 1. Add the ref (near the other latestXxxRef declarations)
|
|
756
|
+
const latestMultiSortMetaRef = useRef(multiSortMeta);
|
|
757
|
+
|
|
758
|
+
// 2. Keep it in sync
|
|
759
|
+
useEffect(() => {
|
|
760
|
+
latestMultiSortMetaRef.current = multiSortMeta;
|
|
761
|
+
}, [multiSortMeta]);
|
|
778
762
|
|
|
779
763
|
// Keep refs in sync
|
|
780
764
|
useEffect(() => {
|
|
@@ -787,20 +771,20 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
787
771
|
|
|
788
772
|
|
|
789
773
|
useEffect(() => {
|
|
790
|
-
console.log(`useEffect: [first- ${first}, rows- ${rows},
|
|
774
|
+
console.log(`useEffect: [first- ${first}, rows- ${rows}, multiSortMeta- ${multiSortMeta}, showArchived- ${showArchived}, toPopulate- ${toPopulate}, toPopulateMedia- ${toPopulateMedia}, queryDataLoaded- ${queryDataLoaded}, filterPredicates- ${filterPredicates}]`);
|
|
791
775
|
if (queryDataLoaded && filters && (filterPredicates || params.embeded == true)) {
|
|
792
776
|
setQueryString();
|
|
793
777
|
}
|
|
794
778
|
}, [
|
|
795
779
|
first,
|
|
796
780
|
rows,
|
|
797
|
-
|
|
798
|
-
sortOrder,
|
|
799
|
-
filters,
|
|
781
|
+
multiSortMeta,
|
|
800
782
|
showArchived,
|
|
801
783
|
toPopulate,
|
|
802
784
|
toPopulateMedia,
|
|
803
|
-
queryDataLoaded
|
|
785
|
+
queryDataLoaded,
|
|
786
|
+
filters,
|
|
787
|
+
filterPredicates
|
|
804
788
|
]);
|
|
805
789
|
|
|
806
790
|
// Handle pagination event.
|
|
@@ -810,13 +794,27 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
810
794
|
};
|
|
811
795
|
|
|
812
796
|
// Handle sort event.
|
|
797
|
+
// const onSort = (event: DataTableStateEvent) => {
|
|
798
|
+
// const { sortField, sortOrder } = event;
|
|
799
|
+
// const validSortOrder = sortOrder === 1 || sortOrder === -1 ? sortOrder : 0;
|
|
800
|
+
// setSortField(sortField);
|
|
801
|
+
// setSortOrder(validSortOrder);
|
|
802
|
+
// setFirst(0);
|
|
803
|
+
|
|
804
|
+
// };
|
|
805
|
+
|
|
813
806
|
const onSort = (event: DataTableStateEvent) => {
|
|
814
|
-
const
|
|
815
|
-
const validSortOrder = sortOrder === 1 || sortOrder === -1 ? sortOrder : 0;
|
|
816
|
-
setSortField(sortField);
|
|
817
|
-
setSortOrder(validSortOrder);
|
|
818
|
-
setFirst(0);
|
|
807
|
+
const meta = event.multiSortMeta || [];
|
|
819
808
|
|
|
809
|
+
const validMeta = meta
|
|
810
|
+
.filter((m) => m.order === 1 || m.order === -1)
|
|
811
|
+
.map((m) => ({
|
|
812
|
+
field: m.field,
|
|
813
|
+
order: m.order as 1 | -1,
|
|
814
|
+
}));
|
|
815
|
+
|
|
816
|
+
setMultiSortMeta(validMeta);
|
|
817
|
+
setFirst(0);
|
|
820
818
|
};
|
|
821
819
|
|
|
822
820
|
// handle change in the records which are currently selected...
|
|
@@ -850,22 +848,23 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
850
848
|
|
|
851
849
|
|
|
852
850
|
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
}
|
|
864
|
-
|
|
851
|
+
// ✅ Use ref instead of stale closure value
|
|
852
|
+
const currentSortMeta = latestMultiSortMetaRef.current;
|
|
853
|
+
|
|
854
|
+
if (currentSortMeta && currentSortMeta.length > 0) {
|
|
855
|
+
queryData.sort = currentSortMeta.map(({ field, order }) => {
|
|
856
|
+
const meta = solidFieldsMetadata?.[field];
|
|
857
|
+
let resolvedField = field;
|
|
858
|
+
if (meta?.type === "relation" && meta?.relationType === "many-to-one") {
|
|
859
|
+
resolvedField = `${field}.${meta?.relationModel?.userKeyField?.name}`;
|
|
860
|
+
}
|
|
861
|
+
return `${resolvedField}:${order === 1 ? "asc" : "desc"}`;
|
|
862
|
+
});
|
|
865
863
|
} else {
|
|
866
864
|
queryData.sort = [`id:desc`];
|
|
867
865
|
}
|
|
868
866
|
|
|
867
|
+
|
|
869
868
|
if (showArchived) {
|
|
870
869
|
queryData.showSoftDeleted = "inclusive";
|
|
871
870
|
}
|
|
@@ -907,14 +906,13 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
907
906
|
const queryString = qs.stringify(queryData, { encodeValuesOnly: true });
|
|
908
907
|
|
|
909
908
|
if (latestFilterPredicatesRef.current && latestFilterPredicatesRef.current.persistFilter) {
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
queryObjectToQueryString(urlData);
|
|
909
|
+
const fileterTobeStored = structuredClone(queryData);
|
|
910
|
+
delete fileterTobeStored.filters;
|
|
911
|
+
fileterTobeStored.custom_filter_predicate = latestFilterPredicatesRef.current.custom_filter_predicate || null;
|
|
912
|
+
fileterTobeStored.search_predicate = latestFilterPredicatesRef.current.search_predicate || null;
|
|
913
|
+
fileterTobeStored.saved_filter_predicate = latestFilterPredicatesRef.current.saved_filter_predicate || null;
|
|
914
|
+
fileterTobeStored.predefined_search_predicate = latestFilterPredicatesRef.current.predefined_search_predicate || null;
|
|
915
|
+
setFilterObjectToLocalStorage(fileterTobeStored);
|
|
918
916
|
}
|
|
919
917
|
triggerGetSolidEntities(queryString);
|
|
920
918
|
};
|
|
@@ -946,7 +944,6 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
946
944
|
|
|
947
945
|
// Then update state
|
|
948
946
|
setFilters(updatedFilter);
|
|
949
|
-
setPersistFilter(persistFilter);
|
|
950
947
|
setFilterPredicates(updatedFilterPredicates);
|
|
951
948
|
// Force synchronous state updates
|
|
952
949
|
};
|
|
@@ -954,10 +951,9 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
954
951
|
// clear Filter
|
|
955
952
|
const clearFilter = () => {
|
|
956
953
|
if (solidListViewMetaData) {
|
|
957
|
-
const {
|
|
954
|
+
const { multiSortMeta, rows, populate, populateMedia } = initialFilterMethod();
|
|
958
955
|
setRows(rows);
|
|
959
|
-
|
|
960
|
-
setSortOrder(sortOrder);
|
|
956
|
+
setMultiSortMeta(multiSortMeta);
|
|
961
957
|
setToPopulate(populate);
|
|
962
958
|
setToPopulateMedia(populateMedia);
|
|
963
959
|
}
|
|
@@ -991,9 +987,8 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
991
987
|
setFirst(nextFirst);
|
|
992
988
|
setRows(nextRows);
|
|
993
989
|
},
|
|
994
|
-
setSort: (
|
|
995
|
-
|
|
996
|
-
setSortOrder(nextSortOrder);
|
|
990
|
+
setSort: (nextMultiSortMeta) => {
|
|
991
|
+
setMultiSortMeta(nextMultiSortMeta);
|
|
997
992
|
setFirst(0);
|
|
998
993
|
},
|
|
999
994
|
setShowArchived: (value) => {
|
|
@@ -1002,8 +997,7 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
1002
997
|
getState: () => ({
|
|
1003
998
|
first,
|
|
1004
999
|
rows,
|
|
1005
|
-
|
|
1006
|
-
sortOrder,
|
|
1000
|
+
multiSortMeta,
|
|
1007
1001
|
showArchived,
|
|
1008
1002
|
filters,
|
|
1009
1003
|
filterPredicates,
|
|
@@ -1014,8 +1008,7 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
1014
1008
|
}), [
|
|
1015
1009
|
first,
|
|
1016
1010
|
rows,
|
|
1017
|
-
|
|
1018
|
-
sortOrder,
|
|
1011
|
+
multiSortMeta,
|
|
1019
1012
|
showArchived,
|
|
1020
1013
|
filters,
|
|
1021
1014
|
filterPredicates,
|
|
@@ -1406,6 +1399,7 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
1406
1399
|
<div className="hidden lg:flex">
|
|
1407
1400
|
<SolidGlobalSearchElement
|
|
1408
1401
|
key={params.modelName}
|
|
1402
|
+
viewType="list"
|
|
1409
1403
|
showSaveFilterPopup={showSaveFilterPopup}
|
|
1410
1404
|
setShowSaveFilterPopup={setShowSaveFilterPopup}
|
|
1411
1405
|
ref={solidGlobalSearchElementRef}
|
|
@@ -1535,6 +1529,7 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
1535
1529
|
params.embeded === false && (
|
|
1536
1530
|
<div className="flex lg:hidden">
|
|
1537
1531
|
<SolidGlobalSearchElement
|
|
1532
|
+
viewType="list"
|
|
1538
1533
|
showSaveFilterPopup={showSaveFilterPopup}
|
|
1539
1534
|
setShowSaveFilterPopup={setShowSaveFilterPopup}
|
|
1540
1535
|
ref={solidGlobalSearchElementRef}
|
|
@@ -1610,8 +1605,7 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
1610
1605
|
first={first}
|
|
1611
1606
|
onPage={onPageChange}
|
|
1612
1607
|
onSort={(e: DataTableStateEvent) => onSort(e)}
|
|
1613
|
-
|
|
1614
|
-
sortOrder={sortOrder === 1 || sortOrder === -1 ? sortOrder : 0}
|
|
1608
|
+
multiSortMeta={multiSortMeta}
|
|
1615
1609
|
loading={false}
|
|
1616
1610
|
// loading={loading || isLoading}
|
|
1617
1611
|
// loadingIcon="pi pi-spinner"
|
|
@@ -1624,7 +1618,8 @@ export const SolidListView = forwardRef<SolidListViewHandle, SolidListViewParams
|
|
|
1624
1618
|
params.embeded === true ? undefined : onSelectionChange
|
|
1625
1619
|
}
|
|
1626
1620
|
selectionMode={params.embeded === true ? null : "checkbox"}
|
|
1627
|
-
removableSort
|
|
1621
|
+
removableSort={solidListViewLayout?.attrs?.removableSort ?? true}
|
|
1622
|
+
sortMode={solidListViewLayout?.attrs?.sortMode ?? "multiple"}
|
|
1628
1623
|
filterIcon={<FilterIcon />}
|
|
1629
1624
|
tableClassName="solid-data-table"
|
|
1630
1625
|
paginatorClassName="solid-paginator"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidMediaMultipleColumn.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/list/columns/SolidMediaMultipleColumn.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"SolidMediaMultipleColumn.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/list/columns/SolidMediaMultipleColumn.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAuG9E,QAAA,MAAM,wBAAwB,uFAAwF,yBAAyB,4CAyC9I,CAAC;AAEF,eAAe,wBAAwB,CAAC;AAGxC,eAAO,MAAM,8BAA8B,iEAAkE,8BAA8B,mDAoJ1I,CAAC"}
|
|
@@ -17,10 +17,15 @@ import { getExtensionComponent } from '../../../../helpers/registry';
|
|
|
17
17
|
import { classNames } from 'primereact/utils';
|
|
18
18
|
import { FileReaderExt } from '../../../../components/common/FileReaderExt';
|
|
19
19
|
import { Dialog } from 'primereact/dialog';
|
|
20
|
-
|
|
21
|
-
var isImageFile = function (url) { return /\.(jpg|jpeg|png|gif|bmp|webp)$/i.test(url); };
|
|
22
|
-
var isVideoFile = function (url) { return /\.(mp4|webm|ogg)$/i.test(url); };
|
|
23
|
-
var isAudioFile = function (url) { return /\.(mp3|wav|ogg)$/i.test(url); };
|
|
20
|
+
var getCleanUrl = function (url) { return url.split("?")[0]; };
|
|
21
|
+
var isImageFile = function (url) { return /\.(jpg|jpeg|png|gif|bmp|webp)$/i.test(getCleanUrl(url)); };
|
|
22
|
+
var isVideoFile = function (url) { return /\.(mp4|webm|ogg)$/i.test(getCleanUrl(url)); };
|
|
23
|
+
var isAudioFile = function (url) { return /\.(mp3|wav|ogg)$/i.test(getCleanUrl(url)); };
|
|
24
|
+
var isDocumentType = function (url) {
|
|
25
|
+
var _a;
|
|
26
|
+
var ext = (_a = getCleanUrl(url).split(".").pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
27
|
+
return ext ? downloadOnlyExt.includes(ext) : false;
|
|
28
|
+
};
|
|
24
29
|
var downloadOnlyExt = [
|
|
25
30
|
"txt", "zip", "rar",
|
|
26
31
|
"doc", "docx",
|
|
@@ -28,11 +33,6 @@ var downloadOnlyExt = [
|
|
|
28
33
|
"ppt", "pptx",
|
|
29
34
|
"pdf", "csv"
|
|
30
35
|
];
|
|
31
|
-
var isDocumentType = function (url) {
|
|
32
|
-
var _a;
|
|
33
|
-
var ext = (_a = url.split("?")[0].split(".").pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
34
|
-
return ext ? downloadOnlyExt.includes(ext) : false;
|
|
35
|
-
};
|
|
36
36
|
var downloadFile = function (url, name) {
|
|
37
37
|
if (name === void 0) { name = ""; }
|
|
38
38
|
var link = document.createElement("a");
|
|
@@ -107,11 +107,10 @@ export var DefaultMediaMultipleListWidget = function (_a) {
|
|
|
107
107
|
return size >= 1024 * 1024 ? "".concat((size / (1024 * 1024)).toFixed(1), " MB") : "".concat((size / 1024).toFixed(1), " KB");
|
|
108
108
|
};
|
|
109
109
|
var handleFileView = function (file) {
|
|
110
|
-
var _a;
|
|
111
110
|
var fileUrl = (file === null || file === void 0 ? void 0 : file.fileUrl) || "";
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if (
|
|
111
|
+
// const cleanUrl = fileUrl.split("?")[0];
|
|
112
|
+
// const ext = cleanUrl.split(".").pop()?.toLowerCase();
|
|
113
|
+
if (isDocumentType(fileUrl)) {
|
|
115
114
|
downloadFile(file === null || file === void 0 ? void 0 : file.fileUrl, "");
|
|
116
115
|
}
|
|
117
116
|
else {
|
|
@@ -122,13 +121,13 @@ export var DefaultMediaMultipleListWidget = function (_a) {
|
|
|
122
121
|
return fullrecord.length > 0 ? (_jsxs("div", { className: 'flex gap-2 align-items-end', children: [_jsx(MediaPreview, { src: (_d = fullrecord[0]) === null || _d === void 0 ? void 0 : _d.fileUrl, onClick: function (event) {
|
|
123
122
|
var _a, _b, _c;
|
|
124
123
|
event.stopPropagation();
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if (
|
|
124
|
+
// const cleanUrl = fullrecord[0]?.fileUrl.split("?")[0];
|
|
125
|
+
// const ext = cleanUrl.split(".").pop()?.toLowerCase();
|
|
126
|
+
if (isDocumentType((_a = fullrecord[0]) === null || _a === void 0 ? void 0 : _a.fileUrl) && (fullrecord === null || fullrecord === void 0 ? void 0 : fullrecord.length) > 1) {
|
|
128
127
|
setShowAllFiles(true);
|
|
129
128
|
return;
|
|
130
129
|
}
|
|
131
|
-
else if (
|
|
130
|
+
else if (isDocumentType((_b = fullrecord[0]) === null || _b === void 0 ? void 0 : _b.fileUrl)) {
|
|
132
131
|
downloadFile((_c = fullrecord[0]) === null || _c === void 0 ? void 0 : _c.fileUrl, "");
|
|
133
132
|
return;
|
|
134
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidMediaMultipleColumn.js","sourceRoot":"","sources":["../../../../../src/components/core/list/columns/SolidMediaMultipleColumn.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport React, { useState } from 'react';\nimport { Column } from \"primereact/column\";\nimport { SolidListViewColumnParams } from '../SolidListViewColumn';\nimport { Button } from 'primereact/button';\nimport { SolidMediaListFieldWidgetProps } from '../../../../types/solid-core';\nimport { getExtensionComponent } from '../../../../helpers/registry';\nimport { classNames } from 'primereact/utils';\nimport { FileReaderExt } from '../../../../components/common/FileReaderExt';\nimport { Dialog } from 'primereact/dialog';\n\n// Helpers\nconst isImageFile = (url: string) => /\\.(jpg|jpeg|png|gif|bmp|webp)$/i.test(url);\nconst isVideoFile = (url: string) => /\\.(mp4|webm|ogg)$/i.test(url);\nconst isAudioFile = (url: string) => /\\.(mp3|wav|ogg)$/i.test(url);\n\nconst downloadOnlyExt = [\n \"txt\", \"zip\", \"rar\",\n \"doc\", \"docx\",\n \"xls\", \"xlsx\",\n \"ppt\", \"pptx\",\n \"pdf\", \"csv\"\n];\n\nconst isDocumentType = (url: string) => {\n const ext = url.split(\"?\")[0].split(\".\").pop()?.toLowerCase();\n return ext ? downloadOnlyExt.includes(ext) : false;\n};\n\nconst downloadFile = (url: string, name: string = \"\") => {\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = name;\n link.target = \"_blank\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\n\n\n// Thumbnail preview component\nconst MediaPreview = ({ src, onClick }: { src: string; onClick: (event: React.MouseEvent) => void }) => {\n const [isBroken, setIsBroken] = useState(false);\n\n const handleClick = (event: React.MouseEvent) => {\n onClick(event);\n };\n\n if (!isBroken) {\n if (isImageFile(src)) {\n return (\n <img\n src={src}\n alt=\"media\"\n className=\"shadow-2 border-round\"\n width={40}\n height={40}\n style={{ objectFit: \"cover\" }}\n onError={() => setIsBroken(true)}\n onClick={handleClick}\n />\n );\n }\n\n if (isVideoFile(src)) {\n return (\n <video\n src={src}\n width={40}\n height={40}\n className=\"shadow-2 border-round\"\n style={{ objectFit: \"cover\" }}\n onError={() => setIsBroken(true)}\n onClick={handleClick}\n muted\n />\n );\n }\n\n if (isAudioFile(src)) {\n return (\n <div\n className=\"shadow-2 border-round flex align-items-center justify-content-center bg-gray-100\"\n style={{ width: 40, height: 40 }}\n onClick={handleClick}\n >\n <i className=\"pi pi-volume-up text-xl text-gray-600\"></i>\n </div>\n );\n }\n }\n\n return (\n <div\n style={{ width: 40, height: 40, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\n onClick={handleClick}\n >\n <i className={classNames(\"pi pi-file\", \"text-3xl text-gray-400\")}></i>\n </div>\n );\n};\n\n\n// Column Component\nconst SolidMediaMultipleColumn = ({ solidListViewMetaData, fieldMetadata, column, setLightboxUrls, setOpenLightbox }: SolidListViewColumnParams) => {\n const filterable = false;\n const showFilterOperator = false;\n const columnDataType = undefined;\n const header = column.attrs.label ?? fieldMetadata.displayName;\n\n return (\n <Column\n key={fieldMetadata.name}\n field={fieldMetadata.name}\n header={header}\n body={(rowData) => {\n let viewWidget = column.attrs.viewWidget;\n if (!viewWidget) {\n viewWidget = 'DefaultMediaMultipleListWidget';\n }\n let DynamicWidget = getExtensionComponent(viewWidget);\n const widgetProps: SolidMediaListFieldWidgetProps = {\n rowData,\n solidListViewMetaData,\n fieldMetadata,\n column,\n setLightboxUrls,\n setOpenLightbox\n }\n return (\n <>\n {\n DynamicWidget && <DynamicWidget {...widgetProps} />\n }\n </>\n )\n }}\n sortable={column.attrs.sortable}\n dataType={columnDataType}\n showFilterOperator={showFilterOperator}\n filterPlaceholder={`Search by ${fieldMetadata.displayName}`}\n style={{ minWidth: \"12rem\" }}\n headerClassName=\"table-header-fs\"\n />\n );\n};\n\nexport default SolidMediaMultipleColumn;\n\n// Default multiple widget\nexport const DefaultMediaMultipleListWidget = ({ rowData, fieldMetadata, setLightboxUrls, setOpenLightbox }: SolidMediaListFieldWidgetProps) => {\n const [isShowAllFiles, setShowAllFiles] = useState(false);\n\n if (!rowData?._media?.[fieldMetadata.name]) return null;\n\n const fullrecord = rowData._media[fieldMetadata.name]?.map((file: any) => ({\n name: file.originalFileName,\n type: file.mimeType,\n size: file.fileSize,\n id: file.id,\n fileUrl: file._full_url\n }));\n\n\n const formatFileSize = (size: number) =>\n size >= 1024 * 1024 ? `${(size / (1024 * 1024)).toFixed(1)} MB` : `${(size / 1024).toFixed(1)} KB`;\n\n\n const handleFileView = (file: any) => {\n const fileUrl = file?.fileUrl || \"\";\n const cleanUrl = fileUrl.split(\"?\")[0];\n const ext = cleanUrl.split(\".\").pop()?.toLowerCase();\n\n if (ext && downloadOnlyExt.includes(ext)) {\n downloadFile(file?.fileUrl, \"\")\n\n } else {\n setLightboxUrls?.([{ src: file.fileUrl, downloadUrl: file.fileUrl }]);\n setOpenLightbox?.(true);\n }\n };\n\n\n\n return fullrecord.length > 0 ? (\n <div className='flex gap-2 align-items-end'>\n\n {/* THUMBNAIL - FIXED BEHAVIOR */}\n <MediaPreview\n src={fullrecord[0]?.fileUrl}\n onClick={(event) => {\n event.stopPropagation();\n\n const cleanUrl = fullrecord[0]?.fileUrl.split(\"?\")[0];\n const ext = cleanUrl.split(\".\").pop()?.toLowerCase();\n\n if (ext && downloadOnlyExt.includes(ext) && fullrecord?.length > 1) {\n setShowAllFiles(true)\n return;\n }\n\n else if (ext && downloadOnlyExt.includes(ext)) {\n downloadFile(fullrecord[0]?.fileUrl, \"\")\n return;\n }\n\n // FIRST FILE IS MEDIA ⇒ OPEN LIGHTBOX\n const urlsWithType = fullrecord.map((file: any) => ({\n src: file.fileUrl,\n downloadUrl: file.fileUrl,\n }));\n setLightboxUrls(urlsWithType);\n setOpenLightbox(true);\n }}\n />\n\n {fullrecord?.length > 1 && <span\n style={{\n color: \"#0895CD\",\n fontWeight: \"bold\",\n cursor: \"pointer\",\n marginLeft: \"4px\"\n }}\n onClick={(event) => {\n event.stopPropagation();\n \n if (isDocumentType(fullrecord[0]?.fileUrl)) {\n setShowAllFiles(true);\n } else {\n const urlsWithType = fullrecord.map((file: any) => ({\n src: file.fileUrl,\n downloadUrl: file.fileUrl\n }));\n setLightboxUrls(urlsWithType);\n setOpenLightbox(true);\n }\n }}\n >\n +{fullrecord.length - 1}\n </span>\n }\n\n \n\n {/* VIEW ALL DIALOG */}\n <Dialog\n visible={isShowAllFiles}\n header=\"Items Uploaded\"\n modal\n onHide={() => setShowAllFiles(false)}\n // style={{ minWidth: 450 }}\n style={{ width: '32rem' }}\n onClick={(event) => event.stopPropagation()}\n breakpoints={{ '591px': '94vw'}}\n >\n {fullrecord?.map((file: any) => {\n const fileId = `${file.name}-${file.size}`;\n return (\n <div key={fileId} className=\"solid-file-upload-wrapper mb-3\">\n <div className=\"flex align-items-center gap-2\">\n\n <FileReaderExt fileDetails={file} />\n\n <div className=\"w-full flex flex-column gap-1\">\n <div className=\"flex align-items-center justify-content-between\">\n\n <p\n className=\"font-normal w-11 text-primary m-0\"\n style={{ cursor: \"pointer\" }}\n onClick={() => handleFileView(file)}\n >\n {file?.name}\n </p>\n\n <Button\n type=\"button\"\n text\n icon=\"pi pi-download\"\n size=\"small\"\n onClick={() => {\n downloadFile(file?.fileUrl, \"\")\n }}\n style={{ height: 16, width: 16 }}\n />\n </div>\n\n <div className=\"text-sm\">{formatFileSize(file.size)}</div>\n </div>\n\n </div>\n </div>\n )\n }\n )}\n </Dialog>\n </div>\n ) : (\n <div style={{ height: 40, width: 40 }} />\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"SolidMediaMultipleColumn.js","sourceRoot":"","sources":["../../../../../src/components/core/list/columns/SolidMediaMultipleColumn.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport React, { useState } from 'react';\nimport { Column } from \"primereact/column\";\nimport { SolidListViewColumnParams } from '../SolidListViewColumn';\nimport { Button } from 'primereact/button';\nimport { SolidMediaListFieldWidgetProps } from '../../../../types/solid-core';\nimport { getExtensionComponent } from '../../../../helpers/registry';\nimport { classNames } from 'primereact/utils';\nimport { FileReaderExt } from '../../../../components/common/FileReaderExt';\nimport { Dialog } from 'primereact/dialog';\n\nconst getCleanUrl = (url: string) => url.split(\"?\")[0];\n\nconst isImageFile = (url: string) => /\\.(jpg|jpeg|png|gif|bmp|webp)$/i.test(getCleanUrl(url));\n\nconst isVideoFile = (url: string) => /\\.(mp4|webm|ogg)$/i.test(getCleanUrl(url));\n\nconst isAudioFile = (url: string) => /\\.(mp3|wav|ogg)$/i.test(getCleanUrl(url));\n\nconst isDocumentType = (url: string) => {\n const ext = getCleanUrl(url).split(\".\").pop()?.toLowerCase();\n return ext ? downloadOnlyExt.includes(ext) : false;\n};\n\nconst downloadOnlyExt = [\n \"txt\", \"zip\", \"rar\",\n \"doc\", \"docx\",\n \"xls\", \"xlsx\",\n \"ppt\", \"pptx\",\n \"pdf\", \"csv\"\n];\n\nconst downloadFile = (url: string, name: string = \"\") => {\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = name;\n link.target = \"_blank\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\n\n\n// Thumbnail preview component\nconst MediaPreview = ({ src, onClick }: { src: string; onClick: (event: React.MouseEvent) => void }) => {\n const [isBroken, setIsBroken] = useState(false);\n\n const handleClick = (event: React.MouseEvent) => {\n onClick(event);\n };\n\n if (!isBroken) {\n if (isImageFile(src)) {\n return (\n <img\n src={src}\n alt=\"media\"\n className=\"shadow-2 border-round\"\n width={40}\n height={40}\n style={{ objectFit: \"cover\" }}\n onError={() => setIsBroken(true)}\n onClick={handleClick}\n />\n );\n }\n\n if (isVideoFile(src)) {\n return (\n <video\n src={src}\n width={40}\n height={40}\n className=\"shadow-2 border-round\"\n style={{ objectFit: \"cover\" }}\n onError={() => setIsBroken(true)}\n onClick={handleClick}\n muted\n />\n );\n }\n\n if (isAudioFile(src)) {\n return (\n <div\n className=\"shadow-2 border-round flex align-items-center justify-content-center bg-gray-100\"\n style={{ width: 40, height: 40 }}\n onClick={handleClick}\n >\n <i className=\"pi pi-volume-up text-xl text-gray-600\"></i>\n </div>\n );\n }\n }\n\n return (\n <div\n style={{ width: 40, height: 40, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\n onClick={handleClick}\n >\n <i className={classNames(\"pi pi-file\", \"text-3xl text-gray-400\")}></i>\n </div>\n );\n};\n\n\n// Column Component\nconst SolidMediaMultipleColumn = ({ solidListViewMetaData, fieldMetadata, column, setLightboxUrls, setOpenLightbox }: SolidListViewColumnParams) => {\n const filterable = false;\n const showFilterOperator = false;\n const columnDataType = undefined;\n const header = column.attrs.label ?? fieldMetadata.displayName;\n\n return (\n <Column\n key={fieldMetadata.name}\n field={fieldMetadata.name}\n header={header}\n body={(rowData) => {\n let viewWidget = column.attrs.viewWidget;\n if (!viewWidget) {\n viewWidget = 'DefaultMediaMultipleListWidget';\n }\n let DynamicWidget = getExtensionComponent(viewWidget);\n const widgetProps: SolidMediaListFieldWidgetProps = {\n rowData,\n solidListViewMetaData,\n fieldMetadata,\n column,\n setLightboxUrls,\n setOpenLightbox\n }\n return (\n <>\n {\n DynamicWidget && <DynamicWidget {...widgetProps} />\n }\n </>\n )\n }}\n sortable={column.attrs.sortable}\n dataType={columnDataType}\n showFilterOperator={showFilterOperator}\n filterPlaceholder={`Search by ${fieldMetadata.displayName}`}\n style={{ minWidth: \"12rem\" }}\n headerClassName=\"table-header-fs\"\n />\n );\n};\n\nexport default SolidMediaMultipleColumn;\n\n// Default multiple widget\nexport const DefaultMediaMultipleListWidget = ({ rowData, fieldMetadata, setLightboxUrls, setOpenLightbox }: SolidMediaListFieldWidgetProps) => {\n const [isShowAllFiles, setShowAllFiles] = useState(false);\n\n if (!rowData?._media?.[fieldMetadata.name]) return null;\n\n const fullrecord = rowData._media[fieldMetadata.name]?.map((file: any) => ({\n name: file.originalFileName,\n type: file.mimeType,\n size: file.fileSize,\n id: file.id,\n fileUrl: file._full_url\n }));\n\n\n const formatFileSize = (size: number) =>\n size >= 1024 * 1024 ? `${(size / (1024 * 1024)).toFixed(1)} MB` : `${(size / 1024).toFixed(1)} KB`;\n\n\n const handleFileView = (file: any) => {\n const fileUrl = file?.fileUrl || \"\";\n // const cleanUrl = fileUrl.split(\"?\")[0];\n // const ext = cleanUrl.split(\".\").pop()?.toLowerCase();\n\n if (isDocumentType(fileUrl)) {\n downloadFile(file?.fileUrl, \"\")\n\n } else {\n setLightboxUrls?.([{ src: file.fileUrl, downloadUrl: file.fileUrl }]);\n setOpenLightbox?.(true);\n }\n };\n\n\n\n return fullrecord.length > 0 ? (\n <div className='flex gap-2 align-items-end'>\n\n {/* THUMBNAIL - FIXED BEHAVIOR */}\n <MediaPreview\n src={fullrecord[0]?.fileUrl}\n onClick={(event) => {\n event.stopPropagation();\n\n // const cleanUrl = fullrecord[0]?.fileUrl.split(\"?\")[0];\n // const ext = cleanUrl.split(\".\").pop()?.toLowerCase();\n\n if (isDocumentType(fullrecord[0]?.fileUrl) && fullrecord?.length > 1) {\n setShowAllFiles(true)\n return;\n }\n\n else if (isDocumentType(fullrecord[0]?.fileUrl)) {\n downloadFile(fullrecord[0]?.fileUrl, \"\")\n return;\n }\n // FIRST FILE IS MEDIA ⇒ OPEN LIGHTBOX\n const urlsWithType = fullrecord.map((file: any) => ({\n src: file.fileUrl,\n downloadUrl: file.fileUrl,\n }));\n setLightboxUrls(urlsWithType);\n setOpenLightbox(true);\n }}\n />\n\n {fullrecord?.length > 1 && <span\n style={{\n color: \"#0895CD\",\n fontWeight: \"bold\",\n cursor: \"pointer\",\n marginLeft: \"4px\"\n }}\n onClick={(event) => {\n event.stopPropagation();\n\n if (isDocumentType(fullrecord[0]?.fileUrl)) {\n setShowAllFiles(true);\n } else {\n const urlsWithType = fullrecord.map((file: any) => ({\n src: file.fileUrl,\n downloadUrl: file.fileUrl\n }));\n setLightboxUrls(urlsWithType);\n setOpenLightbox(true);\n }\n }}\n >\n +{fullrecord.length - 1}\n </span>\n }\n\n\n\n {/* VIEW ALL DIALOG */}\n <Dialog\n visible={isShowAllFiles}\n header=\"Items Uploaded\"\n modal\n onHide={() => setShowAllFiles(false)}\n // style={{ minWidth: 450 }}\n style={{ width: '32rem' }}\n onClick={(event) => event.stopPropagation()}\n breakpoints={{ '591px': '94vw' }}\n >\n {fullrecord?.map((file: any) => {\n const fileId = `${file.name}-${file.size}`;\n return (\n <div key={fileId} className=\"solid-file-upload-wrapper mb-3\">\n <div className=\"flex align-items-center gap-2\">\n\n <FileReaderExt fileDetails={file} />\n\n <div className=\"w-full flex flex-column gap-1\">\n <div className=\"flex align-items-center justify-content-between\">\n\n <p\n className=\"font-normal w-11 text-primary m-0\"\n style={{ cursor: \"pointer\" }}\n onClick={() => handleFileView(file)}\n >\n {file?.name}\n </p>\n\n <Button\n type=\"button\"\n text\n icon=\"pi pi-download\"\n size=\"small\"\n onClick={() => {\n downloadFile(file?.fileUrl, \"\")\n }}\n style={{ height: 16, width: 16 }}\n />\n </div>\n\n <div className=\"text-sm\">{formatFileSize(file.size)}</div>\n </div>\n\n </div>\n </div>\n )\n }\n )}\n </Dialog>\n </div>\n ) : (\n <div style={{ height: 40, width: 40 }} />\n );\n};\n"]}
|