mirror of
https://github.com/Redocly/redoc.git
synced 2025-02-07 13:30:33 +03:00
chore: refactor, rename StoreProvider to StoreBuilder
This commit is contained in:
parent
dba3995e89
commit
d731518c8c
|
@ -13,6 +13,7 @@ import { StickyResponsiveSidebar } from '../StickySidebar/StickyResponsiveSideba
|
|||
import { ApiContentWrap, BackgroundStub, RedocWrap } from './styled.elements';
|
||||
|
||||
import { SearchBox } from '../SearchBox/SearchBox';
|
||||
import { StoreProvider } from '../StoreBuilder';
|
||||
|
||||
export interface RedocProps {
|
||||
store: AppStore;
|
||||
|
@ -38,29 +39,31 @@ export class Redoc extends React.Component<RedocProps> {
|
|||
const store = this.props.store;
|
||||
return (
|
||||
<ThemeProvider theme={options.theme}>
|
||||
<OptionsProvider value={options}>
|
||||
<RedocWrap className="redoc-wrap">
|
||||
<StickyResponsiveSidebar menu={menu} className="menu-content">
|
||||
<ApiLogo info={spec.info} />
|
||||
{(!options.disableSearch && (
|
||||
<SearchBox
|
||||
search={search!}
|
||||
marker={marker}
|
||||
getItemById={menu.getItemById}
|
||||
onActivate={menu.activateAndScroll}
|
||||
/>
|
||||
)) ||
|
||||
null}
|
||||
<SideMenu menu={menu} />
|
||||
</StickyResponsiveSidebar>
|
||||
<ApiContentWrap className="api-content">
|
||||
<ApiInfo store={store} />
|
||||
<ApiDescription store={store} />
|
||||
<ContentItems items={menu.items as any} />
|
||||
</ApiContentWrap>
|
||||
<BackgroundStub />
|
||||
</RedocWrap>
|
||||
</OptionsProvider>
|
||||
<StoreProvider value={this.props.store}>
|
||||
<OptionsProvider value={options}>
|
||||
<RedocWrap className="redoc-wrap">
|
||||
<StickyResponsiveSidebar menu={menu} className="menu-content">
|
||||
<ApiLogo info={spec.info} />
|
||||
{(!options.disableSearch && (
|
||||
<SearchBox
|
||||
search={search!}
|
||||
marker={marker}
|
||||
getItemById={menu.getItemById}
|
||||
onActivate={menu.activateAndScroll}
|
||||
/>
|
||||
)) ||
|
||||
null}
|
||||
<SideMenu menu={menu} />
|
||||
</StickyResponsiveSidebar>
|
||||
<ApiContentWrap className="api-content">
|
||||
<ApiInfo store={store} />
|
||||
<ApiDescription description={store.spec.info.description} />
|
||||
<ContentItems items={menu.items as any} />
|
||||
</ApiContentWrap>
|
||||
<BackgroundStub />
|
||||
</RedocWrap>
|
||||
</OptionsProvider>
|
||||
</StoreProvider>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import { RedocNormalizedOptions, RedocRawOptions } from '../services/RedocNormal
|
|||
import { ErrorBoundary } from './ErrorBoundary';
|
||||
import { Loading } from './Loading/Loading';
|
||||
import { Redoc } from './Redoc/Redoc';
|
||||
import { StoreProvider } from './StoreProvider';
|
||||
import { StoreBuilder } from './StoreBuilder';
|
||||
|
||||
export interface RedocStandaloneProps {
|
||||
spec?: object;
|
||||
|
@ -44,7 +44,7 @@ export class RedocStandalone extends React.PureComponent<RedocStandaloneProps> {
|
|||
|
||||
return (
|
||||
<ErrorBoundary>
|
||||
<StoreProvider spec={spec} specUrl={specUrl} options={options} onLoaded={onLoaded}>
|
||||
<StoreBuilder spec={spec} specUrl={specUrl} options={options} onLoaded={onLoaded}>
|
||||
{({ loading, store }) =>
|
||||
!loading ? (
|
||||
<Redoc store={store!} />
|
||||
|
@ -52,7 +52,7 @@ export class RedocStandalone extends React.PureComponent<RedocStandaloneProps> {
|
|||
<Loading color={normalizedOpts.theme.colors.primary.main} />
|
||||
)
|
||||
}
|
||||
</StoreProvider>
|
||||
</StoreBuilder>
|
||||
</ErrorBoundary>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import memoize from 'memoize-one';
|
||||
import { Component } from 'react';
|
||||
import { Component, createContext } from 'react';
|
||||
|
||||
import { AppStore } from '../services/';
|
||||
import { RedocRawOptions } from '../services/RedocNormalizedOptions';
|
||||
import { loadAndBundleSpec } from '../utils';
|
||||
|
||||
export interface StoreProviderProps {
|
||||
export interface StoreBuilderProps {
|
||||
specUrl?: string;
|
||||
spec?: object;
|
||||
store?: AppStore;
|
||||
|
@ -17,7 +17,7 @@ export interface StoreProviderProps {
|
|||
children: (props: { loading: boolean; store?: AppStore }) => any;
|
||||
}
|
||||
|
||||
export interface StoreProviderState {
|
||||
export interface StoreBuilderState {
|
||||
error?: Error;
|
||||
loading: boolean;
|
||||
resolvedSpec?: any;
|
||||
|
@ -25,8 +25,11 @@ export interface StoreProviderState {
|
|||
prevSpecUrl?: string;
|
||||
}
|
||||
|
||||
export class StoreProvider extends Component<StoreProviderProps, StoreProviderState> {
|
||||
static getDerivedStateFromProps(nextProps: StoreProviderProps, prevState: StoreProviderState) {
|
||||
const { Provider, Consumer } = createContext<AppStore | undefined>(undefined);
|
||||
export { Provider as StoreProvider, Consumer as StoreConsumer };
|
||||
|
||||
export class StoreBuilder extends Component<StoreBuilderProps, StoreBuilderState> {
|
||||
static getDerivedStateFromProps(nextProps: StoreBuilderProps, prevState: StoreBuilderState) {
|
||||
if (nextProps.specUrl !== prevState.prevSpecUrl || nextProps.spec !== prevState.prevSpec) {
|
||||
return {
|
||||
loading: true,
|
||||
|
@ -39,7 +42,7 @@ export class StoreProvider extends Component<StoreProviderProps, StoreProviderSt
|
|||
return null;
|
||||
}
|
||||
|
||||
state: StoreProviderState = {
|
||||
state: StoreBuilderState = {
|
||||
loading: true,
|
||||
resolvedSpec: null,
|
||||
};
|
|
@ -25,7 +25,7 @@ export * from './PayloadSamples/PayloadSamples';
|
|||
export * from './MediaTypeSwitch/MediaTypesSwitch';
|
||||
|
||||
export * from './ErrorBoundary';
|
||||
export * from './StoreProvider';
|
||||
export * from './StoreBuilder';
|
||||
export * from './OptionsProvider';
|
||||
export * from './SideMenu/';
|
||||
export * from './StickySidebar/StickyResponsiveSidebar';
|
||||
|
|
Loading…
Reference in New Issue
Block a user