2019-08-09 10:26:22 +00:00
|
|
|
import React from "react";
|
2019-08-26 21:26:36 +00:00
|
|
|
import { useIntl } from "react-intl";
|
2019-06-19 14:40:52 +00:00
|
|
|
|
|
|
|
import useNavigator from "@saleor/hooks/useNavigator";
|
|
|
|
import useNotifier from "@saleor/hooks/useNotifier";
|
2019-08-26 21:26:36 +00:00
|
|
|
import { commonMessages } from "@saleor/intl";
|
2019-12-06 17:11:46 +00:00
|
|
|
import { maybe } from "../../../misc";
|
2019-06-19 14:40:52 +00:00
|
|
|
import { ShippingMethodTypeEnum } from "../../../types/globalTypes";
|
|
|
|
import ShippingZoneDetailsPage from "../../components/ShippingZoneDetailsPage";
|
|
|
|
import { TypedShippingZone } from "../../queries";
|
|
|
|
import { CreateShippingRate } from "../../types/CreateShippingRate";
|
|
|
|
import { DeleteShippingRate } from "../../types/DeleteShippingRate";
|
|
|
|
import { DeleteShippingZone } from "../../types/DeleteShippingZone";
|
|
|
|
import { UpdateShippingRate } from "../../types/UpdateShippingRate";
|
|
|
|
import { UpdateShippingZone } from "../../types/UpdateShippingZone";
|
|
|
|
import {
|
|
|
|
shippingZonesListUrl,
|
|
|
|
shippingZoneUrl,
|
|
|
|
ShippingZoneUrlQueryParams
|
|
|
|
} from "../../urls";
|
|
|
|
import ShippingZoneDetailsDialogs from "./ShippingZoneDetailsDialogs";
|
|
|
|
import ShippingZoneOperations from "./ShippingZoneOperations";
|
|
|
|
|
|
|
|
export interface ShippingZoneDetailsProps {
|
|
|
|
id: string;
|
|
|
|
params: ShippingZoneUrlQueryParams;
|
|
|
|
}
|
|
|
|
|
2019-11-07 11:34:54 +00:00
|
|
|
const ShippingZoneDetails: React.FC<ShippingZoneDetailsProps> = ({
|
|
|
|
id,
|
|
|
|
params
|
|
|
|
}) => {
|
2019-06-19 14:40:52 +00:00
|
|
|
const navigate = useNavigator();
|
|
|
|
const notify = useNotifier();
|
2019-08-26 21:26:36 +00:00
|
|
|
const intl = useIntl();
|
2019-06-19 14:40:52 +00:00
|
|
|
|
2019-09-12 15:18:41 +00:00
|
|
|
const closeModal = () => navigate(shippingZoneUrl(id), true);
|
2019-06-19 14:40:52 +00:00
|
|
|
|
|
|
|
const onShippingRateCreate = (data: CreateShippingRate) => {
|
|
|
|
if (data.shippingPriceCreate.errors.length === 0) {
|
|
|
|
notify({
|
2019-08-26 21:26:36 +00:00
|
|
|
text: intl.formatMessage(commonMessages.savedChanges)
|
2019-06-19 14:40:52 +00:00
|
|
|
});
|
|
|
|
closeModal();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const onShippingRateUpdate = (data: UpdateShippingRate) => {
|
|
|
|
if (data.shippingPriceUpdate.errors.length === 0) {
|
|
|
|
notify({
|
2019-08-26 21:26:36 +00:00
|
|
|
text: intl.formatMessage(commonMessages.savedChanges)
|
2019-06-19 14:40:52 +00:00
|
|
|
});
|
|
|
|
closeModal();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const onShippingRateDelete = (data: DeleteShippingRate) => {
|
|
|
|
if (data.shippingPriceDelete.errors.length === 0) {
|
|
|
|
notify({
|
2019-08-26 21:26:36 +00:00
|
|
|
text: intl.formatMessage(commonMessages.savedChanges)
|
2019-06-19 14:40:52 +00:00
|
|
|
});
|
|
|
|
closeModal();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const onShippingZoneDelete = (data: DeleteShippingZone) => {
|
|
|
|
if (data.shippingZoneDelete.errors.length === 0) {
|
|
|
|
notify({
|
2019-08-26 21:26:36 +00:00
|
|
|
text: intl.formatMessage(commonMessages.savedChanges)
|
2019-06-19 14:40:52 +00:00
|
|
|
});
|
|
|
|
navigate(shippingZonesListUrl(), true);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const onShippingZoneUpdate = (data: UpdateShippingZone) => {
|
|
|
|
if (data.shippingZoneUpdate.errors.length === 0) {
|
|
|
|
notify({
|
2019-08-26 21:26:36 +00:00
|
|
|
text: intl.formatMessage(commonMessages.savedChanges)
|
2019-06-19 14:40:52 +00:00
|
|
|
});
|
|
|
|
closeModal();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<ShippingZoneOperations
|
|
|
|
onShippingRateCreate={onShippingRateCreate}
|
|
|
|
onShippingRateDelete={onShippingRateDelete}
|
|
|
|
onShippingRateUpdate={onShippingRateUpdate}
|
|
|
|
onShippingZoneDelete={onShippingZoneDelete}
|
|
|
|
onShippingZoneUpdate={onShippingZoneUpdate}
|
|
|
|
>
|
|
|
|
{ops => (
|
|
|
|
<TypedShippingZone variables={{ id }}>
|
2019-12-06 17:11:46 +00:00
|
|
|
{({ data, loading }) => (
|
|
|
|
<>
|
|
|
|
<ShippingZoneDetailsPage
|
|
|
|
disabled={loading}
|
|
|
|
errors={maybe(
|
|
|
|
() =>
|
|
|
|
ops.shippingZoneUpdate.opts.data.shippingZoneUpdate.errors
|
|
|
|
)}
|
|
|
|
onBack={() => navigate(shippingZonesListUrl())}
|
|
|
|
onCountryAdd={() =>
|
|
|
|
navigate(
|
|
|
|
shippingZoneUrl(id, {
|
|
|
|
action: "assign-country"
|
|
|
|
})
|
|
|
|
)
|
|
|
|
}
|
|
|
|
onCountryRemove={code =>
|
|
|
|
navigate(
|
|
|
|
shippingZoneUrl(id, {
|
|
|
|
action: "unassign-country",
|
|
|
|
id: code
|
|
|
|
})
|
|
|
|
)
|
|
|
|
}
|
|
|
|
onDelete={() =>
|
|
|
|
navigate(
|
|
|
|
shippingZoneUrl(id, {
|
|
|
|
action: "remove"
|
|
|
|
})
|
|
|
|
)
|
|
|
|
}
|
|
|
|
onPriceRateAdd={() =>
|
|
|
|
navigate(
|
|
|
|
shippingZoneUrl(id, {
|
|
|
|
action: "add-rate",
|
|
|
|
type: ShippingMethodTypeEnum.PRICE
|
|
|
|
})
|
|
|
|
)
|
|
|
|
}
|
|
|
|
onPriceRateEdit={rateId =>
|
|
|
|
navigate(
|
|
|
|
shippingZoneUrl(id, {
|
|
|
|
action: "edit-rate",
|
|
|
|
id: rateId
|
|
|
|
})
|
|
|
|
)
|
|
|
|
}
|
|
|
|
onRateRemove={rateId =>
|
|
|
|
navigate(
|
|
|
|
shippingZoneUrl(id, {
|
|
|
|
action: "remove-rate",
|
|
|
|
id: rateId
|
|
|
|
})
|
|
|
|
)
|
|
|
|
}
|
|
|
|
onSubmit={formData =>
|
|
|
|
ops.shippingZoneUpdate.mutate({
|
|
|
|
id,
|
|
|
|
input: {
|
|
|
|
name: formData.name
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
onWeightRateAdd={() =>
|
|
|
|
navigate(
|
|
|
|
shippingZoneUrl(id, {
|
|
|
|
action: "add-rate",
|
|
|
|
type: ShippingMethodTypeEnum.WEIGHT
|
|
|
|
})
|
|
|
|
)
|
|
|
|
}
|
|
|
|
onWeightRateEdit={rateId =>
|
|
|
|
navigate(
|
|
|
|
shippingZoneUrl(id, {
|
|
|
|
action: "edit-rate",
|
|
|
|
id: rateId
|
2019-06-19 14:40:52 +00:00
|
|
|
})
|
2019-12-06 17:11:46 +00:00
|
|
|
)
|
|
|
|
}
|
2019-12-06 17:17:44 +00:00
|
|
|
saveButtonBarState={ops.shippingZoneUpdate.opts.status}
|
2019-12-06 17:11:46 +00:00
|
|
|
shippingZone={maybe(() => data.shippingZone)}
|
|
|
|
/>
|
|
|
|
<ShippingZoneDetailsDialogs
|
2019-12-06 17:17:44 +00:00
|
|
|
assignCountryTransitionState={
|
|
|
|
ops.shippingZoneUpdate.opts.status
|
|
|
|
}
|
|
|
|
createRateTransitionState={ops.shippingRateCreate.opts.status}
|
|
|
|
deleteRateTransitionState={ops.shippingRateDelete.opts.status}
|
|
|
|
deleteZoneTransitionState={ops.shippingZoneDelete.opts.status}
|
2019-12-06 17:11:46 +00:00
|
|
|
id={id}
|
|
|
|
ops={ops}
|
|
|
|
params={params}
|
|
|
|
shippingZone={maybe(() => data.shippingZone)}
|
|
|
|
unassignCountryTransitionState={
|
2019-12-06 17:17:44 +00:00
|
|
|
ops.shippingZoneUpdate.opts.status
|
2019-12-06 17:11:46 +00:00
|
|
|
}
|
2019-12-06 17:17:44 +00:00
|
|
|
updateRateTransitionState={ops.shippingRateUpdate.opts.status}
|
2019-12-06 17:11:46 +00:00
|
|
|
/>
|
|
|
|
</>
|
|
|
|
)}
|
2019-06-19 14:40:52 +00:00
|
|
|
</TypedShippingZone>
|
|
|
|
)}
|
|
|
|
</ShippingZoneOperations>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
export default ShippingZoneDetails;
|