Skip to content

Commit 111dbd6

Browse files
sserratablindaa121
andauthored
[Bug] Add handler for oneOf properties, fix nested <li> and and avoid duplicate properties in createAnyOneOf (#561)
* Pop schemas as we're iterating in createAnyOneOf and add handler for oneOf properties * Convert ul and li tags to divs to avoid nested lists * Add type and description to each oneOf property option * Add handlers for nodes with circular refs * Add custom styles to discriminator tabs * Allow SchemaItem to return children * Add custom style for discriminator tabs * Revert discriminator top tab section left margin to 1rem * Improve additionalProperties support and cleanup <li> in createAnyOneOf * Use type as schemaName instead of format * Fix how schemaName is derived for some additionalProperties * Fix arrow rendering for tab components --------- Co-authored-by: Bryan <[email protected]>
1 parent 29dc79c commit 111dbd6

File tree

10 files changed

+450
-279
lines changed

10 files changed

+450
-279
lines changed

packages/docusaurus-plugin-openapi-docs/src/markdown/createRequestSchema.ts

Lines changed: 192 additions & 125 deletions
Large diffs are not rendered by default.

packages/docusaurus-plugin-openapi-docs/src/markdown/createResponseSchema.ts

Lines changed: 192 additions & 125 deletions
Large diffs are not rendered by default.

packages/docusaurus-theme-openapi-docs/src/theme/ApiTabs/index.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,21 @@ function ApiTabsComponent(props) {
147147
const [showTabArrows, setShowTabArrows] = useState(false);
148148

149149
useEffect(() => {
150-
const tabOffsetWidth = tabItemListContainerRef.current.offsetWidth;
151-
const tabScrollWidth = tabItemListContainerRef.current.scrollWidth;
150+
const resizeObserver = new ResizeObserver((entries) => {
151+
for (let entry of entries) {
152+
if (entry.target.offsetWidth < entry.target.scrollWidth) {
153+
setShowTabArrows(true);
154+
} else {
155+
setShowTabArrows(false);
156+
}
157+
}
158+
});
152159

153-
if (tabOffsetWidth < tabScrollWidth) {
154-
setShowTabArrows(true);
155-
}
160+
resizeObserver.observe(tabItemListContainerRef.current);
161+
162+
return () => {
163+
resizeObserver.disconnect();
164+
};
156165
}, []);
157166

158167
const handleRightClick = () => {

packages/docusaurus-theme-openapi-docs/src/theme/DiscriminatorTabs/index.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,21 @@ function DiscriminatorTabsComponent(props) {
147147
const [showTabArrows, setShowTabArrows] = useState(false);
148148

149149
useEffect(() => {
150-
const tabOffsetWidth = tabItemListContainerRef.current.offsetWidth;
151-
const tabScrollWidth = tabItemListContainerRef.current.scrollWidth;
150+
const resizeObserver = new ResizeObserver((entries) => {
151+
for (let entry of entries) {
152+
if (entry.target.offsetWidth < entry.target.scrollWidth) {
153+
setShowTabArrows(true);
154+
} else {
155+
setShowTabArrows(false);
156+
}
157+
}
158+
});
152159

153-
if (tabOffsetWidth < tabScrollWidth) {
154-
setShowTabArrows(true);
155-
}
160+
resizeObserver.observe(tabItemListContainerRef.current);
161+
162+
return () => {
163+
resizeObserver.disconnect();
164+
};
156165
}, []);
157166

158167
const handleRightClick = () => {
@@ -164,7 +173,7 @@ function DiscriminatorTabsComponent(props) {
164173
};
165174

166175
return (
167-
<div className="tabs__container">
176+
<div className={clsx("tabs__container", "discriminatorTabs")}>
168177
<div className={styles.discriminatorTabsTopSection}>
169178
<div className={clsx(styles.discriminatorTabsContainer)}>
170179
{showTabArrows && (

packages/docusaurus-theme-openapi-docs/src/theme/DiscriminatorTabs/styles.module.css

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,13 @@
3232
}
3333

3434
/* Open API Schema Tabs */
35+
.discriminatorTabs {
36+
margin-left: -20px !important;
37+
}
38+
3539
.discriminatorTabsTopSection {
3640
margin-top: 1rem;
37-
margin-left: 0.9rem;
41+
margin-left: 1rem;
3842
display: flex;
3943
justify-content: space-between;
4044
align-items: center;

packages/docusaurus-theme-openapi-docs/src/theme/MimeTabs/index.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -173,12 +173,21 @@ function MimeTabsComponent(props) {
173173
const [showTabArrows, setShowTabArrows] = useState(false);
174174

175175
useEffect(() => {
176-
const tabOffsetWidth = tabItemListContainerRef.current.offsetWidth;
177-
const tabScrollWidth = tabItemListContainerRef.current.scrollWidth;
176+
const resizeObserver = new ResizeObserver((entries) => {
177+
for (let entry of entries) {
178+
if (entry.target.offsetWidth < entry.target.scrollWidth) {
179+
setShowTabArrows(true);
180+
} else {
181+
setShowTabArrows(false);
182+
}
183+
}
184+
});
178185

179-
if (tabOffsetWidth < tabScrollWidth) {
180-
setShowTabArrows(true);
181-
}
186+
resizeObserver.observe(tabItemListContainerRef.current);
187+
188+
return () => {
189+
resizeObserver.disconnect();
190+
};
182191
}, []);
183192

184193
const handleRightClick = () => {
@@ -200,7 +209,7 @@ function MimeTabsComponent(props) {
200209
onClick={handleLeftClick}
201210
/>
202211
)}
203-
<ul
212+
<div
204213
ref={tabItemListContainerRef}
205214
role="tablist"
206215
aria-orientation="horizontal"
@@ -215,7 +224,7 @@ function MimeTabsComponent(props) {
215224
>
216225
{values.map(({ value, label, attributes }) => {
217226
return (
218-
<li
227+
<div
219228
role="tab"
220229
tabIndex={selectedValue === value ? 0 : -1}
221230
aria-selected={selectedValue === value}
@@ -238,10 +247,10 @@ function MimeTabsComponent(props) {
238247
className={clsx(styles.mimeTabDot, mimeTabDotStyle)}
239248
/> */}
240249
{label ?? value}
241-
</li>
250+
</div>
242251
);
243252
})}
244-
</ul>
253+
</div>
245254
{showTabArrows && (
246255
<button
247256
className={clsx(styles.tabArrow, styles.tabArrowRight)}

packages/docusaurus-theme-openapi-docs/src/theme/ParamsItem/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ function ParamsItem({
119119
});
120120

121121
return (
122-
<li className={styles.paramsItem}>
122+
<div className={styles.paramsItem}>
123123
<strong>{name}</strong>
124124
{renderSchemaName}
125125
{renderSchemaRequired}
@@ -128,7 +128,7 @@ function ParamsItem({
128128
{renderDescription}
129129
{renderExample}
130130
{renderExamples}
131-
</li>
131+
</div>
132132
);
133133
}
134134

packages/docusaurus-theme-openapi-docs/src/theme/SchemaItem/index.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ function SchemaItem({
2828
required,
2929
schemaName,
3030
schema,
31+
discriminator,
3132
}) {
3233
let deprecated;
3334
let schemaDescription;
@@ -99,13 +100,14 @@ function SchemaItem({
99100
{renderQualifierMessage}
100101
{renderDefaultValue}
101102
{renderSchemaDescription}
103+
{collapsibleSchemaContent ?? collapsibleSchemaContent}
102104
</div>
103105
);
104106

105107
return (
106-
<li className={styles.schemaItem}>
108+
<div className={styles.schemaItem}>
107109
{collapsible ? collapsibleSchemaContent : schemaContent}
108-
</li>
110+
</div>
109111
);
110112
}
111113

packages/docusaurus-theme-openapi-docs/src/theme/SchemaTabs/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ function SchemaTabsComponent(props) {
182182
onClick={handleLeftClick}
183183
/>
184184
)}
185-
<ul
185+
<div
186186
ref={tabItemListContainerRef}
187187
role="tablist"
188188
aria-orientation="horizontal"
@@ -197,7 +197,7 @@ function SchemaTabsComponent(props) {
197197
>
198198
{values.map(({ value, label, attributes }) => {
199199
return (
200-
<li
200+
<div
201201
role="tab"
202202
tabIndex={selectedValue === value ? 0 : -1}
203203
aria-selected={selectedValue === value}
@@ -219,10 +219,10 @@ function SchemaTabsComponent(props) {
219219
<span className={styles.schemaTabLabel}>
220220
{label ?? value}
221221
</span>
222-
</li>
222+
</div>
223223
);
224224
})}
225-
</ul>
225+
</div>
226226
{showTabArrows && (
227227
<button
228228
className={clsx(styles.tabArrow, styles.tabArrowRight)}

packages/docusaurus-theme-openapi-docs/src/theme/styles.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,10 @@
217217
padding-left: 0 !important;
218218
}
219219

220+
.discriminatorTabs {
221+
margin-left: -20px;
222+
}
223+
220224
.schemaItem:hover {
221225
background-color: var(--ifm-menu-color-background-active);
222226
}

0 commit comments

Comments
 (0)