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

demo reviews/segments refactor to typescript #4847

Merged
merged 6 commits into from
May 26, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/demo/src/orders/Basket.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ const Basket: FC<FieldProps<Order>> = ({ record }) => {

return productIds
.map<Product>(
(productId: string) =>
productId =>
state.admin.resources.products.data[
productId
] as Product
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import React from 'react';
import React, { FC } from 'react';
import PropTypes from 'prop-types';
import Button from '@material-ui/core/Button';
import ThumbUp from '@material-ui/icons/ThumbUp';
import { useTranslate, useUpdate, useNotify, useRedirect } from 'react-admin';
import { Review } from './../types';

/**
* This custom button demonstrate using useUpdate to update data
*/
const AcceptButton = ({ record }) => {
const AcceptButton: FC<{ record: Review }> = ({ record }) => {
const translate = useTranslate();
const notify = useNotify();
const redirectTo = useRedirect();
Expand Down Expand Up @@ -56,7 +57,7 @@ const AcceptButton = ({ record }) => {
};

AcceptButton.propTypes = {
MohammedFaragallah marked this conversation as resolved.
Show resolved Hide resolved
record: PropTypes.object,
record: PropTypes.any,
};

export default AcceptButton;
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from 'react';
import React, { FC } from 'react';
import PropTypes from 'prop-types';
import ThumbUp from '@material-ui/icons/ThumbUp';
import {
Expand All @@ -9,8 +9,9 @@ import {
useUnselectAll,
CRUD_UPDATE_MANY,
} from 'react-admin';
import { BulkActionProps } from '../types';

const BulkAcceptButton = ({ selectedIds }) => {
const BulkAcceptButton: FC<BulkActionProps> = ({ selectedIds }) => {
const notify = useNotify();
const redirectTo = useRedirect();
const unselectAll = useUnselectAll('reviews');
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from 'react';
import React, { FC } from 'react';
import PropTypes from 'prop-types';
import ThumbDown from '@material-ui/icons/ThumbDown';
import {
Expand All @@ -9,8 +9,9 @@ import {
useUnselectAll,
CRUD_UPDATE_MANY,
} from 'react-admin';
import { BulkActionProps } from '../types';

const BulkRejectButton = ({ selectedIds }) => {
const BulkRejectButton: FC<BulkActionProps> = ({ selectedIds }) => {
const notify = useNotify();
const redirectTo = useRedirect();
const unselectAll = useUnselectAll('reviews');
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import React from 'react';
import React, { FC } from 'react';
import PropTypes from 'prop-types';
import Button from '@material-ui/core/Button';
import ThumbDown from '@material-ui/icons/ThumbDown';
import { useTranslate, useUpdate, useNotify, useRedirect } from 'react-admin';
import { Review } from '../types';

/**
* This custom button demonstrate using a custom action to update data
*/
const RejectButton = ({ record }) => {
const RejectButton: FC<{ record: Review }> = ({ record }) => {
const translate = useTranslate();
const notify = useNotify();
const redirectTo = useRedirect();
Expand Down Expand Up @@ -57,7 +58,7 @@ const RejectButton = ({ record }) => {
};

RejectButton.propTypes = {
MohammedFaragallah marked this conversation as resolved.
Show resolved Hide resolved
record: PropTypes.object,
record: PropTypes.any,
};

export default RejectButton;
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from 'react';
import React, { FC } from 'react';
import {
useEditController,
useTranslate,
Expand All @@ -15,6 +15,7 @@ import ProductReferenceField from '../products/ProductReferenceField';
import CustomerReferenceField from '../visitors/CustomerReferenceField';
import StarRatingField from './StarRatingField';
import ReviewEditToolbar from './ReviewEditToolbar';
import { EditComponentProps } from '../types';

const useStyles = makeStyles(theme => ({
root: {
Expand All @@ -41,7 +42,11 @@ const useStyles = makeStyles(theme => ({
},
}));

const ReviewEdit = ({ onCancel, ...props }) => {
interface Props extends EditComponentProps {
onCancel: () => void;
}

const ReviewEdit: FC<Props> = ({ onCancel, ...props }) => {
const classes = useStyles();
const controllerProps = useEditController(props);
const translate = useTranslate();
Expand Down Expand Up @@ -69,7 +74,6 @@ const ReviewEdit = ({ onCancel, ...props }) => {
toolbar={<ReviewEditToolbar />}
>
<CustomerReferenceField formClassName={classes.inlineField} />

<ProductReferenceField formClassName={classes.inlineField} />
<DateField source="date" formClassName={classes.inlineField} />
<StarRatingField formClassName={classes.inlineField} />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import React, { Fragment } from 'react';
import React, { Fragment, FC } from 'react';
import MuiToolbar from '@material-ui/core/Toolbar';
import { makeStyles } from '@material-ui/core/styles';

import { SaveButton, DeleteButton } from 'react-admin';
import AcceptButton from './AcceptButton';
import RejectButton from './RejectButton';
import { ToolbarProps, Review } from '../types';

const useStyles = makeStyles(theme => ({
root: {
Expand All @@ -14,7 +15,7 @@ const useStyles = makeStyles(theme => ({
},
}));

const ReviewEditToolbar = ({
const ReviewEditToolbar: FC<ToolbarProps<Review>> = ({
basePath,
handleSubmitWithRedirect,
invalid,
Expand All @@ -23,6 +24,8 @@ const ReviewEditToolbar = ({
saving,
}) => {
const classes = useStyles();

if (!record) return null;
return (
<MuiToolbar className={classes.root}>
{record.status === 'pending' ? (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from 'react';
import React, { FC } from 'react';
import {
AutocompleteInput,
DateInput,
Expand All @@ -8,12 +8,23 @@ import {
SelectInput,
} from 'react-admin';
import { makeStyles } from '@material-ui/core/styles';
import { FilterProps, ReviewStatus, Customer } from '../types';
import { Identifier } from 'ra-core';

const useFilterStyles = makeStyles({
status: { width: 150 },
});

const ReviewFilter = props => {
interface FilterParams {
q?: string;
status?: ReviewStatus;
date_gte?: string;
date_lte?: string;
customer_id?: Identifier;
product_id?: Identifier;
}

const ReviewFilter: FC<FilterProps<FilterParams>> = props => {
const classes = useFilterStyles();
return (
<Filter {...props}>
Expand All @@ -29,7 +40,7 @@ const ReviewFilter = props => {
/>
<ReferenceInput source="customer_id" reference="customers">
<AutocompleteInput
optionText={choice =>
optionText={(choice: Customer) =>
`${choice.first_name} ${choice.last_name}`
}
/>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import React, { Fragment, useCallback } from 'react';
import React, { Fragment, useCallback, FC } from 'react';
import classnames from 'classnames';
import { BulkDeleteButton, List } from 'react-admin';
import { Route, useHistory } from 'react-router-dom';
import { Drawer, useMediaQuery, makeStyles } from '@material-ui/core';
import { Drawer, useMediaQuery, makeStyles, Theme } from '@material-ui/core';
import BulkAcceptButton from './BulkAcceptButton';
import BulkRejectButton from './BulkRejectButton';
import ReviewListMobile from './ReviewListMobile';
import ReviewListDesktop from './ReviewListDesktop';
import ReviewFilter from './ReviewFilter';
import ReviewEdit from './ReviewEdit';
import { BulkActionProps, ListComponentProps } from '../types';

const ReviewsBulkActionButtons = props => (
const ReviewsBulkActionButtons: FC<BulkActionProps> = props => (
<Fragment>
<BulkAcceptButton {...props} />
<BulkRejectButton {...props} />
Expand All @@ -37,9 +38,11 @@ const useStyles = makeStyles(theme => ({
},
}));

const ReviewList = props => {
const ReviewList: FC<ListComponentProps<{ id: string }>> = props => {
const classes = useStyles();
const isXSmall = useMediaQuery(theme => theme.breakpoints.down('xs'));
const isXSmall = useMediaQuery<Theme>(theme =>
theme.breakpoints.down('xs')
);
const history = useHistory();

const handleClose = useCallback(() => {
Expand Down Expand Up @@ -73,8 +76,9 @@ const ReviewList = props => {
) : (
<ReviewListDesktop
selectedRow={
isMatch &&
parseInt(match.params.id, 10)
MohammedFaragallah marked this conversation as resolved.
Show resolved Hide resolved
isMatch
? parseInt(match.params.id, 10)
: undefined
}
/>
)}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from 'react';
import React, { FC } from 'react';
import { Datagrid, DateField, TextField } from 'react-admin';
import { makeStyles, useTheme } from '@material-ui/core/styles';

Expand All @@ -7,6 +7,8 @@ import CustomerReferenceField from '../visitors/CustomerReferenceField';
import StarRatingField from './StarRatingField';

import rowStyle from './rowStyle';
import { DatagridProps } from './../types';
import { Identifier } from 'ra-core';

const useListStyles = makeStyles({
headerRow: {
Expand All @@ -28,7 +30,11 @@ const useListStyles = makeStyles({
},
});

const ReviewListDesktop = ({ selectedRow, ...props }) => {
interface Props extends DatagridProps {
selectedRow: Identifier;
}

const ReviewListDesktop: FC<Props> = ({ selectedRow, ...props }) => {
const classes = useListStyles();
const theme = useTheme();
return (
Expand Down
Loading