Skip to content

Commit 4422ce8

Browse files
eps1lonoliviertassinari
authored andcommitted
[docs] AppBar and Textfield demos in TypeScript (#13229)
* Squashed commit of the following: commit 2035e6daa1ceba1c78d3e8740af8d5f3066bc898 Author: Sebastian Silbermann <[email protected]> Date: Mon Nov 5 10:16:31 2018 +0100 [docs] Fix undefined raw js commit 9ab3761e49d8682530543f1e6808d46cd955f32a Author: Sebastian Silbermann <[email protected]> Date: Mon Nov 5 10:07:38 2018 +0100 [docs] Enable textfield ts demos commit 8271f5cff4b3f6fe31b564a3f98ed69d8c09f3d6 Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 30 11:58:29 2018 +0100 [docs] Port #13428 to typescript commit 8b808886235a3690b01335a5d3a6132209b87483 Author: Sebastian Silbermann <[email protected]> Date: Fri Oct 26 17:55:02 2018 +0200 [docs] Add typescript demos for TextField Takeaway: - inputProps, inputComponent is badly typed (needs generics though) - computed property keys support is bad in typescript commit 5ab9c988d259cd039e5b2735a47c1c89c9761eec Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 23 13:36:56 2018 +0200 [docs] Use esModuleInterop import conistently commit c9bca0824c0f81fe114f8976bc10464de94306b2 Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 23 13:35:32 2018 +0200 [docs] Fix IE 11 compat issues commit b4dd772ee990dd0f9a042a8721aa7a665ded7fce Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 23 13:33:44 2018 +0200 [docs] Remove dead code commit f0a23cffb7a8e2c4faf5c2b4182919efb74d4bdd Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 23 08:21:07 2018 +0200 [ci] Fix job order Running git diff after yarn build will exit with 1 because the size snapshot was updated. commit 114022bd6d1ac98af330f6e7b57ba03062d120ff Author: Sebastian Silbermann <[email protected]> Date: Mon Oct 22 21:32:54 2018 +0200 [docs] Disabled stackblitz for TS demos commit 7995d67cd09f08541f388124d535452054518d75 Author: Sebastian Silbermann <[email protected]> Date: Mon Oct 22 17:47:14 2018 +0200 [docs] Add guide about ts demos commit 0c65724f14c4de21ced8ce4e8ff91b2edce3b6d5 Author: Sebastian Silbermann <[email protected]> Date: Mon Oct 22 17:09:39 2018 +0200 [docs] Sync demo changes from 06967ec commit 7a0861d855d15bf281fde271e0028d0b1ba9dbb1 Author: Sebastian Silbermann <[email protected]> Date: Mon Oct 22 15:35:03 2018 +0200 [docs] Allow require default interop for ts demos Seems like codesandbox still has issues with this. Gonna investigate if we can fix this upstream commit c8a143e20735be14f692477fab40cd3d4a3040df Author: Sebastian Silbermann <[email protected]> Date: Mon Oct 22 15:34:10 2018 +0200 [docs] Support types for scoped packages commit 48a425d19a53e77fa97692980e364f503491a91b Author: Sebastian Silbermann <[email protected]> Date: Sat Oct 20 18:02:05 2018 +0200 [babel-plugin-unwrap-createStyles] Fix fixtures being transpiled with workspace config commit 03c1ac9d7575c9dc79e8253578dda60f39e33375 Author: Sebastian Silbermann <[email protected]> Date: Fri Oct 19 12:21:59 2018 +0200 [docs] Create ts specific codesandbox - needs babel plugin for synthetic default imports commit cdc393185a823bb684ff34be23f20d4897db8962 Author: Sebastian Silbermann <[email protected]> Date: Thu Oct 18 18:39:40 2018 +0200 [docs] Fire analytics event when clicking codeLanguage commit 6865f6488c27c1353cae108410d94a165343414b Author: Sebastian Silbermann <[email protected]> Date: Thu Oct 18 18:15:05 2018 +0200 [docs] Add ts version for all app bar demos - Fixes menu not closing in PrimarySearchAppBar - removes some dead code from undefined classnames commit a189a173a371e785916b8797283798e45d4743d8 Author: Sebastian Silbermann <[email protected]> Date: Thu Oct 18 17:12:44 2018 +0200 [ci] Check compiled ts demos are equal to js demos commit 95706fdaaa1b6a56da239250b515a36459c87b8b Author: Sebastian Silbermann <[email protected]> Date: Wed Oct 17 20:51:02 2018 +0200 [docs] Remove debug config commit a90c76a322104787837c1646fc400e84cdc77e6c Author: Sebastian Silbermann <[email protected]> Date: Wed Oct 17 20:48:56 2018 +0200 [docs] github link and copy code depending on selected code language commit fafa284f397e66b0075a29823debc1c8dbd6b1fb Author: Sebastian Silbermann <[email protected]> Date: Wed Oct 17 18:14:49 2018 +0200 [docs] Add feature flag for language switch Enabled on a per-component basis. commit 9ef68446d7e42347d30fc796d34f23f15eaf4405 Author: Sebastian Silbermann <[email protected]> Date: Wed Oct 17 18:10:20 2018 +0200 [docs] Add the ability to mark ts demos as outdated This should be used in-sync with ignored demos in transpilation. commit a7033f203278d6e462a016190790a3609aabded5 Author: Sebastian Silbermann <[email protected]> Date: Wed Oct 17 17:18:10 2018 +0200 [docs] Add the ability to ignore ts demos from transpilation This can be useful to defer syncing them upwards from js. commit e7c19cb1f264bf9ec9b6884650b4e3ad8e6942f8 Author: Sebastian Silbermann <[email protected]> Date: Wed Oct 17 16:22:36 2018 +0200 Fix formatting errors commit ea9a6de935394d0c61eff974a8575165ae0ed1aa Author: Sebastian Silbermann <[email protected]> Date: Wed Oct 17 10:33:23 2018 +0200 [docs] Disable ts switch if not ts version is available commit 5a58595c26108e8ccd18eacf3b16ae2ed40de0a5 Author: Sebastian Silbermann <[email protected]> Date: Wed Oct 17 09:19:53 2018 +0200 [docs] Remove global code language switch Revisit this if we reach critical mass on ts docs commit aecb12fdf96aa761e543ba284d55ffd11a7970f1 Author: Sebastian Silbermann <[email protected]> Date: Wed Oct 17 09:15:52 2018 +0200 [docs] Improve code language switch commit 0a587ec8b0f97dfc05352856f7dec1c081e5275e Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 16 23:37:40 2018 +0200 Fix CI errors commit 82921d138f21272cef11c040ea7a578584563120 Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 16 23:20:36 2018 +0200 [docs] Add local language switch and add language logos - color needs rework: it looks a little bit out of place, bad contrast commit 49861e54f5b5d2e54cac672c4f5a3377731e6255 Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 16 20:45:25 2018 +0200 [docs] Language switch via redux It's pretty slow at the app level. While it is nice to have ts permanently enabled while browsing docs a switch at demo level might be better suited. commit 6a06a060ad17f44dab0d1cc49996455b37f8a2fc Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 16 19:14:55 2018 +0200 [docs] Another whitespace fix attempt commit fffed851504e587f2abadd6353318eaab9791fdb Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 16 18:46:46 2018 +0200 [docs] revert to function declaration propTypes in typescript are to strict commit ccb62823cbbacb5da109eb5275277a4ebf797533 Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 16 18:32:38 2018 +0200 [core] Bump @types/react commit d3ac480d1966485b1c3d22672797110c26a82ef5 Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 16 18:25:06 2018 +0200 [babel-plugin-unwrap-createStyles] Fix lint errors commit 1998640e939bfb57e27c265c2e338ef6707bae5a Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 16 18:21:45 2018 +0200 [docs] Remove diff in trailing whitespace commit 912c2a8d060ff3de9a70eaefa62c011f2bdbc90d Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 16 18:20:13 2018 +0200 [docs] Write formatted js from ts demos commit 4dcd51f50252823ee5f40dd9e53bfd6821786d5f Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 16 17:28:08 2018 +0200 [core] Sync tslint with eslint concerning trailing-whitespace commit 05f3f3d78e333ed740f447a2e20724cc1624c363 Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 16 13:59:47 2018 +0200 [core] docuent babel-plugin vs. ts-transformer commit 691a036456486b4cea411d435392746ad714817d Author: Sebastian Silbermann <[email protected]> Date: Tue Oct 16 11:03:08 2018 +0200 [docs] Add babel plugin to unwrap createStyles calls This essentially strips them from the bundle commit a02ffd64a1defb4298030fd2d162c4a71c65b09a Author: Sebastian Silbermann <[email protected]> Date: Sat Oct 13 16:02:11 2018 +0200 Move ts files next to js files commit 32a301a8eb2d0ed5e3b902313d5895dabcfbca32 Author: Sebastian Silbermann <[email protected]> Date: Sat Oct 13 14:35:14 2018 +0200 Working example without type checking and bad folder structure * removed the babel-generator-prettier plugin See eps1lon#1 * removed the babel-generator-prettier plugin in favor of running prettier after building the docs * Restore yarn integrity fields * [core] use link protocol for babel-plugin-unwrap-createStyles * [babel-plugin-unwrap-createStyles] Improve code docs * [docs] Sync ts and js demos * [ci] Use proper docs:ts:check command * [docs] Improve TS demo workflow * [docs] Cleanup merge commit * [docs] Cleanup TS demo testing * [docs] Furhter merge commit cleanup * [docs} Fix codesandbox demos * [docs] remove unused lint directives * [docs] Add analytics event to source switches * [core] cleanup tslint diff * [babel-plugin-unwrapCreateStyles] Cleanup package.json * [docs] fix bundle size limit * remove blank line * remove blank lines * Update README.md * [docs] exit with non-zero if ts scripts fail * [docs] Fix failing TS script * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Revert "remove blank lines" Fixes build * [docs] Update Hooks / JS / TS icons, remove code icon * [docs] Format code * [docs] Port #14266 to TS * [docs] Port #14281 to TS * [docs] Port #14023 to TS * [docs] Adjust bundle size * WIP dropdown WIP ToggleButtons * Add a transition, highlight the correct toggle-button when preferred code style not available * Remove comment Tooltips * docs bundle size * [docs] Update contributing with updated formatting ts demo task * [docs] Remove commented code * [docs] Update outdated API docs * [docs] Remove unnecessary fragment * [docs] Replace string literals with enum values * [docs] Removed explicit property initialization
1 parent 5572b13 commit 4422ce8

Some content is hidden

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

68 files changed

+3506
-232
lines changed

.circleci/config.yml

+6
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,12 @@ jobs:
161161
- *restore_yarn_offline_mirror
162162
- *restore_yarn_cache
163163
- *install_js
164+
- run:
165+
name: Transpile TypeScript demos
166+
command: yarn docs:typescript:formatted
167+
- run:
168+
name: Are the compiled TypeScript demos equivalent to the JavaScript demos?
169+
command: git diff --exit-code
164170
- run:
165171
name: Can we generate the @material-ui/core build?
166172
command: cd packages/material-ui && yarn build

.eslintignore

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
/examples/create-react-app-with-flow/flow
77
/examples/create-react-app-with-flow/flow-typed
88
/examples/gatsby/public
9+
/packages/babel-plugin-unwrap-createStyles/test/__fixtures__/
910
/packages/material-ui-codemod/lib
1011
/packages/material-ui-codemod/src/*/*.test
1112
/packages/material-ui-codemod/src/*/*.test.js

.size-limit.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ module.exports = [
7474
name: 'The main docs bundle',
7575
webpack: false,
7676
path: main.path,
77-
limit: '191 KB',
77+
limit: '193 KB',
7878
},
7979
{
8080
name: 'The docs home page',

CONTRIBUTING.md

+26
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ We will only accept a pull request for which all tests pass. Make sure the follo
5050
- If API documentation is being changed in the source, `yarn docs:api` was run.
5151
- If prop types were changed, the TypeScript declarations were updated.
5252
- If TypeScript declarations were changed, `yarn typescript` passed.
53+
- If demos were changed, make sure `yarn docs:typescript:formatted` does not introduce changes.
54+
See [About TypeScript demos](#about-typescript-demos).
5355
- The PR title follows the pattern `[Component] Imperative commit message`. (See: [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/#imperative) for a great explanation)
5456

5557
## Getting started
@@ -80,6 +82,8 @@ yarn
8082
yarn docs:dev
8183
```
8284
You can now access the documentation site [locally](http://localhost:3000).
85+
Changes to the docs will hot reload the site. If you make changes to TypeScript files
86+
in the docs run `yarn docs:typescript --watch` in a separate terminal.
8387

8488
Test coverage is limited at present, but where possible, please add tests for any changes you make. Tests can be run with `yarn test`.
8589

@@ -118,6 +122,14 @@ docs/src/pages/demos/buttons/
118122
```
119123
And let's give it a name: `SuperButtons.js`.
120124

125+
We try to also document how to use this library with TypeScript. If you are familiar with
126+
that language try writing that demo in TypeScript in a *.tsx file. When you're done
127+
run `yarn docs:typescript:formatted` to automatically add a JavaScript version.
128+
129+
Apart from the inherent pros and cons of TypeScript the demos are also used to test our
130+
type declarations. This helps a lot in catching regressions when updating our type
131+
declarations.
132+
121133
#### 2. Edit the page Markdown file.
122134

123135
The Markdown file is the source for the website documentation. So, whatever you wrote there will be reflected on the website.
@@ -155,6 +167,20 @@ Then, you will need to add the following code:
155167

156168
In case you missed something, [we have a real example that can be used as a summary report]((https://github.com/mui-org/material-ui/pull/8922/files)).
157169

170+
### About TypeScript demos
171+
172+
To help people use this library with TypeScript we try to provide equivalent demos
173+
in TypeScript.
174+
175+
Changing demos in JavaScript requires a manual update of the TypeScript
176+
version. If you are not familiar with this language you can add the filepath
177+
of the TS demo to `docs/ts-demo-ignore.json`. See `docs/babel.config.ts.js` for more
178+
information. Otherwise our CI will fail the `test_build` job.
179+
A contributor can later update the TypeScript version of that demo.
180+
181+
If you are already familiar with TypeScript you can simply write the demo in TypeScript.
182+
`yarn docs:typescript:formatted` will transpile it down to JavaScript.
183+
158184
## How do I use my local distribution of material-ui in any project?
159185

160186
Sometimes it is good to test your changes in a real world scenario, in order to do that you can install your local distribution of Material-UI in any project with [yarn link](https://yarnpkg.com/lang/en/docs/cli/link/).

docs/babel.config.ts.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
const path = require('path');
2+
const ignoredDemos = require('./ts-demo-ignore.json');
3+
4+
/**
5+
* babel config to transpile tsx demos to js
6+
*
7+
* Can be used to spot differences between ts and js demos which might indicate that they
8+
* do different things at runtime.
9+
*
10+
* Demos listed in ts-demo-ignore are not transpiled. Their path should be relative
11+
* to `${workspaceRoot}/docs/src/pages/demos`.
12+
*/
13+
14+
const workspaceRoot = path.join(__dirname, '../');
15+
const ignore = ignoredDemos.map(demoPath =>
16+
path.join(workspaceRoot, 'docs/src/pages/demos', `${demoPath}.tsx`),
17+
);
18+
19+
module.exports = {
20+
presets: ['@babel/preset-typescript'],
21+
plugins: ['unwrap-createStyles'],
22+
ignore,
23+
generatorOpts: { retainLines: true },
24+
};

docs/scripts/formattedTSDemos.js

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
* Transpiles and formats TS demos.
3+
* Can be used to verify that JS and TS demos are equivalent. No introduced change
4+
* would indicate equivalence.
5+
*/
6+
const childProcess = require('child_process');
7+
const fse = require('fs-extra');
8+
const path = require('path');
9+
const prettier = require('prettier');
10+
const util = require('util');
11+
12+
const exec = util.promisify(childProcess.exec);
13+
14+
async function getUnstagedGitFiles() {
15+
const { stdout } = await exec('git diff --name-only');
16+
const list = stdout.trim();
17+
18+
if (list === '') {
19+
// "".split(" ") => [""]
20+
return [];
21+
}
22+
23+
return list.split('\n');
24+
}
25+
26+
function fixBabelGeneratorIssues(source) {
27+
return source.replace(/,\n\n/g, ',\n');
28+
}
29+
30+
exec('yarn docs:typescript')
31+
.then(() => {
32+
const prettierConfigPath = path.join(__dirname, '../../prettier.config.js');
33+
const prettierConfig = prettier.resolveConfig(process.cwd(), { config: prettierConfigPath });
34+
35+
return Promise.all([getUnstagedGitFiles(), prettierConfig]);
36+
})
37+
.then(([changedDemos, prettierConfig]) =>
38+
Promise.all(
39+
changedDemos.map(filename => {
40+
const filepath = path.join(process.cwd(), filename);
41+
42+
return fse.readFile(filepath).then(source => {
43+
const prettified = prettier.format(source.toString(), { ...prettierConfig, filepath });
44+
const formatted = fixBabelGeneratorIssues(prettified);
45+
46+
return fse.writeFile(filepath, formatted);
47+
});
48+
}),
49+
),
50+
)
51+
.catch(err => {
52+
// eslint-disable-next-line no-console
53+
console.error(err);
54+
process.exit(1);
55+
});

0 commit comments

Comments
 (0)