From b28739a38030ce02660cc87e03bdc21d787ecdca Mon Sep 17 00:00:00 2001 From: Vitalii Nobis Date: Wed, 20 Sep 2023 10:06:56 +0000 Subject: [PATCH 1/2] fix: fix inconsistent pb element save-behavior in editor --- .../src/renderers/components/EmptyElement.tsx | 20 +++++++++++++++++++ .../src/renderers/components/index.ts | 1 + .../renderers/embeds/components/OEmbed.tsx | 10 ++++++++-- .../src/renderers/embeds/iframe.tsx | 8 +++++++- .../src/renderers/embeds/pinterest.tsx | 3 ++- .../src/renderers/image.tsx | 4 ++-- .../defaultImagesListComponent.tsx | 15 ++------------ .../elementSettings/action/ActionSettings.tsx | 7 ++++++- .../editor/plugins/elements/button/index.tsx | 3 ++- .../recoil/actions/createElement/action.ts | 3 ++- packages/app-page-builder/src/types.ts | 10 +++++----- 11 files changed, 57 insertions(+), 27 deletions(-) create mode 100644 packages/app-page-builder-elements/src/renderers/components/EmptyElement.tsx diff --git a/packages/app-page-builder-elements/src/renderers/components/EmptyElement.tsx b/packages/app-page-builder-elements/src/renderers/components/EmptyElement.tsx new file mode 100644 index 00000000000..f3341ef571d --- /dev/null +++ b/packages/app-page-builder-elements/src/renderers/components/EmptyElement.tsx @@ -0,0 +1,20 @@ +import React from "react"; +import styled from "@emotion/styled"; + +const EmptyElementWrapper = styled.div` + display: flex; + align-items: center; + justify-content: center; + height: 100%; + min-height: 100px; + ${props => props.theme.styles.typography.paragraphs.stylesById("paragraph1")}; + color: ${props => props.theme.styles.colors["color4"]}; +`; + +type EmptyElementProps = { + message: string; +}; + +export const EmptyElement = ({ message }: EmptyElementProps) => { + return {message}; +}; diff --git a/packages/app-page-builder-elements/src/renderers/components/index.ts b/packages/app-page-builder-elements/src/renderers/components/index.ts index 3c5fa5e000d..88f0b9624dc 100644 --- a/packages/app-page-builder-elements/src/renderers/components/index.ts +++ b/packages/app-page-builder-elements/src/renderers/components/index.ts @@ -1 +1,2 @@ export * from "./DefaultLinkComponent"; +export * from "./EmptyElement"; diff --git a/packages/app-page-builder-elements/src/renderers/embeds/components/OEmbed.tsx b/packages/app-page-builder-elements/src/renderers/embeds/components/OEmbed.tsx index 1363772c6af..676190dcee4 100644 --- a/packages/app-page-builder-elements/src/renderers/embeds/components/OEmbed.tsx +++ b/packages/app-page-builder-elements/src/renderers/embeds/components/OEmbed.tsx @@ -1,7 +1,9 @@ import React, { useEffect, useCallback } from "react"; -import { Element } from "~/types"; import styled from "@emotion/styled"; +import { EmptyElement } from "~/renderers/components"; +import { Element } from "~/types"; + export interface OEmbedPropsInitCallableParams { props: OEmbedProps; node: HTMLElement; @@ -74,5 +76,9 @@ export const OEmbed: React.FC = props => { appendSDK(props).then(() => initEmbed(props)); }); - return url ? renderer() : null; + if (!url) { + return ; + } + + return renderer(); }; diff --git a/packages/app-page-builder-elements/src/renderers/embeds/iframe.tsx b/packages/app-page-builder-elements/src/renderers/embeds/iframe.tsx index 5fec4147d1c..bcfb9d3baeb 100644 --- a/packages/app-page-builder-elements/src/renderers/embeds/iframe.tsx +++ b/packages/app-page-builder-elements/src/renderers/embeds/iframe.tsx @@ -1,6 +1,7 @@ import React from "react"; import { createRenderer } from "~/createRenderer"; import { useRenderer } from "~/hooks/useRenderer"; +import { EmptyElement } from "~/renderers/components"; export interface IFrameElementData { iframe: { @@ -13,6 +14,11 @@ export const createIFrame = () => const { getElement } = useRenderer(); const element = getElement(); + const url = element.data.iframe.url; - return