From 282e17642827dc174e9b0860867b2959f781daf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= Date: Fri, 27 Sep 2019 14:37:20 +0200 Subject: [PATCH 1/9] =?UTF-8?q?=F0=9F=94=A8=20Switch=20Project=20to=20use?= =?UTF-8?q?=20useOvermind?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/app/package.json | 1 + .../overmind/namespaces/workspace/actions.ts | 7 +- .../Editor/Workspace/Project/Alias/Alias.tsx | 69 ---------- .../Workspace/Project/Alias/elements.ts | 4 +- .../Editor/Workspace/Project/Alias/index.ts | 1 - .../Editor/Workspace/Project/Alias/index.tsx | 69 ++++++++++ .../Editor/Workspace/Project/Author.tsx | 23 ---- .../Workspace/Project/Author/elements.ts | 11 ++ .../Editor/Workspace/Project/Author/index.tsx | 33 +++++ .../Workspace/Project/Description/elements.ts | 6 + .../Workspace/Project/Description/index.ts | 1 - .../{Description.tsx => index.tsx} | 41 +++--- .../Workspace/Project/Frozen/elements.ts | 7 +- .../Editor/Workspace/Project/Frozen/index.ts | 1 - .../Project/Frozen/{Frozen.tsx => index.tsx} | 24 ++-- .../Project/SandboxConfig/Icon/elements.ts | 65 ---------- .../TemplateConfig/Icon/elements.ts | 65 ++++++++++ .../{ => TemplateConfig}/Icon/index.tsx | 25 ++-- .../SandboxConfig/TemplateConfig/elements.ts | 36 ++++++ .../index.tsx} | 26 ++-- .../Project/SandboxConfig/elements.ts | 26 +--- .../Workspace/Project/SandboxConfig/index.ts | 1 - .../{SandboxConfig.tsx => index.tsx} | 14 +- .../Workspace/Project/Title/elements.ts | 8 +- .../Editor/Workspace/Project/Title/index.ts | 1 - .../Project/Title/{Title.tsx => index.tsx} | 49 +++---- .../Editor/Workspace/Project/elements.ts | 40 +----- .../Sandbox/Editor/Workspace/Project/index.ts | 1 - .../Project/{Project.tsx => index.tsx} | 120 ++++++++++-------- yarn.lock | 7 + 30 files changed, 398 insertions(+), 384 deletions(-) delete mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/Alias.tsx delete mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/index.ts create mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/index.tsx delete mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Author.tsx create mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Author/elements.ts create mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Author/index.tsx delete mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/index.ts rename packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/{Description.tsx => index.tsx} (74%) delete mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Frozen/index.ts rename packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Frozen/{Frozen.tsx => index.tsx} (83%) delete mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/SandboxConfig/Icon/elements.ts create mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/SandboxConfig/TemplateConfig/Icon/elements.ts rename packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/SandboxConfig/{ => TemplateConfig}/Icon/index.tsx (84%) create mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/SandboxConfig/TemplateConfig/elements.ts rename packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/SandboxConfig/{TemplateConfig.tsx => TemplateConfig/index.tsx} (76%) delete mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/SandboxConfig/index.ts rename packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/SandboxConfig/{SandboxConfig.tsx => index.tsx} (85%) delete mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Title/index.ts rename packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Title/{Title.tsx => index.tsx} (72%) delete mode 100644 packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/index.ts rename packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/{Project.tsx => index.tsx} (61%) diff --git a/packages/app/package.json b/packages/app/package.json index d7feb2743a9..c7be8402df0 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -252,6 +252,7 @@ "@types/phoenix": "^1.4.0", "@types/prop-types": "^15.7.0", "@types/react": "^16.8.12", + "@types/react-color": "^3.0.1", "@types/react-dom": "^16.8.3", "@types/react-helmet": "^5.0.11", "@types/react-icons": "2.2.7", diff --git a/packages/app/src/app/overmind/namespaces/workspace/actions.ts b/packages/app/src/app/overmind/namespaces/workspace/actions.ts index 5274c5845b8..25a71452bc0 100755 --- a/packages/app/src/app/overmind/namespaces/workspace/actions.ts +++ b/packages/app/src/app/overmind/namespaces/workspace/actions.ts @@ -188,9 +188,10 @@ export const sandboxDeleted: AsyncAction = async ({ effects.router.redirectToSandboxWizard(); }; -export const sandboxPrivacyChanged: AsyncAction<{ - privacy: 0 | 1 | 2; -}> = async ({ state, effects, actions }, { privacy }) => { +export const sandboxPrivacyChanged: AsyncAction<0 | 1 | 2> = async ( + { actions, effects, state }, + privacy +) => { const oldPrivacy = state.editor.currentSandbox.privacy; const sandbox = await effects.api.updatePrivacy( state.editor.currentSandbox.id, diff --git a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/Alias.tsx b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/Alias.tsx deleted file mode 100644 index 2373513d348..00000000000 --- a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/Alias.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { ESC } from '@codesandbox/common/lib/utils/keycodes'; -import React, { FunctionComponent, useState } from 'react'; - -import { useOvermind } from 'app/overmind'; - -import { WorkspaceInputContainer } from '../../elements'; - -import { EditPen } from '../elements'; - -import { SandboxAlias } from './elements'; - -type Props = { - editable: boolean; -}; -export const Alias: FunctionComponent = ({ editable }) => { - const { - actions: { - workspace: { sandboxInfoUpdated, valueChanged }, - }, - state: { - isPatron, - editor: { currentSandbox }, - workspace: { project }, - }, - } = useOvermind(); - const [editing, setEditing] = useState(false); - - const alias = project.alias || currentSandbox.alias; - - return isPatron ? ( - <> - {editing ? ( - - { - valueChanged({ - field: 'alias', - value: event.target.value, - }); - }} - type="text" - onBlur={() => { - sandboxInfoUpdated(); - setEditing(false); - }} - onKeyUp={event => { - if (event.keyCode === ESC) { - sandboxInfoUpdated(); - setEditing(false); - } - }} - ref={el => { - if (el) { - el.focus(); - } - }} - placeholder="Alias" - /> - - ) : ( - - {alias} - {editable && setEditing(true)} />} - - )} - - ) : null; -}; diff --git a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/elements.ts b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/elements.ts index 5a380f6b4d3..5b7a37b1a44 100644 --- a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/elements.ts +++ b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/elements.ts @@ -3,9 +3,7 @@ import styled, { css } from 'styled-components'; export const SandboxAlias = styled.div` ${({ theme }) => css` margin-top: 0.5rem; - color: ${theme.light - ? css`rgba(0, 0, 0, 0.8)` - : css`rgba(255, 255, 255, 0.8)`}; + color: ${theme.light ? 'rgba(0, 0, 0, 0.8)' : 'rgba(255, 255, 255, 0.8)'}; font-size: 0.875rem; `} `; diff --git a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/index.ts b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/index.ts deleted file mode 100644 index b24935ecbb0..00000000000 --- a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Alias } from './Alias'; diff --git a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/index.tsx b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/index.tsx new file mode 100644 index 00000000000..5b5323e3f64 --- /dev/null +++ b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Alias/index.tsx @@ -0,0 +1,69 @@ +import { ESC } from '@codesandbox/common/lib/utils/keycodes'; +import React, { + ChangeEvent, + FunctionComponent, + KeyboardEvent, + useState, +} from 'react'; + +import { useOvermind } from 'app/overmind'; + +import { WorkspaceInputContainer } from '../../elements'; + +import { EditPen } from '../elements'; + +import { SandboxAlias } from './elements'; + +type Props = { + editable: boolean; +}; +export const Alias: FunctionComponent = ({ editable }) => { + const { + actions: { + workspace: { sandboxInfoUpdated, valueChanged }, + }, + state: { + editor: { currentSandbox }, + workspace: { project }, + }, + } = useOvermind(); + const [editing, setEditing] = useState(false); + + const alias = project.alias || currentSandbox.alias; + + return editing ? ( + + { + sandboxInfoUpdated(); + + setEditing(false); + }} + onChange={({ target: { value } }: ChangeEvent) => { + valueChanged({ field: 'alias', value }); + }} + onKeyUp={({ keyCode }: KeyboardEvent) => { + if (keyCode === ESC) { + sandboxInfoUpdated(); + + setEditing(false); + } + }} + placeholder="Alias" + type="text" + value={alias} + ref={el => { + if (el) { + el.focus(); + } + }} + /> + + ) : ( + + {alias} + + {editable && setEditing(true)} />} + + ); +}; diff --git a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Author.tsx b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Author.tsx deleted file mode 100644 index 4afdf51e5cb..00000000000 --- a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Author.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { UserWithAvatar } from '@codesandbox/common/lib/components/UserWithAvatar'; -import { User } from '@codesandbox/common/lib/types'; -import { profileUrl } from '@codesandbox/common/lib/utils/url-generator'; -import React, { FunctionComponent } from 'react'; - -import { Item, UserLink } from './elements'; - -type Props = { - author: User; -}; -export const Author: FunctionComponent = ({ - author: { username, avatarUrl, subscriptionSince }, -}) => ( - - - - - -); diff --git a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Author/elements.ts b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Author/elements.ts new file mode 100644 index 00000000000..e0fde610980 --- /dev/null +++ b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Author/elements.ts @@ -0,0 +1,11 @@ +import { Link } from 'react-router-dom'; +import styled, { css } from 'styled-components'; + +export const UserLink = styled(Link)` + ${({ theme }) => css` + display: block; + color: ${theme[`editor.foreground`] || css`rgba(255, 255, 255, 0.8)`}; + font-size: 0.875rem; + text-decoration: none; + `} +`; diff --git a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Author/index.tsx b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Author/index.tsx new file mode 100644 index 00000000000..7caefc23ad2 --- /dev/null +++ b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Author/index.tsx @@ -0,0 +1,33 @@ +import { UserWithAvatar } from '@codesandbox/common/lib/components/UserWithAvatar'; +import { profileUrl } from '@codesandbox/common/lib/utils/url-generator'; +import React, { FunctionComponent } from 'react'; + +import { useOvermind } from 'app/overmind'; + +import { Item } from '../elements'; + +import { UserLink } from './elements'; + +export const Author: FunctionComponent = () => { + const { + state: { + editor: { + currentSandbox: { + author: { username, avatarUrl, subscriptionSince }, + }, + }, + }, + } = useOvermind(); + + return ( + + + + + + ); +}; diff --git a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/elements.ts b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/elements.ts index a4e7c357957..2b4a9f270e8 100644 --- a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/elements.ts +++ b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/elements.ts @@ -1,5 +1,7 @@ import styled, { css } from 'styled-components'; +import { WorkspaceInputContainer as WorkspaceInputContainerBase } from '../../elements'; + export const SandboxDescription = styled.div<{ empty: boolean }>` ${({ empty, theme }) => css` margin-top: 0.5rem; @@ -10,3 +12,7 @@ export const SandboxDescription = styled.div<{ empty: boolean }>` font-style: ${empty ? 'normal' : 'italic'}; `} `; + +export const WorkspaceInputContainer = styled(WorkspaceInputContainerBase)` + margin: 0 -0.25rem; +`; diff --git a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/index.ts b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/index.ts deleted file mode 100644 index 6899644e645..00000000000 --- a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Description } from './Description'; diff --git a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/Description.tsx b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/index.tsx similarity index 74% rename from packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/Description.tsx rename to packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/index.tsx index c8123174f39..9c6215906b4 100644 --- a/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/Description.tsx +++ b/packages/app/src/app/pages/Sandbox/Editor/Workspace/Project/Description/index.tsx @@ -1,13 +1,16 @@ import { ENTER } from '@codesandbox/common/lib/utils/keycodes'; -import React, { FunctionComponent, useState } from 'react'; +import React, { + ChangeEvent, + FunctionComponent, + KeyboardEvent, + useState, +} from 'react'; import { useOvermind } from 'app/overmind'; -import { WorkspaceInputContainer } from '../../elements'; - import { EditPen } from '../elements'; -import { SandboxDescription } from './elements'; +import { SandboxDescription, WorkspaceInputContainer } from './elements'; type Props = { editable: boolean; @@ -25,37 +28,37 @@ export const Description: FunctionComponent = ({ editable }) => { } = useOvermind(); const [editing, setEditing] = useState(false); - const onKeyDown = (event: React.KeyboardEvent) => { + const onKeyDown = (event: KeyboardEvent) => { if (event.keyCode === ENTER && !event.shiftKey) { event.preventDefault(); event.stopPropagation(); + sandboxInfoUpdated(); + setEditing(false); } }; return editing ? ( - +