運行邏輯整理
項目入口主要功能包裝(高階組件) src/containers/gui.jsx
const WrappedGui = compose(
LocalizationHOC, // 提供 “本地化” 功能
ErrorBoundaryHOC('Top Level App'),
FontLoaderHOC,
QueryParserHOC, // 提供 “提示查詢” 功能(src/lib/query-parser-hoc.jsx)
ProjectFetcherHOC, // 提供 “獲取項目” 功能(src/lib/project-fetcher-hoc.jsx)
TitledHOC,
ProjectSaverHOC, // 提供 “保存項目” 功能(src/lib/project-saver-hoc.jsx)
vmListenerHOC,
vmManagerHOC,
SBFileUploaderHOC, // 提供 “上傳文件” 功能(src/lib/sb-file-uploader-hoc.jsx)
cloudManagerHOC // 提供 “云管理” 功能
)(ConnectedGUI);
WrappedGui.setAppElement = ReactModal.setAppElement;
export default WrappedGui;
高階組件
“本地化”
LocalizationHOC: 監(jiān)聽onSetLanguage事件修改state.locales狀態(tài)切換語言“提示查詢”
QueryParserHOC: 通過onOpenTipsLibrary調(diào)用state.openTipsLibrary更新狀態(tài),以供src/components/menu-bar/menu-bar.jsx點擊事件調(diào)用“獲取項目”
ProjectFetcherHOC: 設(shè)置 資源主機、項目主機 通過fetchProject調(diào)用storage.load加載項目-
“保存項目”
ProjectSaverHOC:-
componentWillMount添加 離開頁面 監(jiān)聽器window.onbeforeunload = e => this.leavePageConfirm(e); -
updateProjectToStorage調(diào)用this.storeProject更新項目到storage -
createNewProjectToStorage調(diào)用this.storeProject創(chuàng)建項目到storage -
createCopyToStorage調(diào)用this.storeProject復(fù)制項目到storage -
createRemixToStorage調(diào)用this.storeProject重制項目到storage -
storeProject調(diào)用this.storeProjectThumbnail存儲項目到storage -
storeProjectThumbnail調(diào)用this.getProjectThumbnail設(shè)置項目快照 -
getProjectThumbnail獲取項目快照
-
-
“上傳文件”
SBFileUploaderHOC: 添加onStartSelectingFileUpload文件上傳邏輯,并添加回調(diào)點以供src/components/menu-bar/menu-bar.jsx點擊事件調(diào)用,步驟如下-
handleStartSelectingFileUpload預(yù)處理 可能會有其他邏輯 -
createFileObjects清理內(nèi)存后上傳sb3文件,并監(jiān)聽文件讀取事件onload -
handleChange選擇文件后彈框確認,同意后進入下一步,不同意清理內(nèi)存后關(guān)閉 “文件選擇框” -
requestProjectUpload修改state.scratchGui.projectState.loadingState項目狀態(tài)為 “uploading” -
handleFinishedLoadingUpload讀取文件內(nèi)容 (文件上傳后觸發(fā)組件componentDidUpdate事件時調(diào)用此方法) -
onload通過dispatch(openLoadingProject())打開 “加載提示” 模態(tài)框,并調(diào)用state.scratchGui.vm.loadProject開始加載項目,然后調(diào)用dispatch(setProjectTitle(title))設(shè)置項目名稱,最后改變state.scratchGui.projectState關(guān)閉模態(tài)框。 -
removeFileObjects清理內(nèi)存(開始、完成、失敗時都執(zhí)行清理工作)
-