Simplify code

This commit is contained in:
dominik-zeglen 2020-02-10 13:50:08 +01:00
parent 12c5e40646
commit 3d838d8428
2 changed files with 178 additions and 209 deletions

View file

@ -1,7 +1,7 @@
import gql from "graphql-tag"; import gql from "graphql-tag";
import makeQuery from "@saleor/hooks/makeQuery"; import makeQuery from "@saleor/hooks/makeQuery";
import { pageInfoFragment, TypedQuery } from "../queries"; import { pageInfoFragment } from "../queries";
import { ShippingZone, ShippingZoneVariables } from "./types/ShippingZone"; import { ShippingZone, ShippingZoneVariables } from "./types/ShippingZone";
import { ShippingZones, ShippingZonesVariables } from "./types/ShippingZones"; import { ShippingZones, ShippingZonesVariables } from "./types/ShippingZones";
@ -79,7 +79,7 @@ const shippingZones = gql`
} }
} }
`; `;
export const TypedShippingZones = TypedQuery< export const useShippingZoneList = makeQuery<
ShippingZones, ShippingZones,
ShippingZonesVariables ShippingZonesVariables
>(shippingZones); >(shippingZones);

View file

@ -16,23 +16,22 @@ import usePaginator, {
import useShop from "@saleor/hooks/useShop"; import useShop from "@saleor/hooks/useShop";
import useUser from "@saleor/hooks/useUser"; import useUser from "@saleor/hooks/useUser";
import { commonMessages } from "@saleor/intl"; import { commonMessages } from "@saleor/intl";
import { maybe } from "@saleor/misc"; import { maybe, getStringOrPlaceholder } from "@saleor/misc";
import { ListViews } from "@saleor/types"; import { ListViews } from "@saleor/types";
import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers";
import ShippingZonesListPage from "../components/ShippingZonesListPage"; import ShippingZonesListPage from "../components/ShippingZonesListPage";
import { import {
TypedBulkDeleteShippingZone, useShippingZoneBulkDelete,
TypedDeleteShippingZone, useShippingZoneDelete,
TypedUpdateDefaultWeightUnit useDefaultWeightUnitUpdate
} from "../mutations"; } from "../mutations";
import { TypedShippingZones } from "../queries"; import { useShippingZoneList } from "../queries";
import { BulkDeleteShippingZone } from "../types/BulkDeleteShippingZone";
import { DeleteShippingZone } from "../types/DeleteShippingZone";
import { UpdateDefaultWeightUnit } from "../types/UpdateDefaultWeightUnit";
import { import {
shippingZoneAddUrl, shippingZoneAddUrl,
shippingZonesListUrl, shippingZonesListUrl,
ShippingZonesListUrlQueryParams, ShippingZonesListUrlQueryParams,
shippingZoneUrl shippingZoneUrl,
ShippingZonesListUrlDialog
} from "../urls"; } from "../urls";
interface ShippingZonesListProps { interface ShippingZonesListProps {
@ -57,30 +56,18 @@ export const ShippingZonesList: React.FC<ShippingZonesListProps> = ({
const paginationState = createPaginationState(settings.rowNumber, params); const paginationState = createPaginationState(settings.rowNumber, params);
return ( const [openModal, closeModal] = createDialogActionHandlers<
<TypedShippingZones displayLoader variables={paginationState}> ShippingZonesListUrlDialog,
{({ data, loading, refetch }) => { ShippingZonesListUrlQueryParams
const handleUpdateDefaultWeightUnit = ( >(navigate, shippingZonesListUrl, params);
data: UpdateDefaultWeightUnit
) => { const { data, loading, refetch } = useShippingZoneList({
if (data.shopSettingsUpdate.errors.length === 0) { displayLoader: true,
notify({ variables: paginationState
text: intl.formatMessage(commonMessages.savedChanges)
}); });
}
};
const closeModal = () => const [deleteShippingZone, deleteShippingZoneOpts] = useShippingZoneDelete({
navigate( onCompleted: data => {
shippingZonesListUrl({
...params,
action: undefined,
ids: undefined
}),
true
);
const handleShippingZoneDelete = (data: DeleteShippingZone) => {
if (data.shippingZoneDelete.errors.length === 0) { if (data.shippingZoneDelete.errors.length === 0) {
notify({ notify({
text: intl.formatMessage(commonMessages.savedChanges) text: intl.formatMessage(commonMessages.savedChanges)
@ -88,9 +75,27 @@ export const ShippingZonesList: React.FC<ShippingZonesListProps> = ({
closeModal(); closeModal();
refetch(); refetch();
} }
}; }
});
const handleBulkDeleteShippingZone = (data: BulkDeleteShippingZone) => { const [
updateDefaultWeightUnit,
updateDefaultWeightUnitOpts
] = useDefaultWeightUnitUpdate({
onCompleted: data => {
if (data.shopSettingsUpdate.errors.length === 0) {
notify({
text: intl.formatMessage(commonMessages.savedChanges)
});
}
}
});
const [
bulkDeleteShippingZone,
bulkDeleteShippingZoneOpts
] = useShippingZoneBulkDelete({
onCompleted: data => {
if (data.shippingZoneBulkDelete.errors.length === 0) { if (data.shippingZoneBulkDelete.errors.length === 0) {
notify({ notify({
text: intl.formatMessage(commonMessages.savedChanges) text: intl.formatMessage(commonMessages.savedChanges)
@ -99,34 +104,18 @@ export const ShippingZonesList: React.FC<ShippingZonesListProps> = ({
reset(); reset();
refetch(); refetch();
} }
}; }
return ( });
<TypedDeleteShippingZone onCompleted={handleShippingZoneDelete}>
{(deleteShippingZone, deleteShippingZoneOpts) => ( const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
<TypedUpdateDefaultWeightUnit
onCompleted={handleUpdateDefaultWeightUnit}
>
{(updateDefaultWeightUnit, updateDefaultWeightUnitOpts) => (
<TypedBulkDeleteShippingZone
onCompleted={handleBulkDeleteShippingZone}
>
{(bulkDeleteShippingZone, bulkDeleteShippingZoneOpts) => {
const {
loadNextPage,
loadPreviousPage,
pageInfo
} = paginate(
maybe(() => data.shippingZones.pageInfo), maybe(() => data.shippingZones.pageInfo),
paginationState, paginationState,
params params
); );
return ( return (
<> <>
<ShippingZonesListPage <ShippingZonesListPage
defaultWeightUnit={maybe( defaultWeightUnit={maybe(() => shop.defaultWeightUnit)}
() => shop.defaultWeightUnit
)}
settings={settings} settings={settings}
disabled={ disabled={
loading || loading ||
@ -143,16 +132,11 @@ export const ShippingZonesList: React.FC<ShippingZonesListProps> = ({
onNextPage={loadNextPage} onNextPage={loadNextPage}
onPreviousPage={loadPreviousPage} onPreviousPage={loadPreviousPage}
onRemove={id => onRemove={id =>
navigate( openModal("remove", {
shippingZonesListUrl({
...params,
action: "remove",
id id
}) })
)
} }
onRowClick={id => () => onRowClick={id => () => navigate(shippingZoneUrl(id))}
navigate(shippingZoneUrl(id))}
onSubmit={unit => onSubmit={unit =>
updateDefaultWeightUnit({ updateDefaultWeightUnit({
variables: { unit } variables: { unit }
@ -166,12 +150,9 @@ export const ShippingZonesList: React.FC<ShippingZonesListProps> = ({
<IconButton <IconButton
color="primary" color="primary"
onClick={() => onClick={() =>
navigate( openModal("remove-many", {
shippingZonesListUrl({
action: "remove-many",
ids: listElements ids: listElements
}) })
)
} }
> >
<DeleteIcon /> <DeleteIcon />
@ -216,9 +197,7 @@ export const ShippingZonesList: React.FC<ShippingZonesListProps> = ({
</ActionDialog> </ActionDialog>
<ActionDialog <ActionDialog
open={params.action === "remove-many"} open={params.action === "remove-many"}
confirmButtonState={ confirmButtonState={bulkDeleteShippingZoneOpts.status}
bulkDeleteShippingZoneOpts.status
}
variant="delete" variant="delete"
title={intl.formatMessage({ title={intl.formatMessage({
defaultMessage: "Delete Shipping Zones", defaultMessage: "Delete Shipping Zones",
@ -236,10 +215,10 @@ export const ShippingZonesList: React.FC<ShippingZonesListProps> = ({
defaultMessage="{counter,plural,one{Are you sure you want to delete this shipping zone?} other{Are you sure you want to delete {displayQuantity} shipping zones?}}" defaultMessage="{counter,plural,one{Are you sure you want to delete this shipping zone?} other{Are you sure you want to delete {displayQuantity} shipping zones?}}"
description="dialog content" description="dialog content"
values={{ values={{
counter: maybe(() => params.ids.length), counter: params.ids?.length,
displayQuantity: ( displayQuantity: (
<strong> <strong>
{maybe(() => params.ids.length)} {getStringOrPlaceholder(params.ids?.length.toString())}
</strong> </strong>
) )
}} }}
@ -248,16 +227,6 @@ export const ShippingZonesList: React.FC<ShippingZonesListProps> = ({
</ActionDialog> </ActionDialog>
</> </>
); );
}}
</TypedBulkDeleteShippingZone>
)}
</TypedUpdateDefaultWeightUnit>
)}
</TypedDeleteShippingZone>
);
}}
</TypedShippingZones>
);
}; };
ShippingZonesList.displayName = "ShippingZonesList"; ShippingZonesList.displayName = "ShippingZonesList";
export default ShippingZonesList; export default ShippingZonesList;