Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Global theme default props support #1796

Merged
merged 27 commits into from
May 25, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
bd67a30
Support empty dates for the DatePicker
dmtrKovalenko May 11, 2020
72d2131
Support empty dates for TimePicker
dmtrKovalenko May 11, 2020
53db747
Support empty dates for mobile toobars
dmtrKovalenko May 11, 2020
831c4c0
Support empty dates in YearSelection
dmtrKovalenko May 11, 2020
0e08528
Introduce `toolbarPlaceholder` prop for customization of empty date text
dmtrKovalenko May 13, 2020
b54abef
Add tests
dmtrKovalenko May 13, 2020
964ae4e
Merge conflicts
dmtrKovalenko May 13, 2020
d7aa218
Do not dispatch `changeFocusedDay` on each mount
dmtrKovalenko May 13, 2020
7e66833
Fix crashes when rendering empty date with luxon and moment
dmtrKovalenko May 14, 2020
a5524b4
[TimePicker] Do not throw validation error if value={null}
dmtrKovalenko May 14, 2020
37aec81
Update props description for TimePicker validation props
dmtrKovalenko May 14, 2020
a205056
Rename text props to match convention for built-in localization
dmtrKovalenko May 14, 2020
f4882cc
Merge conflicts
dmtrKovalenko May 18, 2020
3fa0d2f
Update using props in examples
dmtrKovalenko May 18, 2020
1e0d88b
Merge branch 'next' into feature/global-default-props
dmtrKovalenko May 19, 2020
d200d5d
Implement withDefaultProps HO
dmtrKovalenko May 19, 2020
6443eca
Fix not working CSS overrides typescript example
dmtrKovalenko May 19, 2020
41f2b0c
Add tests for overrides typings
dmtrKovalenko May 19, 2020
055a9fd
Implement typings for global overrides
dmtrKovalenko May 20, 2020
f9a80c0
Implement default props support for all Pickers components
dmtrKovalenko May 20, 2020
655f7f5
Add default props support for all the components
dmtrKovalenko May 20, 2020
ca95b11
Fix build errors and properly reexport all props
dmtrKovalenko May 20, 2020
939cfd5
Merge conflicts
dmtrKovalenko May 20, 2020
8709b06
Remove duplicated `renderInput` prop
dmtrKovalenko May 25, 2020
d41d4de
Merge conflicts
dmtrKovalenko May 25, 2020
d374865
Annulate date-io linked type for documentation
dmtrKovalenko May 25, 2020
47f0271
Run typescript tests on CI
dmtrKovalenko May 25, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ jobs:
- run:
name: Typescript
command: yarn workspaces run build:typescript
- run:
name: Run typescript tests
command: yarn workspace @material-ui/pickers run test:typescript
- run:
name: Build and analyze bundlesize
command: yarn workspace @material-ui/pickers build:analyze
Expand Down
4 changes: 3 additions & 1 deletion docs/layout/PageWithContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ const createCustomMuiTheme = (theme: ThemeType, direction: Theme['direction']) =
secondary: orange,
type: theme,
},
overrides: {},
props: {},
});
};

