Skip to content

Commit e8c7891

Browse files
committed
Fix OpenAPISelect
1 parent 4063b1a commit e8c7891

File tree

5 files changed

+31
-20
lines changed

5 files changed

+31
-20
lines changed

Diff for: packages/gitbook/src/components/DocumentView/OpenAPI/style.css

+9-1
Original file line numberDiff line numberDiff line change
@@ -531,12 +531,20 @@ body:has(.openapi-select-popover) {
531531
@apply hover:bg-tint-hover transition-all;
532532
}
533533

534+
.openapi-select > button > span.react-aria-SelectValue {
535+
@apply shrink truncate;
536+
}
537+
538+
.openapi-select > button > .gb-icon {
539+
@apply shrink-0;
540+
}
541+
534542
.openapi-select > button svg {
535543
@apply size-2.5;
536544
}
537545

538546
.openapi-select-popover {
539-
@apply min-w-32 max-w-44 w-fit max-h-52 right-0 overflow-y-auto p-1.5 border border-tint-subtle bg-tint-base backdrop-blur-xl rounded-md;
547+
@apply min-w-32 max-w-fit w-auto max-h-52 overflow-y-auto p-1.5 border border-tint-subtle bg-tint-base backdrop-blur-xl rounded-md;
540548
@apply shadow-md shadow-tint-12/1 dark:shadow-tint-1/1;
541549
}
542550

Diff for: packages/react-openapi/src/InteractiveSection.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ export function InteractiveSection(props: {
114114
)}
115115
items={tabs}
116116
selectedKey={selectedTab?.key ?? ''}
117-
onChange={(key) => {
117+
onSelectionChange={(key) => {
118118
setSelectedTab(String(key));
119119
state.expand();
120120
}}

Diff for: packages/react-openapi/src/OpenAPICodeSampleInteractive.tsx

+14-8
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ function MediaTypeSelector(props: {
7070
return null;
7171
}
7272

73+
const items = renderers.map((renderer) => ({
74+
key: renderer.mediaType,
75+
label: renderer.mediaType,
76+
}));
77+
7378
return (
7479
<OpenAPISelect
7580
className={clsx('openapi-select')}
@@ -78,11 +83,12 @@ function MediaTypeSelector(props: {
7883
key: renderer.mediaType,
7984
label: renderer.mediaType,
8085
}))}
81-
onChange={(e) => state.setMediaType(String(e))}
86+
onSelectionChange={(e) => state.setMediaType(String(e))}
87+
placement="bottom start"
8288
>
83-
{renderers.map((renderer) => (
84-
<OpenAPISelectItem key={renderer.mediaType} value={renderer}>
85-
{renderer.mediaType}
89+
{items.map((item) => (
90+
<OpenAPISelectItem key={item.key} id={item.key} value={item}>
91+
{item.label}
8692
</OpenAPISelectItem>
8793
))}
8894
</OpenAPISelect>
@@ -107,13 +113,13 @@ function ExamplesSelector(props: {
107113

108114
return (
109115
<OpenAPISelect
110-
className={clsx('openapi-select')}
111116
items={items}
112-
selectedKey={String(state.index)}
113-
onChange={(e) => state.setIndex(Number(e))}
117+
selectedKey={state.index}
118+
onSelectionChange={(e) => state.setIndex(Number(e))}
119+
placement="bottom start"
114120
>
115121
{items.map((item) => (
116-
<OpenAPISelectItem key={item.key} value={item}>
122+
<OpenAPISelectItem key={item.key} id={item.key} value={item}>
117123
{item.label}
118124
</OpenAPISelectItem>
119125
))}

Diff for: packages/react-openapi/src/OpenAPICodeSampleSelector.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ export function OpenAPICodeSampleHeader(props: {
3737
{items.length > 1 ? (
3838
<OpenAPISelect
3939
selectedKey={selected?.key}
40-
onChange={(key) => {
40+
onSelectionChange={(key) => {
4141
state.setKey(key);
4242
}}
4343
items={items}
44-
defaultSelectedKey={items[0]?.key}
44+
placement="bottom end"
4545
>
4646
{items.map((item) => (
4747
<OpenAPISelectItem key={item.key} id={item.key} value={item}>

Diff for: packages/react-openapi/src/OpenAPISelect.tsx

+5-8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
ListBoxItem,
99
type ListBoxItemProps,
1010
Popover,
11+
type PopoverProps,
1112
Select,
1213
type SelectProps,
1314
SelectValue,
@@ -23,18 +24,14 @@ interface OpenAPISelectProps<T extends OpenAPISelectItem> extends Omit<SelectPro
2324
children: React.ReactNode | ((item: T) => React.ReactNode);
2425
selectedKey?: Key;
2526
onChange?: (key: string | number) => void;
27+
placement?: PopoverProps['placement'];
2628
}
2729

2830
export function OpenAPISelect<T extends OpenAPISelectItem>(props: OpenAPISelectProps<T>) {
29-
const { items, children, className, selectedKey, onChange } = props;
31+
const { items, children, className, placement } = props;
3032

3133
return (
32-
<Select
33-
{...props}
34-
className={clsx('openapi-select', className)}
35-
selectedKey={selectedKey}
36-
onSelectionChange={onChange}
37-
>
34+
<Select {...props} className={clsx('openapi-select', className)}>
3835
<Button>
3936
<SelectValue />
4037
<span aria-hidden="true">
@@ -49,7 +46,7 @@ export function OpenAPISelect<T extends OpenAPISelectItem>(props: OpenAPISelectP
4946
/>
5047
</span>
5148
</Button>
52-
<Popover placement="bottom end" className="openapi-select-popover">
49+
<Popover placement={placement} className="openapi-select-popover">
5350
<ListBox className="openapi-select-listbox" items={items}>
5451
{children}
5552
</ListBox>

0 commit comments

Comments
 (0)