2019-06-19 14:40:52 +00:00
import DialogContentText from "@material-ui/core/DialogContentText" ;
import IconButton from "@material-ui/core/IconButton" ;
import DeleteIcon from "@material-ui/icons/Delete" ;
2019-08-09 10:26:22 +00:00
import React from "react" ;
2019-08-26 21:26:36 +00:00
import { FormattedMessage , useIntl } from "react-intl" ;
2019-06-19 14:40:52 +00:00
import ActionDialog from "@saleor/components/ActionDialog" ;
2019-08-09 11:14:35 +00:00
import { configurationMenuUrl } from "@saleor/configuration" ;
2019-06-19 14:40:52 +00:00
import useBulkActions from "@saleor/hooks/useBulkActions" ;
2019-08-09 11:14:35 +00:00
import useListSettings from "@saleor/hooks/useListSettings" ;
2019-06-19 14:40:52 +00:00
import useNavigator from "@saleor/hooks/useNavigator" ;
import useNotifier from "@saleor/hooks/useNotifier" ;
import usePaginator , {
createPaginationState
} from "@saleor/hooks/usePaginator" ;
import useShop from "@saleor/hooks/useShop" ;
2019-10-09 12:13:54 +00:00
import useUser from "@saleor/hooks/useUser" ;
2019-08-26 21:26:36 +00:00
import { commonMessages } from "@saleor/intl" ;
2019-12-06 17:11:46 +00:00
import { maybe } from "@saleor/misc" ;
2019-08-09 11:14:35 +00:00
import { ListViews } from "@saleor/types" ;
2019-06-19 14:40:52 +00:00
import ShippingZonesListPage from "../components/ShippingZonesListPage" ;
import {
TypedBulkDeleteShippingZone ,
TypedDeleteShippingZone ,
TypedUpdateDefaultWeightUnit
} from "../mutations" ;
import { TypedShippingZones } from "../queries" ;
import { BulkDeleteShippingZone } from "../types/BulkDeleteShippingZone" ;
import { DeleteShippingZone } from "../types/DeleteShippingZone" ;
import { UpdateDefaultWeightUnit } from "../types/UpdateDefaultWeightUnit" ;
import {
shippingZoneAddUrl ,
shippingZonesListUrl ,
ShippingZonesListUrlQueryParams ,
shippingZoneUrl
} from "../urls" ;
interface ShippingZonesListProps {
params : ShippingZonesListUrlQueryParams ;
}
2019-11-07 11:34:54 +00:00
export const ShippingZonesList : React.FC < ShippingZonesListProps > = ( {
params
} ) = > {
2019-06-19 14:40:52 +00:00
const navigate = useNavigator ( ) ;
const notify = useNotifier ( ) ;
const paginate = usePaginator ( ) ;
const shop = useShop ( ) ;
2019-10-09 12:13:54 +00:00
const { user } = useUser ( ) ;
2019-06-19 14:40:52 +00:00
const { isSelected , listElements , reset , toggle , toggleAll } = useBulkActions (
params . ids
) ;
2019-08-09 11:14:35 +00:00
const { updateListSettings , settings } = useListSettings (
ListViews . SHIPPING_METHODS_LIST
) ;
2019-08-26 21:26:36 +00:00
const intl = useIntl ( ) ;
2019-06-19 14:40:52 +00:00
2019-08-09 11:14:35 +00:00
const paginationState = createPaginationState ( settings . rowNumber , params ) ;
2019-06-19 14:40:52 +00:00
return (
< TypedShippingZones displayLoader variables = { paginationState } >
{ ( { data , loading , refetch } ) = > {
const handleUpdateDefaultWeightUnit = (
data : UpdateDefaultWeightUnit
) = > {
if ( data . shopSettingsUpdate . 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
} ) ;
}
} ;
const closeModal = ( ) = >
navigate (
shippingZonesListUrl ( {
. . . params ,
action : undefined ,
ids : undefined
} ) ,
true
) ;
const handleShippingZoneDelete = ( 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
} ) ;
closeModal ( ) ;
refetch ( ) ;
}
} ;
const handleBulkDeleteShippingZone = ( data : BulkDeleteShippingZone ) = > {
if ( data . shippingZoneBulkDelete . 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 ( ) ;
reset ( ) ;
refetch ( ) ;
}
} ;
return (
< TypedDeleteShippingZone onCompleted = { handleShippingZoneDelete } >
{ ( deleteShippingZone , deleteShippingZoneOpts ) = > (
< TypedUpdateDefaultWeightUnit
onCompleted = { handleUpdateDefaultWeightUnit }
>
{ ( updateDefaultWeightUnit , updateDefaultWeightUnitOpts ) = > (
< TypedBulkDeleteShippingZone
onCompleted = { handleBulkDeleteShippingZone }
>
{ ( bulkDeleteShippingZone , bulkDeleteShippingZoneOpts ) = > {
const {
loadNextPage ,
loadPreviousPage ,
pageInfo
} = paginate (
maybe ( ( ) = > data . shippingZones . pageInfo ) ,
paginationState ,
params
) ;
return (
< >
< ShippingZonesListPage
defaultWeightUnit = { maybe (
( ) = > shop . defaultWeightUnit
) }
2019-08-09 11:14:35 +00:00
settings = { settings }
2019-06-19 14:40:52 +00:00
disabled = {
loading ||
deleteShippingZoneOpts . loading ||
updateDefaultWeightUnitOpts . loading
}
shippingZones = { maybe ( ( ) = >
data . shippingZones . edges . map ( edge = > edge . node )
) }
pageInfo = { pageInfo }
onAdd = { ( ) = > navigate ( shippingZoneAddUrl ) }
onBack = { ( ) = > navigate ( configurationMenuUrl ) }
2019-08-09 11:14:35 +00:00
onUpdateListSettings = { updateListSettings }
2019-06-19 14:40:52 +00:00
onNextPage = { loadNextPage }
onPreviousPage = { loadPreviousPage }
onRemove = { id = >
navigate (
shippingZonesListUrl ( {
. . . params ,
action : "remove" ,
id
} )
)
}
onRowClick = { id = > ( ) = >
navigate ( shippingZoneUrl ( id ) ) }
onSubmit = { unit = >
updateDefaultWeightUnit ( {
variables : { unit }
} )
}
isChecked = { isSelected }
selected = { listElements . length }
toggle = { toggle }
toggleAll = { toggleAll }
toolbar = {
< IconButton
color = "primary"
onClick = { ( ) = >
navigate (
shippingZonesListUrl ( {
action : "remove-many" ,
ids : listElements
} )
)
}
>
< DeleteIcon / >
< / IconButton >
}
2019-10-09 12:13:54 +00:00
userPermissions = { maybe ( ( ) = > user . permissions , [ ] ) }
2019-06-19 14:40:52 +00:00
/ >
< ActionDialog
open = { params . action === "remove" }
2019-12-06 17:17:44 +00:00
confirmButtonState = { deleteShippingZoneOpts . status }
2019-06-19 14:40:52 +00:00
variant = "delete"
2019-08-26 21:26:36 +00:00
title = { intl . formatMessage ( {
defaultMessage : "Delete Shipping Zone" ,
description : "dialog header"
2019-06-19 14:40:52 +00:00
} ) }
onClose = { closeModal }
onConfirm = { ( ) = >
deleteShippingZone ( {
variables : { id : params.id }
} )
}
>
2019-08-26 21:26:36 +00:00
< DialogContentText >
< FormattedMessage
defaultMessage = "Are you sure you want to delete {shippingZoneName} shipping zone?"
values = { {
shippingZoneName : (
< strong >
{ maybe (
( ) = >
data . shippingZones . edges . find (
edge = > edge . node . id === params . id
) . node . name ,
"..."
) }
< / strong >
)
} }
/ >
< / DialogContentText >
2019-06-19 14:40:52 +00:00
< / ActionDialog >
< ActionDialog
open = { params . action === "remove-many" }
2019-12-06 17:11:46 +00:00
confirmButtonState = {
2019-12-06 17:17:44 +00:00
bulkDeleteShippingZoneOpts . status
2019-12-06 17:11:46 +00:00
}
2019-06-19 14:40:52 +00:00
variant = "delete"
2019-08-26 21:26:36 +00:00
title = { intl . formatMessage ( {
defaultMessage : "Delete Shipping Zones" ,
description : "dialog header"
2019-06-19 14:40:52 +00:00
} ) }
onClose = { closeModal }
onConfirm = { ( ) = >
bulkDeleteShippingZone ( {
variables : { ids : params.ids }
} )
}
>
2019-08-26 21:26:36 +00:00
< DialogContentText >
< FormattedMessage
2020-02-13 11:14:16 +00:00
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?}}"
2019-08-26 21:26:36 +00:00
description = "dialog content"
values = { {
counter : maybe ( ( ) = > params . ids . length ) ,
displayQuantity : (
< strong >
{ maybe ( ( ) = > params . ids . length ) }
< / strong >
)
} }
/ >
< / DialogContentText >
2019-06-19 14:40:52 +00:00
< / ActionDialog >
< / >
) ;
} }
< / TypedBulkDeleteShippingZone >
) }
< / TypedUpdateDefaultWeightUnit >
) }
< / TypedDeleteShippingZone >
) ;
} }
< / TypedShippingZones >
) ;
} ;
ShippingZonesList . displayName = "ShippingZonesList" ;
export default ShippingZonesList ;