Merge pull request #985 from mirumee/SALEOR-2270/update-nullable-editor-js-fields
Saleor 2270/update nullable editor js fields
This commit is contained in:
commit
626fa1336f
61 changed files with 215 additions and 202 deletions
|
@ -671,7 +671,7 @@ type Category implements Node & ObjectWithMetadata {
|
|||
seoDescription: String
|
||||
id: ID!
|
||||
name: String!
|
||||
description: JSONString!
|
||||
description: JSONString
|
||||
slug: String!
|
||||
parent: Category
|
||||
level: Int!
|
||||
|
@ -746,7 +746,7 @@ type CategoryTranslatableContent implements Node {
|
|||
seoDescription: String
|
||||
id: ID!
|
||||
name: String!
|
||||
description: JSONString!
|
||||
description: JSONString
|
||||
descriptionJson: JSONString @deprecated(reason: "Will be removed in Saleor 4.0. Use the `description` field instead.")
|
||||
translation(languageCode: LanguageCodeEnum!): CategoryTranslation
|
||||
category: Category
|
||||
|
@ -763,7 +763,7 @@ type CategoryTranslation implements Node {
|
|||
seoDescription: String
|
||||
id: ID!
|
||||
name: String!
|
||||
description: JSONString!
|
||||
description: JSONString
|
||||
language: LanguageDisplay!
|
||||
descriptionJson: JSONString @deprecated(reason: "Will be removed in Saleor 4.0. Use the `description` field instead.")
|
||||
}
|
||||
|
@ -1050,7 +1050,7 @@ type Collection implements Node & ObjectWithMetadata {
|
|||
seoDescription: String
|
||||
id: ID!
|
||||
name: String!
|
||||
description: JSONString!
|
||||
description: JSONString
|
||||
slug: String!
|
||||
privateMetadata: [MetadataItem]!
|
||||
metadata: [MetadataItem]!
|
||||
|
@ -1205,7 +1205,7 @@ type CollectionTranslatableContent implements Node {
|
|||
seoDescription: String
|
||||
id: ID!
|
||||
name: String!
|
||||
description: JSONString!
|
||||
description: JSONString
|
||||
descriptionJson: JSONString @deprecated(reason: "Will be removed in Saleor 4.0. Use the `description` field instead.")
|
||||
translation(languageCode: LanguageCodeEnum!): CollectionTranslation
|
||||
collection: Collection
|
||||
|
@ -1222,7 +1222,7 @@ type CollectionTranslation implements Node {
|
|||
seoDescription: String
|
||||
id: ID!
|
||||
name: String!
|
||||
description: JSONString!
|
||||
description: JSONString
|
||||
language: LanguageDisplay!
|
||||
descriptionJson: JSONString @deprecated(reason: "Will be removed in Saleor 4.0. Use the `description` field instead.")
|
||||
}
|
||||
|
@ -3307,7 +3307,7 @@ type Page implements Node & ObjectWithMetadata {
|
|||
seoDescription: String
|
||||
id: ID!
|
||||
title: String!
|
||||
content: JSONString!
|
||||
content: JSONString
|
||||
publicationDate: Date
|
||||
isPublished: Boolean!
|
||||
slug: String!
|
||||
|
@ -3441,7 +3441,7 @@ type PageTranslatableContent implements Node {
|
|||
seoDescription: String
|
||||
id: ID!
|
||||
title: String!
|
||||
content: JSONString!
|
||||
content: JSONString
|
||||
contentJson: JSONString @deprecated(reason: "Will be removed in Saleor 4.0. Use the `content` field instead.")
|
||||
translation(languageCode: LanguageCodeEnum!): PageTranslation
|
||||
page: Page
|
||||
|
@ -3458,7 +3458,7 @@ type PageTranslation implements Node {
|
|||
seoDescription: String
|
||||
id: ID!
|
||||
title: String!
|
||||
content: JSONString!
|
||||
content: JSONString
|
||||
language: LanguageDisplay!
|
||||
contentJson: JSONString @deprecated(reason: "Will be removed in Saleor 4.0. Use the `content` field instead.")
|
||||
}
|
||||
|
@ -3834,7 +3834,7 @@ type Product implements Node & ObjectWithMetadata {
|
|||
seoTitle: String
|
||||
seoDescription: String
|
||||
name: String!
|
||||
description: JSONString!
|
||||
description: JSONString
|
||||
productType: ProductType!
|
||||
slug: String!
|
||||
category: Category
|
||||
|
@ -4140,7 +4140,7 @@ type ProductTranslatableContent implements Node {
|
|||
seoTitle: String
|
||||
seoDescription: String
|
||||
name: String!
|
||||
description: JSONString!
|
||||
description: JSONString
|
||||
descriptionJson: JSONString @deprecated(reason: "Will be removed in Saleor 4.0. Use the `description` field instead.")
|
||||
translation(languageCode: LanguageCodeEnum!): ProductTranslation
|
||||
product: Product
|
||||
|
@ -4157,7 +4157,7 @@ type ProductTranslation implements Node {
|
|||
seoTitle: String
|
||||
seoDescription: String
|
||||
name: String!
|
||||
description: JSONString!
|
||||
description: JSONString
|
||||
language: LanguageDisplay!
|
||||
descriptionJson: JSONString @deprecated(reason: "Will be removed in Saleor 4.0. Use the `description` field instead.")
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ export interface CategoryCreate_categoryCreate_category {
|
|||
backgroundImage: CategoryCreate_categoryCreate_category_backgroundImage | null;
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
parent: CategoryCreate_categoryCreate_category_parent | null;
|
||||
|
|
|
@ -165,7 +165,7 @@ export interface CategoryDetails_category {
|
|||
backgroundImage: CategoryDetails_category_backgroundImage | null;
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
parent: CategoryDetails_category_parent | null;
|
||||
|
|
|
@ -39,7 +39,7 @@ export interface CategoryUpdate_categoryUpdate_category {
|
|||
backgroundImage: CategoryUpdate_categoryUpdate_category_backgroundImage | null;
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
parent: CategoryUpdate_categoryUpdate_category_parent | null;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { WindowTitle } from "@saleor/components/WindowTitle";
|
||||
import useNavigator from "@saleor/hooks/useNavigator";
|
||||
import useNotifier from "@saleor/hooks/useNotifier";
|
||||
import { getParsedDataForJsonStringField } from "@saleor/translations/utils";
|
||||
import createMetadataCreateHandler from "@saleor/utils/handlers/metadataCreateHandler";
|
||||
import {
|
||||
useMetadataUpdate,
|
||||
|
@ -48,7 +49,7 @@ export const CategoryCreateView: React.FC<CategoryCreateViewProps> = ({
|
|||
const result = await createCategory({
|
||||
variables: {
|
||||
input: {
|
||||
description: JSON.stringify(formData.description),
|
||||
description: getParsedDataForJsonStringField(formData.description),
|
||||
name: formData.name,
|
||||
seo: {
|
||||
description: formData.seoDescription,
|
||||
|
|
|
@ -13,6 +13,7 @@ import usePaginator, {
|
|||
createPaginationState
|
||||
} from "@saleor/hooks/usePaginator";
|
||||
import { commonMessages } from "@saleor/intl";
|
||||
import { getParsedDataForJsonStringField } from "@saleor/translations/utils";
|
||||
import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers";
|
||||
import createMetadataUpdateHandler from "@saleor/utils/handlers/metadataUpdateHandler";
|
||||
import { mapNodeToChoice } from "@saleor/utils/maps";
|
||||
|
@ -188,7 +189,7 @@ export const CategoryDetails: React.FC<CategoryDetailsProps> = ({
|
|||
id,
|
||||
input: {
|
||||
backgroundImageAlt: formData.backgroundImageAlt,
|
||||
description: JSON.stringify(formData.description),
|
||||
description: getParsedDataForJsonStringField(formData.description),
|
||||
name: formData.name,
|
||||
seo: {
|
||||
description: formData.seoDescription,
|
||||
|
|
|
@ -102,7 +102,7 @@ export interface CollectionDetails_collection {
|
|||
privateMetadata: (CollectionDetails_collection_privateMetadata | null)[];
|
||||
backgroundImage: CollectionDetails_collection_backgroundImage | null;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
products: CollectionDetails_collection_products | null;
|
||||
|
|
|
@ -48,7 +48,7 @@ export interface CollectionUpdate_collectionUpdate_collection {
|
|||
privateMetadata: (CollectionUpdate_collectionUpdate_collection_privateMetadata | null)[];
|
||||
backgroundImage: CollectionUpdate_collectionUpdate_collection_backgroundImage | null;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
}
|
||||
|
|
|
@ -48,7 +48,7 @@ export interface CreateCollection_collectionCreate_collection {
|
|||
privateMetadata: (CreateCollection_collectionCreate_collection_privateMetadata | null)[];
|
||||
backgroundImage: CreateCollection_collectionCreate_collection_backgroundImage | null;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import useChannels from "@saleor/hooks/useChannels";
|
|||
import useNavigator from "@saleor/hooks/useNavigator";
|
||||
import useNotifier from "@saleor/hooks/useNotifier";
|
||||
import { commonMessages } from "@saleor/intl";
|
||||
import { getParsedDataForJsonStringField } from "@saleor/translations/utils";
|
||||
import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers";
|
||||
import createMetadataCreateHandler from "@saleor/utils/handlers/metadataCreateHandler";
|
||||
import {
|
||||
|
@ -102,7 +103,7 @@ export const CollectionCreate: React.FC<CollectionCreateProps> = ({
|
|||
input: {
|
||||
backgroundImage: formData.backgroundImage.value,
|
||||
backgroundImageAlt: formData.backgroundImageAlt,
|
||||
description: JSON.stringify(formData.description),
|
||||
description: getParsedDataForJsonStringField(formData.description),
|
||||
name: formData.name,
|
||||
seo: {
|
||||
description: formData.seoDescription,
|
||||
|
|
|
@ -21,6 +21,7 @@ import usePaginator, {
|
|||
} from "@saleor/hooks/usePaginator";
|
||||
import { commonMessages } from "@saleor/intl";
|
||||
import useProductSearch from "@saleor/searches/useProductSearch";
|
||||
import { getParsedDataForJsonStringField } from "@saleor/translations/utils";
|
||||
import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers";
|
||||
import createMetadataUpdateHandler from "@saleor/utils/handlers/metadataUpdateHandler";
|
||||
import {
|
||||
|
@ -198,7 +199,7 @@ export const CollectionDetails: React.FC<CollectionDetailsProps> = ({
|
|||
const handleUpdate = async (formData: CollectionUpdateData) => {
|
||||
const input: CollectionInput = {
|
||||
backgroundImageAlt: formData.backgroundImageAlt,
|
||||
description: JSON.stringify(formData.description),
|
||||
description: getParsedDataForJsonStringField(formData.description),
|
||||
name: formData.name,
|
||||
seo: {
|
||||
description: formData.seoDescription,
|
||||
|
|
|
@ -37,7 +37,7 @@ export interface CategoryDetailsFragment {
|
|||
backgroundImage: CategoryDetailsFragment_backgroundImage | null;
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
parent: CategoryDetailsFragment_parent | null;
|
||||
|
|
|
@ -14,7 +14,7 @@ export interface CategoryTranslationFragment_translation_language {
|
|||
export interface CategoryTranslationFragment_translation {
|
||||
__typename: "CategoryTranslation";
|
||||
id: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
language: CategoryTranslationFragment_translation_language;
|
||||
name: string;
|
||||
seoDescription: string | null;
|
||||
|
@ -25,7 +25,7 @@ export interface CategoryTranslationFragment_category {
|
|||
__typename: "Category";
|
||||
id: string;
|
||||
name: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ export interface CollectionDetailsFragment {
|
|||
privateMetadata: (CollectionDetailsFragment_privateMetadata | null)[];
|
||||
backgroundImage: CollectionDetailsFragment_backgroundImage | null;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ export interface CollectionTranslationFragment_collection {
|
|||
__typename: "Collection";
|
||||
id: string;
|
||||
name: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ export interface CollectionTranslationFragment_translation_language {
|
|||
export interface CollectionTranslationFragment_translation {
|
||||
__typename: "CollectionTranslation";
|
||||
id: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
language: CollectionTranslationFragment_translation_language;
|
||||
name: string;
|
||||
seoDescription: string | null;
|
||||
|
|
|
@ -109,7 +109,7 @@ export interface PageDetailsFragment {
|
|||
pageType: PageDetailsFragment_pageType;
|
||||
metadata: (PageDetailsFragment_metadata | null)[];
|
||||
privateMetadata: (PageDetailsFragment_privateMetadata | null)[];
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
publicationDate: any | null;
|
||||
|
|
|
@ -17,7 +17,7 @@ export interface PageTranslatableFragment_translation_language {
|
|||
export interface PageTranslatableFragment_translation {
|
||||
__typename: "PageTranslation";
|
||||
id: string;
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
title: string;
|
||||
|
@ -27,7 +27,7 @@ export interface PageTranslatableFragment_translation {
|
|||
export interface PageTranslatableFragment {
|
||||
__typename: "PageTranslatableContent";
|
||||
id: string;
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
title: string;
|
||||
|
|
|
@ -11,7 +11,7 @@ import { LanguageCodeEnum } from "./../../types/globalTypes";
|
|||
export interface PageTranslationFragment_page {
|
||||
__typename: "Page";
|
||||
id: string;
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
title: string;
|
||||
|
@ -26,7 +26,7 @@ export interface PageTranslationFragment_translation_language {
|
|||
export interface PageTranslationFragment_translation {
|
||||
__typename: "PageTranslation";
|
||||
id: string;
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
title: string;
|
||||
|
|
|
@ -253,7 +253,7 @@ export interface Product {
|
|||
privateMetadata: (Product_privateMetadata | null)[];
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
rating: number | null;
|
||||
|
|
|
@ -12,7 +12,7 @@ export interface ProductTranslationFragment_product {
|
|||
__typename: "Product";
|
||||
id: string;
|
||||
name: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ export interface ProductTranslationFragment_translation_language {
|
|||
export interface ProductTranslationFragment_translation {
|
||||
__typename: "ProductTranslation";
|
||||
id: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
language: ProductTranslationFragment_translation_language;
|
||||
name: string;
|
||||
seoDescription: string | null;
|
||||
|
|
|
@ -122,7 +122,7 @@ function usePageForm(
|
|||
title: page?.title || ""
|
||||
});
|
||||
const [content, changeContent] = useRichText({
|
||||
initial: pageExists ? page?.content : null,
|
||||
initial: page?.content,
|
||||
triggerChange
|
||||
});
|
||||
|
||||
|
|
|
@ -117,7 +117,7 @@ export interface PageCreate_pageCreate_page {
|
|||
pageType: PageCreate_pageCreate_page_pageType;
|
||||
metadata: (PageCreate_pageCreate_page_metadata | null)[];
|
||||
privateMetadata: (PageCreate_pageCreate_page_privateMetadata | null)[];
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
publicationDate: any | null;
|
||||
|
|
|
@ -109,7 +109,7 @@ export interface PageDetails_page {
|
|||
pageType: PageDetails_page_pageType;
|
||||
metadata: (PageDetails_page_metadata | null)[];
|
||||
privateMetadata: (PageDetails_page_privateMetadata | null)[];
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
publicationDate: any | null;
|
||||
|
|
|
@ -116,7 +116,7 @@ export interface PageUpdate_pageUpdate_page {
|
|||
pageType: PageUpdate_pageUpdate_page_pageType;
|
||||
metadata: (PageUpdate_pageUpdate_page_metadata | null)[];
|
||||
privateMetadata: (PageUpdate_pageUpdate_page_privateMetadata | null)[];
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
publicationDate: any | null;
|
||||
|
|
|
@ -12,6 +12,7 @@ import useNotifier from "@saleor/hooks/useNotifier";
|
|||
import usePageSearch from "@saleor/searches/usePageSearch";
|
||||
import usePageTypeSearch from "@saleor/searches/usePageTypeSearch";
|
||||
import useProductSearch from "@saleor/searches/useProductSearch";
|
||||
import { getParsedDataForJsonStringField } from "@saleor/translations/utils";
|
||||
import createMetadataCreateHandler from "@saleor/utils/handlers/metadataCreateHandler";
|
||||
import {
|
||||
useMetadataUpdate,
|
||||
|
@ -128,7 +129,7 @@ export const PageCreate: React.FC<PageCreateProps> = ({ params }) => {
|
|||
attributes: formData.attributes,
|
||||
updatedFileAttributes
|
||||
}),
|
||||
content: JSON.stringify(formData.content),
|
||||
content: getParsedDataForJsonStringField(formData.content),
|
||||
isPublished: formData.isPublished,
|
||||
pageType: formData.pageType,
|
||||
publicationDate: formData.publicationDate,
|
||||
|
|
|
@ -23,6 +23,7 @@ import useNotifier from "@saleor/hooks/useNotifier";
|
|||
import { commonMessages } from "@saleor/intl";
|
||||
import usePageSearch from "@saleor/searches/usePageSearch";
|
||||
import useProductSearch from "@saleor/searches/useProductSearch";
|
||||
import { getParsedDataForJsonStringField } from "@saleor/translations/utils";
|
||||
import createMetadataUpdateHandler from "@saleor/utils/handlers/metadataUpdateHandler";
|
||||
import {
|
||||
useMetadataUpdate,
|
||||
|
@ -53,7 +54,7 @@ const createPageInput = (
|
|||
attributes: data.attributes,
|
||||
updatedFileAttributes
|
||||
}),
|
||||
content: JSON.stringify(data.content),
|
||||
content: getParsedDataForJsonStringField(data.content),
|
||||
isPublished: data.isPublished,
|
||||
publicationDate: data.publicationDate,
|
||||
seo: {
|
||||
|
|
|
@ -253,7 +253,7 @@ export interface ProductChannelListingUpdate_productChannelListingUpdate_product
|
|||
privateMetadata: (ProductChannelListingUpdate_productChannelListingUpdate_product_privateMetadata | null)[];
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
rating: number | null;
|
||||
|
|
|
@ -260,7 +260,7 @@ export interface ProductCreate_productCreate_product {
|
|||
privateMetadata: (ProductCreate_productCreate_product_privateMetadata | null)[];
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
rating: number | null;
|
||||
|
|
|
@ -253,7 +253,7 @@ export interface ProductDetails_product {
|
|||
privateMetadata: (ProductDetails_product_privateMetadata | null)[];
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
rating: number | null;
|
||||
|
|
|
@ -259,7 +259,7 @@ export interface ProductImageCreate_productImageCreate_product {
|
|||
privateMetadata: (ProductImageCreate_productImageCreate_product_privateMetadata | null)[];
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
rating: number | null;
|
||||
|
|
|
@ -259,7 +259,7 @@ export interface ProductImageUpdate_productImageUpdate_product {
|
|||
privateMetadata: (ProductImageUpdate_productImageUpdate_product_privateMetadata | null)[];
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
rating: number | null;
|
||||
|
|
|
@ -260,7 +260,7 @@ export interface ProductUpdate_productUpdate_product {
|
|||
privateMetadata: (ProductUpdate_productUpdate_product_privateMetadata | null)[];
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
rating: number | null;
|
||||
|
|
|
@ -259,7 +259,7 @@ export interface ProductVariantReorder_productVariantReorder_product {
|
|||
privateMetadata: (ProductVariantReorder_productVariantReorder_product_privateMetadata | null)[];
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
rating: number | null;
|
||||
|
|
|
@ -259,7 +259,7 @@ export interface ProductVariantSetDefault_productVariantSetDefault_product {
|
|||
privateMetadata: (ProductVariantSetDefault_productVariantSetDefault_product_privateMetadata | null)[];
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
rating: number | null;
|
||||
|
|
|
@ -260,7 +260,7 @@ export interface SimpleProductUpdate_productUpdate_product {
|
|||
privateMetadata: (SimpleProductUpdate_productUpdate_product_privateMetadata | null)[];
|
||||
name: string;
|
||||
slug: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoTitle: string | null;
|
||||
seoDescription: string | null;
|
||||
rating: number | null;
|
||||
|
|
|
@ -37,6 +37,7 @@ import {
|
|||
} from "@saleor/products/types/VariantCreate";
|
||||
import { getAvailabilityVariables } from "@saleor/products/utils/handlers";
|
||||
import { SearchProductTypes_search_edges_node } from "@saleor/searches/types/SearchProductTypes";
|
||||
import { getParsedDataForJsonStringField } from "@saleor/translations/utils";
|
||||
import { MutationFetchResult } from "react-apollo";
|
||||
|
||||
const getChannelsVariables = (productId: string, channels: ChannelData[]) => ({
|
||||
|
@ -108,7 +109,7 @@ export function createHandler(
|
|||
category: formData.category,
|
||||
chargeTaxes: formData.chargeTaxes,
|
||||
collections: formData.collections,
|
||||
description: JSON.stringify(formData.description),
|
||||
description: getParsedDataForJsonStringField(formData.description),
|
||||
name: formData.name,
|
||||
productType: formData.productType?.id,
|
||||
rating: formData.rating,
|
||||
|
|
|
@ -56,6 +56,7 @@ import {
|
|||
} from "@saleor/products/types/VariantCreate";
|
||||
import { mapFormsetStockToStockInput } from "@saleor/products/utils/data";
|
||||
import { getAvailabilityVariables } from "@saleor/products/utils/handlers";
|
||||
import { getParsedDataForJsonStringField } from "@saleor/translations/utils";
|
||||
import { ReorderEvent } from "@saleor/types";
|
||||
import { move } from "@saleor/utils/lists";
|
||||
import { diff } from "fast-array-diff";
|
||||
|
@ -185,7 +186,7 @@ export function createUpdateHandler(
|
|||
category: data.category,
|
||||
chargeTaxes: data.chargeTaxes,
|
||||
collections: data.collections,
|
||||
description: JSON.stringify(data.description),
|
||||
description: getParsedDataForJsonStringField(data.description),
|
||||
name: data.name,
|
||||
rating: data.rating,
|
||||
seo: {
|
||||
|
|
|
@ -5,7 +5,10 @@ import LanguageSwitch from "@saleor/components/LanguageSwitch";
|
|||
import PageHeader from "@saleor/components/PageHeader";
|
||||
import { CategoryTranslationFragment } from "@saleor/fragments/types/CategoryTranslationFragment";
|
||||
import { commonMessages, sectionNames } from "@saleor/intl";
|
||||
import { TranslationsEntitiesPageProps } from "@saleor/translations/types";
|
||||
import {
|
||||
TranslationInputFieldName,
|
||||
TranslationsEntitiesPageProps
|
||||
} from "@saleor/translations/types";
|
||||
import React from "react";
|
||||
import { useIntl } from "react-intl";
|
||||
|
||||
|
@ -17,13 +20,6 @@ export interface TranslationsCategoriesPageProps
|
|||
data: CategoryTranslationFragment;
|
||||
}
|
||||
|
||||
export const fieldNames = {
|
||||
description: "description",
|
||||
name: "name",
|
||||
seoDescription: "seoDescription",
|
||||
seoTitle: "seoTitle"
|
||||
};
|
||||
|
||||
const TranslationsCategoriesPage: React.FC<TranslationsCategoriesPageProps> = ({
|
||||
activeField,
|
||||
disabled,
|
||||
|
@ -72,14 +68,14 @@ const TranslationsCategoriesPage: React.FC<TranslationsCategoriesPageProps> = ({
|
|||
displayName: intl.formatMessage({
|
||||
defaultMessage: "Category Name"
|
||||
}),
|
||||
name: fieldNames.name,
|
||||
name: TranslationInputFieldName.name,
|
||||
translation: data?.translation?.name || null,
|
||||
type: "short" as "short",
|
||||
value: data?.category?.name
|
||||
},
|
||||
{
|
||||
displayName: intl.formatMessage(commonMessages.description),
|
||||
name: fieldNames.description,
|
||||
name: TranslationInputFieldName.description,
|
||||
translation: data?.translation?.description || null,
|
||||
type: "rich" as "rich",
|
||||
value: data?.category?.description
|
||||
|
@ -103,7 +99,7 @@ const TranslationsCategoriesPage: React.FC<TranslationsCategoriesPageProps> = ({
|
|||
displayName: intl.formatMessage({
|
||||
defaultMessage: "Search Engine Title"
|
||||
}),
|
||||
name: fieldNames.seoTitle,
|
||||
name: TranslationInputFieldName.seoTitle,
|
||||
translation: data?.translation?.seoTitle || null,
|
||||
type: "short" as "short",
|
||||
value: data?.category?.seoTitle
|
||||
|
@ -112,7 +108,7 @@ const TranslationsCategoriesPage: React.FC<TranslationsCategoriesPageProps> = ({
|
|||
displayName: intl.formatMessage({
|
||||
defaultMessage: "Search Engine Description"
|
||||
}),
|
||||
name: fieldNames.seoDescription,
|
||||
name: TranslationInputFieldName.seoDescription,
|
||||
translation: data?.translation?.seoDescription || null,
|
||||
type: "long" as "long",
|
||||
value: data?.category?.seoDescription
|
||||
|
|
|
@ -5,7 +5,10 @@ import LanguageSwitch from "@saleor/components/LanguageSwitch";
|
|||
import PageHeader from "@saleor/components/PageHeader";
|
||||
import { CollectionTranslationFragment } from "@saleor/fragments/types/CollectionTranslationFragment";
|
||||
import { commonMessages, sectionNames } from "@saleor/intl";
|
||||
import { TranslationsEntitiesPageProps } from "@saleor/translations/types";
|
||||
import {
|
||||
TranslationInputFieldName,
|
||||
TranslationsEntitiesPageProps
|
||||
} from "@saleor/translations/types";
|
||||
import React from "react";
|
||||
import { useIntl } from "react-intl";
|
||||
|
||||
|
@ -17,13 +20,6 @@ export interface TranslationsCollectionsPageProps
|
|||
data: CollectionTranslationFragment;
|
||||
}
|
||||
|
||||
export const fieldNames = {
|
||||
description: "description",
|
||||
name: "name",
|
||||
seoDescription: "seoDescription",
|
||||
seoTitle: "seoTitle"
|
||||
};
|
||||
|
||||
const TranslationsCollectionsPage: React.FC<TranslationsCollectionsPageProps> = ({
|
||||
activeField,
|
||||
disabled,
|
||||
|
@ -73,14 +69,14 @@ const TranslationsCollectionsPage: React.FC<TranslationsCollectionsPageProps> =
|
|||
displayName: intl.formatMessage({
|
||||
defaultMessage: "Collection Name"
|
||||
}),
|
||||
name: fieldNames.name,
|
||||
name: TranslationInputFieldName.name,
|
||||
translation: data?.translation?.name || null,
|
||||
type: "short" as "short",
|
||||
value: data?.collection?.name
|
||||
},
|
||||
{
|
||||
displayName: intl.formatMessage(commonMessages.description),
|
||||
name: fieldNames.description,
|
||||
name: TranslationInputFieldName.description,
|
||||
translation: data?.translation?.description || null,
|
||||
type: "rich" as "rich",
|
||||
value: data?.collection?.description
|
||||
|
@ -104,7 +100,7 @@ const TranslationsCollectionsPage: React.FC<TranslationsCollectionsPageProps> =
|
|||
displayName: intl.formatMessage({
|
||||
defaultMessage: "Search Engine Title"
|
||||
}),
|
||||
name: fieldNames.seoTitle,
|
||||
name: TranslationInputFieldName.seoTitle,
|
||||
translation: data?.translation?.seoTitle || null,
|
||||
type: "short" as "short",
|
||||
value: data?.collection?.seoTitle
|
||||
|
@ -113,7 +109,7 @@ const TranslationsCollectionsPage: React.FC<TranslationsCollectionsPageProps> =
|
|||
displayName: intl.formatMessage({
|
||||
defaultMessage: "Search Engine Description"
|
||||
}),
|
||||
name: fieldNames.seoDescription,
|
||||
name: TranslationInputFieldName.seoDescription,
|
||||
translation: data?.translation?.seoDescription || null,
|
||||
type: "long" as "long",
|
||||
value: data?.collection?.seoDescription
|
||||
|
|
|
@ -5,7 +5,10 @@ import LanguageSwitch from "@saleor/components/LanguageSwitch";
|
|||
import PageHeader from "@saleor/components/PageHeader";
|
||||
import { PageTranslationFragment } from "@saleor/fragments/types/PageTranslationFragment";
|
||||
import { commonMessages, sectionNames } from "@saleor/intl";
|
||||
import { TranslationsEntitiesPageProps } from "@saleor/translations/types";
|
||||
import {
|
||||
PageTranslationInputFieldName,
|
||||
TranslationsEntitiesPageProps
|
||||
} from "@saleor/translations/types";
|
||||
import React from "react";
|
||||
import { useIntl } from "react-intl";
|
||||
|
||||
|
@ -17,13 +20,6 @@ export interface TranslationsPagesPageProps
|
|||
data: PageTranslationFragment;
|
||||
}
|
||||
|
||||
export const fieldNames = {
|
||||
content: "content",
|
||||
seoDescription: "seoDescription",
|
||||
seoTitle: "seoTitle",
|
||||
title: "title"
|
||||
};
|
||||
|
||||
const TranslationsPagesPage: React.FC<TranslationsPagesPageProps> = ({
|
||||
activeField,
|
||||
disabled,
|
||||
|
@ -72,7 +68,7 @@ const TranslationsPagesPage: React.FC<TranslationsPagesPageProps> = ({
|
|||
displayName: intl.formatMessage({
|
||||
defaultMessage: "Page Title"
|
||||
}),
|
||||
name: fieldNames.title,
|
||||
name: PageTranslationInputFieldName.title,
|
||||
translation: data?.translation?.title || null,
|
||||
type: "short" as "short",
|
||||
value: data?.page?.title
|
||||
|
@ -82,7 +78,7 @@ const TranslationsPagesPage: React.FC<TranslationsPagesPageProps> = ({
|
|||
defaultMessage: "Content",
|
||||
description: "page content"
|
||||
}),
|
||||
name: fieldNames.content,
|
||||
name: PageTranslationInputFieldName.content,
|
||||
translation: data?.translation?.content || null,
|
||||
type: "rich" as "rich",
|
||||
value: data?.page?.content
|
||||
|
@ -106,7 +102,7 @@ const TranslationsPagesPage: React.FC<TranslationsPagesPageProps> = ({
|
|||
displayName: intl.formatMessage({
|
||||
defaultMessage: "Search Engine Title"
|
||||
}),
|
||||
name: fieldNames.seoTitle,
|
||||
name: PageTranslationInputFieldName.seoTitle,
|
||||
translation: data?.translation?.seoTitle || null,
|
||||
type: "short" as "short",
|
||||
value: data?.page?.seoTitle
|
||||
|
@ -115,7 +111,7 @@ const TranslationsPagesPage: React.FC<TranslationsPagesPageProps> = ({
|
|||
displayName: intl.formatMessage({
|
||||
defaultMessage: "Search Engine Description"
|
||||
}),
|
||||
name: fieldNames.seoDescription,
|
||||
name: PageTranslationInputFieldName.seoDescription,
|
||||
translation: data?.translation?.seoDescription || null,
|
||||
type: "long" as "long",
|
||||
value: data?.page?.seoDescription
|
||||
|
|
|
@ -5,7 +5,10 @@ import LanguageSwitch from "@saleor/components/LanguageSwitch";
|
|||
import PageHeader from "@saleor/components/PageHeader";
|
||||
import { ProductTranslationFragment } from "@saleor/fragments/types/ProductTranslationFragment";
|
||||
import { commonMessages, sectionNames } from "@saleor/intl";
|
||||
import { TranslationsEntitiesPageProps } from "@saleor/translations/types";
|
||||
import {
|
||||
TranslationInputFieldName,
|
||||
TranslationsEntitiesPageProps
|
||||
} from "@saleor/translations/types";
|
||||
import React from "react";
|
||||
import { useIntl } from "react-intl";
|
||||
|
||||
|
@ -17,13 +20,6 @@ export interface TranslationsProductsPageProps
|
|||
data: ProductTranslationFragment;
|
||||
}
|
||||
|
||||
export const fieldNames = {
|
||||
description: "description",
|
||||
name: "name",
|
||||
seoDescription: "seoDescription",
|
||||
seoTitle: "seoTitle"
|
||||
};
|
||||
|
||||
const TranslationsProductsPage: React.FC<TranslationsProductsPageProps> = ({
|
||||
activeField,
|
||||
disabled,
|
||||
|
@ -73,7 +69,7 @@ const TranslationsProductsPage: React.FC<TranslationsProductsPageProps> = ({
|
|||
displayName: intl.formatMessage({
|
||||
defaultMessage: "Product Name"
|
||||
}),
|
||||
name: fieldNames.name,
|
||||
name: TranslationInputFieldName.name,
|
||||
translation: data?.translation?.name || null,
|
||||
type: "short" as "short",
|
||||
value: data?.product?.name
|
||||
|
@ -82,7 +78,7 @@ const TranslationsProductsPage: React.FC<TranslationsProductsPageProps> = ({
|
|||
displayName: intl.formatMessage({
|
||||
defaultMessage: "Description"
|
||||
}),
|
||||
name: fieldNames.description,
|
||||
name: TranslationInputFieldName.description,
|
||||
translation: data?.translation?.description || null,
|
||||
type: "rich" as "rich",
|
||||
value: data?.product?.description
|
||||
|
@ -106,7 +102,7 @@ const TranslationsProductsPage: React.FC<TranslationsProductsPageProps> = ({
|
|||
displayName: intl.formatMessage({
|
||||
defaultMessage: "Search Engine Title"
|
||||
}),
|
||||
name: fieldNames.seoTitle,
|
||||
name: TranslationInputFieldName.seoTitle,
|
||||
translation: data?.translation?.seoTitle || null,
|
||||
type: "short" as "short",
|
||||
value: data?.product?.seoTitle
|
||||
|
@ -115,7 +111,7 @@ const TranslationsProductsPage: React.FC<TranslationsProductsPageProps> = ({
|
|||
displayName: intl.formatMessage({
|
||||
defaultMessage: "Search Engine Description"
|
||||
}),
|
||||
name: fieldNames.seoDescription,
|
||||
name: TranslationInputFieldName.seoDescription,
|
||||
translation: data?.translation?.seoDescription || null,
|
||||
type: "long" as "long",
|
||||
value: data?.product?.seoDescription
|
||||
|
|
|
@ -107,6 +107,7 @@ const updateCategoryTranslations = gql`
|
|||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const TypedUpdateCategoryTranslations = TypedMutation<
|
||||
UpdateCategoryTranslations,
|
||||
UpdateCategoryTranslationsVariables
|
||||
|
@ -143,6 +144,7 @@ const updateCollectionTranslations = gql`
|
|||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const TypedUpdateCollectionTranslations = TypedMutation<
|
||||
UpdateCollectionTranslations,
|
||||
UpdateCollectionTranslationsVariables
|
||||
|
|
|
@ -14,3 +14,17 @@ export interface TranslationsEntitiesPageProps {
|
|||
onLanguageChange: (lang: string) => void;
|
||||
onSubmit: (field: string, data: string | OutputData) => void;
|
||||
}
|
||||
|
||||
export enum TranslationInputFieldName {
|
||||
description = "description",
|
||||
name = "name",
|
||||
seoDescription = "seoDescription",
|
||||
seoTitle = "seoTitle"
|
||||
}
|
||||
|
||||
export enum PageTranslationInputFieldName {
|
||||
content = "content",
|
||||
title = "title",
|
||||
seoDescription = "seoDescription",
|
||||
seoTitle = "seoTitle"
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ export interface CategoryTranslationDetails_translation_CategoryTranslatableCont
|
|||
export interface CategoryTranslationDetails_translation_CategoryTranslatableContent_translation {
|
||||
__typename: "CategoryTranslation";
|
||||
id: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
language: CategoryTranslationDetails_translation_CategoryTranslatableContent_translation_language;
|
||||
name: string;
|
||||
seoDescription: string | null;
|
||||
|
@ -31,7 +31,7 @@ export interface CategoryTranslationDetails_translation_CategoryTranslatableCont
|
|||
__typename: "Category";
|
||||
id: string;
|
||||
name: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ export interface CategoryTranslations_translations_edges_node_CategoryTranslatab
|
|||
export interface CategoryTranslations_translations_edges_node_CategoryTranslatableContent_translation {
|
||||
__typename: "CategoryTranslation";
|
||||
id: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
language: CategoryTranslations_translations_edges_node_CategoryTranslatableContent_translation_language;
|
||||
name: string;
|
||||
seoDescription: string | null;
|
||||
|
@ -31,7 +31,7 @@ export interface CategoryTranslations_translations_edges_node_CategoryTranslatab
|
|||
__typename: "Category";
|
||||
id: string;
|
||||
name: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ export interface CollectionTranslationDetails_translation_CollectionTranslatable
|
|||
__typename: "Collection";
|
||||
id: string;
|
||||
name: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ export interface CollectionTranslationDetails_translation_CollectionTranslatable
|
|||
export interface CollectionTranslationDetails_translation_CollectionTranslatableContent_translation {
|
||||
__typename: "CollectionTranslation";
|
||||
id: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
language: CollectionTranslationDetails_translation_CollectionTranslatableContent_translation_language;
|
||||
name: string;
|
||||
seoDescription: string | null;
|
||||
|
|
|
@ -16,7 +16,7 @@ export interface CollectionTranslations_translations_edges_node_CollectionTransl
|
|||
__typename: "Collection";
|
||||
id: string;
|
||||
name: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ export interface CollectionTranslations_translations_edges_node_CollectionTransl
|
|||
export interface CollectionTranslations_translations_edges_node_CollectionTranslatableContent_translation {
|
||||
__typename: "CollectionTranslation";
|
||||
id: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
language: CollectionTranslations_translations_edges_node_CollectionTranslatableContent_translation_language;
|
||||
name: string;
|
||||
seoDescription: string | null;
|
||||
|
|
|
@ -15,7 +15,7 @@ export interface PageTranslationDetails_translation_ProductTranslatableContent {
|
|||
export interface PageTranslationDetails_translation_PageTranslatableContent_page {
|
||||
__typename: "Page";
|
||||
id: string;
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
title: string;
|
||||
|
@ -30,7 +30,7 @@ export interface PageTranslationDetails_translation_PageTranslatableContent_tran
|
|||
export interface PageTranslationDetails_translation_PageTranslatableContent_translation {
|
||||
__typename: "PageTranslation";
|
||||
id: string;
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
title: string;
|
||||
|
|
|
@ -15,7 +15,7 @@ export interface PageTranslations_translations_edges_node_ProductTranslatableCon
|
|||
export interface PageTranslations_translations_edges_node_PageTranslatableContent_page {
|
||||
__typename: "Page";
|
||||
id: string;
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
title: string;
|
||||
|
@ -30,7 +30,7 @@ export interface PageTranslations_translations_edges_node_PageTranslatableConten
|
|||
export interface PageTranslations_translations_edges_node_PageTranslatableContent_translation {
|
||||
__typename: "PageTranslation";
|
||||
id: string;
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
title: string;
|
||||
|
|
|
@ -16,7 +16,7 @@ export interface ProductTranslationDetails_translation_ProductTranslatableConten
|
|||
__typename: "Product";
|
||||
id: string;
|
||||
name: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ export interface ProductTranslationDetails_translation_ProductTranslatableConten
|
|||
export interface ProductTranslationDetails_translation_ProductTranslatableContent_translation {
|
||||
__typename: "ProductTranslation";
|
||||
id: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
language: ProductTranslationDetails_translation_ProductTranslatableContent_translation_language;
|
||||
name: string;
|
||||
seoDescription: string | null;
|
||||
|
|
|
@ -16,7 +16,7 @@ export interface ProductTranslations_translations_edges_node_ProductTranslatable
|
|||
__typename: "Product";
|
||||
id: string;
|
||||
name: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ export interface ProductTranslations_translations_edges_node_ProductTranslatable
|
|||
export interface ProductTranslations_translations_edges_node_ProductTranslatableContent_translation {
|
||||
__typename: "ProductTranslation";
|
||||
id: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
language: ProductTranslations_translations_edges_node_ProductTranslatableContent_translation_language;
|
||||
name: string;
|
||||
seoDescription: string | null;
|
||||
|
|
|
@ -22,7 +22,7 @@ export interface UpdateCategoryTranslations_categoryTranslate_category_translati
|
|||
export interface UpdateCategoryTranslations_categoryTranslate_category_translation {
|
||||
__typename: "CategoryTranslation";
|
||||
id: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
language: UpdateCategoryTranslations_categoryTranslate_category_translation_language;
|
||||
name: string;
|
||||
seoDescription: string | null;
|
||||
|
@ -33,7 +33,7 @@ export interface UpdateCategoryTranslations_categoryTranslate_category {
|
|||
__typename: "Category";
|
||||
id: string;
|
||||
name: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
translation: UpdateCategoryTranslations_categoryTranslate_category_translation | null;
|
||||
|
|
|
@ -22,7 +22,7 @@ export interface UpdateCollectionTranslations_collectionTranslate_collection_tra
|
|||
export interface UpdateCollectionTranslations_collectionTranslate_collection_translation {
|
||||
__typename: "CollectionTranslation";
|
||||
id: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
language: UpdateCollectionTranslations_collectionTranslate_collection_translation_language;
|
||||
name: string;
|
||||
seoDescription: string | null;
|
||||
|
@ -33,7 +33,7 @@ export interface UpdateCollectionTranslations_collectionTranslate_collection {
|
|||
__typename: "Collection";
|
||||
id: string;
|
||||
name: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
translation: UpdateCollectionTranslations_collectionTranslate_collection_translation | null;
|
||||
|
|
|
@ -17,7 +17,7 @@ export interface UpdatePageTranslations_pageTranslate_errors {
|
|||
export interface UpdatePageTranslations_pageTranslate_page_page {
|
||||
__typename: "Page";
|
||||
id: string;
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
title: string;
|
||||
|
@ -32,7 +32,7 @@ export interface UpdatePageTranslations_pageTranslate_page_translation_language
|
|||
export interface UpdatePageTranslations_pageTranslate_page_translation {
|
||||
__typename: "PageTranslation";
|
||||
id: string;
|
||||
content: any;
|
||||
content: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
title: string;
|
||||
|
|
|
@ -23,7 +23,7 @@ export interface UpdateProductTranslations_productTranslate_product_translation_
|
|||
export interface UpdateProductTranslations_productTranslate_product_translation {
|
||||
__typename: "ProductTranslation";
|
||||
id: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
language: UpdateProductTranslations_productTranslate_product_translation_language;
|
||||
name: string;
|
||||
seoDescription: string | null;
|
||||
|
@ -34,7 +34,7 @@ export interface UpdateProductTranslations_productTranslate_product {
|
|||
__typename: "Product";
|
||||
id: string;
|
||||
name: string;
|
||||
description: any;
|
||||
description: any | null;
|
||||
seoDescription: string | null;
|
||||
seoTitle: string | null;
|
||||
translation: UpdateProductTranslations_productTranslate_product_translation | null;
|
||||
|
|
31
src/translations/utils.ts
Normal file
31
src/translations/utils.ts
Normal file
|
@ -0,0 +1,31 @@
|
|||
import { OutputData } from "@editorjs/editorjs";
|
||||
|
||||
import {
|
||||
PageTranslationInputFieldName,
|
||||
TranslationInputFieldName
|
||||
} from "./types";
|
||||
|
||||
export const getParsedTranslationInputData = ({
|
||||
fieldName,
|
||||
data
|
||||
}: {
|
||||
fieldName: TranslationInputFieldName | PageTranslationInputFieldName;
|
||||
data: string | OutputData;
|
||||
}): Record<string, string | null> => {
|
||||
const fieldsToParse = [
|
||||
TranslationInputFieldName.description,
|
||||
PageTranslationInputFieldName.content
|
||||
];
|
||||
|
||||
if (fieldsToParse.includes(fieldName)) {
|
||||
return {
|
||||
description: getParsedDataForJsonStringField(data as OutputData)
|
||||
};
|
||||
}
|
||||
|
||||
return { [fieldName]: data as string };
|
||||
};
|
||||
|
||||
export const getParsedDataForJsonStringField = (
|
||||
data: OutputData
|
||||
): string | null => (!!data.blocks?.length ? JSON.stringify(data) : null);
|
|
@ -1,3 +1,4 @@
|
|||
import { OutputData } from "@editorjs/editorjs";
|
||||
import useNavigator from "@saleor/hooks/useNavigator";
|
||||
import useNotifier from "@saleor/hooks/useNotifier";
|
||||
import useShop from "@saleor/hooks/useShop";
|
||||
|
@ -6,18 +7,18 @@ import { stringify as stringifyQs } from "qs";
|
|||
import React from "react";
|
||||
import { useIntl } from "react-intl";
|
||||
|
||||
import { LanguageCodeEnum, TranslationInput } from "../../types/globalTypes";
|
||||
import TranslationsCategoriesPage, {
|
||||
fieldNames
|
||||
} from "../components/TranslationsCategoriesPage";
|
||||
import { LanguageCodeEnum } from "../../types/globalTypes";
|
||||
import TranslationsCategoriesPage from "../components/TranslationsCategoriesPage";
|
||||
import { TypedUpdateCategoryTranslations } from "../mutations";
|
||||
import { useCategoryTranslationDetails } from "../queries";
|
||||
import { TranslationInputFieldName } from "../types";
|
||||
import { UpdateCategoryTranslations } from "../types/UpdateCategoryTranslations";
|
||||
import {
|
||||
languageEntitiesUrl,
|
||||
languageEntityUrl,
|
||||
TranslatableEntities
|
||||
} from "../urls";
|
||||
import { getParsedTranslationInputData } from "../utils";
|
||||
|
||||
export interface TranslationsCategoriesQueryParams {
|
||||
activeField: string;
|
||||
|
@ -67,25 +68,19 @@ const TranslationsCategories: React.FC<TranslationsCategoriesProps> = ({
|
|||
return (
|
||||
<TypedUpdateCategoryTranslations onCompleted={onUpdate}>
|
||||
{(updateTranslations, updateTranslationsOpts) => {
|
||||
const handleSubmit = (field: string, data: string) => {
|
||||
const input: TranslationInput = {};
|
||||
if (field === fieldNames.description) {
|
||||
input.description = JSON.stringify(data);
|
||||
} else if (field === fieldNames.name) {
|
||||
input.name = data;
|
||||
} else if (field === fieldNames.seoDescription) {
|
||||
input.seoDescription = data;
|
||||
} else if (field === fieldNames.seoTitle) {
|
||||
input.seoTitle = data;
|
||||
}
|
||||
const handleSubmit = (
|
||||
fieldName: TranslationInputFieldName,
|
||||
data: string | OutputData
|
||||
) => {
|
||||
updateTranslations({
|
||||
variables: {
|
||||
id,
|
||||
input,
|
||||
input: getParsedTranslationInputData({ data, fieldName }),
|
||||
language: languageCode
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const translation = categoryTranslations?.data?.translation;
|
||||
|
||||
return (
|
||||
|
|
|
@ -7,18 +7,18 @@ import React from "react";
|
|||
import { useIntl } from "react-intl";
|
||||
|
||||
import { maybe } from "../../misc";
|
||||
import { LanguageCodeEnum, TranslationInput } from "../../types/globalTypes";
|
||||
import TranslationsCollectionsPage, {
|
||||
fieldNames
|
||||
} from "../components/TranslationsCollectionsPage";
|
||||
import { LanguageCodeEnum } from "../../types/globalTypes";
|
||||
import TranslationsCollectionsPage from "../components/TranslationsCollectionsPage";
|
||||
import { TypedUpdateCollectionTranslations } from "../mutations";
|
||||
import { useCollectionTranslationDetails } from "../queries";
|
||||
import { TranslationInputFieldName } from "../types";
|
||||
import { UpdateCollectionTranslations } from "../types/UpdateCollectionTranslations";
|
||||
import {
|
||||
languageEntitiesUrl,
|
||||
languageEntityUrl,
|
||||
TranslatableEntities
|
||||
} from "../urls";
|
||||
import { getParsedTranslationInputData } from "../utils";
|
||||
|
||||
export interface TranslationsCollectionsQueryParams {
|
||||
activeField: string;
|
||||
|
@ -69,21 +69,14 @@ const TranslationsCollections: React.FC<TranslationsCollectionsProps> = ({
|
|||
return (
|
||||
<TypedUpdateCollectionTranslations onCompleted={onUpdate}>
|
||||
{(updateTranslations, updateTranslationsOpts) => {
|
||||
const handleSubmit = (field: string, data: string) => {
|
||||
const input: TranslationInput = {};
|
||||
if (field === fieldNames.description) {
|
||||
input.description = JSON.stringify(data);
|
||||
} else if (field === fieldNames.name) {
|
||||
input.name = data;
|
||||
} else if (field === fieldNames.seoDescription) {
|
||||
input.seoDescription = data;
|
||||
} else if (field === fieldNames.seoTitle) {
|
||||
input.seoTitle = data;
|
||||
}
|
||||
const handleSubmit = (
|
||||
fieldName: TranslationInputFieldName,
|
||||
data: string
|
||||
) => {
|
||||
updateTranslations({
|
||||
variables: {
|
||||
id,
|
||||
input,
|
||||
input: getParsedTranslationInputData({ data, fieldName }),
|
||||
language: languageCode
|
||||
}
|
||||
});
|
||||
|
|
|
@ -6,21 +6,18 @@ import { stringify as stringifyQs } from "qs";
|
|||
import React from "react";
|
||||
import { useIntl } from "react-intl";
|
||||
|
||||
import {
|
||||
LanguageCodeEnum,
|
||||
PageTranslationInput
|
||||
} from "../../types/globalTypes";
|
||||
import TranslationsPagesPage, {
|
||||
fieldNames
|
||||
} from "../components/TranslationsPagesPage";
|
||||
import { LanguageCodeEnum } from "../../types/globalTypes";
|
||||
import TranslationsPagesPage from "../components/TranslationsPagesPage";
|
||||
import { TypedUpdatePageTranslations } from "../mutations";
|
||||
import { usePageTranslationDetails } from "../queries";
|
||||
import { TranslationInputFieldName } from "../types";
|
||||
import { UpdatePageTranslations } from "../types/UpdatePageTranslations";
|
||||
import {
|
||||
languageEntitiesUrl,
|
||||
languageEntityUrl,
|
||||
TranslatableEntities
|
||||
} from "../urls";
|
||||
import { getParsedTranslationInputData } from "../utils";
|
||||
|
||||
export interface TranslationsPagesQueryParams {
|
||||
activeField: string;
|
||||
|
@ -70,21 +67,14 @@ const TranslationsPages: React.FC<TranslationsPagesProps> = ({
|
|||
return (
|
||||
<TypedUpdatePageTranslations onCompleted={onUpdate}>
|
||||
{(updateTranslations, updateTranslationsOpts) => {
|
||||
const handleSubmit = (field: string, data: string) => {
|
||||
const input: PageTranslationInput = {};
|
||||
if (field === fieldNames.content) {
|
||||
input.content = JSON.stringify(data);
|
||||
} else if (field === fieldNames.title) {
|
||||
input.title = data;
|
||||
} else if (field === fieldNames.seoDescription) {
|
||||
input.seoDescription = data;
|
||||
} else if (field === fieldNames.seoTitle) {
|
||||
input.seoTitle = data;
|
||||
}
|
||||
const handleSubmit = (
|
||||
fieldName: TranslationInputFieldName,
|
||||
data: string
|
||||
) => {
|
||||
updateTranslations({
|
||||
variables: {
|
||||
id,
|
||||
input,
|
||||
input: getParsedTranslationInputData({ data, fieldName }),
|
||||
language: languageCode
|
||||
}
|
||||
});
|
||||
|
|
|
@ -7,18 +7,18 @@ import React from "react";
|
|||
import { useIntl } from "react-intl";
|
||||
|
||||
import { maybe } from "../../misc";
|
||||
import { LanguageCodeEnum, TranslationInput } from "../../types/globalTypes";
|
||||
import TranslationsProductsPage, {
|
||||
fieldNames
|
||||
} from "../components/TranslationsProductsPage";
|
||||
import { LanguageCodeEnum } from "../../types/globalTypes";
|
||||
import TranslationsProductsPage from "../components/TranslationsProductsPage";
|
||||
import { TypedUpdateProductTranslations } from "../mutations";
|
||||
import { useProductTranslationDetails } from "../queries";
|
||||
import { TranslationInputFieldName } from "../types";
|
||||
import { UpdateProductTranslations } from "../types/UpdateProductTranslations";
|
||||
import {
|
||||
languageEntitiesUrl,
|
||||
languageEntityUrl,
|
||||
TranslatableEntities
|
||||
} from "../urls";
|
||||
import { getParsedTranslationInputData } from "../utils";
|
||||
|
||||
export interface TranslationsProductsQueryParams {
|
||||
activeField: string;
|
||||
|
@ -68,21 +68,14 @@ const TranslationsProducts: React.FC<TranslationsProductsProps> = ({
|
|||
return (
|
||||
<TypedUpdateProductTranslations onCompleted={onUpdate}>
|
||||
{(updateTranslations, updateTranslationsOpts) => {
|
||||
const handleSubmit = (field: string, data: string) => {
|
||||
const input: TranslationInput = {};
|
||||
if (field === fieldNames.description) {
|
||||
input.description = JSON.stringify(data);
|
||||
} else if (field === fieldNames.name) {
|
||||
input.name = data;
|
||||
} else if (field === fieldNames.seoDescription) {
|
||||
input.seoDescription = data;
|
||||
} else if (field === fieldNames.seoTitle) {
|
||||
input.seoTitle = data;
|
||||
}
|
||||
const handleSubmit = (
|
||||
fieldName: TranslationInputFieldName,
|
||||
data: string
|
||||
) => {
|
||||
updateTranslations({
|
||||
variables: {
|
||||
id,
|
||||
input,
|
||||
input: getParsedTranslationInputData({ data, fieldName }),
|
||||
language: languageCode
|
||||
}
|
||||
});
|
||||
|
|
|
@ -6,18 +6,21 @@ function useRichText(opts: {
|
|||
initial: string | null;
|
||||
triggerChange: () => void;
|
||||
}): [MutableRefObject<OutputData>, RichTextEditorChange] {
|
||||
const data = useRef<OutputData>(
|
||||
opts.initial === null ? { blocks: [] } : undefined
|
||||
);
|
||||
const data = useRef<OutputData>();
|
||||
const [, setLoaded] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
if (opts.initial !== null) {
|
||||
try {
|
||||
data.current = JSON.parse(opts.initial);
|
||||
setLoaded(true);
|
||||
} catch {
|
||||
data.current = undefined;
|
||||
}
|
||||
if (opts.initial === null) {
|
||||
data.current = { blocks: [] };
|
||||
setLoaded(true);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
data.current = JSON.parse(opts.initial);
|
||||
setLoaded(true);
|
||||
} catch {
|
||||
data.current = undefined;
|
||||
}
|
||||
}, [opts.initial]);
|
||||
|
||||
|
|
Loading…
Reference in a new issue