diff --git a/packages/react-docs/example/ts/index.tsx b/packages/react-docs/example/ts/index.tsx
index 8cfa8451c9..bf7574e7bc 100644
--- a/packages/react-docs/example/ts/index.tsx
+++ b/packages/react-docs/example/ts/index.tsx
@@ -50,7 +50,7 @@ const sourceUrl = `${
docsInfoConfig.packageUrl
}/blob/@0xproject/web3-wrapper%40${selectedVersion}/packages/web3-wrapper`;
-import * as typeDocJson from './json/web3_wrapper_typedoc_output.json';
+import * as typeDocJson from './json/0.2.0.json';
const docAgnosticFormat = docsInfo.convertToDocAgnosticFormat(typeDocJson);
render(
@@ -61,7 +61,12 @@ render(
docsInfo={docsInfo}
docAgnosticFormat={docAgnosticFormat}
sourceUrl={sourceUrl}
+ onVersionSelected={onVersionSelected}
/>
,
document.getElementById('app'),
);
+
+function onVersionSelected(semver: string) {
+ // TODO
+}
diff --git a/packages/react-docs/example/ts/json/web3_wrapper_typedoc_output.json b/packages/react-docs/example/ts/json/0.2.0.json
similarity index 100%
rename from packages/react-docs/example/ts/json/web3_wrapper_typedoc_output.json
rename to packages/react-docs/example/ts/json/0.2.0.json
diff --git a/packages/react-docs/src/ts/components/documentation.tsx b/packages/react-docs/src/ts/components/documentation.tsx
index 58523a1a99..b5e2bbb9d6 100644
--- a/packages/react-docs/src/ts/components/documentation.tsx
+++ b/packages/react-docs/src/ts/components/documentation.tsx
@@ -48,9 +48,10 @@ export interface DocumentationProps {
selectedVersion: string;
availableVersions: string[];
docsInfo: DocsInfo;
+ sourceUrl: string;
+ onVersionSelected: (semver: string) => void;
docAgnosticFormat?: DocAgnosticFormat;
sidebarHeader?: React.ReactNode;
- sourceUrl: string;
topBarHeight?: number;
}
@@ -125,6 +126,7 @@ export class Documentation extends React.Component
diff --git a/packages/react-shared/src/ts/components/nested_sidebar_menu.tsx b/packages/react-shared/src/ts/components/nested_sidebar_menu.tsx
index 6a3cf26152..f562b31133 100644
--- a/packages/react-shared/src/ts/components/nested_sidebar_menu.tsx
+++ b/packages/react-shared/src/ts/components/nested_sidebar_menu.tsx
@@ -18,6 +18,7 @@ export interface NestedSidebarMenuProps {
onMenuItemClick?: () => void;
selectedVersion?: string;
versions?: string[];
+ onVersionSelected?: (semver: string) => void;
}
export interface NestedSidebarMenuState {}
@@ -69,6 +70,7 @@ export class NestedSidebarMenu extends React.Component
)}
diff --git a/packages/react-shared/src/ts/components/version_drop_down.tsx b/packages/react-shared/src/ts/components/version_drop_down.tsx
index 86fe435079..d9e49b205b 100644
--- a/packages/react-shared/src/ts/components/version_drop_down.tsx
+++ b/packages/react-shared/src/ts/components/version_drop_down.tsx
@@ -8,6 +8,7 @@ import { utils } from '../utils/utils';
export interface VersionDropDownProps {
selectedVersion: string;
versions: string[];
+ onVersionSelected: (semver: string) => void;
}
export interface VersionDropDownState {}
@@ -33,14 +34,6 @@ export class VersionDropDown extends React.Component void;
}
interface TopBarState {
@@ -320,6 +321,7 @@ export class TopBar extends React.Component {
onMenuItemClick={this._onMenuButtonClick.bind(this)}
selectedVersion={this.props.docsVersion}
versions={this.props.availableDocVersions}
+ onVersionSelected={this.props.onVersionSelected}
/>
);
diff --git a/packages/website/ts/pages/documentation/doc_page.tsx b/packages/website/ts/pages/documentation/doc_page.tsx
index e0d7b272d8..1281219c64 100644
--- a/packages/website/ts/pages/documentation/doc_page.tsx
+++ b/packages/website/ts/pages/documentation/doc_page.tsx
@@ -13,6 +13,7 @@ import { configs } from 'ts/utils/configs';
import { constants } from 'ts/utils/constants';
import { docUtils } from 'ts/utils/doc_utils';
import { Translate } from 'ts/utils/translate';
+import { utils } from 'ts/utils/utils';
const ZERO_EX_JS_VERSION_MISSING_TOPLEVEL_PATH = '0.32.4';
@@ -80,6 +81,7 @@ export class DocPage extends React.Component {
menuSubsectionsBySection={menuSubsectionsBySection}
docsInfo={this.props.docsInfo}
translate={this.props.translate}
+ onVersionSelected={this._onVersionSelected.bind(this)}
/>
{
sidebarHeader={}
sourceUrl={sourceUrl}
topBarHeight={60}
+ onVersionSelected={this._onVersionSelected.bind(this)}
/>
);
@@ -141,4 +144,15 @@ export class DocPage extends React.Component {
const sourceUrl = `${url}/blob/${tagPrefix}%40${this.props.docsVersion}/packages${pkg}`;
return sourceUrl;
}
+ private _onVersionSelected(semver: string) {
+ let path = window.location.pathname;
+ const lastChar = path[path.length - 1];
+ if (_.isFinite(_.parseInt(lastChar))) {
+ const pathSections = path.split('/');
+ pathSections.pop();
+ path = pathSections.join('/');
+ }
+ const baseUrl = utils.getCurrentBaseUrl();
+ window.location.href = `${baseUrl}${path}/${semver}${window.location.hash}`;
+ }
}
diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts
index d35f77e943..308b4bb5ca 100644
--- a/packages/website/ts/utils/utils.ts
+++ b/packages/website/ts/utils/utils.ts
@@ -270,4 +270,10 @@ export const utils = {
window.onload = () => resolve();
});
},
+ getCurrentBaseUrl() {
+ const port = window.location.port;
+ const hasPort = !_.isUndefined(port);
+ const baseUrl = `https://${window.location.hostname}${hasPort ? `:${port}` : ''}`;
+ return baseUrl;
+ },
};