{ __( 'These interactions are on this page because of their location rules.', 'interactions' ) }
} diff --git a/src/editor/components/interaction-panel/index.js b/src/editor/components/interaction-panel/index.js index 79688be..546618d 100644 --- a/src/editor/components/interaction-panel/index.js +++ b/src/editor/components/interaction-panel/index.js @@ -23,6 +23,7 @@ import { useLayoutEffect, } from '@wordpress/element' import { Icon, download } from '@wordpress/icons' +import { saveCurrentEditor } from '~interact/editor/editors' import TargetSelector from '../target-selector' import { getInteractionWarning } from './util' @@ -225,11 +226,13 @@ const InteractionPanel = props => { setStatus( 'publishing' ) // TODO: if publishing and then we are missing a target, we should show a notice. onChange( editedInteraction ).then( () => { - setStatus( 'idle' ) - setIsDirty( false ) - if ( callback ) { - setTimeout( callback, 1 ) // Need a timeout here because re-publishing may be too fast. - } + return Promise.resolve( saveCurrentEditor() ).finally( () => { + setStatus( 'idle' ) + setIsDirty( false ) + if ( callback ) { + setTimeout( callback, 1 ) // Need a timeout here because re-publishing may be too fast. + } + } ) } ) }, [ editedInteraction, onChange ] ) diff --git a/src/editor/components/target-selector/index.js b/src/editor/components/target-selector/index.js index 1104936..7dc5998 100644 --- a/src/editor/components/target-selector/index.js +++ b/src/editor/components/target-selector/index.js @@ -4,6 +4,7 @@ import { GridLayout, FlexLayout } from '~interact/editor/components' import { getSelectedBlockAnchor, isBricksEditor, + isDiviEditor, isElementorEditor, startEditorElementPicker, } from '~interact/editor/editors' @@ -43,7 +44,7 @@ const TargetSelector = props => { noArrow = false, } = props - const isBuilder = isBricksEditor() || isElementorEditor() + const isBuilder = isBricksEditor() || isElementorEditor() || isDiviEditor() const isElementor = isElementorEditor() const hasBlockEditor = !! select( 'core/block-editor' )?.getSelectedBlockClientId const [ isPopoverOpen, setIsPopoverOpen ] = useState( false ) @@ -59,6 +60,8 @@ const TargetSelector = props => { const displayType = isElementor && elementorUiType === 'elementor-element' ? 'elementor-element' : value.type + // Remove the picker button for Divi when the target type is class, since Divi doesn't support it. + const isDiviManualClassInput = isDiviEditor() && displayType === 'class' const targetButton = ( <> @@ -219,6 +222,13 @@ const TargetSelector = props => { targetOptions = targetOptions.filter( target => bricksTargetTypes.includes( target.value ) ) } + if ( isDiviEditor() ) { + const diviTargetOrder = [ 'selector', 'class', 'trigger', 'window' ] + targetOptions = diviTargetOrder + .map( targetValue => targetOptions.find( target => target.value === targetValue ) ) + .filter( Boolean ) + } + useEffect( () => { return () => { elementPickerStopRef.current?.() @@ -313,7 +323,7 @@ const TargetSelector = props => { ) } { displayType === 'class' && ({ __( 'Can not apply to current block', 'interactions' ) }
+ :{ incompatibleApplyLabel }
} > ) }