import type { BlockEditProps } from '@plone/types'; import { Icon, SidebarPortal, UniversalLink } from '@plone/volto/components'; import { BlockDataForm } from '@plone/volto/components/manage/Form'; import EditItem from '@redturtle/volto-blocks/components/blocks/IconsAndText/EditItem'; import type { IconsAndTextData } from '@redturtle/volto-blocks/components/blocks/IconsAndText/schema'; import styles from '@redturtle/volto-blocks/components/blocks/IconsAndText/styles.module.scss'; import blockIcon from '@redturtle/volto-blocks/icons/icons_and_text.svg'; import { TextEditorWidget, useHandleDetachedBlockFocus, } from '@redturtle/volto-slate-extras'; import cx from 'classnames'; import React, { useEffect } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { v4 as uuid } from 'uuid'; import config from '@plone/registry'; type IconsAndTextEditProps = BlockEditProps & { data: IconsAndTextData; }; export default function Edit(props: IconsAndTextEditProps) { const { data, selected, block, onChangeBlock, blocksConfig, blocksErrors } = props; const intl = useIntl(); const column_number = data.column_number ? parseInt(data.column_number) : 3; const { selectedField, setSelectedField } = useHandleDetachedBlockFocus( props, 'title', ); useEffect(() => { if (!data?.columns || data?.columns?.length === 0) { onChangeBlock(block, { ...data, columns: [ { '@id': uuid(), dividerPosition: 'before_title', iconSize: 's' }, { '@id': uuid(), dividerPosition: 'before_title', iconSize: 's' }, { '@id': uuid(), dividerPosition: 'before_title', iconSize: 's' }, ], }); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [block]); const schema = blocksConfig[data['@type']].blockSchema({ data, intl, }); if (__SERVER__) { return
; } const Container = config.getComponent('Container').component || 'div'; return ( <>
{ setSelectedField('text'); }} showToolbar={false} placeholder={intl.formatMessage(messages.title)} /> { setSelectedField('title'); }} placeholder={intl.formatMessage(messages.text)} />
{data.columns?.length > 0 && data.columns.map((item, i) => ( { onChangeBlock(block, { ...data, columns: data.columns.map((i) => i['@id'] === id ? { ...i, [field]: value } : i, ), }); }} // @ts-expect-error TODO fix type in @plone/types selected={selected} /> ))}
{data.linkHref?.[0] && (
) => { e.preventDefault(); }} > {data.linkTitle}
)}
{/* @ts-expect-error TODO */} {schema && ( } schema={schema} title={schema.title} onChangeField={(id: string, value: unknown) => { onChangeBlock(block, { ...data, [id]: value, }); }} onChangeBlock={onChangeBlock} formData={data} block={block} errors={blocksErrors} /> )} ); } const messages = defineMessages({ title: { id: 'Title', defaultMessage: 'Title...', }, text: { id: 'Text', defaultMessage: 'Type text...', }, });