From 00280420c309f238790f2457c3c3ce4ccf249f53 Mon Sep 17 00:00:00 2001 From: jonaspiterek Date: Tue, 19 Dec 2023 16:42:19 +0100 Subject: [PATCH] Add quote block files --- src/components/Data.jsx | 25 +++++++++++++++++++++ src/components/Edit.jsx | 24 ++++++++++++++++++++ src/components/View.jsx | 36 ++++++++++++++++++++++++++++++ src/components/schema.js | 48 ++++++++++++++++++++++++++++++++++++++++ src/index.js | 21 ++++++++++++++++++ src/theme/main.less | 0 6 files changed, 154 insertions(+) create mode 100644 src/components/Data.jsx create mode 100644 src/components/Edit.jsx create mode 100644 src/components/View.jsx create mode 100644 src/components/schema.js create mode 100644 src/theme/main.less diff --git a/src/components/Data.jsx b/src/components/Data.jsx new file mode 100644 index 0000000..d16a017 --- /dev/null +++ b/src/components/Data.jsx @@ -0,0 +1,25 @@ +import React from "react"; +import { BlockDataForm } from "@plone/volto/components"; +import { QuoteBlockSchema } from "./schema"; + +const QuoteBlockData = (props) => { + const { data, block, onChangeBlock } = props; + const schema = QuoteBlockSchema(props); + + return ( + { + onChangeBlock(block, { + ...data, + [id]: value, + }); + }} + formData={data} + block={block} + /> + ); +}; + +export default QuoteBlockData; diff --git a/src/components/Edit.jsx b/src/components/Edit.jsx new file mode 100644 index 0000000..08f37d0 --- /dev/null +++ b/src/components/Edit.jsx @@ -0,0 +1,24 @@ +import React from "react"; +import View from "./View"; +import { SidebarPortal } from "@plone/volto/components"; +import QuoteBlockSidebar from "./Data"; + +const Edit = (props) => { + const { data, block, onChangeBlock, selected } = props; + + return ( +
+ + + + +
+ ); +}; + +export default Edit; diff --git a/src/components/View.jsx b/src/components/View.jsx new file mode 100644 index 0000000..18bf53a --- /dev/null +++ b/src/components/View.jsx @@ -0,0 +1,36 @@ +import React from "react"; +import cx from "classnames"; + +const View = (props) => { + const { data } = props; + return ( +
+
+ {data?.image?.[0] && ( +
+ +
+ )} +
+
{data.text}“
+
+ {data.person} + {data.position && ", "} + {data.position} +
+
+
+
+ ); +}; + +export default View; diff --git a/src/components/schema.js b/src/components/schema.js new file mode 100644 index 0000000..5a5f26a --- /dev/null +++ b/src/components/schema.js @@ -0,0 +1,48 @@ +import { defineMessages } from "react-intl"; + +const messages = defineMessages({ + quoteBlock: { + id: "Quote", + defineMessage: "Quote", + }, + image: { + id: "Image", + defineMessage: "Image", + }, + person: { + id: "Person", + defineMessage: "Person", + }, + position: { + id: "Position", + defineMessage: "Position", + }, +}); + +export const QuoteBlockSchema = (props) => { + return { + title: props.intl.formatMessage(messages.quoteBlock), + block: "quote", + fieldsets: [ + { + id: "default", + title: "Default", + fields: ["image", "person", "position"], + }, + ], + properties: { + image: { + title: props.intl.formatMessage(messages.image), + widget: "object-browser", + mode: "image", + }, + person: { + title: props.intl.formatMessage(messages.person), + }, + position: { + title: props.intl.formatMessage(messages.position), + }, + }, + required: [], + }; +}; diff --git a/src/index.js b/src/index.js index cb042f0..4e26392 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,25 @@ +import QuoteBlockView from "./components/View"; +import QuoteBlockEdit from "./components/Edit"; +import { QuoteBlockSchema } from "./components/schema"; + +import quoteSVG from "@plone/volto/icons/quote.svg"; + +import "./theme/main.less"; + const applyConfig = (config) => { + config.blocks.blocksConfig.quote = { + id: "quote", + title: "Quote", + group: "text", + icon: quoteSVG, + view: QuoteBlockView, + edit: QuoteBlockEdit, + blockSchema: QuoteBlockSchema, + restricted: false, + mostUsed: true, + sidebarTab: 1, + }; + return config; }; diff --git a/src/theme/main.less b/src/theme/main.less new file mode 100644 index 0000000..e69de29