Skip to content

Commit 5ad34e6

Browse files
author
Katie George
committed
chore: Adds separate onFilesChange handler
1 parent 2d8d2db commit 5ad34e6

File tree

6 files changed

+27
-8
lines changed

6 files changed

+27
-8
lines changed

pages/button-group/test.page.tsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -247,12 +247,15 @@ export default function ButtonGroupPage() {
247247
case 'experimental-features':
248248
return syncAction(() => setUseExperimentalFeatures(!!detail.pressed));
249249
case 'file-input':
250-
return syncAction(() => setFiles(detail.files ? detail.files : []));
251250
default:
252251
return syncAction();
253252
}
254253
};
255254

255+
const onFilesChange: ButtonGroupProps['onFilesChange'] = ({ detail }) => {
256+
return setFiles(detail.files ? detail.files : []);
257+
};
258+
256259
const onDismiss = (event: { detail: { fileIndex: number } }) => {
257260
const newItems = [...files];
258261
newItems.splice(event.detail.fileIndex, 1);
@@ -273,6 +276,7 @@ export default function ButtonGroupPage() {
273276
variant="icon"
274277
items={items}
275278
onItemClick={onItemClick}
279+
onFilesChange={onFilesChange}
276280
dropdownExpandToViewport={dropdownExpandToViewport}
277281
/>
278282
</Box>

pages/prompt-input/simple.page.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ export default function PromptInputPage() {
171171
<Box padding={{ left: 'xxs', top: 'xs' }}>
172172
<ButtonGroup
173173
ariaLabel="Chat actions"
174-
onItemClick={({ detail }) =>
174+
onFilesChange={({ detail }) =>
175175
detail.id.includes('files') && setFiles(detail.files ? detail.files : [])
176176
}
177177
items={[

src/button-group/file-input-item.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ const FileInputItem = forwardRef(
1616
{
1717
item,
1818
showTooltip,
19-
onItemClick,
19+
onFilesChange,
2020
}: {
2121
item: ButtonGroupProps.FileInput;
2222
showTooltip: boolean;
23-
onItemClick?: CancelableEventHandler<ButtonGroupProps.ItemClickDetails>;
23+
onFilesChange?: CancelableEventHandler<ButtonGroupProps.FileChangeDetails>;
2424
},
2525
ref: React.Ref<FileInputProps.Ref>
2626
) => {
@@ -37,7 +37,7 @@ const FileInputItem = forwardRef(
3737
multiple={item.multiple}
3838
value={files}
3939
onChange={event => {
40-
fireCancelableEvent(onItemClick, { id: item.id, files: event.detail.value });
40+
fireCancelableEvent(onFilesChange, { id: item.id, files: event.detail.value });
4141
setFiles(event.detail.value);
4242
}}
4343
ref={ref}

src/button-group/interfaces.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ export interface ButtonGroupProps extends BaseComponentProps {
9292
* Called when the user clicks on an item, and the item is not disabled. The event detail object contains the id of the clicked item.
9393
*/
9494
onItemClick?: NonCancelableEventHandler<ButtonGroupProps.ItemClickDetails>;
95+
/**
96+
* Called when the user uploads files. The event detail object contains the id and files from the file input item.
97+
*/
98+
onFilesChange?: NonCancelableEventHandler<ButtonGroupProps.FileChangeDetails>;
9599
}
96100

97101
export interface InternalButtonGroupProps extends ButtonGroupProps, InternalBaseComponentProps {}
@@ -162,7 +166,11 @@ export namespace ButtonGroupProps {
162166
id: string;
163167
pressed?: boolean;
164168
checked?: boolean;
165-
files?: File[];
169+
}
170+
171+
export interface FileChangeDetails {
172+
id: string;
173+
files: File[];
166174
}
167175

168176
export interface Ref {

src/button-group/internal.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ const InternalButtonGroup = forwardRef(
2828
{
2929
items = [],
3030
onItemClick,
31+
onFilesChange,
3132
ariaLabel,
3233
dropdownExpandToViewport,
3334
__internalRootRef = null,
@@ -157,6 +158,7 @@ const InternalButtonGroup = forwardRef(
157158
tooltip={tooltip}
158159
setTooltip={setTooltip}
159160
onItemClick={onItemClick}
161+
onFilesChange={onFilesChange}
160162
ref={element => (itemsRef.current[item.id] = element)}
161163
/>
162164
);

src/button-group/item-element.tsx

+7-2
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@ interface ItemElementProps {
1919
tooltip: null | { item: string; feedback: boolean };
2020
setTooltip: (tooltip: null | { item: string; feedback: boolean }) => void;
2121
onItemClick?: NonCancelableEventHandler<ButtonGroupProps.ItemClickDetails> | undefined;
22+
onFilesChange?: NonCancelableEventHandler<ButtonGroupProps.FileChangeDetails> | undefined;
2223
}
2324

2425
const ItemElement = forwardRef(
2526
(
26-
{ item, dropdownExpandToViewport, tooltip, setTooltip, onItemClick }: ItemElementProps,
27+
{ item, dropdownExpandToViewport, tooltip, setTooltip, onItemClick, onFilesChange }: ItemElementProps,
2728
ref: React.Ref<ButtonProps.Ref>
2829
) => {
2930
const containerRef = useRef<HTMLDivElement>(null);
@@ -91,6 +92,10 @@ const ItemElement = forwardRef(
9192
fireCancelableEvent(onItemClick, event.detail, event);
9293
};
9394

95+
const onFilesChangeHandler = (event: CustomEvent<ButtonGroupProps.FileChangeDetails>) => {
96+
fireCancelableEvent(onFilesChange, event.detail, event);
97+
};
98+
9499
return (
95100
<div
96101
key={item.id}
@@ -130,7 +135,7 @@ const ItemElement = forwardRef(
130135
<FileInputItem
131136
ref={buttonRef}
132137
item={item}
133-
onItemClick={onClickHandler}
138+
onFilesChange={onFilesChangeHandler}
134139
showTooltip={tooltip?.item === item.id}
135140
/>
136141
)}

0 commit comments

Comments
 (0)