IDE redesign, initial implementation #362

Merged
Irev-Dev merged 17 commits from kurt/update-ide-panel-toolbar-360 into main 2021-06-15 10:05:03 +02:00
8 changed files with 70 additions and 54 deletions
Showing only changes of commit b65c4530b2 - Show all commits

View File

@@ -1,6 +1,6 @@
import { Menu } from '@headlessui/react' import { Menu } from '@headlessui/react'
import { useIdeContext } from 'src/helpers/hooks/useIdeContext' import { useIdeContext, ideTypeNameMap } from 'src/helpers/hooks/useIdeContext'
import Svg from 'src/components/Svg/Svg' import Svg from 'src/components/Svg/Svg'
import { useRender } from 'src/components/IdeWrapper/useRender' import { useRender } from 'src/components/IdeWrapper/useRender'
import { makeStlDownloadHandler, PullTitleFromFirstLine } from './helpers' import { makeStlDownloadHandler, PullTitleFromFirstLine } from './helpers'
@@ -14,30 +14,42 @@ const EditorMenu = () => {
fileName: PullTitleFromFirstLine(state.code || ''), fileName: PullTitleFromFirstLine(state.code || ''),
thunkDispatch, thunkDispatch,
}) })
const cadName = ideTypeNameMap[state.ideType] || ''
const isOpenScad = state.ideType === 'openScad'
const isCadQuery = state.ideType === 'cadQuery'
return ( return (
<div className="bg-gray-500 flex items-center h-9 w-full cursor-grab"> <div className="flex justify-between bg-gray-500 text-gray-100">
<div className=" text-gray-500 bg-gray-300 cursor-grab px-2 h-full flex items-center"> <div className="flex items-center h-9 w-full cursor-grab">
<Svg name="drag-grid" className="w-4 p-px" /> <div className=" text-gray-500 bg-gray-300 cursor-grab px-2 h-full flex items-center">
<Svg name="drag-grid" className="w-4 p-px" />
</div>
<div className="flex gap-6 px-5">
<FileDropdown
handleRender={handleRender}
handleStlDownload={handleStlDownload}
/>
<button className="cursor-not-allowed" disabled>
Edit
</button>
<button className="cursor-not-allowed" disabled>
View
</button>
</div>
<button
className="text-gray-300 h-full cursor-not-allowed"
aria-label="editor settings"
disabled
>
<Svg name="gear" className="w-6 p-px" />
</button>
</div> </div>
<button <div className="flex items-center cursor-default">
franknoirot commented 2021-06-14 15:23:05 +02:00 (Migrated from github.com)
Review

With the additional background I added in the latest Figma designs we may want to start aliasing the CAD packages to class names in the next round so several elements can inherit styles.

With the additional background I added in the latest Figma designs we may want to start aliasing the CAD packages to class names in the next round so several elements can inherit styles.
Irev-Dev commented 2021-06-15 10:02:44 +02:00 (Migrated from github.com)
Review

Oh right, yeah that's a good idea.

Oh right, yeah that's a good idea.
className="text-gray-300 px-3 h-full cursor-not-allowed" <div
aria-label="editor settings" className={`${isOpenScad && 'bg-yellow-200'} ${
disabled isCadQuery && 'bg-blue-800'
> } w-5 h-5 rounded-full`}
<Svg name="gear" className="w-7 p-px" />
</button>
<div className="w-px h-full bg-gray-300" />
<div className="flex gap-6 px-6">
<FileDropdown
handleRender={handleRender}
handleStlDownload={handleStlDownload}
/> />
<button className="text-gray-100 cursor-not-allowed" disabled> <div className="px-2">{cadName}</div>
Edit
</button>
<button className="text-gray-100 cursor-not-allowed" disabled>
View
</button>
</div> </div>
</div> </div>
) )

View File

