Skip to content

Commit b86ffb2

Browse files
MichaelDeBoeySaraVieira
authored andcommitted
🔨 Switch SandboxConfig to use useOvermind (#2562)
* 🔨 Switch SandboxConfig to use useOvermind * Fix types
1 parent af98d29 commit b86ffb2

File tree

4 files changed

+77
-71
lines changed

4 files changed

+77
-71
lines changed

‎packages/app/src/app/overmind/actions.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export const connectionChanged: Action<boolean> = ({ state }, connected) => {
6464

6565
type ModalName =
6666
| 'deleteDeployment'
67+
| 'deleteSandbox'
6768
| 'feedback'
6869
| 'forkServerModal'
6970
| 'liveSessionEnded'

‎packages/app/src/app/overmind/effects/api/index.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ export default {
451451
},
452452
createTemplate(
453453
sandboxId: string,
454-
template: CustomTemplate
454+
template: { color: string; description: string; title: string }
455455
): Promise<CustomTemplate> {
456456
return api
457457
.post<{ template: CustomTemplate }>(`/sandboxes/${sandboxId}/templates`, {

‎packages/app/src/app/overmind/namespaces/workspace/actions.ts‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,10 @@ export const editTemplate: AsyncAction<CustomTemplate> = async (
257257
};
258258

259259
export const addedTemplate: AsyncAction<{
260-
template: CustomTemplate;
261-
}> = async ({ state, actions, effects }, { template }) => {
260+
color: string;
261+
description: string;
262+
title: string;
263+
}> = async ({ state, actions, effects }, template) => {
262264
effects.analytics.track('Template - Created', { source: 'editor' });
263265

264266
const sandboxId = state.editor.currentId;
Lines changed: 71 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,82 @@
1-
import React from 'react';
2-
import { inject, hooksObserver } from 'app/componentConnectors';
1+
import getTemplateDefinition from '@codesandbox/common/lib/templates';
2+
import React, { FunctionComponent, MouseEvent } from 'react';
33
import TrashIcon from 'react-icons/lib/fa/trash';
4-
import * as templates from '@codesandbox/common/lib/templates';
5-
import { TemplateConfig } from './TemplateConfig';
4+
5+
import { useOvermind } from 'app/overmind';
6+
67
import { Group } from '../elements';
8+
79
import { Container, CenteredText, Action } from './elements';
10+
import { TemplateConfig } from './TemplateConfig';
811

9-
export const SandboxConfig = inject('store', 'signals')(
10-
hooksObserver(
11-
({
12-
store: {
13-
user,
14-
editor: {
15-
currentSandbox: { template, customTemplate },
16-
},
17-
workspace: {
18-
project: { title, description },
19-
},
12+
export const SandboxConfig: FunctionComponent = () => {
13+
const {
14+
actions: {
15+
modalOpened,
16+
workspace: { addedTemplate, deleteTemplate },
17+
},
18+
state: {
19+
user,
20+
editor: {
21+
currentSandbox: { customTemplate, template },
2022
},
21-
signals: {
22-
modalOpened,
23-
workspace: { addedTemplate, deleteTemplate },
23+
workspace: {
24+
project: { description, title },
2425
},
25-
}) => {
26-
const onCreateTemplate = (e: React.MouseEvent<HTMLButtonElement>) => {
27-
e.preventDefault();
26+
},
27+
} = useOvermind();
2828

29-
if (!user) {
30-
modalOpened({ modal: 'signInForTemplates' });
31-
}
29+
const onCreateTemplate = ({
30+
preventDefault,
31+
}: MouseEvent<HTMLButtonElement>) => {
32+
preventDefault();
3233

33-
addedTemplate({
34-
template: {
35-
color:
36-
(customTemplate && customTemplate.color) ||
37-
templates.default(template).color(),
38-
title,
39-
description,
40-
},
41-
});
42-
};
34+
if (!user) {
35+
modalOpened({ modal: 'signInForTemplates' });
36+
}
4337

44-
const onDelete = (e: React.MouseEvent<HTMLButtonElement>) => {
45-
e.preventDefault();
46-
if (customTemplate) {
47-
deleteTemplate();
48-
} else {
49-
modalOpened({ modal: 'deleteSandbox' });
50-
}
51-
};
38+
addedTemplate({
39+
color:
40+
(customTemplate && customTemplate.color) ||
41+
getTemplateDefinition(template).color(),
42+
description,
43+
title,
44+
});
45+
};
5246

53-
return (
54-
<>
55-
{customTemplate && <TemplateConfig />}
56-
<Group>
57-
<Container>
58-
{!customTemplate && (
59-
<Action onClick={onCreateTemplate}>
60-
<CenteredText>
61-
<span>Create Template</span>
62-
</CenteredText>
63-
</Action>
64-
)}
65-
<Action danger onClick={onDelete}>
66-
<CenteredText>
67-
<TrashIcon />
68-
<span>{`Delete ${
69-
customTemplate ? `Template` : `Sandbox`
70-
}`}</span>
71-
</CenteredText>
72-
</Action>
73-
</Container>
74-
</Group>
75-
</>
76-
);
47+
const onDelete = ({ preventDefault }: MouseEvent<HTMLButtonElement>) => {
48+
preventDefault();
49+
50+
if (customTemplate) {
51+
deleteTemplate();
52+
} else {
53+
modalOpened({ modal: 'deleteSandbox' });
7754
}
78-
)
79-
);
55+
};
56+
57+
return (
58+
<>
59+
{customTemplate && <TemplateConfig />}
60+
61+
<Group>
62+
<Container>
63+
{!customTemplate && (
64+
<Action onClick={onCreateTemplate}>
65+
<CenteredText>
66+
<span>Create Template</span>
67+
</CenteredText>
68+
</Action>
69+
)}
70+
71+
<Action danger onClick={onDelete}>
72+
<CenteredText>
73+
<TrashIcon />
74+
75+
<span>{`Delete ${customTemplate ? `Template` : `Sandbox`}`}</span>
76+
</CenteredText>
77+
</Action>
78+
</Container>
79+
</Group>
80+
</>
81+
);
82+
};

0 commit comments

Comments
 (0)