Skip to content
Snippets Groups Projects
target-pane.jsx 4.16 KiB
Newer Older
  • Learn to ignore specific revisions
  • Paul Kaplan's avatar
    Paul Kaplan committed
    import PropTypes from 'prop-types';
    import React from 'react';
    
    Ray Schamp's avatar
    Ray Schamp committed
    
    
    Paul Kaplan's avatar
    Paul Kaplan committed
    import VM from 'scratch-vm';
    
    Ray Schamp's avatar
    Ray Schamp committed
    
    
    Paul Kaplan's avatar
    Paul Kaplan committed
    import SpriteLibrary from '../../containers/sprite-library.jsx';
    import SpriteSelectorComponent from '../sprite-selector/sprite-selector.jsx';
    import StageSelector from '../../containers/stage-selector.jsx';
    
    Paul Kaplan's avatar
    Paul Kaplan committed
    import styles from './target-pane.css';
    
    Ray Schamp's avatar
    Ray Schamp committed
    /*
     * Pane that contains the sprite selector, sprite info, stage selector,
     * and the new sprite, costume and backdrop buttons
     * @param {object} props Props for the component
     * @returns {React.Component} rendered component
     */
    
    const TargetPane = ({
        editingTarget,
    
    DD's avatar
    DD committed
        hoveredTarget,
    
        spriteLibraryVisible,
        onChangeSpriteDirection,
        onChangeSpriteName,
    
        onChangeSpriteVisibility,
        onChangeSpriteX,
        onChangeSpriteY,
        onDeleteSprite,
    
        onDuplicateSprite,
    
        onNewSpriteClick,
    
        onSurpriseSpriteClick,
        onPaintSpriteClick,
    
        onRequestCloseSpriteLibrary,
        onSelectSprite,
    
    DD's avatar
    DD committed
        raiseSprites,
    
        stage,
        sprites,
        vm,
        ...componentProps
    }) => (
    
            className={styles.targetPane}
            {...componentProps}
        >
    
            <SpriteSelectorComponent
    
    DD's avatar
    DD committed
                editingTarget={editingTarget}
                hoveredTarget={hoveredTarget}
    
    DD's avatar
    DD committed
                raised={raiseSprites}
    
                selectedId={editingTarget}
                sprites={sprites}
                onChangeSpriteDirection={onChangeSpriteDirection}
                onChangeSpriteName={onChangeSpriteName}
    
                onChangeSpriteSize={onChangeSpriteSize}
    
                onChangeSpriteVisibility={onChangeSpriteVisibility}
                onChangeSpriteX={onChangeSpriteX}
                onChangeSpriteY={onChangeSpriteY}
                onDeleteSprite={onDeleteSprite}
    
                onDuplicateSprite={onDuplicateSprite}
    
                onNewSpriteClick={onNewSpriteClick}
    
                onPaintSpriteClick={onPaintSpriteClick}
    
                onSelectSprite={onSelectSprite}
    
    Paul Kaplan's avatar
    Paul Kaplan committed
                onSurpriseSpriteClick={onSurpriseSpriteClick}
    
            <div className={styles.stageSelectorWrapper}>
    
                {stage.id && <StageSelector
                    assetId={
                        stage.costume &&
                        stage.costume.assetId
                    }
                    backdropCount={stage.costumeCount}
                    id={stage.id}
                    selected={stage.id === editingTarget}
                    onSelect={onSelectSprite}
                />}
    
                <div>
                    {spriteLibraryVisible ? (
                        <SpriteLibrary
                            vm={vm}
                            onRequestClose={onRequestCloseSpriteLibrary}
                        />
                    ) : null}
                </div>
            </div>
        </div>
    
    const spriteShape = PropTypes.shape({
        costume: PropTypes.shape({
            url: PropTypes.string,
            name: PropTypes.string.isRequired,
            bitmapResolution: PropTypes.number.isRequired,
            rotationCenterX: PropTypes.number.isRequired,
            rotationCenterY: PropTypes.number.isRequired
    
    Ray Schamp's avatar
    Ray Schamp committed
        }),
    
        direction: PropTypes.number,
    
        id: PropTypes.string,
        name: PropTypes.string,
        order: PropTypes.number,
    
    Paul Kaplan's avatar
    Paul Kaplan committed
        size: PropTypes.number,
    
        visibility: PropTypes.bool,
        x: PropTypes.number,
        y: PropTypes.number
    
    Ray Schamp's avatar
    Ray Schamp committed
    });
    
    TargetPane.propTypes = {
    
        editingTarget: PropTypes.string,
    
        extensionLibraryVisible: PropTypes.bool,
    
    DD's avatar
    DD committed
        hoveredTarget: PropTypes.shape({
            hoveredSprite: PropTypes.string,
            receivedBlocks: PropTypes.bool
        }),
    
        onChangeSpriteDirection: PropTypes.func,
    
        onChangeSpriteName: PropTypes.func,
    
        onChangeSpriteSize: PropTypes.func,
    
        onChangeSpriteVisibility: PropTypes.func,
        onChangeSpriteX: PropTypes.func,
        onChangeSpriteY: PropTypes.func,
        onDeleteSprite: PropTypes.func,
    
        onDuplicateSprite: PropTypes.func,
    
        onNewSpriteClick: PropTypes.func,
    
    Paul Kaplan's avatar
    Paul Kaplan committed
        onPaintSpriteClick: PropTypes.func,
    
        onRequestCloseExtensionLibrary: PropTypes.func,
    
        onRequestCloseSpriteLibrary: PropTypes.func,
        onSelectSprite: PropTypes.func,
    
    Paul Kaplan's avatar
    Paul Kaplan committed
        onSurpriseSpriteClick: PropTypes.func,
    
    DD's avatar
    DD committed
        raiseSprites: PropTypes.bool,
    
        spriteLibraryVisible: PropTypes.bool,
        sprites: PropTypes.objectOf(spriteShape),
    
    Ray Schamp's avatar
    Ray Schamp committed
        stage: spriteShape,
    
        vm: PropTypes.instanceOf(VM)
    
    Ray Schamp's avatar
    Ray Schamp committed
    };
    
    
    export default TargetPane;