diff --git a/src/components/MultiAutocompleteSelectField/MultiAutocompleteSelectField.tsx b/src/components/MultiAutocompleteSelectField/MultiAutocompleteSelectField.tsx index 27cb334c1..d7aab9a97 100644 --- a/src/components/MultiAutocompleteSelectField/MultiAutocompleteSelectField.tsx +++ b/src/components/MultiAutocompleteSelectField/MultiAutocompleteSelectField.tsx @@ -72,7 +72,7 @@ const useStyles = makeStyles( export interface MultiAutocompleteSelectFieldProps extends Partial { - add: MultiAutocompleteActionType; + add?: MultiAutocompleteActionType; allowCustomValues?: boolean; displayValues: MultiAutocompleteChoiceType[]; error?: boolean; @@ -93,6 +93,7 @@ const DebounceAutocomplete: React.ComponentType = props => { const { + add, allowCustomValues, choices, displayValues, @@ -131,6 +132,7 @@ const MultiAutocompleteSelectFieldComponent: React.FC ""} > {({ + closeMenu, getInputProps, getItemProps, isOpen, diff --git a/src/components/MultiAutocompleteSelectField/MultiAutocompleteSelectFieldContent.tsx b/src/components/MultiAutocompleteSelectField/MultiAutocompleteSelectFieldContent.tsx index d414b8f3f..31d3f7a30 100644 --- a/src/components/MultiAutocompleteSelectField/MultiAutocompleteSelectFieldContent.tsx +++ b/src/components/MultiAutocompleteSelectField/MultiAutocompleteSelectFieldContent.tsx @@ -34,7 +34,7 @@ export interface MultiAutocompleteChoiceType { } export interface MultiAutocompleteSelectFieldContentProps extends Partial { - add: MultiAutocompleteActionType; + add?: MultiAutocompleteActionType; choices: MultiAutocompleteChoiceType[]; displayCustomValue: boolean; displayValues: MultiAutocompleteChoiceType[]; @@ -45,6 +45,14 @@ export interface MultiAutocompleteSelectFieldContentProps const useStyles = makeStyles( theme => ({ + add: { + background: theme.palette.background.default, + border: `1px solid ${theme.palette.divider}`, + borderRadius: "100%", + height: 24, + marginRight: theme.spacing(), + width: 24 + }, addIcon: { height: 24, margin: 9, @@ -106,6 +114,7 @@ const useStyles = makeStyles( gridColumnGap: theme.spacing(1), gridTemplateColumns: "30px 1fr", height: "auto", + marginBottom: theme.spacing(0.5), padding: 0, whiteSpace: "normal" }, @@ -136,10 +145,11 @@ const useStyles = makeStyles( function getChoiceIndex( index: number, displayValues: MultiAutocompleteChoiceType[], - displayCustomValue: boolean + displayCustomValue: boolean, + add: boolean ) { let choiceIndex = index; - if (displayCustomValue) { + if (add || displayCustomValue) { choiceIndex += 2; } if (displayValues.length > 0) { @@ -258,7 +268,8 @@ const MultiAutocompleteSelectFieldContent: React.FC { - add: SingleAutocompleteActionType; + add?: SingleAutocompleteActionType; choices: SingleAutocompleteChoiceType[]; displayCustomValue: boolean; emptyOption: boolean; diff --git a/src/shipping/components/ShippingZoneAddWarehouseDialog/ShippingZoneAddWarehouseDialog.tsx b/src/shipping/components/ShippingZoneAddWarehouseDialog/ShippingZoneAddWarehouseDialog.tsx index 632fe73fc..fcf7d038c 100644 --- a/src/shipping/components/ShippingZoneAddWarehouseDialog/ShippingZoneAddWarehouseDialog.tsx +++ b/src/shipping/components/ShippingZoneAddWarehouseDialog/ShippingZoneAddWarehouseDialog.tsx @@ -104,8 +104,8 @@ const ShippingZoneAddWarehouseDialog: React.FC -
- {({ change, data, errors: formErrors }) => { + + {({ change, data }) => { const handleCountrySelect = createSingleAutocompleteSelectHandler( change, setCountryDisplayName, @@ -132,7 +132,7 @@ const ShippingZoneAddWarehouseDialog: React.FC diff --git a/src/shipping/components/ShippingZoneDetailsPage/ShippingZoneDetailsPage.tsx b/src/shipping/components/ShippingZoneDetailsPage/ShippingZoneDetailsPage.tsx index 1dc6ed09e..e10f3cba2 100644 --- a/src/shipping/components/ShippingZoneDetailsPage/ShippingZoneDetailsPage.tsx +++ b/src/shipping/components/ShippingZoneDetailsPage/ShippingZoneDetailsPage.tsx @@ -89,7 +89,7 @@ const ShippingZoneDetailsPage: React.FC = ({ warehouses: shippingZone?.warehouses.map(warehouse => warehouse.id) || [] }; const [warehouseDisplayValues, setWarehouseDisplayValues] = useStateFromProps( - shippingZone?.warehouses.map(warehouseToChoice) + shippingZone?.warehouses.map(warehouseToChoice) || [] ); const warehouseChoices = warehouses.map(warehouseToChoice); diff --git a/src/warehouses/components/WarehouseCreatePage/WarehouseCreatePage.tsx b/src/warehouses/components/WarehouseCreatePage/WarehouseCreatePage.tsx index ec50f6a61..61a25f254 100644 --- a/src/warehouses/components/WarehouseCreatePage/WarehouseCreatePage.tsx +++ b/src/warehouses/components/WarehouseCreatePage/WarehouseCreatePage.tsx @@ -47,7 +47,7 @@ const initialForm: WarehouseCreatePageFormData = { const WarehouseCreatePage: React.FC = ({ countries, disabled, - errors: apiErrors, + errors, saveButtonBarState, onBack, onSubmit @@ -61,12 +61,8 @@ const WarehouseCreatePage: React.FC = ({ } = useAddressValidation(onSubmit); return ( - - {({ change, data, errors, submit }) => { + + {({ change, data, submit }) => { const countryChoices = mapCountriesToChoices(countries); const handleCountryChange = createSingleAutocompleteSelectHandler( change, @@ -99,7 +95,7 @@ const WarehouseCreatePage: React.FC = ({ data={data} disabled={disabled} displayCountry={displayCountry} - errors={errors} + errors={[...errors, ...validationErrors]} header={intl.formatMessage({ defaultMessage: "Address Information", description: "warehouse" diff --git a/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.tsx b/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.tsx index 148dda244..d15bf3836 100644 --- a/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.tsx +++ b/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.tsx @@ -42,7 +42,7 @@ export interface WarehouseDetailsPageProps { const WarehouseDetailsPage: React.FC = ({ countries, disabled, - errors: apiErrors, + errors, saveButtonBarState, warehouse, onBack, @@ -73,12 +73,8 @@ const WarehouseDetailsPage: React.FC = ({ }; return ( - - {({ change, data, errors, submit }) => { + + {({ change, data, submit }) => { const countryChoices = mapCountriesToChoices(countries); const handleCountryChange = createSingleAutocompleteSelectHandler( change, @@ -106,7 +102,7 @@ const WarehouseDetailsPage: React.FC = ({ data={data} disabled={disabled} displayCountry={displayCountry} - errors={errors} + errors={[...errors, ...validationErrors]} header={intl.formatMessage({ defaultMessage: "Address Information", description: "warehouse" @@ -117,9 +113,7 @@ const WarehouseDetailsPage: React.FC = ({
- warehouse.shippingZones.edges.map(edge => edge.node) - )} + zones={warehouse?.shippingZones?.edges.map(edge => edge.node)} onShippingZoneClick={onShippingZoneClick} />
diff --git a/src/warehouses/components/WarehouseInfo/WarehouseInfo.tsx b/src/warehouses/components/WarehouseInfo/WarehouseInfo.tsx index 7b31cc2ea..fdc51a261 100644 --- a/src/warehouses/components/WarehouseInfo/WarehouseInfo.tsx +++ b/src/warehouses/components/WarehouseInfo/WarehouseInfo.tsx @@ -7,12 +7,13 @@ import { useIntl } from "react-intl"; import CardTitle from "@saleor/components/CardTitle"; import { commonMessages } from "@saleor/intl"; import { FormChange } from "@saleor/hooks/useForm"; -import { FormErrors } from "@saleor/types"; +import { UserError } from "@saleor/types"; +import { getFieldError } from "@saleor/utils/errors"; export interface WarehouseInfoProps { data: Record<"name", string>; disabled: boolean; - errors: FormErrors<"name">; + errors: UserError[]; onChange: FormChange; } @@ -32,9 +33,9 @@ const WarehouseInfo: React.FC = ({ = ({ id, params }) => { const shop = useShop(); const { data, loading } = useWarehouseDetails({ displayLoader: true, - require: ["warehouse"], variables: { id } }); const [updateWarehouse, updateWarehouseOpts] = useWarehouseUpdate({ @@ -65,18 +69,19 @@ const WarehouseDetails: React.FC = ({ id, params }) => { params ); + if (data?.warehouse === null) { + return navigate(warehouseListUrl())} />; + } + return ( <> - data.warehouse.name)} /> + shop.countries, [])} + countries={shop?.countries || []} disabled={loading || updateWarehouseOpts.loading} - errors={maybe( - () => updateWarehouseOpts.data.updateWarehouse.errors, - [] - )} + errors={updateWarehouseOpts.data?.updateWarehouse.errors || []} saveButtonBarState={updateWarehouseTransitionState} - warehouse={maybe(() => data.warehouse)} + warehouse={data?.warehouse} onBack={() => navigate(warehouseListUrl())} onDelete={() => openModal("delete")} onShippingZoneClick={id => navigate(shippingZoneUrl(id))} @@ -103,7 +108,7 @@ const WarehouseDetails: React.FC = ({ id, params }) => { /> data.warehouse.name)} + name={getStringOrPlaceholder(data?.warehouse?.name)} onClose={closeModal} onConfirm={() => deleteWarehouse({