2023-01-16 09:45:12 +00:00
|
|
|
import ConfirmButton from "@dashboard/components/ConfirmButton";
|
|
|
|
import { IMessage } from "@dashboard/components/messages";
|
2022-03-09 08:56:55 +00:00
|
|
|
import {
|
|
|
|
useGiftCardBulkActivateMutation,
|
2022-06-21 09:36:55 +00:00
|
|
|
useGiftCardBulkDeactivateMutation,
|
2023-01-16 09:45:12 +00:00
|
|
|
} from "@dashboard/graphql";
|
|
|
|
import useNotifier from "@dashboard/hooks/useNotifier";
|
|
|
|
import { getByIds } from "@dashboard/orders/components/OrderReturnPage/utils";
|
2021-09-14 13:57:02 +00:00
|
|
|
import React from "react";
|
|
|
|
import { useIntl } from "react-intl";
|
|
|
|
|
2022-03-09 08:56:55 +00:00
|
|
|
import { useGiftCardList } from "../../providers/GiftCardListProvider";
|
|
|
|
import { GIFT_CARD_LIST_QUERY } from "../../queries";
|
2021-09-14 13:57:02 +00:00
|
|
|
import { bulkEnableDisableSectionMessages as messages } from "./messages";
|
|
|
|
|
|
|
|
const BulkEnableDisableSection: React.FC = () => {
|
|
|
|
const intl = useIntl();
|
|
|
|
const notify = useNotifier();
|
|
|
|
|
2022-03-09 08:56:55 +00:00
|
|
|
const { listElements: ids, reset, giftCards } = useGiftCardList();
|
2021-09-14 13:57:02 +00:00
|
|
|
|
|
|
|
const hasAnyEnabledCardsSelected = giftCards
|
|
|
|
.filter(getByIds(ids))
|
|
|
|
.some(({ isActive }) => isActive);
|
|
|
|
|
2022-01-25 12:44:19 +00:00
|
|
|
const areAllSelectedCardsActive = giftCards
|
|
|
|
.filter(getByIds(ids))
|
|
|
|
.every(({ isActive }) => isActive);
|
|
|
|
|
2021-09-14 13:57:02 +00:00
|
|
|
const hasAnyDisabledCardsSelected = giftCards
|
|
|
|
.filter(getByIds(ids))
|
|
|
|
.some(({ isActive }) => !isActive);
|
|
|
|
|
2022-01-25 12:44:19 +00:00
|
|
|
const areAllSelectedCardsDisabled = giftCards
|
|
|
|
.filter(getByIds(ids))
|
|
|
|
.every(({ isActive }) => !isActive);
|
|
|
|
|
2021-09-14 13:57:02 +00:00
|
|
|
const [
|
|
|
|
activateGiftCards,
|
2022-06-21 09:36:55 +00:00
|
|
|
activateGiftCardsOpts,
|
2021-09-14 13:57:02 +00:00
|
|
|
] = useGiftCardBulkActivateMutation({
|
2022-03-09 08:56:55 +00:00
|
|
|
onCompleted: data => {
|
|
|
|
const { errors, count } = data?.giftCardBulkActivate;
|
|
|
|
|
|
|
|
const notifierData: IMessage = !!errors?.length
|
|
|
|
? {
|
|
|
|
status: "error",
|
2022-06-21 09:36:55 +00:00
|
|
|
text: intl.formatMessage(messages.errorActivateAlertText, {
|
|
|
|
count,
|
|
|
|
}),
|
2022-03-09 08:56:55 +00:00
|
|
|
}
|
|
|
|
: {
|
|
|
|
status: "success",
|
|
|
|
text: intl.formatMessage(messages.successActivateAlertText, {
|
2022-06-21 09:36:55 +00:00
|
|
|
count,
|
|
|
|
}),
|
2022-03-09 08:56:55 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
notify(notifierData);
|
|
|
|
|
|
|
|
if (!errors.length) {
|
|
|
|
reset();
|
|
|
|
}
|
|
|
|
},
|
2022-06-21 09:36:55 +00:00
|
|
|
refetchQueries: [GIFT_CARD_LIST_QUERY],
|
2021-09-14 13:57:02 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
const [
|
|
|
|
deactivateGiftCards,
|
2022-06-21 09:36:55 +00:00
|
|
|
deactivateGiftCardsOpts,
|
2021-09-14 13:57:02 +00:00
|
|
|
] = useGiftCardBulkDeactivateMutation({
|
2022-03-09 08:56:55 +00:00
|
|
|
onCompleted: data => {
|
|
|
|
const { errors, count } = data?.giftCardBulkDeactivate;
|
|
|
|
|
|
|
|
const notifierData: IMessage = !!errors?.length
|
|
|
|
? {
|
|
|
|
status: "error",
|
|
|
|
text: intl.formatMessage(messages.errorDeactivateAlertText, {
|
2022-06-21 09:36:55 +00:00
|
|
|
count,
|
|
|
|
}),
|
2022-03-09 08:56:55 +00:00
|
|
|
}
|
|
|
|
: {
|
|
|
|
status: "success",
|
|
|
|
text: intl.formatMessage(messages.successDeactivateAlertText, {
|
2022-06-21 09:36:55 +00:00
|
|
|
count,
|
|
|
|
}),
|
2022-03-09 08:56:55 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
notify(notifierData);
|
|
|
|
|
|
|
|
if (!errors.length) {
|
|
|
|
reset();
|
|
|
|
}
|
|
|
|
},
|
2022-06-21 09:36:55 +00:00
|
|
|
refetchQueries: [GIFT_CARD_LIST_QUERY],
|
2021-09-14 13:57:02 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
const handleActivateGiftCards = () =>
|
|
|
|
activateGiftCards({ variables: { ids } });
|
|
|
|
|
|
|
|
const handleDeactivateGiftCards = () =>
|
|
|
|
deactivateGiftCards({ variables: { ids } });
|
|
|
|
|
2022-01-25 12:44:19 +00:00
|
|
|
const isSelectionMixed =
|
|
|
|
hasAnyEnabledCardsSelected && hasAnyDisabledCardsSelected;
|
|
|
|
|
2021-09-14 13:57:02 +00:00
|
|
|
return (
|
|
|
|
<>
|
2022-01-25 12:44:19 +00:00
|
|
|
{(areAllSelectedCardsDisabled || isSelectionMixed) && (
|
|
|
|
<ConfirmButton
|
|
|
|
onClick={handleActivateGiftCards}
|
2022-01-28 12:34:20 +00:00
|
|
|
variant="secondary"
|
2022-01-25 12:44:19 +00:00
|
|
|
transitionState={activateGiftCardsOpts?.status}
|
2022-02-01 10:58:02 +00:00
|
|
|
data-test-id="activate-gift-cards"
|
2022-01-25 12:44:19 +00:00
|
|
|
>
|
|
|
|
{intl.formatMessage(messages.enableLabel)}
|
|
|
|
</ConfirmButton>
|
|
|
|
)}
|
|
|
|
{(areAllSelectedCardsActive || isSelectionMixed) && (
|
|
|
|
<ConfirmButton
|
|
|
|
onClick={handleDeactivateGiftCards}
|
2022-01-28 12:34:20 +00:00
|
|
|
variant="secondary"
|
2022-01-25 12:44:19 +00:00
|
|
|
transitionState={deactivateGiftCardsOpts?.status}
|
2022-02-01 10:58:02 +00:00
|
|
|
data-test-id="deactivate-gift-cards"
|
2022-01-25 12:44:19 +00:00
|
|
|
>
|
|
|
|
{intl.formatMessage(messages.disableLabel)}
|
|
|
|
</ConfirmButton>
|
|
|
|
)}
|
2021-09-14 13:57:02 +00:00
|
|
|
</>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
export default BulkEnableDisableSection;
|