Merge pull request #395 from mirumee/fix/rich-text-error

Handle rich text editor content error
This commit is contained in:
Dominik Żegleń 2020-03-03 11:33:59 +01:00 committed by GitHub
commit 4c8cce4f23
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 213 additions and 192 deletions

View file

@ -36,6 +36,7 @@ All notable, unreleased changes to this project will be documented in this file.
- Remove PO files from repo and update translations #409 by @dominik-zeglen
- Add optional chaining and explicitely return "Not found" page - #408 by @dominik-zeglen
- Do not store errors in form component - #410 by @dominik-zeglen
- Handle rich text editor content error - #395 by @dominik-zeglen
## 2.0.0

View file

@ -1267,6 +1267,10 @@
"context": "button",
"string": "Add or Edit Link"
},
"src_dot_components_dot_RichTextEditor_dot_286109898": {
"context": "rich text error",
"string": "Invalid content"
},
"src_dot_components_dot_RichTextEditor_dot_2925475978": {
"string": "URL Linked"
},

View file

@ -1,6 +1,7 @@
import { makeStyles } from "@material-ui/core/styles";
import { fade } from "@material-ui/core/styles/colorManipulator";
import Typography from "@material-ui/core/Typography";
import { FormattedMessage } from "react-intl";
import classNames from "classnames";
import { RawDraftContentState } from "draft-js";
import {
@ -13,6 +14,8 @@ import isEqual from "lodash-es/isEqual";
import React from "react";
import { ChangeEvent } from "@saleor/hooks/useForm";
import ErrorBoundary from "react-error-boundary";
import { CreateCSSProperties } from "@material-ui/styles/withStyles";
import BoldIcon from "../../icons/BoldIcon";
import HeaderTwo from "../../icons/HeaderTwo";
import HeaderThree from "../../icons/HeaderThree";
@ -38,7 +41,17 @@ export interface RichTextEditorProps {
}
const useStyles = makeStyles(
theme => ({
theme => {
const editorContainer: CreateCSSProperties = {
border: `1px ${theme.palette.divider} solid`,
borderRadius: 4,
padding: "27px 12px 10px",
position: "relative",
transition: theme.transitions.duration.shortest + "ms"
};
return {
editorContainer,
error: {
color: theme.palette.error.main
},
@ -93,11 +106,7 @@ const useStyles = makeStyles(
"&:hover": {
borderColor: theme.palette.primary.main
},
border: `1px ${theme.palette.divider} solid`,
borderRadius: 4,
padding: "27px 12px 10px",
position: "relative",
transition: theme.transitions.duration.shortest + "ms"
...editorContainer
},
"&-Toolbar": {
"&Button": {
@ -189,7 +198,8 @@ const useStyles = makeStyles(
smallIcon: {
marginLeft: 10
}
}),
};
},
{ name: "RichTextEditor" }
);
@ -226,6 +236,18 @@ const RichTextEditor: React.FC<RichTextEditorProps> = props => {
<Typography className={classes.label} variant="caption" color="primary">
{label}
</Typography>
<ErrorBoundary
FallbackComponent={() => (
<div className={classes.editorContainer}>
<Typography color="error">
<FormattedMessage
defaultMessage="Invalid content"
description="rich text error"
/>
</Typography>
</div>
)}
>
<DraftailEditor
key={JSON.stringify(initial)}
rawContentState={
@ -269,15 +291,9 @@ const RichTextEditor: React.FC<RichTextEditorProps> = props => {
source: LinkSource,
type: ENTITY_TYPE.LINK
}
// {
// attributes: ["href"],
// decorator: ImageEntity,
// icon: <ImageIcon />,
// source: ImageSource,
// type: ENTITY_TYPE.IMAGE
// }
]}
/>
</ErrorBoundary>
</div>
{helperText && (
<Typography