Skip to content

Commit

Permalink
[docs] Polish TypeScript
Browse files Browse the repository at this point in the history
  • Loading branch information
oliviertassinari committed Aug 16, 2020
1 parent 1bac8f6 commit 5c1d75b
Show file tree
Hide file tree
Showing 16 changed files with 188 additions and 203 deletions.
17 changes: 17 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,20 @@ jobs:
# hardcoded in karma-webpack
path: /tmp/_karma_webpack_
destination: artifact-file
test_types:
<<: *defaults
steps:
- checkout
- install_js
- run:
name: Transpile TypeScript demos
command: yarn docs:typescript:formatted --disable-cache
- run:
name: '`yarn docs:typescript:formatted` changes committed?'
command: git add -A && git diff --exit-code --staged
- run:
name: Tests TypeScript definitions
command: yarn typescript
workflows:
version: 2
pipeline:
Expand All @@ -117,3 +131,6 @@ workflows:
- test_browser:
requires:
- checkout
- test_types:
requires:
- checkout
1 change: 0 additions & 1 deletion docs/babel.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ const alias = {
docs: './node_modules/@material-ui/monorepo/docs',
docsx: './',
modules: './node_modules/@material-ui/monorepo/modules',
// 'typescript-to-proptypes': './node_modules/@material-ui/monorepo/packages/typescript-to-proptypes',
};

const { version: transformRuntimeVersion } = fse.readJSONSync(
Expand Down
5 changes: 3 additions & 2 deletions docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"icons": "rimraf public/static/icons/* && node ./scripts/buildIcons.js",
"start": "next start",
"typescript": "tsc -p tsconfig.json",
"typescript:transpile": "yarn babel-node -i '/node_modules/(?!@material-ui)/' scripts/formattedTSDemos",
"typescript:transpile": "node scripts/formattedTSDemos",
"typescript:transpile:dev": "node scripts/formattedTSDemos --watch"
},
"dependencies": {
Expand Down Expand Up @@ -113,6 +113,7 @@
"@babel/preset-typescript": "^7.7.4",
"cpy-cli": "^3.0.0",
"cross-fetch": "^3.0.5",
"gm": "^1.23.0"
"gm": "^1.23.0",
"typescript-to-proptypes": "^2.1.0"
}
}
27 changes: 14 additions & 13 deletions docs/scripts/formattedTSDemos.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,30 @@ const fse = require('fs-extra');
const path = require('path');
const babel = require('@babel/core');
const prettier = require('prettier');
const typescriptToProptypes = require('@material-ui/monorepo/packages/typescript-to-proptypes/src');
const typescriptToProptypes = require('typescript-to-proptypes');
const yargs = require('yargs');
const { fixBabelGeneratorIssues, fixLineEndings } = require('./helpers');

const tsConfig = typescriptToProptypes.loadConfig(path.resolve(__dirname, '../tsconfig.json'));

const unwrap = babel.createConfigItem(
require('../node_modules/@material-ui/monorepo/packages/babel-plugin-unwrap-createstyles'),
);

const babelConfig = {
presets: ['@babel/preset-typescript'],
plugins: ['babel-plugin-unwrap-createstyles'],
plugins: [unwrap],
generatorOpts: { retainLines: true },
babelrc: false,
configFile: false,
};

const workspaceRoot = path.join(__dirname, '../../');

const prettierConfig = prettier.resolveConfig.sync(process.cwd(), {
config: path.join(workspaceRoot, 'prettier.config.js'),
});

async function getFiles(root) {
const files = [];

Expand Down Expand Up @@ -90,18 +98,11 @@ async function transpileFile(tsxPath, program, ignoreCache = false) {
});
const codeWithPropTypes = typescriptToProptypes.inject(propTypesAST, code);

const prettierConfig = prettier.resolveConfig.sync(jsPath, {
config: path.join(workspaceRoot, 'prettier.config.js'),
});
const prettierFormat = (jsSource) =>
prettier.format(jsSource, { ...prettierConfig, filepath: jsPath });

const prettified = prettierFormat(codeWithPropTypes);
const prettified = prettier.format(codeWithPropTypes, { ...prettierConfig, filepath: tsxPath });
const formatted = fixBabelGeneratorIssues(prettified);
const correctedLineEndings = fixLineEndings(source, formatted);

