Skip to content
Snippets Groups Projects
Select Git revision
  • a476b2d4acfb930e5f7a395a090ff3d59d57f5ba
  • mui5-annotation-on-video-stable default
  • get_setter_canvasSizeInformations
  • fix-error-div-into-p
  • annotation-on-video-v2
  • detached
  • annotation-on-video-r17
  • mui5
  • mui5-react-18
  • jacob-test
  • annotation-on-video protected
  • master
  • test-antoinev1
  • 20-fetch-thumbnail-on-annotation
  • add-research-field
  • Save
  • add-plugin
  • 14-wip-no-seek-to
  • 14-bug-on-video-time-control
  • 9_wip_videotests
  • _upgrade_material_ui
  • latest-tetras-16
  • v3.3.0
  • v3.2.0
  • v3.1.1
  • v3.1.0
  • v3.0.0
  • v3.0.0-rc.7
  • v3.0.0-rc.6
  • v3.0.0-rc.5
  • v3.0.0-rc.4
  • v3.0.0-rc.3
  • v3.0.0-rc.2
  • v3.0.0-rc.1
  • v3.0.0-beta.10
  • v3.0.0-beta.9
  • v3.0.0-beta.8
  • v3.0.0-beta.7
  • v3.0.0-beta.6
  • v3.0.0-beta.5
  • v3.0.0-beta.3
41 results

WorkspaceElastic.js

Blame
  • user avatar
    Chris Beer authored
    a476b2d4
    History
    WorkspaceElastic.js 2.61 KiB
    import { Component } from 'react';
    import PropTypes from 'prop-types';
    import { styled } from '@mui/material/styles';
    import { Rnd } from 'react-rnd';
    import ResizeObserver from 'react-resize-observer';
    import WorkspaceElasticWindow from '../containers/WorkspaceElasticWindow';
    import ns from '../config/css-ns';
    
    const StyledRnd = styled(Rnd)({
      boxSizing: 'border-box',
      margin: 0,
      position: 'absolute',
      transitionDuration: '.7s',
      // order matters
      // eslint-disable-next-line sort-keys
      '&.react-draggable-dragging': {
        transitionDuration: 'unset',
      },
    });
    
    /**
     * Represents a work area that contains any number of windows
     * @memberof Workspace
     * @private
     */
    class WorkspaceElastic extends Component {
      /**
       */
      render() {
        const {
          workspace,
          elasticLayout,
          setWorkspaceViewportDimensions,
          setWorkspaceViewportPosition,
        } = this.props;
    
        const { viewportPosition } = workspace;
        const offsetX = workspace.width / 2;
        const offsetY = workspace.height / 2;
    
        return (
          <div style={{ height: '100%', position: 'relative', width: '100%' }}>
            <ResizeObserver
              onReflow={() => {}}
              onResize={(rect) => { setWorkspaceViewportDimensions(rect); }}
            />
    
            <StyledRnd
              size={{
                height: workspace.height,
                width: workspace.width,
              }}
              position={{
                x: -1 * viewportPosition.x - offsetX, y: -1 * viewportPosition.y - offsetY,
              }}
              enableResizing={{
                bottom: false,
                bottomLeft: false,
                bottomRight: false,
                left: false,
                right: false,
                top: false,
                topLeft: false,
                topRight: false,
              }}
              onDragStop={(e, d) => {
                setWorkspaceViewportPosition({ x: -1 * d.x - offsetX, y: -1 * d.y - offsetY });
              }}
              cancel={`.${ns('window')}`}
              className={ns('workspace')}
              disableDragging={!workspace.draggingEnabled}
            >
              {
                Object.keys(elasticLayout).map(windowId => (
                  <WorkspaceElasticWindow
                    key={windowId}
                    windowId={windowId}
                  />
                ))
              }
            </StyledRnd>
          </div>
        );
      }
    }
    
    WorkspaceElastic.propTypes = {
      elasticLayout: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
      setWorkspaceViewportDimensions: PropTypes.func.isRequired,
      setWorkspaceViewportPosition: PropTypes.func.isRequired,
      workspace: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
    };
    
    export default WorkspaceElastic;