import { InputAdornment, TextField } from "@material-ui/core"; import { getMeasurementUnitMessage } from "@saleor/attributes/components/AttributeDetails/utils"; import BasicAttributeRow from "@saleor/components/Attributes/BasicAttributeRow"; import ExtendedAttributeRow from "@saleor/components/Attributes/ExtendedAttributeRow"; import { attributeRowMessages } from "@saleor/components/Attributes/messages"; import { SwatchRow } from "@saleor/components/Attributes/SwatchRow"; import { getErrorMessage, getFileChoice, getMultiChoices, getMultiDisplayValue, getReferenceDisplayValue, getSingleChoices, getSingleDisplayValue, } from "@saleor/components/Attributes/utils"; import Checkbox from "@saleor/components/Checkbox"; import { DateTimeField } from "@saleor/components/DateTimeField"; import FileUploadField from "@saleor/components/FileUploadField"; import MultiAutocompleteSelectField from "@saleor/components/MultiAutocompleteSelectField"; import RichTextEditor from "@saleor/components/RichTextEditor"; import SingleAutocompleteSelectField from "@saleor/components/SingleAutocompleteSelectField"; import SortableChipsField from "@saleor/components/SortableChipsField"; import { AttributeInputTypeEnum } from "@saleor/graphql"; import { commonMessages } from "@saleor/intl"; import React from "react"; import { useIntl } from "react-intl"; import { useStyles } from "./styles"; import { AttributeRowProps } from "./types"; const AttributeRow: React.FC = ({ attribute, attributeValues, disabled, error, loading, onFileChange, onMultiChange, onReferencesAddClick, onReferencesRemove, onReferencesReorder, onChange, fetchAttributeValues, fetchMoreAttributeValues, onAttributeSelectBlur, richTextGetters, }) => { const intl = useIntl(); const classes = useStyles(); switch (attribute.data.inputType) { case AttributeInputTypeEnum.REFERENCE: return ( onReferencesAddClick(attribute)} disabled={disabled} > onReferencesRemove( attribute.id, attribute.value?.filter(id => id !== value), ) } onValueReorder={event => onReferencesReorder(attribute.id, event)} loading={loading} error={!!error} helperText={getErrorMessage(error, intl)} /> ); case AttributeInputTypeEnum.FILE: return ( onFileChange(attribute.id, file)} onFileDelete={() => onFileChange(attribute.id, undefined)} error={!!error} helperText={getErrorMessage(error, intl)} inputProps={{ name: `attribute:${attribute.label}`, }} /> ); case AttributeInputTypeEnum.DROPDOWN: return ( onChange(attribute.id, event.target.value)} allowCustomValues={true} fetchOnFocus={true} fetchChoices={value => fetchAttributeValues(value, attribute.id)} onBlur={onAttributeSelectBlur} {...fetchMoreAttributeValues} /> ); case AttributeInputTypeEnum.SWATCH: return ( ); case AttributeInputTypeEnum.PLAIN_TEXT: return ( onChange(attribute.id, event.target.value)} type="text" value={attribute.value[0]} /> ); case AttributeInputTypeEnum.RICH_TEXT: const { getShouldMount, getDefaultValue, getMountEditor, getHandleChange, } = richTextGetters; const defaultValue = getDefaultValue(attribute.id); return ( {getShouldMount(attribute.id) && ( )} ); case AttributeInputTypeEnum.NUMERIC: return ( onChange(attribute.id, event.target.value)} type="number" value={attribute.value[0]} InputProps={ attribute.data.unit && { endAdornment: ( {getMeasurementUnitMessage( attribute.data.unit, intl.formatMessage, )} ), } } /> ); case AttributeInputTypeEnum.BOOLEAN: return (
onChange(attribute.id, JSON.stringify(event.target.checked)) } checked={JSON.parse(attribute.value[0] ?? "false")} className={classes.pullRight} helperText={getErrorMessage(error, intl)} error={!!error} />
); case AttributeInputTypeEnum.DATE: return ( onChange(attribute.id, event.target.value)} type="date" value={attribute.value[0]} InputLabelProps={{ shrink: true }} /> ); case AttributeInputTypeEnum.DATE_TIME: return ( onChange(attribute.id, value)} /> ); default: return ( onMultiChange(attribute.id, event.target.value)} allowCustomValues={true} fetchOnFocus={true} fetchChoices={value => fetchAttributeValues(value, attribute.id)} onBlur={onAttributeSelectBlur} {...fetchMoreAttributeValues} /> ); } }; AttributeRow.displayName = "AttributeRow"; export default AttributeRow;