Change rateType from enum to string (#1121)

* Change rateType from enum to string

* Update snapshots

* Fix accidental recurrency caused by race condition

* Handle null type on SEO form

* Trigger deployment

* Fallback to empty string for undefined/null values
This commit is contained in:
Jakub Majorek 2021-05-24 15:50:41 +02:00 committed by GitHub
parent fbfe3c8d7c
commit 5ace78f279
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 282 additions and 531 deletions

View file

@ -6562,119 +6562,19 @@
"src_dot_taxes_dot_components_dot_CountryList_dot_577035076": {
"string": "Country Name"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_1040021611": {
"context": "tax rate",
"string": "Accommodation"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_1260218997": {
"context": "tax rate",
"string": "Social housing"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_1323923780": {
"context": "tax rate",
"string": "Bikes"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_1451721797": {
"context": "tax rate",
"string": "Newspapers"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_1755013298": {
"string": "Category"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_2022558114": {
"string": "Tax Rate"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_2185495435": {
"context": "tax rate",
"string": "Admission to cultural events"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_2201910191": {
"context": "tax rate",
"string": "Baby foodstuffs"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_231341634": {
"context": "tax rate",
"string": "Domestic services"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_2332795012": {
"context": "tax rate",
"string": "Foodstuffs"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_2394675125": {
"context": "tax rate",
"string": "Books"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_2465450918": {
"context": "tax rate",
"string": "Agricultural supplies"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_2482229874": {
"context": "tax rate",
"string": "Standard"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_2553129615": {
"context": "tax rate",
"string": "Passenger transport"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_2557534380": {
"context": "tax rate",
"string": "Admission to entertainment events"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_2584490289": {
"context": "tax rate",
"string": "Children's clothing"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_2616794607": {
"context": "tax rate",
"string": "Admission to sporting events"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_2737618795": {
"context": "header",
"string": "Tax Rates in {countryName}"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_2948462144": {
"context": "tax rate",
"string": "Medical"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_3066312070": {
"string": "No reduced tax categories found"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_331632763": {
"context": "tax rate",
"string": "Hotels"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_331757068": {
"context": "tax rate",
"string": "E-books"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_3500730003": {
"context": "tax rate",
"string": "Domestic fuel"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_3525010870": {
"context": "tax rate",
"string": "Water"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_3911019760": {
"context": "tax rate",
"string": "Advertising"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_4199760668": {
"context": "tax rate",
"string": "Property renovations"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_752780599": {
"context": "tax rate",
"string": "Wine"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_776474251": {
"context": "tax rate",
"string": "Restaurants"
},
"src_dot_taxes_dot_components_dot_CountryTaxesPage_dot_815189256": {
"context": "tax rate",
"string": "Pharmaceuticals"
},
"src_dot_taxes_dot_components_dot_TaxConfiguration_dot_142803418": {
"string": "All products prices are entered with tax included"
},

View file

@ -699,9 +699,9 @@ input CatalogueInput {
}
type Category implements Node & ObjectWithMetadata {
id: ID!
seoTitle: String
seoDescription: String
id: ID!
name: String!
description: JSONString
slug: String!
@ -774,9 +774,9 @@ input CategorySortingInput {
}
type CategoryTranslatableContent implements Node {
id: ID!
seoTitle: String
seoDescription: String
id: ID!
name: String!
description: JSONString
descriptionJson: JSONString @deprecated(reason: "Will be removed in Saleor 4.0. Use the `description` field instead.")
@ -791,9 +791,9 @@ type CategoryTranslate {
}
type CategoryTranslation implements Node {
id: ID!
seoTitle: String
seoDescription: String
id: ID!
name: String!
description: JSONString
language: LanguageDisplay!
@ -813,7 +813,6 @@ type Channel implements Node {
slug: String!
currencyCode: String!
hasOrders: Boolean!
shippingZones: [ShippingZone!]!
}
type ChannelActivate {
@ -1094,9 +1093,9 @@ type ChoiceValue {
}
type Collection implements Node & ObjectWithMetadata {
id: ID!
seoTitle: String
seoDescription: String
id: ID!
name: String!
description: JSONString
slug: String!
@ -1122,9 +1121,9 @@ type CollectionBulkDelete {
}
type CollectionChannelListing implements Node {
id: ID!
publicationDate: Date
isPublished: Boolean!
id: ID!
channel: Channel!
}
@ -1250,9 +1249,9 @@ input CollectionSortingInput {
}
type CollectionTranslatableContent implements Node {
id: ID!
seoTitle: String
seoDescription: String
id: ID!
name: String!
description: JSONString
descriptionJson: JSONString @deprecated(reason: "Will be removed in Saleor 4.0. Use the `description` field instead.")
@ -1267,9 +1266,9 @@ type CollectionTranslate {
}
type CollectionTranslation implements Node {
id: ID!
seoTitle: String
seoDescription: String
id: ID!
name: String!
description: JSONString
language: LanguageDisplay!
@ -2975,6 +2974,8 @@ type Order implements Node & ObjectWithMetadata {
availableShippingMethods: [ShippingMethod]
invoices: [Invoice]
number: String
original: ID
origin: OrderOriginEnum!
isPaid: Boolean!
paymentStatus: PaymentChargeStatusEnum!
paymentStatusDisplay: String!
@ -3359,6 +3360,12 @@ type OrderMarkAsPaid {
errors: [OrderError!]!
}
enum OrderOriginEnum {
CHECKOUT
DRAFT
REISSUE
}
type OrderRefund {
order: Order
orderErrors: [OrderError!]! @deprecated(reason: "Use errors field instead. This field will be removed in Saleor 4.0.")
@ -3489,9 +3496,9 @@ type OrderVoid {
}
type Page implements Node & ObjectWithMetadata {
id: ID!
seoTitle: String
seoDescription: String
id: ID!
title: String!
content: JSONString
publicationDate: Date
@ -3625,9 +3632,9 @@ input PageSortingInput {
}
type PageTranslatableContent implements Node {
id: ID!
seoTitle: String
seoDescription: String
id: ID!
title: String!
content: JSONString
contentJson: JSONString @deprecated(reason: "Will be removed in Saleor 4.0. Use the `content` field instead.")
@ -3642,9 +3649,9 @@ type PageTranslate {
}
type PageTranslation implements Node {
id: ID!
seoTitle: String
seoDescription: String
id: ID!
title: String!
content: JSONString
language: LanguageDisplay!
@ -4759,7 +4766,7 @@ type Query {
type ReducedRate {
rate: Float!
rateType: TaxRateType!
rateType: String!
}
type RefreshToken {
@ -5443,34 +5450,6 @@ input StockInput {
quantity: Int!
}
enum TaxRateType {
ACCOMMODATION
ADMISSION_TO_CULTURAL_EVENTS
ADMISSION_TO_ENTERTAINMENT_EVENTS
ADMISSION_TO_SPORTING_EVENTS
ADVERTISING
AGRICULTURAL_SUPPLIES
BABY_FOODSTUFFS
BIKES
BOOKS
CHILDRENS_CLOTHING
DOMESTIC_FUEL
DOMESTIC_SERVICES
E_BOOKS
FOODSTUFFS
HOTELS
MEDICAL
NEWSPAPERS
PASSENGER_TRANSPORT
PHARMACEUTICALS
PROPERTY_RENOVATIONS
RESTAURANTS
SOCIAL_HOUSING
STANDARD
WATER
WINE
}
type TaxType {
description: String
taxCode: String

View file

@ -81,7 +81,7 @@ const useStyles = makeStyles(
);
interface SeoFormProps {
description?: string;
description?: string | null;
descriptionPlaceholder: string;
disabled?: boolean;
errors?: Array<
@ -90,7 +90,7 @@ interface SeoFormProps {
loading?: boolean;
helperText?: string;
allowEmptySlug?: boolean;
title: string;
title: string | null;
slug: string;
slugPlaceholder?: string;
titlePlaceholder: string;
@ -224,7 +224,7 @@ const SeoForm: React.FC<SeoFormProps> = props => {
/>
<FormSpacer />
<TextField
error={title.length > maxTitleLength}
error={title?.length > maxTitleLength}
name={SeoField.title}
label={
<div className={classes.labelContainer}>
@ -251,7 +251,7 @@ const SeoForm: React.FC<SeoFormProps> = props => {
}
}}
helperText={intl.formatMessage(seoFieldMessage)}
value={title}
value={title ?? ""}
disabled={loading || disabled}
placeholder={titlePlaceholder}
onChange={onChange}
@ -259,7 +259,7 @@ const SeoForm: React.FC<SeoFormProps> = props => {
/>
<FormSpacer />
<TextField
error={description.length > maxDescriptionLength}
error={description?.length > maxDescriptionLength}
name={SeoField.description}
label={
<div className={classes.labelContainer}>
@ -286,7 +286,7 @@ const SeoForm: React.FC<SeoFormProps> = props => {
maxLength: maxDescriptionLength
}
}}
value={description}
value={description ?? ""}
onChange={onChange}
disabled={loading || disabled}
fullWidth

View file

@ -4,7 +4,7 @@ import { ExtendedFormHelperTextProps } from "@saleor/channels/components/Channel
import { makeStyles } from "@saleor/theme";
import { FetchMoreProps } from "@saleor/types";
import classNames from "classnames";
import Downshift, { ControllerStateAndHelpers } from "downshift";
import Downshift from "downshift";
import { filter } from "fuzzaldrin";
import React from "react";
@ -81,13 +81,7 @@ const SingleAutocompleteSelectFieldComponent: React.FC<SingleAutocompleteSelectF
} = props;
const classes = useStyles(props);
const handleChange = (
item: string,
stateAndHelpers: ControllerStateAndHelpers
) => {
stateAndHelpers.reset({
inputValue: ""
});
const handleChange = (item: string) => {
onChange({
target: {
name,
@ -104,7 +98,7 @@ const SingleAutocompleteSelectFieldComponent: React.FC<SingleAutocompleteSelectF
itemToString={() => displayValue || ""}
onInputValueChange={value => debounceFn(value)}
onSelect={handleChange}
selectedItem={value}
selectedItem={value || ""}
>
{({
getInputProps,
@ -157,11 +151,6 @@ const SingleAutocompleteSelectFieldComponent: React.FC<SingleAutocompleteSelectF
closeMenu();
};
// fix for bug where input value is returned from debounce as id instead of label
if (value === inputValue && !!inputValue) {
ensureProperValues();
}
const TextFieldComponent = nakedInput ? InputBase : TextField;
const commonInputProps = {

View file

@ -3,15 +3,13 @@
// @generated
// This file was automatically generated and should not be edited.
import { TaxRateType } from "./../../types/globalTypes";
// ====================================================
// GraphQL fragment: CountryWithTaxesFragment
// ====================================================
export interface CountryWithTaxesFragment_vat_reducedRates {
__typename: "ReducedRate";
rateType: TaxRateType;
rateType: string;
rate: number;
}

View file

@ -3708,7 +3708,20 @@ exports[`Storyshots Generics / Channels availability card default 1`] = `
</span>
<div
class="CardTitle-toolbar-id"
/>
>
<button
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-text-id MuiButton-textPrimary-id"
data-test-id="channels-availiability-manage-button"
tabindex="0"
type="button"
>
<span
class="MuiButton-label-id"
>
Manage
</span>
</button>
</div>
</div>
<div
class="CardTitle-children-id"
@ -3781,7 +3794,20 @@ exports[`Storyshots Generics / Channels availability card with onChange 1`] = `
</span>
<div
class="CardTitle-toolbar-id"
/>
>
<button
class="MuiButtonBase-root-id MuiButton-root-id MuiButton-text-id MuiButton-textPrimary-id"
data-test-id="channels-availiability-manage-button"
tabindex="0"
type="button"
>
<span
class="MuiButton-label-id"
>
Manage
</span>
</button>
</div>
</div>
<div
class="CardTitle-children-id"
@ -242328,7 +242354,7 @@ exports[`Storyshots Views / Taxes / Reduced Tax Categories default 1`] = `
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
>
Admission to cultural events
ADMISSION_TO_CULTURAL_EVENTS
</td>
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
@ -242342,7 +242368,7 @@ exports[`Storyshots Views / Taxes / Reduced Tax Categories default 1`] = `
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
>
Admission to entertainment events
ADMISSION_TO_ENTERTAINMENT_EVENTS
</td>
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
@ -242356,7 +242382,7 @@ exports[`Storyshots Views / Taxes / Reduced Tax Categories default 1`] = `
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
>
Books
BOOKS
</td>
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
@ -242370,7 +242396,7 @@ exports[`Storyshots Views / Taxes / Reduced Tax Categories default 1`] = `
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
>
Foodstuffs
FOODSTUFFS
</td>
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
@ -242384,7 +242410,7 @@ exports[`Storyshots Views / Taxes / Reduced Tax Categories default 1`] = `
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
>
Hotels
HOTELS
</td>
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
@ -242398,7 +242424,7 @@ exports[`Storyshots Views / Taxes / Reduced Tax Categories default 1`] = `
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
>
Newspapers
NEWSPAPERS
</td>
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
@ -242412,7 +242438,7 @@ exports[`Storyshots Views / Taxes / Reduced Tax Categories default 1`] = `
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
>
Passenger transport
PASSENGER_TRANSPORT
</td>
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
@ -242426,7 +242452,7 @@ exports[`Storyshots Views / Taxes / Reduced Tax Categories default 1`] = `
<td
class="MuiTableCell-root-id MuiTableCell-body-id"
>
Pharmaceuticals
PHARMACEUTICALS
</td>
<td
class="MuiTableCell-root-id MuiTableCell-body-id"

File diff suppressed because it is too large Load diff

View file

@ -13,9 +13,8 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
import Skeleton from "@saleor/components/Skeleton";
import { sectionNames } from "@saleor/intl";
import { makeStyles } from "@saleor/theme";
import { TaxRateType } from "@saleor/types/globalTypes";
import React from "react";
import { FormattedMessage, IntlShape, useIntl } from "react-intl";
import { FormattedMessage, useIntl } from "react-intl";
import { maybe, renderCollection } from "../../../misc";
import { CountryList_shop_countries_vat_reducedRates } from "../../types/CountryList";
@ -29,111 +28,6 @@ const useStyles = makeStyles(
{ name: "CountryTaxesPage" }
);
function translateTaxRates(intl: IntlShape): Record<TaxRateType, string> {
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[];
@ -145,7 +39,6 @@ const CountryTaxesPage: React.FC<CountryTaxesPageProps> = props => {
const classes = useStyles(props);
const intl = useIntl();
const translatedTaxRates = translateTaxRates(intl);
return (
<Container>
@ -189,10 +82,7 @@ const CountryTaxesPage: React.FC<CountryTaxesPageProps> = props => {
key={taxCategory ? taxCategory.rateType : "skeleton"}
>
<TableCell>
{maybe<React.ReactNode>(
() => translatedTaxRates[taxCategory.rateType],
<Skeleton />
)}
{taxCategory?.rateType ?? <Skeleton />}
</TableCell>
<TableCell>
{maybe<React.ReactNode>(

View file

@ -3,15 +3,13 @@
// @generated
// This file was automatically generated and should not be edited.
import { TaxRateType } from "./../../types/globalTypes";
// ====================================================
// GraphQL query operation: CountryList
// ====================================================
export interface CountryList_shop_countries_vat_reducedRates {
__typename: "ReducedRate";
rateType: TaxRateType;
rateType: string;
rate: number;
}

View file

@ -951,34 +951,6 @@ export enum StockErrorCode {
UNIQUE = "UNIQUE",
}
export enum TaxRateType {
ACCOMMODATION = "ACCOMMODATION",
ADMISSION_TO_CULTURAL_EVENTS = "ADMISSION_TO_CULTURAL_EVENTS",
ADMISSION_TO_ENTERTAINMENT_EVENTS = "ADMISSION_TO_ENTERTAINMENT_EVENTS",
ADMISSION_TO_SPORTING_EVENTS = "ADMISSION_TO_SPORTING_EVENTS",
ADVERTISING = "ADVERTISING",
AGRICULTURAL_SUPPLIES = "AGRICULTURAL_SUPPLIES",
BABY_FOODSTUFFS = "BABY_FOODSTUFFS",
BIKES = "BIKES",
BOOKS = "BOOKS",
CHILDRENS_CLOTHING = "CHILDRENS_CLOTHING",
DOMESTIC_FUEL = "DOMESTIC_FUEL",
DOMESTIC_SERVICES = "DOMESTIC_SERVICES",
E_BOOKS = "E_BOOKS",
FOODSTUFFS = "FOODSTUFFS",
HOTELS = "HOTELS",
MEDICAL = "MEDICAL",
NEWSPAPERS = "NEWSPAPERS",
PASSENGER_TRANSPORT = "PASSENGER_TRANSPORT",
PHARMACEUTICALS = "PHARMACEUTICALS",
PROPERTY_RENOVATIONS = "PROPERTY_RENOVATIONS",
RESTAURANTS = "RESTAURANTS",
SOCIAL_HOUSING = "SOCIAL_HOUSING",
STANDARD = "STANDARD",
WATER = "WATER",
WINE = "WINE",
}
export enum UploadErrorCode {
GRAPHQL_ERROR = "GRAPHQL_ERROR",
}