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 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 { 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 FormData { 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: FormData) => void; } const PageDetailsPage: React.FC = ({ disabled, errors, page, saveButtonBarState, onBack, onRemove, onSubmit }) => { const intl = useIntl(); const localizeDate = useDateLocalize(); const pageExists = page !== null; const initialForm: FormData = { content: maybe( () => JSON.parse(page.contentJson), convertToRaw(ContentState.createFromText("")) ), isPublished: maybe(() => page.isPublished, false), publicationDate: maybe(() => page.publicationDate, ""), seoDescription: maybe(() => page.seoDescription || "", ""), seoTitle: maybe(() => page.seoTitle || "", ""), slug: maybe(() => page.slug, ""), title: maybe(() => page.title, "") }; const handleSubmit = (data: FormData) => onSubmit(getParsedData(data)); const getParsedData = (data: FormData) => ({ ...data, isPublished: data.isPublished || !!data.publicationDate }); return (
{({ change, data, hasChanged, submit }) => ( {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;