saleor-dashboard/src/shipping/views/ShippingZoneDetails/index.tsx

200 lines
6.4 KiB
TypeScript
Raw Normal View History

2019-08-09 10:26:22 +00:00
import React from "react";
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";
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;
}
const ShippingZoneDetails: React.FC<ShippingZoneDetailsProps> = ({
id,
params
}) => {
2019-06-19 14:40:52 +00:00
const navigate = useNavigator();
const notify = useNotifier();
const intl = useIntl();
2019-06-19 14:40:52 +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({
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({
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({
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({
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({
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;