Skip to content
This repository was archived by the owner on Nov 28, 2022. It is now read-only.

Commit 097a5e8

Browse files
committed
Create baseUrl context and revert prop passing in #176
1 parent 825f82d commit 097a5e8

File tree

7 files changed

+43
-64
lines changed

7 files changed

+43
-64
lines changed

packages/api-explorer/src/Doc.jsx

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,7 @@ class Doc extends React.Component {
132132
</div>
133133
)}
134134

135-
<Content
136-
baseUrl={this.props.baseUrl}
137-
body={doc.body}
138-
flags={this.props.flags}
139-
isThreeColumn
140-
/>
135+
<Content body={doc.body} flags={this.props.flags} isThreeColumn />
141136
</Fragment>
142137
);
143138
}
@@ -155,12 +150,7 @@ class Doc extends React.Component {
155150
{this.renderParams()}
156151
</Fragment>
157152
)}
158-
<Content
159-
baseUrl={this.props.baseUrl}
160-
body={doc.body}
161-
flags={this.props.flags}
162-
isThreeColumn="left"
163-
/>
153+
<Content body={doc.body} flags={this.props.flags} isThreeColumn="left" />
164154
</div>
165155

166156
<div className="hub-reference-right">
@@ -174,12 +164,7 @@ class Doc extends React.Component {
174164
<div className="hub-reference-right switcher">
175165
{this.renderResponseSchema('dark')}
176166
</div>
177-
<Content
178-
baseUrl={this.props.baseUrl}
179-
body={doc.body}
180-
flags={this.props.flags}
181-
isThreeColumn="right"
182-
/>
167+
<Content body={doc.body} flags={this.props.flags} isThreeColumn="right" />
183168
</div>
184169
</Fragment>
185170
</div>

packages/api-explorer/src/block-types/Content.jsx

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ const PropTypes = require('prop-types');
1212

1313
const parseBlocks = require('../lib/parse-magic-blocks');
1414

15-
const Loop = ({ content, column, flags, baseUrl }) => {
15+
const Loop = ({ content, column, flags }) => {
1616
const elements = content.map((block, key) => {
17-
const props = { key, block, flags, baseUrl };
17+
const props = { key, block, flags };
1818
switch (block.type) {
1919
case 'textarea':
2020
// eslint-disable-next-line react/no-array-index-key
@@ -66,12 +66,12 @@ const Content = props => {
6666
<div className="hub-reference-section">
6767
<div className="hub-reference-left">
6868
<div className="content-body">
69-
<Loop content={left} column="left" flags={props.flags} baseUrl={props.baseUrl} />
69+
<Loop content={left} column="left" flags={props.flags} />
7070
</div>
7171
</div>
7272
<div className="hub-reference-right">
7373
<div className="content-body">
74-
<Loop content={right} column="right" flags={props.flags} baseUrl={props.baseUrl} />
74+
<Loop content={right} column="right" flags={props.flags} />
7575
</div>
7676
</div>
7777
</div>
@@ -83,7 +83,6 @@ const Content = props => {
8383
content={isThreeColumn === 'left' ? left : right}
8484
flags={props.flags}
8585
column={isThreeColumn}
86-
baseUrl={props.baseUrl}
8786
/>
8887
);
8988
};
@@ -98,27 +97,23 @@ Loop.propTypes = {
9897
flags: PropTypes.shape({
9998
correctnewlines: PropTypes.bool,
10099
}).isRequired,
101-
baseUrl: PropTypes.string,
102100
};
103101

104102
Loop.defaultProps = {
105103
column: 'left',
106104
flags: {},
107-
baseUrl: '/',
108105
};
109106

110107
Content.propTypes = {
111108
isThreeColumn: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
112109
body: PropTypes.string,
113110
flags: PropTypes.shape({}),
114-
baseUrl: PropTypes.string,
115111
};
116112

117113
Content.defaultProps = {
118114
isThreeColumn: true,
119115
body: '',
120116
flags: {},
121-
baseUrl: '/',
122117
};
123118

124119
module.exports = Content;

packages/api-explorer/src/block-types/TextArea.jsx

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,18 @@ const React = require('react');
22
const PropTypes = require('prop-types');
33
const markdown = require('@readme/markdown');
44

5-
const Textarea = ({ block, flags, baseUrl }) => {
6-
const combined = Object.assign(
7-
{
8-
baseUrl,
9-
},
10-
flags,
11-
);
12-
13-
return <div className="magic-block-textarea">{markdown(block.text, combined)}</div>;
5+
const Textarea = ({ block, flags }) => {
6+
return <div className="magic-block-textarea">{markdown(block.text, flags)}</div>;
147
};
158

169
Textarea.propTypes = {
1710
block: PropTypes.shape({
1811
text: PropTypes.string.isRequired,
1912
}).isRequired,
2013
flags: PropTypes.shape({}),
21-
baseUrl: PropTypes.string,
2214
};
2315

2416
Textarea.defaultProps = {
2517
flags: {},
26-
baseUrl: '/',
2718
};
2819
module.exports = Textarea;

packages/api-explorer/src/index.jsx

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const extensions = require('@readme/oas-extensions');
55
const VariablesContext = require('@readme/variable/contexts/Variables');
66
const OauthContext = require('@readme/variable/contexts/Oauth');
77
const GlossaryTermsContext = require('@readme/markdown/contexts/GlossaryTerms');
8+
const BaseUrlContext = require('@readme/markdown/contexts/BaseUrl');
89
const SelectedAppContext = require('@readme/variable/contexts/SelectedApp');
910

1011
const ErrorBoundary = require('./ErrorBoundary');
@@ -82,25 +83,27 @@ class ApiExplorer extends React.Component {
8283
<VariablesContext.Provider value={this.props.variables}>
8384
<OauthContext.Provider value={this.props.oauth}>
8485
<GlossaryTermsContext.Provider value={this.props.glossaryTerms}>
85-
<SelectedAppContext.Provider value={this.state.selectedApp}>
86-
<Doc
87-
key={doc._id}
88-
doc={doc}
89-
oas={this.getOas(doc)}
90-
setLanguage={this.setLanguage}
91-
flags={this.props.flags}
92-
user={this.props.variables.user}
93-
Logs={this.props.Logs}
94-
baseUrl={this.props.baseUrl.replace(/\/$/, '')}
95-
appearance={this.props.appearance}
96-
language={this.state.language}
97-
oauth={this.props.oauth}
98-
suggestedEdits={this.props.suggestedEdits}
99-
tryItMetrics={this.props.tryItMetrics}
100-
auth={this.state.auth}
101-
onAuthChange={this.onAuthChange}
102-
/>
103-
</SelectedAppContext.Provider>
86+
<BaseUrlContext.Provider value={this.props.baseUrl.replace(/\/$/, '')}>
87+
<SelectedAppContext.Provider value={this.state.selectedApp}>
88+
<Doc
89+
key={doc._id}
90+
doc={doc}
91+
oas={this.getOas(doc)}
92+
setLanguage={this.setLanguage}
93+
flags={this.props.flags}
94+
user={this.props.variables.user}
95+
Logs={this.props.Logs}
96+
baseUrl={this.props.baseUrl.replace(/\/$/, '')}
97+
appearance={this.props.appearance}
98+
language={this.state.language}
99+
oauth={this.props.oauth}
100+
suggestedEdits={this.props.suggestedEdits}
101+
tryItMetrics={this.props.tryItMetrics}
102+
auth={this.state.auth}
103+
onAuthChange={this.onAuthChange}
104+
/>
105+
</SelectedAppContext.Provider>
106+
</BaseUrlContext.Provider>
104107
</GlossaryTermsContext.Provider>
105108
</OauthContext.Provider>
106109
</VariablesContext.Provider>

packages/markdown/components/Anchor.jsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
const React = require('react');
22
const PropTypes = require('prop-types');
33

4+
const BaseUrlContext = require('../contexts/BaseUrl');
5+
46
// Nabbed from here:
57
// https://github.com/readmeio/api-explorer/blob/0dedafcf71102feedaa4145040d3f57d79d95752/packages/api-explorer/src/lib/markdown/renderer.js#L52
68
function getHref(href, baseUrl) {
@@ -57,13 +59,13 @@ Anchor.defaultProps = {
5759
baseUrl: '/',
5860
};
5961

60-
function createAnchor(baseUrl) {
61-
return props => <Anchor baseUrl={baseUrl} {...props} />;
62-
}
63-
64-
module.exports = (options, sanitizeSchema) => {
62+
module.exports = (sanitizeSchema) => {
6563
// This is for our custom link formats
6664
sanitizeSchema.protocols.href.push('doc', 'ref', 'blog', 'page');
6765

68-
return createAnchor(options);
66+
return props => (
67+
<BaseUrlContext.Consumer>
68+
{baseUrl => <Anchor baseUrl={baseUrl} {...props} />}
69+
</BaseUrlContext.Consumer>
70+
);
6971
};

packages/markdown/contexts/BaseUrl.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const React = require('react');
2+
3+
module.exports = React.createContext('/');

packages/markdown/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ module.exports = function markdown(text, opts = {}) {
6464
h4: heading('h4', sanitize),
6565
h5: heading('h5', sanitize),
6666
h6: heading('h6', sanitize),
67-
a: anchor(opts.baseUrl, sanitize),
67+
a: anchor(sanitize),
6868
code: code(sanitize),
6969
// Remove enclosing <div>
7070
// https://github.com/mapbox/remark-react/issues/54

0 commit comments

Comments
 (0)