* initial shit Signed-off-by: Jess Frazelle <github@jessfraz.com> more stuff Signed-off-by: Jess Frazelle <github@jessfraz.com> more stuff Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> add lsp here Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> less than a million restarts but still 3 Signed-off-by: Jess Frazelle <github@jessfraz.com> only start once Signed-off-by: Jess Frazelle <github@jessfraz.com> some better stuff Signed-off-by: Jess Frazelle <github@jessfraz.com> initial working Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> working but jank Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> cleanup Signed-off-by: Jess Frazelle <github@jessfraz.com> cleaner Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> operator types Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> bump version Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> udpates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> hover working Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> diagnosticcs Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> more capabilities Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> fix clippy Signed-off-by: Jess Frazelle <github@jessfraz.com> huge refactor Signed-off-by: Jess Frazelle <github@jessfraz.com> cleanup Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> remove debugging Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> u[dates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> version Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> u[dates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fix ups Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> bump Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> fix Signed-off-by: Jess Frazelle <github@jessfraz.com> fix tests Signed-off-by: Jess Frazelle <github@jessfraz.com> more passing tests Signed-off-by: Jess Frazelle <github@jessfraz.com> more fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> more fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fmt Signed-off-by: Jess Frazelle <github@jessfraz.com> start of parser Signed-off-by: Jess Frazelle <github@jessfraz.com> syntax highlighting is back Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> remove prints Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fix clippy Signed-off-by: Jess Frazelle <github@jessfraz.com> refactor recast Signed-off-by: Jess Frazelle <github@jessfraz.com> fix cljippuy Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates; Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fix whitespace tests Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> Revert "updates" This reverts commit c2c6dceb441ab8d98a590cb27bb462738f7c6df4. fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> bump Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> updaetgs Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> remove printlns Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> whitespace Signed-off-by: Jess Frazelle <github@jessfraz.com> udpates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> up[dates Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanups Signed-off-by: Jess Frazelle <github@jessfraz.com> * some style changes Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * remove things Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updares Signed-off-by: Jess Frazelle <github@jessfraz.com> * syntax highlighting fix Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * remove console log --------- Signed-off-by: Jess Frazelle <github@jessfraz.com> Co-authored-by: Kurt Hutten <k.hutten@protonmail.ch>
192 lines
5.9 KiB
TypeScript
192 lines
5.9 KiB
TypeScript
import { v4 as uuidv4 } from 'uuid'
|
|
import { useStore } from '../useStore'
|
|
import { faFileExport, faXmark } from '@fortawesome/free-solid-svg-icons'
|
|
import { ActionButton } from './ActionButton'
|
|
import Modal from 'react-modal'
|
|
import React from 'react'
|
|
import { useFormik } from 'formik'
|
|
import { Models } from '@kittycad/lib'
|
|
|
|
type OutputFormat = Models['OutputFormat_type']
|
|
|
|
interface ExportButtonProps extends React.PropsWithChildren {
|
|
className?: {
|
|
button?: string
|
|
// If we wanted more classname configuration of sub-elements,
|
|
// put them here
|
|
}
|
|
}
|
|
|
|
export const ExportButton = ({ children, className }: ExportButtonProps) => {
|
|
const { engineCommandManager } = useStore((s) => ({
|
|
engineCommandManager: s.engineCommandManager,
|
|
}))
|
|
|
|
const [modalIsOpen, setIsOpen] = React.useState(false)
|
|
|
|
const defaultType = 'gltf'
|
|
const [type, setType] = React.useState(defaultType)
|
|
|
|
function openModal() {
|
|
setIsOpen(true)
|
|
}
|
|
|
|
function closeModal() {
|
|
setIsOpen(false)
|
|
}
|
|
|
|
// Default to gltf and embedded.
|
|
const initialValues: OutputFormat = {
|
|
type: defaultType,
|
|
storage: 'embedded',
|
|
presentation: 'pretty',
|
|
}
|
|
const formik = useFormik({
|
|
initialValues,
|
|
onSubmit: (values: OutputFormat) => {
|
|
// Set the default coords.
|
|
if (
|
|
values.type === 'obj' ||
|
|
values.type === 'ply' ||
|
|
values.type === 'step' ||
|
|
values.type === 'stl'
|
|
) {
|
|
// Set the default coords.
|
|
// In the future we can make this configurable.
|
|
// But for now, its probably best to keep it consistent with the
|
|
// UI.
|
|
values.coords = {
|
|
forward: {
|
|
axis: 'y',
|
|
direction: 'negative',
|
|
},
|
|
up: {
|
|
axis: 'z',
|
|
direction: 'positive',
|
|
},
|
|
}
|
|
}
|
|
engineCommandManager?.sendSceneCommand({
|
|
type: 'modeling_cmd_req',
|
|
cmd: {
|
|
type: 'export',
|
|
// By default let's leave this blank to export the whole scene.
|
|
// In the future we might want to let the user choose which entities
|
|
// in the scene to export. In that case, you'd pass the IDs thru here.
|
|
entity_ids: [],
|
|
format: values,
|
|
},
|
|
cmd_id: uuidv4(),
|
|
})
|
|
|
|
closeModal()
|
|
},
|
|
})
|
|
|
|
return (
|
|
<>
|
|
<ActionButton
|
|
onClick={openModal}
|
|
Element="button"
|
|
icon={{ icon: faFileExport }}
|
|
className={className?.button}
|
|
>
|
|
{children || 'Export'}
|
|
</ActionButton>
|
|
<Modal
|
|
isOpen={modalIsOpen}
|
|
onRequestClose={closeModal}
|
|
contentLabel="Export"
|
|
overlayClassName="z-40 fixed inset-0 grid place-items-center"
|
|
className="rounded p-4 bg-chalkboard-10 dark:bg-chalkboard-100 border max-w-xl w-full"
|
|
>
|
|
<h1 className="text-2xl font-bold">Export your design</h1>
|
|
<form onSubmit={formik.handleSubmit}>
|
|
<div className="flex flex-wrap justify-between gap-8 items-center w-full my-8">
|
|
<label htmlFor="type" className="flex-1">
|
|
<p className="mb-2">Type</p>
|
|
<select
|
|
id="type"
|
|
name="type"
|
|
onChange={(e) => {
|
|
setType(e.target.value)
|
|
formik.handleChange(e)
|
|
}}
|
|
className="bg-chalkboard-20 dark:bg-chalkboard-90 w-full"
|
|
>
|
|
<option value="gltf">gltf</option>
|
|
<option value="obj">obj</option>
|
|
<option value="ply">ply</option>
|
|
<option value="step">step</option>
|
|
<option value="stl">stl</option>
|
|
</select>
|
|
</label>
|
|
{(type === 'gltf' || type === 'ply' || type === 'stl') && (
|
|
<label htmlFor="storage" className="flex-1">
|
|
<p className="mb-2">Storage</p>
|
|
<select
|
|
id="storage"
|
|
name="storage"
|
|
onChange={formik.handleChange}
|
|
value={
|
|
'storage' in formik.values ? formik.values.storage : ''
|
|
}
|
|
className="bg-chalkboard-20 dark:bg-chalkboard-90 w-full"
|
|
>
|
|
{type === 'gltf' && (
|
|
<>
|
|
<option value="embedded">embedded</option>
|
|
<option value="binary">binary</option>
|
|
<option value="standard">standard</option>
|
|
</>
|
|
)}
|
|
{type === 'ply' && (
|
|
<>
|
|
<option value="ascii">ascii</option>
|
|
<option value="binary">binary</option>
|
|
</>
|
|
)}
|
|
{type === 'stl' && (
|
|
<>
|
|
<option value="ascii">ascii</option>
|
|
<option value="binary_little_endian">
|
|
binary_little_endian
|
|
</option>
|
|
<option value="binary_big_endian">
|
|
binary_big_endian
|
|
</option>
|
|
</>
|
|
)}
|
|
</select>
|
|
</label>
|
|
)}
|
|
</div>
|
|
|
|
<div className="flex justify-between mt-6">
|
|
<ActionButton
|
|
Element="button"
|
|
onClick={closeModal}
|
|
icon={{
|
|
icon: faXmark,
|
|
bgClassName: 'bg-destroy-80',
|
|
iconClassName:
|
|
'text-destroy-20 group-hover:text-destroy-10 hover:text-destroy-10',
|
|
}}
|
|
className="hover:border-destroy-40"
|
|
>
|
|
Close
|
|
</ActionButton>
|
|
<ActionButton
|
|
Element="button"
|
|
type="submit"
|
|
icon={{ icon: faFileExport }}
|
|
>
|
|
Export
|
|
</ActionButton>
|
|
</div>
|
|
</form>
|
|
</Modal>
|
|
</>
|
|
)
|
|
}
|