Skip to content
This repository was archived by the owner on Mar 10, 2023. It is now read-only.

Commit fce89ba

Browse files
authored
AFP-234 Remove support for using JSX without React
* AFP-234: Enforce React to be imported for all components * AFP-234: Import React in generated code * AFP-234: Add React imports to remaining files and test fixtures * Add changeset * AFP-234: Remove @emotion/core usages from components as it breaks things * AFP-234: Add comment explaining disabled rule * Enable eslint rule again
1 parent 3f83228 commit fce89ba

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+231
-35
lines changed

.changeset/4efba9dc/changes.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"releases": [{ "name": "@brisk-docs/website", "type": "minor" }],
3+
"dependents": []
4+
}

.changeset/4efba9dc/changes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Remove support for using JSX without importing React in the website.

.eslintrc

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,41 @@
11
{
2-
"parser": "babel-eslint",
3-
"extends": [
4-
"airbnb",
5-
"prettier",
6-
"prettier/flowtype",
7-
"prettier/react",
8-
"plugin:jest/recommended"
2+
"parser": "babel-eslint",
3+
"extends": [
4+
"airbnb",
5+
"prettier",
6+
"prettier/flowtype",
7+
"prettier/react",
8+
"plugin:jest/recommended"
9+
],
10+
"plugins": ["emotion"],
11+
"rules": {
12+
"emotion/jsx-import": "error",
13+
"react/jsx-filename-extension": "off",
14+
"react/require-default-props": "off",
15+
"jsx-a11y/anchor-is-valid": [
16+
"error",
17+
{
18+
"components": ["Link"],
19+
"specialLink": ["hrefLeft", "hrefRight"],
20+
"aspects": ["invalidHref", "preferButton"]
21+
}
922
],
10-
"plugins": ["emotion"],
11-
"rules": {
12-
"emotion/jsx-import": "error",
13-
"react/jsx-filename-extension": "off",
14-
"react/react-in-jsx-scope": "off",
15-
"react/require-default-props": "off",
16-
"jsx-a11y/anchor-is-valid": "off",
17-
"import/extensions": ["error", "never", { "css": "ignorePackages", "json": "always" }],
18-
"react/sort-comp": "off"
23+
"import/extensions": [
24+
"error",
25+
"never",
26+
{ "css": "ignorePackages", "json": "always" }
27+
],
28+
"react/sort-comp": "off"
29+
},
30+
"settings": {
31+
"import/parsers": {
32+
"@typescript-eslint/parser": [".ts", ".tsx"]
1933
},
20-
"settings": {
21-
"import/parsers": {
22-
"@typescript-eslint/parser": [".ts", ".tsx"]
23-
},
24-
"import/resolver": {
25-
// use <root>/path/to/folder/tsconfig.json
26-
"typescript": {
27-
"directory": "./packages/react-changelogs/tsconfig.json"
28-
}
29-
}
34+
"import/resolver": {
35+
// use <root>/path/to/folder/tsconfig.json
36+
"typescript": {
37+
"directory": "./packages/react-changelogs/tsconfig.json"
38+
}
3039
}
40+
}
3141
}

packages/website/__fixtures__/simple-mock-packages/packages/mock-package1/examples/example1.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
const name = 'Example 1 page';
24
const Example1 = () => <h1>Hello, {name}</h1>;
35

packages/website/__fixtures__/simple-mock-packages/packages/mock-package1/examples/example2.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
const name = 'Example 2 page';
24
const Example2 = () => <h1>Hello, {name}</h1>;
35

packages/website/__fixtures__/simple-mock-packages/packages/mock-package1/examples/example3.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
const name = 'Example 3 page';
24
const Example3 = () => <h1>Hello, {name}</h1>;
35

packages/website/__fixtures__/simple-mock-packages/packages/mock-package1/src/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
const name = 'Test Package 1';
24
const Element = <h1>Hello, {name}</h1>;
35

packages/website/__fixtures__/simple-mock-packages/packages/mock-package2/examples/example1.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
const name = 'Example 1 package 2';
24
const Example1 = () => <h1>Hello, {name}</h1>;
35

packages/website/__fixtures__/simple-mock-packages/packages/mock-package2/examples/example2.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
const name = 'Example 2 package 2';
24
const Example2 = () => <h1>Hello, {name}</h1>;
35

packages/website/__fixtures__/simple-mock-packages/packages/mock-package2/examples/example3.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
const name = 'Example 3 package 2';
24
const Example3 = () => <h1>Hello, {name}</h1>;
35

packages/website/__fixtures__/simple-mock-packages/packages/mock-package2/src/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
const name = 'Test Package 2';
24
const Element = <h1>Hello, {name}</h1>;
35

packages/website/__fixtures__/simple-mock-packages/packages/mock-package3/examples/example1.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
const name = 'Example 1 package3';
24
const Example1 = () => <h1>Hello, {name}</h1>;
35

packages/website/__fixtures__/simple-mock-packages/packages/mock-package3/examples/example2.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
const name = 'Example 2 package3';
24
const Example2 = () => <h1>Hello, {name}</h1>;
35

packages/website/__fixtures__/simple-mock-packages/packages/mock-package3/examples/example3.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
const name = 'Example 3 package3';
24
const Example3 = () => <h1>Hello, {name}</h1>;
35

packages/website/__fixtures__/simple-mock-packages/packages/mock-package3/src/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
const name = 'Test Package 1';
24
const Element = <h1>Hello, {name}</h1>;
35

packages/website/babel.config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module.exports = {
2-
presets: ['next/babel', '@babel/typescript'],
2+
presets: ['@babel/env', '@babel/preset-react', '@babel/preset-typescript'],
33
plugins: [
44
'emotion',
55
[
@@ -13,5 +13,6 @@ module.exports = {
1313
'transform-flow-strip-types',
1414
'@babel/proposal-class-properties',
1515
'@babel/proposal-object-rest-spread',
16+
'@babel/transform-runtime',
1617
],
1718
};

packages/website/bin/page-generator/templates/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const basicPageTemplate = (
1717
) => {
1818
if (!componentPath) {
1919
return outdent`
20+
import React from 'react';
2021
import Wrapper from '${wrapperPath}';
2122
import PageTitle from '${pageTitlePath}'
2223
@@ -30,6 +31,7 @@ const basicPageTemplate = (
3031
}
3132

3233
return outdent`
34+
import React from 'react';
3335
import Component from '${componentPath}';
3436
import Wrapper from '${wrapperPath}';
3537
import PageTitle from '${pageTitlePath}'
@@ -51,6 +53,7 @@ const exampleTemplate = (
5153
data = {},
5254
title = '',
5355
) => outdent`
56+
import React from 'react';
5457
import Component from '${componentPath}';
5558
import fileContents from '!!raw-loader!${componentPath}';
5659
@@ -68,6 +71,7 @@ const exampleTemplate = (
6871
`;
6972

7073
const rawTemplate = componentPath => outdent`
74+
import React from 'react';
7175
import Component from '${componentPath}'
7276
7377
export default () => <Component />
@@ -79,6 +83,7 @@ const basicNonComponentTemplate = (
7983
type,
8084
title = '',
8185
) => outdent`
86+
import React from 'react';
8287
import Wrapper from '${wrapperPath}';
8388
import PageTitle from '${pageTitlePath}'
8489
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
import { createTempDir } from 'jest-fixtures';
2+
import path from 'path';
3+
import fse from 'fs-extra';
4+
5+
import * as generators from './index';
6+
7+
const assertImportsReact = source => {
8+
expect(source).toMatch(/^import React from 'react';$/m);
9+
};
10+
11+
describe('Page generators', () => {
12+
let cwd;
13+
let pagesPath;
14+
let wrappersPath;
15+
16+
const getOutput = filename => {
17+
const outputPath = path.join(pagesPath, filename);
18+
return fse.readFileSync(outputPath, { encoding: 'utf-8' });
19+
};
20+
21+
beforeEach(async () => {
22+
cwd = await createTempDir();
23+
pagesPath = path.join(cwd, 'pages');
24+
wrappersPath = path.join(cwd, 'wrappers');
25+
});
26+
27+
it('creates js for a package home page', () => {
28+
generators.generateHomePage(
29+
'output.js',
30+
path.join(cwd, 'README.md'),
31+
{},
32+
{ wrappersPath, pagesPath },
33+
);
34+
35+
const output = getOutput('output.js');
36+
37+
assertImportsReact(output);
38+
});
39+
40+
it('creates js for a package doc page', () => {
41+
generators.generatePackageDocPage(
42+
'output.js',
43+
path.join(cwd, 'README.md'),
44+
{},
45+
{ wrappersPath, pagesPath },
46+
);
47+
48+
const output = getOutput('output.js');
49+
50+
assertImportsReact(output);
51+
});
52+
53+
it('creates js for a package example pages', () => {
54+
generators.generateExamplePage(
55+
'output.js',
56+
'output-raw.js',
57+
path.join(cwd, 'example.js'),
58+
{},
59+
{ wrappersPath, pagesPath },
60+
);
61+
62+
const output = getOutput('output.js');
63+
64+
const outputRaw = getOutput('output-raw.js');
65+
66+
assertImportsReact(output);
67+
68+
assertImportsReact(outputRaw);
69+
});
70+
71+
it('creates js for a docs home page', () => {
72+
generators.generateDocsHomePage(
73+
'output.js',
74+
{},
75+
{ wrappersPath, pagesPath },
76+
);
77+
78+
const output = getOutput('output.js');
79+
80+
assertImportsReact(output);
81+
});
82+
83+
it('creates js for an examples home page', () => {
84+
generators.generateExamplesHomePage(
85+
'output.js',
86+
{},
87+
{ wrappersPath, pagesPath },
88+
);
89+
90+
const output = getOutput('output.js');
91+
92+
assertImportsReact(output);
93+
});
94+
95+
it('creates js for project doc page', () => {
96+
generators.generateProjectDocPage(
97+
'output.js',
98+
path.join(cwd, 'README.md'),
99+
{},
100+
{ wrappersPath, pagesPath },
101+
);
102+
103+
const output = getOutput('output.js');
104+
105+
assertImportsReact(output);
106+
});
107+
});

packages/website/components/link-button.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Passes all props other than component directly into `@atlaskit/button`.
66
See the [@atlaskit/button](https://atlaskit.atlassian.com/packages/core/button) docs for
77
the options available to you.
88
*/
9+
import React from 'react';
910

1011
import Button from '@atlaskit/button';
1112
import Link from 'next/link';

packages/website/components/mdx/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import React from 'react';
12
import Heading from './Heading';
23
import Link from '../switch-link';
34

packages/website/components/navigation-wrapper.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component } from 'react';
1+
import React, { Component } from 'react';
22
import PropTypes from 'prop-types';
33
import DocumentsIcon from '@atlaskit/icon/glyph/documents';
44
import SearchIcon from '@atlaskit/icon/glyph/search';

packages/website/components/navigation/all-packages-nav-content.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import React from 'react';
12
import {
23
ContainerHeader,
34
HeaderSection,
@@ -9,9 +10,6 @@ import {
910
} from '@atlaskit/navigation-next';
1011
import { gridSize as gridSizeFn } from '@atlaskit/theme';
1112

12-
/** @jsx jsx */
13-
import { jsx } from '@emotion/core';
14-
1513
import * as PropTypes from 'prop-types';
1614
import titleCase from 'title-case';
1715
import LinkWithRouter from './link-with-router';
@@ -24,6 +22,10 @@ const AllPackagesNavContent = ({ data }) => (
2422
<HeaderSection>
2523
{({ css }) => (
2624
<div
25+
// This works because navigation-next is importing
26+
// an old version of emotion. It also prevents us from
27+
// using the jsx import from @emotion/core
28+
// eslint-disable-next-line emotion/jsx-import
2729
css={{
2830
...css,
2931
paddingTop: `${gridSize * 2.5}px`,

packages/website/components/navigation/docs-nav-content.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
import {
24
BackItem,
35
MenuSection,

packages/website/components/navigation/link-component.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Component that can be used as the component prop in nav items
22

3-
import { Component } from 'react';
3+
import React, { Component } from 'react';
44
import Link from 'next/link';
55
import * as PropTypes from 'prop-types';
66

packages/website/components/navigation/link-with-router.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import React from 'react';
12
import * as PropTypes from 'prop-types';
23
import { withRouter } from 'next/router';
34
import { Item } from '@atlaskit/navigation-next';

packages/website/components/navigation/package-nav-content.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import React from 'react';
2+
13
import {
24
MenuSection,
35
BackItem,

packages/website/components/navigation/search-drawer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component } from 'react';
1+
import React, { Component } from 'react';
22
import PropTypes from 'prop-types';
33
import {
44
QuickSearch,

packages/website/components/package-metadata.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import React from 'react';
12
import * as PropTypes from 'prop-types';
23
import styled from '@emotion/styled';
34
import GitUrlParse from 'git-url-parse';
@@ -88,7 +89,6 @@ const PackageMetaData = ({ id, version, maintainers, repository }) => (
8889
<p style={{ margin: '0' }}>{maintainers.join(', ')}</p>
8990
</MetaDataEntry>
9091
)}
91-
9292
<RepositoryLink repository={repository} />
9393
</MetaDataWrapper>
9494
</div>

0 commit comments

Comments
 (0)