-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMakeCodeFrame.stories.tsx
More file actions
107 lines (102 loc) · 3.32 KB
/
MakeCodeFrame.stories.tsx
File metadata and controls
107 lines (102 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import { Meta, StoryObj } from '@storybook/react';
import { useCallback, useRef } from 'react';
import { defaultMakeCodeProject } from '../../vanilla/examples.js';
import { MakeCodeFrameDriver } from '../../vanilla/makecode-frame-driver.js';
import {
default as MakeCodeFrame,
MakeCodeFrameProps,
} from '../../react/MakeCodeFrame.js';
import { MakeCodeProject } from '../../vanilla/pxt.js';
import { controllerId } from '../config.js';
import StoryWrapper from '../StoryWrapper.js';
import MakeCodeToolbar from '../MakeCodeToolbar.js';
const meta: Meta<typeof MakeCodeFrame> = {
title: 'stories/React/MakeCodeFrame',
component: MakeCodeFrame,
argTypes: {
version: {
options: ['default', 'beta'],
defaultValue: undefined,
name: 'version',
control: { type: 'radio' },
},
},
};
export default meta;
type Story = StoryObj<typeof MakeCodeFrame>;
const MakeCodeEditorWithControls = (
props: Omit<MakeCodeFrameProps, 'initialProjects'>
) => {
const savedProjects = useRef<Map<string, MakeCodeProject>>(new Map());
const ref = useRef<MakeCodeFrameDriver>(null);
const initialProjects = useCallback(async () => {
if (savedProjects.current.size === 0) {
// Maybe we can switch to using newProject instead?
return [defaultMakeCodeProject];
}
return [...savedProjects.current.values()];
}, []);
return (
<>
<MakeCodeToolbar savedProjects={savedProjects} driver={ref} />
<MakeCodeFrame
ref={ref}
controller={1}
controllerId={controllerId}
initialProjects={initialProjects}
onEditorContentLoaded={(e) => console.log('editorContentLoaded', e)}
onWorkspaceLoaded={(e) => console.log('workspaceLoaded', e)}
onWorkspaceSync={(e) => console.log('workspaceSync', e)}
onWorkspaceReset={(e) => console.log('workspaceReset', e)}
onWorkspaceEvent={(e) => console.log('workspaceEvent', e)}
onWorkspaceSave={(e) => {
savedProjects.current?.set(e.project!.header!.id, e.project);
console.log(savedProjects.current);
}}
onTutorialEvent={(e) => console.log('tutorialEvent', e)}
{...props}
/>
</>
);
};
export const MakeCodeEditorWithControlsStory: Story = {
name: 'MakeCode Editor with controls',
args: {
version: 'default',
},
render: (args) => {
const { version } = args;
return (
<StoryWrapper>
<MakeCodeEditorWithControls
version={version === 'default' ? undefined : version}
// TODO: make this an argument and perhaps a real prop
queryParams={{ hideMenu: '' }}
/>
</StoryWrapper>
);
},
};
export const MakeCodeEditorControllerAppModeStory: Story = {
name: 'MakeCode Editor with controller=2 mode',
args: {
version: 'default',
},
render: (args) => {
const { version } = args;
return (
<StoryWrapper>
<MakeCodeEditorWithControls
controller={2}
controllerId={controllerId}
version={version === 'default' ? undefined : version}
// App specific events
onDownload={(download) => console.log('download', download)}
onSave={(save) => console.log('save', save)}
onBack={() => console.log('back')}
onBackLongPress={() => console.log('back long')}
/>
</StoryWrapper>
);
},
};