From b4da5edb7ad049d68699956cfaffb8c9cdd1ca79 Mon Sep 17 00:00:00 2001 From: dominik-zeglen Date: Thu, 17 Oct 2019 13:47:11 +0200 Subject: [PATCH] Improve code consistency --- src/intl.ts | 1 + src/misc.ts | 157 +----------------- .../OrderDraftFinalizeDialog.tsx | 61 +++---- src/orders/views/OrderDetails/index.tsx | 10 +- .../CountryTaxesPage/CountryTaxesPage.tsx | 114 ++++++++++++- 5 files changed, 149 insertions(+), 194 deletions(-) diff --git a/src/intl.ts b/src/intl.ts index a15b105a1..4907da27a 100644 --- a/src/intl.ts +++ b/src/intl.ts @@ -1,4 +1,5 @@ import { defineMessages, IntlShape } from "react-intl"; +import { TaxRateType } from "./types/globalTypes"; export const commonMessages = defineMessages({ availability: { diff --git a/src/misc.ts b/src/misc.ts index 96bc1f921..54dd931ee 100644 --- a/src/misc.ts +++ b/src/misc.ts @@ -1,8 +1,8 @@ import moment from "moment-timezone"; import { MutationFunction, MutationResult } from "react-apollo"; +import { defineMessages, IntlShape } from "react-intl"; import urlJoin from "url-join"; -import { defineMessages, IntlShape } from "react-intl"; import { ConfirmButtonTransitionState } from "./components/ConfirmButton/ConfirmButton"; import { APP_MOUNT_URI } from "./config"; import { AddressType } from "./customers/types"; @@ -10,8 +10,7 @@ import { PartialMutationProviderOutput, UserError } from "./types"; import { AuthorizationKeyType, OrderStatus, - PaymentChargeStatusEnum, - TaxRateType + PaymentChargeStatusEnum } from "./types/globalTypes"; export type RequireAtLeastOne = Pick< @@ -181,158 +180,6 @@ export const transformAddressToForm = (data: AddressType) => ({ streetAddress2: maybe(() => data.streetAddress2, "") }); -const taxRatesMessages = defineMessages({ - accommodation: { - defaultMessage: "Accommodation", - description: "tax rate" - }, - admissionToCulturalEvents: { - defaultMessage: "Admission to cultural events", - description: "tax rate" - }, - admissionToEntertainmentEvents: { - defaultMessage: "Admission to entertainment events", - description: "tax rate" - }, - admissionToSportingEvents: { - defaultMessage: "Admission to sporting events", - description: "tax rate" - }, - advertising: { - defaultMessage: "Advertising", - description: "tax rate" - }, - agriculturalSupplies: { - defaultMessage: "Agricultural supplies", - description: "tax rate" - }, - babyFoodstuffs: { - defaultMessage: "Baby foodstuffs", - description: "tax rate" - }, - bikes: { - defaultMessage: "Bikes", - description: "tax rate" - }, - books: { - defaultMessage: "Books", - description: "tax rate" - }, - childrensClothing: { - defaultMessage: "Children's clothing", - description: "tax rate" - }, - domesticFuel: { - defaultMessage: "Domestic fuel", - description: "tax rate" - }, - domesticServices: { - defaultMessage: "Domestic services", - description: "tax rate" - }, - ebooks: { - defaultMessage: "E-books", - description: "tax rate" - }, - foodstuffs: { - defaultMessage: "Foodstuffs", - description: "tax rate" - }, - hotels: { - defaultMessage: "Hotels", - description: "tax rate" - }, - medical: { - defaultMessage: "Medical", - description: "tax rate" - }, - newspapers: { - defaultMessage: "Newspapers", - description: "tax rate" - }, - passengerTransport: { - defaultMessage: "Passenger transport", - description: "tax rate" - }, - pharmaceuticals: { - defaultMessage: "Pharmaceuticals", - description: "tax rate" - }, - propertyRenovations: { - defaultMessage: "Property renovations", - description: "tax rate" - }, - restaurants: { - defaultMessage: "Restaurants", - description: "tax rate" - }, - socialHousing: { - defaultMessage: "Social housing", - description: "tax rate" - }, - standard: { - defaultMessage: "Standard", - description: "tax rate" - }, - water: { - defaultMessage: "Water", - description: "tax rate" - } -}); - -export const translatedTaxRates = (intl: IntlShape) => ({ - [TaxRateType.ACCOMMODATION]: intl.formatMessage( - taxRatesMessages.accommodation - ), - [TaxRateType.ADMISSION_TO_CULTURAL_EVENTS]: intl.formatMessage( - taxRatesMessages.admissionToCulturalEvents - ), - [TaxRateType.ADMISSION_TO_ENTERTAINMENT_EVENTS]: intl.formatMessage( - taxRatesMessages.admissionToEntertainmentEvents - ), - [TaxRateType.ADMISSION_TO_SPORTING_EVENTS]: intl.formatMessage( - taxRatesMessages.admissionToSportingEvents - ), - [TaxRateType.ADVERTISING]: intl.formatMessage(taxRatesMessages.advertising), - [TaxRateType.AGRICULTURAL_SUPPLIES]: intl.formatMessage( - taxRatesMessages.agriculturalSupplies - ), - [TaxRateType.BABY_FOODSTUFFS]: intl.formatMessage( - taxRatesMessages.babyFoodstuffs - ), - [TaxRateType.BIKES]: intl.formatMessage(taxRatesMessages.bikes), - [TaxRateType.BOOKS]: intl.formatMessage(taxRatesMessages.books), - [TaxRateType.CHILDRENS_CLOTHING]: intl.formatMessage( - taxRatesMessages.childrensClothing - ), - [TaxRateType.DOMESTIC_FUEL]: intl.formatMessage( - taxRatesMessages.domesticFuel - ), - [TaxRateType.DOMESTIC_SERVICES]: intl.formatMessage( - taxRatesMessages.domesticServices - ), - [TaxRateType.E_BOOKS]: intl.formatMessage(taxRatesMessages.ebooks), - [TaxRateType.FOODSTUFFS]: intl.formatMessage(taxRatesMessages.foodstuffs), - [TaxRateType.HOTELS]: intl.formatMessage(taxRatesMessages.hotels), - [TaxRateType.MEDICAL]: intl.formatMessage(taxRatesMessages.medical), - [TaxRateType.NEWSPAPERS]: intl.formatMessage(taxRatesMessages.newspapers), - [TaxRateType.PASSENGER_TRANSPORT]: intl.formatMessage( - taxRatesMessages.passengerTransport - ), - [TaxRateType.PHARMACEUTICALS]: intl.formatMessage( - taxRatesMessages.pharmaceuticals - ), - [TaxRateType.PROPERTY_RENOVATIONS]: intl.formatMessage( - taxRatesMessages.propertyRenovations - ), - [TaxRateType.RESTAURANTS]: intl.formatMessage(taxRatesMessages.restaurants), - [TaxRateType.SOCIAL_HOUSING]: intl.formatMessage( - taxRatesMessages.socialHousing - ), - [TaxRateType.STANDARD]: intl.formatMessage(taxRatesMessages.standard), - [TaxRateType.WATER]: intl.formatMessage(taxRatesMessages.water) -}); - export const authorizationKeyTypes = { [AuthorizationKeyType.FACEBOOK]: "Facebook", [AuthorizationKeyType.GOOGLE_OAUTH2]: "Google OAuth2" diff --git a/src/orders/components/OrderDraftFinalizeDialog/OrderDraftFinalizeDialog.tsx b/src/orders/components/OrderDraftFinalizeDialog/OrderDraftFinalizeDialog.tsx index 91ae73a5f..03c7ed34b 100644 --- a/src/orders/components/OrderDraftFinalizeDialog/OrderDraftFinalizeDialog.tsx +++ b/src/orders/components/OrderDraftFinalizeDialog/OrderDraftFinalizeDialog.tsx @@ -5,12 +5,13 @@ import { FormattedMessage, IntlShape, useIntl } from "react-intl"; import ActionDialog from "@saleor/components/ActionDialog"; import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton"; -export type OrderDraftFinalizeWarning = - | "no-shipping" - | "no-billing" - | "no-user" - | "no-shipping-method" - | "unnecessary-shipping-method"; +export enum OrderDraftFinalizeWarning { + NO_SHIPPING, + NO_BILLING, + NO_USER, + NO_SHIPPING_METHOD, + UNNECESSARY_SHIPPING_METHOD +} export interface OrderDraftFinalizeDialogProps { confirmButtonState: ConfirmButtonTransitionState; @@ -21,30 +22,29 @@ export interface OrderDraftFinalizeDialogProps { onConfirm: () => void; } -const warningToText = (warning: OrderDraftFinalizeWarning, intl: IntlShape) => { - switch (warning) { - case "no-shipping": - return intl.formatMessage({ - defaultMessage: "No shipping address" - }); - case "no-billing": - return intl.formatMessage({ - defaultMessage: "No billing address" - }); - case "no-user": - return intl.formatMessage({ - defaultMessage: "No user information" - }); - case "no-shipping-method": - return intl.formatMessage({ - defaultMessage: "Some products require shipping, but no method provided" - }); - case "unnecessary-shipping-method": - return intl.formatMessage({ +function translateWarnings( + intl: IntlShape +): Record { + return { + [OrderDraftFinalizeWarning.NO_BILLING]: intl.formatMessage({ + defaultMessage: "No billing address" + }), + [OrderDraftFinalizeWarning.NO_SHIPPING]: intl.formatMessage({ + defaultMessage: "No shipping address" + }), + [OrderDraftFinalizeWarning.NO_SHIPPING_METHOD]: intl.formatMessage({ + defaultMessage: "Some products require shipping, but no method provided" + }), + [OrderDraftFinalizeWarning.NO_USER]: intl.formatMessage({ + defaultMessage: "No user information" + }), + [OrderDraftFinalizeWarning.UNNECESSARY_SHIPPING_METHOD]: intl.formatMessage( + { defaultMessage: "Shipping method provided, but no product requires it" - }); - } -}; + } + ) + }; +} const OrderDraftFinalizeDialog: React.StatelessComponent< OrderDraftFinalizeDialogProps @@ -57,6 +57,7 @@ const OrderDraftFinalizeDialog: React.StatelessComponent< orderNumber }) => { const intl = useIntl(); + const translatedWarnings = translateWarnings(intl); return (
    {warnings.map(warning => ( -
  • {warningToText(warning, intl)}
  • +
  • {translatedWarnings[warning]}
  • ))}
diff --git a/src/orders/views/OrderDetails/index.tsx b/src/orders/views/OrderDetails/index.tsx index 8a4052c42..928bbbf8a 100644 --- a/src/orders/views/OrderDetails/index.tsx +++ b/src/orders/views/OrderDetails/index.tsx @@ -38,13 +38,13 @@ import { OrderDetailsMessages } from "./OrderDetailsMessages"; const orderDraftFinalizeWarnings = (order: OrderDetails_order) => { const warnings = [] as OrderDraftFinalizeWarning[]; if (!(order && order.shippingAddress)) { - warnings.push("no-shipping"); + warnings.push(OrderDraftFinalizeWarning.NO_SHIPPING); } if (!(order && order.billingAddress)) { - warnings.push("no-billing"); + warnings.push(OrderDraftFinalizeWarning.NO_BILLING); } if (!(order && (order.user || order.userEmail))) { - warnings.push("no-user"); + warnings.push(OrderDraftFinalizeWarning.NO_USER); } if ( order && @@ -52,7 +52,7 @@ const orderDraftFinalizeWarnings = (order: OrderDetails_order) => { order.lines.filter(line => line.isShippingRequired).length > 0 && order.shippingMethod === null ) { - warnings.push("no-shipping-method"); + warnings.push(OrderDraftFinalizeWarning.NO_SHIPPING_METHOD); } if ( order && @@ -60,7 +60,7 @@ const orderDraftFinalizeWarnings = (order: OrderDetails_order) => { order.lines.filter(line => line.isShippingRequired).length === 0 && order.shippingMethod !== null ) { - warnings.push("unnecessary-shipping-method"); + warnings.push(OrderDraftFinalizeWarning.UNNECESSARY_SHIPPING_METHOD); } return warnings; }; diff --git a/src/taxes/components/CountryTaxesPage/CountryTaxesPage.tsx b/src/taxes/components/CountryTaxesPage/CountryTaxesPage.tsx index b1ddf1f72..ad251f9e3 100644 --- a/src/taxes/components/CountryTaxesPage/CountryTaxesPage.tsx +++ b/src/taxes/components/CountryTaxesPage/CountryTaxesPage.tsx @@ -6,7 +6,7 @@ import TableCell from "@material-ui/core/TableCell"; import TableHead from "@material-ui/core/TableHead"; import TableRow from "@material-ui/core/TableRow"; import React from "react"; -import { FormattedMessage, useIntl } from "react-intl"; +import { FormattedMessage, IntlShape, useIntl } from "react-intl"; import AppHeader from "@saleor/components/AppHeader"; import { Container } from "@saleor/components/Container"; @@ -14,7 +14,8 @@ import Grid from "@saleor/components/Grid"; import PageHeader from "@saleor/components/PageHeader"; import Skeleton from "@saleor/components/Skeleton"; import { sectionNames } from "@saleor/intl"; -import { maybe, renderCollection, translatedTaxRates } from "../../../misc"; +import { TaxRateType } from "@saleor/types/globalTypes"; +import { maybe, renderCollection } from "../../../misc"; import { CountryList_shop_countries_vat_reducedRates } from "../../types/CountryList"; const styles = createStyles({ @@ -23,6 +24,111 @@ const styles = createStyles({ } }); +function translateTaxRates(intl: IntlShape): Record { + return { + [TaxRateType.ACCOMMODATION]: intl.formatMessage({ + defaultMessage: "Accommodation", + description: "tax rate" + }), + [TaxRateType.ADMISSION_TO_CULTURAL_EVENTS]: intl.formatMessage({ + defaultMessage: "Admission to cultural events", + description: "tax rate" + }), + [TaxRateType.ADMISSION_TO_ENTERTAINMENT_EVENTS]: intl.formatMessage({ + defaultMessage: "Admission to entertainment events", + description: "tax rate" + }), + [TaxRateType.ADMISSION_TO_SPORTING_EVENTS]: intl.formatMessage({ + defaultMessage: "Admission to sporting events", + description: "tax rate" + }), + [TaxRateType.ADVERTISING]: intl.formatMessage({ + defaultMessage: "Advertising", + description: "tax rate" + }), + [TaxRateType.AGRICULTURAL_SUPPLIES]: intl.formatMessage({ + defaultMessage: "Agricultural supplies", + description: "tax rate" + }), + [TaxRateType.BABY_FOODSTUFFS]: intl.formatMessage({ + defaultMessage: "Baby foodstuffs", + description: "tax rate" + }), + [TaxRateType.BIKES]: intl.formatMessage({ + defaultMessage: "Bikes", + description: "tax rate" + }), + [TaxRateType.BOOKS]: intl.formatMessage({ + defaultMessage: "Books", + description: "tax rate" + }), + [TaxRateType.CHILDRENS_CLOTHING]: intl.formatMessage({ + defaultMessage: "Children's clothing", + description: "tax rate" + }), + [TaxRateType.DOMESTIC_FUEL]: intl.formatMessage({ + defaultMessage: "Domestic fuel", + description: "tax rate" + }), + [TaxRateType.DOMESTIC_SERVICES]: intl.formatMessage({ + defaultMessage: "Domestic services", + description: "tax rate" + }), + [TaxRateType.E_BOOKS]: intl.formatMessage({ + defaultMessage: "E-books", + description: "tax rate" + }), + [TaxRateType.FOODSTUFFS]: intl.formatMessage({ + defaultMessage: "Foodstuffs", + description: "tax rate" + }), + [TaxRateType.HOTELS]: intl.formatMessage({ + defaultMessage: "Hotels", + description: "tax rate" + }), + [TaxRateType.MEDICAL]: intl.formatMessage({ + defaultMessage: "Medical", + description: "tax rate" + }), + [TaxRateType.NEWSPAPERS]: intl.formatMessage({ + defaultMessage: "Newspapers", + description: "tax rate" + }), + [TaxRateType.PASSENGER_TRANSPORT]: intl.formatMessage({ + defaultMessage: "Passenger transport", + description: "tax rate" + }), + [TaxRateType.PHARMACEUTICALS]: intl.formatMessage({ + defaultMessage: "Pharmaceuticals", + description: "tax rate" + }), + [TaxRateType.PROPERTY_RENOVATIONS]: intl.formatMessage({ + defaultMessage: "Property renovations", + description: "tax rate" + }), + [TaxRateType.RESTAURANTS]: intl.formatMessage({ + defaultMessage: "Restaurants", + description: "tax rate" + }), + [TaxRateType.SOCIAL_HOUSING]: intl.formatMessage({ + defaultMessage: "Social housing", + description: "tax rate" + }), + [TaxRateType.STANDARD]: intl.formatMessage({ + defaultMessage: "Standard", + description: "tax rate" + }), + [TaxRateType.WATER]: intl.formatMessage({ + defaultMessage: "Water", + description: "tax rate" + }), + [TaxRateType.WINE]: intl.formatMessage({ + defaultMessage: "Wine", + description: "tax rate" + }) + }; +} + export interface CountryTaxesPageProps { countryName: string; taxCategories: CountryList_shop_countries_vat_reducedRates[]; @@ -37,8 +143,8 @@ const CountryTaxesPage = withStyles(styles, { name: "CountryTaxesPage" })( onBack }: CountryTaxesPageProps & WithStyles) => { const intl = useIntl(); + const translatedTaxRates = translateTaxRates(intl); - const taxRates = translatedTaxRates(intl); return ( @@ -82,7 +188,7 @@ const CountryTaxesPage = withStyles(styles, { name: "CountryTaxesPage" })( > {maybe( - () => taxRates[taxCategory.rateType], + () => translatedTaxRates[taxCategory.rateType], )}