@solidstarters/solid-core-ui 1.1.50 → 1.1.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts +2 -2
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.js +50 -37
- package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
- package/dist/components/core/form/fields/SolidShortTextField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidShortTextField.js +1 -1
- package/dist/components/core/form/fields/SolidShortTextField.js.map +1 -1
- package/dist/components/core/kanban/KanbanBoard.d.ts +1 -1
- package/dist/components/core/kanban/KanbanBoard.d.ts.map +1 -1
- package/dist/components/core/kanban/KanbanBoard.js +2 -2
- package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
- package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
- package/dist/components/core/kanban/KanbanCard.js +6 -2
- package/dist/components/core/kanban/KanbanCard.js.map +1 -1
- package/dist/components/core/kanban/KanbanColumn.d.ts +1 -1
- package/dist/components/core/kanban/KanbanColumn.d.ts.map +1 -1
- package/dist/components/core/kanban/KanbanColumn.js +2 -2
- package/dist/components/core/kanban/KanbanColumn.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.js +19 -2
- package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts +2 -0
- package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts.map +1 -0
- package/dist/components/core/kanban/SolidKanbanViewConfigure.js +66 -0
- package/dist/components/core/kanban/SolidKanbanViewConfigure.js.map +1 -0
- package/dist/resources/globals.css +9 -1
- package/package.json +1 -1
- package/src/components/core/common/SolidGlobalSearchElement.tsx +102 -65
- package/src/components/core/form/fields/SolidShortTextField.tsx +0 -1
- package/src/components/core/kanban/KanbanBoard.tsx +2 -1
- package/src/components/core/kanban/KanbanCard.tsx +6 -1
- package/src/components/core/kanban/KanbanColumn.tsx +2 -2
- package/src/components/core/kanban/SolidKanbanView.tsx +46 -27
- package/src/components/core/kanban/SolidKanbanViewConfigure.tsx +145 -0
- package/src/resources/globals.css +9 -1
|
@@ -64,17 +64,17 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
|
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
67
|
+
const pushFiltersToRouter = (filterQueryString: any) => {
|
|
68
|
+
router.push(`?${filterQueryString}`, undefined, { shallow: true });
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
if (filterQueryString) {
|
|
73
|
+
pushFiltersToRouter(filterQueryString);
|
|
74
|
+
}
|
|
75
|
+
}, [filterQueryString]);
|
|
76
|
+
|
|
77
|
+
|
|
78
78
|
|
|
79
79
|
useEffect(() => {
|
|
80
80
|
const fetchPermissions = async () => {
|
|
@@ -304,10 +304,10 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
|
|
|
304
304
|
let queryString = qs.stringify(queryData, {
|
|
305
305
|
encodeValuesOnly: true
|
|
306
306
|
});
|
|
307
|
-
if(searchParams) {
|
|
307
|
+
if (searchParams) {
|
|
308
308
|
queryString = searchParams;
|
|
309
309
|
setFilterQueryString(searchParams)
|
|
310
|
-
}else{
|
|
310
|
+
} else {
|
|
311
311
|
setFilterQueryString(queryString)
|
|
312
312
|
}
|
|
313
313
|
triggerGetSolidEntities(queryString);
|
|
@@ -649,6 +649,22 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
|
|
|
649
649
|
// }
|
|
650
650
|
}
|
|
651
651
|
|
|
652
|
+
|
|
653
|
+
useEffect(() => {
|
|
654
|
+
if (solidKanbanViewMetaData) {
|
|
655
|
+
const createActionUrl = solidKanbanViewMetaData?.data?.solidView?.layout?.attrs?.createAction && solidKanbanViewMetaData?.data?.solidView?.layout?.attrs?.createAction?.type === "custom" ? solidKanbanViewMetaData?.data?.solidView?.layout?.attrs?.createAction?.customComponent : "form/new";
|
|
656
|
+
const editActionUrl = solidKanbanViewMetaData?.data?.solidView?.layout?.attrs?.editAction && solidKanbanViewMetaData?.data?.solidView?.layout?.attrs?.editAction?.type === "custom" ? solidKanbanViewMetaData?.data?.solidView?.layout?.attrs?.editAction?.customComponent : "form";
|
|
657
|
+
const viewModes = solidKanbanViewMetaData?.data?.solidView?.layout?.attrs?.allowedViews && solidKanbanViewMetaData?.data?.solidView?.layout?.attrs?.allowedViews.length > 0 && solidKanbanViewMetaData?.data?.solidView?.layout?.attrs?.allowedViews.map((view: any) => { return { label: capitalize(view), value: view } });
|
|
658
|
+
setViewModes(viewModes);
|
|
659
|
+
if (createActionUrl) {
|
|
660
|
+
setCreateButtonUrl(createActionUrl)
|
|
661
|
+
}
|
|
662
|
+
if (editActionUrl) {
|
|
663
|
+
setEditButtonUrl(editActionUrl)
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
}, [solidKanbanViewMetaData])
|
|
667
|
+
|
|
652
668
|
const kanbanViewTitle = solidKanbanViewMetaData?.data?.solidView?.displayName
|
|
653
669
|
|
|
654
670
|
return (
|
|
@@ -675,25 +691,28 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
|
|
|
675
691
|
className="small-button"
|
|
676
692
|
severity="danger"
|
|
677
693
|
/>}
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
694
|
+
<Button
|
|
695
|
+
type="button"
|
|
696
|
+
size="small"
|
|
697
|
+
icon="pi pi-refresh"
|
|
698
|
+
severity="secondary"
|
|
699
|
+
outlined
|
|
700
|
+
onClick={() => {
|
|
701
|
+
window.location.reload()
|
|
702
|
+
}}
|
|
703
|
+
/>
|
|
704
|
+
<SolidKanbanViewConfigure
|
|
705
|
+
solidKanbanViewMetaData={solidKanbanViewMetaData}
|
|
706
|
+
actionsAllowed={actionsAllowed}
|
|
707
|
+
viewModes={viewModes}
|
|
708
|
+
// setLayoutDialogVisible={setLayoutDialogVisible}
|
|
709
|
+
/>
|
|
691
710
|
{/* <SolidConfigureLayoutElement></SolidConfigureLayoutElement> */}
|
|
692
711
|
</div>
|
|
693
712
|
</div>
|
|
694
713
|
<style>{`.p-datatable .p-datatable-loading-overlay {background-color: rgba(0, 0, 0, 0.0);}`}</style>
|
|
695
714
|
{solidKanbanViewMetaData && kanbanViewData &&
|
|
696
|
-
<KanbanBoard groupedView={groupedView} kanbanViewData={kanbanViewData} solidKanbanViewMetaData={solidKanbanViewMetaData?.data} setKanbanViewData={setKanbanViewData} handleLoadMore={handleLoadMore} onDragEnd={onDragEnd} handleSwimLinPagination={handleSwimLinPagination} setLightboxUrls={setLightboxUrls} setOpenLightbox={setOpenLightbox}
|
|
715
|
+
<KanbanBoard groupedView={groupedView} kanbanViewData={kanbanViewData} solidKanbanViewMetaData={solidKanbanViewMetaData?.data} setKanbanViewData={setKanbanViewData} handleLoadMore={handleLoadMore} onDragEnd={onDragEnd} handleSwimLinPagination={handleSwimLinPagination} setLightboxUrls={setLightboxUrls} setOpenLightbox={setOpenLightbox} editButtonUrl={editButtonUrl}></KanbanBoard>
|
|
697
716
|
}
|
|
698
717
|
|
|
699
718
|
<Dialog
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
import { usePathname, useRouter } from 'next/navigation';
|
|
3
|
+
import { Accordion, AccordionTab } from 'primereact/accordion';
|
|
4
|
+
import { Button } from 'primereact/button';
|
|
5
|
+
import { Divider } from 'primereact/divider';
|
|
6
|
+
import { OverlayPanel } from 'primereact/overlaypanel';
|
|
7
|
+
import { RadioButton } from 'primereact/radiobutton';
|
|
8
|
+
import React, { useEffect, useRef, useState } from 'react'
|
|
9
|
+
|
|
10
|
+
export const SolidKanbanViewConfigure = ({ solidKanbanViewMetaData, actionsAllowed, viewModes }: any) => {
|
|
11
|
+
const op = useRef(null);
|
|
12
|
+
const customizeLayout = useRef<OverlayPanel | null>(null);
|
|
13
|
+
const pathname = usePathname();
|
|
14
|
+
const router = useRouter();
|
|
15
|
+
const [view, setView] = useState<string>("");
|
|
16
|
+
|
|
17
|
+
const handleViewChange = (newView: string) => {
|
|
18
|
+
if (view === newView) return; // Prevent unnecessary updates
|
|
19
|
+
const pathSegments = pathname.split('/').filter(Boolean);
|
|
20
|
+
pathSegments[pathSegments.length - 1] = newView; // Replace the last part with new view
|
|
21
|
+
const newPath = '/' + pathSegments.join('/');
|
|
22
|
+
router.push(newPath);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (typeof pathname === 'string') {
|
|
27
|
+
const pathSegments = pathname.split('/').filter(Boolean);
|
|
28
|
+
if (pathSegments.length > 0) {
|
|
29
|
+
setView(pathSegments[pathSegments.length - 1]);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}, [])
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
const [isOverlayOpen, setIsOverlayOpen] = useState(false);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
const handleClickOutside = (event: MouseEvent) => {
|
|
38
|
+
if (
|
|
39
|
+
customizeLayout.current &&
|
|
40
|
+
!customizeLayout.current.getElement()?.contains(event.target as Node)
|
|
41
|
+
) {
|
|
42
|
+
setIsOverlayOpen(false);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
if (isOverlayOpen) {
|
|
47
|
+
document.addEventListener("click", handleClickOutside);
|
|
48
|
+
} else {
|
|
49
|
+
document.removeEventListener("click", handleClickOutside);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return () => document.removeEventListener("click", handleClickOutside);
|
|
53
|
+
}, [isOverlayOpen])
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<div className="position-relative">
|
|
57
|
+
<Button
|
|
58
|
+
type="button"
|
|
59
|
+
size="small"
|
|
60
|
+
icon="pi pi-cog"
|
|
61
|
+
severity="secondary"
|
|
62
|
+
outlined
|
|
63
|
+
// @ts-ignore
|
|
64
|
+
onClick={(e) => op.current.toggle(e)}
|
|
65
|
+
/>
|
|
66
|
+
<OverlayPanel ref={op}>
|
|
67
|
+
<div className="p-2">
|
|
68
|
+
<div className="flex flex-column">
|
|
69
|
+
<Button text icon='pi pi-download' label="Import" size="small" severity="secondary" className="text-left gap-2 text-base" />
|
|
70
|
+
<Button text icon='pi pi-upload' label="Export" size="small" severity="secondary" className="text-left gap-2 text-base" />
|
|
71
|
+
{/* <Button
|
|
72
|
+
text
|
|
73
|
+
type="button"
|
|
74
|
+
className="w-8rem text-left gap-2 purple-200"
|
|
75
|
+
label="Layout"
|
|
76
|
+
size="small"
|
|
77
|
+
iconPos="left"
|
|
78
|
+
severity="contrast"
|
|
79
|
+
icon={'pi pi-objects-column'}
|
|
80
|
+
onClick={() => setLayoutDialogVisible(true)}
|
|
81
|
+
/> */}
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
<Divider className="m-0" />
|
|
85
|
+
<div className="p-2 relative flex flex-column gap-1">
|
|
86
|
+
<Button
|
|
87
|
+
icon='pi pi-sliders-h'
|
|
88
|
+
label="Customize Layout"
|
|
89
|
+
severity={isOverlayOpen ? undefined : "secondary"}
|
|
90
|
+
size="small"
|
|
91
|
+
text={isOverlayOpen ? false : true}
|
|
92
|
+
className="text-left gap-2 w-full text-base"
|
|
93
|
+
// @ts-ignore
|
|
94
|
+
onClick={(e) => {
|
|
95
|
+
customizeLayout.current?.toggle(e);
|
|
96
|
+
setIsOverlayOpen((prev) => !prev); // ✅ Ensure state updates when toggled
|
|
97
|
+
}}
|
|
98
|
+
>
|
|
99
|
+
<i className="pi pi-chevron-right text-sm"></i>
|
|
100
|
+
</Button>
|
|
101
|
+
<OverlayPanel ref={customizeLayout} className="customize-layout-panel" style={{ minWidth: 250 }}
|
|
102
|
+
onShow={() => setIsOverlayOpen(true)}
|
|
103
|
+
onHide={() => {
|
|
104
|
+
console.log("Overlay closed");
|
|
105
|
+
setTimeout(() => setIsOverlayOpen(false), 50); // ✅ Ensure state updates
|
|
106
|
+
}}
|
|
107
|
+
>
|
|
108
|
+
|
|
109
|
+
<div className="solid-layout-accordion">
|
|
110
|
+
<Accordion expandIcon="pi pi-chevron-down" collapseIcon="pi pi-chevron-up" activeIndex={[0]}>
|
|
111
|
+
{viewModes && viewModes.length > 0 &&
|
|
112
|
+
<AccordionTab header="Switch Type">
|
|
113
|
+
<div className="flex flex-column gap-1 p-1">
|
|
114
|
+
{viewModes.map((option: any) => (
|
|
115
|
+
<div key={option.value} className={`flex align-items-center ${option.value === view ? 'solid-active-view' : 'solid-view'}`}>
|
|
116
|
+
<RadioButton
|
|
117
|
+
inputId={option.value}
|
|
118
|
+
name="views"
|
|
119
|
+
value={option.value}
|
|
120
|
+
// onChange={(e) => router}
|
|
121
|
+
onChange={() => handleViewChange(option.value)}
|
|
122
|
+
checked={option.value === view}
|
|
123
|
+
/>
|
|
124
|
+
<label htmlFor={option.value} className="ml-2 flex align-items-center justify-content-between w-full">
|
|
125
|
+
{option.label}
|
|
126
|
+
{/* <Image
|
|
127
|
+
src={option.image}
|
|
128
|
+
alt={option.value}
|
|
129
|
+
fill
|
|
130
|
+
className='relative row-spacing-img'
|
|
131
|
+
/> */}
|
|
132
|
+
</label>
|
|
133
|
+
</div>
|
|
134
|
+
))}
|
|
135
|
+
</div>
|
|
136
|
+
</AccordionTab>
|
|
137
|
+
}
|
|
138
|
+
</Accordion>
|
|
139
|
+
</div>
|
|
140
|
+
</OverlayPanel>
|
|
141
|
+
</div>
|
|
142
|
+
</OverlayPanel>
|
|
143
|
+
</div>
|
|
144
|
+
)
|
|
145
|
+
}
|
|
@@ -2484,6 +2484,7 @@ li.header-li-px {
|
|
|
2484
2484
|
|
|
2485
2485
|
.custom-filter-chip-type {
|
|
2486
2486
|
display: flex;
|
|
2487
|
+
align-items: center;
|
|
2487
2488
|
padding: 0.25rem 0.5rem !important;
|
|
2488
2489
|
color: var(--primary-color) !important;
|
|
2489
2490
|
font-size: 0.875rem !important;
|
|
@@ -2494,11 +2495,12 @@ li.header-li-px {
|
|
|
2494
2495
|
|
|
2495
2496
|
.search-filter-chip-type {
|
|
2496
2497
|
display: flex;
|
|
2498
|
+
align-items: center;
|
|
2497
2499
|
font-size: 0.875rem !important;
|
|
2498
2500
|
background: #FBF5FF;
|
|
2499
2501
|
border-radius: 0.375rem;
|
|
2500
2502
|
padding: 0.417rem 0.5rem !important;
|
|
2501
|
-
gap:
|
|
2503
|
+
gap: 4px;
|
|
2502
2504
|
}
|
|
2503
2505
|
|
|
2504
2506
|
.solid-global-search-element li {}
|
|
@@ -2995,6 +2997,12 @@ flex-shrink: 0; */
|
|
|
2995
2997
|
width: 100%;
|
|
2996
2998
|
border-radius: 8px;
|
|
2997
2999
|
max-height: 120px;
|
|
3000
|
+
object-fit: contain;
|
|
3001
|
+
box-shadow: rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;
|
|
3002
|
+
}
|
|
3003
|
+
|
|
3004
|
+
.kanban-image-preview:hover {
|
|
3005
|
+
box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px -1px, rgba(0, 0, 0, 0.06) 0px 2px 4px -1px;
|
|
2998
3006
|
}
|
|
2999
3007
|
|
|
3000
3008
|
.solid-kanban-board-wrapper {
|