@@ -1,16 +1,11 @@
import { useState } from 'react' import { useState } from 'react'
import { useIdeContext } from 'src/helpers/hooks/useIdeContext' import { useIdeContext, ideTypeNameMap } from 'src/helpers/hooks/useIdeContext'
import OutBound from 'src/components/OutBound/OutBound' import OutBound from 'src/components/OutBound/OutBound'
import { prepareEncodedUrl, makeExternalUrl } from './helpers' import { prepareEncodedUrl, makeExternalUrl } from './helpers'
import { copyTextToClipboard } from 'src/helpers/clipboard' import { copyTextToClipboard } from 'src/helpers/clipboard'
import { useRender } from 'src/components/IdeWrapper/useRender' import { useRender } from 'src/components/IdeWrapper/useRender'
import { toast } from '@redwoodjs/web/toast' import { toast } from '@redwoodjs/web/toast'
const ideTypeNameMap = {
openScad: 'OpenSCAD',
cadQuery: 'CadQuery',
}
const ExternalScript = () => { const ExternalScript = () => {
Irev-Dev commented 2021-06-14 02:26:20 +02:00 (Migrated from github.com)
Review

image
and

image

![image](https://user-images.githubusercontent.com/29681384/121826427-e7eea880-ccfa-11eb-9e5b-c82fd9605d87.png) and ![image](https://user-images.githubusercontent.com/29681384/121826437-f2a93d80-ccfa-11eb-9b3d-b5fa0e0968d3.png)
const { state, thunkDispatch } = useIdeContext() const { state, thunkDispatch } = useIdeContext()
const handleRender = useRender() const handleRender = useRender()

View File

@@ -1,7 +1,6 @@
import { useEffect } from 'react' import { useEffect } from 'react'
import { useIdeContext } from 'src/helpers/hooks/useIdeContext' import { useIdeContext } from 'src/helpers/hooks/useIdeContext'
import { matchEditorVsDarkTheme } from 'src/components/IdeEditor' import { matchEditorVsDarkTheme } from 'src/components/IdeEditor'
import PanelToolbar from 'src/components/PanelToolbar'
const IdeConsole = () => { const IdeConsole = () => {
const { state } = useIdeContext() const { state } = useIdeContext()
@@ -14,10 +13,9 @@ const IdeConsole = () => {
return ( return (
<div <div
className="p-2 px-8 pt-14 min-h-full relative" className="p-2 px-8 pt-14 min-h-full"
style={matchEditorVsDarkTheme.Bg} style={matchEditorVsDarkTheme.Bg}
> >
<PanelToolbar panelName="console" />
<div> <div>
{state.consoleMessages?.map(({ type, message, time }, index) => ( {state.consoleMessages?.map(({ type, message, time }, index) => (
<pre <pre

View File

@@ -7,6 +7,7 @@ import IdeViewer from 'src/components/IdeViewer'
import IdeConsole from 'src/components/IdeConsole' import IdeConsole from 'src/components/IdeConsole'
import 'react-mosaic-component/react-mosaic-component.css' import 'react-mosaic-component/react-mosaic-component.css'
import EditorMenu from 'src/components/EditorMenu/EditorMenu' import EditorMenu from 'src/components/EditorMenu/EditorMenu'
import PanelToolbar from 'src/components/PanelToolbar'
const ELEMENT_MAP = { const ELEMENT_MAP = {
Editor: <IdeEditor />, Editor: <IdeEditor />,
@@ -14,6 +15,24 @@ const ELEMENT_MAP = {
Console: <IdeConsole />, Console: <IdeConsole />,
} }
const TOOLBAR_MAP = {
Editor: (
<div className="w-full">
<EditorMenu />
</div>
),
Viewer: (
<div>
<PanelToolbar panelName="Viewer" />
</div>
),
Console: (
<div>
<PanelToolbar panelName="Console" />
</div>
),
}
const IdeContainer = () => { const IdeContainer = () => {
const { state, thunkDispatch } = useIdeContext() const { state, thunkDispatch } = useIdeContext()
const viewerDOM = useRef(null) const viewerDOM = useRef(null)
@@ -65,15 +84,7 @@ const IdeContainer = () => {
return ( return (
<MosaicWindow <MosaicWindow
path={path} path={path}
renderToolbar={() => renderToolbar={() => TOOLBAR_MAP[id]}
id === 'Editor' ? (
<div className="w-full">
<EditorMenu />
</div>
) : (
<div /> // needs an empty element, otherwise it adds it's own toolbar
)
}
className={`${id.toLowerCase()} ${id.toLowerCase()}-tile`} className={`${id.toLowerCase()} ${id.toLowerCase()}-tile`}
> >
{id === 'Viewer' ? ( {id === 'Viewer' ? (

View File

@@ -10,7 +10,6 @@ import {
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls' import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
import { Vector3 } from 'three' import { Vector3 } from 'three'
import { requestRender } from 'src/helpers/hooks/useIdeState' import { requestRender } from 'src/helpers/hooks/useIdeState'
import PanelToolbar from 'src/components/PanelToolbar'
extend({ OrbitControls }) extend({ OrbitControls })
@@ -228,7 +227,6 @@ const IdeViewer = () => {
<div className="h-16 w-16 bg-pink-600 rounded-full animate-ping"></div> <div className="h-16 w-16 bg-pink-600 rounded-full animate-ping"></div>
</div> </div>
)} )}
<PanelToolbar panelName="3d-view" />
</div> </div>
) )
} }

View File

@@ -35,13 +35,10 @@ const IdeToolbarNew = ({ cadPackage }) => {
. .
</div> </div>
<button <button
className="flex" className="flex mr-3"
onClick={() => setShouldShowConstructionMessage(false)} onClick={() => setShouldShowConstructionMessage(false)}
> >
<Svg <Svg className="h-4 w-6 text-gray-500 items-center" name="x" />
className="h-4 w-6 text-gray-500 mr-3 items-center"
name="x"
/>
</button> </button>
</div> </div>
)} )}

View File

@@ -5,19 +5,19 @@ import Svg from 'src/components/Svg/Svg'
const PanelToolbar = ({ panelName }: { panelName: string }) => { const PanelToolbar = ({ panelName }: { panelName: string }) => {
const { mosaicWindowActions } = useContext(MosaicWindowContext) const { mosaicWindowActions } = useContext(MosaicWindowContext)
return ( return (
<div className="absolute top-0 left-0 flex items-center h-9"> <div className="absolute top-0 right-0 flex items-center h-9">
{mosaicWindowActions.connectDragSource(
<div className=" text-gray-500 bg-gray-300 cursor-grab px-2 h-full flex items-center">
<Svg name="drag-grid" className="w-4 p-px" />
</div>
)}
<button <button
className="bg-gray-500 text-gray-300 px-3 rounded-br-lg h-full cursor-not-allowed" className="bg-gray-500 text-gray-300 px-3 rounded-bl-lg h-full cursor-not-allowed"
aria-label={`${panelName} settings`} aria-label={`${panelName} settings`}
disabled disabled
> >
<Svg name="gear" className="w-7 p-px" /> <Svg name="gear" className="w-7 p-px" />
</button> </button>
{mosaicWindowActions.connectDragSource(
franknoirot commented 2021-06-15 00:30:51 +02:00 (Migrated from github.com)
Review

Also rad!

Also rad!
<div className=" text-gray-500 bg-gray-300 cursor-grab px-2 h-full flex items-center">
<Svg name="drag-grid" className="w-4 p-px" />
</div>
)}
</div> </div>
) )
} }

View File

@@ -4,3 +4,8 @@ import { useContext } from 'react'
export function useIdeContext() { export function useIdeContext() {
return useContext(IdeContext) return useContext(IdeContext)
} }
export const ideTypeNameMap = {
openScad: 'OpenSCAD',
cadQuery: 'CadQuery',
}