🚸(app-impress) add warning when body tag not in template

In order to work with the pad, the body tag
must be in the template.
This commit adds a warning to the template editor
when the body tag is not in the template.
This commit is contained in:
Anthony LC
2024-04-17 17:06:26 +02:00
committed by Anthony LC
parent 5d25aed765
commit d9cdeb5c68
2 changed files with 75 additions and 1 deletions

View File

@@ -31,6 +31,12 @@ test.describe('Template Editor', () => {
page,
browserName,
}) => {
// eslint-disable-next-line playwright/no-skipped-test
test.skip(
browserName !== 'chromium',
'This test failed with safary because of the dragNdrop',
);
const randomTemplate = await createTemplate(
page,
'template-editor',
@@ -64,6 +70,12 @@ test.describe('Template Editor', () => {
page,
browserName,
}) => {
// eslint-disable-next-line playwright/no-skipped-test
test.skip(
browserName !== 'chromium',
'This test failed with safary because of the dragNdrop',
);
const randomTemplate = await createTemplate(
page,
'template-html',
@@ -86,4 +98,42 @@ test.describe('Template Editor', () => {
await page.getByText('Save template').click();
await expect(page.getByText('Template save successfully')).toBeVisible();
});
test('it shows a warning if body tag not present', async ({
page,
browserName,
}) => {
// eslint-disable-next-line playwright/no-skipped-test
test.skip(
browserName !== 'chromium',
'This test failed with safary because of the dragNdrop',
);
const randomTemplate = await createTemplate(
page,
'template-html',
browserName,
1,
);
await expect(page.locator('h2').getByText(randomTemplate[0])).toBeVisible();
await expect(
page.getByText('The {{body}} tag is necessary to works with the pads.'),
).toBeVisible();
const iframe = page.frameLocator('iFrame.gjs-frame');
await page.getByTitle('Open Blocks').click();
await page
.locator('.gjs-editor .gjs-block[title="Text"]')
.dragTo(iframe.locator('body.gjs-dashed'));
await iframe.getByText('Insert your text here').fill('{{body}}');
await iframe.locator('body.gjs-dashed').click();
await expect(
page.getByText('The {{body}} tag is necessary to works with the pads.'),
).toBeHidden();
});
});

View File

@@ -1,5 +1,6 @@
import GjsEditor from '@grapesjs/react';
import {
Alert,
Button,
VariantType,
useToastProvider,
@@ -30,6 +31,17 @@ export const TemplateEditor = ({ template }: TemplateEditorProps) => {
},
});
const [editor, setEditor] = useState<Editor>();
const [showWarning, setShowWarning] = useState(false);
const html = editor?.getHtml();
useEffect(() => {
if (showWarning || !html) {
return;
}
setShowWarning(html.includes('{{body}}') === false);
}, [html, showWarning]);
useEffect(() => {
if (!editor?.loadProjectData) {
@@ -84,7 +96,7 @@ export const TemplateEditor = ({ template }: TemplateEditorProps) => {
updateTemplate({
id: template.id,
css: editor.getCss(),
html: editor.getHtml(),
html,
});
}
}}
@@ -92,6 +104,18 @@ export const TemplateEditor = ({ template }: TemplateEditorProps) => {
{t('Save template')}
</Button>
</Box>
{showWarning && html && (
<Box
className="m-b"
$css="margin-top:0;"
$effect={html.includes('{{body}}') ? 'hide' : 'show'}
>
<Alert
type={VariantType.WARNING}
>{`The {{body}} tag is necessary to works with the pads.`}</Alert>
</Box>
)}
<Box className="m-b" $css="margin-top:0;flex:1;" $overflow="auto">
<GjsEditor
grapesjs={grapesjs}