saleor-dashboard/src/orders/components/OrderDiscountCommonModal/OrderDiscountCommonModal.tsx

337 lines
9.1 KiB
TypeScript
Raw Normal View History

Saleor 1856/implement discount modal 2 (#978) * Add currency to orderline unitprice and update hella lots of types * wip * Add diiscount modal component * Refactor action dialog - move buttons to separate component so they can be reused * Add discount provider to keep logic of discounts separated and wrap proper components * Add discount ccalculator util class, and make draft details summary use it, along with discounts data, modal etc * UUpdate lots of types, fragments, schema etc * Update quries and mutations * ARename OrderLineDiscountModal -> OrderDiscountCommonModal, add types etc * Add order line discount provider + consumer, same for order discount * Fix ts wip * Update schema and types * Update order discount provider * Add nnetto price to order details fragment and update lots of types * Adjust fixtures to order details containing net total * Move both order and order line provider to same dir to make types and utils more accessible * Update schema to match master * Update schema and types * Update order history, add some related components, add events etc. * Fix types * Fix schema to match master * Update messages * Update changelog * Retrigger build * Add stories and update common modal to display floats properly * Add and update stories and tests * Add optional displaying of reason in case it's empty * Make user name label for history events return email if last name and first name are absent * Update schema, types, and mutations to properly refresh * Remove unnecessary imports * Add discounts decorator to draft details page storybook * Fixs after review * Update messages * Small fixes to timeline events * Update types for order shipping price to use net as well, fix labels in draft summary and add colors to theme palette * Updaste tests, messages * Fixs after review * Add theme highlighted active and inactive color text, add valuue conversion to discount modal when changing calculation mode * Add change to changelog * Add extra options to select employee display name for order event when some data is missing. Also add filtering null elements in event header when data missing alltogether and element is null * Refactor selecting employee name in utils * Add conditional to extended timeline event when orderline is null
2021-03-05 14:52:02 +00:00
import {
Card,
CardContent,
Popper,
TextField,
Typography
} from "@material-ui/core";
import { PopperPlacementType } from "@material-ui/core/Popper";
import DialogButtons from "@saleor/components/ActionDialog/DialogButtons";
import CardSpacer from "@saleor/components/CardSpacer";
Bump macaw to 0.3 (#1807) * Update to new design theme (#1631) * Update macaw to 0.3.0 (#1623) * Update macaw to 0.3 * Use proper pagination component * Fix type errors * Remove leftover import * Remove variant and color from confirm button * Remove alias * Update macaw * Fix button type * Random fixes (#1633) * Improve layout components * Use colored svgs * Minor fixes * Fix autocomplete loaders * Fix padding * Fix button variant * Remove codegen file * Fixes after bumping macaw to 0.3 part 2 (#1638) * Fix various visual bugs * Fix type errors * Bump macaw * Random fixes part 3 (#1647) * wip * Fix mismatched paddings * Fix actions container padding * Put story in the right directory * Fix shipping zone picker * Fix minor visual bugs * Remove unused imports * Move styles to separate file * Random fixes part 4 (#1641) * Fix various visual bugs * Fix type errors * Fix last table item padding * Add outline on hover * Fix spaces * Fix spaces * Remove dead code * Fix elevation * Remove dead code * Fix shadows * Add outline to expand button * Fix spacing * Fix spacings * Fix selectable tables hover * Use proper delete icon * Fix ConfirmButtonTransitionState imports * Update src/apps/components/CustomApps/CustomApps.tsx Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> * Rework error page (#1670) * Remake error page * Fix types * Update error id styles * Fix types * Login page rework (#1703) * Rework login page * Remove outline * Fix logo and footer placement * Sort imports * Random fixes part 5 (#1669) * Fix text color in dark mode * Update password reset pages (#1714) * Update password reset pages * Update src/auth/components/ResetPasswordPage/ResetPasswordPage.tsx Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> * Fix collection page * Update dark mode logo * Bring back "create app" button * Fix spacings * Fix selects * Fix login e2e test * Fix not found page displaying * Update selector * Add missing package * Let dropdown overflow through card * Fix scroll * Fix scroll * Fix overflow on grid element * Fix e2e tests * Fix data-test-id * Update snapshots * Update messages * Update macaw * Update snapshots * Use stable macaw version Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> * Update to new design theme (#1631) * Update macaw to 0.3.0 (#1623) * Update macaw to 0.3 * Use proper pagination component * Fix type errors * Remove leftover import * Remove variant and color from confirm button * Remove alias * Update macaw * Fix button type * Random fixes (#1633) * Improve layout components * Use colored svgs * Minor fixes * Fix autocomplete loaders * Fix padding * Fix button variant * Remove codegen file * Fixes after bumping macaw to 0.3 part 2 (#1638) * Fix various visual bugs * Fix type errors * Bump macaw * Random fixes part 3 (#1647) * wip * Fix mismatched paddings * Fix actions container padding * Put story in the right directory * Fix shipping zone picker * Fix minor visual bugs * Remove unused imports * Move styles to separate file * Random fixes part 4 (#1641) * Fix various visual bugs * Fix type errors * Fix last table item padding * Add outline on hover * Fix spaces * Fix spaces * Remove dead code * Fix elevation * Remove dead code * Fix shadows * Add outline to expand button * Fix spacing * Fix spacings * Fix selectable tables hover * Use proper delete icon * Fix ConfirmButtonTransitionState imports * Update src/apps/components/CustomApps/CustomApps.tsx Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> * Rework error page (#1670) * Remake error page * Fix types * Update error id styles * Fix types * Login page rework (#1703) * Rework login page * Remove outline * Fix logo and footer placement * Sort imports * Random fixes part 5 (#1669) * Fix text color in dark mode * Update password reset pages (#1714) * Update password reset pages * Update src/auth/components/ResetPasswordPage/ResetPasswordPage.tsx Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> * Fix collection page * Update dark mode logo * Bring back "create app" button * Fix spacings * Fix selects * Fix login e2e test * Fix not found page displaying * Update selector * Add missing package * Let dropdown overflow through card * Fix scroll * Fix scroll * Fix overflow on grid element * Fix e2e tests * Fix data-test-id * Update snapshots * Update messages * Update macaw * Update snapshots * Use stable macaw version Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> * Fix visual bugs and artifacts * Fix dropdown menus being clipped (#1762) * wip * Fix clipped select menus * Remove unused import * Fix spacing * Fix tests * Fix select content appearing under dialogs (#1777) * Fix type errors * Fix bulk delete button placement * Fix filter arrow buttons * Fix messages * Remove backling from pages list * Move status above events * Update messages and snapshots Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com>
2022-01-28 12:34:20 +00:00
import ConfirmButton from "@saleor/components/ConfirmButton";
Saleor 1856/implement discount modal 2 (#978) * Add currency to orderline unitprice and update hella lots of types * wip * Add diiscount modal component * Refactor action dialog - move buttons to separate component so they can be reused * Add discount provider to keep logic of discounts separated and wrap proper components * Add discount ccalculator util class, and make draft details summary use it, along with discounts data, modal etc * UUpdate lots of types, fragments, schema etc * Update quries and mutations * ARename OrderLineDiscountModal -> OrderDiscountCommonModal, add types etc * Add order line discount provider + consumer, same for order discount * Fix ts wip * Update schema and types * Update order discount provider * Add nnetto price to order details fragment and update lots of types * Adjust fixtures to order details containing net total * Move both order and order line provider to same dir to make types and utils more accessible * Update schema to match master * Update schema and types * Update order history, add some related components, add events etc. * Fix types * Fix schema to match master * Update messages * Update changelog * Retrigger build * Add stories and update common modal to display floats properly * Add and update stories and tests * Add optional displaying of reason in case it's empty * Make user name label for history events return email if last name and first name are absent * Update schema, types, and mutations to properly refresh * Remove unnecessary imports * Add discounts decorator to draft details page storybook * Fixs after review * Update messages * Small fixes to timeline events * Update types for order shipping price to use net as well, fix labels in draft summary and add colors to theme palette * Updaste tests, messages * Fixs after review * Add theme highlighted active and inactive color text, add valuue conversion to discount modal when changing calculation mode * Add change to changelog * Add extra options to select employee display name for order event when some data is missing. Also add filtering null elements in event header when data missing alltogether and element is null * Refactor selecting employee name in utils * Add conditional to extended timeline event when orderline is null
2021-03-05 14:52:02 +00:00
import PriceField from "@saleor/components/PriceField";
import RadioGroupField from "@saleor/components/RadioGroupField";
Use graphql-codegen (#1874) * Use generated hooks in apps * Remove unused files * Use proper types in apps * Use generated hooks in attributes * Use generated hooks in auth module * Use generated hooks in categories * Use generated hooks in channels * Use generated types in collections * Remove legacy types from background tasks * Use generated hooks in customers * Use generated hooks in discounts * Use generated hook in file upload * Use generated types in gift cards * Use generated types in home * Use generated hooks in navigation * Use generated hooks in orders * Use generated hooks in pages * Use generated hooks in page types * Use generated hooks in permission groups * Use generated hooks in plugins * Use generated hooks in products * Use fragment to mark product variants * Improve code a bit * Use generated hooks in page types * Use generated types in searches * Use generated hooks in shipping * Use generated hooks in site settings * Use generated hooks in staff members * Use generated hooks in taxes * Place all gql generated files in one directory * Use generated hooks in translations * Use global types from new generated module * Use generated hooks in warehouses * Use generated hooks in webhooks * Use generated fragment types * Unclutter types * Remove hoc components * Split hooks and types * Fetch introspection file * Delete obsolete schema file * Fix rebase artifacts * Fix autoreplace * Fix auth provider tests * Fix urls * Remove leftover types * Fix rebase artifacts
2022-03-09 08:56:55 +00:00
import { DiscountValueTypeEnum, MoneyFragment } from "@saleor/graphql";
import { useUpdateEffect } from "@saleor/hooks/useUpdateEffect";
Saleor 1856/implement discount modal 2 (#978) * Add currency to orderline unitprice and update hella lots of types * wip * Add diiscount modal component * Refactor action dialog - move buttons to separate component so they can be reused * Add discount provider to keep logic of discounts separated and wrap proper components * Add discount ccalculator util class, and make draft details summary use it, along with discounts data, modal etc * UUpdate lots of types, fragments, schema etc * Update quries and mutations * ARename OrderLineDiscountModal -> OrderDiscountCommonModal, add types etc * Add order line discount provider + consumer, same for order discount * Fix ts wip * Update schema and types * Update order discount provider * Add nnetto price to order details fragment and update lots of types * Adjust fixtures to order details containing net total * Move both order and order line provider to same dir to make types and utils more accessible * Update schema to match master * Update schema and types * Update order history, add some related components, add events etc. * Fix types * Fix schema to match master * Update messages * Update changelog * Retrigger build * Add stories and update common modal to display floats properly * Add and update stories and tests * Add optional displaying of reason in case it's empty * Make user name label for history events return email if last name and first name are absent * Update schema, types, and mutations to properly refresh * Remove unnecessary imports * Add discounts decorator to draft details page storybook * Fixs after review * Update messages * Small fixes to timeline events * Update types for order shipping price to use net as well, fix labels in draft summary and add colors to theme palette * Updaste tests, messages * Fixs after review * Add theme highlighted active and inactive color text, add valuue conversion to discount modal when changing calculation mode * Add change to changelog * Add extra options to select employee display name for order event when some data is missing. Also add filtering null elements in event header when data missing alltogether and element is null * Refactor selecting employee name in utils * Add conditional to extended timeline event when orderline is null
2021-03-05 14:52:02 +00:00
import { buttonMessages } from "@saleor/intl";
Bump macaw to 0.3 (#1807) * Update to new design theme (#1631) * Update macaw to 0.3.0 (#1623) * Update macaw to 0.3 * Use proper pagination component * Fix type errors * Remove leftover import * Remove variant and color from confirm button * Remove alias * Update macaw * Fix button type * Random fixes (#1633) * Improve layout components * Use colored svgs * Minor fixes * Fix autocomplete loaders * Fix padding * Fix button variant * Remove codegen file * Fixes after bumping macaw to 0.3 part 2 (#1638) * Fix various visual bugs * Fix type errors * Bump macaw * Random fixes part 3 (#1647) * wip * Fix mismatched paddings * Fix actions container padding * Put story in the right directory * Fix shipping zone picker * Fix minor visual bugs * Remove unused imports * Move styles to separate file * Random fixes part 4 (#1641) * Fix various visual bugs * Fix type errors * Fix last table item padding * Add outline on hover * Fix spaces * Fix spaces * Remove dead code * Fix elevation * Remove dead code * Fix shadows * Add outline to expand button * Fix spacing * Fix spacings * Fix selectable tables hover * Use proper delete icon * Fix ConfirmButtonTransitionState imports * Update src/apps/components/CustomApps/CustomApps.tsx Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> * Rework error page (#1670) * Remake error page * Fix types * Update error id styles * Fix types * Login page rework (#1703) * Rework login page * Remove outline * Fix logo and footer placement * Sort imports * Random fixes part 5 (#1669) * Fix text color in dark mode * Update password reset pages (#1714) * Update password reset pages * Update src/auth/components/ResetPasswordPage/ResetPasswordPage.tsx Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> * Fix collection page * Update dark mode logo * Bring back "create app" button * Fix spacings * Fix selects * Fix login e2e test * Fix not found page displaying * Update selector * Add missing package * Let dropdown overflow through card * Fix scroll * Fix scroll * Fix overflow on grid element * Fix e2e tests * Fix data-test-id * Update snapshots * Update messages * Update macaw * Update snapshots * Use stable macaw version Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> * Update to new design theme (#1631) * Update macaw to 0.3.0 (#1623) * Update macaw to 0.3 * Use proper pagination component * Fix type errors * Remove leftover import * Remove variant and color from confirm button * Remove alias * Update macaw * Fix button type * Random fixes (#1633) * Improve layout components * Use colored svgs * Minor fixes * Fix autocomplete loaders * Fix padding * Fix button variant * Remove codegen file * Fixes after bumping macaw to 0.3 part 2 (#1638) * Fix various visual bugs * Fix type errors * Bump macaw * Random fixes part 3 (#1647) * wip * Fix mismatched paddings * Fix actions container padding * Put story in the right directory * Fix shipping zone picker * Fix minor visual bugs * Remove unused imports * Move styles to separate file * Random fixes part 4 (#1641) * Fix various visual bugs * Fix type errors * Fix last table item padding * Add outline on hover * Fix spaces * Fix spaces * Remove dead code * Fix elevation * Remove dead code * Fix shadows * Add outline to expand button * Fix spacing * Fix spacings * Fix selectable tables hover * Use proper delete icon * Fix ConfirmButtonTransitionState imports * Update src/apps/components/CustomApps/CustomApps.tsx Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> * Rework error page (#1670) * Remake error page * Fix types * Update error id styles * Fix types * Login page rework (#1703) * Rework login page * Remove outline * Fix logo and footer placement * Sort imports * Random fixes part 5 (#1669) * Fix text color in dark mode * Update password reset pages (#1714) * Update password reset pages * Update src/auth/components/ResetPasswordPage/ResetPasswordPage.tsx Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> * Fix collection page * Update dark mode logo * Bring back "create app" button * Fix spacings * Fix selects * Fix login e2e test * Fix not found page displaying * Update selector * Add missing package * Let dropdown overflow through card * Fix scroll * Fix scroll * Fix overflow on grid element * Fix e2e tests * Fix data-test-id * Update snapshots * Update messages * Update macaw * Update snapshots * Use stable macaw version Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> * Fix visual bugs and artifacts * Fix dropdown menus being clipped (#1762) * wip * Fix clipped select menus * Remove unused import * Fix spacing * Fix tests * Fix select content appearing under dialogs (#1777) * Fix type errors * Fix bulk delete button placement * Fix filter arrow buttons * Fix messages * Remove backling from pages list * Move status above events * Update messages and snapshots Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com>
2022-01-28 12:34:20 +00:00
import { ConfirmButtonTransitionState, makeStyles } from "@saleor/macaw-ui";
Saleor 1856/implement discount modal 2 (#978) * Add currency to orderline unitprice and update hella lots of types * wip * Add diiscount modal component * Refactor action dialog - move buttons to separate component so they can be reused * Add discount provider to keep logic of discounts separated and wrap proper components * Add discount ccalculator util class, and make draft details summary use it, along with discounts data, modal etc * UUpdate lots of types, fragments, schema etc * Update quries and mutations * ARename OrderLineDiscountModal -> OrderDiscountCommonModal, add types etc * Add order line discount provider + consumer, same for order discount * Fix ts wip * Update schema and types * Update order discount provider * Add nnetto price to order details fragment and update lots of types * Adjust fixtures to order details containing net total * Move both order and order line provider to same dir to make types and utils more accessible * Update schema to match master * Update schema and types * Update order history, add some related components, add events etc. * Fix types * Fix schema to match master * Update messages * Update changelog * Retrigger build * Add stories and update common modal to display floats properly * Add and update stories and tests * Add optional displaying of reason in case it's empty * Make user name label for history events return email if last name and first name are absent * Update schema, types, and mutations to properly refresh * Remove unnecessary imports * Add discounts decorator to draft details page storybook * Fixs after review * Update messages * Small fixes to timeline events * Update types for order shipping price to use net as well, fix labels in draft summary and add colors to theme palette * Updaste tests, messages * Fixs after review * Add theme highlighted active and inactive color text, add valuue conversion to discount modal when changing calculation mode * Add change to changelog * Add extra options to select employee display name for order event when some data is missing. Also add filtering null elements in event header when data missing alltogether and element is null * Refactor selecting employee name in utils * Add conditional to extended timeline event when orderline is null
2021-03-05 14:52:02 +00:00
import React, {
ChangeEvent,
MutableRefObject,
useEffect,
useRef,
useState
} from "react";
Use graphql-codegen (#1874) * Use generated hooks in apps * Remove unused files * Use proper types in apps * Use generated hooks in attributes * Use generated hooks in auth module * Use generated hooks in categories * Use generated hooks in channels * Use generated types in collections * Remove legacy types from background tasks * Use generated hooks in customers * Use generated hooks in discounts * Use generated hook in file upload * Use generated types in gift cards * Use generated types in home * Use generated hooks in navigation * Use generated hooks in orders * Use generated hooks in pages * Use generated hooks in page types * Use generated hooks in permission groups * Use generated hooks in plugins * Use generated hooks in products * Use fragment to mark product variants * Improve code a bit * Use generated hooks in page types * Use generated types in searches * Use generated hooks in shipping * Use generated hooks in site settings * Use generated hooks in staff members * Use generated hooks in taxes * Place all gql generated files in one directory * Use generated hooks in translations * Use global types from new generated module * Use generated hooks in warehouses * Use generated hooks in webhooks * Use generated fragment types * Unclutter types * Remove hoc components * Split hooks and types * Fetch introspection file * Delete obsolete schema file * Fix rebase artifacts * Fix autoreplace * Fix auth provider tests * Fix urls * Remove leftover types * Fix rebase artifacts
2022-03-09 08:56:55 +00:00
import { defineMessages, useIntl } from "react-intl";
Saleor 1856/implement discount modal 2 (#978) * Add currency to orderline unitprice and update hella lots of types * wip * Add diiscount modal component * Refactor action dialog - move buttons to separate component so they can be reused * Add discount provider to keep logic of discounts separated and wrap proper components * Add discount ccalculator util class, and make draft details summary use it, along with discounts data, modal etc * UUpdate lots of types, fragments, schema etc * Update quries and mutations * ARename OrderLineDiscountModal -> OrderDiscountCommonModal, add types etc * Add order line discount provider + consumer, same for order discount * Fix ts wip * Update schema and types * Update order discount provider * Add nnetto price to order details fragment and update lots of types * Adjust fixtures to order details containing net total * Move both order and order line provider to same dir to make types and utils more accessible * Update schema to match master * Update schema and types * Update order history, add some related components, add events etc. * Fix types * Fix schema to match master * Update messages * Update changelog * Retrigger build * Add stories and update common modal to display floats properly * Add and update stories and tests * Add optional displaying of reason in case it's empty * Make user name label for history events return email if last name and first name are absent * Update schema, types, and mutations to properly refresh * Remove unnecessary imports * Add discounts decorator to draft details page storybook * Fixs after review * Update messages * Small fixes to timeline events * Update types for order shipping price to use net as well, fix labels in draft summary and add colors to theme palette * Updaste tests, messages * Fixs after review * Add theme highlighted active and inactive color text, add valuue conversion to discount modal when changing calculation mode * Add change to changelog * Add extra options to select employee display name for order event when some data is missing. Also add filtering null elements in event header when data missing alltogether and element is null * Refactor selecting employee name in utils * Add conditional to extended timeline event when orderline is null
2021-03-05 14:52:02 +00:00
import ModalTitle from "./ModalTitle";
import {
ORDER_LINE_DISCOUNT,
OrderDiscountCommonInput,
OrderDiscountType
} from "./types";
const fullNumbersRegex = /^[0-9]*$/;
const numbersRegex = /([0-9]+\.?[0-9]*)$/;
const PERMIL = 0.01;
const useStyles = makeStyles(
theme => ({
container: {
zIndex: 1000,
marginTop: theme.spacing(1)
},
removeButton: {
"&:hover": {
backgroundColor: theme.palette.error.main
},
backgroundColor: theme.palette.error.main,
color: theme.palette.error.contrastText
},
radioContainer: {
display: "flex",
flexDirection: "row",
justifyContent: "space-between",
alignItems: "center"
},
reasonInput: {
marginTop: theme.spacing(1),
width: "100%"
},
buttonWrapper: {
display: "flex",
flexDirection: "row",
flex: 1
}
}),
{ name: "OrderLineDiscountModal" }
);
const messages = defineMessages({
buttonLabel: {
defaultMessage: "Add",
description: "add button label"
},
itemDiscountTitle: {
defaultMessage: "Discount Item",
description: "dialog title item discount"
},
orderDiscountTitle: {
defaultMessage: "Discount this Order by:",
description: "dialog title order discount"
},
percentageOption: {
defaultMessage: "Percentage",
description: "percentage option"
},
fixedAmountOption: {
defaultMessage: "Fixed Amount",
description: "fixed amount"
},
invalidValue: {
defaultMessage: "Invalid value",
description: "value input helper text"
},
discountValueLabel: {
defaultMessage: "Discount value",
description: "value input label"
},
discountReasonLabel: {
defaultMessage: "Reason",
description: "discount reason input lavel"
}
});
export interface OrderDiscountCommonModalProps {
Use graphql-codegen (#1874) * Use generated hooks in apps * Remove unused files * Use proper types in apps * Use generated hooks in attributes * Use generated hooks in auth module * Use generated hooks in categories * Use generated hooks in channels * Use generated types in collections * Remove legacy types from background tasks * Use generated hooks in customers * Use generated hooks in discounts * Use generated hook in file upload * Use generated types in gift cards * Use generated types in home * Use generated hooks in navigation * Use generated hooks in orders * Use generated hooks in pages * Use generated hooks in page types * Use generated hooks in permission groups * Use generated hooks in plugins * Use generated hooks in products * Use fragment to mark product variants * Improve code a bit * Use generated hooks in page types * Use generated types in searches * Use generated hooks in shipping * Use generated hooks in site settings * Use generated hooks in staff members * Use generated hooks in taxes * Place all gql generated files in one directory * Use generated hooks in translations * Use global types from new generated module * Use generated hooks in warehouses * Use generated hooks in webhooks * Use generated fragment types * Unclutter types * Remove hoc components * Split hooks and types * Fetch introspection file * Delete obsolete schema file * Fix rebase artifacts * Fix autoreplace * Fix auth provider tests * Fix urls * Remove leftover types * Fix rebase artifacts
2022-03-09 08:56:55 +00:00
maxPrice: MoneyFragment;
Saleor 1856/implement discount modal 2 (#978) * Add currency to orderline unitprice and update hella lots of types * wip * Add diiscount modal component * Refactor action dialog - move buttons to separate component so they can be reused * Add discount provider to keep logic of discounts separated and wrap proper components * Add discount ccalculator util class, and make draft details summary use it, along with discounts data, modal etc * UUpdate lots of types, fragments, schema etc * Update quries and mutations * ARename OrderLineDiscountModal -> OrderDiscountCommonModal, add types etc * Add order line discount provider + consumer, same for order discount * Fix ts wip * Update schema and types * Update order discount provider * Add nnetto price to order details fragment and update lots of types * Adjust fixtures to order details containing net total * Move both order and order line provider to same dir to make types and utils more accessible * Update schema to match master * Update schema and types * Update order history, add some related components, add events etc. * Fix types * Fix schema to match master * Update messages * Update changelog * Retrigger build * Add stories and update common modal to display floats properly * Add and update stories and tests * Add optional displaying of reason in case it's empty * Make user name label for history events return email if last name and first name are absent * Update schema, types, and mutations to properly refresh * Remove unnecessary imports * Add discounts decorator to draft details page storybook * Fixs after review * Update messages * Small fixes to timeline events * Update types for order shipping price to use net as well, fix labels in draft summary and add colors to theme palette * Updaste tests, messages * Fixs after review * Add theme highlighted active and inactive color text, add valuue conversion to discount modal when changing calculation mode * Add change to changelog * Add extra options to select employee display name for order event when some data is missing. Also add filtering null elements in event header when data missing alltogether and element is null * Refactor selecting employee name in utils * Add conditional to extended timeline event when orderline is null
2021-03-05 14:52:02 +00:00
onConfirm: (discount: OrderDiscountCommonInput) => void;
onClose: () => void;
onRemove: () => void;
modalType: OrderDiscountType;
anchorRef: MutableRefObject<any>;
existingDiscount: OrderDiscountCommonInput;
dialogPlacement: PopperPlacementType;
isOpen: boolean;
confirmStatus: ConfirmButtonTransitionState;
removeStatus: ConfirmButtonTransitionState;
}
const OrderDiscountCommonModal: React.FC<OrderDiscountCommonModalProps> = ({
maxPrice = { amount: null, currency: "" },
onConfirm,
modalType,
anchorRef,
onClose,
onRemove,
existingDiscount,
dialogPlacement,
isOpen,
confirmStatus,
removeStatus
}) => {
const { currency, amount: maxAmount } = maxPrice;
const getInitialDiscountValue = (calculationMode: DiscountValueTypeEnum) => {
if (!existingDiscount?.value) {
return "";
}
const stringifiedValue = existingDiscount.value.toString();
if (calculationMode === DiscountValueTypeEnum.FIXED) {
return parseFloat(stringifiedValue).toFixed(2);
}
return stringifiedValue;
};
const getInitialData = () => {
const calculationMode =
existingDiscount?.calculationMode || DiscountValueTypeEnum.PERCENTAGE;
return {
calculationMode,
reason: existingDiscount?.reason || "",
value: getInitialDiscountValue(calculationMode)
};
};
const initialData = getInitialData();
const [isValueError, setValueError] = useState<boolean>(false);
const [reason, setReason] = useState<string>(initialData.reason);
const [value, setValue] = useState<string>(initialData.value);
const [calculationMode, setCalculationMode] = useState<DiscountValueTypeEnum>(
initialData.calculationMode
);
const previousCalculationMode = useRef(calculationMode);
const classes = useStyles({});
const intl = useIntl();
const discountTypeChoices = [
{
label: intl.formatMessage(messages.percentageOption),
value: DiscountValueTypeEnum.PERCENTAGE
},
{
label: intl.formatMessage(messages.fixedAmountOption),
value: DiscountValueTypeEnum.FIXED
}
];
const isDiscountTypePercentage =
calculationMode === DiscountValueTypeEnum.PERCENTAGE;
const handleSetDiscountValue = (
event: React.ChangeEvent<HTMLInputElement>
) => {
const value = event.target.value;
handleSetError(value);
setValue(value);
};
const getParsedDiscountValue = () => parseFloat(value) || 0;
const isAmountTooLarge = () => {
const topAmount = isDiscountTypePercentage ? 100 : maxAmount;
return getParsedDiscountValue() > topAmount;
};
const handleSetError = (value: string) => {
const regexToCheck = isDiscountTypePercentage
? fullNumbersRegex
: numbersRegex;
setValueError(!regexToCheck.test(value));
};
const handleConfirm = () => {
onConfirm({
calculationMode,
reason,
value: getParsedDiscountValue()
});
};
const setDefaultValues = () => {
setReason(initialData.reason);
setValue(initialData.value);
setCalculationMode(initialData.calculationMode);
setValueError(false);
};
useEffect(setDefaultValues, [
existingDiscount?.value,
existingDiscount?.reason
]);
const handleValueConversion = () => {
if (getParsedDiscountValue() === 0) {
return;
}
const changedFromPercentageToFixed =
previousCalculationMode.current === DiscountValueTypeEnum.PERCENTAGE &&
calculationMode === DiscountValueTypeEnum.FIXED;
const recalculatedValueFromPercentageToFixed = (
getParsedDiscountValue() *
PERMIL *
maxPrice.amount
).toFixed(2);
const recalculatedValueFromFixedToPercentage = Math.round(
(getParsedDiscountValue() * (1 / PERMIL)) / maxPrice.amount
).toString();
const recalculatedValue = changedFromPercentageToFixed
? recalculatedValueFromPercentageToFixed
: recalculatedValueFromFixedToPercentage;
handleSetError(recalculatedValue);
setValue(recalculatedValue);
};
useUpdateEffect(handleValueConversion, [calculationMode]);
Saleor 1856/implement discount modal 2 (#978) * Add currency to orderline unitprice and update hella lots of types * wip * Add diiscount modal component * Refactor action dialog - move buttons to separate component so they can be reused * Add discount provider to keep logic of discounts separated and wrap proper components * Add discount ccalculator util class, and make draft details summary use it, along with discounts data, modal etc * UUpdate lots of types, fragments, schema etc * Update quries and mutations * ARename OrderLineDiscountModal -> OrderDiscountCommonModal, add types etc * Add order line discount provider + consumer, same for order discount * Fix ts wip * Update schema and types * Update order discount provider * Add nnetto price to order details fragment and update lots of types * Adjust fixtures to order details containing net total * Move both order and order line provider to same dir to make types and utils more accessible * Update schema to match master * Update schema and types * Update order history, add some related components, add events etc. * Fix types * Fix schema to match master * Update messages * Update changelog * Retrigger build * Add stories and update common modal to display floats properly * Add and update stories and tests * Add optional displaying of reason in case it's empty * Make user name label for history events return email if last name and first name are absent * Update schema, types, and mutations to properly refresh * Remove unnecessary imports * Add discounts decorator to draft details page storybook * Fixs after review * Update messages * Small fixes to timeline events * Update types for order shipping price to use net as well, fix labels in draft summary and add colors to theme palette * Updaste tests, messages * Fixs after review * Add theme highlighted active and inactive color text, add valuue conversion to discount modal when changing calculation mode * Add change to changelog * Add extra options to select employee display name for order event when some data is missing. Also add filtering null elements in event header when data missing alltogether and element is null * Refactor selecting employee name in utils * Add conditional to extended timeline event when orderline is null
2021-03-05 14:52:02 +00:00
const dialogTitle =
modalType === ORDER_LINE_DISCOUNT
? messages.itemDiscountTitle
: messages.orderDiscountTitle;
const valueFieldSymbol =
calculationMode === DiscountValueTypeEnum.FIXED ? currency : "%";
const isSubmitDisabled =
!getParsedDiscountValue() || isValueError || isAmountTooLarge();
return (
<Popper
open={isOpen}
anchorEl={anchorRef.current}
className={classes.container}
placement={dialogPlacement}
>
<Card>
<ModalTitle title={intl.formatMessage(dialogTitle)} onClose={onClose} />
<CardContent>
<RadioGroupField
innerContainerClassName={classes.radioContainer}
choices={discountTypeChoices}
name="discountType"
variant="inlineJustify"
value={calculationMode}
onChange={event => setCalculationMode(event.target.value)}
/>
<CardSpacer />
<PriceField
label={intl.formatMessage(messages.discountValueLabel)}
error={isValueError}
hint={isValueError && intl.formatMessage(messages.invalidValue)}
value={value}
onChange={handleSetDiscountValue}
currencySymbol={valueFieldSymbol}
/>
<CardSpacer />
<Typography>
{intl.formatMessage(messages.discountReasonLabel)}
</Typography>
<TextField
className={classes.reasonInput}
label={intl.formatMessage(messages.discountReasonLabel)}
value={reason}
onChange={(event: ChangeEvent<HTMLInputElement>) =>
setReason(event.target.value)
}
/>
</CardContent>
<DialogButtons
onConfirm={handleConfirm}
onClose={onClose}
disabled={isSubmitDisabled}
showBackButton={false}
confirmButtonState={confirmStatus}
>
{existingDiscount && (
<div className={classes.buttonWrapper}>
<ConfirmButton
data-test-id="button-remove"
Saleor 1856/implement discount modal 2 (#978) * Add currency to orderline unitprice and update hella lots of types * wip * Add diiscount modal component * Refactor action dialog - move buttons to separate component so they can be reused * Add discount provider to keep logic of discounts separated and wrap proper components * Add discount ccalculator util class, and make draft details summary use it, along with discounts data, modal etc * UUpdate lots of types, fragments, schema etc * Update quries and mutations * ARename OrderLineDiscountModal -> OrderDiscountCommonModal, add types etc * Add order line discount provider + consumer, same for order discount * Fix ts wip * Update schema and types * Update order discount provider * Add nnetto price to order details fragment and update lots of types * Adjust fixtures to order details containing net total * Move both order and order line provider to same dir to make types and utils more accessible * Update schema to match master * Update schema and types * Update order history, add some related components, add events etc. * Fix types * Fix schema to match master * Update messages * Update changelog * Retrigger build * Add stories and update common modal to display floats properly * Add and update stories and tests * Add optional displaying of reason in case it's empty * Make user name label for history events return email if last name and first name are absent * Update schema, types, and mutations to properly refresh * Remove unnecessary imports * Add discounts decorator to draft details page storybook * Fixs after review * Update messages * Small fixes to timeline events * Update types for order shipping price to use net as well, fix labels in draft summary and add colors to theme palette * Updaste tests, messages * Fixs after review * Add theme highlighted active and inactive color text, add valuue conversion to discount modal when changing calculation mode * Add change to changelog * Add extra options to select employee display name for order event when some data is missing. Also add filtering null elements in event header when data missing alltogether and element is null * Refactor selecting employee name in utils * Add conditional to extended timeline event when orderline is null
2021-03-05 14:52:02 +00:00
onClick={onRemove}
className={classes.removeButton}
transitionState={removeStatus}
>
{intl.formatMessage(buttonMessages.remove)}
</ConfirmButton>
</div>
)}
</DialogButtons>
</Card>
</Popper>
);
};
export default OrderDiscountCommonModal;