@@ -7,12 +7,13 @@ import {
7
7
Solid ,
8
8
TypedField ,
9
9
} from "@maykin-ui/admin-ui" ;
10
- import React , { useCallback } from "react" ;
10
+ import React , { useCallback , useMemo } from "react" ;
11
11
import { useNavigation } from "react-router-dom" ;
12
12
13
13
import { DestructionList } from "../../../lib/api/destructionLists" ;
14
14
import { Review } from "../../../lib/api/review" ;
15
15
import { PaginatedZaken } from "../../../lib/api/zaken" ;
16
+ import { Zaak } from "../../../types" ;
16
17
import { DestructionListToolbar } from "../detail/components" ;
17
18
import { useFields } from "../hooks/useFields" ;
18
19
import { useFilter } from "../hooks/useFilter" ;
@@ -34,14 +35,18 @@ export type BaseListViewProps = React.PropsWithChildren<{
34
35
paginatedZaken : PaginatedZaken ;
35
36
secondaryNavigationItems ?: ListTemplateProps [ "secondaryNavigationItems" ] ;
36
37
38
+ selectable ?: boolean ;
37
39
allowSelectAllPages ?: boolean ;
38
40
selectionActions ?: ButtonProps [ ] ;
41
+ initiallySelectedZakenOnPage ?: Zaak [ ] ;
39
42
40
43
extraFields ?: TypedField [ ] ;
41
44
filterSelectionZaken ?: ZaakSelectionZaakFilter ;
42
45
getSelectionDetail ?: ZaakSelectionDetailGetter ;
43
46
44
47
dataGridProps ?: Partial < DataGridProps > ;
48
+
49
+ onClearZaakSelection ?: ( ) => void ; // FIXME: REMOVE?
45
50
} > ;
46
51
47
52
export function BaseListView ( {
@@ -54,8 +59,10 @@ export function BaseListView({
54
59
paginatedZaken,
55
60
secondaryNavigationItems,
56
61
62
+ selectable = true ,
57
63
allowSelectAllPages,
58
64
selectionActions,
65
+ initiallySelectedZakenOnPage = [ ] ,
59
66
60
67
extraFields,
61
68
filterSelectionZaken,
@@ -64,6 +71,8 @@ export function BaseListView({
64
71
dataGridProps,
65
72
66
73
children,
74
+
75
+ onClearZaakSelection,
67
76
} : BaseListViewProps ) {
68
77
const { state } = useNavigation ( ) ;
69
78
const [ page , setPage ] = usePage ( ) ;
@@ -79,10 +88,11 @@ export function BaseListView({
79
88
80
89
// Selection.
81
90
const [
82
- selectedZakenOnPage ,
91
+ _selectedZakenOnPage ,
83
92
handleSelect ,
84
93
{
85
- hasSelection,
94
+ deSelectedZakenOnPage,
95
+ hasSelection : _hasSelection ,
86
96
allPagesSelected,
87
97
handleSelectAllPages,
88
98
clearZaakSelection,
@@ -94,25 +104,51 @@ export function BaseListView({
94
104
getSelectionDetail ,
95
105
) ;
96
106
107
+ // Merge `selectedZakenOnPage`.
108
+ const selectedZakenOnPage = useMemo ( ( ) => {
109
+ const deselectedZaakUrls = deSelectedZakenOnPage . map (
110
+ ( z ) => z . url as string ,
111
+ ) ;
112
+ const filteredInitiallySelectedZakenOnPage =
113
+ initiallySelectedZakenOnPage . filter (
114
+ ( z ) => ! deselectedZaakUrls . includes ( z . url as string ) ,
115
+ ) ;
116
+
117
+ return [ ...filteredInitiallySelectedZakenOnPage , ..._selectedZakenOnPage ] ;
118
+ } , [
119
+ deSelectedZakenOnPage ,
120
+ initiallySelectedZakenOnPage ,
121
+ _selectedZakenOnPage ,
122
+ ] ) ;
123
+
124
+ // Merge `hasSelection`.
125
+ const hasSelection = _hasSelection || selectedZakenOnPage . length > 0 ;
126
+
127
+ const handleClearZaakSelection = ( ) => {
128
+ clearZaakSelection ( ) ;
129
+ onClearZaakSelection ?.( ) ;
130
+ } ;
131
+
97
132
// Selection actions.
98
133
const getSelectionActions = useCallback ( ( ) => {
99
- const fixedItems = hasSelection
100
- ? ( [
101
- {
102
- children : (
103
- < >
104
- < Solid . ExclamationTriangleIcon />
105
- Huidige selectie wissen
106
- </ >
107
- ) ,
108
- variant : "warning" ,
109
- wrap : false ,
110
- onClick : clearZaakSelection ,
111
- } ,
112
- ] as ButtonProps [ ] )
113
- : [ ] ;
134
+ const fixedItems =
135
+ selectable && hasSelection
136
+ ? ( [
137
+ {
138
+ children : (
139
+ < >
140
+ < Solid . ExclamationTriangleIcon />
141
+ Huidige selectie wissen
142
+ </ >
143
+ ) ,
144
+ variant : "warning" ,
145
+ wrap : false ,
146
+ onClick : handleClearZaakSelection ,
147
+ } ,
148
+ ] as ButtonProps [ ] )
149
+ : [ ] ;
114
150
return [ ...( selectionActions || [ ] ) , ...fixedItems ] ;
115
- } , [ hasSelection , selectedZakenOnPage , selectionActions ] ) ;
151
+ } , [ selectable , hasSelection , selectedZakenOnPage , selectionActions ] ) ;
116
152
117
153
return (
118
154
< ListTemplate
@@ -128,7 +164,7 @@ export function BaseListView({
128
164
fieldsSelectable : true ,
129
165
pageSize : 100 ,
130
166
showPaginator : true ,
131
- selectable : true ,
167
+ selectable : selectable ,
132
168
filterable : true ,
133
169
tableLayout : "fixed" ,
134
170
@@ -142,7 +178,9 @@ export function BaseListView({
142
178
objectList : paginatedZaken . results as unknown as AttributeData [ ] ,
143
179
page,
144
180
sort : sort ,
145
- selected : selectedZakenOnPage as unknown as AttributeData [ ] ,
181
+ selected : selectable
182
+ ? ( selectedZakenOnPage as unknown as AttributeData [ ] )
183
+ : [ ] ,
146
184
selectionActions : getSelectionActions ( ) ,
147
185
148
186
onFieldsChange : setFields ,
0 commit comments