// removed blank lines change potential formatting
await fse.writeFile(jsPath, prettierFormat(correctedLineEndings));
await fse.writeFile(jsPath, correctedLineEndings);
return TranspileResult.Success;
} catch (err) {
console.error('Something went wrong transpiling %s\n%s\n', tsxPath, err);
Expand All @@ -114,7 +115,7 @@ async function main(argv) {

const tsxFiles = await getFiles(path.join(workspaceRoot, 'docs/src/pages'));

const program = typescriptToProptypes.createTSProgram(tsxFiles, tsConfig);
const program = typescriptToProptypes.createProgram(tsxFiles, tsConfig);

let successful = 0;
let failed = 0;
Expand Down Expand Up @@ -174,7 +175,7 @@ async function main(argv) {
yargs
.command({
command: '$0',
description: 'transpile TypeScript demos',
description: 'transpile typescript demos',
builder: (command) => {
return command
.option('watch', {
Expand Down
161 changes: 18 additions & 143 deletions docs/src/pages/components/autocomplete/ComboBox.js
Original file line number Diff line number Diff line change
@@ -1,147 +1,22 @@
/* eslint-disable @typescript-eslint/no-use-before-define */
import React from 'react';
import TextField from '@material-ui/core/TextField';
import Autocomplete from '@material-ui/lab/Autocomplete';
import * as React from 'react';
import { XGrid } from '@material-ui/x-grid';

export default function ComboBox() {
export default function App(props) {
return (
<Autocomplete
id="combo-box-demo"
options={top100Films}
getOptionLabel={(option) => option.title}
style={{ width: 300 }}
renderInput={(params) => (
<TextField {...params} label="Combo box" variant="outlined" />
)}
/>
<div style={{ width: props.large ? 400 : 300, height: 600 }}>
<XGrid
rows={[
{
id: 1,
brand: 'Nike',
},
]}
columns={[
{ field: 'id', hide: true },
{ field: 'brand', width: 100 },
]}
checkboxSelection
/>
</div>
);
}

// Top 100 films as rated by IMDb users. http://www.imdb.com/chart/top
const top100Films = [
{ title: 'The Shawshank Redemption', year: 1994 },
{ title: 'The Godfather', year: 1972 },
{ title: 'The Godfather: Part II', year: 1974 },
{ title: 'The Dark Knight', year: 2008 },
{ title: '12 Angry Men', year: 1957 },
{ title: "Schindler's List", year: 1993 },
{ title: 'Pulp Fiction', year: 1994 },
{
title: 'The Lord of the Rings: The Return of the King',
year: 2003,
},
{ title: 'The Good, the Bad and the Ugly', year: 1966 },
{ title: 'Fight Club', year: 1999 },
{
title: 'The Lord of the Rings: The Fellowship of the Ring',
year: 2001,
},
{
title: 'Star Wars: Episode V - The Empire Strikes Back',
year: 1980,
},
{ title: 'Forrest Gump', year: 1994 },
{ title: 'Inception', year: 2010 },
{
title: 'The Lord of the Rings: The Two Towers',
year: 2002,
},
{ title: "One Flew Over the Cuckoo's Nest", year: 1975 },
{ title: 'Goodfellas', year: 1990 },
{ title: 'The Matrix', year: 1999 },
{ title: 'Seven Samurai', year: 1954 },
{
title: 'Star Wars: Episode IV - A New Hope',
year: 1977,
},
{ title: 'City of God', year: 2002 },
{ title: 'Se7en', year: 1995 },
{ title: 'The Silence of the Lambs', year: 1991 },
{ title: "It's a Wonderful Life", year: 1946 },
{ title: 'Life Is Beautiful', year: 1997 },
{ title: 'The Usual Suspects', year: 1995 },
{ title: 'Léon: The Professional', year: 1994 },
{ title: 'Spirited Away', year: 2001 },
{ title: 'Saving Private Ryan', year: 1998 },
{ title: 'Once Upon a Time in the West', year: 1968 },
{ title: 'American History X', year: 1998 },
{ title: 'Interstellar', year: 2014 },
{ title: 'Casablanca', year: 1942 },
{ title: 'City Lights', year: 1931 },
{ title: 'Psycho', year: 1960 },
{ title: 'The Green Mile', year: 1999 },
{ title: 'The Intouchables', year: 2011 },
{ title: 'Modern Times', year: 1936 },
{ title: 'Raiders of the Lost Ark', year: 1981 },
{ title: 'Rear Window', year: 1954 },
{ title: 'The Pianist', year: 2002 },
{ title: 'The Departed', year: 2006 },
{ title: 'Terminator 2: Judgment Day', year: 1991 },
{ title: 'Back to the Future', year: 1985 },
{ title: 'Whiplash', year: 2014 },
{ title: 'Gladiator', year: 2000 },
{ title: 'Memento', year: 2000 },
{ title: 'The Prestige', year: 2006 },
{ title: 'The Lion King', year: 1994 },
{ title: 'Apocalypse Now', year: 1979 },
{ title: 'Alien', year: 1979 },
{ title: 'Sunset Boulevard', year: 1950 },
{
title:
'Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb',
year: 1964,
},
{ title: 'The Great Dictator', year: 1940 },
{ title: 'Cinema Paradiso', year: 1988 },
{ title: 'The Lives of Others', year: 2006 },
{ title: 'Grave of the Fireflies', year: 1988 },
{ title: 'Paths of Glory', year: 1957 },
{ title: 'Django Unchained', year: 2012 },
{ title: 'The Shining', year: 1980 },
{ title: 'WALL·E', year: 2008 },
{ title: 'American Beauty', year: 1999 },
{ title: 'The Dark Knight Rises', year: 2012 },
{ title: 'Princess Mononoke', year: 1997 },
{ title: 'Aliens', year: 1986 },
{ title: 'Oldboy', year: 2003 },
{ title: 'Once Upon a Time in America', year: 1984 },
{ title: 'Witness for the Prosecution', year: 1957 },
{ title: 'Das Boot', year: 1981 },
{ title: 'Citizen Kane', year: 1941 },
{ title: 'North by Northwest', year: 1959 },
{ title: 'Vertigo', year: 1958 },
{
title: 'Star Wars: Episode VI - Return of the Jedi',
year: 1983,
},
{ title: 'Reservoir Dogs', year: 1992 },
{ title: 'Braveheart', year: 1995 },
{ title: 'M', year: 1931 },
{ title: 'Requiem for a Dream', year: 2000 },
{ title: 'Amélie', year: 2001 },
{ title: 'A Clockwork Orange', year: 1971 },
{ title: 'Like Stars on Earth', year: 2007 },
{ title: 'Taxi Driver', year: 1976 },
{ title: 'Lawrence of Arabia', year: 1962 },
{ title: 'Double Indemnity', year: 1944 },
{
title: 'Eternal Sunshine of the Spotless Mind',
year: 2004,
},
{ title: 'Amadeus', year: 1984 },
{ title: 'To Kill a Mockingbird', year: 1962 },
{ title: 'Toy Story 3', year: 2010 },
{ title: 'Logan', year: 2017 },
{ title: 'Full Metal Jacket', year: 1987 },
{ title: 'Dangal', year: 2016 },
{ title: 'The Sting', year: 1973 },
{ title: '2001: A Space Odyssey', year: 1968 },
{ title: "Singin' in the Rain", year: 1952 },
{ title: 'Toy Story', year: 1995 },
{ title: 'Bicycle Thieves', year: 1948 },
{ title: 'The Kid', year: 1921 },
{ title: 'Inglourious Basterds', year: 2009 },
{ title: 'Snatch', year: 2000 },
{ title: '3 Idiots', year: 2009 },
{ title: 'Monty Python and the Holy Grail', year: 1975 },
];
2 changes: 1 addition & 1 deletion docs/src/pages/components/autocomplete/ComboBox.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export default function App(props) {
{ field: 'id', hide: true },
{ field: 'brand', width: 100 },
]}
options={{ checkboxSelection: true }}
checkboxSelection
/>
</div>
);
Expand Down
41 changes: 39 additions & 2 deletions docs/src/pages/components/data-grid/overview/DataGridDemo.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,42 @@
import * as React from 'react';
import { DataGrid } from '@material-ui/data-grid';

export default function Demo() {
return <div />;
const columns = [
{ field: 'id' },
{ field: 'firstName' },
{ field: 'lastName' },
{
field: 'age',
cellClassName: ['age'],
headerClassName: ['age'],
type: 'number',
sortDirection: 'desc',
},
{
field: 'fullName',
description: 'this column has a value getter and is not sortable',
headerClassName: 'highlight',
sortable: false,
valueGetter: (params) =>
`${params.getValue('firstName') || ''} ${
params.getValue('lastName') || ''
}`,
},
];

const rows = [
{ id: 1, lastName: 'Snow', firstName: 'Jon', age: 35 },
{ id: 2, lastName: 'Lannister', firstName: 'Cersei', age: 42 },
{ id: 3, lastName: 'Lannister', firstName: 'Jaime', age: 45 },
{ id: 4, lastName: 'Stark', firstName: 'Arya', age: 16 },
{ id: 5, lastName: 'Targaryen', firstName: 'Daenerys', age: null },
{ id: 6, lastName: 'Melisandre', firstName: null, age: 150 },
];

export default function DataGridDemo() {
return (
<div style={{ width: '100%', height: 450 }}>
<DataGrid rows={rows} columns={columns} checkboxSelection />
</div>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,7 @@ const rows = [
export default function DataGridDemo() {
return (
<div style={{ width: '100%', height: 450 }}>
<DataGrid
rows={rows}
columns={columns}
options={{ checkboxSelection: true }}
/>
<DataGrid rows={rows} columns={columns} checkboxSelection />
</div>
);
}
Loading

0 comments on commit 5c1d75b

Please sign in to comment.