@@ -9,48 +9,37 @@ import {
99 Title3 ,
1010 makeStyles ,
1111 shorthands ,
12- Button ,
13- Text ,
1412} from '@fluentui/react-components' ;
1513
16- import {
17- AddRegular ,
18- EditRegular ,
19- DeleteRegular ,
20- CopyRegular ,
21- ArrowUploadRegular ,
22- FilterRegular ,
23- ArrowSortRegular ,
24- SettingsRegular ,
25- GridRegular ,
26- ListRegular ,
27- ShareRegular ,
28- ArrowDownloadRegular ,
29- PinRegular ,
30- FolderAddRegular ,
31- RenameRegular ,
32- InfoRegular ,
33- ArchiveRegular ,
34- TagRegular ,
35- } from '@fluentui/react-icons' ;
14+ import { IUserInfo } from '../../../controls/userPicker/models/IUserInfo' ;
3615
3716import { WebPartContext } from '@microsoft/sp-webpart-base' ;
3817
39- import { ListToolbar } from '../../../controls/ListToolbar' ;
40- import { IToolbarItem } from '../../../controls/ListToolbar' ;
41-
42- import { IUserInfo } from '../../../controls/userPicker/models/IUserInfo' ;
43-
4418import { createV9Theme } from '@fluentui/react-migration-v8-v9' ;
4519import { Kpis } from '../../../controls/KPIControl' ;
4620
4721const useStyles = makeStyles ( {
4822 root : {
4923 display : 'flex' ,
50- flexDirection : 'column' ,
51- gap :'10px' ,
24+ flexDirection : 'row' ,
25+ alignItems : 'center' ,
26+ justifyContent : 'center' ,
27+ ...shorthands . gap ( '10px' ) ,
28+ marginLeft : '50%' ,
29+ marginRight : '50%' ,
5230 height : 'fit-content' ,
53- width : '100%' ,
31+ width : 'fit-content' ,
32+ } ,
33+ image : {
34+ width : '20px' ,
35+ height : '20px' ,
36+ } ,
37+ title : {
38+ marginBottom : '30px' ,
39+ display : 'flex' ,
40+ flexDirection : 'row' ,
41+ justifyContent : 'center' ,
42+ alignItems : 'center' ,
5443 } ,
5544} ) ;
5645
@@ -60,281 +49,21 @@ export interface ITestControlProps {
6049}
6150
6251export const TestControl : React . FunctionComponent < ITestControlProps > = (
63- props : React . PropsWithChildren < ITestControlProps > ,
52+ props : React . PropsWithChildren < ITestControlProps >
6453) => {
6554 const { themeVariant, context } = props ;
6655
6756 const styles = useStyles ( ) ;
6857
69- const [ selectedCount , setSelectedCount ] = React . useState < number > ( 0 ) ;
70- const [ isLoading , setIsLoading ] = React . useState < boolean > ( false ) ;
71- const [ view , setView ] = React . useState < 'grid' | 'list' > ( 'list' ) ;
58+ const setTheme = React . useCallback ( ( ) : Partial < Theme > => {
59+ return createV9Theme ( themeVariant ) ;
60+ } , [ themeVariant ] ) ;
7261
73- // Callback handler for toolbar item clicks
74- const onToolbarItemClick = React . useCallback (
75- ( action : string ) => {
76- console . log ( `Toolbar action selected: ${ action } ` ) ;
77-
78- switch ( action ) {
79- case 'new' :
80- console . log ( 'Creating new item...' ) ;
81- break ;
82- case 'newFolder' :
83- console . log ( 'Creating new folder...' ) ;
84- break ;
85- case 'upload' :
86- console . log ( 'Opening upload dialog...' ) ;
87- break ;
88- case 'edit' :
89- console . log ( 'Editing selected item...' ) ;
90- break ;
91- case 'rename' :
92- console . log ( 'Renaming selected item...' ) ;
93- break ;
94- case 'copy' :
95- console . log ( `Copying ${ selectedCount } item(s)...` ) ;
96- break ;
97- case 'share' :
98- console . log ( `Sharing ${ selectedCount } item(s)...` ) ;
99- break ;
100- case 'download' :
101- console . log ( `Downloading ${ selectedCount } item(s)...` ) ;
102- break ;
103- case 'pin' :
104- console . log ( `Pinning ${ selectedCount } item(s)...` ) ;
105- break ;
106- case 'tag' :
107- console . log ( `Tagging ${ selectedCount } item(s)...` ) ;
108- break ;
109- case 'archive' :
110- console . log ( `Archiving ${ selectedCount } item(s)...` ) ;
111- break ;
112- case 'details' :
113- console . log ( 'Opening details panel...' ) ;
114- break ;
115- case 'delete' :
116- console . log ( `Deleting ${ selectedCount } item(s)...` ) ;
117- setSelectedCount ( 0 ) ;
118- break ;
119- case 'filter' :
120- console . log ( 'Opening filter panel...' ) ;
121- break ;
122- case 'sort' :
123- console . log ( 'Opening sort options...' ) ;
124- break ;
125- case 'settings' :
126- console . log ( 'Opening settings...' ) ;
127- break ;
128- default :
129- break ;
130- }
131- } ,
132- [ selectedCount ] ,
133- ) ;
134-
135- // Regular items (left side) with grouping
136- const items : IToolbarItem [ ] = React . useMemo (
137- ( ) => [
138- // Create group
139- {
140- key : 'new' ,
141- label : 'New' ,
142- icon : < AddRegular /> ,
143- appearance : 'primary' ,
144- group : 'create' ,
145- onClick : ( ) => onToolbarItemClick ( 'new' ) ,
146- } ,
147- {
148- key : 'newFolder' ,
149- label : 'New Folder' ,
150- icon : < FolderAddRegular /> ,
151- appearance : 'subtle' ,
152- group : 'create' ,
153- onClick : ( ) => onToolbarItemClick ( 'newFolder' ) ,
154- } ,
155- {
156- key : 'upload' ,
157- label : 'Upload' ,
158- icon : < ArrowUploadRegular /> ,
159- appearance : 'subtle' ,
160- group : 'create' ,
161- onClick : ( ) => onToolbarItemClick ( 'upload' ) ,
162- } ,
163- // Edit group
164- {
165- key : 'edit' ,
166- label : 'Edit' ,
167- icon : < EditRegular /> ,
168- group : 'edit' ,
169- appearance : 'subtle' ,
170- visible : selectedCount === 1 ,
171- onClick : ( ) => onToolbarItemClick ( 'edit' ) ,
172- } ,
173- {
174- key : 'rename' ,
175- label : 'Rename' ,
176- icon : < RenameRegular /> ,
177- group : 'edit' ,
178- appearance : 'subtle' ,
179- visible : selectedCount === 1 ,
180- onClick : ( ) => onToolbarItemClick ( 'rename' ) ,
181- } ,
182- {
183- key : 'copy' ,
184- label : 'Copy' ,
185- icon : < CopyRegular /> ,
186- group : 'edit' ,
187- appearance : 'subtle' ,
188- visible : selectedCount > 0 ,
189- onClick : ( ) => onToolbarItemClick ( 'copy' ) ,
190- } ,
191- // Share & Download group
192- {
193- key : 'share' ,
194- label : 'Share' ,
195- icon : < ShareRegular /> ,
196- group : 'share' ,
197- appearance : 'subtle' ,
198- visible : selectedCount > 0 ,
199- onClick : ( ) => onToolbarItemClick ( 'share' ) ,
200- } ,
201- {
202- key : 'download' ,
203- label : 'Download' ,
204- icon : < ArrowDownloadRegular /> ,
205- group : 'share' ,
206- appearance : 'subtle' ,
207- visible : selectedCount > 0 ,
208- onClick : ( ) => onToolbarItemClick ( 'download' ) ,
209- } ,
210- // Organize group
211- {
212- key : 'pin' ,
213- label : 'Pin to top' ,
214- icon : < PinRegular /> ,
215- group : 'organize' ,
216- appearance : 'subtle' ,
217- visible : selectedCount > 0 ,
218- onClick : ( ) => onToolbarItemClick ( 'pin' ) ,
219- } ,
220- {
221- key : 'tag' ,
222- label : 'Tag' ,
223- icon : < TagRegular /> ,
224- group : 'organize' ,
225- appearance : 'subtle' ,
226- visible : selectedCount > 0 ,
227- onClick : ( ) => onToolbarItemClick ( 'tag' ) ,
228- } ,
229- {
230- key : 'archive' ,
231- label : 'Archive' ,
232- icon : < ArchiveRegular /> ,
233- group : 'organize' ,
234- appearance : 'subtle' ,
235- visible : selectedCount > 0 ,
236- onClick : ( ) => onToolbarItemClick ( 'archive' ) ,
237- } ,
238- // Info group (always visible)
239- {
240- key : 'details' ,
241- label : 'Details' ,
242- icon : < InfoRegular /> ,
243- group : 'info' ,
244- appearance : 'subtle' ,
245- visible : selectedCount === 1 ,
246- onClick : ( ) => onToolbarItemClick ( 'details' ) ,
247- } ,
248- // Danger group
249- {
250- key : 'delete' ,
251- label : 'Delete' ,
252- icon : < DeleteRegular /> ,
253- group : 'danger' ,
254- appearance : 'subtle' ,
255- visible : selectedCount > 0 ,
256- dividerBefore : true ,
257- onClick : ( ) => onToolbarItemClick ( 'delete' ) ,
258- } ,
259- ] ,
260- [ selectedCount , onToolbarItemClick ] ,
261- ) ;
262-
263- // Far items (right side)
264- const farItems : IToolbarItem [ ] = React . useMemo (
265- ( ) => [
266- {
267- key : 'filter' ,
268- label : 'Filter' ,
269- icon : < FilterRegular /> ,
270- appearance : 'transparent' ,
271- onClick : ( ) => onToolbarItemClick ( 'filter' ) ,
272- } ,
273- {
274- key : 'sort' ,
275- label : 'Sort' ,
276- icon : < ArrowSortRegular /> ,
277- appearance : 'transparent' ,
278- onClick : ( ) => onToolbarItemClick ( 'sort' ) ,
279- dividerAfter : true ,
280- } ,
281- {
282- key : 'gridView' ,
283- icon : < GridRegular /> ,
284- tooltip : 'Grid view' ,
285- appearance : view === 'grid' ? 'primary' : 'transparent' ,
286- onClick : ( ) => {
287- setView ( 'grid' ) ;
288- onToolbarItemClick ( 'gridView' ) ;
289- } ,
290- } ,
291- {
292- key : 'listView' ,
293- icon : < ListRegular /> ,
294- tooltip : 'List view' ,
295- appearance : view === 'list' ? 'primary' : 'transparent' ,
296- onClick : ( ) => {
297- setView ( 'list' ) ;
298- onToolbarItemClick ( 'listView' ) ;
299- } ,
300- } ,
301- {
302- key : 'settings' ,
303- icon : < SettingsRegular /> ,
304- tooltip : 'Settings' ,
305- appearance : 'transparent' ,
306- onClick : ( ) => onToolbarItemClick ( 'settings' ) ,
307- } ,
308- ] ,
309- [ view , onToolbarItemClick ] ,
310- ) ;
62+ const onSelectedUsers = ( users : IUserInfo [ ] ) => {
63+ console . log ( 'selected users' , users ) ;
64+ } ;
31165
31266 return (
313- < div className = { styles . root } >
314- < div style = { { display : 'flex' , gap : '8px' , alignItems : 'center' , padding : '8px 0' } } >
315- < Text weight = "semibold" > Simulate selection:</ Text >
316- < Button size = "small" appearance = "outline" onClick = { ( ) => setSelectedCount ( 0 ) } >
317- No selection
318- </ Button >
319- < Button size = "small" appearance = "outline" onClick = { ( ) => setSelectedCount ( 1 ) } >
320- 1 item selected
321- </ Button >
322- < Button size = "small" appearance = "outline" onClick = { ( ) => setSelectedCount ( 5 ) } >
323- 5 items selected
324- </ Button >
325- < Text > Current: { selectedCount } selected</ Text >
326- </ div >
327- < ListToolbar
328- items = { items }
329- farItems = { farItems }
330- context = { context }
331- theme = { themeVariant }
332- isLoading = { isLoading }
333- totalCount = { selectedCount > 0 ? selectedCount : undefined }
334- showGroupDividers = { true }
335- ariaLabel = "Document library toolbar"
336- />
337- </ div >
33867 < >
33968 < IdPrefixProvider value = "test-control-" >
34069 < FluentProvider theme = { setTheme ( ) } applyStylesToPortals = { true } >
@@ -349,4 +78,4 @@ export const TestControl: React.FunctionComponent<ITestControlProps> = (
34978 </ IdPrefixProvider >
35079 </ >
35180 ) ;
352- } ;
81+ } ;
0 commit comments