Skip to content

Commit 91ff8ef

Browse files
add url persistent selection
1 parent 19ed3c9 commit 91ff8ef

File tree

3 files changed

+32
-15
lines changed

3 files changed

+32
-15
lines changed

src/registry/Registry.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import GridLayout from '../layouts/GridLayout';
66
class Registry {
77
_componentsDemo = {};
88

9-
registerAsGrid(name, instancesWithDescription) {
10-
this._componentsDemo[name] = (
11-
<ComponentDemo name={name}
9+
registerAsGrid(demoName, instancesWithDescription) {
10+
this._componentsDemo[demoName] = (
11+
<ComponentDemo name={demoName}
1212
layoutComponent={GridLayout}
1313
instancesWithDescription={instancesWithDescription}/>
1414
);
@@ -18,7 +18,7 @@ class Registry {
1818
return this._componentsDemo[name];
1919
}
2020

21-
get names() {
21+
get demoNames() {
2222
return Object.keys(this._componentsDemo);
2323
}
2424
}

src/viewer/ComponentsViewer.css

+7-4
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,23 @@ body {
1313

1414
.components-viewer .toc {
1515
flex: 0 0 350px;
16-
border-right: 1px solid #eee;
16+
border-right: 1px solid #4F628E;
17+
background-color: #2E4272;
1718
}
1819

1920
.components-viewer .toc .name {
2021
padding: 15px;
21-
border-bottom: 1px solid #eee;
22+
border-bottom: 1px solid #7887AB;
23+
color: #7887AB;
2224
cursor: pointer;
2325
}
2426

2527
.components-viewer .toc .name.selected {
26-
background-color: #eee;
28+
border-left: 2px solid #fff;
29+
color: #fff;
2730
}
2831

2932
.components-viewer .preview {
3033
flex: 1;
31-
margin: 10px;
34+
margin: 10px 10px 10px 20px;
3235
}

src/viewer/ComponentsViewer.js

+21-7
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,38 @@ import React, {Component} from 'react';
22

33
import './ComponentsViewer.css';
44

5+
const queryParamNames = {
6+
demoName: "demo"
7+
};
8+
59
class ComponentsViewer extends Component {
610
constructor(props) {
711
super(props);
812
const {registry} = this.props;
913

10-
this.state = {selectedName: registry.names[0]};
14+
this.state = {selectedDemoName: registry.demoNames[0]};
1115
}
1216

13-
selectComponent = (name) => this.setState({selectedName: name});
17+
selectDemo = (demoName) => {
18+
this.setState({selectedDemoName: demoName});
19+
window.history.pushState({}, null, `?${queryParamNames.demoName}=` + demoName);
20+
};
1421

1522
render() {
1623
const {registry} = this.props;
17-
const {selectedName} = this.state;
24+
const {selectedDemoName} = this.state;
1825

19-
const componentsDemo = registry.findComponentsDemoByName(selectedName);
26+
const componentsDemo = registry.findComponentsDemoByName(selectedDemoName);
2027

2128
return (
2229
<div className="components-viewer">
2330
<div className="toc">
24-
{registry.names.map(name => {
25-
const isSelected = selectedName === name;
31+
{registry.demoNames.map(name => {
32+
const isSelected = selectedDemoName === name;
2633
const className = "name" + (isSelected ? " selected" : "");
2734

2835
return (
29-
<div key={name} className={className} onClick={() => this.selectComponent(name)}>
36+
<div key={name} className={className} onClick={() => this.selectDemo(name)}>
3037
{name}
3138
</div>
3239
)
@@ -40,6 +47,13 @@ class ComponentsViewer extends Component {
4047
)
4148
}
4249

50+
componentDidMount() {
51+
const searchParams = new URLSearchParams(document.location.search);
52+
const selected = searchParams.get(queryParamNames.demoName);
53+
if (selected) {
54+
this.setState({selectedDemoName: selected});
55+
}
56+
}
4357
}
4458

4559
export default ComponentsViewer;

0 commit comments

Comments
 (0)