Skip to content

Commit d2438dd

Browse files
authored
Fix server build styles (#149)
1 parent ad66f92 commit d2438dd

File tree

10 files changed

+49
-118
lines changed

10 files changed

+49
-118
lines changed

.changeset/purple-trainers-switch.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'docusaurus-theme-redoc': major
3+
---
4+
5+
Enable server style sheet collection by default, fixes style issues on fresh load

packages/docusaurus-theme-redoc/src/index.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export default function redocTheme(
1515
): Plugin<null> {
1616
return {
1717
name: 'docusaurus-theme-redoc',
18-
configureWebpack() {
18+
configureWebpack(_config, isServer) {
1919
return {
2020
resolve: {
2121
fallback: {
@@ -29,6 +29,14 @@ export default function redocTheme(
2929
),
3030
}),
3131
new NodePolyfillPlugin(),
32+
...(isServer
33+
? [
34+
new webpack.NormalModuleReplacementPlugin(
35+
/theme\/Redoc\/Styles\.jsx/,
36+
path.join(__dirname, 'theme', 'Redoc', 'ServerStyles.js'),
37+
),
38+
]
39+
: []),
3240
],
3341
};
3442
},

packages/docusaurus-theme-redoc/src/merge.ts

-43
This file was deleted.

packages/docusaurus-theme-redoc/src/redocData.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { RedocRawOptions } from 'redoc';
2-
import { merge } from './merge';
2+
import merge from 'lodash/merge';
33
import { GlobalData, RedocThemeOverrides, ThemeOptions } from './types/options';
44

55
const defaultOptions: Partial<RedocRawOptions> = {

packages/docusaurus-theme-redoc/src/theme/Redoc/Redoc.tsx

+7-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from 'react';
22
import { Redoc as RedocComponent } from 'redoc';
33
import { SpecProps } from '../../types/common';
44
import { useSpec } from '../../hooks/useSpec';
5+
import { ServerStyles } from './Styles';
56
import './styles.css';
67

78
/*!
@@ -14,9 +15,12 @@ function Redoc(props: SpecProps): JSX.Element {
1415
const { store } = useSpec(props);
1516

1617
return (
17-
<div className="redocusaurus">
18-
<RedocComponent store={store} />
19-
</div>
18+
<>
19+
<ServerStyles store={store} />
20+
<div className="redocusaurus">
21+
<RedocComponent store={store} />
22+
</div>
23+
</>
2024
);
2125
}
2226

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import React from 'react';
2+
import { AppStore, Redoc } from 'redoc';
3+
// eslint-disable-next-line import/no-extraneous-dependencies
4+
import { renderToString } from 'react-dom/server';
5+
import { ServerStyleSheet } from 'styled-components';
6+
7+
export function ServerStyles({ store }: { store: AppStore }) {
8+
const sheet = new ServerStyleSheet();
9+
renderToString(sheet.collectStyles(React.createElement(Redoc, { store })));
10+
const css = sheet.getStyleTags();
11+
12+
return (
13+
<div
14+
className="redocusaurus-styles"
15+
dangerouslySetInnerHTML={{
16+
__html: css,
17+
}}
18+
/>
19+
);
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import type { AppStore } from 'redoc';
2+
3+
function ClientStyles(_props: { store: AppStore }) {
4+
return null;
5+
}
6+
7+
export { ClientStyles as ServerStyles };

packages/docusaurus-theme-redoc/src/theme/ServerStyle/index.tsx

-49
This file was deleted.

packages/docusaurus-theme-redoc/src/types/modules.d.ts

-8
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,6 @@ interface SpecProps {
44
url?: string;
55
}
66

7-
declare module '@theme/ServerStyle' {
8-
/**
9-
* @see https://github.com/facebook/docusaurus/issues/3236#issuecomment-788953743
10-
*/
11-
const ServerStyle: (props: { from: React.ReactNode }) => JSX.Element;
12-
export default ServerStyle;
13-
}
14-
157
declare module '@theme/Redoc' {
168
const Redoc: (props: SpecProps) => JSX.Element;
179
export default Redoc;

website/src/theme/Root/index.tsx

-13
This file was deleted.

0 commit comments

Comments
 (0)