Expand Down Expand Up @@ -105,7 +107,7 @@ export const PageWithContexts: React.SFC<Props> = ({
>
<ThemeProvider theme={muiTheme}>
<SnackbarProvider maxSnack={3}>
<LocalizationProvider dateAdapter={utilsMap[lib]}>
<LocalizationProvider dateAdapter={utilsMap[lib] as any}>
<ThemeContext.Provider value={theme}>
<UtilsContext.Provider value={createUtilsService(lib)}>
<CssBaseline />
Expand Down
2 changes: 1 addition & 1 deletion docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"build": "next build",
"start": "next start -p 3001",
"generate-backers": "node scripts/generate-backers.js",
"build:typescript": "tsc -p tsconfig.json && tsc -p tsconfig.js.json"
"build:typescript": "tsc"
},
"keywords": [],
"author": "",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ function MinMaxDateRangePicker() {
<DateRangePicker
disablePast
value={selectedRange}
// @ts-ignore
maxDate={getWeeksAfter(selectedRange[0], 4)}
onChange={date => handleDateChange(date)}
renderInput={(startProps, endProps) => (
Expand Down
4 changes: 2 additions & 2 deletions docs/pages/demo/timepicker/TimeValidation.example.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@ function TimeValidation() {
renderInput={props => <TextField {...props} />}
ampm={false}
label="Disable odd hours"
value={selectedDate}
onChange={date => handleDateChange(date)}
shouldDisableTime={(timeValue, clockType) => {
if (clockType === 'hours' && timeValue % 2) {
return true;
}

return false;
}}
value={selectedDate}
onChange={date => handleDateChange(date)}
/>
</Fragment>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
// @ts-nocheck
import React, { useState } from 'react';
import lightBlue from '@material-ui/core/colors/lightBlue';
import { TextField } from '@material-ui/core';
import { DatePicker } from '@material-ui/pickers';
import { createMuiTheme, ThemeProvider } from '@material-ui/core';
import { DatePicker, DatePickerProps } from '@material-ui/pickers';

const materialTheme = createMuiTheme({
overrides: {
Expand All @@ -28,11 +27,11 @@ const materialTheme = createMuiTheme({
dayDisabled: {
color: lightBlue['100'],
},
current: {
today: {
color: lightBlue['900'],
},
},
MuiPickersModal: {
MuiPickersModalDialog: {
dialogAction: {
color: lightBlue['400'],
},
Expand All @@ -41,16 +40,17 @@ const materialTheme = createMuiTheme({
});

function CssOverrides() {
const [selectedDate, handleDateChange] = useState(new Date());
const [selectedDate, handleDateChange] = useState<DatePickerProps['value']>(new Date());

return (
<ThemeProvider theme={materialTheme}>
<DatePicker
renderInput={props => <TextField {...props} />}
label="Light blue picker"
value={selectedDate}
onChange={handleDateChange}
shouldDisableDate={day => day.getDay() === 0}
onChange={date => handleDateChange(date)}
// @ts-ignore
shouldDisableDate={day => day && day.getDay() === 0}
/>
</ThemeProvider>
);
Expand Down
1 change: 1 addition & 0 deletions docs/pages/guides/FormikOurValidation.example.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// @ts-nocheck
import React from 'react';
import Grid from '@material-ui/core/Grid';
import TextField from '@material-ui/core/TextField';
Expand Down
1 change: 1 addition & 0 deletions docs/pages/guides/FormikValidationSchema.example.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// @ts-nocheck
import React from 'react';
import { date, object } from 'yup';
import { Grid } from '@material-ui/core';
Expand Down
11 changes: 4 additions & 7 deletions docs/pages/guides/css-overrides.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,12 @@ This will also autocomplete classnames.

Add the following to a TypeScript declaration file in your project, such as `overrides-mui.d.ts`:

```typescript
import { Overrides } from '@material-ui/core/styles/overrides';
import { MuiPickersOverrides } from '@material-ui/pickers/typings/overrides';
<!-- should be in sync with lib/src/__tests__/typings.d.ts -->

type overridesNameToClassKey = {
[P in keyof MuiPickersOverrides]: keyof MuiPickersOverrides[P];
};
```typescript
import { MuiPickersComponentsToClassName } from '@material-ui/pickers/src/typings/overrides';

declare module '@material-ui/core/styles/overrides' {
export interface ComponentNameToClassKey extends overridesNameToClassKey {}
export interface ComponentNameToClassKey extends MuiPickersComponentsToClassName {}
}
```
19 changes: 4 additions & 15 deletions docs/pages/regression/Regression.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import { TextField, TextFieldProps } from '@material-ui/core';
import { createRegressionDay as createRegressionDayRenderer } from './RegressionDay';
import { MuiPickersContext, DateRangePicker, DateRangeDelimiter } from '@material-ui/pickers';
import {
DateRange,
MobileDatePicker,
DesktopDatePicker,
MobileTimePicker,
Expand All @@ -19,8 +18,8 @@ const makeRenderInputProp = (overrideProps: Omit<Partial<TextFieldProps>, 'varia

function Regression() {
const utils = useContext(MuiPickersContext);
const [range, changeRange] = useState<DateRange>([new Date('2019-01-01T00:00:00.000'), null]);
const [date, changeDate] = useState<Date | null>(new Date('2019-01-01T00:00:00.000'));
const [range, changeRange] = useState<any>([new Date('2019-01-01T00:00:00.000'), null]);
const [date, changeDate] = useState<any>(new Date('2019-01-01T00:00:00.000'));

const sharedProps = {
value: date,
Expand Down Expand Up @@ -60,18 +59,8 @@ function Regression() {
{...sharedProps}
mask="__"
/>
<MobileDatePicker
renderInput={props => <TextField {...props} />}
disabled
{...makeRenderInputProp({ id: 'disabled' })}
{...sharedProps}
/>
<MobileDatePicker
renderInput={props => <TextField {...props} />}
readOnly
{...makeRenderInputProp({ id: 'readonly' })}
{...sharedProps}
/>
<MobileDatePicker disabled {...makeRenderInputProp({ id: 'disabled' })} {...sharedProps} />
<MobileDatePicker readOnly {...makeRenderInputProp({ id: 'readonly' })} {...sharedProps} />
</Grid>

<Typography align="center" variant="h4" component="span" gutterBottom>
Expand Down
55 changes: 30 additions & 25 deletions docs/prop-types.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 0 additions & 13 deletions docs/tsconfig.js.json

This file was deleted.

3 changes: 2 additions & 1 deletion docs/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"esModuleInterop": true,
"rootDir": ".",
"target": "esnext",
"resolveJsonModule": true
},
"include": ["../docs/**/*.ts*", "./typings.d.ts", "../lib/typings.d.ts"]
"include": ["./typings.d.ts", "../docs/**/*.ts*"]
}