Skip to content

Commit 396f83d

Browse files
authored
Merge pull request #266 from scratchfoundation/ipr-799-allow-embedding
feat: allow using editor in embedded mode
2 parents 43a8660 + 5d2c341 commit 396f83d

File tree

5 files changed

+39
-8
lines changed

5 files changed

+39
-8
lines changed

packages/scratch-gui/src/exported-reducers.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {ScratchPaintReducer} from 'scratch-paint';
22
import LocalesReducer, {localesInitialState, initLocale} from './reducers/locales.js';
33
import GuiReducer, {buildInitialState, guiMiddleware, initEmbedded, initFullScreen, initPlayer} from './reducers/gui';
4-
import {setFullScreen, setPlayer} from './reducers/mode.js';
4+
import {setFullScreen, setPlayer, setEmbedded} from './reducers/mode.js';
55
import {activateDeck} from './reducers/cards.js';
66
import {
77
LoadingStates,
@@ -48,5 +48,6 @@ export {
4848
localesInitialState,
4949
setFullScreen,
5050
setPlayer,
51+
setEmbedded,
5152
activateDeck
5253
};

packages/scratch-gui/src/lib/app-state-hoc.jsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ const AppStateHOC = function (WrappedComponent, localesOnly, configFactory) {
2727
localesOnly,
2828
isFullScreen: props.isFullScreen,
2929
isPlayerOnly: props.isPlayerOnly,
30-
showTelemetryModal: props.showTelemetryModal
30+
showTelemetryModal: props.showTelemetryModal,
31+
isEmbedded: props.isEmbedded
3132
}, configFactory);
3233
}
3334

@@ -45,7 +46,8 @@ const AppStateHOC = function (WrappedComponent, localesOnly, configFactory) {
4546
isFullScreen: PropTypes.bool,
4647
isPlayerOnly: PropTypes.bool,
4748
isTelemetryEnabled: PropTypes.bool,
48-
showTelemetryModal: PropTypes.bool
49+
showTelemetryModal: PropTypes.bool,
50+
isEmbedded: PropTypes.bool
4951
};
5052
return AppStateWrapper;
5153
};

packages/scratch-gui/src/lib/app-state-provider-hoc.jsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {Provider} from 'react-redux';
33
import PropTypes from 'prop-types';
44

55
import {EditorState} from './editor-state';
6-
import {setPlayer, setFullScreen} from '../reducers/mode.js';
6+
import {setPlayer, setFullScreen, setEmbedded} from '../reducers/mode.js';
77
import ConnectedIntlProvider from './connected-intl-provider.jsx';
88

99
/**
@@ -23,6 +23,9 @@ export const AppStateProviderHOC = function (WrappedComponent) {
2323
if (prevProps.isFullScreen !== this.props.isFullScreen) {
2424
this.props.appState.store.dispatch(setFullScreen(this.props.isFullScreen));
2525
}
26+
if (prevProps.isEmbedded !== this.props.isEmbedded) {
27+
this.props.appState.store.dispatch(setEmbedded(this.props.isEmbedded));
28+
}
2629
}
2730

2831
render () {
@@ -31,6 +34,7 @@ export const AppStateProviderHOC = function (WrappedComponent) {
3134
isFullScreen, // eslint-disable-line no-unused-vars
3235
isPlayerOnly, // eslint-disable-line no-unused-vars
3336
showTelemetryModal, // eslint-disable-line no-unused-vars
37+
isEmbedded, // eslint-disable-line no-unused-vars
3438
...componentProps
3539
} = this.props;
3640
return (
@@ -50,7 +54,8 @@ export const AppStateProviderHOC = function (WrappedComponent) {
5054
isFullScreen: PropTypes.bool,
5155
isPlayerOnly: PropTypes.bool,
5256
isTelemetryEnabled: PropTypes.bool,
53-
showTelemetryModal: PropTypes.bool
57+
showTelemetryModal: PropTypes.bool,
58+
isEmbedded: PropTypes.bool
5459
};
5560
return AppStateWrapper;
5661
};

packages/scratch-gui/src/lib/editor-state.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export interface EditorStateParams {
2020
isFullScreen?: boolean;
2121
isPlayerOnly?: boolean;
2222
showTelemetryModal?: boolean;
23+
isEmbedded?: boolean;
2324
}
2425

2526
/**
@@ -59,7 +60,8 @@ export class EditorState {
5960
guiMiddleware,
6061
initFullScreen,
6162
initPlayer,
62-
initTelemetryModal
63+
initTelemetryModal,
64+
initEmbedded
6365
} = guiRedux;
6466
const {ScratchPaintReducer} = require('scratch-paint');
6567

@@ -68,13 +70,16 @@ export class EditorState {
6870
require('../legacy-config').legacyConfig;
6971

7072
let initializedGui = buildInitialState(configOrLegacy);
71-
if (params.isFullScreen || params.isPlayerOnly) {
73+
if (params.isFullScreen || params.isPlayerOnly || params.isEmbedded) {
7274
if (params.isFullScreen) {
7375
initializedGui = initFullScreen(initializedGui);
7476
}
7577
if (params.isPlayerOnly) {
7678
initializedGui = initPlayer(initializedGui);
7779
}
80+
if (params.isEmbedded) {
81+
initializedGui = initEmbedded(initializedGui);
82+
}
7883
} else if (params.showTelemetryModal) {
7984
initializedGui = initTelemetryModal(initializedGui);
8085
}

packages/scratch-gui/src/reducers/mode.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const SET_FULL_SCREEN = 'scratch-gui/mode/SET_FULL_SCREEN';
22
const SET_PLAYER = 'scratch-gui/mode/SET_PLAYER';
3+
const SET_EMBEDDED = 'scratch-gui/mode/SET_EMBEDDED';
34

45
const initialState = {
56
showBranding: false,
@@ -20,6 +21,16 @@ const reducer = function (state, action) {
2021
isPlayerOnly: action.isPlayerOnly,
2122
hasEverEnteredEditor: state.hasEverEnteredEditor || !action.isPlayerOnly
2223
});
24+
case SET_EMBEDDED:
25+
if (action.isEmbedded) {
26+
return Object.assign({}, state, {
27+
showBranding: true,
28+
isFullScreen: true,
29+
isPlayerOnly: true,
30+
hasEverEnteredEditor: false
31+
});
32+
}
33+
return state;
2334
default:
2435
return state;
2536
}
@@ -37,10 +48,17 @@ const setPlayer = function (isPlayerOnly) {
3748
isPlayerOnly: isPlayerOnly
3849
};
3950
};
51+
const setEmbedded = function (isEmbedded) {
52+
return {
53+
type: SET_EMBEDDED,
54+
isEmbedded: isEmbedded
55+
};
56+
};
4057

4158
export {
4259
reducer as default,
4360
initialState as modeInitialState,
4461
setFullScreen,
45-
setPlayer
62+
setPlayer,
63+
setEmbedded
4664
};

0 commit comments

Comments
 (0)