import ConfirmButton from "@saleor/components/ConfirmButton"; import { IMessage } from "@saleor/components/messages"; import useNotifier from "@saleor/hooks/useNotifier"; import { getByIds } from "@saleor/orders/components/OrderReturnPage/utils"; import React from "react"; import { useIntl } from "react-intl"; import useGiftCardList from "../../providers/GiftCardListProvider/hooks/useGiftCardList"; import useGiftCardListBulkActions from "../../providers/GiftCardListProvider/hooks/useGiftCardListBulkActions"; import { GIFT_CARD_LIST_QUERY } from "../../types"; import { bulkEnableDisableSectionMessages as messages } from "./messages"; import { useGiftCardBulkActivateMutation, useGiftCardBulkDeactivateMutation } from "./mutations"; import { GiftCardBulkActivate } from "./types/GiftCardBulkActivate"; import { GiftCardBulkDeactivate } from "./types/GiftCardBulkDeactivate"; const BulkEnableDisableSection: React.FC = () => { const intl = useIntl(); const notify = useNotifier(); const { listElements: ids, reset } = useGiftCardListBulkActions(); const { giftCards } = useGiftCardList(); const onActivateCompleted = (data: GiftCardBulkActivate) => { const { errors, count } = data?.giftCardBulkActivate; const notifierData: IMessage = !!errors?.length ? { status: "error", text: intl.formatMessage(messages.errorActivateAlertText, { count }) } : { status: "success", text: intl.formatMessage(messages.successActivateAlertText, { count }) }; notify(notifierData); if (!errors.length) { reset(); } }; const onDeactivateCompleted = (data: GiftCardBulkDeactivate) => { const { errors, count } = data?.giftCardBulkDeactivate; const notifierData: IMessage = !!errors?.length ? { status: "error", text: intl.formatMessage(messages.errorDeactivateAlertText, { count }) } : { status: "success", text: intl.formatMessage(messages.successDeactivateAlertText, { count }) }; notify(notifierData); if (!errors.length) { reset(); } }; const hasAnyEnabledCardsSelected = giftCards .filter(getByIds(ids)) .some(({ isActive }) => isActive); const areAllSelectedCardsActive = giftCards .filter(getByIds(ids)) .every(({ isActive }) => isActive); const hasAnyDisabledCardsSelected = giftCards .filter(getByIds(ids)) .some(({ isActive }) => !isActive); const areAllSelectedCardsDisabled = giftCards .filter(getByIds(ids)) .every(({ isActive }) => !isActive); const [ activateGiftCards, activateGiftCardsOpts ] = useGiftCardBulkActivateMutation({ onCompleted: onActivateCompleted, refetchQueries: [GIFT_CARD_LIST_QUERY] }); const [ deactivateGiftCards, deactivateGiftCardsOpts ] = useGiftCardBulkDeactivateMutation({ onCompleted: onDeactivateCompleted, refetchQueries: [GIFT_CARD_LIST_QUERY] }); const handleActivateGiftCards = () => activateGiftCards({ variables: { ids } }); const handleDeactivateGiftCards = () => deactivateGiftCards({ variables: { ids } }); const isSelectionMixed = hasAnyEnabledCardsSelected && hasAnyDisabledCardsSelected; return ( <> {(areAllSelectedCardsDisabled || isSelectionMixed) && ( {intl.formatMessage(messages.enableLabel)} )} {(areAllSelectedCardsActive || isSelectionMixed) && ( {intl.formatMessage(messages.disableLabel)} )} ); }; export default BulkEnableDisableSection;