/** * External dependencies */ import { isEmpty } from 'lodash' /** * WordPress dependencies */ import { __ } from '@wordpress/i18n' import { Fragment } from '@wordpress/element' import { applyFilters } from '@wordpress/hooks' import { Button, Dashicon, TextControl, ToggleControl, } from '@wordpress/components' import { BlockControls, AlignmentToolbar, RichText, MediaUpload, useBlockProps, } from '@wordpress/block-editor' /** * Internal dependencies */ import Step from './components/Step' import Inspector from './components/inspector' import generateId from '@helpers/generateId' import MediaUploader from '@blocks/shared/MediaUploader' /** * Add an empty Step into block. * * @param {Object} props Block props. */ const addNew = ( props ) => { const { steps } = props.attributes const newSteps = isEmpty( steps ) ? [] : [ ...steps ] newSteps.push( { id: generateId( 'howto-step' ), title: '', content: '', visible: true, } ) props.setAttributes( { steps: newSteps } ) } /** * Toggle duration form visibility. * * @param {Object} props Block props */ const toggleDuration = ( props ) => { props.setAttributes( { hasDuration: ! props.attributes.hasDuration, } ) } /** * When an image selected. * * @param {Object} image Seelected image object. * @param {Object} props Block props. */ const onSelectImage = ( image, props ) => { const { setAttributes } = props setAttributes( { imageID: image.id } ) } /** * Remove image from step. * * @param {Object} props Block props. */ const removeImage = ( props ) => { const { setAttributes } = props setAttributes( { imageID: 0 } ) } /** * Render Steps component. * * @param {Object} props Block props. * @return {Array} Array of step editor. */ const renderSteps = ( props ) => { const { steps, sizeSlug, titleWrapper, titleCssClasses, contentCssClasses, } = props.attributes if ( isEmpty( steps ) ) { return null } return steps.map( ( step, index ) => { return (