Encode code into url to make sharing snippets easy

resolves #253
This commit is contained in:
Kurt Hutten
2021-03-16 20:26:58 +11:00
parent 03ce3530c1
commit 01bc76e09a
3 changed files with 73 additions and 5 deletions

View File

@@ -1,9 +1,10 @@
import IdeContainer from 'src/components/IdeContainer'
import { createContext } from 'react'
import IdeContainer from 'src/components/IdeContainer'
import { isBrowser } from '@redwoodjs/prerender/browserUtils'
import { useIdeState } from 'src/helpers/hooks/useIdeState'
import { copyTextToClipboard } from 'src/helpers/clipboard'
export const IdeContext = createContext()
const IdeToolbarNew = () => {
const [state, dispatch] = useIdeState()
function setIdeType(ide) {
@@ -12,12 +13,19 @@ const IdeToolbarNew = () => {
function handleRender() {
dispatch({ type: 'render', payload: { code: state.code } })
}
function handleMakeLink() {
if (isBrowser) {
const scriptBase64 = btoa(state.code)
window.location.hash = `encoded_script=${scriptBase64}`
copyTextToClipboard(window.location.href)
}
}
return (
<IdeContext.Provider value={{ state, dispatch }}>
<div className="p-8 border-2">
<nav className="flex">
<button
{/* <button
onClick={() => setIdeType('openCascade')}
className="p-2 br-2 border-2 m-2 bg-blue-200"
>
@@ -28,10 +36,13 @@ const IdeToolbarNew = () => {
className="p-2 br-2 border-2 m-2 bg-indigo-200"
>
Switch to OpenSCAD
</button>
</button> */}
<button onClick={handleRender} className="p-2 br-2 border-2 m-2">
Render
</button>
<button onClick={handleMakeLink} className="p-2 br-2 border-2 m-2">
Copy link
</button>
</nav>
<IdeContainer />
</div>