Skip to content
Snippets Groups Projects
WaxView.js 969 B
Newer Older
chris's avatar
chris committed
/* eslint-disable consistent-return */
chris's avatar
chris committed
import React, { useCallback, useEffect, useRef } from 'react';
chris's avatar
chris committed
import styled from 'styled-components';
chris's avatar
chris committed
import ComponentPlugin from './ComponentPlugin';
import './styles/styles.css';
chris's avatar
chris committed
import useWaxView from './useWaxView';
chris's avatar
chris committed
const EditorContainer = styled.div`
chris's avatar
chris committed
  height: 100%;
chris's avatar
chris committed
  position: relative;
chris's avatar
chris committed

  > div:first-child {
    height: 100%;
  }
chris's avatar
chris committed
`;

chris's avatar
chris committed
const WaxPortals = ComponentPlugin('waxPortals');
chris's avatar
chris committed
const WaxOverlays = ComponentPlugin('waxOverlays');
chris's avatar
chris committed
const WaxView = props => {
chris's avatar
chris committed
  const divRef = useRef(null);

chris's avatar
chris committed
  const main = useWaxView(props);
chris's avatar
chris committed

chris's avatar
chris committed
  const initialize = useCallback(() => {
    if (divRef.current) {
      divRef.current.replaceChildren(main?.dom);
    }
chris's avatar
chris committed

  useEffect(() => {
    initialize();
chris's avatar
chris committed

chris's avatar
chris committed
  return (
chris's avatar
chris committed
    <EditorContainer>
chris's avatar
chris committed
      <div ref={divRef} />
chris's avatar
chris committed
      <WaxOverlays activeViewId="main" group="main" />
chris's avatar
chris committed
    </EditorContainer>
chris's avatar
chris committed
};
chris's avatar
chris committed

export default WaxView;