From 5f4cf9cbe847496272cbc40bf93903115d903507 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Wed, 2 Oct 2019 11:02:09 -0500 Subject: [PATCH 01/38] PB-36: [Docs] Creating custom Page Builder components Optimizing overview image --- .../PageBuilderIntegrationDetails.svg | 318 +----------------- 1 file changed, 1 insertion(+), 317 deletions(-) diff --git a/pwa-devdocs/src/pagebuilder/overview/PageBuilderIntegrationDetails.svg b/pwa-devdocs/src/pagebuilder/overview/PageBuilderIntegrationDetails.svg index 77280d6550..630b695b1a 100644 --- a/pwa-devdocs/src/pagebuilder/overview/PageBuilderIntegrationDetails.svg +++ b/pwa-devdocs/src/pagebuilder/overview/PageBuilderIntegrationDetails.svg @@ -1,317 +1 @@ - - - - PageBuilderIntegrationDetails - Created with Sketch. - - - - - - - - - - - - - - - - - NO - - - - - - YES - - - - - - - - - - - - - - - - - 4 - - - - - - - - - - - - - - - - - - - 7 - - - - - Uses configuration to return - the content type’s equivalent - React component. - - - - - - Magento - - - - - - PWA app - - - - - - - - - - - - - - - - 1 - - - - Requests content (GraphQL) and returns CMS page or block HTML. - - - - - - - - - - Customer - - - - - - PageBuilder - - - - ContentTypeFactory - - - - config - aggregator - - - content type - components - - - - - - - - - - - - - - - - - - - - - - - parser - - - - Is it Page - Builder - content? - - - - - - - { } - - - - config - - - - - - - - - - - - - - - 9 - - - - Returns - Page Builder - content to - the PWA - app (Venia). - - - Returns - object tree with - properties. - - - Passes - master - format. - - - Passes object - tree to factory. - - - - - - - - - - - - 8 - - - - Parse each content type from - master format and use - configuration to return properties - from its configAggregator. - - - for each content type - - - Renders and - returns components - with properties. - - - - - - - - - - - - - 3 - - - - - - - - - - - - - - 5 - - - - - - - - - - - - - - 6 - - - - ( ) - - - ( ) - - - - - - - - Developer - - - - - - - - - - - - - - - 2 - - - - - RichContent - - - - - \ No newline at end of file +NOYES47Uses configuration to return the content type’s equivalent React component.MagentoPWA app1Requests content (GraphQL) and returns CMS page or block HTML.CustomerPageBuilderContentTypeFactoryconfig aggregatorcontent type componentsparserIs it Page Builder content?{ }config9Returns Page Builder content to the PWA app (Venia).Returns object tree with properties.Passes master format.Passes object tree to factory.8Parse each content type from master format and use configuration to return properties from its configAggregator.for each content typeRenders and returns components with properties.356( )( )Developer2RichContent \ No newline at end of file From 47bcd8b9031a26cc812286bbffc05b74d5e0e3f3 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Wed, 2 Oct 2019 12:35:04 -0500 Subject: [PATCH 02/38] PB-36: [Docs] Creating custom Page Builder components Added overview of developer tasks --- pwa-devdocs/src/pagebuilder/overview/index.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/pwa-devdocs/src/pagebuilder/overview/index.md b/pwa-devdocs/src/pagebuilder/overview/index.md index aa862b2cfb..ada04ef1ef 100644 --- a/pwa-devdocs/src/pagebuilder/overview/index.md +++ b/pwa-devdocs/src/pagebuilder/overview/index.md @@ -8,16 +8,24 @@ The Page Builder integration into PWA studio provides React components that are ## Detailed flow -As part of the Page Builder / PWA integration, we implemented a system in which we can convert Page Builder's master format into a structured format that React and PWA Studio could understand. We did this on the client side to ensure compatibility with all various hosting methods of Magento Commerce currently available. The flow diagram starts with a customer interacting with the Venia PWA app. +As part of the Page Builder / PWA integration, we implemented a system in which we can convert Page Builder's master format into a structured format that React and PWA Studio could understand. We did this on the client side to ensure compatibility with all various hosting methods of Magento Commerce currently available. The flow diagram starts with a customer interacting with the Venia PWA app. ![Page Builder Integration Details](PageBuilderIntegrationDetails.svg) 1. The Venia app uses a GraphQL query to get CMS content from your Magento store (pages and blocks) and passes the HTML to the `RichContent` component to begin processing. 2. The `RichContent` component determines if the HTML contains Page Builder content, using simple pattern recognition. If the HTML does not include Page Builder content, it is returned to Venia and rendered out as is. If the HTML does include Page Builder content, the HTML (master format) is passed to the `PageBuilder` component. 3. The `PageBuilder` component passes the master format HTML to the `parseStorageHTML` function. -4. For each content type within the master format, the `parseStorageHtml` function use the `contentTypeConfiguration` to call the content type's configAggregator create an object tree of all the content types and associated properties. -5. The `parseStorageHtml` returns the content type object tree to the `PageBuilder` component. +4. For each content type within the master format, the `parseStorageHtml` function use the `contentTypeConfiguration` to call the content type's configAggregator create an object tree of all the content types and associated properties. +5. The `parseStorageHtml` returns the content type object tree to the `PageBuilder` component. 6. The `PageBuilder` component passes the object tree to the `ContentTypeFactory`. 7. For each content type within the object tree, the `ContentTypeFactory` retrieves the React component from the `contentTypeConfiguration`. 8. The `ContentTypeFactory` populates and renders the component with the property values retrieved by the `parseStorageHtml` from the `configAggregator`. 9. The `PageBuilder` component returns all the components needed to render the Page Builder content within the PWA app. + +## Developer tasks + +To get your custom Page Builder content type to rendered within a PWA app, you need to do three things: + +1. Create a React component that is equivalent to your Page Builder content type. +2. Create a configuration aggregator to retrieve the configuration properties from your Page Builder content type. +3. Add your React component and configuration aggregator to the configuration file (config.js). From 2981201a346ae8925f17ac1ca6f839ab8a2efc45 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Thu, 3 Oct 2019 15:08:29 -0500 Subject: [PATCH 03/38] PB-36: [Docs] Creating custom Page Builder components WIP adding intro content to be expanded --- pwa-devdocs/src/_data/pagebuilder.yml | 33 ++-- .../pagebuilder/components/heading/index.md | 1 + .../src/pagebuilder/components/map/index.md | 1 + .../src/pagebuilder/components/text/index.md | 1 + .../create-custom-components/index.md | 155 ++++++++++++++++++ pwa-devdocs/src/pagebuilder/overview/index.md | 2 + 6 files changed, 176 insertions(+), 17 deletions(-) create mode 100644 pwa-devdocs/src/pagebuilder/create-custom-components/index.md diff --git a/pwa-devdocs/src/_data/pagebuilder.yml b/pwa-devdocs/src/_data/pagebuilder.yml index e56c8ef22b..13da3f8fad 100644 --- a/pwa-devdocs/src/_data/pagebuilder.yml +++ b/pwa-devdocs/src/_data/pagebuilder.yml @@ -1,10 +1,10 @@ title: Page Builder entries: - - label: Integration Overview + - label: Page Builder Integration url: /pagebuilder/overview/ - - - label: Create custom components - url: /pagebuilder/creating-pb-components/ + + - label: Create custom components + url: /pagebuilder/create-custom-components/ - label: Page Builder components entries: @@ -13,43 +13,42 @@ entries: - label: Column url: /pagebuilder/components/column/ - + - label: Tabs url: /pagebuilder/components/tabs/ - label: Text url: /pagebuilder/components/text/ - + - label: Heading url: /pagebuilder/components/heading/ - + - label: Buttons url: /pagebuilder/components/buttons/ - + - label: Divider url: /pagebuilder/components/divider/ - + - label: HTML Code url: /pagebuilder/components/html/ - + - label: Image url: /pagebuilder/components/image/ - + - label: Video url: /pagebuilder/components/video/ - + - label: Banner url: /pagebuilder/components/banner/ - + - label: Slider url: /pagebuilder/components/slider/ - + - label: Map url: /pagebuilder/components/map/ - + - label: Block url: /pagebuilder/components/block/ - + - label: Products url: /pagebuilder/components/products/ - \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/components/heading/index.md b/pwa-devdocs/src/pagebuilder/components/heading/index.md index 8738891196..8df9137766 100644 --- a/pwa-devdocs/src/pagebuilder/components/heading/index.md +++ b/pwa-devdocs/src/pagebuilder/components/heading/index.md @@ -6,3 +6,4 @@ title: Heading The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> +{% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Heading/heading.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/map/index.md b/pwa-devdocs/src/pagebuilder/components/map/index.md index e1d0198d8f..67441495c8 100644 --- a/pwa-devdocs/src/pagebuilder/components/map/index.md +++ b/pwa-devdocs/src/pagebuilder/components/map/index.md @@ -6,3 +6,4 @@ title: Map The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> +{% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Map/map.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/text/index.md b/pwa-devdocs/src/pagebuilder/components/text/index.md index 150adc69fb..3b58fabe32 100644 --- a/pwa-devdocs/src/pagebuilder/components/text/index.md +++ b/pwa-devdocs/src/pagebuilder/components/text/index.md @@ -6,3 +6,4 @@ title: Text The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> +{% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Text/text.md %} diff --git a/pwa-devdocs/src/pagebuilder/create-custom-components/index.md b/pwa-devdocs/src/pagebuilder/create-custom-components/index.md new file mode 100644 index 0000000000..bf5a4ef098 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/create-custom-components/index.md @@ -0,0 +1,155 @@ +--- +title: Create custom components +--- + +We utilise a special [master format parser](master-format-parser.md) within our Page Builder integration to easily decompose data within the master format for use in a PWA Studio React component. + +## Prerequisites + +- Have PWA Studio setup and running in your development environment. +- Have a working Page Builder component, with the master format implemented. +- Be able to render and visualize your content type on the existing Luma store front. + +## Structure + +As we require some additional steps compared to a normal we have some additional files associated with each content type, in example our `Text` content types component structure looks like the following: + +- `packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Text` + - `__tests__` + - `configAggregator.js` + - `index.js` + - `text.css` + - `text.js` + +`__tests__` & `index.js` are just part of PWA Studio, and won't be discussed here. + +### `configAggregator.js` + +The config aggregator provides an interface which accepts the HTML master format for a specific content type, decomposes it and returns an flat object of the properties associated with the content type. + +The interface for a `configAggregator` is as follows: + +```ts +(node: HTMLElement, props: {contentType: string, appearance: string}) => {[key: string]: any} +``` + +We aim to have human friendly output from the config aggregator where we can as the keys will align with your content types component later on. + +We provide a number of utility methods which help with retrieving commonly stored data, such as the advanced section and background images. These are all located within `packages/venia-ui/lib/components/RichContent/PageBuilder/utils.js`. We provide the following utilities, which all accept the `node` passed to the config aggregator: + +- `getBackgroundImages` +- `getVerticalAlignment` +- `getAdvanced` _If all advanced items are on the same node you can utilise our wrapper function, otherwise you'll want to use the below individual methods on the correct nodes_. + - `getPadding` + - `getMargin` + - `getBorder` + - `getTextAlign` + - `getCssClasses` + +For instance our Text content type aggregator looks like the following: + +```js +import { getAdvanced } from '../../utils'; + +export default node => { + return { + content: node.innerHTML, + ...getAdvanced(node) + }; +}; +``` + +The only piece of data the Text content type implements in the admin, apart from our advanced section, is a content field. We utilise DOM functions such as `innerHTML` to retrieve the data from the format and return it. We aim to use the field names from the Page Builder admin form for the keys within the config aggregators response to easily identify which piece of data is which within the component. + +**Tip:** I find placing a `console.log(node)` at the top of the configAggregator while development can help identify where aspects of the data lives within the master format. + +### Appearances + +Some content types have different appearances and thus differences in their master format output, this occurs already within our core Row content type. To handle this we provide the appearance within the second props argument to allow you to modify your queries to retrieve the data from the current node. + +For instance in Row we swap the main node we detect upon based on the appearance: + +```js +export default (node, props) => { + // Determine which node holds the data for the appearance + const dataNode = + props.appearance === 'contained' ? node.childNodes[0] : node; +``` + +### `text.css` + +This contains our content types styling, the experience within Page Builder is the same as creating a component elsewhere in PWA Studio. + +### `text.js` + +Our React component is once again, the same as working with a normal React component in PWA Studio. However, the way the component is rendered through Page Builder's factory makes the props provided defined by the response of your config aggregator. + +This results in having a larger number of props, which may all not be used when the component is initialized. Due to this you need to ensure if a value is null the component can still render correctly. + +```js +const Text = props => { + const classes = mergeClasses(defaultClasses, props.classes); + const { + content, + textAlign, + border, + borderColor, + borderWidth, + borderRadius, + marginTop, + marginRight, + marginBottom, + marginLeft, + paddingTop, + paddingRight, + paddingBottom, + paddingLeft, + cssClasses = [] + } = props; +``` + +## Config + +We currently maintain a static config object which dictates which content types are supported. To include support for your new content type you'll need to add an entry to `packages/venia-ui/lib/components/RichContent/PageBuilder/config.js`. + +Each entry has to define it's `configAggregator` & `component`. Here's an example of the Text content types entry within this configuration: + +```js +export const contentTypesConfig = { + ... + text: { + configAggregator: textConfigAggregator, + component: Text + }, + ... +}; +``` + +### Lazy components + +As we're building a PWA performance is key, due to that we recommend loading less critical components via `React.lazy`. This will result in a very slight delay in that content rendering but will ensure we don't bloat the bundle size for the store. + +We opt to use this for the following content types by default: Tabs, Tab Item, Buttons, Button Item, Block, Products, HTML & Divider. + +To have your component loaded lazily you simply have to wrap your `component` reference in a `React.lazy` call as follows: + +```js +export const contentTypesConfig = { + ... + products: { + configAggregator: productsConfigAggregator, + component: React.lazy(() => import('./ContentTypes/Products')) + }, + ... +}; +``` + +## Debugging + +If you haven't yet modified the config object and setup the references you'll see the following console warning in your console to inform you the component is missing: + +```text +parseStorageHtml.js?4091:67 No config aggregator defined for content type X, this content type won't be rendered. +``` + +If you have modified the configuration and your content type is still not displaying you can debug through `packages/venia-ui/lib/components/RichContent/PageBuilder/parseStorageHtml.js` to determine if your configuration item is being correctly detected. diff --git a/pwa-devdocs/src/pagebuilder/overview/index.md b/pwa-devdocs/src/pagebuilder/overview/index.md index ada04ef1ef..a202d4126b 100644 --- a/pwa-devdocs/src/pagebuilder/overview/index.md +++ b/pwa-devdocs/src/pagebuilder/overview/index.md @@ -29,3 +29,5 @@ To get your custom Page Builder content type to rendered within a PWA app, you n 1. Create a React component that is equivalent to your Page Builder content type. 2. Create a configuration aggregator to retrieve the configuration properties from your Page Builder content type. 3. Add your React component and configuration aggregator to the configuration file (config.js). + +These tasks are described in detail in the [Create content type components] topic From 1ad619c2b53f01ba34bff22523ae1cd52a8ea45c Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Sun, 6 Oct 2019 16:17:23 -0500 Subject: [PATCH 04/38] PB-36: [Docs] Creating custom Page Builder components WIP ExampleQuote component --- .../ExampleQuote/configAggregator.js | 9 ++ .../ExampleQuote/exampleQuote.css | 70 ++++++++++++ .../ContentTypes/ExampleQuote/exampleQuote.js | 105 ++++++++++++++++++ .../ContentTypes/ExampleQuote/index.js | 1 + 4 files changed, 185 insertions(+) create mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js create mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css create mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js create mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/index.js diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js new file mode 100644 index 0000000000..f83667ffb8 --- /dev/null +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js @@ -0,0 +1,9 @@ +import { getAdvanced } from '../../utils'; + +export default node => { + return { + text: node.textContent, + headingType: node.nodeName.toLowerCase(), + ...getAdvanced(node) + }; +}; diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css new file mode 100644 index 0000000000..7c77e84dd7 --- /dev/null +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css @@ -0,0 +1,70 @@ +blockquote { + display: block; + font-size: 1.3em; + margin: 1em 1em .6em 1em; + quotes: "\201C""\201D""\2018""\2019"; + text-decoration: none; + word-break: normal !important; + line-height: 1.4; + padding: 0; + font-weight: 300; +} + +.quote-author { + padding-right: 30px; + font-size: 14px; + color: #666666; + margin-left: 1.5em; + word-break: normal !important; +} + +.quote-description { + position: relative; + padding-right: 30px; + font-size: 14px; + color: #999999; + margin-left: 1.5em; + font-weight: 300; + word-break: normal !important; +} + +.black-quote { + color: #333333; +} + +.blue-quote { + color: #007ab9; +} + +.green-quote { + color: #009900; +} + +.red-quote { + color: #990000; +} + +.purple-quote { + color: #990099; +} + + +.black-size { + font-size: 40px; +} + +.blue-size { + font-size: 10px; +} + +.green-size { + font-size: 100px; +} + +.red-size { + font-size: 30px; +} + +.purple-size { + font-size: 60px; +} diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js new file mode 100644 index 0000000000..6ea5b0dc38 --- /dev/null +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js @@ -0,0 +1,105 @@ +import React from 'react'; +import { arrayOf, string } from 'prop-types'; + +/** + * Page Builder ExampleQuote component. + * + * This component is a custom Page Builder content type. It can be consumed without Page Builder. + * + * @typedef ExampleQuote + * @kind functional component + * + * @param {props} props React component props + * + * @returns {React.Element} A React component that renders an ExampleQuote with optional styling properties. + */ +const ExampleQuote = props => { + const { + quoteText, + text, + textAlign, + border, + borderColor, + borderWidth, + borderRadius, + marginTop, + marginRight, + marginBottom, + marginLeft, + paddingTop, + paddingRight, + paddingBottom, + paddingLeft, + cssClasses = [] + } = props; + const HeadingType = `${headingType}`; + const dynamicStyles = { + textAlign, + border, + borderColor, + borderWidth, + borderRadius, + marginTop, + marginRight, + marginBottom, + marginLeft, + paddingTop, + paddingRight, + paddingBottom, + paddingLeft + }; + const className = cssClasses.length ? cssClasses.join(' ') : null; + return ( +
+
{text}
+
+
+
+ + + + ); +}; + +/** + * Props for {@link ExampleQuote} + * + * @typedef props + * + * @property {String} headingType Level of HTML heading + * @property {String} text Heading text + * @property {String} textAlign Alignment of the text within the parent container + * @property {String} border CSS border property + * @property {String} borderColor CSS border color property + * @property {String} borderWidth CSS border width property + * @property {String} borderRadius CSS border radius property + * @property {String} marginTop CSS margin top property + * @property {String} marginRight CSS margin right property + * @property {String} marginBottom CSS margin bottom property + * @property {String} marginLeft CSS margin left property + * @property {String} paddingTop CSS padding top property + * @property {String} paddingRight CSS padding right property + * @property {String} paddingBottom CSS padding bottom property + * @property {String} paddingLeft CSS padding left property + * @property {Array} cssClasses List of CSS classes to be applied to the component + */ +ExampleQuote.propTypes = { + headingType: string, + text: string, + textAlign: string, + border: string, + borderColor: string, + borderWidth: string, + borderRadius: string, + marginTop: string, + marginRight: string, + marginBottom: string, + marginLeft: string, + paddingTop: string, + paddingRight: string, + paddingBottom: string, + paddingLeft: string, + cssClasses: arrayOf(string) +}; + +export default ExampleQuote; diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/index.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/index.js new file mode 100644 index 0000000000..ff59e1d6d5 --- /dev/null +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/index.js @@ -0,0 +1 @@ +export { default } from './exampleQuote'; From e57b17431b247f31c843cad067ce58ddb8c57f8a Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Sun, 6 Oct 2019 16:17:51 -0500 Subject: [PATCH 05/38] PB-36: [Docs] Creating custom Page Builder components WIP ExampleQuote component --- .../ContentTypes/ExampleQuote/exampleQuote.js | 262 +++++++++++++++--- 1 file changed, 229 insertions(+), 33 deletions(-) diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js index 6ea5b0dc38..a71776975c 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js @@ -1,27 +1,48 @@ -import React from 'react'; -import { arrayOf, string } from 'prop-types'; +import React, { useState } from 'react'; +import defaultClasses from './banner.css'; +import { mergeClasses } from '../../../../../classify'; +import { arrayOf, bool, oneOf, shape, string } from 'prop-types'; +import resolveLinkProps from '../../resolveLinkProps'; + +const toHTML = str => ({ __html: str }); /** - * Page Builder ExampleQuote component. + * Page Builder Example Quote component. * - * This component is a custom Page Builder content type. It can be consumed without Page Builder. + * This is an example of a custom content type component for Page Builder / PWA integration. It can be consumed without Page Builder. * * @typedef ExampleQuote * @kind functional component * * @param {props} props React component props * - * @returns {React.Element} A React component that renders an ExampleQuote with optional styling properties. + * @returns {React.Element} A React component that displays a custom Quote. */ const ExampleQuote = props => { + const classes = mergeClasses(defaultClasses, props.classes); const { - quoteText, - text, + minHeight, + backgroundColor, + desktopImage, + mobileImage, + backgroundSize, + backgroundPosition, + backgroundAttachment, + backgroundRepeat, textAlign, border, borderColor, borderWidth, borderRadius, + content, + showButton, + buttonType, + buttonText, + link, + linkType, + openInNewTab = false, + showOverlay, + overlayColor, marginTop, marginRight, marginBottom, @@ -32,32 +53,145 @@ const ExampleQuote = props => { paddingLeft, cssClasses = [] } = props; - const HeadingType = `${headingType}`; - const dynamicStyles = { - textAlign, + + let image = desktopImage; + if (mobileImage && window.matchMedia('(max-width: 768px)').matches) { + image = mobileImage; + } + + const rootStyles = { + marginTop, + marginRight, + marginBottom, + marginLeft + }; + const wrapperStyles = { + backgroundColor, border, borderColor, borderWidth, borderRadius, - marginTop, - marginRight, - marginBottom, - marginLeft, - paddingTop, - paddingRight, - paddingBottom, - paddingLeft + textAlign }; - const className = cssClasses.length ? cssClasses.join(' ') : null; - return ( -
-
{text}
-
-
+ const overlayStyles = { + backgroundColor: showOverlay !== 'never' ? overlayColor : null + }; + const contentStyles = {}; + + if (image) { + wrapperStyles.backgroundImage = `url(${image})`; + wrapperStyles.backgroundSize = backgroundSize; + wrapperStyles.backgroundPosition = backgroundPosition; + wrapperStyles.backgroundAttachment = backgroundAttachment; + wrapperStyles.backgroundRepeat = backgroundRepeat + ? 'repeat' + : 'no-repeat'; + } + + if (appearance === 'poster') { + overlayStyles.borderRadius = borderRadius; + overlayStyles.minHeight = minHeight; + overlayStyles.paddingTop = paddingTop; + overlayStyles.paddingRight = paddingRight; + overlayStyles.paddingBottom = paddingBottom; + overlayStyles.paddingLeft = paddingLeft; + contentStyles.width = '100%'; + } else { + wrapperStyles.minHeight = minHeight; + wrapperStyles.paddingTop = paddingTop; + wrapperStyles.paddingRight = paddingRight; + wrapperStyles.paddingBottom = paddingBottom; + wrapperStyles.paddingLeft = paddingLeft; + } + + const appearanceClasses = { + poster: classes.poster, + 'collage-left': classes.collageLeft, + 'collage-centered': classes.collageCentered, + 'collage-right': classes.collageRight + }; + + const typeToPriorityMapping = { + primary: 'high', + secondary: 'normal', + link: 'low' + }; + + let linkProps = {}; + let url = ''; + let LinkComponent; + if (typeof link === 'string') { + linkProps = resolveLinkProps(link, linkType); + url = linkProps.to ? linkProps.to : linkProps.href; + LinkComponent = linkProps.to ? Link : 'a'; + } + + let BannerButton; + if (showButton !== 'never') { + const buttonClass = + showButton === 'hover' ? classes.buttonHover : classes.button; + + const handleClick = () => { + if (openInNewTab) { + window.open(url, '_blank'); + } else { + props.history.push(url); + } + }; + + BannerButton = ( +
+ +
+ ); + } + + const overlayClass = + showOverlay === 'hover' && !hovered + ? classes.overlayHover + : classes.overlay; + + let BannerFragment = ( +
+
+
+ {BannerButton} +
- + ); + + // If we have a LinkComponent it means we're wanting to make the whole banner a link + if (LinkComponent) { + BannerFragment = ( + + {BannerFragment} + + ); + } - + return ( +
+ {BannerFragment} +
); }; @@ -66,9 +200,37 @@ const ExampleQuote = props => { * * @typedef props * - * @property {String} headingType Level of HTML heading - * @property {String} text Heading text - * @property {String} textAlign Alignment of the text within the parent container + * @property {Object} classes An object containing the class names for the banner + * @property {String} classes.root CSS class for the banner root element + * @property {String} classes.link CSS class for the banner link element + * @property {String} classes.wrapper CSS class for the banner wrapper element + * @property {String} classes.overlay CSS class for the banner overlay element + * @property {String} classes.overlayHover CSS class for the banner overlay element when enabled for hover + * @property {String} classes.content CSS class for the banner content element + * @property {String} classes.button CSS class for the banner button wrapping element + * @property {String} classes.buttonHover CSS class for the banner button wrapping element for hover + * @property {String} classes.poster CSS class for the banner poster appearance + * @property {String} classes.collageLeft CSS class for the banner collage left appearance + * @property {String} classes.collageCentered CSS class for the banner collage centered appearance + * @property {String} classes.collageRight CSS class for the banner collage right appearance + * @property {String} classes.poster CSS class for the banner poster appearance + * @property {String} minHeight CSS minimum height property + * @property {String} backgroundColor CSS background-color property + * @property {String} desktopImage Background image URL to be displayed on desktop devices + * @property {String} mobileImage Background image URL to be displayed on mobile devices + * @property {String} backgroundSize CSS background-size property + * @property {String} backgroundPosition CSS background-position property + * @property {String} backgroundAttachment CSS background-attachment property + * @property {Boolean} backgroundRepeat CSS background-repeat property + * @property {String} content The HTML content to be rendered inside the banner content area + * @property {String} link The link location for the banner + * @property {String} linkType The type of link included with the banner. Values: default, product, category, page + * @property {String} showButton Whether or not to show the button. Values: always, hover, never + * @property {String} buttonText Text to display within the button + * @property {String} buttonType The type of button to display. Values: primary, secondary, link + * @property {String} showOverlay Whether or not to show the overlay. Values: always, hover, never + * @property {String} overlayColor The color of the overlay + * @property {String} textAlign Alignment of the banner within the parent container * @property {String} border CSS border property * @property {String} borderColor CSS border color property * @property {String} borderWidth CSS border width property @@ -84,8 +246,43 @@ const ExampleQuote = props => { * @property {Array} cssClasses List of CSS classes to be applied to the component */ ExampleQuote.propTypes = { - headingType: string, - text: string, + classes: shape({ + root: string, + link: string, + wrapper: string, + overlay: string, + overlayHover: string, + content: string, + button: string, + buttonHover: string, + poster: string, + collageLeft: string, + collageCentered: string, + collageRight: string + }), + appearance: oneOf([ + 'poster', + 'collage-left', + 'collage-centered', + 'collage-right' + ]), + minHeight: string, + backgroundColor: string, + desktopImage: string, + mobileImage: string, + backgroundSize: string, + backgroundPosition: string, + backgroundAttachment: string, + backgroundRepeat: bool, + content: string, + link: string, + linkType: oneOf(['default', 'product', 'category', 'page']), + openInNewTab: bool, + showButton: oneOf(['always', 'hover', 'never']), + buttonText: string, + buttonType: oneOf(['primary', 'secondary', 'link']), + showOverlay: oneOf(['always', 'hover', 'never']), + overlayColor: string, textAlign: string, border: string, borderColor: string, @@ -98,8 +295,7 @@ ExampleQuote.propTypes = { paddingTop: string, paddingRight: string, paddingBottom: string, - paddingLeft: string, cssClasses: arrayOf(string) }; -export default ExampleQuote; +export default ExampleQuote; \ No newline at end of file From f60cb64fe96f68d9714793cba38c398ab34bf4cd Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Sun, 6 Oct 2019 22:07:56 -0500 Subject: [PATCH 06/38] PB-36: [Docs] Creating custom Page Builder components WIP ExampleQuote component --- .../ExampleQuote/configAggregator.js | 16 +- .../ExampleQuote/exampleQuote.css | 82 +++--- .../ContentTypes/ExampleQuote/exampleQuote.js | 262 +++--------------- 3 files changed, 83 insertions(+), 277 deletions(-) diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js index f83667ffb8..0aabfda38c 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js @@ -1,9 +1,13 @@ -import { getAdvanced } from '../../utils'; +import { getAdvanced, getCssClasses } from '../../utils'; export default node => { - return { - text: node.textContent, - headingType: node.nodeName.toLowerCase(), - ...getAdvanced(node) + const props = { + quote: node.children[0].textContent, + author: node.children[1].textContent, + description: node.children[2].textContent, + ...getAdvanced(node), + ...getCssClasses(node.children[0]) }; -}; + + return props; +}; \ No newline at end of file diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css index 7c77e84dd7..f65ebe97a8 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css @@ -1,70 +1,64 @@ -blockquote { +.quote { display: block; - font-size: 1.3em; - margin: 1em 1em .6em 1em; + font-size: 1.4em; + margin: 1em 1em .3em .6em; quotes: "\201C""\201D""\2018""\2019"; text-decoration: none; + font-style: italic; word-break: normal !important; - line-height: 1.4; padding: 0; font-weight: 300; } +.quote:before { + content: open-quote; + font-size: 2.4em; + margin-right: 0.1em; + vertical-align: -0.3em; + line-height: 0; + margin-left: -0.3em; + font-weight: 300; +} + +.quote:after { + content: close-quote; + font-size: 0; + line-height: 0; + margin-left: 0; +} + .quote-author { padding-right: 30px; - font-size: 14px; - color: #666666; + font-size: 16px; + color: #333333; + line-height: 24px; margin-left: 1.5em; word-break: normal !important; + font-weight: 600; } .quote-description { position: relative; padding-right: 30px; - font-size: 14px; - color: #999999; + font-size: 16px; + line-height: 18px; + color: #666666; margin-left: 1.5em; font-weight: 300; word-break: normal !important; } -.black-quote { - color: #333333; -} +.black-quote { color: #333333; } +.black-quote::before { color: #333333; } -.blue-quote { - color: #007ab9; -} +.blue-quote { color: #007ab9; } +.blue-quote::before { color: #007ab9; } -.green-quote { - color: #009900; -} +.green-quote { color: #009900; } +.green-quote::before { color: #009900; } -.red-quote { - color: #990000; -} +.red-quote { color: #990000; } +.red-quote::before { color: #990000; } -.purple-quote { - color: #990099; -} - - -.black-size { - font-size: 40px; -} - -.blue-size { - font-size: 10px; -} - -.green-size { - font-size: 100px; -} - -.red-size { - font-size: 30px; -} - -.purple-size { - font-size: 60px; -} +.purple-quote { color: #990099; } +.purple-quote::before { color: #990099; } \ No newline at end of file diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js index a71776975c..2f4f38d893 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js @@ -1,48 +1,30 @@ -import React, { useState } from 'react'; -import defaultClasses from './banner.css'; -import { mergeClasses } from '../../../../../classify'; -import { arrayOf, bool, oneOf, shape, string } from 'prop-types'; -import resolveLinkProps from '../../resolveLinkProps'; - -const toHTML = str => ({ __html: str }); +import React from 'react'; +import defaultClasses from './exampleQuote.css'; +import { arrayOf, string } from 'prop-types'; /** - * Page Builder Example Quote component. + * Page Builder ExampleQuote component. * - * This is an example of a custom content type component for Page Builder / PWA integration. It can be consumed without Page Builder. + * This is a custom content type component using the Page Builder / PWA integration. It can be consumed without Page Builder. * * @typedef ExampleQuote * @kind functional component * * @param {props} props React component props * - * @returns {React.Element} A React component that displays a custom Quote. + * @returns {React.Element} A React component that renders ExampleQuote with optional styling properties. */ const ExampleQuote = props => { - const classes = mergeClasses(defaultClasses, props.classes); const { - minHeight, - backgroundColor, - desktopImage, - mobileImage, - backgroundSize, - backgroundPosition, - backgroundAttachment, - backgroundRepeat, + quote, + author, + description, + quoteStyle, textAlign, border, borderColor, borderWidth, borderRadius, - content, - showButton, - buttonType, - buttonText, - link, - linkType, - openInNewTab = false, - showOverlay, - overlayColor, marginTop, marginRight, marginBottom, @@ -54,143 +36,28 @@ const ExampleQuote = props => { cssClasses = [] } = props; - let image = desktopImage; - if (mobileImage && window.matchMedia('(max-width: 768px)').matches) { - image = mobileImage; - } - - const rootStyles = { - marginTop, - marginRight, - marginBottom, - marginLeft - }; - const wrapperStyles = { - backgroundColor, + const dynamicStyles = { + textAlign, border, borderColor, borderWidth, borderRadius, - textAlign - }; - const overlayStyles = { - backgroundColor: showOverlay !== 'never' ? overlayColor : null - }; - const contentStyles = {}; - - if (image) { - wrapperStyles.backgroundImage = `url(${image})`; - wrapperStyles.backgroundSize = backgroundSize; - wrapperStyles.backgroundPosition = backgroundPosition; - wrapperStyles.backgroundAttachment = backgroundAttachment; - wrapperStyles.backgroundRepeat = backgroundRepeat - ? 'repeat' - : 'no-repeat'; - } - - if (appearance === 'poster') { - overlayStyles.borderRadius = borderRadius; - overlayStyles.minHeight = minHeight; - overlayStyles.paddingTop = paddingTop; - overlayStyles.paddingRight = paddingRight; - overlayStyles.paddingBottom = paddingBottom; - overlayStyles.paddingLeft = paddingLeft; - contentStyles.width = '100%'; - } else { - wrapperStyles.minHeight = minHeight; - wrapperStyles.paddingTop = paddingTop; - wrapperStyles.paddingRight = paddingRight; - wrapperStyles.paddingBottom = paddingBottom; - wrapperStyles.paddingLeft = paddingLeft; - } - - const appearanceClasses = { - poster: classes.poster, - 'collage-left': classes.collageLeft, - 'collage-centered': classes.collageCentered, - 'collage-right': classes.collageRight - }; - - const typeToPriorityMapping = { - primary: 'high', - secondary: 'normal', - link: 'low' + marginTop, + marginRight, + marginBottom, + marginLeft, + paddingTop, + paddingRight, + paddingBottom, + paddingLeft, }; - let linkProps = {}; - let url = ''; - let LinkComponent; - if (typeof link === 'string') { - linkProps = resolveLinkProps(link, linkType); - url = linkProps.to ? linkProps.to : linkProps.href; - LinkComponent = linkProps.to ? Link : 'a'; - } - - let BannerButton; - if (showButton !== 'never') { - const buttonClass = - showButton === 'hover' ? classes.buttonHover : classes.button; - - const handleClick = () => { - if (openInNewTab) { - window.open(url, '_blank'); - } else { - props.history.push(url); - } - }; - - BannerButton = ( -
- -
- ); - } - - const overlayClass = - showOverlay === 'hover' && !hovered - ? classes.overlayHover - : classes.overlay; - - let BannerFragment = ( -
-
-
- {BannerButton} -
-
- ); - - // If we have a LinkComponent it means we're wanting to make the whole banner a link - if (LinkComponent) { - BannerFragment = ( - - {BannerFragment} - - ); - } - + const className = cssClasses.length ? cssClasses.join(' ') : null; return ( -
- {BannerFragment} +
+
{quote}
+
{author}
+
{description}
); }; @@ -200,37 +67,11 @@ const ExampleQuote = props => { * * @typedef props * - * @property {Object} classes An object containing the class names for the banner - * @property {String} classes.root CSS class for the banner root element - * @property {String} classes.link CSS class for the banner link element - * @property {String} classes.wrapper CSS class for the banner wrapper element - * @property {String} classes.overlay CSS class for the banner overlay element - * @property {String} classes.overlayHover CSS class for the banner overlay element when enabled for hover - * @property {String} classes.content CSS class for the banner content element - * @property {String} classes.button CSS class for the banner button wrapping element - * @property {String} classes.buttonHover CSS class for the banner button wrapping element for hover - * @property {String} classes.poster CSS class for the banner poster appearance - * @property {String} classes.collageLeft CSS class for the banner collage left appearance - * @property {String} classes.collageCentered CSS class for the banner collage centered appearance - * @property {String} classes.collageRight CSS class for the banner collage right appearance - * @property {String} classes.poster CSS class for the banner poster appearance - * @property {String} minHeight CSS minimum height property - * @property {String} backgroundColor CSS background-color property - * @property {String} desktopImage Background image URL to be displayed on desktop devices - * @property {String} mobileImage Background image URL to be displayed on mobile devices - * @property {String} backgroundSize CSS background-size property - * @property {String} backgroundPosition CSS background-position property - * @property {String} backgroundAttachment CSS background-attachment property - * @property {Boolean} backgroundRepeat CSS background-repeat property - * @property {String} content The HTML content to be rendered inside the banner content area - * @property {String} link The link location for the banner - * @property {String} linkType The type of link included with the banner. Values: default, product, category, page - * @property {String} showButton Whether or not to show the button. Values: always, hover, never - * @property {String} buttonText Text to display within the button - * @property {String} buttonType The type of button to display. Values: primary, secondary, link - * @property {String} showOverlay Whether or not to show the overlay. Values: always, hover, never - * @property {String} overlayColor The color of the overlay - * @property {String} textAlign Alignment of the banner within the parent container + * @property {String} quote Text of quotation + * @property {String} author Name of the quotation's author + * @property {String} description Description of the author + * @property {String} text ExampleQuote text + * @property {String} textAlign Alignment of the text within the parent container * @property {String} border CSS border property * @property {String} borderColor CSS border color property * @property {String} borderWidth CSS border width property @@ -246,43 +87,9 @@ const ExampleQuote = props => { * @property {Array} cssClasses List of CSS classes to be applied to the component */ ExampleQuote.propTypes = { - classes: shape({ - root: string, - link: string, - wrapper: string, - overlay: string, - overlayHover: string, - content: string, - button: string, - buttonHover: string, - poster: string, - collageLeft: string, - collageCentered: string, - collageRight: string - }), - appearance: oneOf([ - 'poster', - 'collage-left', - 'collage-centered', - 'collage-right' - ]), - minHeight: string, - backgroundColor: string, - desktopImage: string, - mobileImage: string, - backgroundSize: string, - backgroundPosition: string, - backgroundAttachment: string, - backgroundRepeat: bool, - content: string, - link: string, - linkType: oneOf(['default', 'product', 'category', 'page']), - openInNewTab: bool, - showButton: oneOf(['always', 'hover', 'never']), - buttonText: string, - buttonType: oneOf(['primary', 'secondary', 'link']), - showOverlay: oneOf(['always', 'hover', 'never']), - overlayColor: string, + quote: string, + author: string, + description: string, textAlign: string, border: string, borderColor: string, @@ -295,7 +102,8 @@ ExampleQuote.propTypes = { paddingTop: string, paddingRight: string, paddingBottom: string, + paddingLeft: string, cssClasses: arrayOf(string) }; -export default ExampleQuote; \ No newline at end of file +export default ExampleQuote; From dde5b4d5ecc7787b7553c982f8c5b79c24e64160 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Sun, 6 Oct 2019 22:11:19 -0500 Subject: [PATCH 07/38] PB-36: [Docs] Creating custom Page Builder components WIP ExampleQuote component --- .../ExampleQuote/configAggregator.js | 2 +- .../ExampleQuote/exampleQuote.css | 44 ++++++++++++++----- .../ContentTypes/ExampleQuote/exampleQuote.js | 15 +++++-- 3 files changed, 44 insertions(+), 17 deletions(-) diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js index 0aabfda38c..e01dedaaea 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js @@ -10,4 +10,4 @@ export default node => { }; return props; -}; \ No newline at end of file +}; diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css index f65ebe97a8..cce708b53e 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css @@ -1,8 +1,8 @@ .quote { display: block; font-size: 1.4em; - margin: 1em 1em .3em .6em; - quotes: "\201C""\201D""\2018""\2019"; + margin: 1em 1em 0.3em 0.6em; + quotes: '\201C''\201D''\2018''\2019'; text-decoration: none; font-style: italic; word-break: normal !important; @@ -48,17 +48,37 @@ word-break: normal !important; } -.black-quote { color: #333333; } -.black-quote::before { color: #333333; } +.black-quote { + color: #333333; +} +.black-quote::before { + color: #333333; +} -.blue-quote { color: #007ab9; } -.blue-quote::before { color: #007ab9; } +.blue-quote { + color: #007ab9; +} +.blue-quote::before { + color: #007ab9; +} -.green-quote { color: #009900; } -.green-quote::before { color: #009900; } +.green-quote { + color: #009900; +} +.green-quote::before { + color: #009900; +} -.red-quote { color: #990000; } -.red-quote::before { color: #990000; } +.red-quote { + color: #990000; +} +.red-quote::before { + color: #990000; +} -.purple-quote { color: #990099; } -.purple-quote::before { color: #990099; } \ No newline at end of file +.purple-quote { + color: #990099; +} +.purple-quote::before { + color: #990099; +} diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js index 2f4f38d893..f2ff8eba79 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js @@ -19,7 +19,6 @@ const ExampleQuote = props => { quote, author, description, - quoteStyle, textAlign, border, borderColor, @@ -49,15 +48,23 @@ const ExampleQuote = props => { paddingTop, paddingRight, paddingBottom, - paddingLeft, + paddingLeft }; const className = cssClasses.length ? cssClasses.join(' ') : null; return (
-
{quote}
+
+ {quote} +
{author}
-
{description}
+
+ {description} +
); }; From 72e9fea3c81cae7f5845887c5abe87b5c8ccca12 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Sun, 6 Oct 2019 22:16:46 -0500 Subject: [PATCH 08/38] Revert "Merge branch 'PB-17-Banner' into PB-36" This reverts commit d5ad2198bdd52266668467195b66f4e49643fb52, reversing changes made to 2ab9ac63bd8efc51219f7f952b141dafacea801f. --- .../Banner/__tests__/configAggregator.spec.js | 240 ------------------ .../ContentTypes/Banner/configAggregator.js | 72 ------ .../PageBuilder/ContentTypes/Banner/index.js | 1 - 3 files changed, 313 deletions(-) delete mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/__tests__/configAggregator.spec.js delete mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/configAggregator.js delete mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/index.js diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/__tests__/configAggregator.spec.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/__tests__/configAggregator.spec.js deleted file mode 100644 index 9074188c08..0000000000 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/__tests__/configAggregator.spec.js +++ /dev/null @@ -1,240 +0,0 @@ -import configAggregator from '../configAggregator'; - -test('banner config aggregator retrieves default values from empty banner content type', () => { - const node = document.createElement('div'); - node.innerHTML = - '
'; - expect( - configAggregator(node.childNodes[0], { - appearance: 'poster' - }) - ).toEqual( - expect.objectContaining({ - backgroundAttachment: 'scroll', - backgroundPosition: 'left top', - backgroundRepeat: false, - backgroundSize: 'cover', - border: 'none', - borderColor: '', - borderRadius: '0px', - borderWidth: '1px', - buttonText: null, - buttonType: null, - content: '', - cssClasses: [], - desktopImage: null, - link: null, - linkType: null, - marginBottom: '0px', - marginLeft: '0px', - marginRight: '0px', - marginTop: '0px', - minHeight: '300px', - mobileImage: null, - overlayColor: null, - paddingBottom: '40px', - paddingLeft: '40px', - paddingRight: '40px', - paddingTop: '40px', - showButton: 'never', - showOverlay: 'never', - textAlign: '' - }) - ); -}); - -test('banner config aggregator retrieves values from fully configured poster banner content type', () => { - const node = document.createElement('div'); - node.innerHTML = - ''; - expect( - configAggregator(node.childNodes[0], { - appearance: 'poster' - }) - ).toEqual( - expect.objectContaining({ - backgroundColor: 'blue', - backgroundAttachment: 'scroll', - backgroundPosition: 'center center', - backgroundRepeat: false, - backgroundSize: 'cover', - border: 'none', - borderColor: '', - borderRadius: '0px', - borderWidth: '1px', - buttonText: 'Shop Bags', - buttonType: 'primary', - content: - '

A new way of shopping

Experience the best way of shopping today!

', - cssClasses: [], - desktopImage: 'desktop-image.jpg', - link: 'gear/bags.html', - linkType: 'category', - openInNewTab: true, - marginBottom: '0px', - marginLeft: '0px', - marginRight: '0px', - marginTop: '0px', - minHeight: '300px', - mobileImage: 'mobile-image.jpg', - overlayColor: null, - paddingBottom: '40px', - paddingLeft: '40px', - paddingRight: '40px', - paddingTop: '40px', - showButton: 'always', - showOverlay: 'never', - textAlign: '' - }) - ); -}); - -test('banner config aggregator retrieves values from fully configured collage-left banner content type', () => { - const node = document.createElement('div'); - node.innerHTML = - ''; - expect( - configAggregator(node.childNodes[0], { - appearance: 'collage-left' - }) - ).toEqual( - expect.objectContaining({ - backgroundAttachment: 'scroll', - backgroundPosition: 'center center', - backgroundRepeat: false, - backgroundSize: 'cover', - border: 'none', - borderColor: '', - borderRadius: '0px', - borderWidth: '1px', - buttonText: 'Shop Bags', - buttonType: 'primary', - content: - '

A new way of shopping

Experience the best way of shopping today!

', - cssClasses: [], - desktopImage: 'desktop-image.jpg', - link: 'gear/bags.html', - linkType: 'category', - openInNewTab: true, - marginBottom: '0px', - marginLeft: '0px', - marginRight: '0px', - marginTop: '0px', - minHeight: '300px', - mobileImage: 'mobile-image.jpg', - overlayColor: 'rgba(255, 255, 255, 0.25)', - paddingBottom: '40px', - paddingLeft: '40px', - paddingRight: '40px', - paddingTop: '40px', - showButton: 'always', - showOverlay: 'always', - textAlign: '' - }) - ); -}); - -test('banner config aggregator retrieves values from fully configured collage-centered banner content type', () => { - const node = document.createElement('div'); - node.innerHTML = - ''; - expect( - configAggregator(node.childNodes[0], { - appearance: 'collage-centered' - }) - ).toEqual( - expect.objectContaining({ - backgroundAttachment: 'scroll', - backgroundPosition: 'center center', - backgroundRepeat: false, - backgroundSize: 'cover', - border: 'none', - borderColor: '', - borderRadius: '0px', - borderWidth: '1px', - buttonText: 'Shop Bags', - buttonType: 'secondary', - content: - '

A new way of shopping

Experience the best way of shopping today!

', - cssClasses: [], - desktopImage: 'desktop-image.jpg', - link: 'gear/bags.html', - linkType: 'category', - openInNewTab: true, - marginBottom: '0px', - marginLeft: '0px', - marginRight: '0px', - marginTop: '0px', - minHeight: '300px', - mobileImage: 'mobile-image.jpg', - overlayColor: null, - paddingBottom: '40px', - paddingLeft: '40px', - paddingRight: '40px', - paddingTop: '40px', - showButton: 'always', - showOverlay: 'never', - textAlign: 'right' - }) - ); -}); - -test('banner config aggregator retrieves values from fully configured collage-right banner content type', () => { - const node = document.createElement('div'); - node.innerHTML = - ''; - expect( - configAggregator(node.childNodes[0], { - appearance: 'collage-right' - }) - ).toEqual( - expect.objectContaining({ - backgroundAttachment: 'scroll', - backgroundPosition: 'center center', - backgroundRepeat: false, - backgroundSize: 'cover', - border: 'solid', - borderColor: 'red', - borderRadius: '15px', - borderWidth: '10px', - buttonText: 'Link Button', - buttonType: 'link', - content: - '

A new way of shopping

Experience the best way of shopping today!

', - cssClasses: [], - desktopImage: 'desktop-image.jpg', - link: 'gear/bags.html', - linkType: 'category', - openInNewTab: false, - marginBottom: '0px', - marginLeft: '0px', - marginRight: '0px', - marginTop: '0px', - minHeight: '300px', - mobileImage: 'mobile-image.jpg', - overlayColor: null, - paddingBottom: '40px', - paddingLeft: '40px', - paddingRight: '40px', - paddingTop: '40px', - showButton: 'always', - showOverlay: 'never', - textAlign: 'center' - }) - ); -}); - -test('banner config aggregator retrieve isHidden value', () => { - const node = document.createElement('div'); - node.innerHTML = - ''; - expect( - configAggregator(node.childNodes[0], { - appearance: 'collage-right' - }) - ).toEqual( - expect.objectContaining({ - isHidden: true - }) - ); -}); diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/configAggregator.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/configAggregator.js deleted file mode 100644 index 985b4fece3..0000000000 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/configAggregator.js +++ /dev/null @@ -1,72 +0,0 @@ -import { - getMargin, - getBackgroundImages, - getBorder, - getPadding, - getTextAlign, - getCssClasses, - getIsHidden -} from '../../utils'; - -/** - * Determine the button type based on class - * - * @param node - * @returns {string} - */ -const getButtonType = node => { - if (node.classList.contains('pagebuilder-button-secondary')) { - return 'secondary'; - } - if (node.classList.contains('pagebuilder-button-link')) { - return 'link'; - } - return 'primary'; -}; - -export default (node, props) => { - const wrapperElement = node.querySelector('[data-element="wrapper"]'); - const overlayElement = node.querySelector('[data-element="overlay"]'); - const linkElement = node.querySelector('a[data-element="link"]'); - const buttonElement = node.querySelector('[data-element="button"]'); - const showButton = node.getAttribute('data-show-button'); - const showOverlay = node.getAttribute('data-show-overlay'); - - let minHeightPaddingElement = wrapperElement; - if (props.appearance === 'poster') { - minHeightPaddingElement = overlayElement; - } - - return { - minHeight: minHeightPaddingElement.style.minHeight || null, - backgroundColor: wrapperElement.style.backgroundColor, - ...getBackgroundImages(wrapperElement), - content: node.querySelector('[data-element="content"]').innerHTML, - link: linkElement ? linkElement.getAttribute('href') : null, - linkType: linkElement - ? linkElement.getAttribute('data-link-type') - : null, - openInNewTab: - linkElement && linkElement.getAttribute('target') === '_blank', - showButton, - buttonText: - buttonElement && showButton !== 'never' - ? buttonElement.textContent - : null, - buttonType: - buttonElement && showButton !== 'never' - ? getButtonType(buttonElement) - : null, - showOverlay, - overlayColor: - overlayElement && showOverlay !== 'never' - ? overlayElement.getAttribute('data-overlay-color') - : null, - ...getTextAlign(wrapperElement), - ...getBorder(wrapperElement), - ...getCssClasses(node), - ...getMargin(node), - ...getPadding(minHeightPaddingElement), - ...getIsHidden(node) - }; -}; diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/index.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/index.js deleted file mode 100644 index 13570240a3..0000000000 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './banner'; From 5dc9b5f0ae6f6b9800d4365251b0bdebdaf0c5bd Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Sun, 6 Oct 2019 23:00:18 -0500 Subject: [PATCH 09/38] PB-36: [Docs] Creating custom Page Builder components WIP Create custom component docs draft --- .../create-custom-components/index.md | 70 +++++++++---------- 1 file changed, 34 insertions(+), 36 deletions(-) diff --git a/pwa-devdocs/src/pagebuilder/create-custom-components/index.md b/pwa-devdocs/src/pagebuilder/create-custom-components/index.md index bf5a4ef098..08469b6c32 100644 --- a/pwa-devdocs/src/pagebuilder/create-custom-components/index.md +++ b/pwa-devdocs/src/pagebuilder/create-custom-components/index.md @@ -10,7 +10,9 @@ We utilise a special [master format parser](master-format-parser.md) within our - Have a working Page Builder component, with the master format implemented. - Be able to render and visualize your content type on the existing Luma store front. -## Structure +## Process + +![Creating Page Builder Components](PageBuilderComponents.svg) As we require some additional steps compared to a normal we have some additional files associated with each content type, in example our `Text` content types component structure looks like the following: @@ -18,14 +20,14 @@ As we require some additional steps compared to a normal we have some additional - `__tests__` - `configAggregator.js` - `index.js` - - `text.css` - - `text.js` + - `exampleQuote.css` + - `exampleQuote.js` `__tests__` & `index.js` are just part of PWA Studio, and won't be discussed here. ### `configAggregator.js` -The config aggregator provides an interface which accepts the HTML master format for a specific content type, decomposes it and returns an flat object of the properties associated with the content type. +The config aggregator provides an interface which accepts the HTML master format for a specific content type, decomposes it, and returns it as a flat object of the properties associated with the content type. The interface for a `configAggregator` is as follows: @@ -33,7 +35,7 @@ The interface for a `configAggregator` is as follows: (node: HTMLElement, props: {contentType: string, appearance: string}) => {[key: string]: any} ``` -We aim to have human friendly output from the config aggregator where we can as the keys will align with your content types component later on. +We aim to have human friendly output from the configuration aggregator, where the keys will align with your content types component later on. We provide a number of utility methods which help with retrieving commonly stored data, such as the advanced section and background images. These are all located within `packages/venia-ui/lib/components/RichContent/PageBuilder/utils.js`. We provide the following utilities, which all accept the `node` passed to the config aggregator: @@ -59,15 +61,15 @@ export default node => { }; ``` -The only piece of data the Text content type implements in the admin, apart from our advanced section, is a content field. We utilise DOM functions such as `innerHTML` to retrieve the data from the format and return it. We aim to use the field names from the Page Builder admin form for the keys within the config aggregators response to easily identify which piece of data is which within the component. +The only piece of data the Text content type implements in the admin, apart from our advanced section, is a content field. We utilize DOM functions (such as `innerHTML` and `textContent`) to retrieve the data from the master format and return it. We use the field names from the Page Builder admin form for the keys within the config aggregators response to easily identify the data in the component. -**Tip:** I find placing a `console.log(node)` at the top of the configAggregator while development can help identify where aspects of the data lives within the master format. +**Tip:** Placing a `console.log(node)` at the top of the `configAggregator` during development can help identify where data lives within the master format. ### Appearances -Some content types have different appearances and thus differences in their master format output, this occurs already within our core Row content type. To handle this we provide the appearance within the second props argument to allow you to modify your queries to retrieve the data from the current node. +Some content types have different appearances and thus differences in their master format output. This occurs already within our core Row content type. To handle this we provide the appearance within the second `props` argument to allow you to modify your queries in order to retrieve data from the current node. -For instance in Row we swap the main node we detect upon based on the appearance: +For example in Row, we swap the main node we detect based on the appearance: ```js export default (node, props) => { @@ -76,21 +78,22 @@ export default (node, props) => { props.appearance === 'contained' ? node.childNodes[0] : node; ``` -### `text.css` +### `exampleQuote.css` -This contains our content types styling, the experience within Page Builder is the same as creating a component elsewhere in PWA Studio. +This contains our content types styling. the experience within Page Builder is the same as creating a component elsewhere in PWA Studio. -### `text.js` +### `exampleQuote.js` -Our React component is once again, the same as working with a normal React component in PWA Studio. However, the way the component is rendered through Page Builder's factory makes the props provided defined by the response of your config aggregator. +Page Builder React components are the same as working with other React components in PWA Studio. However, the properties defined within a Page Builder component are determined by the properties returned from your configuration aggregator. -This results in having a larger number of props, which may all not be used when the component is initialized. Due to this you need to ensure if a value is null the component can still render correctly. +This results in having a larger number of props. But not all props are used when the component is initialized. As a result, you need to ensure if a value is null the component can still render correctly. Here is an example of the properties defined in the `exampleQuote.js`. ```js -const Text = props => { - const classes = mergeClasses(defaultClasses, props.classes); +const ExampleQuote = props => { const { - content, + quote, + author, + description, textAlign, border, borderColor, @@ -108,40 +111,35 @@ const Text = props => { } = props; ``` -## Config +## Configuration file -We currently maintain a static config object which dictates which content types are supported. To include support for your new content type you'll need to add an entry to `packages/venia-ui/lib/components/RichContent/PageBuilder/config.js`. +We currently maintain a static config object (`config.js`) that define which content types are supported. To include support for your custom content type you'll need to add an entry to `packages/venia-ui/lib/components/RichContent/PageBuilder/config.js`. -Each entry has to define it's `configAggregator` & `component`. Here's an example of the Text content types entry within this configuration: +Each entry has to define its `configAggregator` & `component`. Here's an example of the `ExampleQuote` content type's entry in the `config.js` file: ```js +import exampleQuoteConfigAggregator from './ContentTypes/ExampleQuote/configAggregator'; + export const contentTypesConfig = { ... - text: { - configAggregator: textConfigAggregator, - component: Text - }, + example_quote: { + configAggregator: exampleQuoteConfigAggregator, + component: React.lazy(() => import('./ContentTypes/ExampleQuote')) + } ... }; ``` ### Lazy components -As we're building a PWA performance is key, due to that we recommend loading less critical components via `React.lazy`. This will result in a very slight delay in that content rendering but will ensure we don't bloat the bundle size for the store. +When building PWAs, performance is key. That's why we recommend loading less critical components using `React.lazy`. This will result in a very slight delay in that content rendering but will ensure we don't bloat the bundle size for the store. -We opt to use this for the following content types by default: Tabs, Tab Item, Buttons, Button Item, Block, Products, HTML & Divider. +By default, we apply `React.lazy` to the following content types: Banner, Slider, Slide Item, Tab, Tab Item, Button, Button Item, Block, Products, HTML, and Divider. -To have your component loaded lazily you simply have to wrap your `component` reference in a `React.lazy` call as follows: +To have your component loaded lazily you simply have to wrap your `component` reference in a call to `React.lazy` as previously shown for the ExampleQuote component: ```js -export const contentTypesConfig = { - ... - products: { - configAggregator: productsConfigAggregator, - component: React.lazy(() => import('./ContentTypes/Products')) - }, - ... -}; +component: React.lazy(() => import('./ContentTypes/ExampleQuote')) ``` ## Debugging @@ -152,4 +150,4 @@ If you haven't yet modified the config object and setup the references you'll se parseStorageHtml.js?4091:67 No config aggregator defined for content type X, this content type won't be rendered. ``` -If you have modified the configuration and your content type is still not displaying you can debug through `packages/venia-ui/lib/components/RichContent/PageBuilder/parseStorageHtml.js` to determine if your configuration item is being correctly detected. +If you _have_ modified the configuration and your content type is still not displaying you can debug through `packages/venia-ui/lib/components/RichContent/PageBuilder/parseStorageHtml.js` to determine if your configuration item is being correctly detected. From 05d47ba5cb66c9d7b89d2fa127a693e5843f2fb5 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Sun, 6 Oct 2019 23:08:00 -0500 Subject: [PATCH 10/38] PB-36: [Docs] Creating custom Page Builder components WIP Create custom component docs draft --- .../create-custom-components/PageBuilderComponents.svg | 1 + .../src/pagebuilder/create-custom-components/index.md | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 pwa-devdocs/src/pagebuilder/create-custom-components/PageBuilderComponents.svg diff --git a/pwa-devdocs/src/pagebuilder/create-custom-components/PageBuilderComponents.svg b/pwa-devdocs/src/pagebuilder/create-custom-components/PageBuilderComponents.svg new file mode 100644 index 0000000000..cd743265e7 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/create-custom-components/PageBuilderComponents.svg @@ -0,0 +1 @@ +2 MyComponent.jsCreate your content type component.4Create the CSS styles for your content type component.MyComponent.cssCSS1 configAggregator.jsRetrieve the property values from your content type’s master format.3 config.jsAdd your config aggregator and the component to the config.js file.You \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/create-custom-components/index.md b/pwa-devdocs/src/pagebuilder/create-custom-components/index.md index 08469b6c32..9e5bbce9c2 100644 --- a/pwa-devdocs/src/pagebuilder/create-custom-components/index.md +++ b/pwa-devdocs/src/pagebuilder/create-custom-components/index.md @@ -2,13 +2,13 @@ title: Create custom components --- -We utilise a special [master format parser](master-format-parser.md) within our Page Builder integration to easily decompose data within the master format for use in a PWA Studio React component. +This topic describes how to create a custom Page Builder content type component by decomposing the master format for use in PWA Studio as a React component. ## Prerequisites - Have PWA Studio setup and running in your development environment. -- Have a working Page Builder component, with the master format implemented. -- Be able to render and visualize your content type on the existing Luma store front. +- Have a working Page Builder custom content type, with the master format implemented. +- Be able to render your content type within a Magento instance using a Luma store front. ## Process From 1437bf38723d72f8eef88fe26babf0dc58cd8ce0 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Mon, 7 Oct 2019 07:30:43 -0500 Subject: [PATCH 11/38] PB-36: [Docs] Creating custom Page Builder components WIP Create custom component docs draft --- .../PageBuilderComponents.svg | 2 +- .../create-custom-components/index.md | 60 +++++++++---------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/pwa-devdocs/src/pagebuilder/create-custom-components/PageBuilderComponents.svg b/pwa-devdocs/src/pagebuilder/create-custom-components/PageBuilderComponents.svg index cd743265e7..be76c54290 100644 --- a/pwa-devdocs/src/pagebuilder/create-custom-components/PageBuilderComponents.svg +++ b/pwa-devdocs/src/pagebuilder/create-custom-components/PageBuilderComponents.svg @@ -1 +1 @@ -2 MyComponent.jsCreate your content type component.4Create the CSS styles for your content type component.MyComponent.cssCSS1 configAggregator.jsRetrieve the property values from your content type’s master format.3 config.jsAdd your config aggregator and the component to the config.js file.You \ No newline at end of file +5 MyComponent.jsBuild out your content type component.4Build out your component CSS styles (if needed).MyComponent.cssCSS3 configAggregator.jsBuild out your configAggregator to get properties from your content type’s master format.Youfiles setup1Create your component directory and component files.2 config.jsAdd your component files to the config object. \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/create-custom-components/index.md b/pwa-devdocs/src/pagebuilder/create-custom-components/index.md index 9e5bbce9c2..b9d7790602 100644 --- a/pwa-devdocs/src/pagebuilder/create-custom-components/index.md +++ b/pwa-devdocs/src/pagebuilder/create-custom-components/index.md @@ -10,10 +10,12 @@ This topic describes how to create a custom Page Builder content type component - Have a working Page Builder custom content type, with the master format implemented. - Be able to render your content type within a Magento instance using a Luma store front. -## Process +## Steps ![Creating Page Builder Components](PageBuilderComponents.svg) +### Step 1: Create component directory and files + As we require some additional steps compared to a normal we have some additional files associated with each content type, in example our `Text` content types component structure looks like the following: - `packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Text` @@ -25,7 +27,26 @@ As we require some additional steps compared to a normal we have some additional `__tests__` & `index.js` are just part of PWA Studio, and won't be discussed here. -### `configAggregator.js` +### Step 2: Add configAggregator and component to config.js + +We currently maintain a static config object called `config.js`. This object defines the content types that are supported. To include support for your custom content type component, you'll need to add an entry to `packages/venia-ui/lib/components/RichContent/PageBuilder/config.js`. + +Each entry has to define its `configAggregator` & `component`. Here's an example of the `ExampleQuote` content type's entry in the `config.js` file: + +```js +import exampleQuoteConfigAggregator from './ContentTypes/ExampleQuote/configAggregator'; + +export const contentTypesConfig = { + ... + example_quote: { + configAggregator: exampleQuoteConfigAggregator, + component: React.lazy(() => import('./ContentTypes/ExampleQuote')) + } + ... +}; +``` + +### Step 3: Build out your configAggregator The config aggregator provides an interface which accepts the HTML master format for a specific content type, decomposes it, and returns it as a flat object of the properties associated with the content type. @@ -65,7 +86,7 @@ The only piece of data the Text content type implements in the admin, apart from **Tip:** Placing a `console.log(node)` at the top of the `configAggregator` during development can help identify where data lives within the master format. -### Appearances +#### Retrieving data from different Appearances Some content types have different appearances and thus differences in their master format output. This occurs already within our core Row content type. To handle this we provide the appearance within the second `props` argument to allow you to modify your queries in order to retrieve data from the current node. @@ -78,15 +99,13 @@ export default (node, props) => { props.appearance === 'contained' ? node.childNodes[0] : node; ``` -### `exampleQuote.css` +### Step 4: Build out your CSS styles -This contains our content types styling. the experience within Page Builder is the same as creating a component elsewhere in PWA Studio. +Your `.css` file contains all the CSS styles you need to style your component within a PWA app. Styling your Page Builder components is the same as styling all other components in PWA Studio. -### `exampleQuote.js` +### Step 5: Build out your component -Page Builder React components are the same as working with other React components in PWA Studio. However, the properties defined within a Page Builder component are determined by the properties returned from your configuration aggregator. - -This results in having a larger number of props. But not all props are used when the component is initialized. As a result, you need to ensure if a value is null the component can still render correctly. Here is an example of the properties defined in the `exampleQuote.js`. +Page Builder React components are the same as working with other React components in PWA Studio. However, the properties defined within a Page Builder component are determined by the properties returned from your configuration aggregator. This may result a larger number of props than usual. But not all props are used when the component is initialized. As a result, you need to ensure if a value is null the component can still render correctly. Here is an example of the properties defined in the `exampleQuote.js`. ```js const ExampleQuote = props => { @@ -111,26 +130,7 @@ const ExampleQuote = props => { } = props; ``` -## Configuration file - -We currently maintain a static config object (`config.js`) that define which content types are supported. To include support for your custom content type you'll need to add an entry to `packages/venia-ui/lib/components/RichContent/PageBuilder/config.js`. - -Each entry has to define its `configAggregator` & `component`. Here's an example of the `ExampleQuote` content type's entry in the `config.js` file: - -```js -import exampleQuoteConfigAggregator from './ContentTypes/ExampleQuote/configAggregator'; - -export const contentTypesConfig = { - ... - example_quote: { - configAggregator: exampleQuoteConfigAggregator, - component: React.lazy(() => import('./ContentTypes/ExampleQuote')) - } - ... -}; -``` - -### Lazy components +#### Lazy loading components When building PWAs, performance is key. That's why we recommend loading less critical components using `React.lazy`. This will result in a very slight delay in that content rendering but will ensure we don't bloat the bundle size for the store. @@ -142,7 +142,7 @@ To have your component loaded lazily you simply have to wrap your `component` re component: React.lazy(() => import('./ContentTypes/ExampleQuote')) ``` -## Debugging +## Debugging tips If you haven't yet modified the config object and setup the references you'll see the following console warning in your console to inform you the component is missing: From b848a2cd8a586f9ab872e8390cbe26f491b52e4e Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Fri, 11 Oct 2019 17:44:54 -0500 Subject: [PATCH 12/38] PB-36: [Docs] Creating custom Page Builder components WIP on lots of stuff --- .../ExampleQuote/configAggregator.js | 24 +- .../ExampleQuote/exampleQuote.css | 24 +- .../ContentTypes/ExampleQuote/exampleQuote.js | 22 +- .../config/venia-concept/index.js | 4 + pwa-devdocs/src/_data/pagebuilder.yml | 26 +- pwa-devdocs/src/_data/top-nav.yml | 2 +- .../PageBuilderComponents.svg | 1 - .../create-custom-components/index.md | 153 --------- .../add-aggregator/AddAggregatorOverview.svg | 82 +++++ .../add-aggregator/MasterFormatHTML.svg | 111 ++++++ .../MasterFormatToComponent.svg | 96 ++++++ .../custom-components/add-aggregator/index.md | 116 +++++++ .../custom-components/add-component/index.md | 31 ++ .../custom-components/add-css/index.md | 9 + .../custom-components/debugging/index.md | 11 + .../overview/OverviewSteps.svg | 148 ++++++++ .../overview/PageBuilderQuoteAdmin.png | Bin 0 -> 41720 bytes .../overview/PageBuilderQuoteStorefront.png | Bin 0 -> 37654 bytes .../custom-components/overview/index.md | 44 +++ .../setup-component/PageBuilderConfigFile.png | Bin 0 -> 13807 bytes .../setup-component/PageBuilderFilesSetup.png | Bin 0 -> 35297 bytes .../setup-component/SetupComponentTest.svg | 1 + .../setup-component/index.md | 106 ++++++ pwa-devdocs/src/pagebuilder/index.md | 5 - .../overview/LimitationsTextAlign.png | Bin 0 -> 6313 bytes .../PageBuilderIntegrationDetails.svg | 320 +++++++++++++++++- pwa-devdocs/src/pagebuilder/overview/index.md | 14 +- .../overview/masterFormatToComponent.svg | 96 ++++++ .../pagebuilder/utility-functions/index.md | 14 + 29 files changed, 1262 insertions(+), 198 deletions(-) delete mode 100644 pwa-devdocs/src/pagebuilder/create-custom-components/PageBuilderComponents.svg delete mode 100644 pwa-devdocs/src/pagebuilder/create-custom-components/index.md create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-css/index.md create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteAdmin.png create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteStorefront.png create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/overview/index.md create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/setup-component/PageBuilderConfigFile.png create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/setup-component/PageBuilderFilesSetup.png create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/setup-component/SetupComponentTest.svg create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md delete mode 100644 pwa-devdocs/src/pagebuilder/index.md create mode 100644 pwa-devdocs/src/pagebuilder/overview/LimitationsTextAlign.png create mode 100644 pwa-devdocs/src/pagebuilder/overview/masterFormatToComponent.svg create mode 100644 pwa-devdocs/src/pagebuilder/utility-functions/index.md diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js index e01dedaaea..4262afc38a 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js @@ -1,13 +1,17 @@ -import { getAdvanced, getCssClasses } from '../../utils'; - -export default node => { - const props = { - quote: node.children[0].textContent, - author: node.children[1].textContent, - description: node.children[2].textContent, - ...getAdvanced(node), - ...getCssClasses(node.children[0]) +import { getAdvanced, getCssClasses, getBackgroundImages } from '../../utils'; + +export default (node, props) => { + + console.log(node); + + const propObject = { + quote: node.childNodes[0].textContent, + author: node.childNodes[1].textContent, + description: node.childNodes[2].innerHTML, + ...getAdvanced(node) }; - return props; + console.log(propObject); + + return propObject; }; diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css index cce708b53e..fdc384f384 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css @@ -27,7 +27,7 @@ margin-left: 0; } -.quote-author { +.quoteAuthor { padding-right: 30px; font-size: 16px; color: #333333; @@ -37,7 +37,7 @@ font-weight: 600; } -.quote-description { +.quoteDescription { position: relative; padding-right: 30px; font-size: 16px; @@ -48,37 +48,37 @@ word-break: normal !important; } -.black-quote { +.blackQuote { color: #333333; } -.black-quote::before { +.blackQuote::before { color: #333333; } -.blue-quote { +.blueQuote { color: #007ab9; } -.blue-quote::before { +.blueQuote::before { color: #007ab9; } -.green-quote { +.greenQuote { color: #009900; } -.green-quote::before { +.greenQuote::before { color: #009900; } -.red-quote { +.redQuote { color: #990000; } -.red-quote::before { +.redQuote::before { color: #990000; } -.purple-quote { +.purpleQuote { color: #990099; } -.purple-quote::before { +.purpleQuote::before { color: #990099; } diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js index f2ff8eba79..004b49fc10 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js @@ -2,6 +2,8 @@ import React from 'react'; import defaultClasses from './exampleQuote.css'; import { arrayOf, string } from 'prop-types'; +const toHTML = str => ({ __html: str }); + /** * Page Builder ExampleQuote component. * @@ -48,23 +50,21 @@ const ExampleQuote = props => { paddingTop, paddingRight, paddingBottom, - paddingLeft + paddingLeft, }; - const className = cssClasses.length ? cssClasses.join(' ') : null; + const quoteClasses = [defaultClasses.quote, defaultClasses.blueQuote].join(' '); + console.log(quoteClasses); + return ( -
-
+
+
{quote}
-
{author}
-
- {description} +
+ {author}
+
); }; diff --git a/pwa-devdocs/scripts/create-reference-docs/config/venia-concept/index.js b/pwa-devdocs/scripts/create-reference-docs/config/venia-concept/index.js index 32527f8de4..a8d909ae3a 100644 --- a/pwa-devdocs/scripts/create-reference-docs/config/venia-concept/index.js +++ b/pwa-devdocs/scripts/create-reference-docs/config/venia-concept/index.js @@ -74,5 +74,9 @@ module.exports = [ { target: 'venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Map/map.js', type: 'function' + }, + { + target: 'venia-ui/lib/components/RichContent/PageBuilder/utils.js', + type: 'function' } ]; diff --git a/pwa-devdocs/src/_data/pagebuilder.yml b/pwa-devdocs/src/_data/pagebuilder.yml index 13da3f8fad..21c18a05b9 100644 --- a/pwa-devdocs/src/_data/pagebuilder.yml +++ b/pwa-devdocs/src/_data/pagebuilder.yml @@ -1,10 +1,30 @@ title: Page Builder entries: - - label: Page Builder Integration + - label: Page Builder integration url: /pagebuilder/overview/ - - label: Create custom components - url: /pagebuilder/create-custom-components/ + - label: Creating custom components + entries: + - label: Overview + url: /pagebuilder/custom-components/overview/ + + - label: Set up component + url: /pagebuilder/custom-components/setup-component/ + + - label: Add aggregator + url: /pagebuilder/custom-components/add-aggregator/ + + - label: Add component + url: /pagebuilder/custom-components/add-component/ + + - label: Add CSS + url: /pagebuilder/custom-components/add-css/ + + - label: Debugging tips + url: /pagebuilder/custom-components/debugging/ + + - label: Utility functions + url: /pagebuilder/utility-functions/ - label: Page Builder components entries: diff --git a/pwa-devdocs/src/_data/top-nav.yml b/pwa-devdocs/src/_data/top-nav.yml index 6e8848224a..dede9dd7d1 100644 --- a/pwa-devdocs/src/_data/top-nav.yml +++ b/pwa-devdocs/src/_data/top-nav.yml @@ -8,7 +8,7 @@ url: /peregrine/ - label: PageBuilder - url: /pagebuilder/ + url: /pagebuilder/overview/ - label: Venia Storefront url: /venia-pwa-concept/ diff --git a/pwa-devdocs/src/pagebuilder/create-custom-components/PageBuilderComponents.svg b/pwa-devdocs/src/pagebuilder/create-custom-components/PageBuilderComponents.svg deleted file mode 100644 index be76c54290..0000000000 --- a/pwa-devdocs/src/pagebuilder/create-custom-components/PageBuilderComponents.svg +++ /dev/null @@ -1 +0,0 @@ -5 MyComponent.jsBuild out your content type component.4Build out your component CSS styles (if needed).MyComponent.cssCSS3 configAggregator.jsBuild out your configAggregator to get properties from your content type’s master format.Youfiles setup1Create your component directory and component files.2 config.jsAdd your component files to the config object. \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/create-custom-components/index.md b/pwa-devdocs/src/pagebuilder/create-custom-components/index.md deleted file mode 100644 index b9d7790602..0000000000 --- a/pwa-devdocs/src/pagebuilder/create-custom-components/index.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: Create custom components ---- - -This topic describes how to create a custom Page Builder content type component by decomposing the master format for use in PWA Studio as a React component. - -## Prerequisites - -- Have PWA Studio setup and running in your development environment. -- Have a working Page Builder custom content type, with the master format implemented. -- Be able to render your content type within a Magento instance using a Luma store front. - -## Steps - -![Creating Page Builder Components](PageBuilderComponents.svg) - -### Step 1: Create component directory and files - -As we require some additional steps compared to a normal we have some additional files associated with each content type, in example our `Text` content types component structure looks like the following: - -- `packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Text` - - `__tests__` - - `configAggregator.js` - - `index.js` - - `exampleQuote.css` - - `exampleQuote.js` - -`__tests__` & `index.js` are just part of PWA Studio, and won't be discussed here. - -### Step 2: Add configAggregator and component to config.js - -We currently maintain a static config object called `config.js`. This object defines the content types that are supported. To include support for your custom content type component, you'll need to add an entry to `packages/venia-ui/lib/components/RichContent/PageBuilder/config.js`. - -Each entry has to define its `configAggregator` & `component`. Here's an example of the `ExampleQuote` content type's entry in the `config.js` file: - -```js -import exampleQuoteConfigAggregator from './ContentTypes/ExampleQuote/configAggregator'; - -export const contentTypesConfig = { - ... - example_quote: { - configAggregator: exampleQuoteConfigAggregator, - component: React.lazy(() => import('./ContentTypes/ExampleQuote')) - } - ... -}; -``` - -### Step 3: Build out your configAggregator - -The config aggregator provides an interface which accepts the HTML master format for a specific content type, decomposes it, and returns it as a flat object of the properties associated with the content type. - -The interface for a `configAggregator` is as follows: - -```ts -(node: HTMLElement, props: {contentType: string, appearance: string}) => {[key: string]: any} -``` - -We aim to have human friendly output from the configuration aggregator, where the keys will align with your content types component later on. - -We provide a number of utility methods which help with retrieving commonly stored data, such as the advanced section and background images. These are all located within `packages/venia-ui/lib/components/RichContent/PageBuilder/utils.js`. We provide the following utilities, which all accept the `node` passed to the config aggregator: - -- `getBackgroundImages` -- `getVerticalAlignment` -- `getAdvanced` _If all advanced items are on the same node you can utilise our wrapper function, otherwise you'll want to use the below individual methods on the correct nodes_. - - `getPadding` - - `getMargin` - - `getBorder` - - `getTextAlign` - - `getCssClasses` - -For instance our Text content type aggregator looks like the following: - -```js -import { getAdvanced } from '../../utils'; - -export default node => { - return { - content: node.innerHTML, - ...getAdvanced(node) - }; -}; -``` - -The only piece of data the Text content type implements in the admin, apart from our advanced section, is a content field. We utilize DOM functions (such as `innerHTML` and `textContent`) to retrieve the data from the master format and return it. We use the field names from the Page Builder admin form for the keys within the config aggregators response to easily identify the data in the component. - -**Tip:** Placing a `console.log(node)` at the top of the `configAggregator` during development can help identify where data lives within the master format. - -#### Retrieving data from different Appearances - -Some content types have different appearances and thus differences in their master format output. This occurs already within our core Row content type. To handle this we provide the appearance within the second `props` argument to allow you to modify your queries in order to retrieve data from the current node. - -For example in Row, we swap the main node we detect based on the appearance: - -```js -export default (node, props) => { - // Determine which node holds the data for the appearance - const dataNode = - props.appearance === 'contained' ? node.childNodes[0] : node; -``` - -### Step 4: Build out your CSS styles - -Your `.css` file contains all the CSS styles you need to style your component within a PWA app. Styling your Page Builder components is the same as styling all other components in PWA Studio. - -### Step 5: Build out your component - -Page Builder React components are the same as working with other React components in PWA Studio. However, the properties defined within a Page Builder component are determined by the properties returned from your configuration aggregator. This may result a larger number of props than usual. But not all props are used when the component is initialized. As a result, you need to ensure if a value is null the component can still render correctly. Here is an example of the properties defined in the `exampleQuote.js`. - -```js -const ExampleQuote = props => { - const { - quote, - author, - description, - textAlign, - border, - borderColor, - borderWidth, - borderRadius, - marginTop, - marginRight, - marginBottom, - marginLeft, - paddingTop, - paddingRight, - paddingBottom, - paddingLeft, - cssClasses = [] - } = props; -``` - -#### Lazy loading components - -When building PWAs, performance is key. That's why we recommend loading less critical components using `React.lazy`. This will result in a very slight delay in that content rendering but will ensure we don't bloat the bundle size for the store. - -By default, we apply `React.lazy` to the following content types: Banner, Slider, Slide Item, Tab, Tab Item, Button, Button Item, Block, Products, HTML, and Divider. - -To have your component loaded lazily you simply have to wrap your `component` reference in a call to `React.lazy` as previously shown for the ExampleQuote component: - -```js -component: React.lazy(() => import('./ContentTypes/ExampleQuote')) -``` - -## Debugging tips - -If you haven't yet modified the config object and setup the references you'll see the following console warning in your console to inform you the component is missing: - -```text -parseStorageHtml.js?4091:67 No config aggregator defined for content type X, this content type won't be rendered. -``` - -If you _have_ modified the configuration and your content type is still not displaying you can debug through `packages/venia-ui/lib/components/RichContent/PageBuilder/parseStorageHtml.js` to determine if your configuration item is being correctly detected. diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg new file mode 100644 index 0000000000..3ac2b4dcef --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg @@ -0,0 +1,82 @@ + + + + AddAggregatorOverview + Created with Sketch. + + + + + + + + + + + master format + + + + + aggregator + + + + + + + + Build out your aggregator + to retrieve properties from + your content type nodes + within the master format. + + + Return a property object so + that the framework can push it + to you component to populate + corresponding properties. + + + + component + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + use utility & DOM functions + + + return property object + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg new file mode 100644 index 0000000000..887fbed553 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + content type + + + + + + appearance + + + + + + element + + + + + + styles + + + + + + classes + + + + + + html content + + + + + + text + + + + + <div data-content-type="example_quote" data-appearance="default" data-element="main" style="border-style: none; border-width: 1px….more;”> + <blockquote class=“quote blue-quote" data-element="quote">I know where I came from—but where did all you zombies come from?</blockquote> + <div class="quote-author" data-element="author">Robert A. Heinlein</div> + <div class="quote-description" data-element="description"> + <div> + <span style="color: #808080;"> + <em>All You Zombies</em> (short story) + </span> + </div> + </div> + </div> + + + + + + structure + + + + HTML content from + tinyMCE editor used for + Quote’s description input + + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg new file mode 100644 index 0000000000..cf9a80720f --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg @@ -0,0 +1,96 @@ + + + + MasterFormatToComponent + Created with Sketch. + + + + + + + + + + + + + + + + + React components + + + + + + + + + + + master format + + + + + Magento instance + + + + + + + + + + + + + PWA app + + + + + + + + + + + + + + + + Page Builder for PWA + + + + + + + + + + + + + + + + + + + + + + + + + + Converting the master format HTML into React components + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md new file mode 100644 index 0000000000..86690cda21 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md @@ -0,0 +1,116 @@ +--- +title: Add aggregator +--- + +The purpose of the configuration aggregator (configAggregator) is pull properties from a content type and return them as a flat object of the properties to the Page Builder PWA framework. The framework (specifically the ``) passes these properties to your component so you can assign them to your component's corresponding properties for rendering within a PWA Studio app. + +![Aggregator Overview](AddAggregatorOverview.svg) + +## Master Format HTML + +The key to building out your aggregator is knowing the structure, content, and properties available in your content type's master format. You can do this the hard way by looking in the database of your Magento instance (that is, the `content` field in the `cms_page` and `cms_block` tables). But there is a better way. + +**Protip**: Place a `console.log(node)` at the top of your `configAggregator` function so you can see exactly what your content type's HTML (the `HTMLElement` passed by the framework) looks like. + +In our `ExampleQuote` component, the framework passes the following HTMLElement (color coded here for easier analysis) to our aggregator: + +![Master format HTML](MasterFormatHTML.svg) + +## The Aggregator + +The interface for a `configAggregator` is as follows: + +```ts +(node: HTMLElement, props: {contentType: string, appearance: string}) => {[key: string]: any} +``` + +### Purpose + +The purpose of your component's aggregator is to collect (aggregate) properties from your content type's HTML and return a property object for use in your component. The object you return should contain all the text, html, inline styles, and classes you need to faithfully reproduce your content type as a component in PWA Studio. + +For example, after analyzing the master format HTML for our Quote content type, we decide to retrieve and return the following properties to our component: + +- Inline **styles** from the first node +- CSS **classes** from the first child node +- **Text** content from the first two child nodes +- **HTML** content from the last child node + +To do this, you'll want to use a combination of [HTMLElement DOM properties] along with our [utility functions], as shown in the following example. + +### Example + +Here is the aggregator we use for the `ExampleQuote` component: + +```js +import { getAdvanced } from '../../utils'; + +export default (node, props) => { + +console.log(node); + + return { + quote: node.childNodes[0].textContent, + author: node.childNodes[1].textContent, + description: node.childNodes[2].innerHTML, + ...getAdvanced(node) + }; +}; +``` + +First we `import` the utility function(s) we want to use. In our case, we know that our Quote content type provides end users with the Advanced form section. So we import the `getAdvanced` function from `utils.js`. + +Then we use the `element` names from the master format (color coded in green above) as our property key names: `quote`, `author`, and `description`. Doing this helps to identify where the data in the component comes from. + +Next, we use the `textContent` and `innerHTML` DOM properties to grab the text and html values from the appropriate `childNodes`. + +Finally, we use the `getAdvanced()` utility function to retrieve all the properties from the Advanced section of our content type's form. Later you will create the corresponding keys to capture these values within your component. + +{: .bs-callout .bs-callout-info} +The Quote content type also has a form section called Background (from the `pagebuilder_base_form_with_background_attributes` form). This section of the form allows end users to enter all kinds of background attributes, such as images, colors, positions and so on. If your custom content uses the Background section, you probably want to include the those attributes in your component using the `getBackgroundImages()` utility function. However, to keep things simple for our component, we decided not to pull these attributes from the HTML. + +### Retrieving data from different Appearances + +If your content type has different appearances, the master format HTML will also differ. To handle this we provide the appearance within the second `props` argument so that you can modify your queries in order to retrieve data from the correct node. + +For our Quote content type, we only have one appearance (the default). However the Row content type has three appearances, so it uses a conditional based on the `props.appearance` value to determine the correct node to use, as shown here: + +```js +// Targeting appearances in the Row aggregator + +export default (node, props) => { + // Determine which node holds the data for the appearance + const dataNode = + props.appearance === 'contained' ? node.childNodes[0] : node; + return { + minHeight: dataNode.style.minHeight ? dataNode.style.minHeight : null, + ... + }; +``` + +## Test the aggregator + +The best way to see the properties returned by your aggregator is using `console.log()`. For our quote aggregator, we can do something like this: + +```js +import { getAdvanced, getCssClasses, getBackgroundImages } from '../../utils'; + +export default (node, props) => { + console.log(node); + + const propObject = { + quote: node.childNodes[0].textContent, + author: node.childNodes[1].textContent, + description: node.childNodes[2].innerHTML, + ...getAdvanced(node) + }; + + console.log(propObject); + return propObject; +}; +``` + +{: .bs-callout .bs-callout-info} +You will need to know the property `key-values` you are returning so that that you can assign them within your component. + +[utility functions]: {{ site.baseurl }}{% link pagebuilder/utility-functions/index.md %} +[HTMLElement DOM properties]: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md new file mode 100644 index 0000000000..d6f8fdbab5 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md @@ -0,0 +1,31 @@ +--- +title: Add component +--- + +Page Builder React components are the same as working with other React components in PWA Studio. However, the properties defined within a Page Builder component are determined by the properties returned from your configuration aggregator. This may result a larger number of props than usual. But not all props are used when the component is initialized. As a result, you need to ensure if a value is null the component can still render correctly. Here is an example of the properties defined in the `exampleQuote.js`. + +## Build out your component + +```js +const ExampleQuote = props => { + const { + quote, + author, + description, + textAlign, + border, + borderColor, + borderWidth, + borderRadius, + marginTop, + marginRight, + marginBottom, + marginLeft, + paddingTop, + paddingRight, + paddingBottom, + paddingLeft, + cssClasses = [] + } = props; +``` + diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-css/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-css/index.md new file mode 100644 index 0000000000..f4a295dbe0 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-css/index.md @@ -0,0 +1,9 @@ +--- +title: Add stylesheet +--- + +Your `.css` file contains all the CSS styles you need to style your component within a PWA app. Styling your Page Builder components is the same as styling all other components in PWA Studio. + +## Build out your CSS styles + +Instructions... diff --git a/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md b/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md new file mode 100644 index 0000000000..83b18c666a --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md @@ -0,0 +1,11 @@ +--- +title: Debugging tips +--- + +If you haven't yet modified the config object and setup the references you'll see the following console warning in your console to inform you the component is missing: + +```text +parseStorageHtml.js?4091:67 No config aggregator defined for content type X, this content type won't be rendered. +``` + +If you _have_ modified the configuration and your content type is still not displaying you can debug through `packages/venia-ui/lib/components/RichContent/PageBuilder/parseStorageHtml.js` to determine if your configuration item is being correctly detected. diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg new file mode 100644 index 0000000000..b53363a1c2 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg @@ -0,0 +1,148 @@ + + + + OverviewSteps + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + 3 + + + + + + Add component + + + + + + + + Build out your + React component using + the properties from the + configAggregator. + + + + + + + + + + + + + + + 2 + + + + + + Add aggregator + + + + + + Build out your + configAggregator to get + properties from your content + type’s master format. + + + + + + + + You + + + + + + + + + + Set up component + + + + + + + + + + + + + 1 + + + + + Create and configure + your component files + to the component + framework. + + + + + + + + + + + + + + + 4 + + + + + Build out the CSS + styles for your + component + (as needed). + + + + Add CSS + + + + CSS + + + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteAdmin.png b/pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteAdmin.png new file mode 100644 index 0000000000000000000000000000000000000000..3d997c22cdc5dc529cb4c88eead90e7c11bf826a GIT binary patch literal 41720 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 literal 0 HcmV?d00001 diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteStorefront.png b/pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteStorefront.png new file mode 100644 index 0000000000000000000000000000000000000000..4dcd199a5be574391867f58514a6d371e6f1a941 GIT binary patch literal 37654 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

Kgu*vFp?!VQC9 zNVl7GLUE!)r`P}yG~gEoPBEU@IwfTy1IKlgGWd67+V{5$)9l6y-|i403O_zRuuKim zCv-YTy;7~r{^0{#8E%<-cALCideF?O*0i}2eYJqv1MZacpY9##Fn5#zBIY;eFphF3 zIp{%?7|lfMHV64&S`BCT{5Z|Nx#%)kbRNsCxHt%T1@G}_&mIK(-X7-fKN%%RLUz>m znc`;PQAS?dHx=-tb%Z!;`=buzsQq0}z{Oay=ynwC7!SFZE&@)gEIjerv@5#1s64Qv-xn*3b3UeVr`Fu z{4hh@0iG=^8FcsL$PN@TFTkns(!2i!q5gA$#Rh!iF;2ekBi}#pUI1B&h6s=OK zRv&_*A8__RMDIUCUj|N!tYj}gKK1^I1q>`3th{}waya;_tR0C#jxGki>;$Cp9T>Lm2@^3!B zw-Js*vQ4|uvc`+oD7DZ@y+KzDrF+GsXZ@FI#QMmniCUSBDkEWP%|7_;KT{Q$K(XPX z^=YzX{GNKkso(Tu@-^BTi}1qA3X3QD;Ysy8tv+aAZ^HlMtB3jJKPV4cz>gFgw}H>q z#UhHd8Pso4H?S^N$a{&8!kvNQw7<4KeeAc)CLrgk;H=fR)X@_?@Y6e#IyOk^B$n7? z&?+A7@TH(-SWlTi*~0aquv^1c9gn}{=KD)r_erd2$oA)beuvKVhhOXfwZV;PwrSVd z#tiD!NYLfH%kfex(^IA6`>ZXJmd;V>AF+@YLeZrC-K1ro&wb+f(B)`3=2SDqy3vm2 z*Z1Q1O%@1dU!hQFJU7LD&@W*Jje{%K=yk|%wxU1XynGFRsBc`8MD**tTh@I&C6m-Q ztNI&oO8w@K7f7$|x)FN%B3}rY_1t$1dDOzzEIHV9EI4nq+z6%{ETYmb*C^yB7*E8P z=p1CAD%p0Yv&=Lq*L#8G!fy}l8SZaoJvPb;h;Xr|)Tj1&L3zn`2_l>JN$@0>wFf7O zaFyi#@6^H3Ux|+s-qYcSk+Z_D_UKrzx5g#vkA!SQ$RV2vYLaV*kj};%WO#fVAMILAT@9AP48w_RkCr};VVSkgUpy0>w|Z{C z^UW(0zDp2qwNI6V{Wkt-d?TBKukebl+~7Mq>y^#NGYb`^i_i5})2HSG5*b#%F+ov! znRC9CXID1$ULugZvy5_G;h6Hgdg2y?*;N>(!~%4fGRqvo2ARS$|M)$0_}76>{rj z!o(0uR}qf-{G;aL2M3kpFP>OxU*A#QrO}xyU0+m6k5%g;dy^kz&DrzT#2wU~E_svp zi5z~y3M*7dVog`RudPqT>rc~jk<(2M79p@ndhX%WNA~Nh+z=_l`O6`__hkmTiajzy zX|e^YbpNZlw+ySQ>-xTxZlpILt)xhabW4b&bTeqtO9<89v`P}U1>*qH69k@ma&vLuo{M3Fk)qS(Y%(p$77?JaZ z+d6x?nC}29ic|pmHE)yN5|=yfJ4aVa7XJ~iOHu4<5&k;(tNkuZ-siB6F`N$y!D;gg z1;SII?{YT9B+Kr2eLTT2DbusseFuUeE@v(2bbR@5S+9JY_uHd*G6eTEC2J(&>FFmN zJFM>gSD#^$%^oN!VQM=_5^@d8jG$+Ih*yf7tErFmJt3wi>$lICO?TRw?S6PWA@S>G z&IfC!SZCvxA6c+Kyxt3sR51dK=kK*1$X_|ep5|ruv-RQkFl^?@x5;_cQvG-rfzMMQ zai7-1)Q+=1zrqnDVPoTe)0QB8T(Ug{LUA|lX$!NTP8O73Kco4Qq|A`OVaPjww84dJ zCUA_9q$ER?{dJp9%0@toj^>vnBUxQ%0Jg997tmk zTrA%gb@rNU19Y0Cn9buzRwL)*UGC%El8)mjBKxleZW-SD7M_I{`5sKsWQxVVR}v93 z-{*QAPr#pLD$I|_K(rA-2e@o|QSaDQ5O%O(`O{S6+;k&R>6*W~{1Kqyn!eU0Fo@@>stO zcd#)KM5zqslNqL6_GFCP9!dyakk(RJ?<`H*8tl-IvVbBGrM;5D=cT4~joWp<^ZyPUc7Bv}7hb>$y7Lj{CmPv9OLw$%*q zs;o9FM=WRa4*KgJxJ9=k>0U8~s?ske=P)qktEeY!f7BpS;pM`_GAb1rz&@^|7g(f! z*hp;5go;8dHMDv@(}mD}z8iPUGtP~8g`cZ^K%l5~UPn*kgjkn%>5(EESIp~>TMx2V5^9drJz*zhPUzy*Wv$N7KaW?~Kw6@Z& zfB#}ylYRR5#mdXGU{}#`V!4slhN`Wo3%}H>#H z9=*EJHBAg-uXERRRHZ-L_?4Ic)$g>6spc@X9ax@o5{#Tc24=ku2RFB~^Sh8mt(#D| znMO8#>zk!%&rFSTgplWa_^OTeR!ar$IIt=n{91Lh)i){U{w`wYB-})Tyob*ATO0(dVF_|$EoUf_kE!#r41+|=7c{1{qld{M_i8pAedgu?HXDGtM%YzKkTZP-Wa=@ zcf8DT$d`J_u2TX-Wi*&lvpnZs{5*8~iIK}lFUfgkGrG>e*m7zRk*7zssJ6&$BZKu0 z&4V--tiRCcBz!ZG2W{1*sJpoH;^C{RrG_>hKI`MSCzmM&L7Md)0S`Y0Tu7KCBD6Na zHXd?2ck|6{%{8oeo#i|AVDg9JJAFT{aeF_v{W(q>>xHj9o_h2;^Q?+dsAC;w59wd? zR$v|TkI{{@q%0Qfm=FI9ov@=uvQWAAM%wJ$E0I91=UZ;P1;)s7M#&(o9A6L649{z| zu44}paul!xT&con$ZEHl6|xYdH3*vP>b1vloMh$q<%V3@*w?wY;Wfpt&4pqvT{QSm zkAz}7POvNw!uy_QXBAM$2Bo-nU7#NjEYL)9MRME_QZFshFFg0JB{gbw^-k|$Qqa+4w{{k!dsoZ*(D3QIyN(UI2NLnw)i=@jGrIwv z?@k@pua}997Kq1aE=9D7erg|BIBzrzxCUPjruN_Rns~d#cD)G8L=vnzB>fA z!HVnma(0rNtANMsh}uLOffTCU7Qttbnzqzc-?=Z^7DnTIszcl$d|y)-JmW}ZB!l3W zPNAbYt$1;%r;S9Nn^uL|P~593xu~L4ty>ZG+N^!;u8-)mi%AUmm>i$D+x@s;qh^Wd zMfoPraGhbOdy{}=re=W@gnZi|#pCEedK~98l88=_sa``Ly(^=pcpJV+))&1_Is>sm zMI|T6?u>CH6ebkWBaSIsiSc#AxP*+-_-A-W#_=oILi(O|B|5%S>mXA0(~QB*)Lu2DBSW2RcBew<6MiV6>f_^dPB)P*=v1?Z7N)BL*9fa&Uek( zn&Ga_xP{^o$JY*S9ZR`I_Fo7EdHc`yZg84jQ1v2>Tv`-waFaC?9E=#4j1TjLm2qT5 z!pHdD<~X+v_!vfD+zx(BfAwdJF&E!KkU#%z`F^gIPJZMDf1idBKQO~_V zgK_(fbiA14vC7Y}-*4400&g@hxYWT_LbPO&CqrcYUS$5mgC~)EQk`iiT0=#YLRN1M z7a~)Vjt(N5g|sBedX-eHNu39a$I}Ch``#SZ+s+)Lj}1;w=NUp>+mQBr&0g%HvVZ&< zt~Hhm5pCvJ8L->wF6p34H%FR0e2~ga%_g#;RVS}flv^*1C!*_+Xu(M|+X^Ss6zAN` z-EqN4)SMx_XW2efpPaERcE$%A387dao8y00k@Aad;y(_|mWW$k*?6Kg{PNuo@5-U? zU4S+7fv1YOi40)PIH*=SmdcKE{z7_&F%nun_d6?ZP-n0E%&N%Qqxi->Nvb|QSaUe- z2PxJ&tx#6I#!UAURH1ZNUAX<#{5T0Mc5L6{AS|n(jDi_AIUVt-oFSe`MyhcurOd<_ckZEujvMMe2(mdk)jyf06K|@_Qr__j&$ zo~Dz#7ZIHm(&H(iuSR5%=28-`z?|j;ipt9T6yX<0k9;;O^+fxZ{`6|LlC=HZHT=0vpV-GMcD>;j+z)`Zo8) zs87da>u4l6n{*MV8fnl)a}Q2GTf4@O)ZAnIJ)PA;tKCT+o^Pg4M$(Qxw+5Z&*AA6O z9OoTav`R<3Z?nu@c| z8^>ytM7DjQX0%Z5enGL7ABoJ1$ZFloy_FZKSzLo*--rKGt@lL_(xu3I{zW4{C&32S zoalM`OrpsM=iZDlq}#Uka+UnCMPJE0{#lpH9Gg7it;&xV<*YhxN>LVHoTp*diM_;l z;Wm1xq5^OrH&G9{7g<%TLwRm18k^??((Wxxy?3N;T`uDzCHO@66nZufAL^@YjXt7z&jz4qPg$Bgis>MY) z*5ZtT8KTw5XvB}?oJ_7Gt;2Ltk^duarLAG_=A*OEaDHeK^xKwn$DFT&$t#%jY`BU?SAd`? zosWbqn4R`9qAFQUZP7S?nZM}g;{P;H3_s)|$ls8Ayg2{+Tx0OrTOz7x24c(Imj!Yxghw}FZ4{Ra=MeT>O>8P}};ThzS5Z5u@u0_ezi^r7D zGq%qq2t+lUxhZoIXCJ407f+vIaL*Bm%=B+$x9(LpO(7D7WL~;%J5Sr_<1p^x3`+)U zzEwe21!pW?#@&i@-5du}3%$K^`nh<4ZfPNOwa)`BbS)sN*Dkd_(XMI!XdFhZz$CUa z$>1u*oK(DE6j{MSzk6o(#`1gK!EaSDCf@e7CPH?bWEWqJ3d5(d8NIn!yR%1`aSU%R z+UF_+#(4ZoiSmT%oF|3GjWS9bSMLnt zc08PCsoxb!*b&V}-XEMZ%wUgx0v5e{m0+`T#gmM@CRX*NKXTGVmhvw@h5R@&amRYQ zA?)U)hGR!JZuREMsMlXZPdi(zhouUM%C6E}g-QZ)$F=S=E>v)U-TKbGb!G{EoKXM! zq)Yq)H1rZpCH?wtT(ef*ECVTB78hFr0mfAQhlUChSB?iD*8w!`Q?pvDz%1Awp5)Y9gcr&@AIV^tiFU!mmJqlMD(Fg z>Rg-;M?&6SV~S_*M5uGHzGaWmPS()$&z*|y=qMSo5y(k}F=*>HRl1XZ`jy#Tf<6qJ3wfGoi zi?=ma9w}YjyKpPJTXNb9VBN-}7Bei#X(==Nk%yJh^M*V9>~kw~6U1#V=X~@lbd#%B zYCT-$WjRz?V0@{vV+<>6&^CG2a==Dud`T;Z8-W~RQ>zerjwY8CmxVTFTpejDnAyMpB8Rdz;DP;9AjWG$iD7ZQ|dk=}yd56tuya9N4z z2j&c`V|ABg?D{85heoXGu}X=lVy5+QdOC&2t+bKamLTA#z~BEZ5ZNk_sHNR;j8C7- z-d=J>s<9pT7F=>a^?FT14T*p5^U565i{EO?UIbPD>$Sr$kTSy*Hv{ha=0Jh}cT3I&~=FjMi|C z=vQ8Pn^;8NjMY8mv0X#o&^bN%6Wm4X8SCL`ozk2(Ir8D^!WpBVU$^$;x_kXNN8O_H z4Y_3gxXR(68xK`SKYV_t&_BK{$Ad^z*{1~#-XVN;WEDG>_1Q)a<1Gg_b%gDW>-6BhSoe{(`#l`m-5p z^&1tcK=&QmenwB>qahND_4gHC6QgGAZQ+hi3=pK*7@FA2YLB}Of?HpDGIwsV6=?L~ zuG~gmr5eSY&vLJQWR%Cgf(AG81w$3*Jj0f% zZ8LBz4#Igx*MfeNxFRu9!#S~V@VkYMO1T}l^%AQ>f^r8 zXqT8mwdt62tOIK@J;o(Jmr9K@S+=~}Q0XjG?u%E(tXil-o&_h=PGXU!xyZJ)g6>tZEl)3|4$PW>CCprVX9^*a}%U)ne~BCQoui z4o7EyXpO<+M*fJn6?@_II&#*-G1oxc6GS6$;YuUDuzKndxK@h34l9JBT)#Z?d;>aw zT|7?9-3K#DMrY`6Z$zQC3yTW+aafO6Kdp)_@W-C@W>b&y-A=MrBwf58g}?NazD+k9 zIEWtmmYi{Y{$te*t_ zOvu-l`Ug*^6#Q`nP|}benmk@%m#JY9rG3&B3~IQ8Ia?OF)(t$3pTSu%8dv@5^ZAJ> z;&w9VBXin0{n*+hWgjFLL_dM8^tM zbBfzx8o}M@xTbAz=xQUvH3U&bK@}V;U?Ar|SkReq_N(z|`XCd#P3QS)wOEsbA5mDm zD#RNM{*0ecU5&3ibE;w7iw6X-@qitPwv!|iuUC>vnapPNoi1Sc4O}S z6`ew7;gzVCqrZB^Hi6OG&7@+(IbCcHWl9&(SghEAIo(F+O;upi$FJI)4;lJv8&<8& z{4ceszsKFU;{6CKbr1BgxXrh|L-8y<#T{hGL71E#T|I zx43ZXj7Kxmc`qflH*!Hpd{P?y2OdO3qPrQ2xR7UB0z49<)LwFLGLIOvb~?hMMnR6^ zby9n~oRzXz@<>f1X+ZC@5zmgCo@{TQ9~jY;9jfo**fnMU@kT1j1_k*AvF9rz%5}$k z-(R9{V}0d=P>OG<{-`l#I(r>HwZC}M#%M0HcSTU`P_>Px^~=q3%-t;@4M)ugFH#Gi;?v5GPRI6`rq#tM^XL@Y zoxtMcXw{DLc;WSYQmox}f&#}6+#Z4P1! zLUZWfJPv|x&}xk2RBTOl7wv-)+%u6l!r4ICD)LQ2$xa)sghJ3>7^J&(ta z3XI*FtSZ;IuKir{o1fu_!SH6y__^b^n;r~>2LiPQZQS<`4b2}M8fZ(Ut*0gCoO*6H zXAWq3?q67RVYeDNrKlD+A1H5G;e;Oq^6HL67u*)TuzfIa8=7OsxpK3!zjIU`U;O5} zh$z~)xtsUymXoLaF88zBXNej{15=y?1?8FR$+gSUZ{g0L`|`5RbrvcXq4yi}j;0nT zhA(LR;7Ms(ny^}iinOPA>S#y;Ab(W+cb&x34)(%H&TFMKjpL7bq(WM5<6oD|eyF=I zJx;W>aOyglaUZeOP-Hmf;G@;KtxX@`S~_@E*L6o<`dj`GfZrUy?RAialpLa8k$X(i zFdXuhFwycBSbkZfh?My$Ug@RfD6V1mVeP>7{sB7cesIMj(!H3Iv?*GQcdkV>7rw|? z`D2g6-s1G&s3W{k_kn2y|B6<>;O;H9@V97O5kHsSeZw-!rfl;8k`I4ej57`>!W)Z2 zf(9x`2(LW0@3UVxH|e_x&|+#p^mfd^8Bsm1(Z!ebX)U+knSX|~P1j%e^vypkV4Q?n zo!rksPG7@7Jq7tm{f0pXbv<)*#-OKC!CknALxIx~B5f6FUHk6$f=_q>w4ZpG_iqf6)3Y(tqLV@l`U%g*nf8cuVwRhHo8_Dt}&y>V5ia#TU-3{+OyyR~Oj)O0lSZ z%*XtAS##vlNk6yHEy)mQQU9B|kqMFNL2eq3Jc$N#ftSJ4I!;l-xj*10IdPFgIq7H+ z?gS3|3M0u>!@c-@k|Tl(<)mZ=2E)Vvsrw?oN()`C-rl7Q@LCKB8l4uS-Zd%cO-hsp zHHkRA_O7dZIm6Fz7K2I3Al&5Tal*ReZ<1W1+iv&CwIjjdR*Osb!Ee3q&BNe`0t45ahtqGqzod@^}c9gLP)NI${SLwXHT)Z zz2Odb(SyuM7T&I8uIQy;Ki+)iS^xeCEEV*_FK9%p@k;CbB7tj-8m5LGk&44}Tvb#M?j89&^5Jf>fT+XqijbT64D%ihV+4_Y%sx=) zc>HP!JQ!BykLxm@oxU$`{qZQz?w_ar=X?L>t67;xcHBQ#{?8x(-=ATMpz1#Y zRT97dt3YS0Fwb!93ym_o|NZ-aS}+3}+*YjL*8Fd2pxBY`U(te2YZv1RADiw!*NZ4{ zJ7Yy@^WOz(!x`#kOx{hHKQ`=tF7jM(`vqPxH^ILOJf#GU)v#Y>%rfaFE{gk%gMdJAoMVW4_L@i#xIK7=WzfK^kx@VE1(h0+8W>uTNoFBmLc`nmn4I*IU`rQS?euAfLD`&yco_Jaqsh z(6dE$T_4VTE><%D*y{ZNCDHZ2dylCwc_trZpY(Pa(}NjcM@wpM_Uj6N+)f#UCWdpg zokc4gfaJXDvm(QZMZgG=@`Qo!zr8v^@4cDE4=P=}+jqb6w6zkb%$Pi%ReoFhe+AN=7mRK*<}B5zGS4zL)3;Fg2Y1P^ zTo^|PvUYN{8)`pWx?i@D#esA4qy4dLT@$Iv00|++hv|bMoya{7Qr+8$o`AG87TN*P z@AwsNyob%O6DQ0dsRd*L5ZP^IM#q8D;sGFhgcsywXUU}spSuDqZTjRFL26)I462dPMG{PtUTvL$W@$}T@yeJE6DnynXDF(@6@WTQy-bsgsg_& z(07DdUWPXJ019}4%`hN*j{?|1ncIy6n{hwHapo}-X`=cMASToRr0)Qbry9VK<;CI) z{c-yzJv0tbNz_H2u9FxMJu*~k0P6rSv zukOCfEm;pUZu@ORZIB_)=D5#OiLu!;Y0U*0iwE*WiI{$hp`?72_M35pY{u_yPBHm! z4@FLHPln<_y2un7@!S5S>yzY%=jf?v0@~l|CaP^#rGQRddJ=lQOu$CaRLH5w-_w-} zb~hd=n(%jk6aU12e`!!B9Ez9zbihgxWLM-$zRIH&^g*pYB^3H((^~Z z)|vrC@|G|sY0I{ij_(6N6iC`1gT(xdsfkxl+x6(>PO7ywT0MEw-JX>+U_YBD0!qw` zBQN#QF%dH@^Q%vbm0B9{3SQ!#EHCIaIiwQgy;au!45x1Z0!NTD-dl?qTs>wcee*9E zpUwD$f&N_iY8nh_Y@tS#-vr3YSFsrU(Byu%3k~84;+$ze?hK=`n>LD`zIKv!KZ##d zEgl6(4q|6?yuTNpHFTJo*5+o^ub#i`Hf2UZ;$O~%F5oVozkXvr#q7+HqmnL$UiNvi z=o2C03r?O~kO9t@(eS~L`ZgfS8P14=!l#=M0zn?EE}_A>YiLZ2Ds=hr*4WldM0Q}?8o&5^vf2`Vtiyg~ z$+iGEtjG>BYU4jIVb^e&Pd!6Nr_7Cejv8s9(~V^Xu0^Vnp}|B#8UHdT^jyg$}00PTG3 zXUX@U@BSJ~f^e=dbbBq`Cif9?d-d>W&xha;U^GgP%@G~gTb*J!ZPM6Z$(7UDY2=I` z_$FoS0(Q*NFcATjSkN~=9QovX5YpAx8KWSKoljdqUO;wGp?sgfs5hP2i@bn}Mj#N` zm$(D?73>Hy37mR-gllhnUK;ohES|O0t$Hon1Iezqqt!0rq=9807Iv$JIk%vRP<$uE zBBo+m_2i>cSll@%g%kUf68%q~GlKl0-oICiV+>E%@TdnX^$N479g}yT#=uHkxI+Ay z)rnBz&1>ZX)lYcWOFfG|AFjACQlpv}U*HD5b$U1WF4vext7!9BctwjL+^!#U2pQpP za(kl0Z2z_{((+UNf`AQc!-?#{zu)5;2@IHIIUd^y#VnfPSur|hW8LHi6@vA(6oD=q2(lyTCsNK^8a1sMuA7ecJ-z$gW>P52iDUIVPG~= zMk(#s?rvL^bc58;@-(4Gg4tNGkL8O=C|6{m5T8IB!65oK)=fj-)<6oB9H$lor z^G^7^{eLaKe@s8@NBfRKD(}U=%sa|3Bu`Bf-9zSjFo(ICSlVq4vhPe5SFMA| zxv9rx#qQ7VR5VW2nl1*pB26xhkd^5aA#XJM%in<5?R~V2iXaHAGwFQg!rK*dvdLnd z#YbVj;mO~rBItp8M$uZvoY830Akq3y{d|Sf_9cnq+%muM4#|R3a8d1cp81(wRxk^i z$xxD;*ucf^v;mli9KZ|GxGx8Mx!kpFL>_vcQ}{t2a)8Ivke~ z`VI6poM^)Zqc`b;_Ui{q1!6l{9Dw-q}D;WVo~hw(}m?vhiR6k2&9)70++4BkdepZu1`iDSws?48ACMrK>`E zfPUp@0R^j&G-%3nZB(>;pgu9_?1ZF6uaFgFp^&FY=Q04iK@FKl8!I`KgvWRRx=B*z zc%Z#=v^8CpO(&n`!zUg?xIh|dgI48-PE2&k)l&Txeo`=}&U#tc?)K6qf=P#8;g`NB zo717L%6xwU*Qo31u=u$hFjS=hP(XTXBy(@GxbeC-1PaJ&=WOdBgFMJN)wn-KZ+oKf zGeCM790=trZvwMpf~Zpfm^(ZV%xznHRg0CAFEkl}rlZ3x0B|usTy_bV=RCK#;sx25 zF7wcnjo8c&(dy|bx-DK45}ca}cDr1S3_7kyzAfKofyMlo(u|&8w^uof<`<9C*?q|b z6g@;d%2)Z{|94c8Yay)>!GeUsj&g^>nJht180B#L-lito17hNq_-`xzY41s44hp_5 zI`0%J3%%pg22Vg zWd%NAy>t!+c6f(6s{B22KpnT0IBA!Cu)h3Fevcg`nmgA ztB)QVP{wdk+c=F#zHKKZ%~gQTaS#36Jr8<8+SpvKVr+01!|%Si`l^-5}t|M6@sP`H#m<&zOT!G7H`Uo&+J;Q0!f>% zwP(|)G-pxKh8mRg#N~2W>Ma|ujCaOqftsR{A24^#h7kF9 zitCR9AJJrwp4p?H@(3AA59sm1)Kh)dt5j(YGHjk{Z=mX#`TV4?gkL122=eAnv?hfH z$*4bhf?e_cosgmtsc7OM1uuVzhy)A`8H`mpn*_5a$J<62R-{lZ46fV zd6-mG*@B7zB4dn*AfZ^TEXz#~i91!+L{rW$)gNoq$HlLz8|ryzd%38fB75-H>=KQf zQST`v@f#o-bffrMr2*~Dv`vGVJ1k{omzY?Oqv(AE_1k;Wm-sKSV+A}KmGDssUMHj? zqp;;K7Npoc=N*E`of;tb(&aw@QGx*ap|OEo=YHf>1X&-P`qwhcjz&%h36!CFzAD~F z*IuQemq{cc$R|QqqQ5pe%mf%NkVwNpPJdfH&?Q1hrVAP(5(MWTqwq(m}-PQPYE32{dT^ z1VzX+G^bmrXN2i&!Ypr@xf67s!Jqifas6eZ32MI#J4Qf|O;(rseNtE!@Ht{^Ry&QRsHX_I+%+CJcX>OX+kFwHRaN$V_Nq0C+3Ef` zy6IgN3C#xgJSJ};DM@L5_vlzI+2^(*!(n==dbor|ExW|WNu2wnc?6+;sRJDaa@ z;~C!%ws&HZ@$=^Gvb~FRjO1=tNpLf0OG3NyOp__CV50RDTL00mpKXmpD#}{Iv}RZh zr`wdU3Z{W6B|AVT9!oKF;Pa3vV)Tn5OY>#j5q4)TV16r6a1M|84y-KZSO`eS%Sd_( zk5)4gO(pXothcvoFrZNmQFpGQAHu^v=}0tmqKO17LoRHXGb%Rc(?3!Xi>4|K>h|&J zo&?Pojn+(Tvle|S_wx|111B{kSt?VKgTND?ON$yZAGz@8WfvBSCCB%>E$;Isy!bxx z%b8#goH$~Rt*R_Gzu57=j!5?o+{YPjp<||+r-KnomI#4wIuTd=-}%yQ6a~A`oG+?S z(uudcz-&eqL-+Hv60DY^z*RUFl4!=5MIq=&_SuZLtfi}kjoO)PFnN6Ba*BS0^;r(( zn0$q1`A#)oM{SasXMXS;(NAQM!W10j<5Y^Zr7LoDGk%LR*CTiEehM4@)_Ax=UP6)4 zhkUZS?m|9Sv&7>^QiHF9PKWVcQ5jQ-hUg|9ZD!g1yenQ|!p=qeCLrw=B#O z7-BW2cqX_CRgwqW2#fNsrjN&>0n2N8+#*t0c|y#dfisi#eV3)q@BvqfC8rEddve2$pKAis971NrUU zM5BGo90XT-Hv40*X{UU+e%aw0=!%jV5mV&@w2dXo@I@T^=P9jdT@l)Gwjo{vm4n0; z+15AO&v4I}^)zLs27i*2CJcMGcwMwZqY_$Hw(A@_rT*Zgg43>b*35%tRJe8gdWOTK zLteA&D6p{JdjM*eZ_&mk8AFxy&7ah{dqJa9nlRNY78wo6-;Rr~h(GDoThy@sgh9Uv za$|K9$Okp{Z29-ED}SYpGN<`q?k1;-Zo)wusiwn)G11q%=``6VDd4Wvn#_#Ry0J95 z3ZV*y>P23j(XHa0KEK*yX-D#=>}n@u@-YpU#VSr*6hGt)-!aZaN5JNVgp#?hU+dln zO%6RxMZe&Rv09$-X=nmr6|D4(6m(3xP2|Q^JhmY81-6Wt#)61 zpHG{3qk|8X?e(W2Rnr4hi&A~frM;FD+n$#XP--MMy^MMw-#wwQeo<)f-!UP92t!9q z8HI6Zck}$cwag12+NvQo^IHhM`TB=T!Wv4a;DoR~+j;xRX%ok4*1spp+DDh;wIet3 zNqaobPyZi2A2Kzg`x6n#e|#dF)BEm1WDwBY&8E09ps9T zPeLH8U7;L6ce(ZvLIYh1py`LjJ4B0zYfTzgpS&l;qh7zGGVwY8U8EPu&5#>mA`yF@*X%_ zUr(FeDV7_!J+R)y0g7fz5QL@mbbo&KQRa^;(0^xbD0vb0wI-*=-SLyklq!8djO99( z;|_{W`KVPUCN1*7MMoo>^yblFQ_-?ll5vQa)2W(w&=8h|JD4m^z5;P;w2QwzFUl|? zINJ_8W+0UH2`JXbda8n$aKW(9G9YK7C#wJ(05G3T<2bA=XUa_t@P+^zunQ=AO-9ly z^`7odj{3}F^mS`Cez8Blak$*J0fK3MJ2?B}fa`}gq&QU%Ed%I`?};D4 zPiYXolj`~LasaHd1tUWW8QCE2K*V8bKCAcp%l;e}wwqnKTo$z z9D4z*`L{Mf)?qam{{MI?qh(CMEB(?^Ywz0ru`nhm1-F9uIiO7Iz!`-$*rvuW35lj1 zXiPz|V1r?ZpKA^i@lhJ_G|t_F8~=Y}9bl|qx+ATjz#0IzFbgbh2$}Z4BUGlKfkTET zfhV?l638v9Y;05q_>pg2^JJ6x9nMHI$$V$&j-0rDzEaZ%B^u*R0ETreKwqh?&(n?j z=yaG31-bdlh-U8vh(oH%O3@4Fis#yA>IfUBbpa-kN zHfv3Kblog<9`rKRtYLeLztCxPtt45%49Wqa>3B-fK-EyhBrG6<&O0|+bd&;i722G6 z4uyaFCkuwqARD}(g{S~{d$~c!2QPm(re~945UT#aq6OqIxkBXYA{nX!{Px?C(z^(R zoiM%J2(VsW!ScfZ34Jpi^{ed}N`Znti?EzmIB?fvK_H&9c3YNk^T;90Ln!%ZW|fQl z3rZ+b=T}s!G_slNWp3KDH8$OL>;6CiQcNAr1Aoh!L%Plqz*grm**4HrDo`D^GQ)E) zsb9i_I1MzTZ629dCt!E_3GZLDI33o*!HXb>G!qDCB>bj9fD;SE+4%OAzE{wHYY~-84>x3j>*YiTuoa|{0c>iZJ`G5L==Rve! zFEPXkRW7B+2nlBp$NvCTPtXZLbK&WxoTZwO_~AD+2y-)O9ocSw`!??nH5c4HAm%!| z#Nq@(3WXOi#c-0ZJ3WiPq>u4n!geK`;OXJIb_N`YaE>kBpL6Wgkkj}~0z#vq${`^^ z4as0zs|lQM(sK;uBl(5TlX(_>^O(nP4=c$_T5pz7^`tdvqzk>I#SG2Pl-> zozPzSJb@Q+%~=%=clC|375;+MA+%Cag-0pCjMVMhTum_v3rod@>CN_2ldS#*S%+?`tMSYr3aa@jw1rwkgd_;{)J-Uz z;=1jQd~24%n@2ra-Yr73@>Po8J`$*O#z_t41cysPK0(YIhtCs36#sVz{L#0t zon7W4w|CCdAOMUG%5}4iGv1b=V**_>V$n&h2PqOO4n&X%_!JiVc z-F_ywt%Vff(a!}3pNt3fnR^ypJ!pRqlqfZf=AbA@cqc0RZU;yRn9I7fM@W8Sz@Ifd zA(H!T@M|T`#}yu)>g!Yd_gf67tk*#gKD)!;E_8tBcg7f8)mz z9l20~R%sZsGKA`oJd}bKOuZ!mGpC-`WKLHrXk<1HHczEp) zVE*OJ)krYu+X}u#2!`mBe$cOQT-URZ{|Y^t3uME(rk?Zvox$kjuCZwt>2P{afRI!f* zjf#Kypp;?HVR-Er!Ms$;X0N=#0^`*Q@AeVjnEZ0``}jiCjr}}}UrQ_z!Ku*VuOQUH zRhEG49Jbc3af6Yq1uAQ->H5~Jw zmK#YFOu`74yok@g`d7HVc^aG|SvAL*Jp0eDK7Js_!~uq?zg1Bd^?!XcFi1?|fuUL^ ztvQMF*V^^WlUE9a{7D;Y;^O`reFkQ2f(5XG2jALg$^O-21>ugF!8r=(<%XHre_Z;1 z#$P2cv^i(n?fL#?1$VcBi2vGhe17h~jOPEZDo!q7rva=d(xkNi=TRxGE0JymY@s$R U2JhZ^JpupTi^{w!64v$lKP(7Sl>h($ literal 0 HcmV?d00001 diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md b/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md new file mode 100644 index 0000000000..3c1ef52220 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md @@ -0,0 +1,44 @@ +--- +title: Overview +--- + + +So let's assume you have at least one _custom_ Page Builder content type rendering content on your Magento storefront. But now you want that content to show up in your PWA app as well. What do you do? Short answer: You create a custom PWA Page Builder component (also know as a "content type component"). The long answer is described in this series of topics. + +![Overview of steps](OverviewSteps.svg) + +These topics show you how to create the code that retrieves data (content and styling properties) from your content type (the configAggregator) and assigns it to the equivalent properties in your in component. + + +## Prerequisites + +Before you start creating your custom content type component in PWA Studio: + +- Your Magento instance should have a custom content type added and saved to the **home** page in the Admin. Currently, the `home` page is the only page you can render Page Builder content within PWA Studio. +- Your Magento instance should render this content type on the home page of your storefront. + +{: .bs-callout .bs-callout-info} +We assume you already have the PWA Studio setup and running in your development environment. If you do not, make it so! + +## Using the Quote content type + +To help explain the process of building a custom Page Builder component, we continually refer to a component called `ExampleQuote`. We built this component as the PWA counterpart to the example Quote content type found on the [GitHub pagebuilder-examples repo]. + +If you want to follow along with these topics more closely, [download and install the PageBuilderQuote module] in your Magento instance and use it to fulfill the prerequisites previously mentioned. + +## Home page in Admin + +The first prerequisite is to add and save your custom content type to the `home` page in Admin. Here we see the Quote content type saved to the Home page in the Admin: + +![PageBuilderQuote in Admin](PageBuilderQuoteAdmin.png) + +## Home page on Storefront + +The second prerequisite is to ensure that your custom content type rendering successfully in the storefront of your Magento instance. Here we see the Quote content type rendered on the Home page of a Luma storefront: + +![PageBuilderQuote on Storefront](PageBuilderQuoteStorefront.png) + +[download and install the PageBuilderQuote module]: https://github.com/magento-devdocs/pagebuilder-examples/tree/master/Example/PageBuilderQuote +[GitHub pagebuilder-examples repo]: https://github.com/magento-devdocs/pagebuilder-examples/tree/master/Example/PageBuilderQuote + +After you have met these prerequisites, you are ready to begin creating your custom Page Builder component in the PWA Studio. diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/PageBuilderConfigFile.png b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/PageBuilderConfigFile.png new file mode 100644 index 0000000000000000000000000000000000000000..bb729716719aadfb77a0cded8ae3a22f899d61d4 GIT binary patch literal 13807 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 component rendered using starter code \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md new file mode 100644 index 0000000000..d4dfb624a5 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md @@ -0,0 +1,106 @@ +--- +title: Set up component +--- + +The first thing you need to do within PWA Studio is create the directory and skeleton files needed for your component, as follows: + +- **configAggregator.js** (required) - Function you will implement to retrieve content and styling properties from your content type's master format HTML. +- **myComponent.js** (required) - React component you will implement by populating properties that correspond to the original Page Builder content type. For our ExampleQuote, we use `exampleQuote.js`. +- **myComponent.css** (optional but usually needed) - CSS styles that provide the addition styles needed to present your component as desired. For our ExampleQuote, we use `exampleQuote.css`. +- **index.js** (required) - Entry file needed to identify your component in PWA Studio. + +## Component location + +Currently, you need to add your content type's component, like `ExampleQuote`, to the `ContentTypes` directory, where the native Page Builder components are kept. This will change when we implement different rules for extending Page Builder components. But for now, add your custom content type components as shown here: + +![Component file structure](PageBuilderFilesSetup.png) + +## Component starter code + +The purpose of the starter code is simply getting the component files in place so that your component is actively participating in the Page Builder component framework. After this is set up, you can focus all your energy on developing each file to create a fully functioning content type component. + +### configAggregator.js + +```js +export default (node, props) => { + return { + // Retrieve properties from node here + }; +}; +``` + +### exampleQuote.css + +```css +/* class for testing setup */ +.component-text { + line-height: 1.4em; + font-size: 1em; + color: #0066cc; +} +``` + +### exampleQuote.js + +```jsx +import React from 'react'; + +// Component for testing setup +const ExampleQuote = props => { + return ( +

+
Content Type: {props.contentType}
+
Appearance: {props.appearance}
+
+ ); +}; + +export default ExampleQuote; +``` + +### index.js + +```js +export { default } from './exampleQuote'; +``` + +## Component configuration + +Now it is time to connect your component files into the Page Builder component framework. The framework provides a static config object (in `config.js`) that acts as a kind of registry of content types supported within PWA Studio. To include support for your custom content type component, you'll need to add an entry to the `config.js`: + +![Component config file](PageBuilderConfigFile.png) + +Open the config.js file and `import` your configAggregator. For our ExampleQuote: + +```js +import exampleQuoteConfigAggregator from './ContentTypes/ExampleQuote/configAggregator'; +``` + +Add an entry that references your `configAggregator` and `component`, using the name of your content type as the `key`. For our `ExampleQuote`, the name of the Page Builder Quote content type is `example_quote`, so the entry for our Quote component (`ExampleQuote`) in the config file should look like this: + +```js +example_quote: { + configAggregator: exampleQuoteConfigAggregator, + component: React.lazy(() => import('./ContentTypes/ExampleQuote')) +}, +``` + +### A note about lazy loading components + +When building PWAs, performance is key. That's why we recommend loading less critical components using `React.lazy`. This will result in a very slight delay in that content rendering but will ensure we don't bloat the bundle size for the store. + +By default, we apply `React.lazy` to the following content types: Banner, Slider, Slide Item, Tab, Tab Item, Button, Button Item, Block, Products, HTML, and Divider. + +To have your component loaded lazily you simply have to wrap your `component` reference in a call to `React.lazy` as previously shown for the ExampleQuote component: + +```js +component: React.lazy(() => import('./ContentTypes/ExampleQuote')) +``` + +## Test the component setup + +After adding these files and hooking them up to the framework through the configuration file (config.js), your skeleton component should appear on the Venia home page, looking something like this: + +![ExampleQuote component rendered with starter code](SetupComponentTest.svg) + +Now you are ready to start developing your content type component. diff --git a/pwa-devdocs/src/pagebuilder/index.md b/pwa-devdocs/src/pagebuilder/index.md deleted file mode 100644 index d2fe976fa3..0000000000 --- a/pwa-devdocs/src/pagebuilder/index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Page Builder ---- - -Summary paragraph goes here. diff --git a/pwa-devdocs/src/pagebuilder/overview/LimitationsTextAlign.png b/pwa-devdocs/src/pagebuilder/overview/LimitationsTextAlign.png new file mode 100644 index 0000000000000000000000000000000000000000..9939cd38944709f01229031d84e4c5cd44086cfb GIT binary patch literal 6313 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 ICF_6wA8$2d=l}o! literal 0 HcmV?d00001 diff --git a/pwa-devdocs/src/pagebuilder/overview/PageBuilderIntegrationDetails.svg b/pwa-devdocs/src/pagebuilder/overview/PageBuilderIntegrationDetails.svg index 630b695b1a..0766bb457a 100644 --- a/pwa-devdocs/src/pagebuilder/overview/PageBuilderIntegrationDetails.svg +++ b/pwa-devdocs/src/pagebuilder/overview/PageBuilderIntegrationDetails.svg @@ -1 +1,319 @@ -NOYES47Uses configuration to return the content type’s equivalent React component.MagentoPWA app1Requests content (GraphQL) and returns CMS page or block HTML.CustomerPageBuilderContentTypeFactoryconfig aggregatorcontent type componentsparserIs it Page Builder content?{ }config9Returns Page Builder content to the PWA app (Venia).Returns object tree with properties.Passes master format.Passes object tree to factory.8Parse each content type from master format and use configuration to return properties from its configAggregator.for each content typeRenders and returns components with properties.356( )( )Developer2RichContent \ No newline at end of file + + + + PageBuilderIntegrationDetails + Created with Sketch. + + + + + + + + + + + + + + + + NO + + + + + YES + + + + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + + + + + + + 7 + + + + + Uses configuration to return + the content type’s equivalent + React component. + + + + + + Magento + + + + + + PWA app + + + + + + + + + + + + + + + + + 1 + + + + + Requests content (GraphQL) and returns CMS page or block HTML. + + + + + + + + + + Customer + + + + + + + PageBuilder + + + + + ContentTypeFactory + + + + config + aggregator + + + content type + components + + + + + + + + + + + + + + + + + + + + + + + + + ( ) + + + + + + parser + + + ( ) + + + + + Is it Page + Builder + content? + + + + + + + + { } + + + + + config + + + + + Returns + Page Builder + content to + the PWA + app (Venia). + + + Returns + object tree with + properties. + + + Passes + master + format. + + + Passes object + tree to factory. + + + + + + + + + + + + 8 + + + + Parse each content type from + master format and use + configuration to return properties + from its configAggregator. + + + for each content type + + + Renders and + returns components + with properties. + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + 6 + + + + + + + + + + Developer + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + 9 + + + + + RichContent + + + + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/overview/index.md b/pwa-devdocs/src/pagebuilder/overview/index.md index a202d4126b..7a492ae552 100644 --- a/pwa-devdocs/src/pagebuilder/overview/index.md +++ b/pwa-devdocs/src/pagebuilder/overview/index.md @@ -30,4 +30,16 @@ To get your custom Page Builder content type to rendered within a PWA app, you n 2. Create a configuration aggregator to retrieve the configuration properties from your Page Builder content type. 3. Add your React component and configuration aggregator to the configuration file (config.js). -These tasks are described in detail in the [Create content type components] topic +![Big Picture: Creating Page Builder PWA components](masterFormatToComponent.svg) + +These tasks are described in detail in the [Create content type components] topic. + +## Known limitations + +The following items are known limitations to implementing PWA components for Page Builder content types: + +- **Products content type** - The Alignment property as set within the Products content type form will always default to Left. Text alignment does not work within the PWA Studio gallery because the gallery is rendered with the CSS grid layout. + +- **Text content type** - Widgets are not supported within Text components in PWA Studio. + +- **Dynamic Block content type** - Not supported as a component in PWA Studio. diff --git a/pwa-devdocs/src/pagebuilder/overview/masterFormatToComponent.svg b/pwa-devdocs/src/pagebuilder/overview/masterFormatToComponent.svg new file mode 100644 index 0000000000..521b0d4f10 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/overview/masterFormatToComponent.svg @@ -0,0 +1,96 @@ + + + + MasterFormatToComponent + Created with Sketch. + + + + + + + + + + + + + + + + + React components + + + + + + + + + + + master format + + + + + Magento instance + + + + + + + + + + + + + PWA app + + + + + + + + + + + + + + + + Page Builder for PWA + + + + + + + + + + + + + + + + + + + + + + + + + + Converting the master format HTML into React components + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/utility-functions/index.md b/pwa-devdocs/src/pagebuilder/utility-functions/index.md new file mode 100644 index 0000000000..0765e112c7 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/utility-functions/index.md @@ -0,0 +1,14 @@ +--- +title: Utility functions +--- + +The utility functions help with retrieving commonly stored data in a content type. For example, the `getAdvanced(node)` wrapper function retrieves all the content type's Advanced form section settings so you don't have to worry about retrieving each one separately. Retrieving background images and associated properties is also made easy with the `getBackgroundImages(node)` function. + +For implementation details [View Source] + +{% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/utils.md %} + +[View Source]: https://github.com/magento/pwa-studio/blob/feature/page-builder/packages/venia-ui/lib/components/RichContent/PageBuilder/utils.js From ee699c2b75ebe4c1b8b1a260f05a57ce5c16e38b Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Fri, 11 Oct 2019 17:51:25 -0500 Subject: [PATCH 13/38] PB-36: [Docs] Creating custom Page Builder components Ran prettier --- .../ExampleQuote/configAggregator.js | 1 - .../ContentTypes/ExampleQuote/exampleQuote.js | 19 ++++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js index 4262afc38a..36e57cd27b 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js @@ -1,7 +1,6 @@ import { getAdvanced, getCssClasses, getBackgroundImages } from '../../utils'; export default (node, props) => { - console.log(node); const propObject = { diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js index 004b49fc10..d4969a9fe7 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js @@ -50,21 +50,22 @@ const ExampleQuote = props => { paddingTop, paddingRight, paddingBottom, - paddingLeft, + paddingLeft }; - const quoteClasses = [defaultClasses.quote, defaultClasses.blueQuote].join(' '); + const quoteClasses = [defaultClasses.quote, defaultClasses.blueQuote].join( + ' ' + ); console.log(quoteClasses); return (
-
- {quote} -
-
- {author} -
-
+
{quote}
+
{author}
+
); }; From 47065744da1b7bd70f723438aff6744228e7f6d8 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Fri, 11 Oct 2019 17:55:42 -0500 Subject: [PATCH 14/38] PB-36: [Docs] Creating custom Page Builder components Fixed code warnings --- .../PageBuilder/ContentTypes/ExampleQuote/configAggregator.js | 4 ++-- .../PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js index 36e57cd27b..9e35bb5508 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js @@ -1,6 +1,6 @@ -import { getAdvanced, getCssClasses, getBackgroundImages } from '../../utils'; +import { getAdvanced } from '../../utils'; -export default (node, props) => { +export default node => { console.log(node); const propObject = { diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js index d4969a9fe7..4ae23fe60c 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js @@ -33,8 +33,7 @@ const ExampleQuote = props => { paddingTop, paddingRight, paddingBottom, - paddingLeft, - cssClasses = [] + paddingLeft } = props; const dynamicStyles = { From 0c1a4c399db981f9b03a8535a8866e9956f0420d Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Sat, 12 Oct 2019 11:00:37 -0500 Subject: [PATCH 15/38] PB-36: [Docs] Creating custom Page Builder components Refined aggregator docs and added diagrams --- .../add-aggregator/AddAggregatorOverview.svg | 68 ++++++++++-------- .../AggregatorHTMLConsoleOutput.png | Bin 0 -> 44034 bytes .../AggregatorObjectConsoleOutput.png | Bin 0 -> 82488 bytes .../custom-components/add-aggregator/index.md | 63 ++++++++++------ 4 files changed, 79 insertions(+), 52 deletions(-) create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AggregatorHTMLConsoleOutput.png create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AggregatorObjectConsoleOutput.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg index 3ac2b4dcef..4ed2155ddf 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg @@ -5,17 +5,14 @@ Created with Sketch. - - - - - - - - - master format - - + + + + + + + master format + aggregator @@ -24,18 +21,18 @@ - + Build out your aggregator to retrieve properties from your content type nodes within the master format. - - Return a property object so - that the framework can push it - to you component to populate - corresponding properties. + + Return the properties in an object + so that the framework can push it + to you component to populate + corresponding properties. @@ -50,19 +47,7 @@ - - - - - - - - - - - - - + @@ -78,5 +63,28 @@ return property object + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AggregatorHTMLConsoleOutput.png b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AggregatorHTMLConsoleOutput.png new file mode 100644 index 0000000000000000000000000000000000000000..182678741bfdc15c8b2911b2a36cff7e047e19e9 GIT binary patch literal 44034 zcmZ^Lbx@q&(q;$_!GgQHyEC}EySuwfAV>lMg1a*~!QFy84DN%wyTkI^ulDY@_kLSl zHS^Zg{Bio6?&q{T{r*%|ltMzlL-_RR6OxRyxay}*kR>0_c5pBspT2WdRUcnaRw4=_ zpFY*ZBEFbFfBGc+Nk&{m-5cV>0M;Kv0z2qN@u1_LiKgS8jHDwVKV-T)GCzcb1P&`Q zpUgm5*q50!Sokvq1*)$oos6`o?>YPl_q*59=-Tex*;jO^wUl)Wuj2N!N2Mj7Yw#G> zZ>Ts~y3hYVd1v_y{l0lKx1#~2{vYzT3r9gsolsZDzSiNVRaK~zBLqBNs7fefpZUJ) z1TZ%@2hEjhxrN&4>f-hH_0bd&;^GbqyuQ9-_U?p5(BQjhO}XYafec8n!IvjXb;&UAdYfO-(QRIz zZf{PO*rOg!mK&nL{?`iWLIHf^S^O#a`S~|nEv>D!Z3zkJVd3Gm>$Mi6%|y!B4}^T~ z()jyR1yU5x>up|2$Bx4aCUT!kP5x8ie|~ZO{;9sG!ET`_3=!Kh%CJnGcDdb$9g|*@ zAtNUq5~^dXKPsW1fPAh}Pm6XDai0hkRTvEoZIaT+Vl)}(u+pfKCmO~eTcz7zTW>Ln zHQ@2~@@Q^mCWcNW4;lzd_ItS4WazUc>>q!By9XRCR1xzZ&Tpm|1j99Em~Ob7p90c+-mlP}bKcXmD6bHr9=_Lai?X4NYY7evcs%ltiaiG{0Y5 z)PA~KaT;D&NLjA85mU+*$OFoys3y^A3}FDUv9VjdFUc?&brTh$Nf#ZK>wiwq%)qDX z`uX{lDd&BTCK8N%x+nf?v$VVniXjYg?#$qJQv5I{D$kX`z>ZVFxxBo*lt{%A-E_keS7%Ij z{bQPGn<$$`SgI;cU9Wfe8M+1jL+j7yU6b}O$OJ=Lp(27qqQK%}YP;rwf`YWk-O&^s z<*;gm5L(u)L}sJxoZTR4*k*$kR|(H)L(&sbZKiSuR;1Bs5FUR@*l=K>~$bdI0B9rs{A-C(#key_8_i7ft^ z#Tv82;+(+zjSXW54r>Ly23v^_L&pf&v7DFIEK~nE9)Sj@E1ddO%np(Ci+Ln*=pa6~ zBOHV~2VxN^DJjAJa)TYz=E;ZUnQY>Hwwx&%FOiJK6LnsbBo2Ha<+NY?olBbtEez+0 z+7pZqwHFI`OTC0pM8&v2T^W2#3KLb7e);aq7x?0RGz~;V{JuYtHG=>~^(7=AI4Fn} z%J)27RxvitB~ZA0>c=*6ewry#m_dXT!2uYDwu=^&%V}r+HHCT^_=VeR_@UiqdoSTG z9;<1nBZgr$kN*S9Hk;p_eaJVY5NF$8)yg%FYkULnQ3N6)BFka$p@aG2B4%hB-2dSr z5SYR5M4v%aJsjvE)EpUA9d~$kN>1SR;bkQ_29||WP#&ZmfkkL;LnuE-BO4uiu8t1cm}*`$WcP{J-*0bF;{_E+p>4c@aNl1< zg`p;k6f#_WNOwes^y@5$y>N z#1aE6^N4&T!LVO&{#wNOY#{^_EGu5XzO_(V_Xfj;I&Nr`YcdLIYMXzfddYC=G>NXw zE{=;(0=%kQ$9tjHx0m=?FOH*OK`K`TJm2j?e@V55luG+JG9W?;8_to2gz&$~Mpw)y zWX9<=IhyUb^z@O>VJ}}8@mI~`6;v<31fy8y1VxavhwRXwk)DVoAkOHe-ifZjqw9-J zN0UDfJ6>sc4mK!e@nu>Wa3>=5kd4J%epiNNq_6+gD%!vVNTnAuKAtPb4tRUquh0mE zub>T)MDrf@|5je{n6ym`52WdejYSbbw1*eTjcCNuop^n|uhZ1zCaOHN zK^-f2zB%meX>0L?{XFcWbob%$`+~)b+aDIM zRg*Fs(-4Qvqz@Wk?N>skK#aIz|AVS%0{*gz_)H%R5jvdAs8@^i70)8m9Wg;C&AHX# zI}DOH3IkNY3GN)_iAFz>jsYq1CTVU6aj1?l%4r1??kMpKDMxQ6HlCFn++!FPmSrmo zK$4I=hfSn6@~J7bS_-p=749<|vWD+&l2(0)&_xeQp&!aA_jE_lyU=qU<6+=3j3wxZ zNIhKgwU{jTKLph3VTaXoQ5rW5lw&7ZX>zi1Q%-$0%^`)0And-ufP#>f`4Ruhn>zu3 zGkYlfSz*!_D089{26L6=1>S@Vbyh~7j^j+`afbaIBY%4|X9n@L$Kd_#75-WBk{3S} z_xoRz!oFBR%(w0_+@7sOTD3(A%%U2jpjXa}&Cchuw)Sbd2BSuc4Z(hLnv;AX<~I{{wBcY!A*ZD!<)?{DGk>^Q~o!3 zNFnmsXY(L_v2!e~aqi)_JPFE@gYqX#gDh<{p&IS2>DCCe^Lnm zH?D2|H(2_i<5wX<3A0&csgLHrsqFHMg zZEe9p(4TqAu9n!xeUg-N%Jwzi=;<^VL;vyWbt(TAdi4aSDU!`_}9;7C6wW{=0>ez3Iu%H;%huu+nGTZh6xKH#hz+4C) z&WlT)EjUh+Q*H&H+VLfHl1jk$KyKKS*g)47Z{4cU>cHalaK?(mXG@~Yz>S#K5Xq$L z*6vKX67Si1{J!b7N4H0bIV3J(_5tS#6Q@&p=iEPdb@G(FDoV<*&^~Qk&aj<4n(}Ih zJLct;(QkdPzuAfbh1W&y7sB?F7~z1x-Gq#Kfl1OxD0F5Nb_fl*V9-<0#x|6zUvAnp z&iEqYPHKkN4q{?JRNa+6^sJPY|FFkCQpZ@>DoUQ*sKd?b)z;<~cP}mL^ve$2$YcW3 z+eM%uMH;gJi%*N6y7?2f5d7HhLbP{NshTY{DM4s=0t^B05*rQE}r zKdR#9vWC@TZbTVety63Kaah+Lod@FCO>4X_9(qy;7s%B-e+WR+LO(930mKTlm&}8s zB24R}z76$&uuzKW2x1-`{jumSpf$c>tpu`uy#&1~bR z$U{#(@jB`#cHc7$O5#s#?4_a7oOTjQ*uW<%NF(K2`He}-Sp?FGqWa*{P@9SCstOor zKk*4FCk6gvu*)vdokI~-=- z3hOq34gB%h?ARRP0fKvyL|dZ732S9ClK!>)f>rl{qS~m?YqiCr0QrgRpZf>#GeTL| z=h9~V{DHHv6WNU?0U6la*(OA;d{Sf53Roef*e&+&kwk5LIJKjfb*gD3xt*`c9S`ja zV1_+h%ai3f<>l+*l)P&Kh_Hp~EwiEHLokWV8 zCd0f@H|?T`&yCc7qz+3{^~-Or$eg#lKLvC(q6a)`@Ru1#U7OsmCJyKa`Jyemf-2=g ze>TWYq6BXNN2fBL#Y&uODo{oMU9;EJz>*&rwp00;56T^HhlNOZIxZo@GEaC5FT-Ij zeY`f)&!+tv-4VgTN7|)v(`9sbD&Ypp=!UzJq=kX$gmFCa#yN|pE~x@vH^aboE1y9uRu z{1Rzne-?K2ZF22(ba=s$f1SLG4SL;!Vh3@zwb~cCKTN=~Y9)euss(rs>TFt>ZZz2) zy8X+1;uw=Nws27viZ)V^k(0PcGht?`PGg64r*z)4`x)7)^NH9b2?>LksPFRkxmnH^ z>O@E=^pd`ZKKm}K9;guvk%M&pnP6Qme)03kmi)P|*#K-|;)%8qdeGu}o&7M
q=9 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
` and `author` nodes +- The **HTML** content from the `description` node +- The CSS **classes** from all three child nodes (`
`, `author`, and `description`) -### Example +To retrieve these properties, you'll want to use a combination of [HTMLElement DOM properties] along with our [utility functions], as shown next in the example. + +### Example aggregator Here is the aggregator we use for the `ExampleQuote` component: @@ -59,20 +74,20 @@ console.log(node); First we `import` the utility function(s) we want to use. In our case, we know that our Quote content type provides end users with the Advanced form section. So we import the `getAdvanced` function from `utils.js`. -Then we use the `element` names from the master format (color coded in green above) as our property key names: `quote`, `author`, and `description`. Doing this helps to identify where the data in the component comes from. +Then we use the `element` names from the content type HTML (color coded in green above) as our property key names: `quote`, `author`, and `description`. Naming your properties like this helps to identify where the data in the component comes from. Next, we use the `textContent` and `innerHTML` DOM properties to grab the text and html values from the appropriate `childNodes`. -Finally, we use the `getAdvanced()` utility function to retrieve all the properties from the Advanced section of our content type's form. Later you will create the corresponding keys to capture these values within your component. +Finally, we use the `getAdvanced()` utility function to retrieve all the property values from the Advanced section of our content type's form. {: .bs-callout .bs-callout-info} -The Quote content type also has a form section called Background (from the `pagebuilder_base_form_with_background_attributes` form). This section of the form allows end users to enter all kinds of background attributes, such as images, colors, positions and so on. If your custom content uses the Background section, you probably want to include the those attributes in your component using the `getBackgroundImages()` utility function. However, to keep things simple for our component, we decided not to pull these attributes from the HTML. +The Quote content type also has a form section called Background (from the `pagebuilder_base_form_with_background_attributes` form). This section of the form allows end users to enter all kinds of background attributes, such as images, colors, positions and so on. If your custom content uses the Background section, you should retrieve the those attributes using the `getBackgroundImages(node)` utility function. However, to keep things simple for our component, we decided not to pull these attributes from the HTML. ### Retrieving data from different Appearances -If your content type has different appearances, the master format HTML will also differ. To handle this we provide the appearance within the second `props` argument so that you can modify your queries in order to retrieve data from the correct node. +If your content type has different appearances, the HTML for each appearance will also differ. To handle these differences, we provide the `appearance` within the `props` argument so you can modify your queries in order to retrieve data from the correct node. -For our Quote content type, we only have one appearance (the default). However the Row content type has three appearances, so it uses a conditional based on the `props.appearance` value to determine the correct node to use, as shown here: +For our Quote content type, we only have one appearance (the default); so we do not need to use it. However, the Row content type has three appearances, so it uses a conditional based on the `props.appearance` value to determine the correct node to use, as shown here: ```js // Targeting appearances in the Row aggregator @@ -89,7 +104,7 @@ export default (node, props) => { ## Test the aggregator -The best way to see the properties returned by your aggregator is using `console.log()`. For our quote aggregator, we can do something like this: +The best way to see the properties returned by your aggregator is using `console.log()`. For our Quote aggregator, we can do something like this: ```js import { getAdvanced, getCssClasses, getBackgroundImages } from '../../utils'; @@ -109,8 +124,12 @@ export default (node, props) => { }; ``` +Adding `console.log(node)` at the beginning of your aggregator function, and at he end (`console.log(propObject)`), helps to show you the HTML you receive and the object you return. The property object returned from our aggregator looks like this: + +![Aggregator object console output](AggregatorObjectConsoleOutput.png) + {: .bs-callout .bs-callout-info} -You will need to know the property `key-values` you are returning so that that you can assign them within your component. +You will need to know the property `key-values` you are returning so that that you can assign them to corresponding properties in your component when you build it out. [utility functions]: {{ site.baseurl }}{% link pagebuilder/utility-functions/index.md %} [HTMLElement DOM properties]: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement From 481303c9d31a3914397471c52087a838ea4adf6e Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Mon, 14 Oct 2019 09:53:27 -0500 Subject: [PATCH 16/38] PB-36: [Docs] Creating custom Page Builder components Additional info on overview pages --- .../custom-components/add-component/index.md | 5 +- .../custom-components/add-css/index.md | 2 + .../custom-components/debugging/index.md | 4 +- .../custom-components/overview/index.md | 23 ++++---- pwa-devdocs/src/pagebuilder/overview/index.md | 58 ++++++++++++++----- 5 files changed, 62 insertions(+), 30 deletions(-) diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md index d6f8fdbab5..a3005a474a 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md @@ -2,7 +2,9 @@ title: Add component --- -Page Builder React components are the same as working with other React components in PWA Studio. However, the properties defined within a Page Builder component are determined by the properties returned from your configuration aggregator. This may result a larger number of props than usual. But not all props are used when the component is initialized. As a result, you need to ensure if a value is null the component can still render correctly. Here is an example of the properties defined in the `exampleQuote.js`. +WIP: Do not review + +Page Builder React components are the same as working with other React components in PWA Studio. However, the properties defined within a Page Builder component are determined by the properties returned from your configuration aggregator. This may result in a larger number of properties (props). But not all props are used when the component is initialized. As a result, you need to ensure that a null value is the component can still render correctly. Here is an example of the properties defined in the `exampleQuote.js`. ## Build out your component @@ -28,4 +30,3 @@ const ExampleQuote = props => { cssClasses = [] } = props; ``` - diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-css/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-css/index.md index f4a295dbe0..15c1070571 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-css/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-css/index.md @@ -2,6 +2,8 @@ title: Add stylesheet --- +WIP: Do not review + Your `.css` file contains all the CSS styles you need to style your component within a PWA app. Styling your Page Builder components is the same as styling all other components in PWA Studio. ## Build out your CSS styles diff --git a/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md b/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md index 83b18c666a..0dca3118e2 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md @@ -2,10 +2,12 @@ title: Debugging tips --- +WIP: Do not review + If you haven't yet modified the config object and setup the references you'll see the following console warning in your console to inform you the component is missing: ```text parseStorageHtml.js?4091:67 No config aggregator defined for content type X, this content type won't be rendered. ``` -If you _have_ modified the configuration and your content type is still not displaying you can debug through `packages/venia-ui/lib/components/RichContent/PageBuilder/parseStorageHtml.js` to determine if your configuration item is being correctly detected. +If you _have_ modified the configuration and your content type is still not displaying, you can debug through `packages/venia-ui/lib/components/RichContent/PageBuilder/parseStorageHtml.js` to determine if your configuration item is being correctly detected. diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md b/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md index 3c1ef52220..60869858f5 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md @@ -3,42 +3,43 @@ title: Overview --- -So let's assume you have at least one _custom_ Page Builder content type rendering content on your Magento storefront. But now you want that content to show up in your PWA app as well. What do you do? Short answer: You create a custom PWA Page Builder component (also know as a "content type component"). The long answer is described in this series of topics. +Let's assume you have at least one _custom_ Page Builder content type rendering content on your Magento storefront. But now you want that content to show up in your PWA app as well. What do you do? Short answer: You create a custom PWA Page Builder component (also know as a "content type component"). The long answer is described in this series of topics. The steps shown here describe the recommended process for developing content type components: ![Overview of steps](OverviewSteps.svg) -These topics show you how to create the code that retrieves data (content and styling properties) from your content type (the configAggregator) and assigns it to the equivalent properties in your in component. +The topics for these steps show you how to create the code that retrieves properties (content and styling) from your content type HTML (in the configAggregator) and assign those properties to the equivalent properties in your in content type component. ## Prerequisites -Before you start creating your custom content type component in PWA Studio: +Before you start creating your custom content type component in PWA Studio, make sure you have met the following prerequisites: -- Your Magento instance should have a custom content type added and saved to the **home** page in the Admin. Currently, the `home` page is the only page you can render Page Builder content within PWA Studio. -- Your Magento instance should render this content type on the home page of your storefront. +- Your Magento instance should have a custom content type added and saved to the **home** page in the Admin. Currently, the `home` page is the only page you can render Page Builder content within PWA Studio. +- Your Magento instance should render this content type on the home page of your storefront. {: .bs-callout .bs-callout-info} -We assume you already have the PWA Studio setup and running in your development environment. If you do not, make it so! +We assume you already have the PWA Studio set up and running in your development environment. If you do not, [use these instructions] to do that now. ## Using the Quote content type -To help explain the process of building a custom Page Builder component, we continually refer to a component called `ExampleQuote`. We built this component as the PWA counterpart to the example Quote content type found on the [GitHub pagebuilder-examples repo]. +To help explain the process of creating a custom Page Builder component, we frequently refer to a component called `ExampleQuote`. We built this component as the PWA counterpart to the example Quote content type found on the [GitHub pagebuilder-examples repo]. If you want to follow along with these topics more closely, [download and install the PageBuilderQuote module] in your Magento instance and use it to fulfill the prerequisites previously mentioned. ## Home page in Admin -The first prerequisite is to add and save your custom content type to the `home` page in Admin. Here we see the Quote content type saved to the Home page in the Admin: +The first prerequisite is to add and save your custom content type to your Magento Home page in Admin. Here we see the Quote content type saved to the Home page in the Admin: ![PageBuilderQuote in Admin](PageBuilderQuoteAdmin.png) ## Home page on Storefront -The second prerequisite is to ensure that your custom content type rendering successfully in the storefront of your Magento instance. Here we see the Quote content type rendered on the Home page of a Luma storefront: +The second prerequisite is to ensure that your custom content type renders successfully in the storefront of your Magento instance. Here we see the Quote content type rendered on the Home page of a Luma storefront: ![PageBuilderQuote on Storefront](PageBuilderQuoteStorefront.png) +After you have met these prerequisites, you are ready to begin creating your custom Page Builder component in the PWA Studio. + [download and install the PageBuilderQuote module]: https://github.com/magento-devdocs/pagebuilder-examples/tree/master/Example/PageBuilderQuote [GitHub pagebuilder-examples repo]: https://github.com/magento-devdocs/pagebuilder-examples/tree/master/Example/PageBuilderQuote - -After you have met these prerequisites, you are ready to begin creating your custom Page Builder component in the PWA Studio. +[use these instructions]: {{ site.baseurl }}{% link pagebuilder/custom-components/setup-component/index.md %} diff --git a/pwa-devdocs/src/pagebuilder/overview/index.md b/pwa-devdocs/src/pagebuilder/overview/index.md index 7a492ae552..c0c13820f0 100644 --- a/pwa-devdocs/src/pagebuilder/overview/index.md +++ b/pwa-devdocs/src/pagebuilder/overview/index.md @@ -1,14 +1,48 @@ --- -title: Page Builder Integration +title: Page Builder integration --- -The Page Builder integration into PWA studio provides React components that are equivalent to the native content types in Page Builder. The Page Builder integration code then populates those components with the property data from the master format HTML and renders them to the Venia PWA app. A visualization of this process follows: +The purpose of the Page Builder to PWA integration is to retrieve data from the Page Builder content types and push that data into equivalent React components for display in a PWA app. The Page Builder framework populates the React components with the properties extracted from the master format HTML, then renders those components to the PWA Studio's Venia app. A visualization of this process follows: ![Page Builder Integration Overview](PageBuilderIntegration.svg) -## Detailed flow +## Page Builder PWA framework -As part of the Page Builder / PWA integration, we implemented a system in which we can convert Page Builder's master format into a structured format that React and PWA Studio could understand. We did this on the client side to ensure compatibility with all various hosting methods of Magento Commerce currently available. The flow diagram starts with a customer interacting with the Venia PWA app. +As part of the Page Builder to PWA integration, we implemented a framework that converts Page Builder’s master format (HTML) into a structured format that works in React and PWA Studio. The key pieces of the framework are described as follows: + +[Insert diagram] + +### RichContent component + +The component provides the entry point into the Page Builder PWA framework. It controls whether the HTML passed by the PWA app contains Page Builder content. If it does, the HTML is sent to the component for processing. If not, the HTML is sent directly to the PWA app for display. + +### PageBuilder component + +The component directs the parsing of the master format HTML as well as retrieving, populating, and returning content type components back to the Venia app. + +### Parser function + +The parser function (`parseStorageHtml`) decomposes the master format HTML into the content type HTML fragments (HTMLElements) that compose the master format. The parser sends the content type HTML to a property aggregator (`configAggregator`) using a configuration object. + +### Config object (extension point) + +The configuration object contains a kind of registry for retrieving a content type's property aggregator and equivalent Page Builder component. This object provides the integration point for your own custom content type components. See [Set up component] for details. + +### Aggregator (extension point) + +The content type aggregator is a function that retrieves content and style properties from the content type HTML (using DOM properties and framework utility functions). These properties are returned as an object for use within the content type component. You will need to create an aggregator for each of your own custom content types. See [Add aggregator] for details. + +### Component (extension point) + +The content type component is a React component that is equivalent to a Page Builder content type. It contains the content and style properties needed to faithfully represent your Page Builder content types within a PWA Studio app like Venia. You will need to create a content type component for each of your own custom content types. See [Add component] for details. + +### ContentTypeFactory component + +The `` component retrieves and returns content type components to the PWA Studio app for rendering in a PWA app. + +## Framework execution + +The framework executes on the client side to ensure compatibility with the various hosting options available for Magento Commerce. The following flow diagram describes how the parts of the framework function together to render Page Builder components within the Venia app. ![Page Builder Integration Details](PageBuilderIntegrationDetails.svg) @@ -22,18 +56,6 @@ As part of the Page Builder / PWA integration, we implemented a system in which 8. The `ContentTypeFactory` populates and renders the component with the property values retrieved by the `parseStorageHtml` from the `configAggregator`. 9. The `PageBuilder` component returns all the components needed to render the Page Builder content within the PWA app. -## Developer tasks - -To get your custom Page Builder content type to rendered within a PWA app, you need to do three things: - -1. Create a React component that is equivalent to your Page Builder content type. -2. Create a configuration aggregator to retrieve the configuration properties from your Page Builder content type. -3. Add your React component and configuration aggregator to the configuration file (config.js). - -![Big Picture: Creating Page Builder PWA components](masterFormatToComponent.svg) - -These tasks are described in detail in the [Create content type components] topic. - ## Known limitations The following items are known limitations to implementing PWA components for Page Builder content types: @@ -43,3 +65,7 @@ The following items are known limitations to implementing PWA components for Pag - **Text content type** - Widgets are not supported within Text components in PWA Studio. - **Dynamic Block content type** - Not supported as a component in PWA Studio. + +[Set up component]: {{ site.baseurl }}{% link pagebuilder/custom-components/setup-component/index.md %}#component-configuration +[Add aggregator]: {{ site.baseurl }}{% link pagebuilder/custom-components/add-aggregator/index.md %} +[Add component]: {{ site.baseurl }}{% link pagebuilder/custom-components/add-component/index.md %} From 8a6ba58ec05de5076359174a3ba15f2bd076aca7 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Wed, 16 Oct 2019 05:20:40 -0500 Subject: [PATCH 17/38] PB-36: [Docs] Creating custom Page Builder components Added remain content type source code docs to host topics --- pwa-devdocs/src/_data/pagebuilder.yml | 3 + .../pagebuilder/components/banner/index.md | 1 + .../pagebuilder/components/buttons/index.md | 2 + .../pagebuilder/components/divider/index.md | 4 ++ .../pagebuilder/components/products/index.md | 1 + .../src/pagebuilder/components/row/index.md | 1 - .../pagebuilder/components/slider/index.md | 1 + .../src/pagebuilder/components/tabs/index.md | 2 + .../custom-components/add-aggregator/index.md | 4 +- .../pagebuilder/known-limitations/index.md | 15 +++++ pwa-devdocs/src/pagebuilder/overview/index.md | 58 +++++-------------- 11 files changed, 45 insertions(+), 47 deletions(-) create mode 100644 pwa-devdocs/src/pagebuilder/known-limitations/index.md diff --git a/pwa-devdocs/src/_data/pagebuilder.yml b/pwa-devdocs/src/_data/pagebuilder.yml index 21c18a05b9..fdb4f43b59 100644 --- a/pwa-devdocs/src/_data/pagebuilder.yml +++ b/pwa-devdocs/src/_data/pagebuilder.yml @@ -3,6 +3,9 @@ entries: - label: Page Builder integration url: /pagebuilder/overview/ + - label: Known limitations + url: /pagebuilder/known-limitations/ + - label: Creating custom components entries: - label: Overview diff --git a/pwa-devdocs/src/pagebuilder/components/banner/index.md b/pwa-devdocs/src/pagebuilder/components/banner/index.md index 31ea5756f7..a6a28d9409 100644 --- a/pwa-devdocs/src/pagebuilder/components/banner/index.md +++ b/pwa-devdocs/src/pagebuilder/components/banner/index.md @@ -6,3 +6,4 @@ title: Banner The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> +{% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/banner.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/buttons/index.md b/pwa-devdocs/src/pagebuilder/components/buttons/index.md index 166612cbe2..81edf31dec 100644 --- a/pwa-devdocs/src/pagebuilder/components/buttons/index.md +++ b/pwa-devdocs/src/pagebuilder/components/buttons/index.md @@ -6,3 +6,5 @@ title: Buttons The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> +{% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Buttons/buttons.md %} +{% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ButtonItem/buttonItem.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/divider/index.md b/pwa-devdocs/src/pagebuilder/components/divider/index.md index 1fb59affda..68bcfb671b 100644 --- a/pwa-devdocs/src/pagebuilder/components/divider/index.md +++ b/pwa-devdocs/src/pagebuilder/components/divider/index.md @@ -2,4 +2,8 @@ title: Divider --- + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Divider/divider.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/products/index.md b/pwa-devdocs/src/pagebuilder/components/products/index.md index f7ad88e00c..1ef3919379 100644 --- a/pwa-devdocs/src/pagebuilder/components/products/index.md +++ b/pwa-devdocs/src/pagebuilder/components/products/index.md @@ -6,3 +6,4 @@ title: Products The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> +{% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Products/products.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/row/index.md b/pwa-devdocs/src/pagebuilder/components/row/index.md index 3d3e726092..0d8ae77ea6 100644 --- a/pwa-devdocs/src/pagebuilder/components/row/index.md +++ b/pwa-devdocs/src/pagebuilder/components/row/index.md @@ -6,5 +6,4 @@ title: Row The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> - {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Block/block.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/slider/index.md b/pwa-devdocs/src/pagebuilder/components/slider/index.md index f0a499a748..bc48bfd741 100644 --- a/pwa-devdocs/src/pagebuilder/components/slider/index.md +++ b/pwa-devdocs/src/pagebuilder/components/slider/index.md @@ -6,3 +6,4 @@ title: Slider The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> +{% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Slider/slider.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/tabs/index.md b/pwa-devdocs/src/pagebuilder/components/tabs/index.md index 9d9095745e..69c98a13e4 100644 --- a/pwa-devdocs/src/pagebuilder/components/tabs/index.md +++ b/pwa-devdocs/src/pagebuilder/components/tabs/index.md @@ -6,3 +6,5 @@ title: Tabs The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> +{% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Tabs/tabs.md %} +{% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/TabItem/tabItem.md %} diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md index dde82f7791..5638e2a243 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md @@ -2,7 +2,7 @@ title: Add aggregator --- -The purpose of the configuration aggregator (configAggregator) is to retrieve properties from a content type's HTML and return those properties as a flat object of `key:values`. The framework (specifically the ``) then passes this object to your component, where you can assign the properties to your component's corresponding properties for rendering within a PWA Studio app. +The purpose of the configuration aggregator (`configAggregator`) is to retrieve properties from a content type's HTML and return those properties as a flat object of `key:values`. The framework (specifically the ``) then passes this object to your component, where you can assign the properties to your component's corresponding properties for rendering within a PWA Studio app. ![Aggregator Overview](AddAggregatorOverview.svg) @@ -78,7 +78,7 @@ Then we use the `element` names from the content type HTML (color coded in green Next, we use the `textContent` and `innerHTML` DOM properties to grab the text and html values from the appropriate `childNodes`. -Finally, we use the `getAdvanced()` utility function to retrieve all the property values from the Advanced section of our content type's form. +Finally, we use the `getAdvanced()` utility function to retrieve all the property values from the Advanced section of our content type's form and use the spread operator (...) to expand them into the current object. {: .bs-callout .bs-callout-info} The Quote content type also has a form section called Background (from the `pagebuilder_base_form_with_background_attributes` form). This section of the form allows end users to enter all kinds of background attributes, such as images, colors, positions and so on. If your custom content uses the Background section, you should retrieve the those attributes using the `getBackgroundImages(node)` utility function. However, to keep things simple for our component, we decided not to pull these attributes from the HTML. diff --git a/pwa-devdocs/src/pagebuilder/known-limitations/index.md b/pwa-devdocs/src/pagebuilder/known-limitations/index.md new file mode 100644 index 0000000000..c903624353 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/known-limitations/index.md @@ -0,0 +1,15 @@ +--- +title: Known limitations +--- + +The following items are known limitations to implementing PWA components for Page Builder content types: + +- **Products content type** - The Alignment property as set within the Products content type form will always default to Left. Text alignment does not work within the PWA Studio gallery because the gallery is rendered with the CSS grid layout. + +- **Text content type** - Widgets are not supported within Text components in PWA Studio. + +- **Dynamic Block content type** - Not supported as a component in PWA Studio. + +[Set up component]: {{ site.baseurl }}{% link pagebuilder/custom-components/setup-component/index.md %}#component-configuration +[Add aggregator]: {{ site.baseurl }}{% link pagebuilder/custom-components/add-aggregator/index.md %} +[Add component]: {{ site.baseurl }}{% link pagebuilder/custom-components/add-component/index.md %} diff --git a/pwa-devdocs/src/pagebuilder/overview/index.md b/pwa-devdocs/src/pagebuilder/overview/index.md index c0c13820f0..bf3a58856a 100644 --- a/pwa-devdocs/src/pagebuilder/overview/index.md +++ b/pwa-devdocs/src/pagebuilder/overview/index.md @@ -8,64 +8,34 @@ The purpose of the Page Builder to PWA integration is to retrieve data from the ## Page Builder PWA framework -As part of the Page Builder to PWA integration, we implemented a framework that converts Page Builder’s master format (HTML) into a structured format that works in React and PWA Studio. The key pieces of the framework are described as follows: +As part of the Page Builder to PWA integration, we implemented a framework that converts Page Builder’s master format (HTML) into a structured format that works in React and PWA Studio. The key parts of the framework are described as follows: -[Insert diagram] +**RichContent**: The `` component provides the entry point into the Page Builder PWA framework. It controls whether the HTML passed by the PWA app contains Page Builder content. If it does, the HTML is sent to the `` component for processing. If not, the HTML is sent directly to the PWA app for display. -### RichContent component +**PageBuilder**: The `` component directs the parsing of the master format HTML as well as retrieving, populating, and returning content type components back to the Venia app. -The component provides the entry point into the Page Builder PWA framework. It controls whether the HTML passed by the PWA app contains Page Builder content. If it does, the HTML is sent to the component for processing. If not, the HTML is sent directly to the PWA app for display. +**Master Format parser**: The master format parser function (`parseStorageHtml()`) decomposes the master format HTML into the content type HTML fragments (HTMLElements) that compose the master format. The parser sends the content type HTML to the correct property aggregator (`configAggregator`) using the configuration object. -### PageBuilder component +**Configuration object**: The configuration object (`contentTypesConfig`) provides a kind of registry for retrieving a content type's property aggregator and corresponding Page Builder component. The configuration object provides the integration point for your own custom content type components. See [Set up component] for details. -The component directs the parsing of the master format HTML as well as retrieving, populating, and returning content type components back to the Venia app. +**Content Type Aggregator** (extension point): The content type aggregator (`configAggregator`) is a function that retrieves content and style properties from the content type HTML (using DOM properties and framework utility functions). These properties are returned as a flat object for use within the content type component. You will need to create an aggregator for each of your own custom content types. See [Add aggregator] for details. -### Parser function +**Content Type Component** (extension point): The content type component is a React component that is equivalent to a Page Builder content type. It contains the content and style properties needed to faithfully represent your Page Builder content types within a PWA Studio app like Venia. You will need to create a content type component for each of your own custom content types. See [Add component] for details. -The parser function (`parseStorageHtml`) decomposes the master format HTML into the content type HTML fragments (HTMLElements) that compose the master format. The parser sends the content type HTML to a property aggregator (`configAggregator`) using a configuration object. +**ContentTypeFactory**: The `` component retrieves and returns content type components to the PWA Studio app for rendering to the end-user. -### Config object (extension point) +## How it works -The configuration object contains a kind of registry for retrieving a content type's property aggregator and equivalent Page Builder component. This object provides the integration point for your own custom content type components. See [Set up component] for details. - -### Aggregator (extension point) - -The content type aggregator is a function that retrieves content and style properties from the content type HTML (using DOM properties and framework utility functions). These properties are returned as an object for use within the content type component. You will need to create an aggregator for each of your own custom content types. See [Add aggregator] for details. - -### Component (extension point) - -The content type component is a React component that is equivalent to a Page Builder content type. It contains the content and style properties needed to faithfully represent your Page Builder content types within a PWA Studio app like Venia. You will need to create a content type component for each of your own custom content types. See [Add component] for details. - -### ContentTypeFactory component - -The `` component retrieves and returns content type components to the PWA Studio app for rendering in a PWA app. - -## Framework execution - -The framework executes on the client side to ensure compatibility with the various hosting options available for Magento Commerce. The following flow diagram describes how the parts of the framework function together to render Page Builder components within the Venia app. +The framework executes on the client side to ensure compatibility with the various hosting options available for Magento Commerce. The following flow diagram describes how the parts of the framework work together to render Page Builder components within the Venia app. ![Page Builder Integration Details](PageBuilderIntegrationDetails.svg) -1. The Venia app uses a GraphQL query to get CMS content from your Magento store (pages and blocks) and passes the HTML to the `RichContent` component to begin processing. -2. The `RichContent` component determines if the HTML contains Page Builder content, using simple pattern recognition. If the HTML does not include Page Builder content, it is returned to Venia and rendered out as is. If the HTML does include Page Builder content, the HTML (master format) is passed to the `PageBuilder` component. -3. The `PageBuilder` component passes the master format HTML to the `parseStorageHTML` function. -4. For each content type within the master format, the `parseStorageHtml` function use the `contentTypeConfiguration` to call the content type's configAggregator create an object tree of all the content types and associated properties. +1. The Venia app uses a GraphQL query to get CMS content from your Magento store (pages and blocks) and passes the HTML to the `` component to begin processing. +2. The `` component determines if the HTML contains Page Builder content, using simple pattern recognition. If the HTML does not include Page Builder content, it is returned to Venia and rendered out as is. If the HTML does include Page Builder content, the HTML (master format) is passed to the `` component. +3. The `` component passes the master format HTML to the `parseStorageHTML()` function. +4. For each content type within the master format, the `parseStorageHtml()` function use the `contentTypeConfiguration` to call the content type's configAggregator create an object tree of all the content types and associated properties. 5. The `parseStorageHtml` returns the content type object tree to the `PageBuilder` component. 6. The `PageBuilder` component passes the object tree to the `ContentTypeFactory`. 7. For each content type within the object tree, the `ContentTypeFactory` retrieves the React component from the `contentTypeConfiguration`. 8. The `ContentTypeFactory` populates and renders the component with the property values retrieved by the `parseStorageHtml` from the `configAggregator`. 9. The `PageBuilder` component returns all the components needed to render the Page Builder content within the PWA app. - -## Known limitations - -The following items are known limitations to implementing PWA components for Page Builder content types: - -- **Products content type** - The Alignment property as set within the Products content type form will always default to Left. Text alignment does not work within the PWA Studio gallery because the gallery is rendered with the CSS grid layout. - -- **Text content type** - Widgets are not supported within Text components in PWA Studio. - -- **Dynamic Block content type** - Not supported as a component in PWA Studio. - -[Set up component]: {{ site.baseurl }}{% link pagebuilder/custom-components/setup-component/index.md %}#component-configuration -[Add aggregator]: {{ site.baseurl }}{% link pagebuilder/custom-components/add-aggregator/index.md %} -[Add component]: {{ site.baseurl }}{% link pagebuilder/custom-components/add-component/index.md %} From 288d0933a82198cde2fdfa1122c90255ea93c70d Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Wed, 16 Oct 2019 06:08:03 -0500 Subject: [PATCH 18/38] Revert "Revert "Merge branch 'PB-17-Banner' into PB-36"" This reverts commit 72e9fea3c81cae7f5845887c5abe87b5c8ccca12. --- .../Banner/__tests__/configAggregator.spec.js | 240 ++++++++++++++++++ .../ContentTypes/Banner/configAggregator.js | 72 ++++++ .../PageBuilder/ContentTypes/Banner/index.js | 1 + 3 files changed, 313 insertions(+) create mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/__tests__/configAggregator.spec.js create mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/configAggregator.js create mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/index.js diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/__tests__/configAggregator.spec.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/__tests__/configAggregator.spec.js new file mode 100644 index 0000000000..9074188c08 --- /dev/null +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/__tests__/configAggregator.spec.js @@ -0,0 +1,240 @@ +import configAggregator from '../configAggregator'; + +test('banner config aggregator retrieves default values from empty banner content type', () => { + const node = document.createElement('div'); + node.innerHTML = + '
'; + expect( + configAggregator(node.childNodes[0], { + appearance: 'poster' + }) + ).toEqual( + expect.objectContaining({ + backgroundAttachment: 'scroll', + backgroundPosition: 'left top', + backgroundRepeat: false, + backgroundSize: 'cover', + border: 'none', + borderColor: '', + borderRadius: '0px', + borderWidth: '1px', + buttonText: null, + buttonType: null, + content: '', + cssClasses: [], + desktopImage: null, + link: null, + linkType: null, + marginBottom: '0px', + marginLeft: '0px', + marginRight: '0px', + marginTop: '0px', + minHeight: '300px', + mobileImage: null, + overlayColor: null, + paddingBottom: '40px', + paddingLeft: '40px', + paddingRight: '40px', + paddingTop: '40px', + showButton: 'never', + showOverlay: 'never', + textAlign: '' + }) + ); +}); + +test('banner config aggregator retrieves values from fully configured poster banner content type', () => { + const node = document.createElement('div'); + node.innerHTML = + '
'; + expect( + configAggregator(node.childNodes[0], { + appearance: 'poster' + }) + ).toEqual( + expect.objectContaining({ + backgroundColor: 'blue', + backgroundAttachment: 'scroll', + backgroundPosition: 'center center', + backgroundRepeat: false, + backgroundSize: 'cover', + border: 'none', + borderColor: '', + borderRadius: '0px', + borderWidth: '1px', + buttonText: 'Shop Bags', + buttonType: 'primary', + content: + '

A new way of shopping

Experience the best way of shopping today!

', + cssClasses: [], + desktopImage: 'desktop-image.jpg', + link: 'gear/bags.html', + linkType: 'category', + openInNewTab: true, + marginBottom: '0px', + marginLeft: '0px', + marginRight: '0px', + marginTop: '0px', + minHeight: '300px', + mobileImage: 'mobile-image.jpg', + overlayColor: null, + paddingBottom: '40px', + paddingLeft: '40px', + paddingRight: '40px', + paddingTop: '40px', + showButton: 'always', + showOverlay: 'never', + textAlign: '' + }) + ); +}); + +test('banner config aggregator retrieves values from fully configured collage-left banner content type', () => { + const node = document.createElement('div'); + node.innerHTML = + ''; + expect( + configAggregator(node.childNodes[0], { + appearance: 'collage-left' + }) + ).toEqual( + expect.objectContaining({ + backgroundAttachment: 'scroll', + backgroundPosition: 'center center', + backgroundRepeat: false, + backgroundSize: 'cover', + border: 'none', + borderColor: '', + borderRadius: '0px', + borderWidth: '1px', + buttonText: 'Shop Bags', + buttonType: 'primary', + content: + '

A new way of shopping

Experience the best way of shopping today!

', + cssClasses: [], + desktopImage: 'desktop-image.jpg', + link: 'gear/bags.html', + linkType: 'category', + openInNewTab: true, + marginBottom: '0px', + marginLeft: '0px', + marginRight: '0px', + marginTop: '0px', + minHeight: '300px', + mobileImage: 'mobile-image.jpg', + overlayColor: 'rgba(255, 255, 255, 0.25)', + paddingBottom: '40px', + paddingLeft: '40px', + paddingRight: '40px', + paddingTop: '40px', + showButton: 'always', + showOverlay: 'always', + textAlign: '' + }) + ); +}); + +test('banner config aggregator retrieves values from fully configured collage-centered banner content type', () => { + const node = document.createElement('div'); + node.innerHTML = + ''; + expect( + configAggregator(node.childNodes[0], { + appearance: 'collage-centered' + }) + ).toEqual( + expect.objectContaining({ + backgroundAttachment: 'scroll', + backgroundPosition: 'center center', + backgroundRepeat: false, + backgroundSize: 'cover', + border: 'none', + borderColor: '', + borderRadius: '0px', + borderWidth: '1px', + buttonText: 'Shop Bags', + buttonType: 'secondary', + content: + '

A new way of shopping

Experience the best way of shopping today!

', + cssClasses: [], + desktopImage: 'desktop-image.jpg', + link: 'gear/bags.html', + linkType: 'category', + openInNewTab: true, + marginBottom: '0px', + marginLeft: '0px', + marginRight: '0px', + marginTop: '0px', + minHeight: '300px', + mobileImage: 'mobile-image.jpg', + overlayColor: null, + paddingBottom: '40px', + paddingLeft: '40px', + paddingRight: '40px', + paddingTop: '40px', + showButton: 'always', + showOverlay: 'never', + textAlign: 'right' + }) + ); +}); + +test('banner config aggregator retrieves values from fully configured collage-right banner content type', () => { + const node = document.createElement('div'); + node.innerHTML = + ''; + expect( + configAggregator(node.childNodes[0], { + appearance: 'collage-right' + }) + ).toEqual( + expect.objectContaining({ + backgroundAttachment: 'scroll', + backgroundPosition: 'center center', + backgroundRepeat: false, + backgroundSize: 'cover', + border: 'solid', + borderColor: 'red', + borderRadius: '15px', + borderWidth: '10px', + buttonText: 'Link Button', + buttonType: 'link', + content: + '

A new way of shopping

Experience the best way of shopping today!

', + cssClasses: [], + desktopImage: 'desktop-image.jpg', + link: 'gear/bags.html', + linkType: 'category', + openInNewTab: false, + marginBottom: '0px', + marginLeft: '0px', + marginRight: '0px', + marginTop: '0px', + minHeight: '300px', + mobileImage: 'mobile-image.jpg', + overlayColor: null, + paddingBottom: '40px', + paddingLeft: '40px', + paddingRight: '40px', + paddingTop: '40px', + showButton: 'always', + showOverlay: 'never', + textAlign: 'center' + }) + ); +}); + +test('banner config aggregator retrieve isHidden value', () => { + const node = document.createElement('div'); + node.innerHTML = + ''; + expect( + configAggregator(node.childNodes[0], { + appearance: 'collage-right' + }) + ).toEqual( + expect.objectContaining({ + isHidden: true + }) + ); +}); diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/configAggregator.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/configAggregator.js new file mode 100644 index 0000000000..985b4fece3 --- /dev/null +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/configAggregator.js @@ -0,0 +1,72 @@ +import { + getMargin, + getBackgroundImages, + getBorder, + getPadding, + getTextAlign, + getCssClasses, + getIsHidden +} from '../../utils'; + +/** + * Determine the button type based on class + * + * @param node + * @returns {string} + */ +const getButtonType = node => { + if (node.classList.contains('pagebuilder-button-secondary')) { + return 'secondary'; + } + if (node.classList.contains('pagebuilder-button-link')) { + return 'link'; + } + return 'primary'; +}; + +export default (node, props) => { + const wrapperElement = node.querySelector('[data-element="wrapper"]'); + const overlayElement = node.querySelector('[data-element="overlay"]'); + const linkElement = node.querySelector('a[data-element="link"]'); + const buttonElement = node.querySelector('[data-element="button"]'); + const showButton = node.getAttribute('data-show-button'); + const showOverlay = node.getAttribute('data-show-overlay'); + + let minHeightPaddingElement = wrapperElement; + if (props.appearance === 'poster') { + minHeightPaddingElement = overlayElement; + } + + return { + minHeight: minHeightPaddingElement.style.minHeight || null, + backgroundColor: wrapperElement.style.backgroundColor, + ...getBackgroundImages(wrapperElement), + content: node.querySelector('[data-element="content"]').innerHTML, + link: linkElement ? linkElement.getAttribute('href') : null, + linkType: linkElement + ? linkElement.getAttribute('data-link-type') + : null, + openInNewTab: + linkElement && linkElement.getAttribute('target') === '_blank', + showButton, + buttonText: + buttonElement && showButton !== 'never' + ? buttonElement.textContent + : null, + buttonType: + buttonElement && showButton !== 'never' + ? getButtonType(buttonElement) + : null, + showOverlay, + overlayColor: + overlayElement && showOverlay !== 'never' + ? overlayElement.getAttribute('data-overlay-color') + : null, + ...getTextAlign(wrapperElement), + ...getBorder(wrapperElement), + ...getCssClasses(node), + ...getMargin(node), + ...getPadding(minHeightPaddingElement), + ...getIsHidden(node) + }; +}; diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/index.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/index.js new file mode 100644 index 0000000000..13570240a3 --- /dev/null +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/index.js @@ -0,0 +1 @@ +export { default } from './banner'; From f35ec013b3e6453368b04137cbcdae8c733ee379 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Wed, 16 Oct 2019 09:23:14 -0500 Subject: [PATCH 19/38] PB-36: [Docs] Creating custom Page Builder components fixed docs --- .../ContentTypes/ExampleQuote/exampleQuote.js | 10 +++++++--- .../lib/components/RichContent/PageBuilder/config.js | 5 +++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js index 4ae23fe60c..172740bbc6 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js @@ -1,6 +1,6 @@ import React from 'react'; import defaultClasses from './exampleQuote.css'; -import { arrayOf, string } from 'prop-types'; +import { arrayOf, string, bool } from 'prop-types'; const toHTML = str => ({ __html: str }); @@ -26,6 +26,7 @@ const ExampleQuote = props => { borderColor, borderWidth, borderRadius, + isHidden, marginTop, marginRight, marginBottom, @@ -33,7 +34,8 @@ const ExampleQuote = props => { paddingTop, paddingRight, paddingBottom, - paddingLeft + paddingLeft, + cssClasses = [] } = props; const dynamicStyles = { @@ -42,6 +44,7 @@ const ExampleQuote = props => { borderColor, borderWidth, borderRadius, + isHidden, marginTop, marginRight, marginBottom, @@ -52,10 +55,10 @@ const ExampleQuote = props => { paddingLeft }; + const quoteClasses = [defaultClasses.quote, defaultClasses.blueQuote].join( ' ' ); - console.log(quoteClasses); return (
@@ -102,6 +105,7 @@ ExampleQuote.propTypes = { borderColor: string, borderWidth: string, borderRadius: string, + isHidden: bool, marginTop: string, marginRight: string, marginBottom: string, diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/config.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/config.js index 779530c35d..53f459e99a 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/config.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/config.js @@ -24,6 +24,7 @@ import mapConfigAggregator from './ContentTypes/Map/configAggregator'; import bannerConfigAggregator from './ContentTypes/Banner/configAggregator'; import ButtonItem from './ContentTypes/ButtonItem'; import sliderConfigAggregator from './ContentTypes/Slider/configAggregator'; +import exampleQuoteConfigAggregator from './ContentTypes/ExampleQuote/configAggregator'; const contentTypesConfig = { row: { @@ -98,6 +99,10 @@ const contentTypesConfig = { configAggregator: sliderConfigAggregator, component: React.lazy(() => import('./ContentTypes/Slider')) }, + example_quote: { + configAggregator: exampleQuoteConfigAggregator, + component: React.lazy(() => import('./ContentTypes/ExampleQuote')) + }, // Slide is just a banner wrapped inside a slider slide: { configAggregator: bannerConfigAggregator, From a36ded8478bc9de6195e10bb3079e8a06af7c6e8 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Wed, 16 Oct 2019 09:24:54 -0500 Subject: [PATCH 20/38] PB-36: [Docs] Creating custom Page Builder components fixed docs --- .../PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js index 172740bbc6..eb134facb3 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js @@ -34,8 +34,7 @@ const ExampleQuote = props => { paddingTop, paddingRight, paddingBottom, - paddingLeft, - cssClasses = [] + paddingLeft } = props; const dynamicStyles = { @@ -55,7 +54,6 @@ const ExampleQuote = props => { paddingLeft }; - const quoteClasses = [defaultClasses.quote, defaultClasses.blueQuote].join( ' ' ); From 63bef39aed2c2b92d44d0866ae9f417447d8e7f8 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Wed, 16 Oct 2019 09:41:52 -0500 Subject: [PATCH 21/38] PB-36: [Docs] Creating custom Page Builder components Added added banner to docs --- .../create-reference-docs/config/venia-concept/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pwa-devdocs/scripts/create-reference-docs/config/venia-concept/index.js b/pwa-devdocs/scripts/create-reference-docs/config/venia-concept/index.js index a8d909ae3a..644081b49b 100644 --- a/pwa-devdocs/scripts/create-reference-docs/config/venia-concept/index.js +++ b/pwa-devdocs/scripts/create-reference-docs/config/venia-concept/index.js @@ -75,6 +75,10 @@ module.exports = [ target: 'venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Map/map.js', type: 'function' }, + { + target: 'venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/banner.js', + type: 'function' + }, { target: 'venia-ui/lib/components/RichContent/PageBuilder/utils.js', type: 'function' From 4a7c5c7ddb5ce9b5f64bdfe5c594085b315f198f Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Wed, 16 Oct 2019 22:45:47 -0500 Subject: [PATCH 22/38] PB-36: [Docs] Creating custom Page Builder components Added stylesheet and component topics --- .../ExampleQuote/exampleQuote.css | 7 +- .../ContentTypes/ExampleQuote/exampleQuote.js | 32 +-- pwa-devdocs/Gemfile.lock | 52 ++--- pwa-devdocs/src/_data/pagebuilder.yml | 6 +- .../add-component/AddComponentOutput.png | Bin 0 -> 78012 bytes .../add-component/AddComponentOutput.svg | 88 ++++++++ .../add-component/AddComponentSteps.svg | 148 +++++++++++++ .../custom-components/add-component/index.md | 122 ++++++++++- .../custom-components/add-css/index.md | 11 - .../add-stylesheet/AddStylesheetCamelCase.png | Bin 0 -> 34404 bytes .../add-stylesheet/AddStylesheetSteps.svg | 110 ++++++++++ .../custom-components/add-stylesheet/index.md | 195 ++++++++++++++++++ .../custom-components/debugging/index.md | 2 - .../overview/OverviewSteps.svg | 86 ++++---- .../ConfigureComponentOutput.png | Bin 0 -> 19886 bytes .../setup-component/index.md | 19 +- 16 files changed, 766 insertions(+), 112 deletions(-) create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.png create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg delete mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-css/index.md create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetCamelCase.png create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetSteps.svg create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/setup-component/ConfigureComponentOutput.png diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css index fdc384f384..b36c58ea57 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css @@ -6,6 +6,7 @@ text-decoration: none; font-style: italic; word-break: normal !important; + line-height: 1.25em; padding: 0; font-weight: 300; } @@ -29,9 +30,9 @@ .quoteAuthor { padding-right: 30px; - font-size: 16px; + font-size: 1em; color: #333333; - line-height: 24px; + line-height: 1.6em; margin-left: 1.5em; word-break: normal !important; font-weight: 600; @@ -42,7 +43,7 @@ padding-right: 30px; font-size: 16px; line-height: 18px; - color: #666666; + color: #333333 !important; margin-left: 1.5em; font-weight: 300; word-break: normal !important; diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js index eb134facb3..2eaeab9ac9 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js @@ -1,5 +1,5 @@ import React from 'react'; -import defaultClasses from './exampleQuote.css'; +import quoteClasses from './exampleQuote.css'; import { arrayOf, string, bool } from 'prop-types'; const toHTML = str => ({ __html: str }); @@ -17,6 +17,7 @@ const toHTML = str => ({ __html: str }); * @returns {React.Element} A React component that renders ExampleQuote with optional styling properties. */ const ExampleQuote = props => { + console.log(props); const { quote, author, @@ -34,10 +35,11 @@ const ExampleQuote = props => { paddingTop, paddingRight, paddingBottom, - paddingLeft + paddingLeft, + cssClasses = [] } = props; - const dynamicStyles = { + const formStyles = { textAlign, border, borderColor, @@ -54,20 +56,18 @@ const ExampleQuote = props => { paddingLeft }; - const quoteClasses = [defaultClasses.quote, defaultClasses.blueQuote].join( - ' ' - ); + const quoteClassName = [quoteClasses.quote, quoteClasses.blueQuote].join(' '); - return ( -
-
{quote}
-
{author}
-
-
- ); +return ( +
+
{quote}
+
{author}
+
+
+); }; /** diff --git a/pwa-devdocs/Gemfile.lock b/pwa-devdocs/Gemfile.lock index be9543b9d6..82df6896c4 100644 --- a/pwa-devdocs/Gemfile.lock +++ b/pwa-devdocs/Gemfile.lock @@ -1,15 +1,15 @@ GIT remote: https://github.com/magento-devdocs/devdocs-theme.git - revision: 7ed3a8b1051e6f03527ba0ee833d78f6fe3d3302 + revision: 84a3ed7f0df264a2c2086167efbd7d0545d329c4 specs: - devdocs (2) + devdocs (4) jekyll (>= 3.3) GEM remote: https://rubygems.org/ specs: - addressable (2.6.0) - public_suffix (>= 2.0.2, < 4.0) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) colorator (1.1.0) concurrent-ruby (1.1.5) em-websocket (0.5.1) @@ -19,46 +19,48 @@ GEM ffi (1.11.1) forwardable-extended (2.6.0) http_parser.rb (0.6.0) - i18n (0.9.5) + i18n (1.7.0) concurrent-ruby (~> 1.0) - jekyll (3.8.6) + jekyll (4.0.0) addressable (~> 2.4) colorator (~> 1.0) em-websocket (~> 0.5) - i18n (~> 0.7) - jekyll-sass-converter (~> 1.0) + i18n (>= 0.9.5, < 2) + jekyll-sass-converter (~> 2.0) jekyll-watch (~> 2.0) - kramdown (~> 1.14) + kramdown (~> 2.1) + kramdown-parser-gfm (~> 1.0) liquid (~> 4.0) mercenary (~> 0.3.3) pathutil (~> 0.9) - rouge (>= 1.7, < 4) + rouge (~> 3.0) safe_yaml (~> 1.0) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) + terminal-table (~> 1.8) + jekyll-sass-converter (2.0.1) + sassc (> 2.0.1, < 3.0) jekyll-watch (2.2.1) listen (~> 3.0) - kramdown (1.17.0) + kramdown (2.1.0) + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) liquid (4.0.3) - listen (3.1.5) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) + listen (3.2.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (3.1.1) + public_suffix (4.0.1) rb-fsevent (0.10.3) rb-inotify (0.10.0) ffi (~> 1.0) - rouge (3.6.0) - ruby_dep (1.5.0) + rouge (3.12.0) safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) + sassc (2.2.1) + ffi (~> 1.9) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + unicode-display_width (1.6.0) PLATFORMS ruby diff --git a/pwa-devdocs/src/_data/pagebuilder.yml b/pwa-devdocs/src/_data/pagebuilder.yml index fdb4f43b59..8bd16df7da 100644 --- a/pwa-devdocs/src/_data/pagebuilder.yml +++ b/pwa-devdocs/src/_data/pagebuilder.yml @@ -17,12 +17,12 @@ entries: - label: Add aggregator url: /pagebuilder/custom-components/add-aggregator/ + - label: Add stylesheet + url: /pagebuilder/custom-components/add-stylesheet/ + - label: Add component url: /pagebuilder/custom-components/add-component/ - - label: Add CSS - url: /pagebuilder/custom-components/add-css/ - - label: Debugging tips url: /pagebuilder/custom-components/debugging/ diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.png b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.png new file mode 100644 index 0000000000000000000000000000000000000000..c1b5724fa67e929e25d80ede77cd1879a0b0da91 GIT binary patch literal 78012 zcmZsD1yCK$wl$VOaCaxT2X}`AcXxMp4ek)!Awclp?iSqLHMqOWKP30w@4ojxswnEr zIWwna_wKdUUQMX1v=|&THZ%wb2;7&?!tx*>;K?8$pb}8;fh*O|Bxt}N2onJ*0T7VN zXqYFxcOW4AAYX(96kS1&G9X=1l`w*2+({!LV);MswYoqE$np#S4DoYBLNyB`R;Hn7 z{U8q^682S<;(|Ko>(we(HaY)S#LuVqV=ipfmR;6WzEV}b4z8@tOb)xF87?rFBb0Mw z{*k`|z9J%m3Gzchff5ly{QJc+Iq1^kvW_#x|Mw2?vF}hJ9q|Z$|Ho~r0bijc!*%1O z|NWf*ekeq~=llQTdIvFtu&z2pt|Re(zWtxOh#9t-{%O@e*U^ax!KR2Y^HBb)&Hs7V zmon?W`||JW6;Pl^$>^OF8UMcU-`$3iyode2u8RPDt$`BV7yh5)^XH?&x`QVFYux@^ zrxE0b$QNM{C;#80`t~lE0x$Ugaa|V)jF^GePmUAmzefBT>2qXMU7LW~M95@Z9E>qD z7M7xJA5}6_Y_2Mi@ASNC31$M6WQi+|A>w~MvI5sP#AkLQ(S&odhm;TNn0aUGi#QYv zQ`51w^3L>H(LkK3SGY0i%^|&ulh@T$^!}bnR`IpU+=~c~Mtw_(ly~Xp7S9ycIx{0V z`21e?$1@_QpAqq>3R3vV*KTeE-9C>>UaV*L4A%{nPD9|`WPCCoNoXT)TCd;pt^U}; zVY|4LZM?C{vVbxBA2TQW11exNSvui8LLRaeJ{#xB)D)RQ<)Bj0<~osR{jO79(aR@! z1F0sn`Vx9M0{yP!rtL(QK>GWpQb4NLyvpd zxRS1>@1ye-24YdiHz=(VxOZdtL;KXHIM5FQ&4?Lb;@WUE{wr3{$q-$3U^(s|khrmX zkLGuCDOj&yNo_++%_W(Yp3e+sj%Izq9lc*}QC&8`8k4BS@^p?Qd(v1*HlI2TbUgDH z6(5tk)vPSzO}Q@y#J1)(<(j;Pff8xF=d-dW8@NE)*Oblf z?*3Xw#CI;I0u3R-D~s*XbWb%QgRM7B$m6_lIP$VdDik-0rTw(2wG2F$9q*=XE zSIAiW>;x^4nYHE$_j8bE_wll6Vwv^t`-y;0;z{J*<25ASwH zGaUDK^H7&_$+c7)zV>)x-n06|3%cLrjPFnFkvTYC&}O=MJIz>A%E@uR^t4!E+)M@os0sp3G{E$>R7}kJ;^xP3#vbQ0#1dsB&>BKrU4;!NI7LmX628D&oy0YJHHM zw`oTdjO{Gx>ZtF}Rlivr;2VTQy*$?vpzO~R6q*Bi8c z+bzQXTH%Obw?c%plwY*IrXA!?SC3VGJ6FKyK(t^8X#lrDAlm&3Qrzn|RU)m$`PBL7 z==J+ODMcm1uWyNBZtjbyq?zJ%R${#mLRl0HsEtby(FO(LcyN z-W;&uVKZvd3XQudmkaduc}w-vO0~Hu)cPXw_7T(B_rVvR_3~4#HZX>V>+D|~C_V5F zyMfy6%avl!+&xL4llnU9&g*(;hI#eyl-uyzC^u0u#wUE-Pht7v6p7L9z zOcUk+hCnt1;+fl+oh{j6lA)JgbX)GT?n=T32IY{cV=e8ETf0iQ%&L*wXJQ0;J2$$ax)6;maW~pu#mQ4b*K%noLu>>!*Q!FLeV7vTr85*CG25cC z_V*9o|Jp!UBR6SBRpsonc6=jR^a3uj=?Uv405=??;MspI=U0i!2v5Yq@!5iZNc3WJl3>&AM@aOv20Mp6 zf26II@4gS*f?LFjO4UNA?PB%tc!m=ku{M|y2JrATE**zYnQQV=5tXCo9z{;+$5?D+ zXWqZ%RLSs%yNK!g(Eiyj_<0dSc%36Og#;yUU~RDILNcDg?D*q8sA9PJ|C=E6rD`lIOYs~_A!NEgp$z@O>C0Y3Mn$s@hak$ z?V(bUdrp2p>Cq=LfAu!6G7aSon9OrD^P5A(R~o@>X(_yE_;A3E>9gGE;GUgZJ8+D( z$-G_^Rg4vIeNCH286kqoosH<~JH|bv-70O~?2#vq>Jt-4>)~GeG|PM=sf7Q6e_wA= zzL=iQ5Y^guGp)OW%R(1&R`Wwx@Ek|AD^CJ-vHevw!EXnSRHpVGQo*{y3FUhp9X zt;C^4?W=Q8;%FBl8x(^yrZ6UVXKK=7=TtaPn2o&tFD1W%p-4XR?T71K&*j15){I;f zt+kdfp`XrzjIbc9`EH-NNsIk-j?3zPUsg5>aa}J?XMKgoD>|}xo;H@bp|IX@2*kk4 zVsbd*4(D*CrEcdEWC@lTpPh(-Z()j9yR07c4}lZN(8-ZMq7CkZY5ko*=c!=G;qeKw z$SLvZ_ulVZ?xC~2=E}ZT(Oat{C9ep=S-tvb-0Z#IebW|DK2YoLt9QOZuF?2*R)^i< z;?GriX)7F7RqU`ddeP5FFT8X(Sah#(xw>C=d!!xPieiZ9V)qbJ2mS-uWNV;0h8*-J z1mO|5C0W{@29G)o9wO$)r?!6KXE|K%9Nc#I&~=Hi2w|FTjp8|)9~eUK$bJr~Ooz?( zKZ6pi=%}GYMI=j0>-gnL=m&Rs={XOc%5$W0-HkDo%5i_c&y&8`w44by2L9|ZQ@?Ge9A`ZLF@Y7CNxb>ZZw|J1bY&4xu%|6 zyG(t#ZwMQ%*yOdvQA(>wX063xG-$R-zifNw`aAAlsT{5zCF7G@X)%k%nptvrcV)M} zLb7^5!j2Q$frAOSGdJ$02~#Q(JU_A;Mo{PpzH1FO!#D1hHLZ}2jFem2SgCce+c;NL z8oKizQ?C?Hn2|!V$|JIHXir*fTV#4D<$luQWb~%F=bMlYq_tRrK2U=&7Klmw{SQV| z76RG)kR8*nV9|0$&O#>{2V&9crV*p6?9Y4`H|VDIfd*M~C|+)JSXUv6erj_we!cUZ zo2YtmTdBwWML_WCo&I94a?+ex_l6e-R*UD^YKM^Xep1%8REDRQQeo)@g^_mpAscqf z=g7!r3C)G(MoK;X@dzFj>7el2n?-)fZ14a&L697Fq~TB@E;uO|f|>H)mlaOVv-J7B zzb<&aAB4j$;!}jK%(p;t^ zwD2f~st0Tkn^d?~i#clRdkL+s>EgQT=-ybX1=8Cyuyk5gl)RAIqn`GCD{!BC)cpuC z9n({iz0o>&Tx~wjOJ7ceS)EoiM$*;8Sa-zsdHQx_-9xv3@#xg(M&RsIOEO~XIR-uU zLh5UYu zKie5tB_o8kzQ%;~=0pY8kM;s`0Tla-EM6OFsy8P@?bDO*%d^qp!`foVG5U$B=|FuC zWb5INrh>oezvGUlf{o!3=^aiGlE{TW8mk&$s7DR-`=q*l&uSCX(+p*Nc84C{gUct) z=5m_zzPf!XSblZ6R>8#;e8PYozlFX+!_!+`l{V2pI-T$~4DI}r4s6RgFDCXXWU_{B zh5b<#3q+YXp7jn*S$F)WPJG$5!UL(+vc% zVnoYjb_&>L6a`sKu_OcN|AMn1Q0w~Er#R31)A3&%!HLp5K_i!2^CglFdq}yHQg4xk zs&0%F=D&qwb}LCbeBv^}K(|49(5Lgw;IwO7ZFh_l(hY5ODg5ldH6=rl*^QuAi0Ywt zPMk0l9jwelvOgAJD-`yhc44UK{Jsrg>Dz>jENJlJL6}rSfSS+50q#W(dU@A+1c?m{0dq<)`i?F7jAI(MCj>Fa%Cw*WOD)*B zpJj+kyVeU6M{AE_*2^JXO@m!97(*<~f{_ z_pX-Gndl*c0{ur(;XRmn%qZ|vf1RPk;yc(ICL@Yfh08<606&f;ZFgT>H;x}BHd+E0 z21Hq+oPG^Z2Av_};sj+37K5_MMkcpqgC!y3GY44_lVdY#W_wHKn-8>OPVxr)fz#hd zwG_8C`8_T@T74~3j$>kjN6?FwVe_IQ_ z?B-1#?2UGijSSi}Uc1LnBDx|vL1ffDg4YLW-`KZ^HWa9OZ$wM*b+nA zvu5h(Aj=1t7)w@9rMkrDIeL!NNUNaM8~F`XjA+7UZdNq0q=&zz znro$nC!_l5#B{I0UHa7RWJSh?1)AT8+W?j3qOA~UTir&SLS6$QLkZT$b@X-2E!j8p z?F&X?8&N_X)R1Nxpf$W3Q}=9AMUPvVXlzNgf&xnpbPO9U&k38_w|z9m$7U_CTP)Y;YZ+=-q0 zR(*oYHhby;vXY|SVoO5)qJU!u%&s!oyy+-D)d88<>eks%mCJTe>H&&d+ZURe753AadW*@>;DXb!Zh`#>!i*$d0;KpV#KB}-kB>M!ED3Y{UC5^h#Gr(q z5H2D=xDGR579V&8!xya1Zi|?6`(#7A^m50aY*TOT%AOS2EH{MmcqH=8 zIaAflF?ezpz+Yap1_YxAHmE-V5g0{Y?&M3Cdv#!}Tiq*1|Uz$Ra6uBn*=>XEW857&EPqE6_>h$IiCN)*h z4l{2>ji}uROxM$I&BeSH?;8gieLvlLgf@zFt2~tn&O013@zsYzGV$$;uK|IeiU)eG ztG=Q^42}$TFHRU#5CHY;{61LahFB8xtO66dL38u|^&3-?0!1;)CDh|J2Fq!_e=zy( zBQL#N$8*_Dmx8 z&0ySD3Y$y@|7QjXA%6OSgb(4ZXe(gtAu z&5BF!GA`8(L6|`l*5y^SsZam;uZQ>s`*)NI1yAEfvDP^g(-B0~YmUkT>In6ld?&sN zg%$LlZ`0)f({?(Ljq8zcZHh7-a-!n-@Mm-5F9YPkov_c?|3+RF+`htPwpg7Cm=KVV z8f^~ya#Gprg9_3i|N49<^0(nzzinDEl)u!7ng|gcT~wpqnzm*l0-q-}kw#74w9n@o zLc0AUtJUT`GD0iclK`(22iqSlQ3)9lAz!JD_7laQmx%o~VC^pt)R8!BQC;2Lmyfb8 z*U<)}nLKIIncQx3tZH_z5c*>Q^6K))c^42j`hQuvYz5G0bQ&9u)PMIcmEDfm>1aNt zrL{Fslo#==OeG8dc}+dDfS!!NJ&Eowq9-H=Lncl`!CN4M_#>2x_;ru~k_--;^$%Zg zNcl8YtLfx&t!7akkDDL%+k*lV|)e7nbdGM&$nw+@stXCy^%Q6Kh>C;9QTpo z@Hpe!9uBB$wH}!a`w>asSGMSNzjwbFAU7M!NY?0mfUbbqOi;lfjJd4+YkGm<-+!L?Q^rK}qD)vHo}3m4P05k8On?+7u31EOy= z!xxgjFDs0}mg=l>S6e-%%76{QVy+Ao14Aqln%&3G0ke9I zsesi|9jS|p%fnu7bbnu8aMZcsNp^O&nl#EGFw7;hBBG*``BG_n3np2l^z`)Rt1TQ_ zyP>T_pPF4xrM(`m%p+4mB8Wsm9^CYH#FreVzNWsO!tDSk+6$*xzTc|P`m{s-* zxsp9O@7ahU+1t^6X(tK)Iy@dKe&V1)zY+=3ebRb3o7XgDj9C^t_pfmkc+<3@6q-Is z6MF4p56;)diWqcdybqm-N3sk01po9U^u(xtq9^9a3a&19yVl`A&%>Q-q4G@9di8kp z<)T>j!`10pR-NTStP!k}tNdk8IEINDIgB76-JJkX>H5H0;LE@ZR?8A7She3YnvSgscnE)hbGefV9BCY&=5Pc_iBq}uFkr9|m`yjV;1>pH__ zm1s*-eeujopy33V9om&^p#`0Vw&!8q)2h~o|K4+WV~m1rC-tE5Yv_P|Q|~ z@x~*mdHG}lbjI6*2}(UGo~O*^MEOkT*Vm+ce0bnAtsVJ#km+{2ST+8{o&fS) zp5X(JK|EeHO8@*TeV$EvmXTAsgIU;0t91Qn?#Do_U435BpW;*Rw@?bws5!y`XXQ^1HtI-X?l*NPcQS=?TqA-7!^|YbSGzDt=w6>?#fv!qfuu5`eD?Qfi*bUCp2obWfCd$^LO~n8k!DX5BxenpZ z5HsvCugeK;0)^aWndVTlb6YgpSw&9l(bfLcX)eZs5((lE{(+X4hgrC2mPI6%SX=a7 z4s8VMw}gMKWhAgbI)?Ks8vA-0J&I2kD=uqlIn?{Vc|ZJk8Ffas87B5le~O0DBo(ni=bL)~-HZL9Iv`w?3?n?gQ~y|QbEK*Wa`~9Ixvx0&x$BN`^qTS!WdzDXq1fJhYkRC}lz%tX zL{cF6CvH==nn84(28ic3CH&CvI0=zr{^Dd`pdOc~(AakRP3N*svE>Uj^geG$u{U#u zJkwE)_OwIq>RQNh*x_9E!%vo_8ndaZP5ZmE4YD56QP50@8ehb~`Cn}!6YI~Nzkv2# z?v82X;Oq-Qsj`4d#$B8=pHBYx68FsiwY)KF+8#^avbR9c~YsN6Cn^`R78(k zHaLjoa4?=CxkU`h4_wG0U?e(YK37xe4zJ9qFRs{R z6O{6Qn~knbPl^zN+QI-G&InzWWgJ41)s|fPnZ&x;T7#>z|K%+!>cac}Z137RBC-nj ziUnagsHjl7sRgz-nP=PNCCG-6KSqMr-#NuKhdRbxDVN} z(R|r9JIZ9q;x*Q}I*Ay67s$8QH=N4%JNN>Ml}IzBuM~Bq&6aZL-b1k@&WNMn9qKD% z4G!duY)dOap3<~bs9wW}x^^xxjbsUWT9TdFqp8=Hk&cC_Mz){`3+!;D8@=;ZKT>U4 zyH7{!5#8e-@QdnO)%qAKWeoAfHahcHXo{fd-<<*a8-F%=^%t}SFwc6JGg($FGsD9z zNme>*wJ7u5bSI9XUP~DGo~od(MRs<%!D|Nl&(a^OTn1;=(P7fQD({g~QH9AW&Dt&o zFZTu&ePm#x_{qI17y1WIpCo*R+3k3&w~(nv!2kG4zPM_^R+aS^)Gm_%G-#ECeSy{l z%(;&>rdf#C?QW&$C5(pwEwnMwk%U-cO8Hq5Q7a4W_XY&mOU<2`8ep(5 zn%Y@v=Af?vf>u+Md(-U#gMx~UN7C5X3L0zv6v4MXf43Z4MV)L$kgM|?#&wB}{3jKi zbjDLvp}P^3mZ79sH05yfX0j^g*?Bd&?vwTC@D}Ve!k#?552oLKnP|QlgLcwhWl8(C zG!nj*=&D9*lD^H|*NazrlFsc-W6V-v6N-D2NEgolHLLQJ5Hcd}EtLor+8h zkyQ1j(l0X>a$AE0S4)zu>|8f^7xpgs^1h&3&If$<^aa#}xr<^tOtl)>O_9`vPQ2xF6O`nI7qY({^ziS@5fh+h+%9XR zagQczlYR{zk6KWB1d3O~R3t#Z6drGmOV4WzCI8M0ki_1aWQ<&a(-TyuQl?47$G5_aXnaCF67cm4 z*iC&I@&>4cG$9WCs8oxWNd2&nf~KeGTDt`$2VD@djhLLJFuMrus#I{&FrkY$c~T)4 zM}+kZPK?9_+;bbNrpRo*zSnbAZEK-wC2^^0r5`*2ujItUgt+NKYCpK&E^=U5BCUq# z`T04s+2luPD2hcT#lz_$AuKGc0P}{>P|a@xupS3R1*UuB*;}WlHll}*7WU5%PSEk= zjgS5m{|4c2gW3TBiqnQT+)>x+aVxL4#rFkG4dql4Nyo~^9dhAlc3bv9re`Mjlk`gg zxY6RT`|$bm3|;H~qm*oTJShL?dYcmNnVZtXF^jsDaw7+7cLda(57%f?gHH z;#8gl#`eN=KCyrRL5+Ya4R;cvL0el}05KbYIzGzC$XIaYK^k-SMd9T>T$kRy?*Ru_ zm;T3s;!5%1bI6grB$ zpIyR#Fmr=u-{eU+DjhfUkP=!Y*Mq6$G3^KX6nDh>u!JZ(+vGID`hV)-J_ZrKwaO863l$DVFK9XWpEym2)Rx(zm1*qKEtOs*i3T zFV%n8M7|I2H=rrb9Oip{itCNS8*)fn8uvJD6_eq;|1nTcL2o7H9NP!C**Q$YU`F>( z%Y3;J5q(o2RVSHGA#lCj*RG_wl?ECwkx-Fxb7}@+*1OtBKRU?vHy+X_Ik70V-^2P8BM9@mCAk&62DwQJcckvX`GoF)@VG>K^+69nWnqZ9f^c#%aIi^9s zSv{?eG-2y;+E{0mXFq^ieEb$0D>yJPFw4%2g@W>VThKz&NmBK%#=#GY{0(;)Ea15U zpDNFty2^oGx=w|o{=zw+EcK^9Q%oA0Q9OkV?+m`u>uUjlrVLhgdR(X*U1Jl~J0+5( z$%N2BMG_pHGQr1hn8L<#SDNNF2wnQMhzm$0qNXL0yt{d&6Yz$4h!lokP!{dB8(^iH zjq=-C?Kg`S@xTv#u3)W;Vwz~J5gQv@b=3KU7{SD1t;POv{aU_?wp-6nuVJ(J&i09H zrnYPg95&hQ`rtU5aIqO{4D_eM*}Ua85h-+fQVo-rQhHs9bz<}EHR*!1W@mY9m8v=? zTf#TXisvg^f2;gX`XCJ_N|`1Z&dY9kaPg!EMdwo^(!; z&T{91SecsE)0ZFMZ$RlQ3ozeiaHm~D3_&&PsR3fr#!D68Ncj39sUY@r4uj3i+>I?Y zEXy+5Fu*{|wt2c8Oyr8S!NGaG0&2+>@T&kg;6^w{7phI(gb-AuPPSVbQ;a0qY>9T7 zg3UKO|U^o|sf16tSVs#`<es z^ILBZs^w?^01=pV*+Phq!gaFeL!Ez>pmhPFaX`d*08k@-{M5iXH*vkS(vrWndkU_X z=k#HKt(G2Z^q|t-MEh(^Mz}y0t^r3a5j&CcNW+yoZr(j4>P&q@cw+AvLHWqvhsy!Kf~WG4$IpM zeO_O-wzh<)@};I&OQ0ugTF!$O+X3C>;d&7U^_O~`C040gbr2YbWwl5+`qfUFjXWSq zn2moIF!!m+V9*28YIRRw$T|TYyq985?OBv}Lim^I7)6jJ*Ww8eVPPYS= zOzQSaI*|)I+*U6N#!ae>RPHZU-2@S}l1VCe)htP$CZ`HFzY}d~SH>>l_i8U5rm@PO zlZ_Ng&RIWr!Rlyg*T&MlR;phgqT>qs;$`K>S}pCT@w1CQJtDlh+oZYIDpg836%QJB z6Ufmb(>=pV>WV&`AKU{g{6JI$&`3U~aj98-<9o~azQk{FA+i-2tM`Y+hY|ZOiNR07 z-B3~fZmFMAAfKwF=bNLg)?Gfokf_OL5+voxR9>!s(h9C(T9a_;AirH_hGt2I}m=5u?zBnA!%uPBJ%mbkyn zw^JK9Uh>P$v!CGQwEcDO@w9#J7ILB*l6u=G-|JcstO-#S+` zQhpO-icFxzas0^=X zJHZW4Pek{>go@LgoGhh%qy8YFPbSBmd4|?L70Rfia8+q=Kn7}$Vso-ky83D{%#!(z z(V89C(*qN4XH0~w>wBKFQCTlG)|)1eXKV#7{Jx9rA;;+&jfeE@zCCbXLN^#NpC zZ}97P!xD}Mi()3dszr<;z^*Av6tjmj8!N=3@meo}CsEqJA%hxi&>MlJSZ}RmzF1Rq zflQ~`u^AXR{yUmaI#(<@U;9YO53(A-qvqZkVq#*sJo;S1MLQw^p95TwA90w5KZLU) zCL!j(sh#z!?&0_zM~tN67<8JS;jo!yo4s!qOqlJrKD(dyU?e0lGc(6CJj27T$|N&J ze-u6dRO;y)K$m_~b@rqAUSx-WBvy-DftWU`ncO$u-Q6uz8#u>s^2DLU-Pgm%Un)eW z2RO_QSXzRe3cQ7GmhpR>ZM8dBno4fBW7d?5TSk~~K(f+qGtA4Mzij1jZ9}$vk@8kA z9y|QS8t{!(r!m#si$|G7s=+<5xP{FxwOn0@oep+Y3Ns9@(;uq26Tce;rFR0pP0tqx zV|VxUdjNgd!!$OVKy7DM)7r3X-&9K!Tiw}iAZ;j5W##T@ED6Ttx!JOCDbo`;k{4hO zsx5vQUYNE$K~UtXUb}?BC>*ogiaI`cYCV|FqdJZH-V1}F0Jv?pa)hpxtSOx764hMy z&|%b6&o_JaJAA>ZT+rE&9YBq z&OMkZQOM%;ivRj6u+6w&J}pR)Jh7+?fDTiYXK;8yX-c8gcIH1!zY@}rJ zcwk$UJ>aofr(Y;{K0?JTm1?k|wH*w4Mx^y~N-igh z+rL6lio0lkk+kG8gy>2l1yo3es6(kJcCi?nCiN#+Zur(YIA>$)M3Lbb>ki7Rj(2rK z!R&RsTUNdL{Y=qmAT)vJS`P=8{j;}AcH_R=?(C;pXkRi{bb)H#pyRfWg(DlyCpKj) z##q1RHgQB3zySE8(946v@)kS8NWcT|Ul;Sl*nGxhY!}lgZjlQS4_FjEUM*EmFkKOK zW2-(z9?P_MwLWG)y4{S;nl=tGv+atEV?XH&4ky%7ZTak`&E{lU@XK(3e323+s{GhiJsQeTGs_C1Wn#yd3%wjn&TO0Rh zLjbiP0qS;(t4LVUe@IdoRQl^VWYcK&_u4)g!oJNm?(1&4FdmPf&C&F1{q*+TF+T~V z8N+O_5-uZbj*8vE&LIujxhL^mMg^EB@~`wi;6_qcmA+Rv1wq{i|pk{ntpOf-svZT+9PYlNx z@Xy#Y^=1(Rdtsj~z)*r&v)b)5~(m zx*^6F=R^N~&&W4GEGzNUL`q)xGEfB!{j4D25`9fAtVA!-Um6rB0ODq+^7=%8L1`vY zX5{B)9{d}%``(CcA?-I{o~L^4O*0$<>xqOJ>!5m2oFwQKQI>if8F{_6= z3CbrBbEU)ue)p1#5xW@H!fj$M`emk-No3Ik+=EmM@fq&$#ZTpDg>E5 znH@<_t>Qk-MpIC8Ln37^I?{l$rWSWJ4C1gK_Fj*2k#boM zQ9A-Gq+cc@52-NFGUqjL;XUj(U9U3)3rn-{c2CzlZ!|ZnQ~LF`U2S6MVPx|E*nB$F zKL960W?e*kN#CY|f)MQNY@HZOe;sT$N=v&smFLqwzw2vhFiTuro%HJ{9 zfN{YJFMcBung-XmI$3U{>YIq$l@ku3E^g$#U3R$YM&K(n3aFIM;8gmcpa6z~U+`8B z;JsT1-)20TE{Yqt6fmVOZl=>}Qv9F+rJz_G2$UL&OlTF+4Z58}Btm#Y#!{F}iot{m zp)Jh0_aH?KzPWtJzIeJEn*yMo(j8rwTP0jqlX9v0f$PGnsfa&d8&;f1W2ejXmz9U2 zR0vugVyZTo47D?$Fh9jt8W%&+oi{e~=ZAfLX501>KBrg{OQk*~rfTT=HU;B5K%H>* z%j9*qo~aP9qa)cfd0{huB!8h<=5-gI%e1LU{uJ;v*GI9L=jPsIYp#ma+;<9nCQwr+gLve1gbb)_}31v`|1os1@DP#`c=at0jGOQ#h9!sTy3h)B- z7YU#iA-_>cA{rsPA|RV{2M-P3IgZg131psnYy=20STIa56yrgUBGwB6C_~8vzY2BK zSl{fgG0JfDN+rqxV%Elo9mJ8eBpjrD`9|9NgV{ecIT9`rV+^2#My>MnPWM{FIGlBF zL^EKfS^??TNNVrOhJx&><|X+|Gp9j1knMdjK2jTY2mZ{E#fz+xRxA518W@UO4q|pP z*t?yzx>k4A>w<%RgoIn91e1;ZV1XaXUavye*!Vt@OMaf?<0(wjoLulOy^7R}E)tjd zR2xII>$NWjCFO-Kr>h4+LQpX7jBlixUyfL}+YOw`4rFEvsGlpx_tF{sF_&+pfCxSv z%#~;DKI8wulV>+UoZ{0x2!cRo;nMaB+S#q9u-O9kVm z>iq%C7p$AeO@$)dPZ2G8R!xW@BE#heO4aBykIspD4sqoQ)*_W`x1Snq@hQW!jMx-c zrPdKmQ6cO%a8T9dsB45=Y4S}wpV9>Ao#akQcvVvS*gbTrXxUz}vGY?4=-vY&)!#Ugp(I)(Ym0)66l)qCx zdjG4%#z5J<^nN9#@{fd1!w;e$p}9V=C*eSsr?FtKST*w7{Nzii1yT}rXwGfKHx<1FT#Y#u$iV`;%|_m0m(T3>Ab$cA6maAi zgLWkf{pk+0ABg?f=ga96?bnsNW83qQcAf}(3!`_|y^g-9X5xg;KXqyE{>%*!U$Vn60&|FMa=q~aF7 zs=|z@2$jF6_ARUXz4>`M*`$L0#6-XJI$$T8tc}EJKt8(FtSEq1dc0G(C{&Mx2}d1U zRs35m`YW1#vw^6Bl8mRt_?I2&ko>FP$2Uqg`U1M8R!!CzPu0_CV2wKF@JUejq1Mvq znVg8^FYN*ax{uEe1~|`cZO_16{Okq)JW>dZ&3c(ZlcuVizFbp)oLuJPsr&WY0S<}= z4Hsaai91p?4Et+_`cokIUIB&5A6nDJ$-+_g*75aDqHowJLganXd0yae@)uOHuz z`6Ndp2Dw3rXi}kGi2c)ZVK6oBw?vz0&d3mTT5NyQKWT{*KwZfJCXJjOfY)Y7h%2R*a6$8@vp z#0Q99t!9fE6H*ewu9(oM`oEgZA45clKTLe7JirgM#C06%JMz(p78fNgV~jZWY^pr_ z*u~8R2~Z>x_RYx5{ys`CH!h)tUo(|>`H$d>uM4bu&#!Bm94tg<704kRcIogw?6I*V zB&Em#lh=plniG9dlbyFg3VRXz<_o72iHgs0a*7^L!Yd6{mOt&E{%s)pGiu4ig!qyQ zhK8*`&qSg+O2HukzxutS!z~@l4ORDAb+N-|8Sxw*@CP}0VF;d!CGpJmDs(iP<$#uh zSyI$10SZe1zN^n98!`Nisy~C&4+9wg+_FinfKFD3gT-*wO$EN=n=I`Pu8J7zZ9DVX z?DAHVMtXgcn&Er&OP6?v%czD~nCFr`TBrtc7xqjh1LaV%k-&c@8)#b!|Avkinvwe_ zXCU~XqxnVOYb`bS($Q%0GZx5T;RQ!#WK3M&S0dlXv#-vyzx*h%c+FWq;pqq9Y=VN@ z|t%f89h)^5S#P9OV^u^chN7zbNCT-^RL5WaGe=-3FraN`RZ`t|9A z=kw{#$}TZSvI|oT3(z}NMo_565}%i7=eEU!D9?+SFLt2{{RqA(n05)kNh_Jkl$@K% zD$*L@w9cD$B0_ueji=-{`lx509;0S%0 zD>K@+pbtJf-JeU^U207*^75v`1&q^9!{b6?XpPw{fr5KwVdx+^ssGXzb_$mKNcn>Nhj%6*o6BqCj)qH%t= zV>I_>(PCt_-`^ZBiMr4iuJPnTCMDcU1G?RPlq&pNn2nxQs! zDiSoj&!Ne<#Ib77je_$C4bdUjZXL`nmfl+5mKtEQmX+Kyv%k0|y@f{m5a?27vnZT7 zQ}QPACx{_q7{B0g$^r*2_7~e<<@biM6nC~&3I%(_scevEbbfbtO(#Ds)hRpzZl1veMIhIHkx4`y8t2Tv!RAhMWu@+~ELH%mW$PpvICh;v7aJ>1M zH{_v%#QxD4ek$uTU|KG;GL0KOW}1}0wz_;2IZBZg+^EJh)&O=s#h>CzPW{sXu3qay@Dv|%Yz9+m0mZIakC=hY=`A?OXm2~HR&EVBk!t~e+OS) zjh&l5++W*IH@3Ny^;xQqMw-XlXPa@KY@Xa)4Jf$zAOKxJFrUbI2bhX>+*_WWR)((E zCkb`l{1Q49;stL39?O3hwq~ZWySu;jBh)xt0+#@PnEF*i2xqA#Coaw@K}})4I;3sX zn@tQ3={~K&A78N$yy4&f3m|ddH-g72m5xUHa}1Yr;W5^}*+FvZ+;`PH@c{F3Ya=HN zEYd7fFp2*)jxDF3ZdN{kZ}H(~$>y>tO{qpE zswMkZUTZT~pyR0-n!zU*#3XO+{9mNr2-I*`q9ZCla~{@4iR;%9#hdIhq-8SntyS(9 z>HKZpXTBJ#x8eWR=DaP|hzt%4rma&1C#C)4N>2W2)%gfwLv2=7Oi6UDM?TyQ=~6tZ_gK8whPb1=Q>ufHdwmXEK?8Cx~C{KAoZ)qL{f4m4#hBy0*Az98e`l*L?eHnNvTNBsD4ZC~}lamJ_^dtH*LIZ^Hq@#W#> zf??5{H7W;SFU9RlaApdz+Gd5#101INq@0+E-xsBIZ4PGk6tS<830A~E=OUN`Zgp7ujQi^By#^i9e^neXSpOKe0^JUwV;5Z047(;X3JXdWZ zgJ%D@>@XI?^r}N=-1-)uu)H8>m}DF!>E%SRN-flBA+9kcmQZs;@C0`iaY zjW6KS7uiUs7b3u(kiqJYh~2QA5=AB4w7vFY%0MEK2;3viAc4cr{ zm$eAtgJRGm+_--qY-Ztnwk~j?AG6*k_#QvQ?Q+KmDOsUFI?sBg$!w&W`xVGsS6wjl z|BtD&V2iT{*KL8p-K}VGcZ$1Pad(H}UfkV^ySqCScXxM(;)6S!>9_Ye*ZBi8^CoXH zNuG7Dl)7NjsQloHwO*=J#Que%w`y~>)ftqjpxuQ#U#j>m!o)xD1GH6lBd0@0Ln}2M zPd;T|d%lrN4u;1rhZeOBghE^p+XpcZr4*q-EqnMvzVG+gyQzQADr&msh|rE99Kt?G zSW0Bu)~%D*-Ibo-2gGP2NNiT?#b8%TOR2aW_5ebu!XqL&L-r%w-v!yAp`mH(oLK*>@sE0oM3^VQ{gBJpyLy70>va!&+L)Ws|+43r@=^9og zWtiO}&zJ7vJ}nZ-cz%?AQks`1hjPw$ZRrlIye`I-;S$4d?;q~FngtYxSXS-6K;opw zlRi$OIB`GTfw1mnrT4T3*xk?6eoj!8_=&TDSD{5E*7kBkh_l(I2%`%ZEFRvW%@?R` zqFm4L+LLE)%E@8DLj&;9thnRk@<*}#um5jNoCyd8qhqO?#fOhy+JcW zh*WR#S-Y95pmLH-Gy&(I^6TSn=aV_BRi$pvC&ZpBD%+)9H>4tUC1^x0OLmx_ zs7PC0p@cpwJ3qQg`?RHh-_ibi=(k&rj^X33oDv4CCYmm)>YzxErk{2SmR^*6(ZRo6 z4NK3cK0gR~T%)!;jtLGI{U}keHD5h=L4cO>b4UiKof@_Yh>$Nd><^g*A-}NLazhAP zsA0-gl0&XjDS;BGgi^*2z0gFZi^jt-Me|=zqm4-)aRRQmk6TSS!!*PCK&%A%ONe`5 z?>IIgp}d6V&W`&?UOI;j-fljsjUpKgINC$^=eq*mem-*c1R_31DT@B%1PoXc^DVNd z9xRqT&`Qw6yk%pkph;mr(#!pugFMipXJ?bQFS{Fr;*>>dF$GINdXyLsfl_tNHtR5? zSVkBR_sjZD(ykFVrNZa`)+>hT{7^a$^pHxUuo0MjLJXshwsKu_{+6uJjS>1 zetq?Xf|l4DfcSMAMeX0Ei3~^sJp@azDRQpLgxfI(y?e8Xy|Se83Vfp3H?B~z%a!8n zKo(k)y0Owe~DTW}P zz665zip4SAfwe@x+vn6NG%PTIE}uP6lGl|y{_BMebzy6P7Gm4;_1O67J+S%1+0=`k zo97P&ml+(ljlNTMlEm*=#g-^qT|Dhbc^|#3VpmwDcAvg%d5n9_6`mlxS~s+Z)p;c>&wrcYJv z6Ib~8BnGtV)he8cK)i0+Ezn5whtN=~=%5 zfP+TEjbu-e3UxWCyk`ZtTYvO!~qFGbLa)|`zxDmK5`PndI_T{&WPKjW@aB#4OIv2 z+9b5j5B_Gu1bz&8{LrEt61{YGYjGD)MCJBtL@3V-iY17&Q^_j_rL=uY%b)%hxbZiD zaDgT4&QX4fpnPFst1Stg5fV{M?8a3@63eyVs-wYytalS6!vP4wf%Byj1tLtdUx#Cu znDT3&LYX)EdEmQDeUD!c{dkfsty-ldia(5km}Sh&flpSv3X-b5#u$V zp=>)M{z|piYjcP#{#4&r%EeQT*EL-SGa9-U--PXLo;%nZ z4rlf{QdvFenX7)QUvLM3OSF4Bx$mKFepmdCSnMGd8~dKlA+V^o3B2CVz)CHavN@K7 zz`?QIvs(AucF)oY9Q!fYD>Bk6d7T1hhd}13&N;{v+&Ld&Hs#*o(cBm5Pw0V2gYugktV|I3e*tEt)Wia*U~3P3x0{JYC@ThoPBo?DO1SXqjozu#!S zY^!=r+xJ7o3I#%yT?sq{ei?j(LWO6N`MflgraW*Zr6cODgK-&-uK6PGb~0NK3OB6^ zoh%S64SLJ-_EG{tVJ>?Cz>gm#N9x9CgbZuID0m*@kS_N54qFXz!a_ra!X>C_Ao$*;zzw#;>;tICXO0WM zw7Z95gd&ViQj)3!cuoUW_U+X53=#z0%VB8)bp*YTaF_&braz$dG+{J@kiW?;&N$-7 z8fu5hXgrwrbGS!uFyi18HZ0>K*GIo^$1Ue>QAUPg-Cchl`e&fY#OM=l~l-<1B zf!vsIG~!QR<=(U`s2cys^9ayvUu>>$qL;KffFvj_DexE z8f$WnLvvc=haqBTi~0l!hEC&kC-Ml2MOPQwp|fxVl4JkhJ2OP**QBQ)Y;?|cdt)eJq+>YdtWEpN*0e&K z@#$^8jqf5D5JLeSwg<)E(uFF4um>NO3~$V1F#jE)a-mTTiSeAuW=r3H|0x>|Z%a=& z@ikua=YH8Jx~1naHdTD50n>qnVfM^-B-J1xUMzD)Wp2-SgGB+;>DxC*nqh?TCQ5m= zt1LB_<<$eT3@ zS}oj{1onL&!DTaTbq_E{3_vh~%^ykKz2qC9LCC9P3W_5=t|i3QoefG}i+hGPG-W#Y z@i8W5MO^!%QGzunm9!f!*t7a(fgkwL>-42A5}dNtK1iL3lr#VoJu711-QD$jf7*{7 z3oN}a;@bx&Fzg+96%EVFJLDkjZ$9c6sssA;*w1oBbXK68fB-Qi>>`86M}S8va0<^; z&`9GET0`yLW!Oq`B>xkT89nhg&U8m?U zSz?x3!GeHWwcEbRTnR{9Zt9&wkKfZe!$v+u-G8?Eye~SFt`I>@pMpGn4jCB>22(m# zbuYdumcSoP7pMBZG+^Oh7uVl9sg_%a_+E~;RorgarVj6vL7{@6;Z#VM%Y2#*BRouz zaU0$co5^2Q?a)QGUvoRDLsncP1u7^hK@PQCVoVZ$mvn+-FLn3(aiAxdofaYkM(B3H ztjM3amloPtsRsmp=0mm=$vI6A0gSAMJT_ON%N;K%oVl-@SyL}OD5;tzly7SFwh|xh zkNH!#rB$V)%Hcgrgo~=>gJ+XEFjW2`#x|Ngq$zW$dATSP*_af?44PB1*Nln9*`W6D zC&3wdUAX%J*O@H&iBM74_tU}n1XRmbj0XdyEz}k9sd9^guZ;!zff{tj!&ihpflM_F zq-enP&{|In)Bws=jYg;;617^u<;D%w%Kq5wf3G$cr5`U*kVL+g;nNr<)|Eat8K_Wf z{%69dWbBowwxkeGy(Q{LuvmU9k+LcYb1(!$uERBA#m6ePX069kWs>Q$kX8?YCq|vW z1WK^uPP_;|8Lw;Sic{!VD9rGHYZzVFBxBc;uX_SANT?d36cPbBz!1W5m?Tut6uy@2KJ(9vl;tC)j>$zELoFBWptx@fzdqic z%N=QiH+Lt8&0&L!*(!#>Ypnd>3A%p^n%7XG4v-6*wR2wQL9Tx*yFG8X)6r$*{+ccL zDi=2Vt)uE>B|#-G2%Y|LLrSDyg;c;%z#3^=&BiLpHE)o|#YWHiQl^VHlw9^UX6kTH z*jCc>+fq7Ck&?L@jZfKaES2g>#t}Lj|#{?e}idA!Q!C9 zp@q*JKA!mc$si{T|^e~@z?Gs_2Fm~*C)2%iW zteRs<)V(B(hl1^aqhs@bzTL*c(GHUBm1e@tHiL4ZFQ9cftYIavdKZi_jXDq*$kdnR zp}bqS)>XO&2Nv8xrgN9~WfTNXRtsx1afD2_?&~M>8AoC>ss#svws7U5WNW!p&_nNs zDf;CO{j9KxVfUpluy(`@9J`ZL!+EEzr2}tSC@UI69!DlPv_TF3Gs}8-yn`qes%b{v z;?yy~9-2;LbILITi;m0(udT6{HJlo80;l#u8*pdWHNP!KD46)5{7gLcY`rf1K1) z1@bhO+o_0mc7#N}0Tc0>x(G|)AoA$Tjr#k;q-&&f>YiSbC#7}rY3OXfJg1kgMBIl7 zO72|o_HB`5%iP|PGP&Oo13>1NbRBS+vKbAP`QVvB$9u&;_%esv?#kEU`}oLttmdU{ zQN2IpAO}?~*+Igo z$M|cm8A!)3LeTzzMd}sH;L500{;EJ55Wttfb4Jr@1no|ttFiLoO_!d0(N@-HsNSim zCnr@OR3eT$X>`jS+T$}ed^Tuf2%EOsy7sgv9Vh_&D*Qb^7Y8nU*9?-k4QR$;x23a< zW(oFhdj><-)eRzN)xfd0lu=WDEvVi1h3wxiQWClmp+bH8&pF{92RmY?yS1fzpkhSG zyU`{ALs+hqPx{TVf(&8RD;ee_K!_=y7@0Q`#jUj5%2H&6=7tesH3rXVJlgR&fyOUo&@@3`}S z?cGv&=2LqMBH(IZlEg}@tf~2ZijUQ;W7{ZqHwQ8YaEOW>+tfjSrjKiO@(8Gek@zqp zTw*XRUDGHk>7hI&#(l4)fIZ;YLVdnxaxu0Yg)%ApwDftF*W?BRrpjl&>)jWUi8CejN@Vy;ogZpU}Hg||n|2u?$ZOcSFP z1y7!*RZJa7i5~0=tPMKk$oAxe8o26&`=t^ZjE$C8WH|1tc1wvD(_bcf8L&uK!w=7T zPr!Q4yKe2yLhx*80jzAx=p_Q5i6ru1mUwVJGC?V8duI^LOh+r_y0`hM4VufFW4X>` znFlh{mp@+>Fm>jHO%S`M+wM23>SEDS(LZ8{4`i(t_3HF-iS~^qY8Bj3#?9m%j9RyV z>=E~Zg=nVlIylY#-|02!&P)YLER`T163tphTG`k+DVN-A68jP3fAXZGrC9t=yG(On zXwsR0YYJEf^Wt!I{NoHjRvZQ}*|->*I4Xv{S4k(;c(mKIa9ID)tS`c<)1TjSrY5pI zQhK~rR(VH`eL3u&}XTJ7(ir0GZ@Q++e`A|sHHXY~K|QhbXAAki8U0xngeyct#5|c3c&Jq8^P;9C)9+e}ptS)dIlbA{ z_dQ3oNPsA4f@bmIC@M3OZJ1)zEd{EEgwWYm;+0|OBZu!(| zUZ1o(Lq{Ucfsh^|0552`UM36NBuyCajySz zA@!&|fRj{o6U$m;a5%{s*A!_<$tZ9YnwCYyNdjZWvnae%q6KfCxKz z05>Fjh(D$x8OzWA`R;#+2sohf+sZmPC8_TJ#^I&_MhaP^vO{|R0E-Ap*~d!F1du{< z!h>>^=6_(3e?RSC3J}?h&_GK0-$x0?llLT{#QN|{2M_4Ic%*S7qNa#FY$p2uUjuZl z7Wgv*Q^Ne5<$D=E7x;=J#qYh}^Nt`{%YOq)nD`3tPe*+@fvXBK6_4j)^C*KLk(;gf z^Z!L||7#9bn1hO*DD&ABmtCLJ>wW(8_V<9_amLTu*zC0S3}W%Y|2j*!hXpXV zw`Z}P>wg;W{>;**UM`9mitr8Jb2O$F!SF=v|4|qt^2FN!ild^7?l+W+?*vlS)kq8F zAd%&8ad(VGt4F?S{f3NmvKD%MaHT!dJuJ3EJH+uJ_0Xd$@^PP@7@lYR*qE%?vrk((;1@X zD#0e1O>aY1w_!19Y1tx2u**9Ko-(7<@mI2p|Jv3JRT2iifYr$i6jvSdLsBTCsdF{E zppO3kKGgmba3f~$;c<>9HcXa~5{llr#`L#Zk)pVGK7h~A>OItk=64n3vHq*2!go)Z z%~HkMW!>Q<%p+8kkRylRYQjC~Faz1J zAM6UJKDqlS-*;x^U)4~rpF#jfM(g)g&{faL`U}`JpNyJMp%BiML4%R!w;(4)g{}-kDm-}mk)zC4>j*KdJKhDQUYHh{fc0J)pvUeL3wgmIU zW#=KplCwO)Jut}cnXZO!p`xZvI)&OKFsr!F4$=z9l) z0G{c*y6R8!EAAcZjxC_I2|7s_nYhuwmM86^p>wWS*=)IHk+@4iRX1LdT9X)clXk|E z)djB6Pz+$z)9&$;|M;l=`EoKvOtjC#x7)MZrHeKDYU3*VxMTmv?ICU1QK3RC@$2bFL|EZ1F%nd+NI{Wj!6l=g1-S zrrl`7nKCjmg5dF0z$a7vpw=u{o77Mk4Skfy^?W3*nmEfH959cg^JMsEZ5?L~0Wl3p zL5ti*SGpo5%FRgxEyg`qQDQl2JP+rXDz;vDN3$2Dc(LWJpscEbELD@w&Z7!QigI=+ zcKz{j(4zcF8AvWwh~WbOWjKT{)&)S~Fc=EN%b)Vz?=SaW5Hu7N;)&so!?8pPqhGzG z<6j@IBCS`jpswFsxr4L0#gbm`J!ux@c3o@~9=s#v?=BK5ZiE;%)4p%%-s6k0rb&fI zqHA~XY^*jCeym4`Znp|4f+~v)s(+HHQcYSAH@fwCQ}AznM;OYETzs?L!H%AIpKcZE zoO8_j=;W>L5mC0nBC(&Iw?_A-B)Wr$9Y^C)4@O1NKPB3dJYFFzXS;<|wpSyx)YW>G&r^IqN$o z8CX{!_LZ2@dO7Z>6r7 zX07Hc;FMDhIb?u4jj%_6C&3wL#G0ut4-luEBj2VvWa`JVksvVS&rCaT!7avtav(sh zwLCoWbUtvkNOln-*p)c*VH7S5{WJ!&^s40JI5o=jPVmshEalu5c`pabC7{ib=BS>} zdqy3t8O*!2*+)xa63c0jMUn@^_vrbN9LAW>b>ar-;_&HF7MLbaBDqgs}6fli9=GzD${ zpufe)F&ff#rP&6*^Lhw>b<284O}av@Djy`-GtYRiq!_uSd^wIQ)@(Na5g8GrAWz0g zM#8$?TLCu9X7Vm(rB{bB>CqWOwG=8P7h6H>&Ds3MeBXYAM_S68KM0Wh+&_Qw?jR%I7?5gI zcuB#SR5Dk%9UjsONs31 zs)L_oytn)vXysV2Yl2Sr0F*1OrT^lzXDYmol*~o-)hqVgyE`Epl;cc3#CF!b({Wb3oIIz!m#@zRyCan!uv8x1YSVp*jz_PhE?Lh&m! zG53JR%6jU&=NaQ{RUD4vewTa7Ez;hD@3gn8!EIDGcHH*$I$zrrM&4SK%nw;K52iB0 zp6)8#P3!O%d>Uf6Y+OLKe1`Nar(IlMx3CYZip&*ml1P%+x zNF$X%F}vFzI=Z^5nW?_t66-bn7E7ZQ$VyFM>5Yu}*ux$xssTsI$FrQWerQ=V6vGsBt_J$3Nt3^`emCFD2^k*~EjT_~`rNc|Nr7yBIQV zWc>wCoXg=@-_MymYjr)EQs_;sRzD-#?ZUAu1hQAPs=>}JTHgZuSf_(GaYmZ$w#e@( z7w%28e5njg+Aapd1VA2tvtwY7w+x!TCZ|8KmB*36jgXU2?I^|$aFly z`jj!z^Z2+ZAA#Uxq}i2#X1gxIf^x1GnHSi@56ABql&=Y)UT;QEvsoBk$_YacIQRzK z0fXc72%u|4Xord(d7jiWIr&RfT~eF89(hJ|6hE60_10HiTh$- z3A3VmICy|!-~+Z6cOk^l;;@(GQqmI_(TYOXdP}(HZnM41i%L0<%b)KL>vdUgt``{7 zNG4ll5(W{oC5WLhI>~L6i2)1psPkNIDP7ICEl5FNf;$r6nzPrPEfHVQE+5@jI zzfC=$FH5QrykVa7Gw+x&8yfeVzWrr*)NSls8&Nb-6c^x-He@w~ncz(U*>yxh5Kyl; z9as`-TG?(F$4u|uF-8qIc#IXkT(qG{f&DyM%gx7Zs?ZCdaCJf1&$9U`{kq>vY_)48 z(%{JznJM(Q_!3yK7L(j~mo>)b+VB16Nw7vNb6jiAuM`7sKHRs((s9@4tK8;^LQ5dp zcVFw5Ynzx3yMo_ENjdxO~| z!j-m3>cI5=qPl(&ND+_>+^)CZ6<%vFkDcWqtj6N|bw{ib*J!h@*0J1BIf34q`tjfk zo+eXzf*jQ@l#UL?Gk%qi!VFH1Rl#IE-H%9x99nH7d%%r zPc@hQ*`L<}Ipf>jXjEW!kOeNYkyl%6MVeNI=iFY^%I{pag%?AP>*|>xgJTgSC%e2~ zOF?|p9msg2*kZd0c!mILXl%p~r3-?7jL_+Dk3UZ(OEe}eFjkJmq*cQ~odAhFXFyr> z!~^kldhO;PAoOss4aDKX=L~PQyG8oLhozKd^0>t?p-_({q|s|N=Ki4gKH>`^Gyz88 zxo9BJ4dYc(J$bYjgr*EYlVL*;#T}B%B>w=dmdik_xp&c>mrff*cipGFy^SuxNw$d7DeyH)Q=G?19|FBaf{WurfkGDr_| z_$lJPi*`x~0wA@^o#X8bL(XD5*s8CQ$fyvnUUOq!4h*FmKT*n`tJ12ik&(hWs=E9Z zGAmL|1Y_ytCm?3GA*i@qt(Y(+7D0 zpd=DR+O@-OwPR%0eSwF@u8?R+p~D&|5^b^qM60cwC}TM8eb0~=hYJ9Agq>6CFp(0f z&Xc;=>`o4dCCF1da0>a2z`2XFTWaLMEroClX7zJ%K03ITCQg zc?mKFB7I7*Q_8bE%~LuGhBa+)39LnT(Y4pK$I5StINPtf5|K%cFb}GaxVAf+OB~%O2`D91KoN|vewJ7_u-}J`Z&m&He`bGc+rU`#rT1v z;AXzCZ%`l>6n?fgpO+s&oTL7>ck<#d$bCj2BSEo@5kZyOliy)j;SG?Y*A|Wiy9@;a zIhDb{hJy&U&fHdd`D;9*Ls^GI(#JR_Q%b}z{QTQvBatHGa z|2h8kMFnoVw^4{atT!w=#R4`VUYDqmi8Q4Y3hIqlNQ`lz*8KO55phbZT2&=t8~4f& z4Lq;`E`$fqYWtEum8;qlfxp;y#e(K){-~8S$in2sD-Fc6Yr@L%8_HKCL!(~b_4~S6 zNL~Heb2e}ec&V2Z@HlpPxf?t^82PBsl+sH9LzrE<(km0&Oe-usOj>(c%>jPrV;*8p z#p~|cqa(lN6R0hgBS~q63Sj>uhlx4^o31a$z?9ZLT-=|K+L7^F#$Y}nrShbo?5tBQ z3Go2!QO$r3ip?P(qUBD&i(H_ps<%Lw<kp+7$wf!g5~q|O2BYWJ7C$69W$=uMmE!c zA~MZGd9<2e`j_Yiq=Q7pP9(tJ^%lENUG)Vy*LB@Z@hsYxg?Z$C6VCv zJrR@Qs1z<~{3-kzp9Ssgqfq_&#fn&yz^782jB5SY3t@OTM@`e7_Jv>lX4gN@wHr;8 zMhk;-BEKy+Id;2=>JhI*AH7pamQE8{4{)J401T{CAI>|LD>>qrJ)IZnI!W6bGzC;Je<|F$X z&<1!(FW94Bl)d!AIQ%h5FA@QC?-M^fJUIJb54R&F=n#1U{h#>y(DtDe7^uMW|DNOs z9`UL<*Kw-LC+Lf^xEMLjJLxYJ`%<>fs&C#WT$ZF-9H}fJxS$?joRmB|7f$Py`RNAA zdbELWepC}?eJTln9pGn+@*DnybQQ?PaP)X-SaZIvSaZJ3_+w(Kml(4dlXp?crz%5- zzPxE{9rkC>D`D*A(=<+@X~#SG(FCN<0${=X4f%u;`0(!i1*rFab!7$%_0}-!LBP7A z)zI9@iX7#lFPm6GtHl8;QwKcvdtoJ{Kl%2yf1L*VfIIC(I5G4*fO-KZnVFI1L zA#?>+*4>!cD4TQm4%SnC##o6px$oG~P_8D{l4tNfNY7)X=^-0B^+&j#9M~cwpBAA1 zwtTQ|l1qp%E$IS;%5obn`8iSb&vT}4 z8QC~`Q@-ak|HfL+iG4+pjTP{f(iX8a*4vO|E$ve8tVvaCnILsf{7q=eQDY?0pN3#g zDdW+XkC-qFHkrwu(5Heq7xJ1%DxKk3%UGXWQ^%MAlR|4O)~{vmwbfPGR5j*K)%WSZ z7D-77)mSd7YkdOS?I^dp28^8PXw`$L$V^!83;iOy#YAg6=nG}4)tvA6(>2t8n3eG@ z6dU+Rc=O?1WI+S7SLXII7q6~A$C>2|mU_+`nRsegC7zJdZvJU0 z8Q^K(4S|k;qN5(;9I0s^Czx8&M~8VcC-Y(+2!_Cx3EJVKuZaYo5MotV9M`e4wSf)SQ^yxjE&d^y#C~F^CzJ(8!AXyc~Hs#;ivoT+7 z_)XZapg{y0eL|1~`59Ljqv~&yChLjCqk7O%^;ZQg6%V(#5AFnJ7$)Ai3sa6!0)`1% zYcDo=3tD5_ZM0<9&{6ShGpO$3nP_#W(kZIDK7-3OWL(*&2^`>$U)(?a}w7-nMl4|RB~(4`^45NeF^`^+6)GvRelA2tUX+5p1xLK z8+Oz?$+8nJW1=4JSwH8}0CFb8J|Sn}Z*AwW*S!YWQ>TuS?yRec3KpH}3(+d6g9Tqb z=45J4Bxdrk7+&hsn;fwgX5~ITc@2dfLmR1OHcwZ78||$(HPa*7XeWQPqspOkoV_CI z;2DVdyWwxir0(>YpRd$G$&tcPZLz|I518nybJPsK%Ap>5SA4B#Nj2#gHNntk_hYkN zYm`bXDeP@0O2#Ap0Br`a$k5Yev9Ym*1e2USI_a~QagS7e+DKsg+~VW_wtzttFKlz? z3NdfZ^&)b(c&!^XzN&HACp78^DSe0%rI0fL!uw*M=**}_?U2Y0^obyhd`cCgCJXwnoETZdT`YU$!xvdkYiKi-y@3;8~gP--j z$~GI-wE{-W*_P$;;`u)^JVHC4f~DB(FM^|z_E}-FRmuy44WpHdqNwpGstp~a?uIq> z>kXsrk8|WLkD&LqH4ov-(!vyu78>zPtDPQ;^k3OW=xF;rP|gvL-&QC&ZX3Zi-24=c zA0AajEpOG&b1Z3kju~E^ri^Wx*9z67Lc4BAtyeLhV*`;r>O99X}|ta-IdbU^crzu(moy|YuV7qh{jLGu>pcDRt)ZmIV}QxG*VR8s0iXeJTgZ|Lc* z%J)@j**@Ek?+OTiXdZlI04n~YxKJxAeO^cqOsQFhUqXAGqU-h%K0tAHJP3pZjL#Y* z->ZEv&gr<@9iS9k7&a6X4onmdv+xst-<=BmOtJqL|8pwvzA}EbDPwqLO$2Tx9z<5E zpLs6xXa`kc`7Zr+$(HHAk+cL+L@e-yR`}oVl!XX))nR+-xFwm{Vp88jPOy?OdYR1* z9FWa+GT1Chq2gy2j3@|+4E+3y$`Ei_L?=f2y>J45G?}OqxoDXJP5-Et^zwVf5%&o3 z8P~+w@8~CZpVp(%5rCnKo|#QXQ~a7qA^B^KB|CsgZ599FmE=^co!VF~h6}`I%p;oE z!=p%=S!VvC>Ls}NXh4+C1|#d12hs+OhsC-KN(W4YC%j=!qN}^oOep$3@eAvOcG&^B zFesnkj}ni?kxIxoM4FA~jXbjjd+kts0wZ=Fp{r=$PO2pO>25!+5&G60m8jHEmKg=>?m0fyk%&P=6;p<@ZbY-}A8_r};k<=CdP{3a;J7 zpEQegmFFUC@Z5R}69Y)51WZ^p#TKT;R;TaMsBHFp@}_EZO0Y#;^9egjERe2kc{Z9F zT8m{eVBigX7gd(V%&`b`NS>tM>(_(}Y~u1QO&F?bEbe&2=+CX2Sq%PAIpD|sW+dpG%!j((NyP6#sROBEiUV7S$5*Rk0DlG-*RU6Ah(`wFp zaVSnoqj|_C;#2FhWW7+?*OFxS4lGS^zjNO-HAqwDojR5$AAVvcrLrp8PMLN3X2KOI zpBKRP9uQO13jz%oDxaDwY|)QCQoSI+LU(kLZbz_+=c8f?e?l&h5%ddFbZEeP_kH;6JKG)Yz0JV+$V<$Xe0OJ*y1{`62pUlPB! zEL1PEUIg`U%cRN0r1JSAwWKgPpOhfk3jWt8Q?*zvt<`X+W$=QsRu5(x^}fEiV&QZs zRw_9WSQciFWAB$GCxIHNRm4|64R-?>U zOjZN;N?xip4b!_#(28s|3c9F?;%9`J4Qgp{)TTWfiz>}d2Pz$5%ScRw_Nm3RHGM00 z>5iGo^QQzU5QfxpS*m36qy5h92@v-?O&iqk0iMC5IiSP2IWuJe?St5^Fmg}s299-= zog9yhrfdC*uoI%MHZ5R}SD$rPR%%MBO>{rhP7ay^g1@j~06F`jctC^uJ%mcM%wUn@ zxCtyR%HZa3;g((KE;n9wPhh6m*Tz(U6q0L-lz4R~BNIzj>8&{p?@fpz8 zz#>a9Y*ztVSR;K>xqr1~=4?5qYZ-5Xi++gd~kFwDKs-jV96kEHp4&D*=a~gD+ zZkS97^c^Qz@4z&~!*PF(af5yeynvF$mMz0uJov|RhLsna9ttvmvHax&TE%XSb5Hk6 zj)164FypsVtHEsk{dVo^TP==v+onQR5in~2b{nSC2>SK-^2FPq?(;kNB>4e` zHOsfv*ai%A87g^Xz2)wlq%&#Ur;Cb17-)RF&P&2Yhx&Z1(`L&%MHsLOToKM%ih^es~|)9|z>NG%BUUm5Q=~rT&e5;84>LpU5z1 zfE@1ufV+~C0j!z46u6)N6|vWfR)f?5ObpH|7kZN>pS877F~ZZh2L3cJRk&QZ3P#3| zu#ReRgtV4vdvAXZRQ+lpVuGw#rN{Q~CI=x)iu&7?MpQ6^EtRxG(%+@ROm$yj@|zjF zWds8A4iXkQ7{`CS)>$ySs&FZo{ zTkB`}>1V9L3*xO53Y93Us?6cX6^v5I7p@t++yub7;L z-qfOq2M8wUd$(?;7-hshh;`lFs6|nii6dUY zCD%G#thuy+Uuf2wvxsN1w`EHlzt%#Uu!itBZ3tyToBR{{7S4v5%oP5rm*BW8`Y*_XGSt}m5n0~mVz{j;h1~UV^RY?f}H+s zWg5v;@c(f2&f$4<{n~J2H%=Sdwr$&N?4+@6+qToFanjgUV<(MmebZ+@``-8a{h8}H zGBXSFo3+*{&!@9WTQQKJD5kMJ0{T$}qcTT{^K;p6`7uxj zV<5*X3$CzP|0aNhV=xMKLBIzG9hDJy6^Pmz0|!k{Ca|Q2M)Trl3=_;lpivG02}vOU zt)jNVV;~URA`l?~4-X>vihLX`5md(B82>eEiwBZ-8q)AGNYl~Wh|#a-Ih)`&hZuJQ z%KXCoDRuj^ak9SJl3I-prRifnqo|5lob*-!{4tmFG06{zu993r9>!0KL~eXCa!bIa z8l9jgLG@*5ApEO^59wNr<07nkA!&)m4Z$?}pbR65#peUI1QEJ&i9v5gm=r-M10mtx zZ7zWfy~bHa*~k!ys<2xaPzCSXP$D}T*6rrZz}L%JWCYVm41a%n{9!7VC<24&9SD4* zO@6Y}>8OS5ciLo|CA<+P=*iS?4O?zG(5=^ZsX~=yB8b5UQs%hb*@P?(43Q8cU^BrX zHRp|XqCN{^(HM`v;NRI2yRdJ33_d1E>iQuHrVTBUARA00Svma?hRM9}^Pj*7CnPaT z(1+R^d&V^b2t==DDebxaB>AALwJhb*hTT$4nb5^FECu=-5iG4`B^8UrIn) z`fDw50S&lMw1zLbySles+VpgRoyeuTs5ULib*kE?LXAnYsJ`F_K$PotPh^M=F>Sc& zfDk)}(t0vb0xNiY*x?P{WFs3yB1KODon9;-DNcyp@k~$awG>K0!4N%?{(KD9J*)^Q z@E12e3CHEG3Wo1Z`TGlql-@a^^!Vpl@btgOD0^~HYGVBi)LxC;;(6gIG%xfN1GSVW zTk+>}cu6~+_xGk#TZvW|##xVqFET1m$Z7ZV)&CPR6`7 z^%>t)qnje&<1=_fUl49%mRl*Ygpyi7SwjRm+$%eJk0;g`7hxOwXfU>jPn@(O-_$(x zHb0TcL%H39F5E1qZ=L#(R-yHY!>L@E1U6Qtxx~v|&dJVN4K+xJx`E>1_JTj9q<=jJIy!;dcU<<2OaK`NBBlOSb>K2tp2F+K$ z&%mrVf2=WZv0J~1>dxWE94EBemVlc3#V4I2Q$SyEeHN|dew9+kwR#W{ympgYt5qhVi=SajA9|*FULor?xtG{{CJG9_l= zt|U2x#Zc&o`B_O>luw4lNd}ZzXE1y|2s|F~WgD}mfwDTLN#U8x_)32SJk2-r(7Dd_ z;yCRR>wL;GRF>J8E`mlX z93p@3e4RpR;jdvxpSvP4F4-sct?r7Sb5ImttUsP!a->>1oWw}mSZxtp3vk7Gfj|6n zuePbbG-L0&o}W4R;a$}_uX`71hFCBjJd!m@O`=$eOsW$~a%@)>4U0y^z?!?880R}bG564mS%DZA?p8 z(^D-w?kQNhb2@k?<;l zahym5(*j^}6&Hu|aFNVaF5?ZO{7|AG&9-yPV}4s^U0=l_J)!4jNvUC}>?tM`+GRlQ zDIOxolD*2H>nqq;@%p8Occ&FHjQH-cEP2&PDqk-% zv_exUl`OH^qTx&4sCq!>;6DosxrUz^L=E(Ecs|x1Le+U?D37W3KJl|E4?^uifszoQ&#nG);lND z1Zr>lP|APt$96QW!(6nj3;F70`C}5-O9wX7V4@A+yCad+hM|R1#A|%ecLyAyv2_@G z=i-7JRKTLjJ?^EWjGL7v*OQ|7XAy2S+#|AWIvdaJFvi~M-|Jy}w)MTIX0G)eZ8cF4 zZw_QF<8;(3>tsYH zRADhqs4!F48^1KG*TZf+d(|oS<5edFe&Pp%hfmiDLtiAO33y^llez!pOvTfch{Nej zgMwh>7RDuQMXVpsDQdtc;$n_G+2wm&SU`ksLJI00@adhQ-tDTlnTwN2>QxQtmy}eG zz^C{MWR-~sFc?8>ihV}p;RDyW%r!v~yq++6c2S<0Mva3YXCfsPXo-MwP~meaa1zj9 zY=7vOs4&(OA^9V)@kYIFNs%?>=HqbG@kV}KbL!fOEJ6(3+9?onq@19k7a6_FMuF#e636|3ylIr=Y zK0@tU>i>HK5J?7R0V4UoHw^{>N#lYzeF>HQ#;N1GvSM9wM`xMR3f5_{qJw`ki=bhE zbrSjw=2KcP5Ih9lE|}&G?qc5T47EC8U*s=DR;Q=ubmqGm4zV%jdQ1cAMq$;3USBeN z{I_HNw>?upXQfa1jqLzG`40&bu=2%tHQN=wV6(#_XsfmI*5t~f)WU^`4%X>m7qIBP z?=aW>b~|y#9`LZxD5W`n_uiR)He|d2j_DL6n=_7Pz~L}k;kmstzO1{T#(&Wb?V=~b zFhyTxq(0qe{Z9`PAjbji&5;Ku>G9&rZMSX`$(tth`-Q0ijumNYOX+-$cjMe}&pdCgwe;vD^bcVK7l3xB$Z21WbR^=6veLIE1x z7r3NdopcP^5t}veMU|9-1lHRzuq42V(~X~@YUu!R@LuP4K!uA!5C&l;S?A%~#ZV7^&GtNY?ZCW_B5 zhHO1)x!H!WuH79Y^w`q#&`@r@?1JX~l0uMnRh3KwxXCXs))1#`DlEEHaXz6kQ7bB$ z(<{a^(P|%5@If%v5o}du(~do^H8q#cMrWe+TaI!`{@>^*NFc?5H^lK!Xv&8Fx``6l zZ+@x6n2qXKdZjCr~S656_pAjsU00o<6d`b*g@cdY|f%N%3>vUa7t~_(+|7D zWRIkJy0DrT51y|Q>0CT|+$YqH55%YC09k(?o0EA;cgM;n2$=)*RKZ=}>OuZHFaC}a z4=X?(B$Y?-(ERat=4*okF?hpf>-bK-b7J2PG8Wz#{Lfl03_?icz0wolNio(?0iIup zCpPdZJmmZ(bHmz-noRsN)d-L&SfJ6mE<=JLwKNrhJ}0O}rZBYu$k+&9GJZzb-Os+L znJP&rw#NM=V?taWf9%Q49B8s67FRr*;w#ls=39`VmjBn(B|sjg1qSN?gE3u?hydB` z7&p-$D3mgj%y5~tJSMqTWn}@5 z?nm=p15)*eWi^)ZSTd|wB#Vdr=~Q5l39{&4s8+i=zk|Ay{O1MvZ?_R3BDo!dI}W~U z-ySC@H%|7YPV$EpJ?_o(n5%71?5uS{XEa@4Xr}YuiQn`KW;qT=((w#0JD|#UFvT?hB=FLmO-n>V3mI5e!t_t|kRV^ADC-NC2{_*|eWi?*tD?u3yoq^^&mEWrhI0vt$YBm8x;>|3ksF{;=AhiaW6xuB^V8jVe+odBrhZ*$wv%w46^iR5Ly zmFqcX60p{*fT!tjRG<>NQLYB%Ka-Q<6uKzZ?WUD9{M5?rR*k~BQkgDSnyzJlGVqD* zDQ|-J2v_jlB}JvRaX}e`q?@HlzW6&?u+Yix{Nr7#KTRz8WTL!_`9jayZAFPb)sC^M zVI7?MNYlk72}3P)PFIPNXfDqz>C4NK4(as6{91(nl~{gv1d=q5fLM6%#;85r|9hHG z(0lEWbNo#HpoOSM9tt$YOe2jHdQoqeMCERE1u9dDc64ruwaJY%axp(Kz-RY;=(Bh@ zALTDXVvOw)ZMh=+IPe~bk4)|1t$L-DtFK8}0tpMo(~8h46l=hHSZ*VH(R2+^2edwu z1}ztGrXmRHBx?86IidfW z^0ng(in$1`4Q;uXBwY0vky~Q5=ywOHKIQ82Xh|95yOy5c+^O|NY;-`bgj73@Fbb$06B9JgIX)7ktJVq0cvS_^U9j;3G;A&pvNo1 zA&1VS3PIEFw%q|=A=At%n|Y1E6_y4x?6Y=>D4Y~53?W?THN?-HdP7WPAS4}5^TvTk z>7Sabpn*K>h4vAo)#yj8a^8t46kjLVOMe#GZ5Ni1QHQ@(?}O0)o=LraG&i|W#)0V9 zz2+ELkyK~cs~)vsqo=47D=SrerCo#K#ZmcNJCRjC^Z7xRYNW_`=w)JfVPmlDe$!z( z3k}aa*3`Ef&;cm5q8u1cfW1f~77TY4ac1Lfsv(VmSkXf>iw|3Iw zOuNbbvWYLfiuvVYnggrt3MI4Tm?Eige#K$+JN(fvtvQI!W6EYso5G#M@}b$e+Z%3# za&cX#LMx8nE+e^oYi{X-E;UlhZ7NgtxEd}WPw;QdZKRy>#c3>lANv$+10s7{Cgd0K z*kn+Tla(?-Qa3ltj8*Am79!va5aONXQWjQSwvq(JdOS}I-LAUFbHgKLr>D=zjel}a zFN@yR@VDV$>OIc=+5NX{u-4`ow!bBn4}z?)d)=VJMn#qWRm1i2q{Q-jmqVhOM#8_R znz_y9UD%yF9o@)@fukDRV?FHhui-0b=IE5Gj7FF;@tN{~IGh%;C1HO^$6bElwup9T zx5*c~E0r*z+B@rcFS$YMPr}fvFgHq!Eh(L3Z9}#yZy|-X*!#b_UhFl|b`vb+UnrB_ zH`C}bx%zZL)F@7A1`o#Ke`Gaju&MvI0OqiQUuPTmY&NiYPf>J@fLX_t;_KBK1zA8_ ztr2OWIz7sj5qwqWJELH6lPVxs^tspe&N*fvVgP974!!9*QbK7#kyCYEUl8Xz0SV9FwM^@qC`d z7#P#UJ^5ZwsA$~^=~#`rc}0Ijjg5CUmua6}hj8tzeD5k{d||Y-p#T1Mna$wQ{te<3 z7NKaU|K2I*4PPH@8+(RHoUGmivzKC0HbhN3G7h?suHdpQA`PQAYUA(7tD2e9I z6wgch(u#cNHUqOizJ;MFTXjsxL_R4FT7rl(T@xc zh5+FhVzu4xT;A6sQZEyb>sg38h^-rXqBLOdfv;_cAIN59MY6dmS-x^nV!lWd@*?5;#_17Y!+JrbRbt zjXkGo@g*`_Nb5JXjy^2yX0*gRAwB$!S`5__h>DPp?5#Cp8#Q(!bc*k3_jD>DCtX>r zN|u~n?2aFNX+$p$J`9|y(!fzzow2AUn=XR!wH*~R;#$c;)GqcN&M-aI?n?H_n)gU< z_@VKl1T|;?#L?1k$wq0}m`X-MM-vBhjLa&MFRQibI<{R~Ly4adqK8T8KHF()7IB^x zPJMyWyd#d=SW?d_Ha?e6+fo4d^uh#qaaC|@{P~iTQU(DplNC3&>y@?zxC}RH;0H@@ zSlqLiWO*g;saje+Fo3AZhHPn7V-8?t>;*3fb@?nu$JBM#TaaiK)6AWbbJxamqh8_4 z^eZBY#x1E=sVL}Qd9LHy^FaEXR2fscG>L`wHV{_88fb~+Ni$~L?edgQgh zTc)~|Y1vFpr9WDBoJ@m$W%f3f97UkToxo-w)QSR__d=5x)}+hBHMfn__oeET%j{d`83Q3W9`8-r=bTlQfH!({kRD6T^&AgY zdlflM8{ywLEd{#IBA>#pv0^xQa!2xZ`pUaN_$rVFQZZgM?+QDY0*-vldENkt)w;Sp ze*Y*uKOF8MRN?x#$q|g5N4}b-M`fK0i^f2yD(;CvyQ{E~R{epb>f=kiz{YX{qm)D$(bPX$@3&#og16sOa)fB3yrXPs;V>fd zNVjH;5-!Hf!|$@p37<%}Cce;{WFbI4!9zzDhRFQ{Cu$D)(&CG9Erj5i&ne1VT|My! zUGFC;^Oe!{RtXaV?}Qc`Eok|gZ`2J7Yi{tDl0!Nit+n;C5(GA1_Qr-D(6mQu<0~IGLh)H@{ugC78a?+m@vE2_?lqBD z;~ru2Soj+*`bY)-1otVh7zA5BRFlrTqZiX612a#B`| zuH&+Ux3Fgb5U*-Y$OvUNHorxiyVSqV^H%hnlo2r~n4;jMr+uT9rLC@5Y#qN&I?Tlb zg?WEZLO~S5svuQozgHFdU^1W)~v-x5H!_z4V?Qeb(n#D9*OfT8(&9Q2k;kAFf2 zS+g+9${{ra`=s#VPq}0e;}*zj+Mt1*lCERK{ClS=pHjUy&Aj7OO-*E*r4zAeG8k$X zos}q#2nntdB}{AKPIVQZHU?BL_pWWoI=6r3#E1Rb~}#+f8u&ov?@GB3s_Lw zeInkb%<)1hk|}o99WX(#RSn;;Ok(Y+829%j0LtN`nBMM|+|BbmDSHf6R=P%}$=lrT zT}%=Q%hF>L<}snPqXQA;mUvlTe(S>o3%(7WnfQdPjKVwmr5}>l8f>MLGL6@>z0xN- zrtYIRPqCj0`a-fDOJV7|d#!XPi`?|}skRSNKG5Syv5@>Ms9B-_M@6RSuZ#hDKwMqS zyfu#`I&#mL@bYS6v5AM11Crcb9ii|>-R{20R%omHjp^}bclU2Vg|D0~axVS9XC-;R z2;=T3o?%qfuex!H>V`Xn_~uV8DOJM^=QP5ot@xM|5%Atw;%-!Bz#6bg;0h|4R8BG6)A@&C%jV9FTSyE!dK00?Ci}kW z=uf}=a03Wvv;vBWhA)_E^OxCB^+iPV&(cO%Nk2MPB0TED$rm@~ zQNVe$?E5oA>M-OP5h2qrO{;5GjMcm^BIXcTCd^`)C~Z<<%GEaQ+AfT(L>a3_f-O#$ zI+DcL+4gPrl~&@aK&==E3GypBxvX)ln8dBj_Zy*82vIjU$EOr<(a4kDI0y&ouR_tn zXS?c;#R(ao!(nOsZ#V+B!zXoPW8?O$d9$8X#a2i~~6f?6dCJYITy+w5sBw4ykyY6T4HV$TWvY}mbO)S}$D zWgNUxsK2+g-cFwi15!6Gl8wk`nYq1v#^Z1kfgh9k<$e-AlhUUB%*dFFT6QrJEZbG( zLT^pRhx?zj`nuersZyEDL6e;{Q0IaJJNDFqx@o>N?-$_XZrzEOeh<=b60oxF$M=_xx7!ZLgi9*Z;%1Ic>sgQbhB_921pQ1f zNtvW;NRS1&!Jv(;V$|n-rvD6piCPU$EkYduaCC?CyVT*swd^VYu=GfH_2*kE z*3i&U==OR010+5<0md80z}D9rNOn7wevbnvF@K}Uh_tn}D>NHQ9tn^XOqHrM7`J_4 zW}i1aFHBNoa{f7U7w{J(*pxMntq-Xv4Ee|w;%j`R_s0OuyR}h_U%G7X9gCjNFOfkj zKvg;_lK)Ci;hQ<=YG15KhSdPf^P%M>#P`&D88jKuGhYjjGfAAn9Pj1E2ckq~nxUE6 zaMa`j6D1z70`qfUSIT6`gU!CoM2~fm`PH1jlUMu48jUd&MZM0x9g8zgeZ3t~@#L{p z1t^59$Oba|FE5C_dyTNDvQ_QndL_gS_mpHmlwI^nk8rlt;n>A%`rz5Jz01|yE%hh( zgw-@HlHxVSK2S0`5w%oH@b5RtxTTqo=gI;YdPKFS>T?eZj5csy2gAGeig^f@?}*t4 zi#d0h++Um{q&pnh z>u@>A`Z!n6XA6H{V&)J}#0^7wfuI*=N+u^6y=p63KS?2fObEE0+TW7UKwMz?pTQ3a z{5$wXgF`df`YG2~sf1`=dko3G`ON6wb_k2Nh_{Z9sT!01>Z+21#ZXM^fv_1e9cujz zjvv^d&uOrY`HvFu{|l-Jd=nthhanpWnW}R+)Qv&0qFRneEXw^0MPB=Pt!!wcAz_iT zXyaC_%*l6<2!CNW5{g?V(2Sdskr7>ZPc69{KQSuK>C;v#cu1F!eLIBge7?aHQknOV zDQIt5p8NBYPKJx=Gg<0`jX)o}ehHqmJRAZAQGC|`Nr679Sq1kl61{$cZEwZ=i}oT< z%+n1lf`$uNCQHMcS;}gw;f;C}U%01772+IB*e}MGy z@dB&MW{&Uv+{PnTZ9n(S9{9;>KstVwm6NHI2QIomqi%j$?6qy%lXpx{qIRG7qo&OK z-)c!Z#p@29R~_|mLwX{WT;B8GNbx-AEJ&B@HBukcA@(UlLUb#4x!y#2U*Z4Gi!Wse z6@tDvV7R0}S8p_0%n8kLqzzbF%)rWm)t6Ba)fsXk->t-Jl8~p}8cHINwkWDud`FPy zAz_O@)$mMTP{LW>zhS8vVv3jE3afCxJDrK8amSs=GAvy|SNNn1L_k+)ipDXvVh541gLd=ZDbcmIK3J4OAba63nQMJ?{1GQO zGF5ZmovdODWUIEajlC(bX{A*znc@bIsKeJ+WM=+}Lm^dOH|R6yt{yQi`R|(vY!E4! z!#@e>b;Vm|_4I z!R&E+wB+yqK%n{;O)GG*Ted(S%sCy^8t?8%1;zgV+K=-`3 zu4hFpP!HuR!!s&}mE{Gm1qTODdWf0^8-z&M*wTW6f+}5JPaR__2mb&){z6fHBx%8q z+a_vv#LdE#9BlC(>`tRJ;XL}EkS}AUin@8hM)1_954QQJxlb#jC>%z;8 ztw{ALSD=weAD?ET-5rkz>BW`0cHva&UCzc6MsNN#Zb0j3K^<5$%<**(&~pKx2#a%t zsb`!g`Y8FkcFpvNXS|bvh_ob%OwUN@F0hZbcpQ{AHUbPMRA@xer8N(P%VX7p11P9PNoTm3WD@&7(=u;n$vw zwEwey1W>?Vzy#9t!=Efvp(T7G)HN>PD6vV#*?f;n4|oZbs8HzDNf^T^OmT$~HcB+_ zFOj~LOtoaG&_$=xDw5bRc?WmAhK(*}ejqk?D6QC2s{s%0C!Jj!1G&9HwySSoDn#TS z&SNdN=5s%4piJsrC5!Ye0QMf&;JIPrTK^0i&@sQ}#DUpT`T>942zluC>*I1;*s_N# zg%ceqV;8?^!one)E*AOmCIDYk8?7*&hf+afn3SMQZ81a*Q9@s>FWR~++6t4)l|Nzf zMQoo@Dww%Fw5n4E9wC3e#qICe98d`1%!G}r|J8H=A43A>nV)8K0xG!1O^lkaUu*n}}Q|x-O)$1dX^mZ+$kV82qL)fOt%}M~cJpG& zzKY3%-f$^X3&CN&QoZ>cO}ul}CXIRKe@?pigJV@Qp;LBIWSpMJKfn+r`q;ojA(@r) zXUd?0VV-yN+w5drt7WtU+kBM+B@=Z@UFUl|3|eARuZ0v6XtB;!Yyq53vz81Bb_0Em z`wH)+YdboQwAqCygRLkBv<#-A?_3+s6>MRQ>R8wuL+YKu+)`!_W7Q0eY!jzEZ7V*q zyd))Ju$a^dSHM)(_23Ud&y8bNc<(BlGT0h2C1mwgyKE@{IoDn3JEd$G($|uO6Z^Qe#@L( zwq5dzxEUZ;h;0GB7Da$1+iVaFYMJlHdu+D898(&*9bUD5cMc6Lt;NIny0KN}JN|UF zHaqOWzKai_-KqdAgXHQxD=a_}Pswu^x^I{SS#D(&u4Q1WC&Xlo{F9?iB= z;U}uO`e;f4rIeDCORGbBl*L9&6|zfOMTNiXQtO>MIGay4`T3qW^h^5z)yE+x<06@y ztPDXU(>>s7<}TOodV+Di*|17s!DwYwU#=9a1BpmVBd&_Hr}ELv`Sp`xA`oYiJ$g_k zrS*2Z81RJVab5JsE{50RfFd`Gq>XJ?JEF^7dGBQUt~hIrXbue&JW5lMPvxs|HGsr4 z+L|jLE9kxqxdubcuKRKdw}-H^BaOG8Ua)%2nUKMJSILChnhB?5u{cq+91cADD=bE0 zEQSGF(#>N(;hgUOQbAb?uN{|a%b#5^(U+lYwNwRj(9x&o6jxYpDd{GIQp^y}&03!A zZx8@I$?p`Jl5rt0-PVLHBm0gO8N}|imt;1xXO%lykK#$mc(S(I-1{6)?veu`GQ^hb|@%# za=LswKO^k@Vl63{XC;43+i1V=K$_ri3*BkKFLl`b?KY$D714lk^ZPd&5$7{x&U%^) z-TVh4BGos=tWhRH+c>dH$JM1AaL8j9UW0;<<@1x*%*xTX-$LF;tt-tG7Xl`$u6ad2 z80u?wu63Gp+3rV(xAyl%&(F_+VBN<(IBDwb_qUe<8Jx*9#z51F3=@i%oq@=`A>@SJ z9XF+BKj}4I{9c2f9H@I8I0T0!%l-=j5aV~~x~Y)%qIo5AY3)E1-XjQJB?~b{^7se2 zg5QX2d9mEegL5->7mo+Yz}wz_3begeDvAP3x|)_e1&;m@=5%z^E;n-)>%+V@sbW&H}lw+s$!XiBm#V%A+k zgjJZz&}7%yVRALDks zy+;mXSSv@Wm^lzltVrVoIdApPqkPYJpj9 zwvhJWc2xlX2$c$W;*c-jTFbluN7bse+_(7yndxacB19JXNEsuKUDTUY_Wvrl>|~ixm*>sc{weYB=$YZO;h|q&dIqsALVVePWv&81#cF z1pT$zil87?yjkN0ne(-uY>kK=!f$Dpvl@|oKd*mgM3RyDl+}VMwJQGC08D~EEf-0s_J>3OTT+ zQxsTE;Z4ltFWbv+Yc`)7$JXqP@UTY;IV>NqaXv(_qq|J>jmqeeN6NvNQZO3(lVtTPuGRjh^Ou7(o?8Vepf&&;o%%hSu>$ba)GBY!O^N2hP#rL5Y z#bvj}(FN!Mz(vG?0JQ=tYg=d#41KRF2wV<(KNM8da==BlV7KU^qn*{!P%U$ic35LKGl@DN=Ia}1AL7?2$&w&ZHfRFbtclZeDavN z&S>lwIYg06>y!CHfIvu8DfRqenuK{dwJCIxf`uwwjKxM0I!UjTo#p+aQv1-8CTnPQ8!zN86@*C<9_n1$9+G_L2+GGsC`~W!;YA0MyCPYd1GI`Kp zD0lU}5v#A(4XudAB0i7V>T-N&HtF>!I_MvH#%XY;Be-C6wT*0iV5>r1BuDprKpvBJ z|DKt*JWomr*Kl0XCm!c);+?Bf0T=fsJy#NBC`ujnib94j6_Qt11W)=C55D|a z-`vRedac}bB2qkF`c^G>2~DI_=dDU(T;1LJcvx+N`p8))Jf9l~Z9?yJY5m}=9m^wB zY16!sd9nDl;Y+c$i}TQ+r_$y4MUhM<(vDV7LQzM}!3k}-r6mmL6f<$REOI+G$)TVa z%m=u={N1L!v1{%U!;9uJH<->744FhiN^2py{bd1yO&BtR$|M@cAj!gRsh>}Q6%ax7D6&0hk$0Qs%(Y-eR`c>osf_qfPgR{IGduYz%OFG>wdGh-{b7pCwK+HIz>SR zG>~|tB-YG8X8(T?LI=@+qNm83ibc~(Jf8jF$-<2Pg0+$*P@&oXtGrt!O z=NC#u-rG24OwZ-EB&FjE*XN_svHoz>{no=A zM{t+LD$V1;ybBc4y0~!w#MT}?4n2dy_uBH=9gKE#erB`4#~%kw0mlIIT{4?hyszFo zP46_S2vcFm#5(*x|6KD%IX0khjQe2HTb#^yIQ9fU*un$c6=Wb>CyUFuB54Nkn-746 z#{((il0FNuXJXMi%)-X9S|sM0KZM`J$@M&&GI2($MO@EX>Lx?uWA}Sspug@f%I2Jo zlAQse(9ndxl)g<(;wH#X8SXS2{zjzJpW$*gj?7>d)?%Mb%YV1C8`dLjdHhM}Wz5VN zO!McVCZWKU)ODjnsmR4flYd{{#x8+df4?BoR*``yWwRWA(=uaDRNzw$#Pa=7uxy`ugSuZP<^~S@c zmR%a!(`;`qFC3bM{Xy@-M1*FjHD^bSeMs=fD@8$z(Ju>2CV2+Y_XCntRucHtVq&t7Hzz zP{(@+N_j@S?q^)#wGl+Vv}qv*<@P}!%S>Z$;lpTyP^VcGA0cj`&^LY;(r4#*u){N0 zj>H~cU^vD5rRjy$Ym2ZMeDT2jX6?5t&s&iJ2HcEzOKMzayGtAG9?BZqRQBO)LXw}I zZifcUdG73K@{-|3DU#1Dh^f9ZA$b-9H9-SG&LJ=|U=$ur)w zFv9YAW>`$hGMU*$3I|4aeud#tH8Mc`A-1 zWk6w=1=6t7OYr^7;ec2X3ah)mIHO_Gl@TE2a~T4OXj4^PcYhLCWerck0f~kQw%uUNhrFXeYbhxAHCVO#QC^868%D&<7&NkKTCr*#3{hwA#?`}Kk;l2E8WIF-O|1QZAd z)pfoH6BpcK0?H`WKl+XOv3R^Xc&{CCTMmNeRCPQAf8;ZJgp1yqH@VNU#?nIgGY`i< z$B!9pdZ=sNd+Nu${6QTlTyl7ur>t;(7NyE@Pf=;#Q&OiEIs5a``G-aE7R2IR48JF< z?udD+bvGElPL-d(Nm_KWW$#kQ&KB5S1Q5P z0xSh+!i*x1=5<2ZT;HDkYNvzc^H#Bqrrp6G@f8(y#zfW2W3^KIj+2QzSY^=ZANSfZ zI%?gGm5t8^d5teSRwMcqjo1%d+0$XA2 zKhz)j4#t-vyYk}=Q%BL z-sWySm@3Ih0R#Tkk=`qVjaJdOb%Hp)h!g5=I+bb-+t#Z`to$6W!jcTHCYQ2?O?Xx( zht0{&iaV0LsMM(2?px>jv$tKHC;J_xr-Nf7-TtL5&U+|1Eh_e=O5}7LE;6jM&(Ts^ z)$=}vkgX>wwbm*^&^-d!M{nH1=tq-o3m%jVbQxvx5AUg^M-E@=j57>XmAsiF|71jl zkr#tQT=#y>EPJ|4G{ZScEU>jIU#|G_%<=xy<@z?P_4;)9X;vBx7B?TO$4V8>LpBqu z90l=*RWT~)yWZuU*s2ecd+V6Cl&rSVhzbIVv&FA0EE>%=QY{v3dub*8F;uXU$u7OH zSDgW1jm{{G$k)|1e3k}rQWRh*-nnUW$@4HcV(EYt-B^66Hzon^#ZP#MZ>3NgU(po1 zD4$DTYMcHvR0WR!VJfiCsz4s>&t28hj?tckJ)PmMy2pcQW91+x#xKZT4G7-^E#^}L8793Nr z5(I13FH+4DJMX2<~oQ-}m0n`|R)6{OCEl ztE;-ItJgZ$b%CZ=@#Od^?be(}P34(aD2RNt$O%lw;!V*$%LQ+bWiG2q(~w#g*Kg1u zJaNs;8(l7QRd7lksD?bgtMQnnY1HO4^<65sf}fVB=+r>%vx@*XT2O|;xfdA^=58mk za&z@4zr@RqY5iK4xmzNG$hL=Ajh4EKrO%W(Kj7J@PYF=i?ei*UX>k?jVZlK@Pb&1& z5?s0X#ZN;MHGJG4JR8fd6aI|JUv_%oju~WwXeU-AOuPbI1PmGuw+RO$SNNoIOM}9-(SZM6Qp-n2jJRN zX#aXOOFXki6)R{(&QU5%k^M&6N%%Zgaymj`QYOve;3@q~fwVnJ&a0s;Q(fZVnr=SO zY_-XKEm>AN+|!5oBsg#JC)>F2v3@m1V^MEmEq+^YJ2z$tBEr{x2fK9jSfPsn?3TgD zs}hIpV(EAxZ?8%Ht~^^>ls{6(z%0m(rCh#PDUT}Xv%fdL*&MFX;n!$KlO7`|j`%{0 z(KU{a$nY)}oH_4un-V2@h~yt-1UCEojF93l;7U(^&m8re;u^4VaG*ej8LD(TU6pkU z?nkrS17MqzC#JoUIk+|PNalLp>lsBfNTLA$jLYluEsxirUf|5b*5$5BoD8GO&HLU9 z&CHX=`jH&JWj{cJoz-)luLzmgy5-(>dq|A2g#^cD@vr;~PNZxp0M(0h?-Jns{_EIz_ zuh}x~V0fhQW`p0!ssx`r&%Y<@7ZK_B@tAuHzjW~!O*(r|ugm{*UeGq9>dxjemkE{M==mmSjzft>>Zf7>HqKcu>`&6gK^hnn> zD)r0UWIc&rjnTXnbr~#WqC3+DNP8$(Kn+{|0Qfkog}ilFtNd967stgHcyD3IBZARx zG`Mzg`BZ!|=J=$@5j*%3POqMug3FPc8@V0W8DnC$9kvz+Lo1 zJ%a}~ELmnlXB5xF_QcI$r^=uPJ5l>Lfi~co|1|4Z&mbDhdA5nBjJ}6@%sFFZxZ2cI zjjc3=N1Loz)neItBaxv-gl0VROy9y_yz%L4TtaYZdQ|Zj@xLBE&NXu!aOzHdwEfKx zkr%yloAfFE)z=zrlBsh3q^b6p3^)2*=CkLvCUr{f)0!6kZx#&@p?=-j-uKpeL_Fk4 zL8JNOS3a&08}{0m~4*oGipJ`LNM@xBJVwyUyB^Q<=%N=?%d4|_)nK^636O5r_iyIh7RGs=}*X>nNLPJ>`D*Ir}FdAYAT zH=yQ|TZPz8ewv!xH`WP6(pM$OdojB9lo7FjHNMa>GhtZX?r_?sr8Zqi`we2wV%7K?f3!3UYg~=l>LjMQwrU=omE@|c z^hBoo#pdvAf~?GVviTral{vGRRg-Q$-_#{>cTIY(g$uJm@{(GWIXV9xX2AJwwt1sq z`!FZ9K~3oOJb^-k*)w@(kqFfDIo}+4j$j74ZBAJg{CFA&?Cx|Nt0zA3_UgBBWG zT904dW^tO2!}c${Q(bdRuP|jw0srWAlqE-m%fbk~siO@$Z@{Lo7X&I_s>sbyMUV1NH+9UZr?6yY1*Uz94#4-|LgsQz_aAM^`|;u& zCG(BGFC_&PWYAq!+Yg#BFd-TjxiXPCWW#~XhhY1$w zJ~(SuiB!d&>YUw`5uin33C2Tu%&Y(-awgLVDs=V-k#zSf#z`C3?kB9ZuLmQFMbTjb zLzozRcj(u#vfiM6L0%(`#u&>`9vB~AXH~veA>8GF;EHI_1;gu!rc=fB=gfjdI0qT8 zO`ArXALSXU;D{5|J_l`tV1IO2(@lqY2~tY&QnnA~-=|!)C+=8wFFvQ!A*~&r9%Q`y zB_GprzHeMZ@Cm?QcJlgSMrT?5G6GRq-})=>-&eYb~$pFX|lWTR+mi(U*4aad1`-u&ij6`wK)w@aqf_nIEbYoyDzP#&qAeRmJ5FEm_l z1W0bP4|e4bg6`X6Lsi8Xqg5F#u*EPvGF|^(;LHwvOhkH=iLW*rYI40qy;mf!r9)UFbr22<|VR+A+>I8GL67a%Q-D_vYY z1Vk7GrEX$2vtI07VkOi!rUrGeyT+g+Kr$-M@1q#FUstY_r_Qf!N-#z!GjAZoVt;aC zcyx6&MmdOlz6<@)OtRhQ_!)|hU=m^A0qXh?#NJic6z4>=$ z0(Z7&KE*(U6aJ3n7J~NcN|R`Ilk;uUiwQEv5?=|9C2GfCix_TM#FxD5un$ z;!Us2YmJ2MvkM0PbB)gQn)@0uaC4DEw|F)i#7VDIS27stvLOYNBed#9g*mMCOeo?0Cz%MFd; zl$K*Ir))xtQ6K-h6<(A#cl$O+ifu8gZ#q-&#rcNRCb>7q@;76GH~;$E{lHJcsTjU5 zS)<`Mm%Fumi$(KqohJ!qF!R%>CZETVx z262TMF$(y3?=dgN*9A|ui0I{NU)!-Y7W3?f6J-ek_}6?pPMfAsP9FKiB{+*2x1O9< z9k*-h7;q=oS6`84W#3dkIIYnpc8KwNfvgy9U;z}1Rsx>xVC<&gQyVj zUL+raw(*XMHFy$DNn5DR8GPY8l8Wmw@D24oXB-NF%uGQk*nhJ8iFEJqRkiSnC|x)+ z4iyBSanAjWpr{gNp0kl0E)RH(hREFxB)>$&0!9Si_|>=_;w<*Y&PF?bIsZG1o?7qmww&3r|mz#IIqn}=K&*c`P8R)!o5xltzm8Du!>*A|2_Xp z5&jW-oUfxFazdJQNnc0`ZA-5Mp|szs;M1bN(8)sz5?- zL~s3rEE;UGme$RlJfrMZ`Yc4-S2K)3eTBqqhJ`}tl+KndYM2zpp_ZhPyoByl!} zLD2_swV8)UBzb{RRRag z8RUI?TA>q94Lrn;*2y5^lH*gv`eW1B;E-oA5&yA9fxH}tF;SP>%$ovcRU~yuXsG2X zoka2U^rv^h(XHsAefsYd7TplSPrJ%8A3bYTX*N#X?SC_6s?Alpn{8|1zMoqw$*e)NbFHngjzX6}9Cr0u_ZyikTRxHc z9TjQPNPO^0ZHybf9r$+w^Rym1pWpk&F1Bx6_PbTa@B=$j54!w$$dLB2M^eow2k&@G zN_(a)NM@GdK5C}0&Fh>YDMsTniJOROfEI_<^4*)-`N0ba zh5B5s4_uN@v?!MJ58Q(RbJE!{^g;MhlkXG0Q&bug`0Qq1Sr^yu>y8GdGwWvdE`5=V zo62UPYRo9IVNbcBow5bh9p5p9(;J?i(3)@W7YW%CV4d%`4oa62Pmqd%Q!bdH&Jox%Tp;w$<4d5NQ(U>Yi9b`j>tM%-9?}p$jvzCTf8heo?fC+)On4l6%#mk=) zt77N`qU!okTnSz^@k_}ohkQrvPg_=$md$|g8}m_XW0&SYL^0D#YxUWsWnP2KF+Pu? ze)=chBVYX@P{)sl+<8RXkOc?V2iE&U0&RgzD!H4v>n}^KBqHyJD9uYfSUm}j`L6eb zG@m=|Jrr1v$!5(Zh|^&uOZA9bufoRDI~jLpsTM#!!eUI;$|y6KDE+?1jQx*H$Sds+ za`l29c#5IK_;lW{+xW9Z8>cC=zLJb!ACc5#VEuqd*f&@;q2Gi7UOGUVOSPFJ!9cdHKIx9vjlGE0kNv1;9q=~ZLFpdbLTQGj{0=I zc=Vn5Mkp|j+AMH;fM5`FeL*MAlX2m)Lt#Z}v%Ch{1Ko*a+*KolvKGeYY`?G!BER&v z@~yRJa=n<0f$}lPqvqN>BkOH=l9s}!&URrz22%pBNnuHbec`&IqP#-Ui{gFj_u6w5 z8RmV?v(kK2t!%EF#LbKu7HLzM`z%bt2Rm`2Zyd_FwCMxtR~@v)g9#KUAnUrI3!qVs zf4E&X*=A9U8Cx8>G`6%OOYY};TCu=$7riVxd^K|LD&rOILT7@_A@v50u%O&kX_K21 zKlgZoN+2%uqrib0c$mAzbMgx}I{nd(Exsp-=hd1gENYb`I&F-q!&v4YkqGfAApGGdFR4VXdbK6EawKQ6x7KS<#*nY!32&6P$aP$ekpi2p_Z z@k53HCa_CC{LQ4kI%B2ExVgX4n}b!?NB!_Xloj;BY=pcsL2wqv93z_~9qdty;m9?K zx4e+#hu1K~S-C^$RP;ei-+LgTp{+El8Cl6d#P%0?x0EW-n^X^h0v|>bmp+!-X|31? z&MKznI5LR}A911&xFzJb|K2k2L*fZrkl8&iMppDBEZuXX)25b9!W3R4a zpBvqUf-v|^L@rf=fR=oM`L{uNz5xu@ z@5f@BO~1X9v`!+O-ahQyo-7FY(Lh#UpXRGfcG}%%IePC?Bd6U6pR<|A+oleRb1WchInJfYU*UJQBq)~ z$@AAaWIB~o32_SbiC@=qX8UC4R`g9Cf|`*o$1+gGDm@5q+g8vEiPgCkd6H=dhsr+> z*S{Sufd(VSH0_s~05s0WBFcOIXM*Xp7!KOQpF|R932h05?aH>KLe2hU5|sqF+Z9HaFr0)o(a;v+2IoR+HMvslMfRgl(+gQu ze_KQT+vA2rz!hsz&CQ`e8!%yg5_&zOU98)w2ih)L7#ehR7m z0!^p$7LXXh#W?hNX>f{*9k%%t$ICnYE1MCG_AbHhq{u_WYkYOqJpYd8zrz}Rhw!Oe z`pMjo7kF}fkj3DbN#H^K`Uy7H@i^8C&Vy`8wH(vb z%Xg;r7!`M>@ToW*wLpXR7YxiQtjpHOevR?br^YHy*jm@d6NRl%TE#D>h5zSK=ONdF zW#!T3J!}PfC@=htk1pHh-!X^7G@OXw9MOZ>xVF(>VKKw;+2GR!-lc}2r^bh`tbcGk zRuiR6(#cyJtrCVzKEunA)s+69F5cFHr89OLYj5DFDH9Tq94W!zAG)(jg03Df)s`rm zfBp!|#~BHC#<*UeL=WxhMlUypV4<0U?0#&ua#|-YFn(j)nR#kjMkLDH z@IwQ4{P>+OQLe#d)5JmbpOv8tUE=Lq@?>gngF<8<2*SE%!)DN_(IosSbdD0-Q?spL zCmmNN{3dRm=s;DyNa~|{g@|pxqMX!1!*QPEsY%{YK)S1VmY%fKw^4prT((=U7W6wUYEEXZdy-lfYMLF z>E*G~LbpRYl#^SkfliCWOUoeuyFyD;qvJI@-f~(6D4wMIeK6xt{_%^d>|Kf>CX5+= z$I)SB-e!u4WWL>)vgNr#v43X%Gn(Po^`+S>zRXnoJ?7V0HiK5_@=rMQ8WcNM>feEE zOE1$Xg0Z$wz2=QX3K`duxZC3ig?h71k`iM&|DpG2HhuX*o2D*jbDsUi^X*7Wxm%vn z`qv;-UQOg-cc$9kMm4g;Qn0}SEmxPMW0}^wtnHLk&EMkFM+7YmtN{K~=VG5E<#zY* z#QC;BhUHTfNs?JK|xJ}ub zsv_s$v0qZtDklK#C;2zY@9hf9V*elqRWrJw)c>y&T83KKH_<| zf~QmQ2xrgWokY2p7;dyD`qOY7EGM}eGp%-)Qm4Tub{=7)j?9M1Sv&pA`|P^#Kk84X zvRt?I&HBo`&%GatZC=+dj&%uorjAJtF@j(0haNoD!U6?)NUNL%Pz$rw+17;@s*N4A zo|o!9(|3m{@4*SSsc9<&oGrF4VIS=#rEei@G8A$fJyu`>1PVk!aOn2p?Z$edYu6D+ zZk>>b@=jwV-@)FWMscs$nMO9bY@rHJH1EYWxj@*B!QNuMYn$eWc;(ToxoXROg@so0 zLUK0|_!Tzu#G{pF;ZRP<--D;ysPmrW;W{hw=F7dLoi%s*Rt}438eHw8NE6=MaKQgU z1E2Sz$lUIV%fz&A-fPDncP`iFC79&@X9dc8CNEr?Oq{x`!|E~PAtyDs#3FZh)mdl==SfhQbUN{ z=UGN7kJfpF*@eSjJF*6@iUZ_ArlTb|iJ8Whwg%7o4`SldVIL9Zf4g&=YPVFWwRk37 z-5W)WxYo%RwGXC?nmY}hA~i@1r;3uv8Qq@`MYIyBYjw(WVr|ApEZu%(k-W*{8`Ulz zl{z6!HwrbT+xc3cp%2aEY(&mzl4UTvN;-4RRcQ0XXH21fI)@2SHmR!_alOENz1xb) zP3I#S)m^H)I`o#RA<E7-5Q&`Z?#d}J44 zsG;LIFHxIzJFwNFlQTejeTRg*A74}m9e~~sIBqz5y)dVbqYY>7ZiO)*(DFBc_o}uA zU&2o-o|QoZ4ZOI@ZlYzYlh6KZKD7FHo&U4K$d;8D7Mv>GO-@~=wCI_FM^L5=%r2Bq#-Zwln za;QX9d)oI;dqO=<4rM8l{oMU=+H*yq{v${tO2-y7nJFyr^9dH1g7VnTIT z2sW-{jHe~@3F+c?&8zeWCH0lxcfr9i zu02AZG|JeC%-6@x*Enj$g1(hd>z#Cw1S{V0x@7b!{}qm7`B=GX<4Z#Ih!czI@6DmpWFKrCL#quWV1N>#tZV4jayv7p8MoTxP?*Gu_}JK({egXK%iK(}2> zCiw8$V?(Lpn+ql9@iBn6_^_Yy9n(lcQ1&~Mp12!)cZP!yK*lAIkNck$$~@muFXWjP zMNE}P#*uT|&v3+^cZo+)(tcw7=c_+&e|ntC-2J*~)(s@}2nr06rZ>0m6e`hK7QM)` zQGhC2d9mQUZEsY0Wf_t|FT;BdD_t5i>KBr>{8n4pdcwV7@VXr*mk7L6p1j3$Ty{Qk zE)4Y@E|_G}TeqEyeHjNjl@YKL?s%$*y0$O&*(g|p=ifw2s5QW0RG1q^+%b+^+Oo>j~kOf5B>z&U)b9Y$kS_HQP=x$*?*0TiQv|Wq5tMjItK` z2jp@&Y2MRXBjB+3g5EI_{q(@MNnn1q-mO3D1>^xwbWCTyH0;us3E-mwD2WVB!U$tY zu1VZ4=P4t##{f3h;cPRDxzQ6<9hANB*!tyL z^EM%+A7sGyVqyC_vW~4J-eL#qThbI?LGI~G164ReOy_BG{gjl<4`$JJ%L&Yd`p=u` z6)vj}4iR zEY0bqtGX1z_Jleocr{8)w?ynFwR$*iWeoxDOjhMjs-pp3DiI7quY;V@?5*287ulvK z&UfM4mtpbIx~opv!^4?Kt7(kMJaV(<(!7ij%deen?!63@K1gX?<{?Wj_RsxFi%8Dt zPn(3d!nt8C^u~kpC~9b@%G(2iqJB(>YkJYE%)=^HV&r4iS#}1ekBnZY#L!yCNfvRO{Gw` z8*2SzT73(6U9%A?YQhZVWK|(5%Zf8W6u=iTECkpko>Vg6DM=MU_l zj$Q@N>gxVt@pa_tBF|@WdTth1Jzbx6a2_>@MbY*|4ny=ZvZ{=8B!7^4tFsl1eU#xcZb}21xKgjC& z*>?fFfy>sqgJ zR->s6Be9fae2IX=`)WqQ=#G#g;;|8ctA&qWpC!;injD_F&O7M+_TBO)=f`*G$!5zU@Y!1_PB`m!XOB zbjiB&xF1#WpH^wV?vw9qH4}5L*vI{nSbs)<8a-WwNt&}&sM*_~G*~X}23wh?4~iuF zgSc!Bt9Y#Vr(lk}k(n`@h}{PSj#ALSXw(%Ahq%z~!-9t(3nkmth9qBx9X`j~!RF}P z!`M2s)>Jgx>HONOOFOkMB@MXPiNzHwi{+3Tk54f()3C~1pscgl<|D&CBG)Lp8niO{ zire^wKBy~Di~ zEPfdJbU&`*gsi_@ZC=?G(2Z+*d+Bw^C9~J58N1>>*r{^sWcEFG_LpO;?NS}G5J`qX zMlvaFydjQCITgNw#CHDa$b6gfP9j#EOrrS6pT8H=R-%;QNOMQuv9^vcerFyU*_`(G zP`tSnj$papA-Ha~(B-`M%tv>&wFbyRSjt|rJ7<(erBpThIok<0o8(p)bRw*GLqsmtuySs3NFGK|*? zL&x|eXB7#ltxHC%hqndW*IQ>>I|gLIl68E3tbHkmlV$3xLAm4N1TzsSm)&(6hr>sf zFDyp+tCmh*CflTOI@WX(y&fZuR`x#QEi}vvi4`nWlSXS}{3(5@{D<#O^o6R{qPWfOO@3z`z9KmeqJO6LfS2Xs^*a{TTrm{!9PPj_UL?&| zSYBdvzoQ=|616HZ7 zm}0iiUoZL*-9c_% znaikK{0*-9_g0HyTw6O_7x4vaf3nluZ*Sply^xv@?9|yQwVKn>4rPtJ%oF?>6fwoW zlPepef8ZRs5TlPzQ5URu~o`{rudVIWc5phnqqBDK~=^4IjOiG z&sORz2V_-Vx^pN&Ju5+$8*fjRDZ9vD+;?tgMuXgJQNS0^zp67X>Jy-~mtlj&e0j4eJRjuHkgzt8o{^<8|tUi?dDs8U>UyidO!DW($&NVo0N5 z$Zxa>_$EWIShMoB_6EQV68@eq_j~Wya@z8KKHOf+D9SabsCbRw>^bWgA~0&|3`tb+ zCS`dg%ZMsm-WmqhIvmbLuIo5&1XRed)tX+@J4EDf$eC?j3L;MsPAAb;wkhCqTG0V{ zU)7?IV=I8+sBQOqT>mLw9(0c}_<)eNiv_a5G!A-W@v9uZ4kojnZ_`EjF2-85t5O0^ zuj4+hc{!0x&OqN|36m6(2y{`qYn5tc;g{MNXss8du{4Mf!SCh^lhe26=rkW4r0sJzl8C*>ee93dIiW$ITJDa&M6SM(0&W{nIkPTN#5j1@jTx&}uECy}wuwV_dQML6 zEUeX@2TTELbWv%W$**pt3iN%;NFpo}43dR16{dMi8(mHkuKtL~RRLAP=#zYQm3gz@ z5}^;nt5cmTEtYd|V=0per&wY}SX~PV2OD-mhuqgVP0?xTz5Xk8);d zJsz=5RqCVdEtSP8%ryH=;XT-t*$P)d)$?2l+u5}=%^bd7u65M3CWOl0lCd3LhZ>CD zTa?6)e7+M9Vw!a9r#0B6jO)IfRh?pFo+@|1YZe}baDFK+sMvM&Xio!}!Vf19s(I^` zml(I1C~RHLxH3_JR~altrtx*3LoZ0*nccR}a9I+r zJF_z$x+~#SPolw;Ur!hY2_5c52Iu;u%}tnixg2n*Ow7iMByu;+maxK#MclW#7g9d=5WVh-a!6v zPyUR?HQpNIq_)jMfX-2;g0M&WEm~tR&xH(b)mhrgxP*%kmE6uQO|c~mNpu+SdpY~k3&_eeA9gm$sU)L__FFAcT0>#?>$YvuFL2yP?XQ4c*62UK1iX z(^{~XYQdEJ+dT$SQYI0pp^2w`cYc0HQIfs^q^yY3Eg9lHyGF7kH>7}Ylt?6v)6 zb6bB8Yc1zUs$LI_W!!8UVfF?5aHymCthr%re98o!+Ztl&H6(*k_a-w)M?^OFyw4Q2 z-}j7=b`Z@3StBxPKgl{Hk|sNmjd;Qdr-H({Xpbjx`QaXrOodBRFqs{QLM}c}$+1h} zB*iD5zd!V*bG4*w(r@XtUV~y?j2Kaq%q!xXb=t?gBmp{ey3 z_`Lp|745o(1aePlZyj}9WFJ3q?`tttWKaQksx0POu~4GeAT>xPkI)@SMVJoO8I%>$ zOPG+wif~HpyFtSD3Aw|AuL{+45@w?bM*d}HhJ-}~i!wNTo`%IH%nRhJ32Rs&7J;uH z7xL|PGP$3O@e20`F7^-!9nxlf72jX9eL*MODdvwxWS?@NQ6chdDN(#PpB8#ykEv4C zr~*j^1&={gmFQAzHZg{&x5xh!^&I#X`8oWY!hTg4r1nfvCr$n=ytrTbs*|lv75U5? z{qY&0q5BrG@7JME;yl)cUdGJLq|SqN1;i!g3!dvG)V4TPZT0qE!KK#R-qPmS7E0k0 zT%m&`I)N{(eEOBLfmWf8V>-^!tar1deE2vK7q4(}&WWKiBf~5Wjnv#tsE!8^FjYoH^?p;gmTujR^1wEkaGV0EfV#uv0 z((JNhp*y=#yO}6b6Zgaip|6wis7i6_a~DTN+gAzTn_m?J4{MGeVPBqd@Q0_B?Lw>i zDHZmDw;h)SX}s`D8TXwjd-$c7NI0FOZ?a#MpT9OzhXnmBR2B|zw!mUvLK$kuZwjWA z4%CTzB1FlkeJ&Fu(MP1p^P^;HV~Pvp7mW_S{~gtynKgbG#dQk$)3#3bUQyHf;y^|| zCuWg^YjY=F$0z>0=QrDYoZ3N-b>1b*bsy_0$6rmhYs({GB*2#2_A~X& zM5va~Ky=nvJhP-6YKS&N$LG5WMnATn>_WrJ*PKHWCK*MrP{kSqD(<8ZBVd-d_f3{v z^P|E4sx?94|+*}kojqFtX8j2<%4l?nc#B* z_h}P(>$)kv^n881Jv|+%)j$0}ESQwGg?)caIXskqMZaEuk{;hxttIh&LhQNL zs&HN0*|Rnl|08?lw^FJc#(j+xZWDUO2sP?xX%OreHICd{M2g-TTr|(-nfHGY;r2r; z%tLOtB+#Gl-622n&(ve?jhrDfJ$9O|{6=G^yazp5Y}X;EhDlq3!n4yVS) zTNhL~bwuKR!6_TP{}nqp&6YK;9swTo7uDRMXD@!fi*lF}PSSkK1CoaKl9LW0-K}$5 z1luh$%R|)h;igiFyMt_BQqvhG&|j(t9ggEd$edj^rP-Da*&&K~%f(plP9wBwlTRBw zT@%TJ-qp!T$N>g{!XFkQRS~4O=ew_rsLb`UG;iM{U6?kEYW(vF#o~uwOlrUpp3$Y~+aBWCVBN=HBW5xSj%vTP}y6TzdX=ywO3>m*bpu|-rPJRknM1fB&({Yr!(zXB^d@C_YAkW?r7Z7^(Hbo4iW zj$jzDh$aHgu>c9kWgEkZZxMt*Oo6T-l^)Hvx&isrzOIYdoU2XcoWgd)j5_#^dixun zKf3e*3A!8|mePn}^=7v81V6?oorY9Df{TF`y0ip}XNHae)SuZu>2Eo@3j$Bv)cU&= zagu7iaDM7JX*_z!hvvj+eF?nXy0%K2aZ>N;Y|Mvu_o$e+5D&!u>a)E`ZsFZrnLm%; zJT;|dI72w_

i^qgK#QJSfKU2J|zNWU*ApY0{lMx^hp2;42pqs3U&I9P8Gv4sWF zW=0HxX!JL6sekEMQCYGHU=*YQ^NcBGk6YCyRV;Y!QL5>TvJZ4|MPKyh4U@2>h@jGC z0O#Z9NWe%osl@h(;zhNHjWsD~_T_*pk3Cu?eW!rvO zjO^Q_g`&aS^|>U>uGQuZXU_3Qi#;h!rYX#O6skr8P5x*`;5FolpMTS=Pn##){v4z2 z!4rOYNO0I>1nD1LqkD>`jsMyCQ@$ysoe|3%35`<7db;G%g98foCO@H%6At!%$>o-p zNnYdK)&$C(pU6a?S>k3=_#|~vPiBA^>u%&MHaQ*b!1i>K57f-1wx`R=q|^fZ3**U0VTfedoe zvqa`f8Fwi>Fq-K)SHd2W6r)%7MuQveW({Nx1F!hmc&Q+ELk6weOY1zR>1to9a*27 z$1aJO%X6GLeBcCi(!g|p6=e^WJdn%G1E;{oDK5`bD#x;6TE(Vrh>eObnH|UGX;c>N zv44_}l_hI+ob6;WBhD-;=$0&5k(r`YbXWMJQr}WRKifq`t&hrs`)vXdGGCy9^Bze5 zXrVC;NoQ9c;BP+&x&?(5^)nW)N5sVf`~E-C>^Y{faPEltmTUE#rad|Il2SFXj(_pV z7UW$!I+^zSqi{eI4zmnYqiP-W)cNw|%T2VVM^B@Y2g5D`E|`fGYbjStZKIO-*wm(5 zH_uJ?BW9t$^1z`K)G1(?rK>^2@lmN*b1DiCK9}@ET8~xieENd|6iOf&P0O%FcZ{_a z+V*mObNXmX5L>d!!(K*o@(adQE+V;^dDVK8EG=W>hdvB0|pHPcf_!#z_j-+O@%NchWiPdD?8*ldy5p zo^9r8wj+$@m?=qJTy+6Z26-C;L=~wzJn*}b>-Cky6d~Pvt89=?Tw2O8rPNCDPt2Hj zBN{c;NhFP?&G)xnIk7>5Idm~Tc*c(L@Z)7gF_8IY2NJ*M0c@Od9jRQhiAfvwFbS6x zu{fy~Sqcq>oIxDgDiCL;>ciVkCLbxmOtjtK5Or~2-Wd85j@)fpW-@dTRk^o4b(O@#dSEvs!ApKcWcKX{Z&mm%ZaWjQAzfKP!D<8DT4xc!KH>BjP| zt^3BKbIY`M{{Oc+l{;8yHYiv%>W7O2 zMC9Lty+%`XZTBCv8N9!X&L)a6AjRI7gZ{u^IAGK*>7WL=4Mwp~HX=$gVG*$%W&+rg zp)M?{iEp#%F7o|lXCu<^5#i+`L9FKJM;TO9pCc(IG^-hv#s2_n!4X~E1V08Umd5@U z&7weu37}DpasM3(_PmY*Pa)+04{G?ohYi_a7RKONbKh1y{LA(XLJFqFV_zr+qu4!zb`@W{QgV82ve{MSt}F!C#1e-WVhP&De7o|B^^7#6Ai5 zA+FFpVZ+&Re(*(7w0e=giZsz+6W=py6;D@aG`>FZVSl zi;xV*%A-wxSo&`#y@j2VNh2|6wNF$g7njH&6aAO(`pM23h9Y3t`kyNSH0N&s1swU& zRnGN4Blp2))NXHxVOFn#h=(e-q|Wufz!w1ZeSsYjxyf3u?fLfvhP*JPp7_)|iNXMsVPL1YszdM^K?tFOw1D+~`+&4VH zijoB2O?SOTOQK;oP^wvE!@!YLcJPm9yD9$m~kMZp<*tK4aGCkb)4f8|PkmFsBW1f7nICmCUSUVO#a?p% zN-+Hwmt6s&!;Czf2;=|KF6SxVI%a0@$mak5fQM5fegt&W!WK0 zAOdMhZR}D@3R7mob=Yi@C)P-;P^SZEUi?*rDi;0ZAcSsA?l5-T32{4}xH}`yiJATf zDHb8A(p|x|A)7=MkHDw2T&%-DAcbX3&Dt+ftIpvGNURVF_%K=1T=#H&$U}yRaV?Yr zjiVX{=$(VXK)ImhlZDy=P@rX8Y-~>?S8$@EK!HFHKp&8!GXzV1e|LDe*kofc!|it* z{aL{+FobcpD+aUgpY*S<3VSN-AzDUZxth`7z&#+@@IK7{c)D=5RJGL{&v6r-c%o2k zE22>|oa+L=Pm_c9ekhUtaHOd@kcx}IC*b*E=;AbRs7?p1)d#;>diiklGU|2~NC~Ak zrPpQrzcnHySfF7-FXtnTYDF431(5g;mSQ4jPb@awpTNm^FRB^BfyLj+Y|#HN&j3`r zL+a0d)2UTuk;}MGWd7_y%pN`ma-Pk6v&D*^*5_r>b+j>3(av+ zQgIRJuZ1!9(Vm63#C0+Feu#yC+L$VkP9eL$*ogz;iSwp9lgl{^G&#dK-@SlDF04?5 zb6Qc-xk6-1cOwvuWI*#`>g;R#hjs&W?Dh`Gi4>LrK+F`dBr6*EQ*B@bXiK3oHb}#H ztNzq7gqsEg>4Mn$(0Qu*EpVPl79b^lO$w-3KZ3t{2r8~r>Gv|Bup8kuW_o{7EC~Nc zOs0ZAexMFtQIm?8N+xytfNLw9b$bBhW$!#CCoMba3S^beu@U3qAE5PJX`gCtfjnEQ z?Tk!%v}pxKa&C9Q=>VafG~@}gi}aCZ`@viN7DJqnbb!by%^e7pZXO~y`oF@TNS+nT z=LR0yk(v7WdDK7q3BMUNvU+~4oZR}b&|pzKbL4W}tqjR$CGt7#cpQ87l1uw4@2r~+ zbYZs1_X18UfS&u``G)8%(1RsCi1z2JSl|2J-}leu7jw=&d+)P$oVA|4*0XRu z&%AyJY35q(r~+F!^vuKJzqhkJ)g(8Ao>w|wD&jnc&XW)FVBIHFSXs|%yiVOc)b~OW z|JpFf)>0*-;i|g@d`8AskL0$S?R0$&3iw(AcM%mZSph5xsrNFa4uNe24lG8mZWb>4 zC?a&Rnuo67Ear+HK^5lf&^5|xz|_+hP3NPAut+ln3o0(=jl2My!?}E6IPY zNfP!A)QKh(Zk5ITj4us|yp$+rH_WRr` zrI|Ebv0u{dWqYK=r>~rhfN7Bj9^rjW9rLA% zhyBL_fz8E6Riz^H$GZ~`j2Y4#b!dVJNuG0EvHl46?n1M{kWiRGQwFN*rG(gvAJ*Im zwltl6VHosqwu55{%TgYJwSzb?Dp6CccH1I!kCOq@GwXFMvfS8&mcf_Qmbo$hExZ8D z?st~NqP#LqKQ=^aiSix{fpcwL#up=~ObNAwNkCZ)q_y$#r9)+1Q5ZTJ2WPG2;lgj_ zIolWIFFzU5iA+nN|7iEF1{otrNl>mOduni0vtj>b$?Bf0lCY&7j&oR_dwBv3csB;w zwbb?mDXg13TEY10^ffs9AK0B|K23uzl%1?RZ8*&Le>Lo!1RV59-1f%&Q6Y`cL|!vi z3QR{f_gWxuOOpyGE8y`cs@-U1c(K=h7blFQ|Cc^EBd7#_LBwep?31c^AA?!Sk_g;h zs%fuX5Y$Uq+ESV@HA-4vP$OVJML@}N*+KxSa&da3aeV%E4k;m%-hElc&; z?1&PKUchI?KbTQu*MncF^KE5F3h_b+H2Nuq2AXfp%Q)>ipr~qX9AR>Y=RPY>90Eu& z=mee%V}vw?#Jg!O)!IkP5E&7YhoR5Ixpj0MpcYQ2Myb)RU^l@*j8Quz{gJXv^ z8$XNGWeqZMwddmWG~j=^P3b_$b^Z$3i#ZegYXbe4n@-a%wSoOnhyr=O%SuzwTvZ_} z`w^{u#ogr}UhhS&+Z{LxNFMqN2#G|C5F|9KHo8n{9}8VS9eE=T|4J4cpJ42k1U{>6 z^Gm~phSo7WA zU@W6j6`O;qShHa-NVKhuF{h0`NHgPO+#+NW-$86VunH61t?9X|JG;2$B?IL$%pP zmA1^Yq1i;U%lJ)gs}x&?bR5| zx<(hQOONLUy_f$=<$h-7`5|5jTcM?oO-(Hf%nqi%;s^jxTMiOlZ}X z;h5L{^x*z;UlphQ-Jz5=6~#wkbs(97^yOgSucv@Kn4|OrC(?tmpDz}YX#5rw2u#5Z z2x3q45iKKNs|)V$GD1AsXYeAjokRy(=PdZEAvLM`<3G1iQz4Jp!k|ch>n@r6FXk+T z20Bn@N;Rp##Y%?>PLQkFJ>WrRWOz-YK7Kd5uV-s`FZVr6(mI-tXD-%7ewDH1JW2A1 zDF$F2>}D|9O%F517J-{Q zi=Cfi#x<4++cM-X+i;H21OTfqzUDBMr=Qy?e!Zj4+S0cdkqCTR&)X$hHG%J5HXw>` z@+^@3UbA(z3iv4Dho7hXqxr(~5Lhf{DVC>QnU~@*0hcu^!_Yg=Rg;3!Mq+f8^=S;Y zeFkqgQJ8`|#6qtIrBdU`X`q3bY02a+F|ek(zNDrxC~4jGwp#O>E_kdh(;g7(O4Tl6S%YzT4{6-*Ynu(SP0Sl2BM%O zDF9Q1meQd4PSD|~7Vc(`ni6e;?AGCQvipb?*taY_G z5xv-(%kTj~SJfzd3|;=}RhtWL{2Q=Q8LPL)PRj0g4bjGU2L3YouZ-#MP%XDGbbp>; zOAFIvKCt46H3UBB#YgEDT6fb{HB&c#_)j=g(pAa$Jh;eE_0u|$WDW=#G|ja5qL^%* z{02h8Qpe|0zU9O;^iJ7U#QdYY6ofswH9ALZov=kI!Oi+y>=+yYr-$Q)u8*|XlZ#y6 zRJNt|J%VfpP+j9p)=5ip(8M50l`529GOW_rxp)=YI@Z+jw_@sTbo#uTjh(^x1kAZd1@*g7r+>Z@7r)|P*pLgW|j@w*cumqIx9U|YSC$Wt7%sw z{u0mDLJx6HKVg?G!ZI$;uiRU{Mls2JMdz{8Bawa!@(+}*!$jlK5++ zOj3+k*$Te_QqDp^jhWB3!&^>D?c;b_P{&!*B4qL920eq;{7_^oAf@jQMAJkn(>^Swc-cM{OzVKsLNFF6$?aW+ z=R2c+ZGM&jBU{pC#>PZnj_TYFKL}jL%ZN<;xdxdG0cgS(bkZ%nzwk7GWcO8*6a#rYDckWgLG5 zFopi}bO>H&x^w2Vg=Jo`EBDoO=$FbOw^~Yyh_5hjYj4^+R4Yp`c{X_zZ`AQsoHVyi z$zzzj-KzURR?hdrN@6=>{!@>PGX}uQh55#a?hl-#crpTCk|xztnGLo77;OO&@^F_? zjn?f|>_`lKe}FZ<+`dS4bCNRuk`;IX@%SNR{Oo(oTOk{ZDfC;Dn#aQ|dG6kVJ1v14 zwmWT7EZS53tzF4U)Qp!aK1G1}giUA9u?723L>&M%fHuBL)h_#F@# zsP7ads8x|Ngi@bhq^t9CT)X#ssq@S^szRS4!l$U-=W|`1Osg2SisS9=z>r&1abzFK8bAchOWlF9`~LW9VKg=IJnrcn?a@((N;yi@^4-aM(aFKe{GeSO~>^sZ#DnJzuguGO0f-Awi@X6sV(GAegtdQs#`?;vTj z#>_KV9l0|0_QomQcG&AmmA%XN7RSYems%Mf@_OccBs}-L>f5A*Nh}_{7%k>@rW&Q> zY!InlwZ-LIoKIEsi~5#CDskycCSJsiBte*2#e$N)Qvs8&U! z)GAd+mhL_6{S7YFT|Z=gGeY)sKH_T8Nv5{k;^Ec={-QcFM?KdC79MXgy|uL|fmoSp zqh6wB6?BY>a-wXVpKuYIm0}R^gM6`uUSmo^nGS z-$%7>VhOuB)~n-DIs+F@*m1}pQ~~M6w^xjgd&K5 zH&_2!%fJG|;zCEI@aS+dZ`_44l0rd%+--W~I=0;Fha!*vCQk=_8|}GD4s|me^Nv6G z$QgV$=Lm@~U05f!2fCXueL&O4R~lI%-fEqDNJnzL=lQlO5@tL9ZU)Fp13Y2b*=hM) z96~CKr))a}=&yW@&WK7sRLCJ}6p_OA9_3jO{q3<}DC69f%qng8(Rv-!jcr7FCooxJU*BHo>f2uB{nQ?|#e|AHYutx#+< zlwGFLsPtZ#{a7i7sHG^I^23ft&ebxg(}ozr7Z>QtMJ&5$ZAMF8#PQx14z!giN#6N3 z(g~RBa{yLCnAQ~(H{Y3{fiPYa5NV4entFSwj1KSpvP6j(ylhOY>^uD*Q};~Xx={9- zuoYm5@&cmzSm5?uJq;9Li=I?TVe3Bl0SMR-IUiEuwF?55%XNVdeaUv9u zPe2?@J3zCV285R%y=}O}U4Oh8USL?spBVS~=u6wvgoCX`E00>6!gY`_8O!1-8R;<} zE>L#`r`V&@0Qqkr{akWr75EFWM1YZC@v3zW`>Wf%vyTrJ)0@2f09fENmmi3HocfIC zn#$%^vlTiHKwBLv<+_XpY3dYjq&X@mna1@c1x_EF9<2cmX#VrBUxM_VciZTEafCvQ zm|ePr=!{*Hzn!z=II5oYBk|$Q;flRXqJ=kUIGh|D z!KJ86;tu0fQkGl>2KofD8C_|z-bR~1Gsp%AT=eZpPqcv2rFi?vce)^j>qRN8>Godz zs4KIfC8dpignLVb3uSe3FFxQ&TXVUujFPKw%#Z0&UmNu~*nDr_OT#YbyF2eIHDOBc z@czSMC*bjxyC31X#eC=)4r*5eIF9d#-jo+6$yTNF7v_B)x_+$PIR`>!$9Voo5^l)q z_%#W2zC?c8cDTS36$KI)5HI9_)UXd11+xkbDqe}$1w&udN-e+4y7&IcMPauUeI5Wd zZG8z6eD1lB1OUO$I?pM&u2LP#s0H2|F1|Az-3XAq;7!zmpuqb(6a#O)c5IhGz|M7$ zpEEARtc@% z`h1YCndYB2iX{i3Jiz@PmD{eJUVrpmT2*l4#tGoogOs|r(pj~y)&JlJ1rtD!&AV6d z;`)=_6uZD`c#i2pZ>$aA<-4B>;NsT|5}vfv0C8It?X1)G3*Qy?sLcfq*P;B`jMq#L zJ6&z3sw)POB7TS6?-)QTg`0~to?EFZQ@ZRU9 z;GVf>LY@c*0Q~mMCA+1F+RQG`%Z#Mkg^#%|4dnQePyAdujyQM^>JDoy}I<9?j( z)t6fL1FWr6U>>;2V8Oh2tVN)*P-*^mT!8Ms4xtpD#mB>43Svjy^KoQ^PNm8I!{oGq zYY&&6lRnuVWRibDiiXe4jha7oy`i9qpk7RMi9)r*nVKJy#NK#)GZ@X3ZQBw`?mQdD zCB>@R7#vQ0zV7j2ns?D_tL35ms8m!9Y&k$j9s{h&`B0`ENSm4HfeCuHdOg5A|w+%_geh8+a zI|MeMeh2QJ7^#rk80JJmC)`554zS?;SBi$Bsq*zVifB9(A&mrj8q;;Bhjvz%E`X%p z6gpu}Vzxu=AMvZ^#-BTX;JKfwNq-E2Bfm4UQ^tTa-8vG?tto8QPbi>;+-G1_Gh5vIYPvzB%#*Or+}XETvhUC!N}=>=curGHQS`M~~XMki>9i-V{6k;Q5feemj{NOOCTi{C$L9-luc*aNbD#X0q z46LD1R|Q#<2^9s=Si^xDf}y9l)5_ZXJgU>+BjgD;1MoFbw8j7e`0vH)3<$RE%%zxr zPDM1rI`k#j2dh^eYpu7DhflLi z;NInd_ze8HFN&6#^c{k|M^yCc2d4{3Dt#@OYb6(!tTkoT=D`un$z8KXbDXf;o~6Ou zkW%vJw1sbeaT~mWnX)@-ONWzj*my z7tO)Spp$5p_gu4-AuPqdJD#I@347_;y|7QFvU34S3Jq-dtYO2j0a~i^NcjN9+3@8s zkwtXYG}PCWqT$ZDgqQyCFWD|>$h(J6lFGR{G-*-Hh^S}_W^{U+pu$k$(xk0eHD)3f_!uVQkqqCZ?OTIoVJlU%VpzW>^n|3@u1s+O?5yQZ*BM|IrO31F*u7(ybM5z%F1cm0Ky3?(z06c{6*) zU%nMA6AX=}yj|}2X1M+WhCUqnnWedumBn{EdeBQ=M=*heg34r+w?06C(?H}HPsoKN zM(_9t9;b9wnOH?O5lgX85HPtBAkPG&L@GepsYLUGkLBZmrohf;SP`dw@p3T!WSAI1 zd+J_&HXoFt>w)R=CRk^Fp3APD}(lSVCW@TaF3@Du`p<_VH1hFDjveq2OM#CNt6jFEF8hE^dW$cMgcS2|;|k9lTHheDTCM{khX+Naw2H1F?3 zuCX$j&MJn4v3t;ESm*UUy8ervJ`fw!k}Y6ndjWvs;~Q2zTNyyA!Dp z9+3@eif$qbuE*+I{zWTY&rT$H+N?xVrGm0RWE`0-gpSCZ4|tTT!p}pqHkwsI&PT#0 zNdGZ|&bHjgMy>NJazLEE3w=Szed}9LZjOKa$QkfJfcH*o5>Q?A#HBUJ=szhL=D3Lf z#!UTI?Y*W>foSDZpxoRM%zr<0QFtHhZqokU`l0L0XW*BSuO{S>h>x>YFf8Xjr=O$$ zqaeLCz*ul^PMA6){{F8ujRnbJtuaa1(8cwu@&o(aAMRsz#nN8BA9FAoz5^5$v@~8~ zPnjRbcRTp5c#V?)K!&+T#etz&A%<}UlwZc8StP`Qux>Q_^X5c7xU4D!D)%2FO4Pt zJzjm>@T1bb?NT8`m-dnN48=v_%ihw3ar@_Y51}`0m(D?{<1wbi&vM?1pBFcySy3*3 z^M;&(1wJxKOpHrz*3-g%gdb!)C2O^iV&f;y34y}esn+EZlag)8Y0m{592|T-^&p3% z9^v5Po!z5ehlm(nmp%Lc&&8qZsD^^2rWEm?C4OHm#fNm+>+bxo6b!C&4Hvg8m-xZ> zzn%pZ!UW5dKeGL406dP;0?#J%*Vs`0X#q3^H$*jbQQvs_s~f*=h+TvU+EuUTYW?oq z+0_7hT-^T`9ZaMOsI08?@b^!TTS_GS`DV0sxVSC_3B5B!pg$mcCx^JWIO?|)*x+!} zs0LPAyt9(WMy9T=V#(c>Mn*=*HKEdHN{i7T4^>_Du z&O;O5;+{PpQQL5M=p}=){8KvGhYzP^5F zXJ_ZD!RBVg@`=^u$)B|Vft$=|A5i}+h!e1h7akt&@<(pLY{58Te(zv)=(oFtm;}h_PJTWaTYHV!m4P9{n#m{$Aqk;)?Io;?E z1LGn_<>BWSH9tR3-!mEa^PL;MLZOLSWz;GPXCrhDDkCeq1L+zZ92}jPV93Zc{4E$i z@Irp?jkM1Sv2pb+J?alMtDo~q zcej=(ePr5llLc7_{m~;Ew%^m{S3RgFj~*p8y@dX!6VSxnGm-wU%4{%hJP}X+^CYN>>^~R&KdR~& Ze_|>p_xam;8XWMarhHYYNWm2Ie*oREQm+62 literal 0 HcmV?d00001 diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg new file mode 100644 index 0000000000..ab0a0ac1ae --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + return ( + <div style={ + formStyles + }> + + + <div className={ + quoteClassName + }>{ + quote + }</div> + <div className={ + quoteClasses.quoteAuthor + }>{ + author + }</div> + <div + className={ + quoteClasses.quoteDescription + } + dangerouslySetInnerHTML={toHTML( + description + )} + /> + </div> + ); + + + + + + + + + + + { textAlign, border, marginTop….more } + + + + + + + + styles + + + + + + classes + + + + + + html content + + + + + + text + + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg new file mode 100644 index 0000000000..b539549439 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg @@ -0,0 +1,148 @@ + + + + AddComponentSteps + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + 4 + + + + + + Apply CSS classes + + + + + + + + Import and assign + CSS classes from + your component + stylesheet. + + + + + + + + You + + + + + + + + + + Add local props + + + + + + + + + + + + + 1 + + + + + Add and assign props to + local variables that match + the props names from + your aggregator. + + + + + + + + + + + + + + + 2 + + + + + Use JSX to recreate the + HTML markup of your + content type and apply both + content and style props. + + + + Add JSX markup + + + + CSS + + + + + + + + + + + + + + + + 3 + + + + + + Apply form styles + + + + + + Group the styles from the + content type’s form into a + separate “styles object” to + simplify markup styling. + + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md index a3005a474a..a2362a14ef 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md @@ -2,11 +2,13 @@ title: Add component --- -WIP: Do not review +The purpose of a Page Builder component is to recreate a Page Builder content type (from your Magento instance) for display within a PWA app. Developing this component is similar to developing other React components in PWA Studio. However, the properties defined within a Page Builder component are determined by the properties returned from your configuration aggregator. The following steps highlight how to put these properties to use in your component: -Page Builder React components are the same as working with other React components in PWA Studio. However, the properties defined within a Page Builder component are determined by the properties returned from your configuration aggregator. This may result in a larger number of properties (props). But not all props are used when the component is initialized. As a result, you need to ensure that a null value is the component can still render correctly. Here is an example of the properties defined in the `exampleQuote.js`. +![Add Component steps overview](AddComponentSteps.svg) -## Build out your component +## Step 1: Add local props + +The first step is to declare local variables that match the names of the props being passed from your aggregator, for destructuring. For our `ExampleQuote` aggregator, we declare and assign these properties as follows: ```js const ExampleQuote = props => { @@ -19,6 +21,7 @@ const ExampleQuote = props => { borderColor, borderWidth, borderRadius, + isHidden, marginTop, marginRight, marginBottom, @@ -30,3 +33,116 @@ const ExampleQuote = props => { cssClasses = [] } = props; ``` + +With a destructuring assignment, our component takes a `props` object and copies its values to our local variables. All you need to do is make sure the names of your local variables exactly match the names of the `props` passed from your aggregator. As noted before, you can use `console.log(props)` at the top of your component to see the names of the `keys` being passed in on the props object. + +## Step 2: Add JSX markup + +Your JSX markup should recreate the HTML structure of your Page Builder content type and provide the slots for rendering its content and styles. For example, here is the markup needed to recreate the structure of our Quote content type and host the local content-related `props` values from our aggregator: + +```jsx +const toHTML = str => ({ __html: str }); + +return ( +
+
{quote}
+
{author}
+
+
+ ); +``` + +Because our `description` property value is HTML, we need to use React's [dangerouslySetInnerHTML] and `__html` to render it out properly. + +## Step 3: Apply form styles + +To make it easy to apply all the inline styles from your content type to your Page Builder component, you can create a separate object that contains only the styles retrieved from the content type's form. These styles include those that are retrieved by [utility functions] like `getAdvanced()` and `getBackgroundImages()`. + +For our component, we created an object called `formStyles` to group our form styles as shown here: + +```js +const formStyles = { + textAlign, + border, + borderColor, + borderWidth, + borderRadius, + isHidden, + marginTop, + marginRight, + marginBottom, + marginLeft, + paddingTop, + paddingRight, + paddingBottom, + paddingLeft +}; +``` + +These are the styles returned from the Advanced form section of our Quote content type (using `getAdvanced()`). When they are grouped together as shown, we can apply them all at once to our component, as follows: + +```jsx +return ( +
+
{quote}
+
{author}
+
+
+); +``` + +Now we need to apply the CSS classes we used to style the rest of our content type. + +## Step 4: Apply CSS classes + +Applying CSS classes to your component works the same as apply these classes to any other React component: first import your CSS stylesheet, then add the stylesheet classes to your JSX in the usual way, using `className`. + +For our component, we import our component stylesheet: + +```js +import quoteStyles from './exampleQuote.css'; +``` + +Then apply the classes within to the correct nodes: + +```jsx +return ( +
+
{quote}
+
{author}
+
+
+); +``` + +In this code, we only used one class per node. However, we often need to apply several classes to a node. To do this, you need to create a variable that concatenates your classes into a single string. + +For example, the `qoute` node (first child) of our content type requires two classes to reproduce it faithfully in our component: `.quote` and `.blueQuote`. To solve this, we created another variable call `quoteClassName` and used it to add both classes to the `quote` node as follows: + +```jsx +const quoteClassName = [quoteClasses.quote, quoteClasses.blueQuote].join(' '); + +return ( +
+
{quote}
+
{author}
+
+
+); +``` + +## Component output + +If you have followed along using the `ExampleQuote` component, you should see something like this displayed in the PWA Venia app: + +![Add Component output](AddComponentOutput.svg) + +[Set up component]: {{ site.baseurl }}{%link pagebuilder/custom-components/setup-component/index.md %} +[dangerouslySetInnerHTML]: https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml +[utility functions]: {{ site.baseurl }}{% link pagebuilder/utility-functions/index.md %} diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-css/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-css/index.md deleted file mode 100644 index 15c1070571..0000000000 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-css/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Add stylesheet ---- - -WIP: Do not review - -Your `.css` file contains all the CSS styles you need to style your component within a PWA app. Styling your Page Builder components is the same as styling all other components in PWA Studio. - -## Build out your CSS styles - -Instructions... diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetCamelCase.png b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetCamelCase.png new file mode 100644 index 0000000000000000000000000000000000000000..7b36686bc55ddbbd5ee791dad37636f2c29f461a GIT binary patch literal 34404 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 bxbP0l+XkKDKW&T literal 0 HcmV?d00001 diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetSteps.svg new file mode 100644 index 0000000000..82fc880397 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetSteps.svg @@ -0,0 +1,110 @@ + + + + AddStylesheetSteps + Created with Sketch. + + + + + + + + + + + + + You + + + + + + + + + Copy content type classes + + + + + + + + + + + + + 1 + + + + + Copy the classes from + the frontend css of your + content type. + + + + + + + + + + + + + + + 2 + + + + + Change the LESS + syntax to standard + CSS syntax. + + + + Change LESS to CSS + + + + CSS + + + + + + + + + + + + + + + 3 + + + + + Rename classes + (optional) + + + Change your class names + to camelCase to to enjoy + dot syntax and intellisense. + + + + + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md new file mode 100644 index 0000000000..32d691e3e8 --- /dev/null +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md @@ -0,0 +1,195 @@ +--- +title: Add stylesheet +--- + +Styling your Page Builder components is the same as styling any other component in PWA Studio. However, the CSS stylesheet for your component should define CSS classes that are comparable to the CSS classes you use on the frontend for original content type (`view/frontend/web/css/source/content-type//_import.less`). The following steps highlight the tasks for setting up the CSS classes for your component: + +![Add Stylesheet steps](AddStylesheetSteps.svg) + +## Step 1: Add content type classes + +Start by adding the CSS classes from the frontend css of your content type. For our Quote content type, we copied the frontend styles (`app/code/Example/PageBuilderQuote/view/frontend/web/css/source/content-type/example-quote/_import.less`) and added them to our `exampleQuote.css`. + + +## Step 2: Convert LESS to CSS + +PWA studio uses [CSS Modules]. It does not include tooling for LESS pre-processors, so you will need to convert your LESS into standard CSS style rules. For example, the LESS stylesheet for our Quote content type is shown here, followed by the equivalent CSS we included in our `exampleQuote.css`. + +**Quote content type LESS styles** (`_import.less`): + +```scss +& when (@media-common = true) { + blockquote.quote { + display: block; + font-size: 1.3em; + margin: 1em; + padding: 0.5em 10px; + quotes: "\201C" "\201D" "\2018" "\2019"; + text-decoration: none; + word-break: normal !important; + line-height: 1.5; + padding: 0; + font-weight: 300; + &:before { + content: open-quote; + font-size: 2.6em; + margin-right: 0.2em; + vertical-align: -0.35em; + line-height: 0; + margin-left: -0.5em; + font-weight: 300; + } + &:after { + content: close-quote; + font-size: 0; + line-height: 0; + margin-left: 0; + } + } + div { + &.quote-author { + text-align: left; + padding-right: 30px; + font-size: 14px; + color: #666; + margin-left: 1.1em; + } + &.quote-description { + text-align: left; + padding-right: 30px; + font-size: 14px; + color: #999; + margin-left: 1.1em; + font-weight: 300; + } + } + .black-quote { + color: #333333; + &:before { + color: #333333; + } + } + .blue-quote { + color: #007ab9; + &:before { + color: #71adcc; + } + } + .green-quote { + color: #009900; + &:before { + color: #009900; + } + } + .red-quote { + color: #990000; + &:before { + color: #990000; + } + } + .purple-quote { + color: #990099; + &:before { + color: #990099; + } + } +} +``` + +**Equivalent component styles** (`exampleQuote.css`): + +```css +.quote { + display: block; + font-size: 1.4em; + margin: 1em 1em 0.3em 0.6em; + quotes: '\201C''\201D''\2018''\2019'; + text-decoration: none; + font-style: italic; + word-break: normal !important; + padding: 0; + font-weight: 300; +} +.quote:before { + content: open-quote; + font-size: 2.4em; + margin-right: 0.1em; + vertical-align: -0.3em; + line-height: 0; + margin-left: -0.3em; + font-weight: 300; +} +.quote:after { + content: close-quote; + font-size: 0; + line-height: 0; + margin-left: 0; +} +.quoteAuthor { + padding-right: 30px; + font-size: 16px; + color: #333333; + line-height: 24px; + margin-left: 1.5em; + word-break: normal !important; + font-weight: 600; +} +.quoteDescription { + position: relative; + padding-right: 30px; + font-size: 16px; + line-height: 18px; + color: #666666; + margin-left: 1.5em; + font-weight: 300; + word-break: normal !important; +} +.blackQuote { + color: #333333; +} +.blackQuote::before { + color: #333333; +} +.blueQuote { + color: #007ab9; +} +.blueQuote::before { + color: #007ab9; +} +.greenQuote { + color: #009900; +} +.greenQuote::before { + color: #009900; +} +.redQuote { + color: #990000; +} +.redQuote::before { + color: #990000; +} +.purpleQuote { + color: #990099; +} +.purpleQuote::before { + color: #990099; +} +``` + +## Step 3: Rename classes (optional) + +Renaming your class names to use camelCase instead of hyphens allows you to work with CSS classes in your component as if they were JavaScript object properties. For example, if you name the class for the quote author's name as `.quote-author` (with a hyphen), you must access this class in your component like this: + +```jsx +
{author}
+``` + +This not only uses a string which is prone to errors, but you don't have the benefit of your editor's intellisense. + +Compare that to using camelCase for your hyphenated class names by renaming `.quote-author` to `.quoteAuthor` and thereby enabling access to CSS classes using dot syntax, as shown here: + +![Change class names to camelCase](AddStylesheetCamelCase.png) + +**Protip**: Use camelCase to rename your CSS classes so that you can use dot syntax and intellisense to browse through your style rules more easily when applying them to your component. + +[CSS Modules]: {{ site.baseurl }}{%link technologies/basic-concepts/css-modules/index.md %} diff --git a/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md b/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md index 0dca3118e2..7d6a5a67df 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md @@ -2,8 +2,6 @@ title: Debugging tips --- -WIP: Do not review - If you haven't yet modified the config object and setup the references you'll see the following console warning in your console to inform you the component is missing: ```text diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg index b53363a1c2..85b66dcc89 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg @@ -11,7 +11,7 @@ - + @@ -22,8 +22,8 @@ - - 3 + + 4 @@ -43,8 +43,8 @@ configAggregator. - - + + @@ -54,7 +54,39 @@ - + + 3 + + + + + Build out the CSS + styles for your + component + (as needed). + + + + Add stylesheet + + + + CSS + + + + + + + + + + + + + + + 2 @@ -92,15 +124,15 @@ - - + + - - + + - + 1 @@ -112,37 +144,5 @@ framework. - - - - - - - - - - - - - 4 - - - - - Build out the CSS - styles for your - component - (as needed). - - - - Add CSS - - - - CSS - - - \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/ConfigureComponentOutput.png b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/ConfigureComponentOutput.png new file mode 100644 index 0000000000000000000000000000000000000000..b87e19b1472da2663963587bc190cad1d4f17d60 GIT binary patch literal 19886 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 p@n`t$kI-HTEOpL|TxCD% { ```css /* class for testing setup */ -.component-text { +.componentText { line-height: 1.4em; font-size: 1em; color: #0066cc; @@ -48,9 +48,9 @@ import React from 'react'; // Component for testing setup const ExampleQuote = props => { return ( -
-
Content Type: {props.contentType}
-
Appearance: {props.appearance}
+
+
Content Type: {props.contentType}
+
Appearance: {props.appearance}
); }; @@ -101,6 +101,13 @@ component: React.lazy(() => import('./ContentTypes/ExampleQuote')) After adding these files and hooking them up to the framework through the configuration file (config.js), your skeleton component should appear on the Venia home page, looking something like this: -![ExampleQuote component rendered with starter code](SetupComponentTest.svg) +![ExampleQuote component rendered with starter code](ConfigureComponentOutput.png) -Now you are ready to start developing your content type component. +If you see this rendering without errors in the Venia app, you are ready to start developing your content type component. + +## Troubleshooting + +If you have errors, make sure you have: + +1. Copied the correct starter code for each of the four files. +2. Added the correct name of your content type to the `config.js` file (`example_quote` if you are using the Quote content type). From ab136e0b27dce2813869492bb70c877be18eb893 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Wed, 16 Oct 2019 22:46:51 -0500 Subject: [PATCH 23/38] PB-36: [Docs] Creating custom Page Builder components Added stylesheet and component topics --- .../ContentTypes/ExampleQuote/exampleQuote.js | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js index 2eaeab9ac9..2f0b087dbf 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js @@ -56,18 +56,20 @@ const ExampleQuote = props => { paddingLeft }; - const quoteClassName = [quoteClasses.quote, quoteClasses.blueQuote].join(' '); + const quoteClassName = [quoteClasses.quote, quoteClasses.blueQuote].join( + ' ' + ); -return ( -
-
{quote}
-
{author}
-
-
-); + return ( +
+
{quote}
+
{author}
+
+
+ ); }; /** From 3020893ba1e9c889e01277d17b1d88f653f8f6a2 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Wed, 16 Oct 2019 22:48:00 -0500 Subject: [PATCH 24/38] PB-36: [Docs] Creating custom Page Builder components Added stylesheet and component topics --- .../PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js index 2f0b087dbf..fb92fe70e6 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js @@ -35,8 +35,7 @@ const ExampleQuote = props => { paddingTop, paddingRight, paddingBottom, - paddingLeft, - cssClasses = [] + paddingLeft } = props; const formStyles = { From e2d887e74c394fe9d0bd6a5a1e341e628cce0d93 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Thu, 17 Oct 2019 07:22:43 -0500 Subject: [PATCH 25/38] PB-36: [Docs] Creating custom Page Builder components Changes to top nav and various diagrams and component alphabetizing --- .../ExampleQuote/exampleQuote.css | 6 ++ pwa-devdocs/.gitignore | 1 + pwa-devdocs/src/_data/pagebuilder.yml | 48 ++++----- pwa-devdocs/src/_data/top-nav.yml | 3 - .../{overview => }/PageBuilderIntegration.svg | 0 .../PageBuilderIntegrationDetails.svg | 0 .../custom-components/add-aggregator/index.md | 12 +-- .../custom-components/add-component/index.md | 3 +- .../custom-components/debugging/index.md | 2 +- .../custom-components/overview/index.md | 6 +- .../ConfigureComponentOutput.png | Bin 19886 -> 20554 bytes .../setup-component/SetupComponentSteps.svg | 80 +++++++++++++++ .../setup-component/index.md | 33 +++--- .../src/pagebuilder/{overview => }/index.md | 0 .../LimitationsTextAlign.png | Bin .../overview/masterFormatToComponent.svg | 96 ------------------ 16 files changed, 139 insertions(+), 151 deletions(-) rename pwa-devdocs/src/pagebuilder/{overview => }/PageBuilderIntegration.svg (100%) rename pwa-devdocs/src/pagebuilder/{overview => }/PageBuilderIntegrationDetails.svg (100%) create mode 100644 pwa-devdocs/src/pagebuilder/custom-components/setup-component/SetupComponentSteps.svg rename pwa-devdocs/src/pagebuilder/{overview => }/index.md (100%) rename pwa-devdocs/src/pagebuilder/{overview => known-limitations}/LimitationsTextAlign.png (100%) delete mode 100644 pwa-devdocs/src/pagebuilder/overview/masterFormatToComponent.svg diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css index b36c58ea57..2529bc0085 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css @@ -1,3 +1,9 @@ +.testClass { + line-height: 1.4em; + font-size: 1em; + color: #0066cc; +} + .quote { display: block; font-size: 1.4em; diff --git a/pwa-devdocs/.gitignore b/pwa-devdocs/.gitignore index 14459cf7c2..de1f69ecae 100644 --- a/pwa-devdocs/.gitignore +++ b/pwa-devdocs/.gitignore @@ -1,6 +1,7 @@ _site/ .sass-cache/ .jekyll-metadata +.jekyll-cache node_modules src/builds diff --git a/pwa-devdocs/src/_data/pagebuilder.yml b/pwa-devdocs/src/_data/pagebuilder.yml index 8bd16df7da..269113b36f 100644 --- a/pwa-devdocs/src/_data/pagebuilder.yml +++ b/pwa-devdocs/src/_data/pagebuilder.yml @@ -1,7 +1,7 @@ title: Page Builder entries: - label: Page Builder integration - url: /pagebuilder/overview/ + url: /pagebuilder/ - label: Known limitations url: /pagebuilder/known-limitations/ @@ -31,47 +31,47 @@ entries: - label: Page Builder components entries: - - label: Row - url: /pagebuilder/components/row/ - - - label: Column - url: /pagebuilder/components/column/ - - - label: Tabs - url: /pagebuilder/components/tabs/ - - - label: Text - url: /pagebuilder/components/text/ + - label: Banner + url: /pagebuilder/components/banner/ - - label: Heading - url: /pagebuilder/components/heading/ + - label: Block + url: /pagebuilder/components/block/ - label: Buttons url: /pagebuilder/components/buttons/ + - label: Column + url: /pagebuilder/components/column/ + - label: Divider url: /pagebuilder/components/divider/ + - label: Heading + url: /pagebuilder/components/heading/ + - label: HTML Code url: /pagebuilder/components/html/ - label: Image url: /pagebuilder/components/image/ - - label: Video - url: /pagebuilder/components/video/ + - label: Map + url: /pagebuilder/components/map/ - - label: Banner - url: /pagebuilder/components/banner/ + - label: Products + url: /pagebuilder/components/products/ + + - label: Row + url: /pagebuilder/components/row/ - label: Slider url: /pagebuilder/components/slider/ - - label: Map - url: /pagebuilder/components/map/ + - label: Tabs + url: /pagebuilder/components/tabs/ - - label: Block - url: /pagebuilder/components/block/ + - label: Text + url: /pagebuilder/components/text/ - - label: Products - url: /pagebuilder/components/products/ + - label: Video + url: /pagebuilder/components/video/ diff --git a/pwa-devdocs/src/_data/top-nav.yml b/pwa-devdocs/src/_data/top-nav.yml index dede9dd7d1..9fbd143acd 100644 --- a/pwa-devdocs/src/_data/top-nav.yml +++ b/pwa-devdocs/src/_data/top-nav.yml @@ -7,9 +7,6 @@ - label: Peregrine Components url: /peregrine/ -- label: PageBuilder - url: /pagebuilder/overview/ - - label: Venia Storefront url: /venia-pwa-concept/ diff --git a/pwa-devdocs/src/pagebuilder/overview/PageBuilderIntegration.svg b/pwa-devdocs/src/pagebuilder/PageBuilderIntegration.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/overview/PageBuilderIntegration.svg rename to pwa-devdocs/src/pagebuilder/PageBuilderIntegration.svg diff --git a/pwa-devdocs/src/pagebuilder/overview/PageBuilderIntegrationDetails.svg b/pwa-devdocs/src/pagebuilder/PageBuilderIntegrationDetails.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/overview/PageBuilderIntegrationDetails.svg rename to pwa-devdocs/src/pagebuilder/PageBuilderIntegrationDetails.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md index 5638e2a243..bade8fcc5d 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md @@ -35,20 +35,18 @@ The interface for a `configAggregator` is: (node: HTMLElement, props: {contentType: string, appearance: string}) => {[key: string]: any} ``` -### Purpose - To recap, the purpose of your component's aggregator is to collect (aggregate) properties from your content type's HTML and return a property object for use in your component. The object you return should contain all the text, html, inline styles, and classes you need to faithfully reproduce your content type as a component in PWA Studio. -Let's look at our Quote content HTML in detail (color coded for easier analysis) to determine the properties we want to return for our component: +Let's look at our Quote content HTML in detail (color coded for easier analysis) to determine the properties we want to pass to our component: ![Master format HTML](MasterFormatHTML.svg) Here's what we think we need for our component: -- The inline **styles** from the main node -- The **text** content from the `
` and `author` nodes -- The **HTML** content from the `description` node -- The CSS **classes** from all three child nodes (`
`, `author`, and `description`) +- The inline **styles** from the main node +- The **text** content from the `
` and `author` nodes +- The **HTML** content from the `description` node +- The CSS **classes** from all three child nodes (`
`, `author`, and `description`) To retrieve these properties, you'll want to use a combination of [HTMLElement DOM properties] along with our [utility functions], as shown next in the example. diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md index a2362a14ef..0e5a8014c3 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md @@ -29,8 +29,7 @@ const ExampleQuote = props => { paddingTop, paddingRight, paddingBottom, - paddingLeft, - cssClasses = [] + paddingLeft } = props; ``` diff --git a/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md b/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md index 7d6a5a67df..3bb17ec49a 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md @@ -2,7 +2,7 @@ title: Debugging tips --- -If you haven't yet modified the config object and setup the references you'll see the following console warning in your console to inform you the component is missing: +If you haven't yet modified the config object and setup the references you'll see the following console warning, telling you the component is missing: ```text parseStorageHtml.js?4091:67 No config aggregator defined for content type X, this content type won't be rendered. diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md b/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md index 60869858f5..60c210f8b8 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md @@ -14,10 +14,10 @@ The topics for these steps show you how to create the code that retrieves proper Before you start creating your custom content type component in PWA Studio, make sure you have met the following prerequisites: -- Your Magento instance should have a custom content type added and saved to the **home** page in the Admin. Currently, the `home` page is the only page you can render Page Builder content within PWA Studio. -- Your Magento instance should render this content type on the home page of your storefront. +- Your Magento instance should have a custom content type added and saved to the **home** page in the Admin. Currently, the `home` page is the only page you can render Page Builder content within PWA Studio. +- Your Magento instance should render this content type on the home page of your storefront. -{: .bs-callout .bs-callout-info} +{: .bs-callout-info} We assume you already have the PWA Studio set up and running in your development environment. If you do not, [use these instructions] to do that now. ## Using the Quote content type diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/ConfigureComponentOutput.png b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/ConfigureComponentOutput.png index b87e19b1472da2663963587bc190cad1d4f17d60..2f98d4389fcaaf01c26564f5012742333e9135f2 100644 GIT binary patch literal 20554 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 D7s!>T literal 19886 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 p@n`t$kI-HTEOpL|TxCD% + + + SetupComponentSteps + Created with Sketch. + + + + + + + + + + + + You + + + + + + + + Create starter files + + + + + + + + + + + + + 1 + + + + + Create starter code for + the four files that make + up your component. + + + + + + + + + + + + + + + 2 + + + + + Add your starter files + to the framework + configuration object. + + + + Configure component + + + + CSS + + + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md index a87623ade0..64b5edaa7a 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md @@ -2,22 +2,24 @@ title: Set up component --- +Setting up your component is about getting the essential component files in place so that your component is actively participating in the Page Builder component framework. After you create these files and wire them into the component framework, you can focus all your attention on developing each file to faithfully recreate your content type as a PWA component. The following steps highlight the tasks for setting up your component: + +![Component setup steps](SetupComponentSteps.svg) + +## Step 1: Create starter files + The first thing you need to do within PWA Studio is create the directory and skeleton files needed for your component, as follows: -- **configAggregator.js** (required) - Function you will implement to retrieve content and styling properties from your content type's master format HTML. -- **myComponent.js** (required) - React component you will implement by populating properties that correspond to the original Page Builder content type. For our ExampleQuote, we use `exampleQuote.js`. -- **myComponent.css** (optional but usually needed) - CSS styles that provide the addition styles needed to present your component as desired. For our ExampleQuote, we use `exampleQuote.css`. +- **configAggregator.js** (required) - Function to retrieve content and styling properties from your content type's master format HTML. +- **myComponent.js** (required) - React component for populating properties that correspond to the original Page Builder content type. For our ExampleQuote, we use `exampleQuote.js`. +- **myComponent.css** (optional but usually needed) - CSS classes that provide addition styles needed to present your component as desired. For our ExampleQuote, we use `exampleQuote.css`. - **index.js** (required) - Entry file needed to identify your component in PWA Studio. -## Component location - Currently, you need to add your content type's component, like `ExampleQuote`, to the `ContentTypes` directory, where the native Page Builder components are kept. This will change when we implement different rules for extending Page Builder components. But for now, add your custom content type components as shown here: ![Component file structure](PageBuilderFilesSetup.png) -## Component starter code - -The purpose of the starter code is simply getting the component files in place so that your component is actively participating in the Page Builder component framework. After this is set up, you can focus all your energy on developing each file to create a fully functioning content type component. +Starter code for the `ExampleQuote` component files is provided as follows. ### configAggregator.js @@ -33,7 +35,7 @@ export default (node, props) => { ```css /* class for testing setup */ -.componentText { +.testClass { line-height: 1.4em; font-size: 1em; color: #0066cc; @@ -44,11 +46,12 @@ export default (node, props) => { ```jsx import React from 'react'; +import quoteClasses from './exampleQuote.css' // Component for testing setup const ExampleQuote = props => { return ( -
+
Content Type: {props.contentType}
Appearance: {props.appearance}
@@ -64,19 +67,19 @@ export default ExampleQuote; export { default } from './exampleQuote'; ``` -## Component configuration +## Step 2: Configure component -Now it is time to connect your component files into the Page Builder component framework. The framework provides a static config object (in `config.js`) that acts as a kind of registry of content types supported within PWA Studio. To include support for your custom content type component, you'll need to add an entry to the `config.js`: + Configuring your component is about connecting your component to the Page Builder component framework. The framework provides a static config object (in `config.js`) that acts as a kind of registry of content types supported within PWA Studio. To include support for your custom content type component, you'll need to add an entry to the `config.js`: ![Component config file](PageBuilderConfigFile.png) -Open the config.js file and `import` your configAggregator. For our ExampleQuote: +Open the `config.js` file and `import` your `configAggregator`. The import statement for our ExampleQuote is shown here: ```js import exampleQuoteConfigAggregator from './ContentTypes/ExampleQuote/configAggregator'; ``` -Add an entry that references your `configAggregator` and `component`, using the name of your content type as the `key`. For our `ExampleQuote`, the name of the Page Builder Quote content type is `example_quote`, so the entry for our Quote component (`ExampleQuote`) in the config file should look like this: +Add an entry that references your `configAggregator` and `component`, using the name of your content type as the `key`. For our `ExampleQuote`, the name of the Quote content type is `example_quote`, so the entry for our Quote component (`ExampleQuote`) in the config file looks like this: ```js example_quote: { @@ -99,7 +102,7 @@ component: React.lazy(() => import('./ContentTypes/ExampleQuote')) ## Test the component setup -After adding these files and hooking them up to the framework through the configuration file (config.js), your skeleton component should appear on the Venia home page, looking something like this: +After adding these files and hooking them up to the framework through the configuration file (`config.js`), your skeleton component should appear on the Venia home page, looking something like this: ![ExampleQuote component rendered with starter code](ConfigureComponentOutput.png) diff --git a/pwa-devdocs/src/pagebuilder/overview/index.md b/pwa-devdocs/src/pagebuilder/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/overview/index.md rename to pwa-devdocs/src/pagebuilder/index.md diff --git a/pwa-devdocs/src/pagebuilder/overview/LimitationsTextAlign.png b/pwa-devdocs/src/pagebuilder/known-limitations/LimitationsTextAlign.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/overview/LimitationsTextAlign.png rename to pwa-devdocs/src/pagebuilder/known-limitations/LimitationsTextAlign.png diff --git a/pwa-devdocs/src/pagebuilder/overview/masterFormatToComponent.svg b/pwa-devdocs/src/pagebuilder/overview/masterFormatToComponent.svg deleted file mode 100644 index 521b0d4f10..0000000000 --- a/pwa-devdocs/src/pagebuilder/overview/masterFormatToComponent.svg +++ /dev/null @@ -1,96 +0,0 @@ - - - - MasterFormatToComponent - Created with Sketch. - - - - - - - - - - - - - - - - - React components - - - - - - - - - - - master format - - - - - Magento instance - - - - - - - - - - - - - PWA app - - - - - - - - - - - - - - - - Page Builder for PWA - - - - - - - - - - - - - - - - - - - - - - - - - - Converting the master format HTML into React components - - - \ No newline at end of file From d31841754c157a283c7eb162ad0cee26f90aa8a4 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Thu, 17 Oct 2019 07:27:52 -0500 Subject: [PATCH 26/38] PB-36: [Docs] Creating custom Page Builder components Removed ExampleQuote component --- .../ExampleQuote/configAggregator.js | 16 --- .../ExampleQuote/exampleQuote.css | 91 -------------- .../ContentTypes/ExampleQuote/exampleQuote.js | 119 ------------------ .../ContentTypes/ExampleQuote/index.js | 1 - .../RichContent/PageBuilder/config.js | 4 - 5 files changed, 231 deletions(-) delete mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js delete mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css delete mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js delete mode 100644 packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/index.js diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js deleted file mode 100644 index 9e35bb5508..0000000000 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/configAggregator.js +++ /dev/null @@ -1,16 +0,0 @@ -import { getAdvanced } from '../../utils'; - -export default node => { - console.log(node); - - const propObject = { - quote: node.childNodes[0].textContent, - author: node.childNodes[1].textContent, - description: node.childNodes[2].innerHTML, - ...getAdvanced(node) - }; - - console.log(propObject); - - return propObject; -}; diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css deleted file mode 100644 index 2529bc0085..0000000000 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.css +++ /dev/null @@ -1,91 +0,0 @@ -.testClass { - line-height: 1.4em; - font-size: 1em; - color: #0066cc; -} - -.quote { - display: block; - font-size: 1.4em; - margin: 1em 1em 0.3em 0.6em; - quotes: '\201C''\201D''\2018''\2019'; - text-decoration: none; - font-style: italic; - word-break: normal !important; - line-height: 1.25em; - padding: 0; - font-weight: 300; -} - -.quote:before { - content: open-quote; - font-size: 2.4em; - margin-right: 0.1em; - vertical-align: -0.3em; - line-height: 0; - margin-left: -0.3em; - font-weight: 300; -} - -.quote:after { - content: close-quote; - font-size: 0; - line-height: 0; - margin-left: 0; -} - -.quoteAuthor { - padding-right: 30px; - font-size: 1em; - color: #333333; - line-height: 1.6em; - margin-left: 1.5em; - word-break: normal !important; - font-weight: 600; -} - -.quoteDescription { - position: relative; - padding-right: 30px; - font-size: 16px; - line-height: 18px; - color: #333333 !important; - margin-left: 1.5em; - font-weight: 300; - word-break: normal !important; -} - -.blackQuote { - color: #333333; -} -.blackQuote::before { - color: #333333; -} - -.blueQuote { - color: #007ab9; -} -.blueQuote::before { - color: #007ab9; -} - -.greenQuote { - color: #009900; -} -.greenQuote::before { - color: #009900; -} - -.redQuote { - color: #990000; -} -.redQuote::before { - color: #990000; -} - -.purpleQuote { - color: #990099; -} -.purpleQuote::before { - color: #990099; -} diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js deleted file mode 100644 index fb92fe70e6..0000000000 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/exampleQuote.js +++ /dev/null @@ -1,119 +0,0 @@ -import React from 'react'; -import quoteClasses from './exampleQuote.css'; -import { arrayOf, string, bool } from 'prop-types'; - -const toHTML = str => ({ __html: str }); - -/** - * Page Builder ExampleQuote component. - * - * This is a custom content type component using the Page Builder / PWA integration. It can be consumed without Page Builder. - * - * @typedef ExampleQuote - * @kind functional component - * - * @param {props} props React component props - * - * @returns {React.Element} A React component that renders ExampleQuote with optional styling properties. - */ -const ExampleQuote = props => { - console.log(props); - const { - quote, - author, - description, - textAlign, - border, - borderColor, - borderWidth, - borderRadius, - isHidden, - marginTop, - marginRight, - marginBottom, - marginLeft, - paddingTop, - paddingRight, - paddingBottom, - paddingLeft - } = props; - - const formStyles = { - textAlign, - border, - borderColor, - borderWidth, - borderRadius, - isHidden, - marginTop, - marginRight, - marginBottom, - marginLeft, - paddingTop, - paddingRight, - paddingBottom, - paddingLeft - }; - - const quoteClassName = [quoteClasses.quote, quoteClasses.blueQuote].join( - ' ' - ); - - return ( -
-
{quote}
-
{author}
-
-
- ); -}; - -/** - * Props for {@link ExampleQuote} - * - * @typedef props - * - * @property {String} quote Text of quotation - * @property {String} author Name of the quotation's author - * @property {String} description Description of the author - * @property {String} text ExampleQuote text - * @property {String} textAlign Alignment of the text within the parent container - * @property {String} border CSS border property - * @property {String} borderColor CSS border color property - * @property {String} borderWidth CSS border width property - * @property {String} borderRadius CSS border radius property - * @property {String} marginTop CSS margin top property - * @property {String} marginRight CSS margin right property - * @property {String} marginBottom CSS margin bottom property - * @property {String} marginLeft CSS margin left property - * @property {String} paddingTop CSS padding top property - * @property {String} paddingRight CSS padding right property - * @property {String} paddingBottom CSS padding bottom property - * @property {String} paddingLeft CSS padding left property - * @property {Array} cssClasses List of CSS classes to be applied to the component - */ -ExampleQuote.propTypes = { - quote: string, - author: string, - description: string, - textAlign: string, - border: string, - borderColor: string, - borderWidth: string, - borderRadius: string, - isHidden: bool, - marginTop: string, - marginRight: string, - marginBottom: string, - marginLeft: string, - paddingTop: string, - paddingRight: string, - paddingBottom: string, - paddingLeft: string, - cssClasses: arrayOf(string) -}; - -export default ExampleQuote; diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/index.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/index.js deleted file mode 100644 index ff59e1d6d5..0000000000 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ExampleQuote/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './exampleQuote'; diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/config.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/config.js index 53f459e99a..65fce4851f 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/config.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/config.js @@ -99,10 +99,6 @@ const contentTypesConfig = { configAggregator: sliderConfigAggregator, component: React.lazy(() => import('./ContentTypes/Slider')) }, - example_quote: { - configAggregator: exampleQuoteConfigAggregator, - component: React.lazy(() => import('./ContentTypes/ExampleQuote')) - }, // Slide is just a banner wrapped inside a slider slide: { configAggregator: bannerConfigAggregator, From 27ec59f1759ea049f197a8819b4c08cbfe3bc1e8 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Thu, 17 Oct 2019 07:28:41 -0500 Subject: [PATCH 27/38] PB-36: [Docs] Creating custom Page Builder components Removed ExampleQuote component --- .../venia-ui/lib/components/RichContent/PageBuilder/config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/venia-ui/lib/components/RichContent/PageBuilder/config.js b/packages/venia-ui/lib/components/RichContent/PageBuilder/config.js index 65fce4851f..779530c35d 100644 --- a/packages/venia-ui/lib/components/RichContent/PageBuilder/config.js +++ b/packages/venia-ui/lib/components/RichContent/PageBuilder/config.js @@ -24,7 +24,6 @@ import mapConfigAggregator from './ContentTypes/Map/configAggregator'; import bannerConfigAggregator from './ContentTypes/Banner/configAggregator'; import ButtonItem from './ContentTypes/ButtonItem'; import sliderConfigAggregator from './ContentTypes/Slider/configAggregator'; -import exampleQuoteConfigAggregator from './ContentTypes/ExampleQuote/configAggregator'; const contentTypesConfig = { row: { From 38d998f1fda887b7ec9b44140eacc4209e64e8c3 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Thu, 17 Oct 2019 07:37:24 -0500 Subject: [PATCH 28/38] PB-36: [Docs] Creating custom Page Builder components Optimized images --- .../pagebuilder/PageBuilderIntegration.svg | 2 +- .../PageBuilderIntegrationDetails.svg | 320 +----------------- .../add-aggregator/AddAggregatorOverview.svg | 91 +---- .../AggregatorHTMLConsoleOutput.png | Bin 44034 -> 13055 bytes .../AggregatorObjectConsoleOutput.png | Bin 82488 -> 22280 bytes .../add-aggregator/MasterFormatHTML.svg | 112 +----- .../MasterFormatToComponent.svg | 97 +----- .../add-component/AddComponentOutput.png | Bin 78012 -> 22232 bytes .../add-component/AddComponentOutput.svg | 89 +---- .../add-component/AddComponentSteps.svg | 149 +------- .../add-stylesheet/AddStylesheetCamelCase.png | Bin 34404 -> 10217 bytes .../add-stylesheet/AddStylesheetSteps.svg | 111 +----- .../overview/OverviewSteps.svg | 149 +------- .../overview/PageBuilderQuoteAdmin.png | Bin 41720 -> 11911 bytes .../overview/PageBuilderQuoteStorefront.png | Bin 37654 -> 11349 bytes .../ConfigureComponentOutput.png | Bin 20554 -> 6317 bytes .../setup-component/PageBuilderConfigFile.png | Bin 13807 -> 4661 bytes .../setup-component/PageBuilderFilesSetup.png | Bin 35297 -> 8223 bytes .../setup-component/SetupComponentSteps.svg | 81 +---- 19 files changed, 10 insertions(+), 1191 deletions(-) diff --git a/pwa-devdocs/src/pagebuilder/PageBuilderIntegration.svg b/pwa-devdocs/src/pagebuilder/PageBuilderIntegration.svg index 0c3c542159..90475caedf 100644 --- a/pwa-devdocs/src/pagebuilder/PageBuilderIntegration.svg +++ b/pwa-devdocs/src/pagebuilder/PageBuilderIntegration.svg @@ -1 +1 @@ -15 native content types (dynamic blocks not included)Your custom content types also participate in this integrationMagento instance15 equivalent React componentsPWA StudioYou will need to create your own React components that are equivalent to your Page Builder content typesThe PWA PageBuilder component maps Page Builder content types from the master format to their equivalent, pre- built React components.The PWA PageBuilder component retrieves and populates the React components with the data from the master format and returns them for rendering.This guide explains how.However…master formatReact components(backend)(client side)12 \ No newline at end of file +15 native content types (dynamic blocks not included)Your custom content types also participate in this integrationMagento instance15 equivalent React componentsPWA StudioYou will need to create your own React components that are equivalent to your Page Builder content typesThe PWA PageBuilder component maps Page Builder content types from the master format to their equivalent, pre- built React components.The PWA PageBuilder component retrieves and populates the React components with the data from the master format and returns them for rendering.This guide explains how.However…master formatReact components(backend)(client side)12 \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/PageBuilderIntegrationDetails.svg b/pwa-devdocs/src/pagebuilder/PageBuilderIntegrationDetails.svg index 0766bb457a..b604485930 100644 --- a/pwa-devdocs/src/pagebuilder/PageBuilderIntegrationDetails.svg +++ b/pwa-devdocs/src/pagebuilder/PageBuilderIntegrationDetails.svg @@ -1,319 +1 @@ - - - - PageBuilderIntegrationDetails - Created with Sketch. - - - - - - - - - - - - - - - - NO - - - - - YES - - - - - - - - - - - - - - - - - 4 - - - - - - - - - - - - - - - - - - - - 7 - - - - - Uses configuration to return - the content type’s equivalent - React component. - - - - - - Magento - - - - - - PWA app - - - - - - - - - - - - - - - - - 1 - - - - - Requests content (GraphQL) and returns CMS page or block HTML. - - - - - - - - - - Customer - - - - - - - PageBuilder - - - - - ContentTypeFactory - - - - config - aggregator - - - content type - components - - - - - - - - - - - - - - - - - - - - - - - - - ( ) - - - - - - parser - - - ( ) - - - - - Is it Page - Builder - content? - - - - - - - - { } - - - - - config - - - - - Returns - Page Builder - content to - the PWA - app (Venia). - - - Returns - object tree with - properties. - - - Passes - master - format. - - - Passes object - tree to factory. - - - - - - - - - - - - 8 - - - - Parse each content type from - master format and use - configuration to return properties - from its configAggregator. - - - for each content type - - - Renders and - returns components - with properties. - - - - - - - - - - - - - - 5 - - - - - - - - - - - - - - 6 - - - - - - - - - - Developer - - - - - - - - - - - - - - - - 2 - - - - - - - - - - - - - - - 9 - - - - - RichContent - - - - - - \ No newline at end of file +NOYES47Uses configuration to return the content type’s equivalent React component.MagentoPWA app1Requests content (GraphQL) and returns CMS page or block HTML. CustomerPageBuilderContentTypeFactoryconfig aggregatorcontent type components( )parser( )Is it Page Builder content?{ }configReturns Page Builder content to the PWA app (Venia).Returns object tree with properties.Passes master format.Passes object tree to factory.8Parse each content type from master format and use configuration to return properties from its configAggregator.for each content typeRenders and returns components with properties.56Developer29RichContent \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg index 4ed2155ddf..9e5afa2b4d 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg @@ -1,90 +1 @@ - - - - AddAggregatorOverview - Created with Sketch. - - - - - - - - - master format - - - - aggregator - - - - - - - - Build out your aggregator - to retrieve properties from - your content type nodes - within the master format. - - - Return the properties in an object - so that the framework can push it - to you component to populate - corresponding properties. - - - - component - - - - - - - - - - - - - - - - - - - - - - use utility & DOM functions - - - return property object - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file +master formataggregatorBuild out your aggregator to retrieve properties from your content type nodes within the master format.Return the properties in an object so that the framework can push it to you component to populate corresponding properties. componentuse utility & DOM functionsreturn property object \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AggregatorHTMLConsoleOutput.png b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AggregatorHTMLConsoleOutput.png index 182678741bfdc15c8b2911b2a36cff7e047e19e9..343686aab5045dc4d03936de868bf23b86bcf621 100644 GIT binary patch literal 13055 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 Q`~b*FDNB}%8~y%&0Kr?1-~a#s literal 44034 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 literal 82488 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 Ze_|>p_xam;8XWMarhHYYNWm2Ie*oREQm+62 diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg index ab0a0ac1ae..7de6ae4b23 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg @@ -1,88 +1 @@ - - - - - - - - - - - - - - - - - - - return ( - <div style={ - formStyles - }> - - - <div className={ - quoteClassName - }>{ - quote - }</div> - <div className={ - quoteClasses.quoteAuthor - }>{ - author - }</div> - <div - className={ - quoteClasses.quoteDescription - } - dangerouslySetInnerHTML={toHTML( - description - )} - /> - </div> - ); - - - - - - - - - - - { textAlign, border, marginTop….more } - - - - - - - - styles - - - - - - classes - - - - - - html content - - - - - - text - - - - \ No newline at end of file +return ( <div style={ formStyles }> <div className={ quoteClassName }>{ quote }</div> <div className={ quoteClasses.quoteAuthor }>{ author }</div> <div className={ quoteClasses.quoteDescription } dangerouslySetInnerHTML={toHTML( description )} /> </div> );{ textAlign, border, marginTop….more }stylesclasseshtml contenttext \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg index b539549439..4427cd0b2a 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg @@ -1,148 +1 @@ - - - - AddComponentSteps - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - 4 - - - - - - Apply CSS classes - - - - - - - - Import and assign - CSS classes from - your component - stylesheet. - - - - - - - - You - - - - - - - - - - Add local props - - - - - - - - - - - - - 1 - - - - - Add and assign props to - local variables that match - the props names from - your aggregator. - - - - - - - - - - - - - - - 2 - - - - - Use JSX to recreate the - HTML markup of your - content type and apply both - content and style props. - - - - Add JSX markup - - - - CSS - - - - - - - - - - - - - - - - 3 - - - - - - Apply form styles - - - - - - Group the styles from the - content type’s form into a - separate “styles object” to - simplify markup styling. - - - - \ No newline at end of file +4 Apply CSS classesImport and assign CSS classes from your component stylesheet.YouAdd local props1Add and assign props to local variables that match the props names from your aggregator.2Use JSX to recreate the HTML markup of your content type and apply both content and style props.Add JSX markupCSS3 Apply form stylesGroup the styles from the content type’s form into a separate “styles object” to simplify markup styling. \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetCamelCase.png b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetCamelCase.png index 7b36686bc55ddbbd5ee791dad37636f2c29f461a..c7be8f199f36d235b444c684bedfba7ffea8c21c 100644 GIT binary patch literal 10217 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 literal 34404 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 bxbP0l+XkKDKW&T diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetSteps.svg index 82fc880397..b215a70ce8 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetSteps.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetSteps.svg @@ -1,110 +1 @@ - - - - AddStylesheetSteps - Created with Sketch. - - - - - - - - - - - - - You - - - - - - - - - Copy content type classes - - - - - - - - - - - - - 1 - - - - - Copy the classes from - the frontend css of your - content type. - - - - - - - - - - - - - - - 2 - - - - - Change the LESS - syntax to standard - CSS syntax. - - - - Change LESS to CSS - - - - CSS - - - - - - - - - - - - - - - 3 - - - - - Rename classes - (optional) - - - Change your class names - to camelCase to to enjoy - dot syntax and intellisense. - - - - - - - \ No newline at end of file +YouCopy content type classes1Copy the classes from the frontend css of your content type.2Change the LESS syntax to standard CSS syntax.Change LESS to CSSCSS3 Rename classes (optional)Change your class names to camelCase to to enjoy dot syntax and intellisense. \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg index 85b66dcc89..ce8284b791 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg @@ -1,148 +1 @@ - - - - OverviewSteps - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - 4 - - - - - - Add component - - - - - - - - Build out your - React component using - the properties from the - configAggregator. - - - - - - - - - - - - - - - 3 - - - - - Build out the CSS - styles for your - component - (as needed). - - - - Add stylesheet - - - - CSS - - - - - - - - - - - - - - - - 2 - - - - - - Add aggregator - - - - - - Build out your - configAggregator to get - properties from your content - type’s master format. - - - - - - - - You - - - - - - - - - - Set up component - - - - - - - - - - - - - 1 - - - - - Create and configure - your component files - to the component - framework. - - - - \ No newline at end of file +4 Add componentBuild out your React component using the properties from the configAggregator.3Build out the CSS styles for your component (as needed).Add stylesheetCSS2 Add aggregatorBuild out your configAggregator to get properties from your content type’s master format.YouSet up component1Create and configure your component files to the component framework. \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteAdmin.png b/pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteAdmin.png index 3d997c22cdc5dc529cb4c88eead90e7c11bf826a..58a994f84dd21d319ccd7620954e16de249d29ad 100644 GIT binary patch literal 11911 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 literal 41720 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 diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteStorefront.png b/pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteStorefront.png index 4dcd199a5be574391867f58514a6d371e6f1a941..e246a6fc418da1729f24348ee12f20d2b5e4e9b1 100644 GIT binary patch literal 11349 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
-
{quote}
-
{author}
-
-
- ); +
+
{quote}
+
{author}
+
+
+); ``` Because our `description` property value is HTML, we need to use React's [dangerouslySetInnerHTML] and `__html` to render it out properly. diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md index 64b5edaa7a..25532a893d 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md @@ -90,7 +90,7 @@ example_quote: { ### A note about lazy loading components -When building PWAs, performance is key. That's why we recommend loading less critical components using `React.lazy`. This will result in a very slight delay in that content rendering but will ensure we don't bloat the bundle size for the store. +When building PWAs, performance is key. That's why we recommend loading less critical components using `React.lazy`. This will result in a very slight delay in that content rendering but will ensure we don't bloat the bundle size for the store. For more information, see [React lazy loading]. By default, we apply `React.lazy` to the following content types: Banner, Slider, Slide Item, Tab, Tab Item, Button, Button Item, Block, Products, HTML, and Divider. @@ -114,3 +114,5 @@ If you have errors, make sure you have: 1. Copied the correct starter code for each of the four files. 2. Added the correct name of your content type to the `config.js` file (`example_quote` if you are using the Quote content type). + +[React lazy loading]: https://reactjs.org/docs/code-splitting.html#reactlazy diff --git a/pwa-devdocs/src/pagebuilder/known-limitations/index.md b/pwa-devdocs/src/pagebuilder/known-limitations/index.md index c903624353..aa24a6538d 100644 --- a/pwa-devdocs/src/pagebuilder/known-limitations/index.md +++ b/pwa-devdocs/src/pagebuilder/known-limitations/index.md @@ -10,6 +10,15 @@ The following items are known limitations to implementing PWA components for Pag - **Dynamic Block content type** - Not supported as a component in PWA Studio. +- PWA Studio currently has no concept of Dynamic Block. Dynamic Blocks required session information to correctly display their content, currently this session is not shared between - PWA and the back-end and there are no GraphQL endpoints for Dynamic Block. +- PWA Studio lacks an extensibility model disabling Page Builder from utilizing an existing framework / model. We can potentially use the comment based root component declaration that is baked into PWA studio but this will require additional work. +- PWA Studio / UPWARD doesn't currently have a CMS page router. +- PWA Studio's image optimizer can't currently optimize images without pre-defined widths. +- Should we attempt to determine the rough size of an image and resize to that? +- Some widgets (such as Products) create a large amount of output from the GraphQL endpoint, even though we don't intend to render it. +- Potentially for certain content types we shouldn't render their directives if it's being consumed by PWA? +- PWA doesn't support cache invalidation that makes Staging&Preview not supported in Venia + [Set up component]: {{ site.baseurl }}{% link pagebuilder/custom-components/setup-component/index.md %}#component-configuration [Add aggregator]: {{ site.baseurl }}{% link pagebuilder/custom-components/add-aggregator/index.md %} [Add component]: {{ site.baseurl }}{% link pagebuilder/custom-components/add-component/index.md %} From 4fa498727399b6d07a6e74ce656c6703c2eee354 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Thu, 17 Oct 2019 15:10:00 -0500 Subject: [PATCH 33/38] PB-36: [Docs] Creating custom Page Builder components Updates to add mergeClasses --- .../custom-components/add-component/index.md | 65 ++++++++++++------- pwa-devdocs/src/pagebuilder/index.md | 6 +- .../pagebuilder/known-limitations/index.md | 6 +- 3 files changed, 47 insertions(+), 30 deletions(-) diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md index 6ab822b14b..076b3858b6 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md @@ -94,48 +94,65 @@ Now we need to apply the CSS classes we used to style the rest of our content ty ## Step 4: Apply CSS classes -Applying CSS classes to your component works the same as apply these classes to any other React component: first import your CSS stylesheet, then add the stylesheet classes to your JSX in the usual way, using `className`. +Applying CSS classes to your component in PWA involves importing both your CSS stylesheet and a PWA Studio function called `mergeClasses`. This function does exactly what its name implies: it merges classes from different sources into a single variable that can be used to add your classes to nodes in your JSX, using `className`. -For our component, we import our component stylesheet: +For our component, we import our component stylesheet and the `mergeClasses` function as follows: ```js -import quoteStyles from './exampleQuote.css'; -``` - -Then apply the classes within to the correct nodes: +import defaultClasses from './exampleQuote.css'; +import { mergeClasses } from '../../../../../classify'; -```jsx -return ( -
-
{quote}
-
{author}
-
-
-); ``` -In this code, we only used one class per node. However, we often need to apply several classes to a node. To do this, you need to create a variable that concatenates your classes into a single string. - -For example, the `qoute` node (first child) of our content type requires two classes to reproduce it faithfully in our component: `.quote` and `.blueQuote`. To solve this, we created another variable call `quoteClassName` and used it to add both classes to the `quote` node as follows: +We then merge the classes from our stylesheet with any classes passed in on the props and use a single variable (`classes`)to apply our consolidated classes to the correct nodes in the JSX: ```jsx -const quoteClassName = [quoteClasses.quote, quoteClasses.blueQuote].join(' '); +const classes = mergeClasses(defaultClasses, props.classes); return (
-
{quote}
-
{author}
+
{quote}
+
{author}
); ``` +Merging the `props.classes` ensures that our component can apply and override styles from other components. + +In the previous code block, we only used a single class, `classes.quote`, to style the quote in our component. However, our original class required two different classes (`.quote` and `.blue-quote`) for styling. As a best practice, you want to use the `composes` construct from [CSS Modules] as much as possible. + +For example, in our `exampleQuote.css`, we composed each color quote class with the `.qoute` class as shown in the following snippet: + +```css +.quote { + display: block; + font-size: 1.4em; + margin: 1em 1em 0.3em 0.6em; + quotes: '\201C''\201D''\2018''\2019'; + text-decoration: none; + font-style: italic; + word-break: normal !important; + line-height: 1.25em; + padding: 0; + font-weight: 300; +} +.blackQuote { + composes: quote; + color: #333333; +} +.blueQuote { + composes: quote; + color: #007ab9; +} +... +``` + +This ensures that for each colored quote class, we also apply the `.quote` class. + ## Component output If you have followed along using the `ExampleQuote` component, you should see something like this displayed in the PWA Venia app: diff --git a/pwa-devdocs/src/pagebuilder/index.md b/pwa-devdocs/src/pagebuilder/index.md index bf3a58856a..af02a145bd 100644 --- a/pwa-devdocs/src/pagebuilder/index.md +++ b/pwa-devdocs/src/pagebuilder/index.md @@ -16,7 +16,7 @@ As part of the Page Builder to PWA integration, we implemented a framework that **Master Format parser**: The master format parser function (`parseStorageHtml()`) decomposes the master format HTML into the content type HTML fragments (HTMLElements) that compose the master format. The parser sends the content type HTML to the correct property aggregator (`configAggregator`) using the configuration object. -**Configuration object**: The configuration object (`contentTypesConfig`) provides a kind of registry for retrieving a content type's property aggregator and corresponding Page Builder component. The configuration object provides the integration point for your own custom content type components. See [Set up component] for details. +**Configuration object**: The configuration object (`contentTypesConfig`) provides a kind of registry with a function for retrieving a content type's property aggregator and corresponding Page Builder component. The configuration object provides the integration point for your own custom content type components. See [Set up component] for details. **Content Type Aggregator** (extension point): The content type aggregator (`configAggregator`) is a function that retrieves content and style properties from the content type HTML (using DOM properties and framework utility functions). These properties are returned as a flat object for use within the content type component. You will need to create an aggregator for each of your own custom content types. See [Add aggregator] for details. @@ -39,3 +39,7 @@ The framework executes on the client side to ensure compatibility with the vario 7. For each content type within the object tree, the `ContentTypeFactory` retrieves the React component from the `contentTypeConfiguration`. 8. The `ContentTypeFactory` populates and renders the component with the property values retrieved by the `parseStorageHtml` from the `configAggregator`. 9. The `PageBuilder` component returns all the components needed to render the Page Builder content within the PWA app. + +[Add aggregator]: {{ site.baseurl }}{%link pagebuilder/custom-components/add-aggregator/index.md %} +[Set up component]: {{ site.baseurl }}{%link pagebuilder/custom-components/setup-component/index.md %} +[Add component]: {{ site.baseurl }}{%link pagebuilder/custom-components/add-component/index.md %} diff --git a/pwa-devdocs/src/pagebuilder/known-limitations/index.md b/pwa-devdocs/src/pagebuilder/known-limitations/index.md index aa24a6538d..0aa5fd63c8 100644 --- a/pwa-devdocs/src/pagebuilder/known-limitations/index.md +++ b/pwa-devdocs/src/pagebuilder/known-limitations/index.md @@ -6,7 +6,7 @@ The following items are known limitations to implementing PWA components for Pag - **Products content type** - The Alignment property as set within the Products content type form will always default to Left. Text alignment does not work within the PWA Studio gallery because the gallery is rendered with the CSS grid layout. -- **Text content type** - Widgets are not supported within Text components in PWA Studio. +- **Content types with text input** - Widgets are not supported within content type components that provide text input. - **Dynamic Block content type** - Not supported as a component in PWA Studio. @@ -18,7 +18,3 @@ The following items are known limitations to implementing PWA components for Pag - Some widgets (such as Products) create a large amount of output from the GraphQL endpoint, even though we don't intend to render it. - Potentially for certain content types we shouldn't render their directives if it's being consumed by PWA? - PWA doesn't support cache invalidation that makes Staging&Preview not supported in Venia - -[Set up component]: {{ site.baseurl }}{% link pagebuilder/custom-components/setup-component/index.md %}#component-configuration -[Add aggregator]: {{ site.baseurl }}{% link pagebuilder/custom-components/add-aggregator/index.md %} -[Add component]: {{ site.baseurl }}{% link pagebuilder/custom-components/add-component/index.md %} From 6daf7674b82c4ba3cb2147694f5e4989bac44941 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Thu, 17 Oct 2019 15:37:53 -0500 Subject: [PATCH 34/38] PB-36: [Docs] Creating custom Page Builder components Update to add prop-types --- .../add-component/AddComponentSteps.svg | 141 +++++++++++++++++- .../custom-components/add-component/index.md | 32 +++- .../add-stylesheet/AddStylesheetCamelCase.png | Bin 10216 -> 44431 bytes .../custom-components/add-stylesheet/index.md | 3 +- .../setup-component/index.md | 16 +- 5 files changed, 185 insertions(+), 7 deletions(-) diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg index 1b87776216..5086e6db8f 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg @@ -1 +1,140 @@ -4Apply CSS classesImport and assign CSS classes from your component stylesheet.YouAdd local props1Add and assign props to local variables that match the props names from your aggregator.2Use JSX to recreate the HTML markup of your content type and apply both content and style props.Add JSX markupCSS3Apply form stylesGroup the styles from the content type’s form into a separate “styles object” to simplify markup styling. \ No newline at end of file + + + + AddComponentSteps + Created with Sketch. + + + + + + + + + + + + + + + + + + + + 4 + + + + + Apply CSS classes + + + Import and assign + CSS classes from + your component + stylesheet. + + + + + + + You + + + + + + + + + + Add props & prop-types + + + + + + + + + + + + + 1 + + + + + Add and assign props to + local variables that match + the props names from + your aggregator. + + + + + + + + + + + + + + 2 + + + + + Use JSX to recreate the + HTML markup of your + content type and apply both + content and style props. + + + Add JSX markup + + + + + + + + + + + + + 3 + + + + + Apply form styles + + + Group the styles from the + content type’s form into a + separate “styles object” to + simplify markup styling. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md index 076b3858b6..d77ba68815 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md @@ -6,9 +6,9 @@ The purpose of a Page Builder component is to recreate a Page Builder content ty ![Add Component steps overview](AddComponentSteps.svg) -## Step 1: Add local props +## Step 1: Add local props and prop-types -The first step is to declare local variables that match the names of the props being passed from your aggregator, for destructuring. For our `ExampleQuote` aggregator, we declare and assign these properties as follows: +The first step is to declare local variables that match the names of the props being passed from your aggregator, for destructuring. For our `ExampleQuote`, we declare and assign these properties as follows: ```js const ExampleQuote = props => { @@ -35,6 +35,33 @@ const ExampleQuote = props => { With a destructuring assignment, our component takes a `props` object and copies its values to our local variables. All you need to do is make sure the names of your local variables exactly match the names of the `props` passed from your aggregator. As noted before, you can use `console.log(props)` at the top of your component to see the names of the `keys` being passed in on the props object. +Along with defining your local variables, you need to add the comparable `prop-types` to define exactly what can be passed into your component. The `ExampleQuote` component defines the following `prop-types`: + +```js +import { arrayOf, string, bool } from 'prop-types'; + +ExampleQuote.propTypes = { + quote: string, + author: string, + description: string, + textAlign: string, + border: string, + borderColor: string, + borderWidth: string, + borderRadius: string, + isHidden: bool, + marginTop: string, + marginRight: string, + marginBottom: string, + marginLeft: string, + paddingTop: string, + paddingRight: string, + paddingBottom: string, + paddingLeft: string, + cssClasses: arrayOf(string) +}; +``` + ## Step 2: Add JSX markup Your JSX markup should recreate the HTML structure of your Page Builder content type and provide the slots for rendering its content and styles. For example, here is the markup needed to recreate the structure of our Quote content type and host the local content-related `props` values from our aggregator: @@ -162,3 +189,4 @@ If you have followed along using the `ExampleQuote` component, you should see so [Set up component]: {{ site.baseurl }}{%link pagebuilder/custom-components/setup-component/index.md %} [dangerouslySetInnerHTML]: https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml [utility functions]: {{ site.baseurl }}{% link pagebuilder/utility-functions/index.md %} +[CSS Modules]: {{ site.baseurl }}{%link technologies/basic-concepts/css-modules/index.md %} diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetCamelCase.png b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetCamelCase.png index 39ca9cafbac6a45281246ded308e23f4dd7ff434..43aa61b8c0d844882215451c578860249b2bf7b7 100644 GIT binary patch literal 44431 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
VE}oeG`>F>}QPfnZk+b^xe*hx5y<7kQ

diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md
index 32d691e3e8..e32a62c92e 100644
--- a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md
+++ b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md
@@ -10,7 +10,6 @@ Styling your Page Builder components is the same as styling any other component
 
 Start by adding the CSS classes from the frontend css of your content type. For our Quote content type, we copied the frontend styles (`app/code/Example/PageBuilderQuote/view/frontend/web/css/source/content-type/example-quote/_import.less`) and added them to our `exampleQuote.css`.
 
-
 ## Step 2: Convert LESS to CSS
 
 PWA studio uses [CSS Modules]. It does not include tooling for LESS pre-processors, so you will need to convert your LESS into standard CSS style rules. For example, the LESS stylesheet for our Quote content type is shown here, followed by the equivalent CSS we included in our `exampleQuote.css`.
@@ -181,7 +180,7 @@ PWA studio uses [CSS Modules]. It does not include tooling for LESS pre-processo
 Renaming your class names to use camelCase instead of hyphens allows you to work with CSS classes in your component as if they were JavaScript object properties. For example, if you name the class for the quote author's name as `.quote-author` (with a hyphen), you must access this class in your component like this:
 
 ```jsx
-
{author}
+
{author}
``` This not only uses a string which is prone to errors, but you don't have the benefit of your editor's intellisense. diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md index c7b5b80485..bc6243807a 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md @@ -46,18 +46,30 @@ export default (node, props) => { ```jsx import React from 'react'; -import quoteClasses from './exampleQuote.css' +import { mergeClasses } from '../../../../../classify'; +import defaultClasses from './exampleQuote.css'; +import { shape, string } from 'prop-types'; + +const classes = mergeClasses(defaultClasses, props.classes); // Component for testing setup const ExampleQuote = props => { return ( -
+
Content Type: {props.contentType}
Appearance: {props.appearance}
); }; +ExampleQuote.propTypes = { + classes: shape({ + testClass: string + }), + contentType: string, + appearance: string +} + export default ExampleQuote; ``` From a4b9836e5896527fc5c0273d1b2b7c6185b9fbe6 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Fri, 18 Oct 2019 08:47:36 -0500 Subject: [PATCH 35/38] PB-36: [Docs] Creating custom Page Builder components Updated Known limitations --- pwa-devdocs/src/pagebuilder/index.md | 2 +- .../pagebuilder/known-limitations/index.md | 22 +++++++------------ 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/pwa-devdocs/src/pagebuilder/index.md b/pwa-devdocs/src/pagebuilder/index.md index af02a145bd..eaeb4aa1eb 100644 --- a/pwa-devdocs/src/pagebuilder/index.md +++ b/pwa-devdocs/src/pagebuilder/index.md @@ -1,5 +1,5 @@ --- -title: Page Builder integration +title: Page Builder to PWA integration --- The purpose of the Page Builder to PWA integration is to retrieve data from the Page Builder content types and push that data into equivalent React components for display in a PWA app. The Page Builder framework populates the React components with the properties extracted from the master format HTML, then renders those components to the PWA Studio's Venia app. A visualization of this process follows: diff --git a/pwa-devdocs/src/pagebuilder/known-limitations/index.md b/pwa-devdocs/src/pagebuilder/known-limitations/index.md index 0aa5fd63c8..dff67b4450 100644 --- a/pwa-devdocs/src/pagebuilder/known-limitations/index.md +++ b/pwa-devdocs/src/pagebuilder/known-limitations/index.md @@ -4,17 +4,11 @@ title: Known limitations The following items are known limitations to implementing PWA components for Page Builder content types: -- **Products content type** - The Alignment property as set within the Products content type form will always default to Left. Text alignment does not work within the PWA Studio gallery because the gallery is rendered with the CSS grid layout. - -- **Content types with text input** - Widgets are not supported within content type components that provide text input. - -- **Dynamic Block content type** - Not supported as a component in PWA Studio. - -- PWA Studio currently has no concept of Dynamic Block. Dynamic Blocks required session information to correctly display their content, currently this session is not shared between - PWA and the back-end and there are no GraphQL endpoints for Dynamic Block. -- PWA Studio lacks an extensibility model disabling Page Builder from utilizing an existing framework / model. We can potentially use the comment based root component declaration that is baked into PWA studio but this will require additional work. -- PWA Studio / UPWARD doesn't currently have a CMS page router. -- PWA Studio's image optimizer can't currently optimize images without pre-defined widths. -- Should we attempt to determine the rough size of an image and resize to that? -- Some widgets (such as Products) create a large amount of output from the GraphQL endpoint, even though we don't intend to render it. -- Potentially for certain content types we shouldn't render their directives if it's being consumed by PWA? -- PWA doesn't support cache invalidation that makes Staging&Preview not supported in Venia +- **Widgets in TinyMCE** - Widgets are not supported within content types that provide text input from the TinyMCE editor, such as Text, Banner, Slider, and HTML Code. +- **Dynamic Blocks** - Not supported in PWA Studio. PWA Studio currently has no concept of a Dynamic Block. Dynamic Blocks required session information to correctly display their content. Currently this session is not shared between PWA Studio and the backend and there are no GraphQL endpoints for Dynamic Block. +- **Products text alignment** - Text alignment for Products does not work within the PWA Studio gallery because the gallery is rendered with the CSS grid layout. The Alignment property (as set within the Products content type form) will always default to `Left`. +- **Extensibility** - PWA Studio currently lacks an extensibility model, which prevents Page Builder from using an existing framework / model. We can potentially use the comment based root component declaration that is baked into PWA Studio, but this will require additional work. +- **Routing** - Currently, PWA Studio / UPWARD does not have a CMS page router. As a result, PWA Studio only renders Page Builder content types added to your store's Home page. +- **Image Optimization** - PWA Studio's image optimizer can't currently optimize images without pre-defined widths. +- **GraphQL query results** - Some content types (such as Products) create a large amount of output from the GraphQL endpoint, even though we don't intend to render it. +- **Staging and Preview** - PWA doesn't support cache invalidation, which means Staging and Preview are not supported in Venia. From f0e1e61b4b9dec45efb14808aab923e05ff0ef54 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Fri, 18 Oct 2019 11:05:58 -0500 Subject: [PATCH 36/38] PB-36: [Docs] Creating custom Page Builder components Fixes from markdown linting --- .../pagebuilder/components/banner/index.md | 1 + .../src/pagebuilder/components/block/index.md | 1 + .../pagebuilder/components/buttons/index.md | 1 + .../pagebuilder/components/column/index.md | 1 + .../pagebuilder/components/divider/index.md | 1 + .../pagebuilder/components/heading/index.md | 1 + .../src/pagebuilder/components/html/index.md | 2 ++ .../src/pagebuilder/components/image/index.md | 1 + .../src/pagebuilder/components/map/index.md | 1 + .../pagebuilder/components/products/index.md | 1 + .../src/pagebuilder/components/row/index.md | 1 + .../pagebuilder/components/slider/index.md | 1 + .../src/pagebuilder/components/tabs/index.md | 1 + .../src/pagebuilder/components/text/index.md | 1 + .../src/pagebuilder/components/video/index.md | 1 + .../custom-components/add-aggregator/index.md | 20 ++++++------ .../custom-components/add-component/index.md | 11 +++---- .../custom-components/add-stylesheet/index.md | 4 +-- .../custom-components/overview/index.md | 18 ++++++----- .../setup-component/index.md | 18 +++++------ pwa-devdocs/src/pagebuilder/index.md | 32 +++++++++---------- .../pagebuilder/known-limitations/index.md | 16 +++++----- .../pagebuilder/utility-functions/index.md | 6 ++-- 23 files changed, 81 insertions(+), 60 deletions(-) diff --git a/pwa-devdocs/src/pagebuilder/components/banner/index.md b/pwa-devdocs/src/pagebuilder/components/banner/index.md index a6a28d9409..9719232582 100644 --- a/pwa-devdocs/src/pagebuilder/components/banner/index.md +++ b/pwa-devdocs/src/pagebuilder/components/banner/index.md @@ -6,4 +6,5 @@ title: Banner The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Banner/banner.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/block/index.md b/pwa-devdocs/src/pagebuilder/components/block/index.md index 3206d99a13..5619ef2230 100644 --- a/pwa-devdocs/src/pagebuilder/components/block/index.md +++ b/pwa-devdocs/src/pagebuilder/components/block/index.md @@ -6,4 +6,5 @@ title: Block The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Block/block.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/buttons/index.md b/pwa-devdocs/src/pagebuilder/components/buttons/index.md index 81edf31dec..1a244b93bd 100644 --- a/pwa-devdocs/src/pagebuilder/components/buttons/index.md +++ b/pwa-devdocs/src/pagebuilder/components/buttons/index.md @@ -6,5 +6,6 @@ title: Buttons The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Buttons/buttons.md %} {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ButtonItem/buttonItem.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/column/index.md b/pwa-devdocs/src/pagebuilder/components/column/index.md index 596c73e4bb..74b7280f16 100644 --- a/pwa-devdocs/src/pagebuilder/components/column/index.md +++ b/pwa-devdocs/src/pagebuilder/components/column/index.md @@ -6,5 +6,6 @@ title: Column The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Column/column.md %} {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/ColumnGroup/columnGroup.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/divider/index.md b/pwa-devdocs/src/pagebuilder/components/divider/index.md index 68bcfb671b..4d6c09aea5 100644 --- a/pwa-devdocs/src/pagebuilder/components/divider/index.md +++ b/pwa-devdocs/src/pagebuilder/components/divider/index.md @@ -6,4 +6,5 @@ title: Divider The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Divider/divider.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/heading/index.md b/pwa-devdocs/src/pagebuilder/components/heading/index.md index 8df9137766..6d704c0a41 100644 --- a/pwa-devdocs/src/pagebuilder/components/heading/index.md +++ b/pwa-devdocs/src/pagebuilder/components/heading/index.md @@ -6,4 +6,5 @@ title: Heading The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Heading/heading.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/html/index.md b/pwa-devdocs/src/pagebuilder/components/html/index.md index 07841bfdf0..3cb5cc1287 100644 --- a/pwa-devdocs/src/pagebuilder/components/html/index.md +++ b/pwa-devdocs/src/pagebuilder/components/html/index.md @@ -1,8 +1,10 @@ --- title: HTML Code --- + + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Html/html.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/image/index.md b/pwa-devdocs/src/pagebuilder/components/image/index.md index 15ec8bd0a5..e16afd3e19 100644 --- a/pwa-devdocs/src/pagebuilder/components/image/index.md +++ b/pwa-devdocs/src/pagebuilder/components/image/index.md @@ -6,4 +6,5 @@ title: Image The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Image/image.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/map/index.md b/pwa-devdocs/src/pagebuilder/components/map/index.md index 67441495c8..d32cccde59 100644 --- a/pwa-devdocs/src/pagebuilder/components/map/index.md +++ b/pwa-devdocs/src/pagebuilder/components/map/index.md @@ -6,4 +6,5 @@ title: Map The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Map/map.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/products/index.md b/pwa-devdocs/src/pagebuilder/components/products/index.md index 1ef3919379..e4490d0ebb 100644 --- a/pwa-devdocs/src/pagebuilder/components/products/index.md +++ b/pwa-devdocs/src/pagebuilder/components/products/index.md @@ -6,4 +6,5 @@ title: Products The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Products/products.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/row/index.md b/pwa-devdocs/src/pagebuilder/components/row/index.md index 0d8ae77ea6..3d3e726092 100644 --- a/pwa-devdocs/src/pagebuilder/components/row/index.md +++ b/pwa-devdocs/src/pagebuilder/components/row/index.md @@ -6,4 +6,5 @@ title: Row The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Block/block.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/slider/index.md b/pwa-devdocs/src/pagebuilder/components/slider/index.md index bc48bfd741..412af97e63 100644 --- a/pwa-devdocs/src/pagebuilder/components/slider/index.md +++ b/pwa-devdocs/src/pagebuilder/components/slider/index.md @@ -6,4 +6,5 @@ title: Slider The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Slider/slider.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/tabs/index.md b/pwa-devdocs/src/pagebuilder/components/tabs/index.md index 69c98a13e4..60217dec3a 100644 --- a/pwa-devdocs/src/pagebuilder/components/tabs/index.md +++ b/pwa-devdocs/src/pagebuilder/components/tabs/index.md @@ -6,5 +6,6 @@ title: Tabs The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Tabs/tabs.md %} {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/TabItem/tabItem.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/text/index.md b/pwa-devdocs/src/pagebuilder/components/text/index.md index 3b58fabe32..545ba4e977 100644 --- a/pwa-devdocs/src/pagebuilder/components/text/index.md +++ b/pwa-devdocs/src/pagebuilder/components/text/index.md @@ -6,4 +6,5 @@ title: Text The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Text/text.md %} diff --git a/pwa-devdocs/src/pagebuilder/components/video/index.md b/pwa-devdocs/src/pagebuilder/components/video/index.md index d24a08b38c..05c17ae2e4 100644 --- a/pwa-devdocs/src/pagebuilder/components/video/index.md +++ b/pwa-devdocs/src/pagebuilder/components/video/index.md @@ -6,4 +6,5 @@ title: Video The reference doc content is generated automatically from the source code. To update this section, update the doc blocks in the source code --> + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/ContentTypes/Video/video.md %} diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md index b28dd54e84..f9dda0a0ac 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md @@ -43,12 +43,12 @@ Let's look at our Quote content HTML in detail (color coded for easier analysis) Here's what we think we need for our component: -- The inline **styles** from the main node -- The **text** content from the `
` and `author` nodes -- The **HTML** content from the `description` node -- The CSS **classes** from all three child nodes (`
`, `author`, and `description`) +- The inline **styles** from the main node +- The **text** content from the `
` and `author` nodes +- The **HTML** content from the `description` node +- The CSS **classes** from all three child nodes (`
`, `author`, and `description`) -To retrieve these properties, you'll want to use a combination of [HTMLElement DOM properties] along with our [utility functions], as shown next in the example. +To retrieve these properties, you'll want to use a combination of [HTMLElement DOM properties][] along with our [utility functions][], as shown next in the example. ### Example aggregator @@ -70,7 +70,7 @@ export default (node, props) => { }; ``` -First we `import` the [utility functions] we want to use. In our case, we know that our Quote content type provides end users with the Advanced form section. So we import the `getAdvanced()` function from `utils.js`. This function is a wrapper that just runs a number of other utility functions that can be used independently if these values are on different nodes: +First we `import` the [utility functions][] we want to use. In our case, we know that our Quote content type provides end users with the Advanced form section. So we import the `getAdvanced()` function from `utils.js`. This function is a wrapper that just runs a number of other utility functions that can be used independently if these values are on different nodes: ```js export function getAdvanced(node) { @@ -91,7 +91,7 @@ Next, we use the `textContent` and `innerHTML` DOM properties to grab the text a Finally, we use the `getAdvanced()` utility function to retrieve all the property values from the Advanced section of our content type's form and use the spread operator `(...)` to expand them into the current object. -{: .bs-callout .bs-callout-info} +{: .bs-callout-info} The Quote content type also has a form section called Background (from the `pagebuilder_base_form_with_background_attributes` form). This section of the form allows end users to enter all kinds of background attributes, such as images, colors, positions and so on. If your custom content uses the Background section, you should retrieve the those attributes using the `getBackgroundImages(node)` utility function. However, to keep things simple for our component, we decided not to pull these attributes from the HTML. ### Retrieving data from different Appearances @@ -139,8 +139,10 @@ Adding `console.log(node)` at the beginning of your aggregator function, and at ![Aggregator object console output](AggregatorObjectConsoleOutput.png) -{: .bs-callout .bs-callout-info} +{: .bs-callout-info} + You will need to know the property `key-values` you are returning so that that you can assign them to corresponding properties in your component when you build it out. -[utility functions]: {{ site.baseurl }}{% link pagebuilder/utility-functions/index.md %} +[utility functions]: <{{ site.baseurl }}{% link pagebuilder/utility-functions/index.md %}> + [HTMLElement DOM properties]: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md index d77ba68815..86e3ad3ad1 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md @@ -82,7 +82,7 @@ Because our `description` property value is HTML, we need to use React's [danger ## Step 3: Apply form styles -To make it easy to apply all the inline styles from your content type to your Page Builder component, you can create a separate object that contains only the styles retrieved from the content type's form. These styles include those that are retrieved by [utility functions] like `getAdvanced()` and `getBackgroundImages()`. +To make it easy to apply all the inline styles from your content type to your Page Builder component, you can create a separate object that contains only the styles retrieved from the content type's form. These styles include those that are retrieved by [utility functions][] like `getAdvanced()` and `getBackgroundImages()`. For our component, we created an object called `formStyles` to group our form styles as shown here: @@ -121,7 +121,7 @@ Now we need to apply the CSS classes we used to style the rest of our content ty ## Step 4: Apply CSS classes -Applying CSS classes to your component in PWA involves importing both your CSS stylesheet and a PWA Studio function called `mergeClasses`. This function does exactly what its name implies: it merges classes from different sources into a single variable that can be used to add your classes to nodes in your JSX, using `className`. +Applying CSS classes to your component in PWA involves importing both your CSS stylesheet and a PWA Studio function called `mergeClasses`. This function does exactly what its name implies: it merges classes from different sources into a single variable you can use to add your classes to your JSX, using `className`. For our component, we import our component stylesheet and the `mergeClasses` function as follows: @@ -150,7 +150,7 @@ return ( Merging the `props.classes` ensures that our component can apply and override styles from other components. -In the previous code block, we only used a single class, `classes.quote`, to style the quote in our component. However, our original class required two different classes (`.quote` and `.blue-quote`) for styling. As a best practice, you want to use the `composes` construct from [CSS Modules] as much as possible. +In the previous code block, we only used a single class, `classes.quote`, to style the quote in our component. However, our original class required two different classes (`.quote` and `.blue-quote`) for styling. As a best practice, you want to use the `composes` construct from [CSS Modules][] as much as possible. For example, in our `exampleQuote.css`, we composed each color quote class with the `.qoute` class as shown in the following snippet: @@ -186,7 +186,6 @@ If you have followed along using the `ExampleQuote` component, you should see so ![Add Component output](AddComponentOutput.svg) -[Set up component]: {{ site.baseurl }}{%link pagebuilder/custom-components/setup-component/index.md %} -[dangerouslySetInnerHTML]: https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml [utility functions]: {{ site.baseurl }}{% link pagebuilder/utility-functions/index.md %} -[CSS Modules]: {{ site.baseurl }}{%link technologies/basic-concepts/css-modules/index.md %} +[css modules]: {{ site.baseurl }}{%link technologies/basic-concepts/css-modules/index.md %} +[dangerouslysetinnerhtml]: https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md index e32a62c92e..238bd2c14e 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md @@ -12,7 +12,7 @@ Start by adding the CSS classes from the frontend css of your content type. For ## Step 2: Convert LESS to CSS -PWA studio uses [CSS Modules]. It does not include tooling for LESS pre-processors, so you will need to convert your LESS into standard CSS style rules. For example, the LESS stylesheet for our Quote content type is shown here, followed by the equivalent CSS we included in our `exampleQuote.css`. +PWA studio uses [CSS Modules][]. It does not include tooling for LESS pre-processors, so you will need to convert your LESS into standard CSS style rules. For example, the LESS stylesheet for our Quote content type is shown here, followed by the equivalent CSS we included in our `exampleQuote.css`. **Quote content type LESS styles** (`_import.less`): @@ -191,4 +191,4 @@ Compare that to using camelCase for your hyphenated class names by renaming `.qu **Protip**: Use camelCase to rename your CSS classes so that you can use dot syntax and intellisense to browse through your style rules more easily when applying them to your component. -[CSS Modules]: {{ site.baseurl }}{%link technologies/basic-concepts/css-modules/index.md %} +[css modules]: {{ site.baseurl }}{%link technologies/basic-concepts/css-modules/index.md %} diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md b/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md index b24b73f98b..5024dfd084 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md @@ -12,17 +12,17 @@ The topics for these steps show you how to create the code that retrieves proper Before you start creating your custom content type component in PWA Studio, make sure you have met the following prerequisites: -- Your Magento instance should have a custom content type added and saved to the **home** page in the Admin. Currently, the `home` page is the only page you can render Page Builder content within PWA Studio. -- Your Magento instance should render this content type on the home page of your storefront. +- Your Magento instance should have a custom content type added and saved to the **home** page in the Admin. Currently, the `home` page is the only page you can render Page Builder content within PWA Studio. +- Your Magento instance should render this content type on the home page of your storefront. {: .bs-callout-info} -We assume you already have the PWA Studio set up and running in your development environment. If you do not, [use these instructions] to do that now. +We assume you already have the PWA Studio set up and running in your development environment. If you do not, [use these instructions][] to do that now. ## Using the Quote content type -To help explain the process of creating a custom Page Builder component, we frequently refer to a component called `ExampleQuote`. We built this component as the PWA counterpart to the example Quote content type found on the [GitHub pagebuilder-examples repo]. +To help explain the process of creating a custom Page Builder component, we frequently refer to a component called `ExampleQuote`. We built this component as the PWA counterpart to the example Quote content type found on the [GitHub pagebuilder-examples repo][]. -If you want to follow along with these topics more closely, [download and install the PageBuilderQuote module] in your Magento instance and use it to fulfill the prerequisites previously mentioned. +If you want to follow along with these topics more closely, [download and install the PageBuilderQuote module][] in your Magento instance and use it to fulfill the prerequisites previously mentioned. ## Home page in Admin @@ -38,6 +38,8 @@ The second prerequisite is to ensure that your custom content type renders succe After you have met these prerequisites, you are ready to begin creating your custom Page Builder component in the PWA Studio. -[download and install the PageBuilderQuote module]: https://github.com/magento-devdocs/pagebuilder-examples/tree/master/Example/PageBuilderQuote -[GitHub pagebuilder-examples repo]: https://github.com/magento-devdocs/pagebuilder-examples/tree/master/Example/PageBuilderQuote -[use these instructions]: {{ site.baseurl }}{% link pagebuilder/custom-components/setup-component/index.md %} +[use these instructions]: <{{ site.baseurl }}{% link venia-pwa-concept/setup/index.md %}> + +[download and install the pagebuilderquote module]: https://github.com/magento-devdocs/pagebuilder-examples/tree/master/Example/PageBuilderQuote + +[github pagebuilder-examples repo]: https://github.com/magento-devdocs/pagebuilder-examples/tree/master/Example/PageBuilderQuote diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md index bc6243807a..32436812f2 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md @@ -10,10 +10,10 @@ Setting up your component is about getting the essential component files in plac The first thing you need to do within PWA Studio is create the directory and skeleton files needed for your component, as follows: -- **configAggregator.js** (required) - Function to retrieve content and styling properties from your content type's master format HTML. -- **myComponent.js** (required) - React component for populating properties that correspond to the original Page Builder content type. For our ExampleQuote, we use `exampleQuote.js`. -- **myComponent.css** (optional but usually needed) - CSS classes that provide addition styles needed to present your component as desired. For our ExampleQuote, we use `exampleQuote.css`. -- **index.js** (required) - Entry file needed to identify your component in PWA Studio. +- **configAggregator.js** (required) - Function to retrieve content and styling properties from your content type's master format HTML. +- **myComponent.js** (required) - React component for populating properties that correspond to the original Page Builder content type. For our ExampleQuote, we use `exampleQuote.js`. +- **myComponent.css** (optional but usually needed) - CSS classes that provide addition styles needed to present your component as desired. For our ExampleQuote, we use `exampleQuote.css`. +- **index.js** (required) - Entry file needed to identify your component in PWA Studio. Currently, you need to add your content type's component, like `ExampleQuote`, to the `ContentTypes` directory, where the native Page Builder components are kept. This will change when we implement different rules for extending Page Builder components. But for now, add your custom content type components as shown here: @@ -81,7 +81,7 @@ export { default } from './exampleQuote'; ## Step 2: Configure component - Configuring your component is about connecting your component to the Page Builder component framework. The framework provides a static config object (in `config.js`) that acts as a kind of registry of content types supported within PWA Studio. To include support for your custom content type component, you'll need to add an entry to the `config.js`: +Configuring your component is about connecting your component to the Page Builder component framework. The framework provides a static config object (in `config.js`) that acts as a kind of registry of content types supported within PWA Studio. To include support for your custom content type component, you'll need to add an entry to the `config.js`: ![Component config file](PageBuilderConfigFile.png) @@ -102,7 +102,7 @@ example_quote: { ### A note about lazy loading components -When building PWAs, performance is key. That's why we recommend loading less critical components using `React.lazy`. This will result in a very slight delay in that content rendering but will ensure we don't bloat the bundle size for the store. For more information, see [React lazy loading]. +When building PWAs, performance is key. That's why we recommend loading less critical components using `React.lazy`. This will result in a very slight delay in that content rendering but will ensure we don't bloat the bundle size for the store. For more information, see the [react lazy loading][] docs on the React site. By default, we apply `React.lazy` to the following content types: Banner, Slider, Slide Item, Tab, Tab Item, Button, Button Item, Block, Products, HTML, and Divider. @@ -124,7 +124,7 @@ If you see this rendering without errors in the Venia app, you are ready to star If you have errors, make sure you have: -1. Copied the correct starter code for each of the four files. -2. Added the correct name of your content type to the `config.js` file (`example_quote` if you are using the Quote content type). +1. Copied the correct starter code for each of the four files. +2. Added the correct name of your content type to the `config.js` file (`example_quote` if you are using the Quote content type). -[React lazy loading]: https://reactjs.org/docs/code-splitting.html#reactlazy +[react lazy loading]: https://reactjs.org/docs/code-splitting.html#reactlazy diff --git a/pwa-devdocs/src/pagebuilder/index.md b/pwa-devdocs/src/pagebuilder/index.md index eaeb4aa1eb..15fab38bc1 100644 --- a/pwa-devdocs/src/pagebuilder/index.md +++ b/pwa-devdocs/src/pagebuilder/index.md @@ -16,11 +16,11 @@ As part of the Page Builder to PWA integration, we implemented a framework that **Master Format parser**: The master format parser function (`parseStorageHtml()`) decomposes the master format HTML into the content type HTML fragments (HTMLElements) that compose the master format. The parser sends the content type HTML to the correct property aggregator (`configAggregator`) using the configuration object. -**Configuration object**: The configuration object (`contentTypesConfig`) provides a kind of registry with a function for retrieving a content type's property aggregator and corresponding Page Builder component. The configuration object provides the integration point for your own custom content type components. See [Set up component] for details. +**Configuration object**: The configuration object (`contentTypesConfig`) provides a kind of registry with a function for retrieving a content type's property aggregator and corresponding Page Builder component. The configuration object provides the integration point for your own custom content type components. See [Set up component][] for details. -**Content Type Aggregator** (extension point): The content type aggregator (`configAggregator`) is a function that retrieves content and style properties from the content type HTML (using DOM properties and framework utility functions). These properties are returned as a flat object for use within the content type component. You will need to create an aggregator for each of your own custom content types. See [Add aggregator] for details. +**Content Type Aggregator** (extension point): The content type aggregator (`configAggregator`) is a function that retrieves content and style properties from the content type HTML (using DOM properties and framework utility functions). These properties are returned as a flat object for use within the content type component. You will need to create an aggregator for each of your own custom content types. See [Add aggregator][] for details. -**Content Type Component** (extension point): The content type component is a React component that is equivalent to a Page Builder content type. It contains the content and style properties needed to faithfully represent your Page Builder content types within a PWA Studio app like Venia. You will need to create a content type component for each of your own custom content types. See [Add component] for details. +**Content Type Component** (extension point): The content type component is a React component that is equivalent to a Page Builder content type. It contains the content and style properties needed to faithfully represent your Page Builder content types within a PWA Studio app like Venia. You will need to create a content type component for each of your own custom content types. See [Add component][] for details. **ContentTypeFactory**: The `` component retrieves and returns content type components to the PWA Studio app for rendering to the end-user. @@ -30,16 +30,16 @@ The framework executes on the client side to ensure compatibility with the vario ![Page Builder Integration Details](PageBuilderIntegrationDetails.svg) -1. The Venia app uses a GraphQL query to get CMS content from your Magento store (pages and blocks) and passes the HTML to the `` component to begin processing. -2. The `` component determines if the HTML contains Page Builder content, using simple pattern recognition. If the HTML does not include Page Builder content, it is returned to Venia and rendered out as is. If the HTML does include Page Builder content, the HTML (master format) is passed to the `` component. -3. The `` component passes the master format HTML to the `parseStorageHTML()` function. -4. For each content type within the master format, the `parseStorageHtml()` function use the `contentTypeConfiguration` to call the content type's configAggregator create an object tree of all the content types and associated properties. -5. The `parseStorageHtml` returns the content type object tree to the `PageBuilder` component. -6. The `PageBuilder` component passes the object tree to the `ContentTypeFactory`. -7. For each content type within the object tree, the `ContentTypeFactory` retrieves the React component from the `contentTypeConfiguration`. -8. The `ContentTypeFactory` populates and renders the component with the property values retrieved by the `parseStorageHtml` from the `configAggregator`. -9. The `PageBuilder` component returns all the components needed to render the Page Builder content within the PWA app. - -[Add aggregator]: {{ site.baseurl }}{%link pagebuilder/custom-components/add-aggregator/index.md %} -[Set up component]: {{ site.baseurl }}{%link pagebuilder/custom-components/setup-component/index.md %} -[Add component]: {{ site.baseurl }}{%link pagebuilder/custom-components/add-component/index.md %} +1. The Venia app uses a GraphQL query to get CMS content from your Magento store (pages and blocks) and passes the HTML to the `` component to begin processing. +2. The `` component determines if the HTML contains Page Builder content, using simple pattern recognition. If the HTML does not include Page Builder content, it is returned to Venia and rendered out as is. If the HTML does include Page Builder content, the HTML (master format) is passed to the `` component. +3. The `` component passes the master format HTML to the `parseStorageHTML()` function. +4. For each content type within the master format, the `parseStorageHtml()` function use the `contentTypeConfiguration` to call the content type's configAggregator create an object tree of all the content types and associated properties. +5. The `parseStorageHtml` returns the content type object tree to the `PageBuilder` component. +6. The `PageBuilder` component passes the object tree to the `ContentTypeFactory`. +7. For each content type within the object tree, the `ContentTypeFactory` retrieves the React component from the `contentTypeConfiguration`. +8. The `ContentTypeFactory` populates and renders the component with the property values retrieved by the `parseStorageHtml` from the `configAggregator`. +9. The `PageBuilder` component returns all the components needed to render the Page Builder content within the PWA app. + +[add aggregator]: <{{ site.baseurl }}{%link pagebuilder/custom-components/add-aggregator/index.md %}> +[set up component]: <{{ site.baseurl }}{%link pagebuilder/custom-components/setup-component/index.md %}> +[add component]: <{{ site.baseurl }}{%link pagebuilder/custom-components/add-component/index.md %}> diff --git a/pwa-devdocs/src/pagebuilder/known-limitations/index.md b/pwa-devdocs/src/pagebuilder/known-limitations/index.md index dff67b4450..13772f3e49 100644 --- a/pwa-devdocs/src/pagebuilder/known-limitations/index.md +++ b/pwa-devdocs/src/pagebuilder/known-limitations/index.md @@ -4,11 +4,11 @@ title: Known limitations The following items are known limitations to implementing PWA components for Page Builder content types: -- **Widgets in TinyMCE** - Widgets are not supported within content types that provide text input from the TinyMCE editor, such as Text, Banner, Slider, and HTML Code. -- **Dynamic Blocks** - Not supported in PWA Studio. PWA Studio currently has no concept of a Dynamic Block. Dynamic Blocks required session information to correctly display their content. Currently this session is not shared between PWA Studio and the backend and there are no GraphQL endpoints for Dynamic Block. -- **Products text alignment** - Text alignment for Products does not work within the PWA Studio gallery because the gallery is rendered with the CSS grid layout. The Alignment property (as set within the Products content type form) will always default to `Left`. -- **Extensibility** - PWA Studio currently lacks an extensibility model, which prevents Page Builder from using an existing framework / model. We can potentially use the comment based root component declaration that is baked into PWA Studio, but this will require additional work. -- **Routing** - Currently, PWA Studio / UPWARD does not have a CMS page router. As a result, PWA Studio only renders Page Builder content types added to your store's Home page. -- **Image Optimization** - PWA Studio's image optimizer can't currently optimize images without pre-defined widths. -- **GraphQL query results** - Some content types (such as Products) create a large amount of output from the GraphQL endpoint, even though we don't intend to render it. -- **Staging and Preview** - PWA doesn't support cache invalidation, which means Staging and Preview are not supported in Venia. +- **Widgets in TinyMCE** - Widgets are not supported within content types that provide text input from the TinyMCE editor, such as Text, Banner, Slider, and HTML Code. +- **Dynamic Blocks** - Not supported in PWA Studio. PWA Studio currently has no concept of a Dynamic Block. Dynamic Blocks required session information to correctly display their content. Currently this session is not shared between PWA Studio and the backend and there are no GraphQL endpoints for Dynamic Block. +- **Products text alignment** - Text alignment for Products does not work within the PWA Studio gallery because the gallery is rendered with the CSS grid layout. The Alignment property (as set within the Products content type form) will always default to `Left`. +- **Extensibility** - PWA Studio currently lacks an extensibility model, which prevents Page Builder from using an existing framework / model. We can potentially use the comment based root component declaration that is baked into PWA Studio, but this will require additional work. +- **Routing** - Currently, PWA Studio / UPWARD does not have a CMS page router. As a result, PWA Studio only renders Page Builder content types added to your store's Home page. +- **Image Optimization** - PWA Studio's image optimizer can't currently optimize images without pre-defined widths. +- **GraphQL query results** - Some content types (such as Products) create a large amount of output from the GraphQL endpoint, even though we don't intend to render it. +- **Staging and Preview** - PWA doesn't support cache invalidation, which means Staging and Preview are not supported in Venia. diff --git a/pwa-devdocs/src/pagebuilder/utility-functions/index.md b/pwa-devdocs/src/pagebuilder/utility-functions/index.md index 601bd604da..91b8d2e5a1 100644 --- a/pwa-devdocs/src/pagebuilder/utility-functions/index.md +++ b/pwa-devdocs/src/pagebuilder/utility-functions/index.md @@ -4,11 +4,13 @@ title: Utility functions The utility functions help with retrieving commonly stored data in a content type. For example, the `getAdvanced(node)` wrapper function retrieves all the content type's Advanced form section settings so you do not have to worry about retrieving each one separately. Retrieving background images and associated properties is also made easy with the `getBackgroundImages(node)` function. -For implementation details [View Source] +For implementation details [View Source][] + + {% include auto-generated/venia-ui/lib/components/RichContent/PageBuilder/utils.md %} -[View Source]: https://github.com/magento/pwa-studio/blob/feature/page-builder/packages/venia-ui/lib/components/RichContent/PageBuilder/utils.js +[view source]: https://github.com/magento/pwa-studio/blob/feature/page-builder/packages/venia-ui/lib/components/RichContent/PageBuilder/utils.js From c45a3e8c8be47add5263e22e900795d26f273258 Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Fri, 18 Oct 2019 11:31:48 -0500 Subject: [PATCH 37/38] PB-36: [Docs] Creating custom Page Builder components Moved images into image directory --- .../{ => images}/AddAggregatorOverview.svg | 0 .../{ => images}/AggregatorHTMLConsoleOutput.png | Bin .../{ => images}/AggregatorObjectConsoleOutput.png | Bin .../{ => images}/MasterFormatHTML.svg | 2 +- .../{ => images}/MasterFormatToComponent.svg | 0 .../custom-components/add-aggregator/index.md | 9 ++++----- .../{ => images}/AddComponentOutput.png | Bin .../{ => images}/AddComponentOutput.svg | 0 .../{ => images}/AddComponentSteps.svg | 0 .../custom-components/add-component/index.md | 4 ++-- .../{ => images}/AddStylesheetCamelCase.png | Bin .../{ => images}/AddStylesheetSteps.svg | 0 .../custom-components/add-stylesheet/index.md | 6 +++--- .../overview/{ => images}/OverviewSteps.svg | 0 .../overview/{ => images}/PageBuilderQuoteAdmin.png | Bin .../{ => images}/PageBuilderQuoteStorefront.png | Bin .../pagebuilder/custom-components/overview/index.md | 6 +++--- .../{ => images}/ConfigureComponentOutput.png | Bin .../{ => images}/PageBuilderConfigFile.png | Bin .../{ => images}/PageBuilderFilesSetup.png | Bin .../{ => images}/SetupComponentSteps.svg | 0 .../{ => images}/SetupComponentTest.svg | 0 .../custom-components/setup-component/index.md | 8 ++++---- .../{ => images}/PageBuilderIntegration.svg | 0 .../{ => images}/PageBuilderIntegrationDetails.svg | 0 pwa-devdocs/src/pagebuilder/index.md | 4 ++-- .../{ => images}/LimitationsTextAlign.png | Bin 27 files changed, 19 insertions(+), 20 deletions(-) rename pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/{ => images}/AddAggregatorOverview.svg (100%) rename pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/{ => images}/AggregatorHTMLConsoleOutput.png (100%) rename pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/{ => images}/AggregatorObjectConsoleOutput.png (100%) rename pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/{ => images}/MasterFormatHTML.svg (99%) rename pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/{ => images}/MasterFormatToComponent.svg (100%) rename pwa-devdocs/src/pagebuilder/custom-components/add-component/{ => images}/AddComponentOutput.png (100%) rename pwa-devdocs/src/pagebuilder/custom-components/add-component/{ => images}/AddComponentOutput.svg (100%) rename pwa-devdocs/src/pagebuilder/custom-components/add-component/{ => images}/AddComponentSteps.svg (100%) rename pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/{ => images}/AddStylesheetCamelCase.png (100%) rename pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/{ => images}/AddStylesheetSteps.svg (100%) rename pwa-devdocs/src/pagebuilder/custom-components/overview/{ => images}/OverviewSteps.svg (100%) rename pwa-devdocs/src/pagebuilder/custom-components/overview/{ => images}/PageBuilderQuoteAdmin.png (100%) rename pwa-devdocs/src/pagebuilder/custom-components/overview/{ => images}/PageBuilderQuoteStorefront.png (100%) rename pwa-devdocs/src/pagebuilder/custom-components/setup-component/{ => images}/ConfigureComponentOutput.png (100%) rename pwa-devdocs/src/pagebuilder/custom-components/setup-component/{ => images}/PageBuilderConfigFile.png (100%) rename pwa-devdocs/src/pagebuilder/custom-components/setup-component/{ => images}/PageBuilderFilesSetup.png (100%) rename pwa-devdocs/src/pagebuilder/custom-components/setup-component/{ => images}/SetupComponentSteps.svg (100%) rename pwa-devdocs/src/pagebuilder/custom-components/setup-component/{ => images}/SetupComponentTest.svg (100%) rename pwa-devdocs/src/pagebuilder/{ => images}/PageBuilderIntegration.svg (100%) rename pwa-devdocs/src/pagebuilder/{ => images}/PageBuilderIntegrationDetails.svg (100%) rename pwa-devdocs/src/pagebuilder/known-limitations/{ => images}/LimitationsTextAlign.png (100%) diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/AddAggregatorOverview.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg rename to pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/AddAggregatorOverview.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AggregatorHTMLConsoleOutput.png b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/AggregatorHTMLConsoleOutput.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AggregatorHTMLConsoleOutput.png rename to pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/AggregatorHTMLConsoleOutput.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AggregatorObjectConsoleOutput.png b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/AggregatorObjectConsoleOutput.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AggregatorObjectConsoleOutput.png rename to pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/AggregatorObjectConsoleOutput.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/MasterFormatHTML.svg similarity index 99% rename from pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg rename to pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/MasterFormatHTML.svg index 6fcb60a63b..887fbed553 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/MasterFormatHTML.svg @@ -80,7 +80,7 @@ text - + <div data-content-type="example_quote" data-appearance="default" data-element="main" style="border-style: none; border-width: 1px….more;”> <blockquote class=“quote blue-quote" data-element="quote">I know where I came from—but where did all you zombies come from?</blockquote> diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/MasterFormatToComponent.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg rename to pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/MasterFormatToComponent.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md index f9dda0a0ac..4fdc631886 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md @@ -4,7 +4,7 @@ title: Add aggregator The purpose of the configuration aggregator (`configAggregator`) is to retrieve properties from a content type's HTML and return those properties as a flat object of `key:values`. The framework (specifically the ``) then passes this object to your component, where you can assign the properties to your component's corresponding properties for rendering within a PWA Studio app. -![Aggregator Overview](AddAggregatorOverview.svg) +![Aggregator Overview](images/AddAggregatorOverview.svg) ## Content type HTML @@ -23,7 +23,7 @@ export default (node, props) => { The console output should look something like this: -![Content type HTML](AggregatorHTMLConsoleOutput.png) +![Content type HTML](images/AggregatorHTMLConsoleOutput.png) The `node` (HTMLElement) passed to the aggregator contains only your content type's HTML from the master format, not the entire master format as you would find in the database. @@ -39,7 +39,7 @@ To recap, the purpose of your component's aggregator is to collect (aggregate) p Let's look at our Quote content HTML in detail (color coded for easier analysis) to determine the properties we want to pass to our component: -![Master format HTML](MasterFormatHTML.svg) +![Master format HTML](images/MasterFormatHTML.svg) Here's what we think we need for our component: @@ -137,10 +137,9 @@ export default (node, props) => { Adding `console.log(node)` at the beginning of your aggregator function, and at he end (`console.log(propObject)`), helps to show you the HTML you receive and the object you return. The property object returned from our aggregator looks like this: -![Aggregator object console output](AggregatorObjectConsoleOutput.png) +![Aggregator object console output](images/AggregatorObjectConsoleOutput.png) {: .bs-callout-info} - You will need to know the property `key-values` you are returning so that that you can assign them to corresponding properties in your component when you build it out. [utility functions]: <{{ site.baseurl }}{% link pagebuilder/utility-functions/index.md %}> diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.png b/pwa-devdocs/src/pagebuilder/custom-components/add-component/images/AddComponentOutput.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.png rename to pwa-devdocs/src/pagebuilder/custom-components/add-component/images/AddComponentOutput.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-component/images/AddComponentOutput.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg rename to pwa-devdocs/src/pagebuilder/custom-components/add-component/images/AddComponentOutput.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-component/images/AddComponentSteps.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg rename to pwa-devdocs/src/pagebuilder/custom-components/add-component/images/AddComponentSteps.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md index 86e3ad3ad1..cd1c280766 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md @@ -4,7 +4,7 @@ title: Add component The purpose of a Page Builder component is to recreate a Page Builder content type (from your Magento instance) to display inside a PWA app. Developing this component is similar to developing other React components in PWA Studio. However, the properties defined within a Page Builder component are determined by the properties returned from your configuration aggregator. The following steps highlight how to put these properties to use in your component: -![Add Component steps overview](AddComponentSteps.svg) +![Add Component steps overview](images/AddComponentSteps.svg) ## Step 1: Add local props and prop-types @@ -184,7 +184,7 @@ This ensures that for each colored quote class, we also apply the `.quote` class If you have followed along using the `ExampleQuote` component, you should see something like this displayed in the PWA Venia app: -![Add Component output](AddComponentOutput.svg) +![Add Component output](images/AddComponentOutput.svg) [utility functions]: {{ site.baseurl }}{% link pagebuilder/utility-functions/index.md %} [css modules]: {{ site.baseurl }}{%link technologies/basic-concepts/css-modules/index.md %} diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetCamelCase.png b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetCamelCase.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetCamelCase.png rename to pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetCamelCase.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetSteps.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetSteps.svg rename to pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetSteps.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md index 238bd2c14e..28b5f9a3b7 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md @@ -4,7 +4,7 @@ title: Add stylesheet Styling your Page Builder components is the same as styling any other component in PWA Studio. However, the CSS stylesheet for your component should define CSS classes that are comparable to the CSS classes you use on the frontend for original content type (`view/frontend/web/css/source/content-type//_import.less`). The following steps highlight the tasks for setting up the CSS classes for your component: -![Add Stylesheet steps](AddStylesheetSteps.svg) +![Add Stylesheet steps](images/AddStylesheetSteps.svg) ## Step 1: Add content type classes @@ -179,7 +179,7 @@ PWA studio uses [CSS Modules][]. It does not include tooling for LESS pre-proces Renaming your class names to use camelCase instead of hyphens allows you to work with CSS classes in your component as if they were JavaScript object properties. For example, if you name the class for the quote author's name as `.quote-author` (with a hyphen), you must access this class in your component like this: -```jsx +```html
{author}
``` @@ -187,7 +187,7 @@ This not only uses a string which is prone to errors, but you don't have the ben Compare that to using camelCase for your hyphenated class names by renaming `.quote-author` to `.quoteAuthor` and thereby enabling access to CSS classes using dot syntax, as shown here: -![Change class names to camelCase](AddStylesheetCamelCase.png) +![Change class names to camelCase](images/AddStylesheetCamelCase.png) **Protip**: Use camelCase to rename your CSS classes so that you can use dot syntax and intellisense to browse through your style rules more easily when applying them to your component. diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/overview/images/OverviewSteps.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg rename to pwa-devdocs/src/pagebuilder/custom-components/overview/images/OverviewSteps.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteAdmin.png b/pwa-devdocs/src/pagebuilder/custom-components/overview/images/PageBuilderQuoteAdmin.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteAdmin.png rename to pwa-devdocs/src/pagebuilder/custom-components/overview/images/PageBuilderQuoteAdmin.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteStorefront.png b/pwa-devdocs/src/pagebuilder/custom-components/overview/images/PageBuilderQuoteStorefront.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteStorefront.png rename to pwa-devdocs/src/pagebuilder/custom-components/overview/images/PageBuilderQuoteStorefront.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md b/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md index 5024dfd084..52c2a0389a 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md @@ -4,7 +4,7 @@ title: Overview Let's assume you have at least one _custom_ Page Builder content type rendering content on your Magento storefront. But now you want that content to show up in your PWA app as well. What do you do? Short answer: You create a custom PWA Page Builder component (also know as a "content type component"). The long answer is described in this series of topics. The steps shown here describe the recommended process for developing content type components: -![Overview of steps](OverviewSteps.svg) +![Overview of steps](images/OverviewSteps.svg) The topics for these steps show you how to create the code that retrieves properties (content and styling) from your content type HTML (in the configAggregator) and assign those properties to the equivalent properties in your in content type component. @@ -28,13 +28,13 @@ If you want to follow along with these topics more closely, [download and instal The first prerequisite is to add and save your custom content type to your Magento Home page in Admin. Here we see the Quote content type saved to the Home page in the Admin: -![PageBuilderQuote in Admin](PageBuilderQuoteAdmin.png) +![PageBuilderQuote in Admin](images/PageBuilderQuoteAdmin.png) ## Home page on Storefront The second prerequisite is to ensure that your custom content type renders successfully in the storefront of your Magento instance. Here we see the Quote content type rendered on the Home page of a Luma storefront: -![PageBuilderQuote on Storefront](PageBuilderQuoteStorefront.png) +![PageBuilderQuote on Storefront](images/PageBuilderQuoteStorefront.png) After you have met these prerequisites, you are ready to begin creating your custom Page Builder component in the PWA Studio. diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/ConfigureComponentOutput.png b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/ConfigureComponentOutput.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/setup-component/ConfigureComponentOutput.png rename to pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/ConfigureComponentOutput.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/PageBuilderConfigFile.png b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/PageBuilderConfigFile.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/setup-component/PageBuilderConfigFile.png rename to pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/PageBuilderConfigFile.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/PageBuilderFilesSetup.png b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/PageBuilderFilesSetup.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/setup-component/PageBuilderFilesSetup.png rename to pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/PageBuilderFilesSetup.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/SetupComponentSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/SetupComponentSteps.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/setup-component/SetupComponentSteps.svg rename to pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/SetupComponentSteps.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/SetupComponentTest.svg b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/SetupComponentTest.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/setup-component/SetupComponentTest.svg rename to pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/SetupComponentTest.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md index 32436812f2..7309edafee 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md @@ -4,7 +4,7 @@ title: Set up component Setting up your component is about getting the essential component files in place so that your component is actively participating in the Page Builder component framework. After you create these files and wire them into the component framework, you can focus all your attention on developing each file to faithfully recreate your content type as a PWA component. The following steps highlight the tasks for setting up your component: -![Component setup steps](SetupComponentSteps.svg) +![Component setup steps](images/SetupComponentSteps.svg) ## Step 1: Create starter files @@ -17,7 +17,7 @@ The first thing you need to do within PWA Studio is create the directory and ske Currently, you need to add your content type's component, like `ExampleQuote`, to the `ContentTypes` directory, where the native Page Builder components are kept. This will change when we implement different rules for extending Page Builder components. But for now, add your custom content type components as shown here: -![Component file structure](PageBuilderFilesSetup.png) +![Component file structure](images/PageBuilderFilesSetup.png) Starter code for the `ExampleQuote` component files is provided as follows. @@ -83,7 +83,7 @@ export { default } from './exampleQuote'; Configuring your component is about connecting your component to the Page Builder component framework. The framework provides a static config object (in `config.js`) that acts as a kind of registry of content types supported within PWA Studio. To include support for your custom content type component, you'll need to add an entry to the `config.js`: -![Component config file](PageBuilderConfigFile.png) +![Component config file](images/PageBuilderConfigFile.png) Open the `config.js` file and `import` your `configAggregator`. The import statement for our ExampleQuote is shown here: @@ -116,7 +116,7 @@ component: React.lazy(() => import('./ContentTypes/ExampleQuote')) After adding these files and hooking them up to the framework through the configuration file (`config.js`), your skeleton component will appear on the Venia home page: -![ExampleQuote component rendered with starter code](ConfigureComponentOutput.png) +![ExampleQuote component rendered with starter code](images/ConfigureComponentOutput.png) If you see this rendering without errors in the Venia app, you are ready to start developing your content type component. diff --git a/pwa-devdocs/src/pagebuilder/PageBuilderIntegration.svg b/pwa-devdocs/src/pagebuilder/images/PageBuilderIntegration.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/PageBuilderIntegration.svg rename to pwa-devdocs/src/pagebuilder/images/PageBuilderIntegration.svg diff --git a/pwa-devdocs/src/pagebuilder/PageBuilderIntegrationDetails.svg b/pwa-devdocs/src/pagebuilder/images/PageBuilderIntegrationDetails.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/PageBuilderIntegrationDetails.svg rename to pwa-devdocs/src/pagebuilder/images/PageBuilderIntegrationDetails.svg diff --git a/pwa-devdocs/src/pagebuilder/index.md b/pwa-devdocs/src/pagebuilder/index.md index 15fab38bc1..ed3d23564c 100644 --- a/pwa-devdocs/src/pagebuilder/index.md +++ b/pwa-devdocs/src/pagebuilder/index.md @@ -4,7 +4,7 @@ title: Page Builder to PWA integration The purpose of the Page Builder to PWA integration is to retrieve data from the Page Builder content types and push that data into equivalent React components for display in a PWA app. The Page Builder framework populates the React components with the properties extracted from the master format HTML, then renders those components to the PWA Studio's Venia app. A visualization of this process follows: -![Page Builder Integration Overview](PageBuilderIntegration.svg) +![Page Builder Integration Overview](images/PageBuilderIntegration.svg) ## Page Builder PWA framework @@ -28,7 +28,7 @@ As part of the Page Builder to PWA integration, we implemented a framework that The framework executes on the client side to ensure compatibility with the various hosting options available for Magento Commerce. The following flow diagram describes how the parts of the framework work together to render Page Builder components within the Venia app. -![Page Builder Integration Details](PageBuilderIntegrationDetails.svg) +![Page Builder Integration Details](images/PageBuilderIntegrationDetails.svg) 1. The Venia app uses a GraphQL query to get CMS content from your Magento store (pages and blocks) and passes the HTML to the `` component to begin processing. 2. The `` component determines if the HTML contains Page Builder content, using simple pattern recognition. If the HTML does not include Page Builder content, it is returned to Venia and rendered out as is. If the HTML does include Page Builder content, the HTML (master format) is passed to the `` component. diff --git a/pwa-devdocs/src/pagebuilder/known-limitations/LimitationsTextAlign.png b/pwa-devdocs/src/pagebuilder/known-limitations/images/LimitationsTextAlign.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/known-limitations/LimitationsTextAlign.png rename to pwa-devdocs/src/pagebuilder/known-limitations/images/LimitationsTextAlign.png From d11fc3762a04f361265418dced1974b3d6acd29c Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Fri, 18 Oct 2019 11:37:38 -0500 Subject: [PATCH 38/38] PB-36: [Docs] Creating custom Page Builder components Moved all Page Builder docs to _drafts --- .../pagebuilder/components/banner/index.md | 0 .../pagebuilder/components/block/index.md | 0 .../pagebuilder/components/buttons/index.md | 0 .../pagebuilder/components/column/index.md | 0 .../pagebuilder/components/divider/index.md | 0 .../pagebuilder/components/heading/index.md | 0 .../pagebuilder/components/html/index.md | 0 .../pagebuilder/components/image/index.md | 0 .../pagebuilder/components/map/index.md | 0 .../pagebuilder/components/products/index.md | 0 .../pagebuilder/components/row/index.md | 0 .../pagebuilder/components/slider/index.md | 0 .../pagebuilder/components/tabs/index.md | 0 .../pagebuilder/components/text/index.md | 0 .../pagebuilder/components/video/index.md | 0 .../add-aggregator/images/AddAggregatorOverview.svg | 0 .../images/AggregatorHTMLConsoleOutput.png | Bin .../images/AggregatorObjectConsoleOutput.png | Bin .../add-aggregator/images/MasterFormatHTML.svg | 0 .../images/MasterFormatToComponent.svg | 0 .../custom-components/add-aggregator/index.md | 0 .../add-component/images/AddComponentOutput.png | Bin .../add-component/images/AddComponentOutput.svg | 0 .../add-component/images/AddComponentSteps.svg | 0 .../custom-components/add-component/index.md | 0 .../images/AddStylesheetCamelCase.png | Bin .../add-stylesheet/images/AddStylesheetSteps.svg | 0 .../custom-components/add-stylesheet/index.md | 0 .../custom-components/debugging/index.md | 0 .../overview/images/OverviewSteps.svg | 0 .../overview/images/PageBuilderQuoteAdmin.png | Bin .../overview/images/PageBuilderQuoteStorefront.png | Bin .../pagebuilder/custom-components/overview/index.md | 0 .../images/ConfigureComponentOutput.png | Bin .../images/PageBuilderConfigFile.png | Bin .../images/PageBuilderFilesSetup.png | Bin .../setup-component/images/SetupComponentSteps.svg | 0 .../setup-component/images/SetupComponentTest.svg | 0 .../custom-components/setup-component/index.md | 0 .../pagebuilder/images/PageBuilderIntegration.svg | 0 .../images/PageBuilderIntegrationDetails.svg | 0 pwa-devdocs/src/{ => _drafts}/pagebuilder/index.md | 0 .../images/LimitationsTextAlign.png | Bin .../pagebuilder/known-limitations/index.md | 0 .../pagebuilder/utility-functions/index.md | 0 45 files changed, 0 insertions(+), 0 deletions(-) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/banner/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/block/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/buttons/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/column/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/divider/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/heading/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/html/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/image/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/map/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/products/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/row/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/slider/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/tabs/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/text/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/components/video/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/add-aggregator/images/AddAggregatorOverview.svg (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/add-aggregator/images/AggregatorHTMLConsoleOutput.png (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/add-aggregator/images/AggregatorObjectConsoleOutput.png (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/add-aggregator/images/MasterFormatHTML.svg (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/add-aggregator/images/MasterFormatToComponent.svg (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/add-aggregator/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/add-component/images/AddComponentOutput.png (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/add-component/images/AddComponentOutput.svg (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/add-component/images/AddComponentSteps.svg (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/add-component/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetCamelCase.png (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetSteps.svg (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/add-stylesheet/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/debugging/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/overview/images/OverviewSteps.svg (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/overview/images/PageBuilderQuoteAdmin.png (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/overview/images/PageBuilderQuoteStorefront.png (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/overview/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/setup-component/images/ConfigureComponentOutput.png (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/setup-component/images/PageBuilderConfigFile.png (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/setup-component/images/PageBuilderFilesSetup.png (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/setup-component/images/SetupComponentSteps.svg (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/setup-component/images/SetupComponentTest.svg (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/custom-components/setup-component/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/images/PageBuilderIntegration.svg (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/images/PageBuilderIntegrationDetails.svg (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/known-limitations/images/LimitationsTextAlign.png (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/known-limitations/index.md (100%) rename pwa-devdocs/src/{ => _drafts}/pagebuilder/utility-functions/index.md (100%) diff --git a/pwa-devdocs/src/pagebuilder/components/banner/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/banner/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/banner/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/banner/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/block/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/block/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/block/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/block/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/buttons/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/buttons/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/buttons/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/buttons/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/column/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/column/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/column/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/column/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/divider/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/divider/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/divider/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/divider/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/heading/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/heading/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/heading/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/heading/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/html/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/html/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/html/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/html/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/image/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/image/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/image/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/image/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/map/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/map/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/map/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/map/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/products/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/products/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/products/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/products/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/row/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/row/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/row/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/row/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/slider/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/slider/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/slider/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/slider/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/tabs/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/tabs/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/tabs/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/tabs/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/text/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/text/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/text/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/text/index.md diff --git a/pwa-devdocs/src/pagebuilder/components/video/index.md b/pwa-devdocs/src/_drafts/pagebuilder/components/video/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/components/video/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/components/video/index.md diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/AddAggregatorOverview.svg b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-aggregator/images/AddAggregatorOverview.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/AddAggregatorOverview.svg rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-aggregator/images/AddAggregatorOverview.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/AggregatorHTMLConsoleOutput.png b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-aggregator/images/AggregatorHTMLConsoleOutput.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/AggregatorHTMLConsoleOutput.png rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-aggregator/images/AggregatorHTMLConsoleOutput.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/AggregatorObjectConsoleOutput.png b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-aggregator/images/AggregatorObjectConsoleOutput.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/AggregatorObjectConsoleOutput.png rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-aggregator/images/AggregatorObjectConsoleOutput.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/MasterFormatHTML.svg b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-aggregator/images/MasterFormatHTML.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/MasterFormatHTML.svg rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-aggregator/images/MasterFormatHTML.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/MasterFormatToComponent.svg b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-aggregator/images/MasterFormatToComponent.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/images/MasterFormatToComponent.svg rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-aggregator/images/MasterFormatToComponent.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-aggregator/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-aggregator/index.md diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/images/AddComponentOutput.png b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-component/images/AddComponentOutput.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-component/images/AddComponentOutput.png rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-component/images/AddComponentOutput.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/images/AddComponentOutput.svg b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-component/images/AddComponentOutput.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-component/images/AddComponentOutput.svg rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-component/images/AddComponentOutput.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/images/AddComponentSteps.svg b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-component/images/AddComponentSteps.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-component/images/AddComponentSteps.svg rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-component/images/AddComponentSteps.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-component/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-component/index.md diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetCamelCase.png b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetCamelCase.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetCamelCase.png rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetCamelCase.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetSteps.svg b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetSteps.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetSteps.svg rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-stylesheet/images/AddStylesheetSteps.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-stylesheet/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/add-stylesheet/index.md diff --git a/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/debugging/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/debugging/index.md diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/images/OverviewSteps.svg b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/overview/images/OverviewSteps.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/overview/images/OverviewSteps.svg rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/overview/images/OverviewSteps.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/images/PageBuilderQuoteAdmin.png b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/overview/images/PageBuilderQuoteAdmin.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/overview/images/PageBuilderQuoteAdmin.png rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/overview/images/PageBuilderQuoteAdmin.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/images/PageBuilderQuoteStorefront.png b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/overview/images/PageBuilderQuoteStorefront.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/overview/images/PageBuilderQuoteStorefront.png rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/overview/images/PageBuilderQuoteStorefront.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/index.md b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/overview/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/overview/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/overview/index.md diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/ConfigureComponentOutput.png b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/setup-component/images/ConfigureComponentOutput.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/ConfigureComponentOutput.png rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/setup-component/images/ConfigureComponentOutput.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/PageBuilderConfigFile.png b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/setup-component/images/PageBuilderConfigFile.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/PageBuilderConfigFile.png rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/setup-component/images/PageBuilderConfigFile.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/PageBuilderFilesSetup.png b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/setup-component/images/PageBuilderFilesSetup.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/PageBuilderFilesSetup.png rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/setup-component/images/PageBuilderFilesSetup.png diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/SetupComponentSteps.svg b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/setup-component/images/SetupComponentSteps.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/SetupComponentSteps.svg rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/setup-component/images/SetupComponentSteps.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/SetupComponentTest.svg b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/setup-component/images/SetupComponentTest.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/setup-component/images/SetupComponentTest.svg rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/setup-component/images/SetupComponentTest.svg diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md b/pwa-devdocs/src/_drafts/pagebuilder/custom-components/setup-component/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/custom-components/setup-component/index.md diff --git a/pwa-devdocs/src/pagebuilder/images/PageBuilderIntegration.svg b/pwa-devdocs/src/_drafts/pagebuilder/images/PageBuilderIntegration.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/images/PageBuilderIntegration.svg rename to pwa-devdocs/src/_drafts/pagebuilder/images/PageBuilderIntegration.svg diff --git a/pwa-devdocs/src/pagebuilder/images/PageBuilderIntegrationDetails.svg b/pwa-devdocs/src/_drafts/pagebuilder/images/PageBuilderIntegrationDetails.svg similarity index 100% rename from pwa-devdocs/src/pagebuilder/images/PageBuilderIntegrationDetails.svg rename to pwa-devdocs/src/_drafts/pagebuilder/images/PageBuilderIntegrationDetails.svg diff --git a/pwa-devdocs/src/pagebuilder/index.md b/pwa-devdocs/src/_drafts/pagebuilder/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/index.md diff --git a/pwa-devdocs/src/pagebuilder/known-limitations/images/LimitationsTextAlign.png b/pwa-devdocs/src/_drafts/pagebuilder/known-limitations/images/LimitationsTextAlign.png similarity index 100% rename from pwa-devdocs/src/pagebuilder/known-limitations/images/LimitationsTextAlign.png rename to pwa-devdocs/src/_drafts/pagebuilder/known-limitations/images/LimitationsTextAlign.png diff --git a/pwa-devdocs/src/pagebuilder/known-limitations/index.md b/pwa-devdocs/src/_drafts/pagebuilder/known-limitations/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/known-limitations/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/known-limitations/index.md diff --git a/pwa-devdocs/src/pagebuilder/utility-functions/index.md b/pwa-devdocs/src/_drafts/pagebuilder/utility-functions/index.md similarity index 100% rename from pwa-devdocs/src/pagebuilder/utility-functions/index.md rename to pwa-devdocs/src/_drafts/pagebuilder/utility-functions/index.md

Kgu*vFp?!VQC9 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 U2JhZ^JpupTi^{w!64v$lKP(7Sl>h($ diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/ConfigureComponentOutput.png b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/ConfigureComponentOutput.png index 2f98d4389fcaaf01c26564f5012742333e9135f2..9158961bf150af481e2f8d300aabbb1619c8d6e1 100644 GIT binary patch literal 6317 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 Z!&8dsXENey1K$5JWWkD($WKOr{|}VI-<$vd literal 20554 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 D7s!>T diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/PageBuilderConfigFile.png b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/PageBuilderConfigFile.png index bb729716719aadfb77a0cded8ae3a22f899d61d4..0a43b1b6a1c4e5d74a97fe6287d9a8433b3b3801 100644 GIT binary patch literal 4661 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 Lt$dZN>F56kWuG{#(s>vDjCYLh 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 - - - SetupComponentSteps - Created with Sketch. - - - - - - - - - - - - You - - - - - - - - Create starter files - - - - - - - - - - - - - 1 - - - - - Create starter code for - the four files that make - up your component. - - - - - - - - - - - - - - - 2 - - - - - Add your starter files - to the framework - configuration object. - - - - Configure component - - - - CSS - - - - - \ No newline at end of file +YouCreate starter files1Create starter code for the four files that make up your component.2Add your starter files to the framework configuration object.Configure componentCSS \ No newline at end of file From 0d3a610602c2890af269d34c5ed91a717c0094fc Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Thu, 17 Oct 2019 07:52:58 -0500 Subject: [PATCH 29/38] PB-36: [Docs] Creating custom Page Builder components Optimized images --- .../pagebuilder/PageBuilderIntegration.svg | 2 +- .../PageBuilderIntegrationDetails.svg | 2 +- .../add-aggregator/AddAggregatorOverview.svg | 2 +- .../AggregatorHTMLConsoleOutput.png | Bin 13055 -> 13042 bytes .../add-aggregator/MasterFormatHTML.svg | 112 +++++++++++++++++- .../MasterFormatToComponent.svg | 2 +- .../add-component/AddComponentOutput.svg | 89 +++++++++++++- .../add-component/AddComponentSteps.svg | 2 +- .../add-stylesheet/AddStylesheetCamelCase.png | Bin 10217 -> 10216 bytes .../add-stylesheet/AddStylesheetSteps.svg | 2 +- .../overview/OverviewSteps.svg | 2 +- .../overview/PageBuilderQuoteAdmin.png | Bin 11911 -> 11908 bytes .../ConfigureComponentOutput.png | Bin 6317 -> 6312 bytes .../setup-component/PageBuilderFilesSetup.png | Bin 8223 -> 8215 bytes .../setup-component/SetupComponentSteps.svg | 2 +- 15 files changed, 207 insertions(+), 10 deletions(-) diff --git a/pwa-devdocs/src/pagebuilder/PageBuilderIntegration.svg b/pwa-devdocs/src/pagebuilder/PageBuilderIntegration.svg index 90475caedf..9d1e270e35 100644 --- a/pwa-devdocs/src/pagebuilder/PageBuilderIntegration.svg +++ b/pwa-devdocs/src/pagebuilder/PageBuilderIntegration.svg @@ -1 +1 @@ -15 native content types (dynamic blocks not included)Your custom content types also participate in this integrationMagento instance15 equivalent React componentsPWA StudioYou will need to create your own React components that are equivalent to your Page Builder content typesThe PWA PageBuilder component maps Page Builder content types from the master format to their equivalent, pre- built React components.The PWA PageBuilder component retrieves and populates the React components with the data from the master format and returns them for rendering.This guide explains how.However…master formatReact components(backend)(client side)12 \ No newline at end of file +15 native content types (dynamic blocks not included)Your custom content types also participate in this integrationMagento instance15 equivalent React componentsPWA StudioYou will need to create your own React components that are equivalent to your Page Builder content typesThe PWA PageBuilder component maps Page Builder content types from the master format to their equivalent, pre- built React components.The PWA PageBuilder component retrieves and populates the React components with the data from the master format and returns them for rendering.This guide explains how.However…master formatReact components(backend)(client side)12 \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/PageBuilderIntegrationDetails.svg b/pwa-devdocs/src/pagebuilder/PageBuilderIntegrationDetails.svg index b604485930..d8b2a5f736 100644 --- a/pwa-devdocs/src/pagebuilder/PageBuilderIntegrationDetails.svg +++ b/pwa-devdocs/src/pagebuilder/PageBuilderIntegrationDetails.svg @@ -1 +1 @@ -NOYES47Uses configuration to return the content type’s equivalent React component.MagentoPWA app1Requests content (GraphQL) and returns CMS page or block HTML. CustomerPageBuilderContentTypeFactoryconfig aggregatorcontent type components( )parser( )Is it Page Builder content?{ }configReturns Page Builder content to the PWA app (Venia).Returns object tree with properties.Passes master format.Passes object tree to factory.8Parse each content type from master format and use configuration to return properties from its configAggregator.for each content typeRenders and returns components with properties.56Developer29RichContent \ No newline at end of file +NOYES47Uses configuration to return the content type’s equivalent React component.MagentoPWA app1Requests content (GraphQL) and returns CMS page or block HTML.CustomerPageBuilderContentTypeFactoryconfig aggregatorcontent type components( )parser( )Is it Page Builder content?{ }configReturns Page Builder content to the PWA app (Venia).Returns object tree with properties.Passes master format.Passes object tree to factory.8Parse each content type from master format and use configuration to return properties from its configAggregator.for each content typeRenders and returns components with properties.56Developer29RichContent \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg index 9e5afa2b4d..05ee439954 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AddAggregatorOverview.svg @@ -1 +1 @@ -master formataggregatorBuild out your aggregator to retrieve properties from your content type nodes within the master format.Return the properties in an object so that the framework can push it to you component to populate corresponding properties. componentuse utility & DOM functionsreturn property object \ No newline at end of file +master formataggregatorBuild out your aggregator to retrieve properties from your content type nodes within the master format.Return the properties in an object so that the framework can push it to you component to populate corresponding properties. componentuse utility & DOM functionsreturn property object \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AggregatorHTMLConsoleOutput.png b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/AggregatorHTMLConsoleOutput.png index 343686aab5045dc4d03936de868bf23b86bcf621..63f74405171c00ff6fb26f444ac8e23a21456455 100644 GIT binary patch delta 12069 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 diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg index 0c7269d208..887fbed553 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg @@ -1 +1,111 @@ -content typeappearanceelementstylesclasseshtml contenttext<div data-content-type="example_quote" data-appearance="default" data-element="main" style="border-style: none; border-width: 1px….more;”> <blockquote class=“quote blue-quote" data-element="quote">I know where I came from—but where did all you zombies come from?</blockquote> <div class="quote-author" data-element="author">Robert A. Heinlein</div> <div class="quote-description" data-element="description"> <div> <span style="color: #808080;"> <em>All You Zombies</em> (short story) </span> </div> </div> </div>structureHTML content from tinyMCE editor used for Quote’s description input \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + content type + + + + + + appearance + + + + + + element + + + + + + styles + + + + + + classes + + + + + + html content + + + + + + text + + + + + <div data-content-type="example_quote" data-appearance="default" data-element="main" style="border-style: none; border-width: 1px….more;”> + <blockquote class=“quote blue-quote" data-element="quote">I know where I came from—but where did all you zombies come from?</blockquote> + <div class="quote-author" data-element="author">Robert A. Heinlein</div> + <div class="quote-description" data-element="description"> + <div> + <span style="color: #808080;"> + <em>All You Zombies</em> (short story) + </span> + </div> + </div> + </div> + + + + + + structure + + + + HTML content from + tinyMCE editor used for + Quote’s description input + + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg index 72e8e0067b..ff7604fd74 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg @@ -1 +1 @@ -React componentsmaster formatMagento instancePWA appPage Builder for PWAConverting the master format HTML into React components \ No newline at end of file +React componentsmaster formatMagento instancePWA appPage Builder for PWAConverting the master format HTML into React components \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg index 7de6ae4b23..ab0a0ac1ae 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.svg @@ -1 +1,88 @@ -return ( <div style={ formStyles }> <div className={ quoteClassName }>{ quote }</div> <div className={ quoteClasses.quoteAuthor }>{ author }</div> <div className={ quoteClasses.quoteDescription } dangerouslySetInnerHTML={toHTML( description )} /> </div> );{ textAlign, border, marginTop….more }stylesclasseshtml contenttext \ No newline at end of file + + + + + + + + + + + + + + + + + + + return ( + <div style={ + formStyles + }> + + + <div className={ + quoteClassName + }>{ + quote + }</div> + <div className={ + quoteClasses.quoteAuthor + }>{ + author + }</div> + <div + className={ + quoteClasses.quoteDescription + } + dangerouslySetInnerHTML={toHTML( + description + )} + /> + </div> + ); + + + + + + + + + + + { textAlign, border, marginTop….more } + + + + + + + + styles + + + + + + classes + + + + + + html content + + + + + + text + + + + \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg index 4427cd0b2a..1b87776216 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentSteps.svg @@ -1 +1 @@ -4 Apply CSS classesImport and assign CSS classes from your component stylesheet.YouAdd local props1Add and assign props to local variables that match the props names from your aggregator.2Use JSX to recreate the HTML markup of your content type and apply both content and style props.Add JSX markupCSS3 Apply form stylesGroup the styles from the content type’s form into a separate “styles object” to simplify markup styling. \ No newline at end of file +4Apply CSS classesImport and assign CSS classes from your component stylesheet.YouAdd local props1Add and assign props to local variables that match the props names from your aggregator.2Use JSX to recreate the HTML markup of your content type and apply both content and style props.Add JSX markupCSS3Apply form stylesGroup the styles from the content type’s form into a separate “styles object” to simplify markup styling. \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetCamelCase.png b/pwa-devdocs/src/pagebuilder/custom-components/add-stylesheet/AddStylesheetCamelCase.png index c7be8f199f36d235b444c684bedfba7ffea8c21c..39ca9cafbac6a45281246ded308e23f4dd7ff434 100644 GIT binary patch delta 9032 zcmZ8^WmJ?8&^@q}bW4MDhln60N=bJ~iiC);G)q1pNQZ)SNlQyEu}es|fJi@dvn<{5 z|Gn@3+dJpXe3%b&?#w;+%(*+-+uFZ0A(-JwT95@`A>C;d{dG^VI@PMY;KXyfx(!^M z#GG10w#QsJ1-2hS+noAb0`BkSMX=o^Cw?zkJfm^&heSi%Bz-xLHsj++NRH}=6TY9a ztfWdMSvw>T=qkp>u}9BdsmyKM&1>G`q6g~Qb1w{bC1A!%Ge)drIE29$EX$SspZKek z5%>TIodsuVbmyPFoc}uvJ<4gwey^gUA_7C7UmWK+FUAP}z?t|AA3|$G&hc5Vn7(I9 z=cc#oY@#Z%$IKDf&$8OGURV(e{MGOlr18xi6?g;+2xxm-lt%RQRFzM+RAG9gicR|i z@o?D`uejMK%NQycg`PSwO;4DH9Ba}De*wME+KFmyFnLbARopXXxW*Z30*0}k;T?C{ zcT6Xml_m~C3VweSvL+5j;+QljcnZK*<7#PQcsor5KEB;Op0DEqC7?_*oj1t_6CUe~ z3kc#qeV?Z6T?UP!a2#}IPHQz5b*b$xbH`oY3SQ_98DiM|qd{_c%K0~(X|$x5KJ z3J%otOzO6U(B1o&)AEEl383>E;7-7?oy9X6;q>>Q;5KlShN{1fuP%3!B(HBm(M0aO zgLe_=i7fxZllbotDL-T@H}ZTjBAw+qKEUn!zS+juq}r7ts2;8}_z1z|MzNl_=Z&29 z=byI&=S73fsC|m{QLn{f=j4{VNZ-!OT`ntpV9CnJJ__g-o&RQRMtKtg6dO#Y?>t$K z*L00Ykdw=3k|z8E5>#v$3zoMm3z`{KbifG7nnK*B7w=iosU%#PBmh?Ju@E*kl$H{4 zl#2}wbI<*EKfJPDNB{GRNO7!X53{q?@7SZW^;tmgG3Vx1TEOpuh>jjD5>n^JhqX-S zQaCmgO12su<>P9;KcEZ9W!Y+DLEinlnH@FbsC=d{L>rk=N5SUQhH?H?ROGnSn^x@T zywu2bM|aKDMnLc<&Fh^JyigUri!p-8K4H_zeP=u>$YO#_z*SwkJ3X5zEA;{LB3+8mim%E67EB>{soU&rO`Rx4uf>CPD+1lXjSfQK z?YCeHiJ`?Uyg%rkIK&dp`x^ULmERz|O%bPyJsRAH!1#2oT@@kd=`D!=Z~Adcj+Zez z%;)&0UummHsR`u91?v41CaKCqg}Ae1by}^Q3kgc?oG%HRj#jGSA4egkZ%_xXMTncG z@lHj^7V&>_ckWqHs+vLABUT}MH0WhzM^^sY&Uur$L>5{TT^zJTVs%X1Q>m=o)@GJ8 zEk-;*84o=c9|Yw;y8qohe+YW&+`bylaM9m2KW11S?YI7z+k|Vy!H?Msk?-y{3)sJZ z_Mb{aQODuJF8(hKGn?>c6U+|tl#>z(}Lnfy~uIv>5nky+<_+&2&T2$;D zIB#19zo3LZ)h2fX?CWOP(BHo6)X{$y@4*2|%yo)7)u_9ZMO@i~-_)`FE@3Fy_QdD_ z6qdEw^Ep395^MgplS_)k94-v^4YGhTSMs1k43AVJvZPgS&{s*p(0DQ zKCljNoY{>1Pa2GYWUe~`oBFea#C+qCiza3cxft5mxletVRDyHP>a&?<(}2MNA!6lBrxPQSOJuOiP~Z#!y! z7eLNxL%XXiW0FnIt?Zu~piLkMDJ%9Lf`q~miDUjJ@`i4XpCGG{7J7F`SZEoAc#7Y9 z3~p>ROOo`%bS;#2+1qO3B$`;+;Zvx>XNfI)TxWedaG{oyqASgplv7mVHdv3Lg_$yf zvb>D1j2>HyPv}0}+n2qWGl+ewZcOyzYQp1kEGx1wo}|$jZMy|H^24ASq&5+=z1un^Vnh-l;D+6-~yb&yOjp;&AQCoMSETXWK)pHD{WUV1VTLQI>dx^{X{cyVjb)rd6b&j z7*d$sDeC=CXU-WI32<`9NnDgNeD-ZSz^cmgRQh;G1=!9hfA96g=*Z{-Ne%5WJ2K)0 zcLBkNYF=;^yVSkxG0!+U3}N`fKv*LhzFG+@r$VPjUnI8^z{`!l?9zhMRls0mVOiD3 zvEMhljw|Pb{I9*9p`CIUo33I4OSU{1$NhBHiiZArAv>&%JcHu4(v8%vxdO)>Rs#c~ z;pH~~4IJu`UuKpo_PvQ6O+wie@W{GlbE`;w*z#HUvw1(+jWEG@9;21Vo{ql%!hbS9 zn1Uzi)NbenJScMa`2KP@-I$cwDvR>9!ID(JC4v7AEB1{0k%Yh_B1 zqi^W*VgKQyIwLI)#c#M{md}!d5kKY_A5=l$%VF*VZFIDlL(tg@o)FrfbQHNI2Li0! z$%LfI&IuA$K-bIa)|TcoQ!8JWRznx`cOH~L(vm3a(NC`nVq&?a#8zo()rBucCHMjZ zEel~ER3NfZFEcAqc6FPW=%Z2Z_bm0xYpAb}*6VsC8l`ZQt8E6;GlQ=N0wZ^5b_xOg zrBek-#!nhJ@4v=!XNN!Un2!(JJ@~!J_4V}IhfK1VU@yLPmkk5y?fQ99sQY&HRH!EF zqU+~(tmLDAxo;>})R&Ky1!C5Gx3<75O-0Jp&Uxc7$*tq6=nHdjwGzNT+Jt@?TytJ* z3PNp;Ft}LV@6FFQ$$qQ+$5dJ{^mGkyhxn_5&P+11Cf{3QVv-`ckB@o}EGTKvkL^kx z-Xjf^u{WJcurP0|^C<(!rbjisVm<;<)h?^y;WccJWDOLLxo61IQB@@ zqoa(3Z^NnBeB?ZT*YalcPkI6RQtH=_OCP&=_A}rl`22pOkmsN$jG6o*LBc~blHL)$ z(VclZp%A#Kj3x2eEhhyZa;d>82gsl=_t3X?gH)@#Ujm=VF|XgD2}wr*S9PL7m{|Zo zxx5LFXyF}@?I$^O8IrnXWne~stq>IYXB)0<>usmdo3P5{^*F7X`Uzl_>Fuj6mMD1k zx$_4lmVKNi;U7Nrvlh1~gRCN%bjDGl%ebsQX(;3V&s5<=Ud)xkzIncc&_%N&n17O` zIyH&esKIfH^!E0e;R0DppES*7sSo<$cBi3d;|o9ZCD|&P84CAk2Tm+RzpfGof>w+7 zxDsqn3A5$U)XlHni~_H;i)Fww2#8m-tqN~e0G}jCt!rW8I)9-IemI7h-`()_ylChk}Wd*Pk!-o%aK&s$;8^0G@ZCCNa58exF zl^`q|A2`7?TfAT5IsJdvvli?}aIyp;_Rc|HeQIbz)hb1PBN#ME%slMp$;pJ)V-yfw zU!NOcjt^n#b|o;3JSUU-vK0Bc6*HZHBUXki-PV<&ZgCXzQ{&NFS2!k{SSZ6)X-Nh< z_tin*MggJ25+H*L61}SNe=T!6KO6WYTptmUkdn{I0#z@q<3nF8uowMHoRyuWme)MM zQNJ{6%{KT&6Ei4eQfZ<2sbQqlg>KpHr?o#K?}SHc@hXITlZhuG)5tAlS1)YpKPRTL zZ{r^6!&P!->avSNnV6(BOx;;83QdsSo6#zivT~7M2dryNm+*SC^PPQ@e$Z9(N{hkQiBUpdpHkTjKaNON;RwVAsWxOWba9>=F-wXpjzt1|grpdHq6 zW4($N)F2wpi>b0{Gl_cMCvuJ$Os4tui+4i$xREF?r;NVLouNgS=Td`+sA+$sUzY29 z_>o@-F#Dp9?*6Pw5~)E2|7l6`>fOXo231TkWUVNnhV5XfJ!Ck1oDdhIjJPinmc$I5 z4y=Y_r|u%JCkP^SUeH#|Fxro3kFIlN=&xQ`l^Z1$Xu3p1ikINk8T{G*t>b7RegeVcv8B6QjTg|qH_ugDvf&}dF6>szoHD+-+!!pA5vPH^uLMjJeLAB;0amb!pEQ;^3R`*k z;=fkcH}<_Ibq4L62{#W)z>xbsr5xy4GI0IFtlT}Elk@79#lb@|t33|x_9|42Fh_hb z&4^$iC<3wM)apj)vr|?P5|2V%mP_Ttv~E`5zkhA|(Kjl?ng!hL|BZAh!(Q8)@Zle7 z41z#QJ;j|TlAa#F$`gLk}#pm7BX$-?lDm-jRrP1NZ#*diknRr0=rxVnG?IB&^H##LzlazEB7uEcObRuAK(tRV{%(_8INNTpj~Rkf;u?+lr~e1gQ1bK-t<2U zwjgFAJk>wTz7J({w3O7XeSchoU^Ep4!wJqDr6}D*%%&_NBUALLKfYjhOet4mjHDIX z*Ga||O)02v9sQ%^R0CkErGJz<5vgQ-S^0g)>Aijw{4(mdybSse0dQN9R~PX#pw9Bv zo?=HWS~Z)72j>BQmBA}edy^DvV>bJuUOQ?1ZVtwR9B&ESw28f_iy2E`YSvgiVD_yI zw1XTO4ULS5p~=zjN614iww&kpSeBHu&abFV_qYW=I64AojUnoQJ*K=M#el=qmrs%{ z?8kIV$?N#YYksp50cp|%<9lgkwbG1?enW#L`^l%uDwF((%*NlL)QS`H-`;!BeytR> ztD}V04KDZZpR)Zsm;4AiHPq-;_H6;wwj=j>jBX~nxVLFx|I7v@;QAs$Z z@bwcK1|7=b{G`?0xfQAO+1DnBigz^*m8&Sh4UdkzNYb3`O|nP4**_ZQWR!gJJ-*-p zcA+5O{bNE4Ab5{(?1=sFN4jU^(TP$u%KenDj>4DF&WkO){1eY#{fO60xiucRsx@?! zwZ=F*i<02}wYOG}){-8l1~rV~JD3V#Lr2MjU0=ojR3{Y*8T-GMM>Zu(E=x=ld4LVN z@Mnh|duwA@X*4sH-EpjENBj<{_Ed+ibQHc@H~)@-$Eo!g<$-vF%uX02u=>Od(nz@X z9M7Q(LL$K76ZM1xy5f5BxNKwBCkQHtTScu z9slzX##030oNvc|8e-wmFTT~mDB5Trp*2}AXYre9RFo*w-$oEj6XjAYW-%_yVqgYg zVFgwn{tK>ImR!QO&c@5TAq`;z$(n=?X*L0~CyO{+nujpr%|PW~H>Q0HRnUqW&2il3 z?HsuF;)tu4SV?J}Uc%7_?1ilr8Lcvvw)=^>e>(zW`*SGJ;ZEc!#>d8al#!R4H*cj# zYSH>9>R>(I3yrViowhLuLiJDqVIyzOW0IWmOoEK$$o^TUDb6>u8GL7Ev=ws%dcd$a zieJi^7A1E6#Onw_NM6G&Jt!?@xV&gc!$jsgCOnq@v;yN|(};@IGe-h5_6W%`@&}2s z47u=W4#aGe7?i%~sqFUn)p$;T?h}*oV*D`&_Y1D{8QVIT!bj+v7sUE}Y#R_qMV#XN zqzk>mSihhk@Oes{SW z!c5qsU+qrkCwZyQtu6+*>fy@~H?tAQD~t@xgT`U}~-6`M-2nt&amc`|(* z^BcTR5|Q{WkWfpGq%c?+V{8vY=+JSZLFI<4Sx#xG|BfC|V_BlzK&l~1(Ro&>{r*c7 zXf49S3rzV;hlbh>j%nF8|5%CbiO7p5(^=lua)bVK*QsJAPiE>85l8fQpK7nz^(s?y zR3vXt$H4cw6wskMrUjQEK)G1raHpsM3tCmw#Kb=0Y;LB@h<hEyLqHi?py=tkTxn8`1PhL_#j-kc#dh(~4Qj?Ceey=Q&Qrj#hiSSz_LM-QWdDkg}M3Wy zt_|Ih@v6YzjImeB9|hrNx^T(` zF+ZhA^^EItaAJMdDDbE#9+LdLag3J!&U+^=DIpSmiohZWIKfz>v;Hef1&fdglAsL~ z&!cx@L@NMQNfcihgOU6LnSR#+cx&^g`8u|lluK~y*D0DBv096rVG~Qh773eQSIR4K zJ*|8JTS6O~&R-iFgu=ZW4S8e^lva{Gl#b&+BtyC`w~4CC8F@1=!#UjsX8v}EU|woZ z{i*E6{Lgu)zpNCv?CZT%mwB1ZhY%k*eBI*8Uqb`1cA+k=xP$5YGjpao&gg>1M_`$^ z|B~;Y1RJ({Nm;QUhF_UV$X7f0y<>})_#hjUTFr9*pl+#G^k#}Rh8?UHT}76p8mJQf zNH_{#f%y8y@$yb@k$z;Y2}$TC?`hMGbSh-UeofcK-a)^}{Ut1%<4}zbhu~5+8NurP zi@^$buPN(4m`ULq5lgQcZXjjNQ8#cef=HV79~0zyDB&EqN$8NCZJ(8fkg8Nk#)p2) ztNOYQGiB8$|=eYPY_E04CkyqiEC*$%EZ(J1>NW_XY zzO|&QB?|%!0c*b~Ek9*ZT(OVqkERNbF~N*YF5^%v7rjgZ7I4XozEv41=~eRihLAkR zq4s)r;)QuqLo6YzqSE2&DI@pd1ygobR#x06YgiCTmW99%xVGAD9{ILr12W%7y#nJ* z&fFHCaqu%{d^0~_zRyJ9=&c6(RQRX~ z75@a|Dm0!0dKe_fcvI$d@}Cq2Q;y{W)l*(`i9K~(f72Pp9B;H{vHNtgvhjDpS~^&y zfMH*2)g}OAi~imiY_CU?G(bPyniNYNeI;a->@cv>a902Qc(-!hGOb4;0hF;0va`yX zKM(VD&YkN!Ic3i6WcEMZ!FKHqNx=D!ZXz=b6{}H4L&TTD6AFI8C$v_*+)t7YgWXfNLIk)+Y z*^)>YuyjKP>a8NDx_3cT_o6KQ`oiVjj`oAVcZx~7d)V#P$Iql#DJ4Eyc4ek%dgbG( z!?=Rqd!(KvetCkxc-vj*N4WQ+e#WY#TWESdD!v(fTZ2V){0UC8uEvDVkFjb6BjuL$ z78V~e&bAu}W)qiJHKJCEYB~E?t`@t8dX#nrtl0iumz6E>o2P<<8L}@t_E1R_lUeUB zv{v!n7Rx%ct07F(vMz6DM-qY-9>V??%QeP!w7{TlG=*-q2uL-@LoFgM%&y3r-*b8} z(p{L!{Qr^g@ERDC3Iq`Nddwhtd3@xsC^Ss1o9Z&kpdFRlg`G|NRC&r8_w-?n04Sd8Ked)b73f7|5GW z&#{M%&vJ&RZnmix{B8=n0dsU_E5J?BE}Td)d4rm?xja&k!#BwRKgKtIe399(KOwEW z`=?Og`ZZpxI+B=%rCL{5P&HJjcwyWv{cop^dM!>w+aDDnBFSf}Yj2SbrpI1>`b{7h zO!wEE_r zTJ#z(^2zRwgNPFHe8l#PMuR**m8*Z$_6I2~QRvG^;nGh?&2QDH;s=T~5?7|ic#~7| zx6lj($A>jk;ch#te`xfo24&RG|MT~nJAUo7g?tG<#aIbGy?=N2PMLMW?|DT}ZW+oh zs!x+m1UR)8+(tQofL}6L$h~(VVKFrH;;;WYr-B~_3yp@bD#U3BgpmG@x*FaXj1=xo z-&V&(IrYhEFiIEz}_bg=Iu-lMqL={Y!!b`*N4%u-+HQ1g67aliaZ0W4*0laX`Xd4;T z?*7_FhF&n&z`i;8*J7ocl*Peids9MWY#|uX{URD3CRHK5OZ0H6>nI7nd`V!;S1{hp zGTDxAYXx$*AGcgHE?-F-U%f2pzUF*KGd+YFc^XzxJO{53K{TK!z7Frxr4N&o4hwu; zU@f!9hm%;@u*@4hBf_qfNaEsTSLW7kLlfAsfXLk|mxitL``diwT;7@>)ilv9KDUqY zu2f4t7gFzNwI70r3VTU~`ug;(b6DWE)?eBs^dxVRrl40GSgVrun~EahEVxQ^qS8!g~M7l;XJn9RyPm7ddugnmQ?VEmx&*UQx zYhI~T>AU{G4q(0T(1nq%-nGNzPf5DwJsS4KIR6Ph@`tgM+IyC5uP}Kk*I5KNCSkh^ zHq06%bbjE_GtR8?@%Z@eMV0T~c#T}kpEqH9M*lNIHup;Nl%(^<5S7qAVLX)Zzig1A zXYA^VxYE&{!&(l6CU4=xbiuX`^wu?{ZyiKM*ns#+lMs_TozgDn5wnE4EXr1E>p9{pQeCn$jdDzZn*b4KHf{%!-C_gclq&hWpzrf z1gDmu6eog?lVj!X%vb+%=cJ^24@Cx_8)Sckt{yX^07;`RWYzpG5uB1+!RzJM>gYV(^{bC}_jEvYckl1w{aW8| z{G0FEu^XSiKM)Lo9FDZ`cNdMt+1`NSKpak9NxZpZqk}{IY{MfZ{YUtv&Lr4bWpWe| zW8;WocK(redH;43zrlO*?CgG;Qa@9D>B=Ps}V1PfA?FqH+F2) zHqFmAHS=4%XKm-$(a{kM-n;$1yk}eY;tObjwBYUX`_q6u0!V%b<>t<3<}Z|aJ8S1N z7cT(~r!QyDR|5+*lU<8N-lsE5f;S7xlU-NpVR5nR>b0(Gz})4`_1>T3ZI5MLV|EBQ zz!3l`9n>OjNXK$oEan2Ne=*H3gREEp%Dml?oF=wO^hPWnvjEM3e6Shtwd7W+r1HS1 zu$l{417L3fR_zcS%dL2$ti@tVFcyoNmb(1*tcmx{TL*UVekGOk961L!Z^QA_9d4)k z22-hF!TYA??yEpWDw(#cd@Wcf;UPt8L25>GSNo}BG+GSjqKWs!H=QNdeQy$-+b zf}9=f8n`ru3EHjMaU|KI*kxHNFU7yUrpkhMrR_{{qm6BenY|!--*yb( zR>hs^RJ+g&qqYzD@PpR24?g%1+6Sj*XFMNq%y#6}*2I3Ge<{^;W_k#?V-wurqmPd! z?#=?Vw*qVVRm-X_c*~X*D=^*y1a4qlb+5% zwLfz>`K$(NJ_FIS?s`D*uAcl{@GcFXv3!a7IVPX*=pk^ilfy%s?f>{@Tk0*r+Z%+q zV&WYf7khG)e-9_wlfXcj^?tVV7D+43&@u+1=B$LsnlFGoWDJaasvX8mynU(_Tzb?v zoES?Bs)bN`^Tyzj)crFRu>Y3FbNdVKO{GTIYN*fPZ91HI#LM&nj(C8gZISpqshz_=j9S!@M*D=vRJ4W zSM)3Hf31O$MTx_PiMJStpA6o{Qft4&$DJM?adAq4=1UEg16rbWKFzPJJ9bkc>9#_TCpg0CAyvWdcWOW2&Mt|`hXq= zq8kDABzXO6B57-2GKX|PfSaU~4g2q4m|i16vgDLNeh@ZS*l z(}-w^AYwz4aGB2}VgNI#VV*y)HxJh0u%K>~1}Bt);B5hnrB3Z+I2_i>Z!Ifl5^dk? zLA1x#2s9?%hJ!ZoB|(MY&CRxLyjxR%XT;3=Ron3r^TSPv_LtyR6QZ=(W51cVe?^zo zI2c#`!|n10re`Xo>}tWGZR2gtYGF)0?3!~nOaM41FMZy?LZ+kPQqM9>Eb;mIT6nhb zku=v`FL*Q8)7{JYADmCFn|XgX-|2LA*8TL(Nmvg@s|4?ef6Wrqpek!AjP*x>6M0#Z zU_BU?q_7O$6^rC{0mykrL88hZfAx*2X|Ve!gvP)jh1iY zXR>GhiJAA0$v2C)@`O~nf=Cp`UoT|0bf1N_hfU4=<^1$FNujKRIJWy3!8ry*QfUbtz0O6pjM2)51 z7{Cd^`^V(Y|F!HJ2Dsgq^t@t&(HYy|kl@X^nL*oBnK!p=iNr8w-a|>u4L_jNhOWoN z;l!${imC>IlZuPKp`RsGdeZKS@{xc^csiTAK)jQewe-uk#<~>`yZ7kHR zxe2)dd=iKXJNF~SeOtdNV9pl>Q8eyEi z?K^poB##~g_Pj%>FZS^Box8K`kwZrZ?_+9@=dkg&<7T)2t&dc_@y$0SHG=nxOYr{9 z4Bp3HpZ@7520z&Qe+7S{(Y?nocYN<2cKcuDUH&LXV1pNzW947$+tF`Y*B!ud-$=gL z5*A+fX6g-P{N@m9Q5inrpecwhdDaJq6usE*-%_1b3) zNvhI{_AI=woEA>6ydqRb^S=7|^&7v~cXBq(5v}_*Ub;+O*R%9j4$rRgJk#=V&$uW2 zOuUaum3DRCf8^FJPE={@3kDLm<()wSm(~C#D_&l@#PmgDK(nP+6Lzr75k-ppg4PzN zEePw;pXEK9S`v59efajP4)0ISoO$(N`SP3)qV)E8@g&8&?C8Gw)z_RTQ{H2ssJtzG z^rcmjFD-A-26>OzURDc9jwn>)*$XFPkP(#Xqd&AP zzgG3vfn?402Z2~HRUPk51lQ>DMl6csd1q$c{Y^*{;{H3Ag*fN%E{XRY-s0`Q3-Q)( zh05h!zJBfMjT_gUzWV2Pw{Uta8;#piN0$Xgf8_?&mb}wASlO7DyYutoh{y8L#_k;x z=I`ZXtM_BQP(b)*E2n%u>tLf5$v-YaVQ(V89RQ;3@0%m~Iz!ibp_rSp=O`!YtaWlQ z7G2HhDT~Brx}f_E4Z9jiE^PMk_RNf=$7`@q1Uv~=4GoGln6e|j_)MAXoF_3imwh_v zf3{lC)44iWsZ+6V1km-l^`$IMrMT$vrszAK_iL|3h0~WGJP_g|hqvhQ{`K$0{>NVm zH^uwF_pQ&q>Gs_Z*RBI(OFDC=mukEq-hF7LjVlRW$w zAlA-9y=_9Y;$bNB#DQW6vejrH^2EHce@bGBz(uM#Y#lO2*5w^Dl926~RP#V_<|*%) zI)sg+`*Pw=y6J%)b0bDKf0QT1f&d;9h|V6*JNo*&f1WUfxN>1%h)?=?|Lem2^B>+6 zeJS2$ez*Z}%+FV3icjV8(uRy4#XH>Hn62a>e^Z%s zcuz8vEp+^Tza0RkjmiV~s?Vg$$`Q_7r%Hw97kV96V7iTqKnTf^nC3xiAV= zXUXO5PP#1=Iczai%#?wUt&f)ICUlo~#P?J0-v9pNYx9e9m*2TB#NYaPi*vtw>pjtz z;tf6CU*GzcZXvl0tsd_sxj{hAe?UhjT;A0K-UlV2ZNW_!ciZMxItjpVnJqo6gba{^yG$%o`2z*S(`yFe3 z$rhV(gSy;<9r-DU-Q5yUlP$o~cq|j+Gjf|%2k>$MFe|hDymOTZ6f4;w=3T3E*s49< z41sVUUmV~agruA7W;5Lt+{A6p2;(GD zQ*_HrJkcCF$#?I|A7428f7WT|i%GY;LOl5E*?pnGm{)_TgD*2C~*>qmx|x34g2mUGjT z7DB9areQH;<>CXpQ)#Woa#PQm5FgKBE(s=$S!>i@$Ff7E*+LCMe+QHG>OL@P=dAM6 zNi?IYo}>{m%TZWQmdh877}i*c_0AZF<(I7P(0J)2yv6?ApU13t-@NsogWRJfr*6xg zhf;^my?ZIS0V8cGw~_!8TlZuK#x?Fiv5;5P<8W>9z67?FGHKXJA z0hDUC5ppM8-j4fDX93o#o$A68h(N*bFIpT{o*kb`kJTrHx>EK0c*DTa5=4%I!yB*3 zVRI`C=1s=v&x&zO>oJDBve#RtKd(i9cE*a88EAjS#L3D9e>|46W;x6}ZqltB%XSxU zmTua>6Cym4HsN{lR=nM#rCXP`s>hq-^LjLOA@+s45SwZQQ5_aYs{7vRzPD;Pc&ij| z#ar>#my4)gMBb`&?C0`r_%@<3)e!Xjc`M#ymk8RiUMj_V_KmTZhO$9& zHmfU|wa@v}02ka+EW_#(QiEe%YjHV$ePP zgBIPwe$%i=B8s1NK~ma9liykgK#%0S0lV~Ieu$2KH@uEgye(g})2oEzyf^4w!+#GU z;`ZfhOiLc}3_S_#|@b37e?PBu|e{vTtH+_1ieFJgxPU*EDEtuH5B5!9y zUxm2>(cX`U{dO8?r1t|`Fd(n4t&z)}B)Y$+`-Fg4RfViLZ$q{EBwdL(lBen`K}5@m zYPFn^G|N@x4nz!>bgL=?7|&7B*J$Xawb*|G6-+fryz>HnJB@TF#k5Wfl!AW*iH*B{AoB--^6bug)~iYJer>#uT-Tt=-|^P^he$vDeUv?$%d$w{C?; zs)?k~oo{m(kgYLevlDN#%HYWE5fB^t9brQPZ%bdr;YK~7WzX2zRm5FcGSi^9q0?bd zIUM2mRFQXUUu@td@AR9*J9u!EM1O1q*3H$WqT{pP%;{klOz;2x%kSTu{&rDEf9G7{ zqr`Op8vopqt{5O=RsmF;_u19&9?ebxz^#Hsm!CdDQ8(e$y#)_EMRhNDPfd7DLkdXu zuUpSftk4=+_pFO`qmXLvcyG&|C2dZkgU=C5Mf1e`2vWowyFQI=PHvPE?TzdIdLBcnz2kjK7D?v4+05QG zd>!$}wj(!o5V5nYt7B8-{ZrEp<4s@gO>JewdpjbFY|FTB%1TRVN(f(esO4PYengz9 z4HKgT-r@iqV!Wg82ezTwfA9)#M_%O_l^zkxyR)}AMpR#wZ=;FP_ZK6cP&MQ@F- zP`Kv!wAkk40Pg|t^Hbm-e1*3LjK#@@nfH||8=KFGH!*H5EhX0&qTP8X|Jtf}F zS0XGy@>j9<5b@0qv~(O{->2r6ylD?|m>{Er$&T_asR*zHtm#eW9XQiC6EG_gk+V0b z%aO9R*66n|P`eeNf0%39SM=C0*5~X)8WVY!AYy-BjCX9R$h)^PHW1~#u=2o^Wd*qV zU{wKPXL%FA1V8Zc96j4Eh`hfq81(Z4G2R6)9wmMN>+7%Zemuuh#{lZQYX{hRcfIZb zjmSIAHO_da7nxkMKFC~z`UzO@L!r-VwYugduxF)sAC+}te>B>AAnwRE$UO08?OeNr zV!62@?^9o0>B67No+4gO;N5YNLst4nVl7C$n}KX&F@l(_W_u70ok{}@kUVoO*|gNo zAZ0kop;&e$htVqX=`f;q5`HC8(SH!EJhG}XCvLY5>~qhZ`w|gzlr*J=c%P)fUIN{~ z6!&F|s|kqlf2oW&cQQLR5asPL-dfGFz6Hl0`_n)pg6DMr=lBfi`lEf*+@NA`>|VVu zZIEw?@m?d|)DJMEOXj_AnRjRS`FjAMEwozMa+0ea?_I_lbQ#3^kn4eVcp=7n1%_6# zSV7pcQoQjB{cIBY38{_?&m$au_GjVfXT;m`YzMd7f1Z))O?-Och{&63FYCfcTPN39 zn!r2K^sf+x&i~2}gYv3?qg%~<+MOqeH!NSBwT05HHa)}uzK_emg{|0*5o`MEJzA>J&-;uMGt7Kyy; zS6AGS<{JknNZ>tX8iTzp#hcsgk~Ot`ja1~DeTZuPC z-gsWdei$rmyLc&qH(qb2C7Lm@f{&1L^r_YC+Z%gT>R#G=b7A&=U>j2QN+tUipAp{= z%r31_>d%P01KFxt8|I%;bsLm)!5Q@#al6u>>`~>>R7)>=f3X8CmCByJY$47Y&3bir ze?RedlGA8yJgX7;Vzj6E#@s^%d zK(TiLU@{Agx`!g~pvUJ1qqja-Z%yERf5>%Q0+Iu;ccpk!PoM8#Vj%&=BHLW_yaki8 zgfKa}bO)2l{NSD2h$w_DBWk3aL|M!hz~lm9%ga9mOh~Yy7-x(A;f!8Liw2?-I82PL z;Cic&vPDl=l9!B6O&%DA|5QCaO6(`zFu45l>Y{IA!ne%xv+3fgS%w!f#Yc&?e*jr- zpVv19)NtYKyauk$@k?&T+vKyZ4vhk=`K+@=8j&|F%)0>wT(gT)3A{n;@wvQ1@c&=x zmMTTM23Z{OevJ|DJ-ww$S`34XH{3c(&^s z#`j4fsZj~MQdY47{z#>6h#l#}f7e)R|DN)uqP&AfjU-Dd9X9@(y)%YQ0aY%m>-tyhk6Xp}tS;4i@TYTU9f5|iPmlmP- zbHizCmDe-kf=uNe~q<2#;1GPR}qzN2KQU@G=y(wB1KrWT2BO9Ng zHxHO!9naL8i9Z^!i#@>D=6ZWlVjt#6i3RUj?_{Eoq24RHW5fHS%nO1 zi~+1Ad31cPcY_%0w$bb1YzT~=yctT8K8!xS_B&kfo|I3!SG~xR0X3dqZEKcvN##FN~rCOzr1RFF_l55aO1|8`o&?F|+TUrIB z$^Lax?sC1I=$PxR7s^0B$98KeQLX_&6+rY0@8P7!-b>5yRnN0zKvn9X#4D<*hTVD_ z6*a>3_5{rQe{eEk@*ba1y={tHZ{41pxb^l)iD}NTeJAzDPec}&eqOJRy^F}-`|V$w^G>+M9xTyGRrDsCH; zNR$MCHA3HlBxdQ|rrrnmsys_ptFzDEDgqVVrMD+wf48)j%tCq7_CtP|*NDaD@L0@WvaiMpI z#m6huOH0vV$Vqo}Tp~3vv|_@7LtpA68w4C0q<*E|=UMVqdQ-UG-hdg@Tpg5&4dCcx zmfir@+dn0C^nSGcklK8Y?z;1&#PsDaZ%{tte}ly#^j=XKW>B)IckS+~?9#hNqMbcC z1E^XEMw0K|$ZMTmUSpB{lCdEtd2|fal~uOSW1SHC)Yr1tk(JSg2PC(KcOrqmdxhY6f7fv6Oe|-Al=GybWNVko~nJkB%wnyp#dZ zRoJzemt-jwnchT%C`?)u!%`fuBu2xlH_wv&^`6r32Fz63qmj*?PESwAxJvI4!}d>! zzukWN-7~881Ny7PbEd?xPj^3laR2Tje?C|oLT|t{F~u*w>P#PrCsv%9wq$1KY|yaU~SApSuE<^`n0H_kuSzBPYJeE-(17kuzR5PC<$WG#(%Aym=Yf7j;= zu}p8l|4nbfKkeO7OIv3g$8i_X7??Bny>Dm4n44ZLuRw4*uPS7I-#}l1F~)4PsETu5%1hwOa%M$*1BI%lba+af7{0lS6wZ<$2p3(ggUG{>J0z%QE52dzdi_8 zDx=Z4pVPkyWMAGVzw@&C6yWI_SNVUZ#QG&+7T3$|%`$|nrrNixFub*!{5tdG)7Zdq5;KsuAVGBRPLlRza1 zMn{i+>|cFq5S3*1l6mPjwK~HgC|1Shj+JE`{Cr@F5Xpp{iekFC1J+QX|hiF z)`yd=WA7)7V53XkDdMO+7^;Nv8WznI9W}u-lj|iK3%49k7KO48ZwiHXlMp67f9+4B z?vKx==DyDlSgr_fxaR%1)`NaiV*QdZW9>n_IXEaf3CO4*G}SCd5W;34tXgrmNwAZ6 zM#uVSwo?YI9SC%g{CKY|SKOYg>c2|Tp~0)}v#6v=}v=y#T^{5bxZi;2nlH=&R)&Q{wD2A6n$>W>f5*#VEycUEE?Lv$4LT zW8L#y7fHS`_z8IHtL4W{iBpSC32#OTNqB#G-V}cM_$l#vJH)NF@<_t_%k!3m_kH61 y6(!w&-jXD|CE+be!dsGr9=9ZYKHidaZ~GfjMlc@7`819I0000YouCopy content type classes1Copy the classes from the frontend css of your content type.2Change the LESS syntax to standard CSS syntax.Change LESS to CSSCSS3 Rename classes (optional)Change your class names to camelCase to to enjoy dot syntax and intellisense. \ No newline at end of file +YouCopy content type classes1Copy the classes from the frontend css of your content type.2Change the LESS syntax to standard CSS syntax.Change LESS to CSSCSS3Rename classes (optional)Change your class names to camelCase to to enjoy dot syntax and intellisense. \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg index ce8284b791..6442f6f438 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/overview/OverviewSteps.svg @@ -1 +1 @@ -4 Add componentBuild out your React component using the properties from the configAggregator.3Build out the CSS styles for your component (as needed).Add stylesheetCSS2 Add aggregatorBuild out your configAggregator to get properties from your content type’s master format.YouSet up component1Create and configure your component files to the component framework. \ No newline at end of file +4Add componentBuild out your React component using the properties from the configAggregator.3Build out the CSS styles for your component (as needed).Add stylesheetCSS2Add aggregatorBuild out your configAggregator to get properties from your content type’s master format.YouSet up component1Create and configure your component files to the component framework. \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteAdmin.png b/pwa-devdocs/src/pagebuilder/custom-components/overview/PageBuilderQuoteAdmin.png index 58a994f84dd21d319ccd7620954e16de249d29ad..3116c9519926d639b18a92aae5f7a132dc4eddfa 100644 GIT binary patch delta 7916 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 delta 7919 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�$3uQvr{9Qwd^%`$V>atEu*Tc_LD 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 diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/PageBuilderFilesSetup.png b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/PageBuilderFilesSetup.png index 2528a7eebac52cd61b81db414b93071dd7a1df23..7d5b2990ef6387b8b452f462a8cc6bfe4fddb0c1 100644 GIT binary patch delta 5687 zcmaiVcRbbc_y4s;U6pZdN+HrEn=aY164_iMGkaV!-Y9#9LbAEC=e?Cpwv21ti(J{8 zj4LC2)#vm1{rh|U@fzp#JkRHOopTq_T0QN6;tjyu{qHC7PC%SsTY_{bVP!;dD;>VRlk54?snm5Fz^> ze!*68ntKq}J*)emTI$&Br)MRE;7@qAHgbAvu;UCcxTJAu)R8(l?mWryy-Otxs;RqqH-qogyQ9H^B; zAp4f(I!r`9Ug6e0j%mugOWL>RU8!vv|$TM<_Ah zoTT$F{KRfjmsxmkkr&*v0UB;6juyW20VF(NmF|Bm`9@8?mQu!7g28}DqJv~y%qhQO;fNPQ0yTDt50Hjxe%P0UxD zUdF+xiVxbCtDN-j*cTAtc##;#c;#m@(mAP_kN$jmw;Tp{r*d(2-eUA0zY{Ux00FVm zDZw_#3fggn4>;9~4lqf|m7uTBWPs82cho%HOQcng?ZV*t9-!di7#=K`oGr!Md+9*=T#k}6vd*-C#EnFzv&zdwHVJ^loxU$hS!u)1-R3!de~G0 zx97OsN7_|z1Jz#E;y@HgX5PYl9noC(yEgZvVXB0g_qT!;l-{@QSXtMPu#~a}5 z$$_QCs?7n4ytb_jgFWXF5OU($J8mjyw2)4RSmBWs==M z^hz_^_VxTS&)}<-*RrjTZvl_ri_&h*apoS$N>G5ncU7jG75`Kc{I?xBj@x#cxiU%3 zM~fylAVa46-JfNG3e}#PWW)(L-dI(j|8o%w7waQoW3y=T`hk_%Q~8A_Y<6HXX$H}Cfk^ypoQ0rcPLOhfR?E)3c4 zWI$Yd#(Gap%B#b&BsbXK_J$r^UB1~AhZzaKC#Gw;GjhE!vwF|_W!cc=&JW_yK^ai; z;kH{JmzZuRE4uHgj9o<2jWXzNZ)j^%vXm{ZV*3#I4yJSDJBx9 zAuvR=Y#R-ACY-kU)35${NcK+2Fpz-qUHq_PzIVoA2)&D4UQ3@7oqK7%Z>(a;4 z*@KC4vF*V)!5O5bcfvgVbn%#s%)RN5!8>Y-4#rN%XvukTpgRfPtQG5{;&(&eHBjJU z`6ys*x-2zmDtd3TbVR_S&QGB9d3p7?sO=Q3e>K?Zn}`;>5|rT0r{htPMV^~D&7E&68JA@1rbv>{ zKiTpAaSraj7$w})Hw%wzdg2;f3n1+lO(kR zWAAF?Za-ntQP8n>=t;?~8W#$mGL+ix65Mui^fG1iflRr7Zn2WxZWM=cxEc0sYl`)r zvK$Zk0AG2!voOnkvxvD#OMnfW5otC)~7oz^VtN5A`gC(XQ>prV{P z_pe2j${vX9;IjnbC@Xx40GeTrNNmi2@P7coY;FBZqBR=@ucD~ugyLei^(PJpr;o8S*7Cp3nVX*ndd}#xy z&u@9e1*9Ck{5krj)1=M>@AJm{qBBMVd1hwwq6L+={^3=3sZ1i=3MOAQ^edIGpI6f5 zogblsYvt=)?Nj%OVrOF@G2Txb9Ip5f2iRSAnx6!T5am#^H2@%M-{-$&or1tR)Qk5) zl3)uW9ZmHww3B3~v-7^19%8`_qgci&LWt&+!YM^7H%~x#5kglAcVpF@qU(Us|7z@- zhx;nKAhMSY3!~|>+M$+=&D>>X99@haCb7^+E_L}zTOA?Pg@;kZIy}5yf8%m?8&Zmt ze8dub*+hpxM~Fe2$N;%TYQ*^!v9L){4}t?b^97Q;;qmucC;K}#fwxB0PAl~mv z`k2sH(m5{Vqx%ApvZ=G4k#s&@s%On^@I94T#{mnT(9l+_7S7f9jgR3E9t znVKu(Fof9j)!~7Z^z?qd>%e(0zd2HjrS+ax(o^;R_00Es?{%L0WLnDxU7_-?*R3f& zbCt^Xy&H2sCGzX1tgR^{JSy7deWa)a)$Yo6YIrMBkR`{^aH-ZnBKXyuJVN;AMd^?6 ziYefqVj+^q+2j^5#y_&Q+?(m_cpbdPN*9K}NMTp}i3D!UmP7=I1Q*qokK+j|FUm|Vl9=O@TqjK_P#2nZeDF54 zIWldtR3})FBj3#Z-suLFMK1i+8L${?&%4S!{raexn+t8GI=1ITR^N%lG~Eh@x)`vl zinL<9!(cl*jM9(m0BY~;C!2d62`jn+G<|+O=Ax z4djEDOxptMb)6cG+vCS1j8l#>3U9K)C)^h1~5Hz+*ueg zWyKBu!ldzgdnyhw%Kv+W*hIJSQ!rA@g+%(L6o@ocpL|@+Q9yYOB2g3bG?`sZCW!iM$OU?|MqPt zdBz5o3|*7Juu7D)K?50n*-q_TJ5w9>=|kqTJpC!1&jVu)F>ih61`JvcI%704XgI?d zaD6hy-eQTy1yuHXo4@3zO{JIL#aJ6VsLzP$772*W6BYw3Fq=i1+K;9CZU7rCyk5Gi zT`H}4_twco;&%P#KX|s?%s~6X+=bH~uvS9kQ$rluck4I1ez(^B^lc(AhyPt?>Mqc7 zf=C`X35_{TS6#i}XdREO=nLFw}$rgD>3tOKo%3)w#{`k)YxF5k3aug9`R>_${?! z&C?AG-{eqXR{4px-?i}apy43Zrrmn312@^cgoQBOhXGVrC+6Byp`V&pn0NX9^AD#? zI4O_6491TG?g&Ko>!~^~#WU0O$r2jTijaAw(_5llj;kj@jWE#RMUKH@!spX!#1)H< z(jf`gb>e8}ulAp6U*pH!5ei>4)m6rZ-VwM6xqBa?AzKk+jFr^#L$8%^DjW%NCLBJo zpHJV;+Z4~P@9YsRiH5Z5Jfrq6ifGhyHkQf@s)$Vm))e#_?PUupe6M|sP=64}aKBxK zot<6A*ZwH^X`JkhSR9uYdHWd-vuphC-v&vdgQvF!4X^xcMp|H1HucH?v2&K@&1`6`p=zO1H6ztCQi?f%vS z2#UYKQnf~OR2sJE{Bm^U85O}(#UG8NQL>4M{hNpzm#qu2V#|wIK&)=Kwn$sYLv*Nh zyS9TqW($~0c@y>gq9eTp0E`7b{yo!U$U?65mAnaM?@Zt~BGbKL zy-4nO?5|%2vw;rL*p45W&0WFet_RYvt_DdW$BdrQePAoQvo*#J7P30$8+b88Gs}Lm z{Id-j^eEKVX6RR)iyFtiR)V{W)}8Wv$xmGHjV#Fvmq(Jpyz{s2{_E9_X!fF*$0uI^!|k?D-%p3X_0w^LafUz~QeV7Sr8 z8OK0ZL!Xy;l$rP_P$=mQu@j1E3E1LTms@c3DSh$#PtNPYLCxw#+-+2LrQYYKfPq(0^rN4GQ&%CyXFr-O znu7GAlk#0ArDHZILpj647q7nZX2^Iar1&{JeFe2{9o{xIB1gT_BKRv?BfpTWVMJAc z-YmLy(|oS;QRBzoBMA<5bruFp#f5q5?(ffFa0Wf!D6)pW|DyQ6_1|XLWadIW_qsP& zgPOPT0}wm&vk+?UcW;gP>gntz!&65jI4QX}wb~=ejt}dNoD1GZKj<_<8#i996zQ-1 z#9LZ-c=s>mAJwfTExJo-r*G;Grir4FH&E9MLsJc_`V+?Ra79d^M88;LO4nVt zm1a_?aaByhm`=vOz?^;8VoUqMY{3%1cd3bUE>w8x`!5yWBlzTR9vaP2tH+Ho!xZA7moB(zi#NnZKmsjVVy&wvZ{FM#ieHUg z_#U?5$GQzUBH12dp?CpbCeZB5D^o9r`B}m(;AxPD#`{T_50DB>O?E5;lk*Tjm^}Bp zl|O?|e*y2Y=f~PLtc1m)Jp$1I|2dxiJq87OPwsofc_04&w&(u)VyC%dzLORVTjzg~N63-aY5hRj^;{yOKj!u*}wpq_ofrd0boaXfuEV8Y0!Ccq8V^$T4tSSwC}Yq z^3#OkW#W=8>8ts_mJLXj`C$?+jwa6}e&O-q>s7JZL!(bD2F@geY`Mc8_fWuDA*kUniBkrF2-l2)G&Ww zW$6tbF;_CS_-EnadwY+$zsP9w`|Y!)3oz^QOZhIWOJhG=$@jiqhgbgW^quF5CWIy6y{#j&;v~6QWRd{8e^ZpFW}MRtslM8V&7ez z&vH#_@|}SM`MsQ{xe_2SPQQWj9?)t-L^@us9t5!^8H)!OqbxRYPCzZluDBIOKxn zT4vZ3Y3jVk6U=JT5*u|yDWm1btA_tzrxyWT)os$=86uB|RX8pHNgL(gIIRHaKEGAt z>-blt0k9OX;ZTTgtc-$;DRV z^OXx=XNEgGuguXvi9Uc!lY3(S^TN;`snCQ8vmTq8=+qWbZ&4A{2=~jumnw!seGhWZ)N>wJM$G} zKZk~8=S{2pTS<*4sl#!iCe{>1LpH%o<;!AK21!TF(<=1>w>0j4GLy*RLEGes;1y`` z3Z1UfeY!s=G2*6_fnV$ruUo!lnv|*@& zei=DbW(O$CkkJ4beb2+VWtgSl9p4?3_eVvQ%zuuq3u?to>4Z5$Sq+qwmD|Em*Iw!c zv;b(7h27kuN#{5s-d#1eAVsyj`yzf@b82)791Zj+l$E9bJn7JopS19NIl5_BElW>* zJ@%v$lq8)0Ij6RL8c{IPYgTwCGC6PssZ#kRK+qTfLru$9g68bFB;C_@@Oi-@s5-js z4K{U*Y3Y@cQ~|jlfhGze0m84A0Ci)!i7;)yf+EXN%QB!CYWavs^}UY?D$RXew%-~| zw}!3XPJ!!G+{DzXIaDX^->Gl@A<`|wYAFy;t-@-g0r#=ktkb3eh_SZWj$wG$bHX29 z>dZ>ptEqK>qFv9oJ+51gpF8rD5ItRMU1#he=!aa67@|fPhn;I+oDUVuuR8A>%gDeN zj}KE$aG9*embIUy%P*ZRGd`c7$pObr>mpQ)6^=|bX*gST;_I^Nst)QN%=2U3GvLuBW`gdBk?!ugMf9UU4;>B6o!Xj$NKoJ8;QM1+(|2OrWKaqV7&(;Yhqc3(VB6`blaw~` z#T}m%#_r`u^%d3im|5MC*T?i3o<{!HVB5Ub6&?4UW(7(#su-)9H^WPcc8-r8DJ7;= zvv()gisv04qHQ#vH~=fksu#W9Zz(Fh;^a<5Qr9+d{p9_C>pzqxGQ0$Z`i~&y@X3&* zp1*>iO)06e{rzXGbKn=F_X_3mI=`iEHy8)hY)DX8tz#qnEflgRRhG+mN#rNv9IiD4 zRUN2y@3b6Q1&G>A)ZX6A7ZsH5_1{VDG-^1z6kh5|+!n5eBa2a{?bH^PZOH2S`C0!$ zIke#CyMQ>! zb2Q;cZ`7pHaly6(F(JPP?;@DKr zz^;d?Ca5b4jBC|%f^{=L9jn+u8lwk>s;%|m&+Ij6(&wiiN#gzR%J6I6MMzrId#)71Cl%!7#BkByhvEJR+J-CXN1uIP+;$uum7@W{HbJgEY~B%m_BWoxy|}9oD_j#pP5LLQ!?sY z=b9`4xvHYS#ynqdmS|msOyHVhY#vE|_rojw_Vh%J?U4Nl$5mxVn`_F&@wUF?V!lQj zVk|6Ebc6X0<_H%y6;1yf8u^cebg$AfeViJDtbJ!0`;v@7bs@N4HL&Pi3^77%^2LH% zV6kYU^JK=DC4PN3gE{w9FmSb8zUgTPR~13ln8VI?zNSG77Rd*)1o?4vLw0*_F(G9# zaqWP2$-&ZqUK7rLGP9oHWM1&sDQ3Bup6{S=1@88@p$H7ew;}1 zVNRwNNM_RgcT?a>7!M@TMYIiUkz@dM(nJgB8`TC<_WBuj1=5*LNk}JlOI@?d^jSYs zhLrhSWy@1Hv;Cb;Y#<2MTZrxZ0A>q08y8x^i#Oy4bq=s!0de0 zub)?ismR|Nl@a}Cq{jDlL94k#gP-sEig`r11>d{wacAOUlkol%*Y3zaj zSmkTMBcFQoZ+?E18AFp41*IL(+Xsf|qh-&)v!UWe#rdKL;!QBsaPE`n)`$U*m@GV|ZVS)M{U z*Jc-$F{7{j1Cna!)irVm)^1>&d@&DR4-TzpC8r)5l& zhnobG)`$0q4+m-QL+J0yI~*_gYw~FmHM|6C;r3j4AwN8J>-kY*luTE_Brh#t+}bTJ z5k!qa2BRoJ2u1f0X{KKLJ(@@`+z(B~3e_B?Y@AkmT2giWxn_)a7T4SRILdkPO`}BT zCmXa(6^8SiOckH(cK@NaT$}BKK7QVPuFD|6hy>`e&Q)qq{NBU1RLB?wlAS?Rx~vZZ zvJ;sM7DU?km;YQJ7?||qob~-A(IR^72!H9vQL`+}-RWVh%pTHlJ>N>~* z`jE((#_4BrF+VtL%ZFg0h$P_bZWBL|4^3I1;C03A8P!W8BPjqA*L!7R;tD54sJ=D^ zCZoi`5yF`8mO0IgH{XqN&CK3Lm*er+Xbxk-?>=rM;*|N0U~f6E2J+C?XA*5RbetZw z2Ios5*KxKo)M?_y*{@S$bNpob(c=QL)^g0TptrfwU(u9}&4^R^y1{4gwW&p~ z&Nvnpu5Ws)`hRPIz3wkQ84CH_{neb=!HM%0D^4k9igoLT+~-ql7JYEIhkfrrt?8qKET(7bF+A|$H3hiO)rS@; zWxw<#X2|OyEecCsJ6ySZL(L|Aze*pY=1eVDFO8gKz@Y;Z8Vjy$vDi0@UbdBwicagn ziS#~lAUp3`9>5wa;6`9Nk_JOIlgxj3xstDg1Q*j=^!wM%yf+D3biJSMeAE_V{)*e$ z(CM$4)%8#A6eOVsdV=>|S*3!jo;kO^6y~38;h`WjAa}(|duPj{?y|$M!?36ezDYI! zK{oK2FOh4EY0#<+*2F}jN^#ZU$TzK6+@oNa_t`Qoo}|Axie^JWm0NoVK};uM$pQBo zoOj_Jmh;WL1hB z_50!t7Vc7MrwLZKDC?vNqSYf3nH1r+2}}lG!Ex&A8Sk2RYpnV8b2ldWr_8M@&IU^U z#I=HxQ1LXrb3Y-U9<9;u^DE$_*dTx<3}L6tg4*t&_HN&WXC9RAzxdITUp71H&E$m$ zu&?t)mPQ#cj1;MbPxYUc{tO`Hgw|t|_`gM9$W~Ly(%bseDd5q3l0BI%$^U4xjz=N& zse+78sFzE(bV_sK74zO(EfiMBuU}ET`ipyxWgl5nfL?k7Wb>~JQ@|4Pp0x7xsS;(| z1Qwna;Xu-d1GlA8UM(u=RZAw|j>(I3Y<3&a4evwSy*(Mz70_&SfiJAtwA=*6&BWjR zTc#kMksxIYPKz22E-s&BlOd=@xr?MVFScfU8X0l%b-zltM&<-ktA$c+tjEy$M*q?G z_Oc?t-AoP)YW^$lHj>x=jK>!1f^du#$z2p@pZ#V@mTgixY^^;BsYqh$2~LqpcJM@c zwxP%U=nA4%_|v{EwjLf(dDXMf1=15(C=@&9TB$2e)=ngpP+WKqRvkn ziBZzm*U#j<>f!WK%SfV8vEP(+{78Pz4lM2yhO3vKyZJE}{vRcVNbE@fmG%@ctxA4z zs%XoCwGan(a2q-I9i`-d+Xzd@!#ntL`EU*1J!#ys`S8W=;rx{nI7vGDS1_Hv3o<#; zgEaXm1ss{p#!i(iGD3Du3-9c!-kT}QDWPB20{lBz8C>`tZJO4(9}3Jm9^6d+Q<|1% zoL8M5XC5zIb|Vur7l+sRsq95ii(%3SKE(uJ8JG-2LF&8+vI_D6d{X2%<)7GHBvj9@ zZ-!hL(GzXmzI8fipKv&VNz?sFcTYpskelw1ga@O(Pr zu}{7nZ(g!OT>`)$FrTLW_O}?M;9)TBPE_k+HqX$q>8l3Kp%F)fsL;cSz^FBJW-q7$0m9@R4HKdbUf>oxj)2pz<^e5Yk~&zxFZIeR!#b7&LLVUy4+*3v%<{{v-yVhG= zR7v~+|3c8dKvh0BE_!xJtH5Tcc$6)YOuj+&nH5X zk)+K&U^1Kw@8+6(kQ4yh>Ypt#9h44|!c~dA$*--5* zE$JG7)ome*SNBt+@`qFnN|owWST3AFS}*xNL5HK#FP_t`w%&>X_77cNK!W>chAK67 z<5>x`;?6dpO%l1#lF?xaMx4vd)1ZkeAlRq^GP3G*YQZVp#AjuTT;OU9Iu~Z*J2y8n z8Zxq1*Sypx<|G8zH6uvPwcr8BK@1R$Hti3|ne>Jkm_LbPXN-4h@f&!tvpHI)9RDse zf0nUE478VZKEJ}p3N_a{-db6FaAQ(cTot8*8c{^fdZ8q#$+?r_RDfJfZ#B5r)c@WmaSF=CjZ z?L8--&MX(d4!n6%j7ooZBfKWfeqbO=60EYB%4dmeh$rr5^Jv8p2FC26LZGgT`?tAg zAJT|Gu#~t>uu3$!9a1c!Zh*MozurbDKM}x+Yo{p_qL-ha2t?z)CWT=iaJwuq=pvum zj}#Zp^zF@xGrA>3kmE~LDRq&V_V^EdMZq~MJG&(z0p=?^F!RSu-&eygD+YtW-!tdg zUdLVN%9qYZUQ1rkMvlIoO5WV>Ubo{`eQ@o(m2D@ch9`N!0$HT2_4d{|;T4>Lz138u z?UH6eR96w36w`VqKn%|9N)@Rd4@~xNi77>vh5yV=GI(b=AHSz+hE3tuQ^az)TE(mq z*W2%B4eshNm0hccYs$>VFx^$diW>HZ%k69ZQow8V5_hYO>sejWVI5k%rZMqn z2uS?6uUAipzJKMG$?Iv!%=`PWElLwDks(Jp2%hjMEu)`!&ksR zt(Sp7=wb+b=F57Z8YeWcr-82~Zr0Pl9#Fn|ewr{ZM zC|L!pZXBFNI@QqW-PjBcJTUG%a_q4G)b&mH^#AYac;@f93PY#Li99@P*&yqr$k53a zLLu$nLJIzPZ^~B-+Xi@Mw<`K? z4U)r7d^?_hw9XALeKhR*Eds6+pe0hyTDY}_!2GjxLV70Iy6VWU6#{_*~q?zi_| dB*}l5CJDI+@>WERBF~@9ErUDy4Z3cR{||T)H)sF= diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/SetupComponentSteps.svg b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/SetupComponentSteps.svg index ca2742c7b1..3bd49db0b2 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/SetupComponentSteps.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/SetupComponentSteps.svg @@ -1 +1 @@ -YouCreate starter files1Create starter code for the four files that make up your component.2Add your starter files to the framework configuration object.Configure componentCSS \ No newline at end of file +YouCreate starter files1Create starter code for the four files that make up your component.2Add your starter files to the framework configuration object.Configure componentCSS \ No newline at end of file From 83fd86b48ac9a2893d19f9cedf0193ad7acd836c Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Thu, 17 Oct 2019 12:05:14 -0500 Subject: [PATCH 30/38] PB-36: [Docs] Creating custom Page Builder components Adding suggestions form review Co-Authored-By: James Calcaben --- pwa-devdocs/src/_data/pagebuilder.yml | 4 ++-- .../src/pagebuilder/custom-components/add-aggregator/index.md | 2 +- .../src/pagebuilder/custom-components/add-component/index.md | 4 ++-- .../src/pagebuilder/custom-components/debugging/index.md | 2 +- .../pagebuilder/custom-components/setup-component/index.md | 2 +- pwa-devdocs/src/pagebuilder/utility-functions/index.md | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pwa-devdocs/src/_data/pagebuilder.yml b/pwa-devdocs/src/_data/pagebuilder.yml index 269113b36f..983cb08aa8 100644 --- a/pwa-devdocs/src/_data/pagebuilder.yml +++ b/pwa-devdocs/src/_data/pagebuilder.yml @@ -1,6 +1,6 @@ title: Page Builder entries: - - label: Page Builder integration + - label: Integration url: /pagebuilder/ - label: Known limitations @@ -29,7 +29,7 @@ entries: - label: Utility functions url: /pagebuilder/utility-functions/ - - label: Page Builder components + - label: Components entries: - label: Banner url: /pagebuilder/components/banner/ diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md index bade8fcc5d..1959408cbc 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md @@ -76,7 +76,7 @@ Then we use the `element` names from the content type HTML (color coded in green Next, we use the `textContent` and `innerHTML` DOM properties to grab the text and html values from the appropriate `childNodes`. -Finally, we use the `getAdvanced()` utility function to retrieve all the property values from the Advanced section of our content type's form and use the spread operator (...) to expand them into the current object. +Finally, we use the `getAdvanced()` utility function to retrieve all the property values from the Advanced section of our content type's form and use the spread operator `(...)` to expand them into the current object. {: .bs-callout .bs-callout-info} The Quote content type also has a form section called Background (from the `pagebuilder_base_form_with_background_attributes` form). This section of the form allows end users to enter all kinds of background attributes, such as images, colors, positions and so on. If your custom content uses the Background section, you should retrieve the those attributes using the `getBackgroundImages(node)` utility function. However, to keep things simple for our component, we decided not to pull these attributes from the HTML. diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md index 0e5a8014c3..9b5143e70f 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md @@ -2,7 +2,7 @@ title: Add component --- -The purpose of a Page Builder component is to recreate a Page Builder content type (from your Magento instance) for display within a PWA app. Developing this component is similar to developing other React components in PWA Studio. However, the properties defined within a Page Builder component are determined by the properties returned from your configuration aggregator. The following steps highlight how to put these properties to use in your component: +The purpose of a Page Builder component is to recreate a Page Builder content type (from your Magento instance) to display inside a PWA app. Developing this component is similar to developing other React components in PWA Studio. However, the properties defined within a Page Builder component are determined by the properties returned from your configuration aggregator. The following steps highlight how to put these properties to use in your component: ![Add Component steps overview](AddComponentSteps.svg) @@ -51,7 +51,7 @@ return ( ); ``` -Because our `description` property value is HTML, we need to use React's [dangerouslySetInnerHTML] and `__html` to render it out properly. +Because our `description` property value is HTML, we need to use React's [dangerouslySetInnerHTML][] and `__html` to render it out properly. ## Step 3: Apply form styles diff --git a/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md b/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md index 3bb17ec49a..e40933ba3a 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/debugging/index.md @@ -8,4 +8,4 @@ If you haven't yet modified the config object and setup the references you'll se parseStorageHtml.js?4091:67 No config aggregator defined for content type X, this content type won't be rendered. ``` -If you _have_ modified the configuration and your content type is still not displaying, you can debug through `packages/venia-ui/lib/components/RichContent/PageBuilder/parseStorageHtml.js` to determine if your configuration item is being correctly detected. +If you _have_ modified the configuration and your content type is still not displaying, debug through `packages/venia-ui/lib/components/RichContent/PageBuilder/parseStorageHtml.js` to determine if your configuration item is correctly detected. diff --git a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md index 64b5edaa7a..020d4740ae 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/setup-component/index.md @@ -102,7 +102,7 @@ component: React.lazy(() => import('./ContentTypes/ExampleQuote')) ## Test the component setup -After adding these files and hooking them up to the framework through the configuration file (`config.js`), your skeleton component should appear on the Venia home page, looking something like this: +After adding these files and hooking them up to the framework through the configuration file (`config.js`), your skeleton component will appear on the Venia home page: ![ExampleQuote component rendered with starter code](ConfigureComponentOutput.png) diff --git a/pwa-devdocs/src/pagebuilder/utility-functions/index.md b/pwa-devdocs/src/pagebuilder/utility-functions/index.md index 0765e112c7..601bd604da 100644 --- a/pwa-devdocs/src/pagebuilder/utility-functions/index.md +++ b/pwa-devdocs/src/pagebuilder/utility-functions/index.md @@ -2,7 +2,7 @@ title: Utility functions --- -The utility functions help with retrieving commonly stored data in a content type. For example, the `getAdvanced(node)` wrapper function retrieves all the content type's Advanced form section settings so you don't have to worry about retrieving each one separately. Retrieving background images and associated properties is also made easy with the `getBackgroundImages(node)` function. +The utility functions help with retrieving commonly stored data in a content type. For example, the `getAdvanced(node)` wrapper function retrieves all the content type's Advanced form section settings so you do not have to worry about retrieving each one separately. Retrieving background images and associated properties is also made easy with the `getBackgroundImages(node)` function. For implementation details [View Source] Let's assume you have at least one _custom_ Page Builder content type rendering content on your Magento storefront. But now you want that content to show up in your PWA app as well. What do you do? Short answer: You create a custom PWA Page Builder component (also know as a "content type component"). The long answer is described in this series of topics. The steps shown here describe the recommended process for developing content type components: ![Overview of steps](OverviewSteps.svg) The topics for these steps show you how to create the code that retrieves properties (content and styling) from your content type HTML (in the configAggregator) and assign those properties to the equivalent properties in your in content type component. - ## Prerequisites From f9ece7cd60fd69905d24b32fe65b3f642a9a5a9f Mon Sep 17 00:00:00 2001 From: Bruce Denham Date: Thu, 17 Oct 2019 12:29:08 -0500 Subject: [PATCH 32/38] PB-36: [Docs] Creating custom Page Builder components Formatting fixes from review --- .../custom-components/add-aggregator/index.md | 2 +- .../custom-components/add-component/index.md | 12 ++++++------ .../custom-components/setup-component/index.md | 4 +++- .../src/pagebuilder/known-limitations/index.md | 9 +++++++++ 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md index 52544b4c44..daab86f2d9 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md @@ -59,7 +59,7 @@ import { getAdvanced } from '../../utils'; export default (node, props) => { -console.log(node); + console.log(node); return { quote: node.childNodes[0].textContent, diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md index 0e5a8014c3..79b7e96d8b 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-component/index.md @@ -43,12 +43,12 @@ Your JSX markup should recreate the HTML structure of your Page Builder content const toHTML = str => ({ __html: str }); return ( -

G+fVT*n(sN+fR-#~{!ky^Tf@ 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 u+=YaqrWgFg?)0gmp_Y(?i6N|gRnxGE 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 LX&b>ZY0WK;};TwE}ltY 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 bPae>;PfMc}N}B~A!T+Si6~xL!4L|-L(L(!G diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg index 887fbed553..0c7269d208 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatHTML.svg @@ -1,111 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - content type - - - - - - appearance - - - - - - element - - - - - - styles - - - - - - classes - - - - - - html content - - - - - - text - - - - - <div data-content-type="example_quote" data-appearance="default" data-element="main" style="border-style: none; border-width: 1px….more;”> - <blockquote class=“quote blue-quote" data-element="quote">I know where I came from—but where did all you zombies come from?</blockquote> - <div class="quote-author" data-element="author">Robert A. Heinlein</div> - <div class="quote-description" data-element="description"> - <div> - <span style="color: #808080;"> - <em>All You Zombies</em> (short story) - </span> - </div> - </div> - </div> - - - - - - structure - - - - HTML content from - tinyMCE editor used for - Quote’s description input - - - - \ No newline at end of file +content typeappearanceelementstylesclasseshtml contenttext<div data-content-type="example_quote" data-appearance="default" data-element="main" style="border-style: none; border-width: 1px….more;”> <blockquote class=“quote blue-quote" data-element="quote">I know where I came from—but where did all you zombies come from?</blockquote> <div class="quote-author" data-element="author">Robert A. Heinlein</div> <div class="quote-description" data-element="description"> <div> <span style="color: #808080;"> <em>All You Zombies</em> (short story) </span> </div> </div> </div>structureHTML content from tinyMCE editor used for Quote’s description input \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg index cf9a80720f..72e8e0067b 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/MasterFormatToComponent.svg @@ -1,96 +1 @@ - - - - MasterFormatToComponent - Created with Sketch. - - - - - - - - - - - - - - - - - React components - - - - - - - - - - - master format - - - - - Magento instance - - - - - - - - - - - - - PWA app - - - - - - - - - - - - - - - - Page Builder for PWA - - - - - - - - - - - - - - - - - - - - - - - - - - Converting the master format HTML into React components - - - \ No newline at end of file +React componentsmaster formatMagento instancePWA appPage Builder for PWAConverting the master format HTML into React components \ No newline at end of file diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.png b/pwa-devdocs/src/pagebuilder/custom-components/add-component/AddComponentOutput.png index c1b5724fa67e929e25d80ede77cd1879a0b0da91..813aba5fb58ae855de5253387d901ee8fb88162f 100644 GIT binary patch literal 22232 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

G+fVT*n(sN+fR-#~{!ky^Tf@ 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 u+=YaqrWgFg?)0gmp_Y(?i6N|gRnxGE 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 LX&b>ZY0WK;};TwE}ltY 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 bPae>;PfMc}N}B~A!T+Si6~xL!4L|-L(L(!G literal 0 HcmV?d00001 diff --git a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md index 86690cda21..dde82f7791 100644 --- a/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md +++ b/pwa-devdocs/src/pagebuilder/custom-components/add-aggregator/index.md @@ -2,23 +2,34 @@ title: Add aggregator --- -The purpose of the configuration aggregator (configAggregator) is pull properties from a content type and return them as a flat object of the properties to the Page Builder PWA framework. The framework (specifically the ``) passes these properties to your component so you can assign them to your component's corresponding properties for rendering within a PWA Studio app. +The purpose of the configuration aggregator (configAggregator) is to retrieve properties from a content type's HTML and return those properties as a flat object of `key:values`. The framework (specifically the ``) then passes this object to your component, where you can assign the properties to your component's corresponding properties for rendering within a PWA Studio app. ![Aggregator Overview](AddAggregatorOverview.svg) -## Master Format HTML +## Content type HTML -The key to building out your aggregator is knowing the structure, content, and properties available in your content type's master format. You can do this the hard way by looking in the database of your Magento instance (that is, the `content` field in the `cms_page` and `cms_block` tables). But there is a better way. +The key to building out your aggregator is knowing the structure, content, and properties available in your content type's master format. You can do this the hard way by looking in the database of your Magento instance (specifically, the `content` field in the `cms_page` and `cms_block` tables). But there is a better way. -**Protip**: Place a `console.log(node)` at the top of your `configAggregator` function so you can see exactly what your content type's HTML (the `HTMLElement` passed by the framework) looks like. +**Protip**: Place a `console.log(node)` at the top of your `configAggregator` function so you can see exactly what your content type's HTML (the `HTMLElement` passed by the framework) looks like. In the `ExampleQuote` starter code, you would add it as shown here: -In our `ExampleQuote` component, the framework passes the following HTMLElement (color coded here for easier analysis) to our aggregator: +```js +export default (node, props) => { + console.log(node); + return { + // Retrieve properties from node here + }; +}; +``` -![Master format HTML](MasterFormatHTML.svg) +The console output should look something like this: + +![Content type HTML](AggregatorHTMLConsoleOutput.png) + +The `node` (HTMLElement) passed to the aggregator contains only your content type's HTML from the master format, not the entire master format as you would find in the database. ## The Aggregator -The interface for a `configAggregator` is as follows: +The interface for a `configAggregator` is: ```ts (node: HTMLElement, props: {contentType: string, appearance: string}) => {[key: string]: any} @@ -26,18 +37,22 @@ The interface for a `configAggregator` is as follows: ### Purpose -The purpose of your component's aggregator is to collect (aggregate) properties from your content type's HTML and return a property object for use in your component. The object you return should contain all the text, html, inline styles, and classes you need to faithfully reproduce your content type as a component in PWA Studio. +To recap, the purpose of your component's aggregator is to collect (aggregate) properties from your content type's HTML and return a property object for use in your component. The object you return should contain all the text, html, inline styles, and classes you need to faithfully reproduce your content type as a component in PWA Studio. -For example, after analyzing the master format HTML for our Quote content type, we decide to retrieve and return the following properties to our component: +Let's look at our Quote content HTML in detail (color coded for easier analysis) to determine the properties we want to return for our component: + +![Master format HTML](MasterFormatHTML.svg) -- Inline **styles** from the first node -- CSS **classes** from the first child node -- **Text** content from the first two child nodes -- **HTML** content from the last child node +Here's what we think we need for our component: -To do this, you'll want to use a combination of [HTMLElement DOM properties] along with our [utility functions], as shown in the following example. +- The inline **styles** from the main node +- The **text** content from the `