Skip to content

Commit a4ff529

Browse files
committed
fix build
1 parent 6fa5513 commit a4ff529

2 files changed

Lines changed: 28 additions & 299 deletions

File tree

src/webparts/controlsTest/IControlsTestWebPartProps.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export type ValidControls = "all" |
88
"GroupPicker" |
99
"GridLayout" | "HoverReactionsBar" | "IconPicker" | "IFrameDialog" |
1010
"IFramePanel" | "ImagePicker" | "ListItemAttachments" | "ListItemComments" |
11-
"ListItemPicker" | "ListPicker" | "ListView" | "LivePersona" |
11+
"ListItemPicker" | "ListPicker" | "ListToolbar" | "ListView" | "LivePersona" |
1212
"LocationPicker" | "Map" | "ModernAudio" |
1313
"ModernTaxonomyPicker" | "MonacoEditor" | "Pagination" | "PeoplePicker" |
1414
"Placeholder" | "Progress" | "ProgressStepsIndicator" | "RichText" |

src/webparts/controlsTest/components/TestControl.tsx

Lines changed: 27 additions & 298 deletions
Original file line numberDiff line numberDiff line change
@@ -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

3716
import { 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-
4418
import { createV9Theme } from '@fluentui/react-migration-v8-v9';
4519
import { Kpis } from '../../../controls/KPIControl';
4620

4721
const 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

6251
export 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

Comments
 (0)