import AppHeader from "@saleor/components/AppHeader"; import CardSpacer from "@saleor/components/CardSpacer"; import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton"; import Container from "@saleor/components/Container"; import Form from "@saleor/components/Form"; import Grid from "@saleor/components/Grid"; import Metadata, { MetadataFormData } from "@saleor/components/Metadata"; import PageHeader from "@saleor/components/PageHeader"; import SaveButtonBar from "@saleor/components/SaveButtonBar"; import SeoForm from "@saleor/components/SeoForm"; import VisibilityCard from "@saleor/components/VisibilityCard"; import { PageErrorFragment } from "@saleor/fragments/types/PageErrorFragment"; import useDateLocalize from "@saleor/hooks/useDateLocalize"; import { sectionNames } from "@saleor/intl"; import { mapMetadataItemToInput } from "@saleor/utils/maps"; import useMetadataChangeTrigger from "@saleor/utils/metadata/useMetadataChangeTrigger"; import { ContentState, convertFromRaw, convertToRaw, RawDraftContentState } from "draft-js"; import React from "react"; import { useIntl } from "react-intl"; import { maybe } from "../../../misc"; import { PageDetails_page } from "../../types/PageDetails"; import PageInfo from "../PageInfo"; export interface PageDetailsPageFormData extends MetadataFormData { content: RawDraftContentState; isPublished: boolean; publicationDate: string; seoDescription: string; seoTitle: string; slug: string; title: string; } export interface PageDetailsPageProps { disabled: boolean; errors: PageErrorFragment[]; page: PageDetails_page; allowEmptySlug?: boolean; saveButtonBarState: ConfirmButtonTransitionState; onBack: () => void; onRemove: () => void; onSubmit: (data: PageDetailsPageFormData) => Promise; } const PageDetailsPage: React.FC = ({ disabled, errors, page, saveButtonBarState, onBack, onRemove, onSubmit }) => { const intl = useIntl(); const localizeDate = useDateLocalize(); const { isMetadataModified, isPrivateMetadataModified, makeChangeHandler: makeMetadataChangeHandler } = useMetadataChangeTrigger(); const pageExists = page !== null; const initialForm: PageDetailsPageFormData = { content: maybe( () => JSON.parse(page.contentJson), convertToRaw(ContentState.createFromText("")) ), isPublished: page?.isPublished, metadata: pageExists ? page?.metadata?.map(mapMetadataItemToInput) : [], privateMetadata: pageExists ? page?.privateMetadata?.map(mapMetadataItemToInput) : [], publicationDate: page?.publicationDate || "", seoDescription: page?.seoDescription || "", seoTitle: page?.seoTitle || "", slug: page?.slug || "", title: page?.title || "" }; const handleSubmit = (data: PageDetailsPageFormData) => { const metadata = isMetadataModified ? data.metadata : undefined; const privateMetadata = isPrivateMetadataModified ? data.privateMetadata : undefined; return onSubmit({ ...data, isPublished: data.isPublished || !!data.publicationDate, metadata, privateMetadata }); }; return (
{({ change, data, hasChanged, submit }) => { const changeMetadata = makeMetadataChangeHandler(change); return ( {intl.formatMessage(sectionNames.pages)} page.title) } />
convertFromRaw(data.content) .getPlainText() .slice(0, 300), "" )} onChange={change} slug={data.slug} slugPlaceholder={data.title} title={data.seoTitle} titlePlaceholder={data.title} helperText={intl.formatMessage({ defaultMessage: "Add search engine title and description to make this page easier to find" })} />
); }}
); }; PageDetailsPage.displayName = "PageDetailsPage"; export default PageDetailsPage;