-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPythonEditorFrame.stories.tsx
More file actions
123 lines (115 loc) · 3.18 KB
/
Copy pathPythonEditorFrame.stories.tsx
File metadata and controls
123 lines (115 loc) · 3.18 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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import { Meta, StoryObj } from '@storybook/react';
import { useCallback, useRef } from 'react';
import {
PythonEditorFrame,
PythonEditorFrameDriver,
PythonEditorFrameProps,
PythonProject,
} from '../../react/index.js';
import PythonEditorToolbar from '../PythonEditorToolbar.js';
import StoryWrapper from '../StoryWrapper.js';
import { controllerId } from '../config.js';
import { defaultPythonProject, multiFilePythonProject } from '../fixtures.js';
const meta: Meta<typeof PythonEditorFrame> = {
component: PythonEditorFrame,
argTypes: {
version: {
options: ['2.0.0', '2.2.2', '3', 'beta'],
defaultValue: '2.0.0',
name: 'version',
control: { type: 'radio' },
},
},
};
export default meta;
type Story = StoryObj<typeof PythonEditorFrame>;
interface PythonEditorProps
extends Omit<PythonEditorFrameProps, 'initialProjects'> {
startingProject?: PythonProject;
}
const PythonEditor = ({ startingProject, ...props }: PythonEditorProps) => {
const savedProjects = useRef<Map<string, PythonProject>>(new Map());
const ref = useRef<PythonEditorFrameDriver>(null);
const initialProjects = useCallback(async () => {
return [startingProject ?? defaultPythonProject];
}, [startingProject]);
return (
<>
<PythonEditorToolbar driver={ref} />
<PythonEditorFrame
ref={ref}
controllerId={controllerId}
initialProjects={initialProjects}
onWorkspaceSave={(e) => {
savedProjects.current.set(controllerId, e.project);
console.log(savedProjects);
}}
{...props}
/>
</>
);
};
export const PythonEditorStory: Story = {
name: 'Python Editor versions',
args: {
version: '3',
},
render: (args) => {
const { version } = args;
return (
<StoryWrapper>
<PythonEditor
controllerId={controllerId}
style={{ flexGrow: 1 }}
version={version}
onWorkspaceLoaded={(e) => console.log('workspaceLoaded', e)}
onWorkspaceSync={(e) => console.log('workspaceSync', e)}
onWorkspaceSave={(e) => {
console.log('onWorkspaceSave', e);
}}
/>
</StoryWrapper>
);
},
};
// Broken out separately from the above to test the multiFilePythonProject.
// This should also work with the defaultPythonProject.
export const MultiFileProject: Story = {
name: 'Python Editor multi-file project',
render: () => (
<StoryWrapper>
<PythonEditor
controllerId={controllerId}
style={{ flexGrow: 1 }}
startingProject={multiFilePythonProject}
version="3"
/>
</StoryWrapper>
),
};
export const V3French: Story = {
name: 'Python Editor V3 lang via query string',
render: () => (
<StoryWrapper>
<PythonEditor
controllerId={controllerId}
style={{ flexGrow: 1 }}
version="3"
lang="fr"
/>
</StoryWrapper>
),
};
export const V3NoLangFlag: Story = {
name: 'Python Editor V3 noLang flag',
render: () => (
<StoryWrapper>
<PythonEditor
controllerId={controllerId}
style={{ flexGrow: 1 }}
version="3"
queryParams={{ flag: 'noLang' }}
/>
</StoryWrapper>
),
};