diff --git a/src/collections/views/CollectionCreate.tsx b/src/collections/views/CollectionCreate.tsx index bf46fc536..9b747b30e 100644 --- a/src/collections/views/CollectionCreate.tsx +++ b/src/collections/views/CollectionCreate.tsx @@ -63,11 +63,7 @@ export const CollectionCreate: React.FC = () => { backgroundImage: formData.backgroundImage.value, backgroundImageAlt: formData.backgroundImageAlt, descriptionJson: JSON.stringify(formData.description), - isPublished: - typeof formData.isPublished !== "boolean" && - formData.isPublished === "true" - ? true - : false, + isPublished: formData.isPublished, name: formData.name, seo: { description: formData.seoDescription, diff --git a/src/collections/views/CollectionDetails.tsx b/src/collections/views/CollectionDetails.tsx index de83510b4..9d1668512 100644 --- a/src/collections/views/CollectionDetails.tsx +++ b/src/collections/views/CollectionDetails.tsx @@ -148,11 +148,7 @@ export const CollectionDetails: React.StatelessComponent< const input: CollectionInput = { backgroundImageAlt: formData.backgroundImageAlt, descriptionJson: JSON.stringify(formData.description), - isPublished: - typeof formData.isPublished !== "boolean" && - formData.isPublished === "true" - ? true - : false, + isPublished: formData.isPublished, name: formData.name, publicationDate: formData.publicationDate, seo: { diff --git a/src/components/RadioGroupField/RadioGroupField.tsx b/src/components/RadioGroupField/RadioGroupField.tsx index 0a7d0022b..0b2fe0739 100644 --- a/src/components/RadioGroupField/RadioGroupField.tsx +++ b/src/components/RadioGroupField/RadioGroupField.tsx @@ -30,11 +30,10 @@ const styles = createStyles({ } }); -interface RadioGroupFieldProps extends WithStyles { +interface RadioGroupFieldProps { choices: Array<{ value: string; - label: string | React.ReactNode; - secondLabel?: string | React.ReactNode; + label: React.ReactNode; }>; className?: string; disabled?: boolean; @@ -60,7 +59,7 @@ export const RadioGroupField = withStyles(styles, { onChange, name, hint - }: RadioGroupFieldProps) => { + }: RadioGroupFieldProps & WithStyles) => { return ( } - label={ - <> - {choice.label} - - {choice.secondLabel} - - - } + label={choice.label} key={choice.value} /> )) diff --git a/src/components/RadioSwitchField/RadioSwitchField.tsx b/src/components/RadioSwitchField/RadioSwitchField.tsx new file mode 100644 index 000000000..77072e8c7 --- /dev/null +++ b/src/components/RadioSwitchField/RadioSwitchField.tsx @@ -0,0 +1,97 @@ +import FormControl from "@material-ui/core/FormControl"; +import FormControlLabel from "@material-ui/core/FormControlLabel"; +import Radio from "@material-ui/core/Radio"; +import RadioGroup from "@material-ui/core/RadioGroup"; +import { createStyles, withStyles, WithStyles } from "@material-ui/core/styles"; +import classNames from "classnames"; +import React from "react"; + +const styles = createStyles({ + formControl: { + padding: 0, + width: "100%" + }, + formLabel: { + marginLeft: "-5px", + paddingBottom: "10px" + }, + radioLabel: { + "& > span": { + padding: "10px 6px" + } + }, + secondLabel: { + display: "block", + fontSize: "12px" + } +}); + +interface RadioSwitchFieldProps { + className?: string; + disabled?: boolean; + error?: boolean; + firstOptionLabel: React.ReactNode; + name?: string; + secondOptionLabel: React.ReactNode; + value?: boolean; + onChange: (event: React.ChangeEvent) => void; +} + +export const RadioSwitchField = withStyles(styles, { + name: "RadioSwitchField" +})( + ({ + className, + classes, + disabled, + error, + firstOptionLabel, + onChange, + name, + secondOptionLabel, + value + }: RadioSwitchFieldProps & WithStyles) => { + const initialValue = value ? "visible" : "hidden"; + + const change = event => { + onChange({ + target: { + name: event.target.name, + value: event.target.value === "visible" ? true : false + } + } as any); + }; + + return ( + + change(event)} + > + } + label={firstOptionLabel} + name={name} + /> + } + label={secondOptionLabel} + name={name} + /> + + + ); + } +); +RadioSwitchField.displayName = "RadioSwitchField"; +export default RadioSwitchField; diff --git a/src/components/RadioSwitchField/index.ts b/src/components/RadioSwitchField/index.ts new file mode 100644 index 000000000..467b936ef --- /dev/null +++ b/src/components/RadioSwitchField/index.ts @@ -0,0 +1,2 @@ +export { default } from "./RadioSwitchField"; +export * from "./RadioSwitchField"; diff --git a/src/components/VisibilityCard/VisibilityCard.tsx b/src/components/VisibilityCard/VisibilityCard.tsx index 5e7ab1a13..ed67afc50 100644 --- a/src/components/VisibilityCard/VisibilityCard.tsx +++ b/src/components/VisibilityCard/VisibilityCard.tsx @@ -12,8 +12,7 @@ import React from "react"; import { useIntl } from "react-intl"; import CardTitle from "@saleor/components/CardTitle"; -import { FormSpacer } from "@saleor/components/FormSpacer"; -import RadioGroupField from "@saleor/components/RadioGroupField"; +import RadioSwitchField from "@saleor/components/RadioSwitchField"; import useDateLocalize from "@saleor/hooks/useDateLocalize"; import { DateContext } from "../Date/DateContext"; @@ -25,6 +24,13 @@ const styles = (theme: Theme) => }, marginTop: theme.spacing.unit * 3 }, + label: { + lineHeight: 1, + margin: 0 + }, + secondLabel: { + fontSize: 12 + }, setPublicationDate: { color: theme.palette.primary.main, cursor: "pointer", @@ -42,7 +48,7 @@ interface VisibilityCardProps extends WithStyles { }; errors: { [key: string]: string }; disabled?: boolean; - onChange(event: any); + onChange: (event: React.ChangeEvent) => void; } export const VisibilityCard = withStyles(styles, { @@ -62,12 +68,6 @@ export const VisibilityCard = withStyles(styles, { ); const localizeDate = useDateLocalize(); const dateNow = React.useContext(DateContext); - const isPublishedRadio = - typeof isPublished !== "boolean" - ? isPublished - : isPublished - ? "true" - : "false"; const visibleSecondLabel = publicationDate ? isPublished ? intl.formatMessage( @@ -95,22 +95,6 @@ export const VisibilityCard = withStyles(styles, { : null : null; - const visiblilityPickerChoices = [ - { - label: intl.formatMessage({ - defaultMessage: "Visible" - }), - secondLabel: visibleSecondLabel, - value: "true" - }, - { - label: intl.formatMessage({ - defaultMessage: "Hidden" - }), - secondLabel: hiddenSecondLabel, - value: "false" - } - ]; return ( - +

+ {intl.formatMessage({ + defaultMessage: "Visible" + })} +

+ + {visibleSecondLabel} + + + } name={"isPublished" as keyof FormData} - value={isPublishedRadio} + secondOptionLabel={ + <> +

+ {intl.formatMessage({ + defaultMessage: "Hidden" + })} +

+ {hiddenSecondLabel} + + } + value={isPublished} onChange={onChange} /> - {isPublishedRadio === "false" && ( + {!isPublished && ( <> - {!isPublicationDate && ( + {!isPublished && ( setPublicationDate(!isPublicationDate)} @@ -161,7 +166,6 @@ export const VisibilityCard = withStyles(styles, { )} )} - {children}
diff --git a/src/pages/views/PageCreate.tsx b/src/pages/views/PageCreate.tsx index a30c6051d..d264b709e 100644 --- a/src/pages/views/PageCreate.tsx +++ b/src/pages/views/PageCreate.tsx @@ -59,11 +59,7 @@ export const PageCreate: React.StatelessComponent = () => { variables: { input: { contentJson: JSON.stringify(formData.content), - isPublished: - typeof formData.isPublished !== "boolean" && - formData.isPublished === "true" - ? true - : false, + isPublished: formData.isPublished, publicationDate: formData.isPublished ? null : formData.publicationDate === "" diff --git a/src/pages/views/PageDetails.tsx b/src/pages/views/PageDetails.tsx index abdb1e668..4419feab3 100644 --- a/src/pages/views/PageDetails.tsx +++ b/src/pages/views/PageDetails.tsx @@ -22,10 +22,7 @@ export interface PageDetailsProps { const createPageInput = (data: FormData): PageInput => { return { contentJson: JSON.stringify(data.content), - isPublished: - typeof data.isPublished !== "boolean" && data.isPublished === "true" - ? true - : false, + isPublished: data.isPublished, publicationDate: data.isPublished ? null : data.publicationDate === "" diff --git a/src/products/views/ProductCreate.tsx b/src/products/views/ProductCreate.tsx index e4c80f1e0..e3528a3b3 100644 --- a/src/products/views/ProductCreate.tsx +++ b/src/products/views/ProductCreate.tsx @@ -83,11 +83,7 @@ export const ProductUpdate: React.StatelessComponent< descriptionJson: JSON.stringify( formData.description ), - isPublished: - typeof formData.isPublished !== "boolean" && - formData.isPublished === "true" - ? true - : false, + isPublished: formData.isPublished, name: formData.name, productType: formData.productType, publicationDate: diff --git a/src/products/views/ProductUpdate/handlers.ts b/src/products/views/ProductUpdate/handlers.ts index c35720ae0..fd356f33a 100644 --- a/src/products/views/ProductUpdate/handlers.ts +++ b/src/products/views/ProductUpdate/handlers.ts @@ -25,10 +25,7 @@ export function createUpdateHandler( collections: data.collections, descriptionJson: JSON.stringify(data.description), id: product.id, - isPublished: - typeof data.isPublished !== "boolean" && data.isPublished === "true" - ? true - : false, + isPublished: data.isPublished, name: data.name, publicationDate: data.publicationDate !== "" ? data.publicationDate : null,