import React, {useCallback, useEffect, useState} from 'react'; import * as ReactDOM from 'react-dom/client'; import { SidebarButtonToggleStyle, SidebarCloseButtonStyle, SidebarDataOptionsStyle, SidebarHeaderStyle, SidebarStyle, } from "./data-options.style.js"; import {isClickOutside, isEscHit} from "../responsive-button/ResponsiveButton.jsx"; import {DesignPreview} from "./DesignPreview.jsx"; export const PRODUCTION_REGISTRY_URL = 'https://blocks-registery.axe-web.com'; function DataOptions(props = {}) { props.rootAttributes = props.rootAttributes ?? {}; const initialState = { dataName: 'default', data: {}, dataText: '{}', dataOptions: [], designPreview: [], errorMessage: null, loading: false, }; const [state, setState] = useState(initialState); const [previewOption, setPreviewOption] = useState(getDesignPreviewImage(state.dataName, state.designPreview)); const updateState = (update) => setState(Object.assign({}, state, update)); const [sidebarOpen, setSidebarOpen] = useState(false); useEffect(async () => { await syncDataOptions(state.dataName); }, []); const handleCloseSidebarEscEvent = useCallback((e) => { if (isEscHit(e)) { (() => { closeSidebar() })(); } }, []); useEffect(() => { document.addEventListener("keydown", handleCloseSidebarEscEvent); // Unsubscribe from ESC listener. return () => { document.removeEventListener("keydown", handleCloseSidebarEscEvent); } }, [handleCloseSidebarEscEvent]); useEffect(() => { window.addEventListener('message', responsiveModeChangesHandler); return () => window.removeEventListener('message', responsiveModeChangesHandler); }, [state]); useEffect(() => { setPreviewOption(getDesignPreviewImage(state.dataName, state.designPreview)); }, [state.designPreview]); const handleBlur = async (e) => await isClickOutside(e) ? closeSidebar() : null; return
openSidebar()} title="Open a Sidebar with Data Options"/> closeSidebar()}> {state.dataOptions && !!state.dataOptions.length && } {state.data &&