Files
diff-viewer-extension/src/components/CadDiff.tsx
Pierre Jacquier fd44076a18 Minimal working version (#1)
* cra boilerplate

* Dummy chrome extension

* eslint and working url popup

* content script and dummy messaging

* replace .obj diffs with dummy test

* comment and in-order multiple type support

* get pull api data from url

* README title and desc

* api/elements match with filename check

* github token signin signout

* manifest v3, service request for CORS

* working kittycad api in service worker

* First real background message

* Clean up,  better types

* Fix settings

* multiservice settings

* Tweaks

* WIP: download file

* Working downloads and kittycad conversion

* Inject react, add three dependencies

* Working stl canvas

* primer for github-like style

* Loading before model

* diff colors

* colorMode auto

* Popup clean up

* clean up

* Working loading

* Logos

* Add GitHub CI

* Working test

* yarn test in ci

* Little tweak

* Update README

* component tests

* Better test

* Clean up

* UserCard test

* working caddiff test

* Note

* Rename App to Settings

* storage test

* Clean up

* Clean up content script

* further content cleanup

* Fix test

* Little tweaks to modelview

* More tests and testing

* Regex fix

* LFS file download test

* prettier config from kittycad/website

* Little tweaks

* comment

* log level

* Tweaks

* README update

* more prettier

* comment

* Irrelevant comment

* No .vscode and readme update

* Remove .vscode

* Package.json update after vscode removal
2023-03-02 04:35:07 -05:00

53 lines
1.8 KiB
TypeScript

import React, { useEffect, useState } from 'react'
import '@react-three/fiber'
import { OrbitControls } from '@react-three/drei'
import { STLLoader } from 'three/examples/jsm/loaders/STLLoader'
import { BufferGeometry } from 'three'
import { Canvas } from '@react-three/fiber'
import { Box, ThemeProvider, useTheme } from '@primer/react'
import { FileDiff } from '../chrome/types'
function ModelView({ file }: { file: string }): React.ReactElement {
const { theme } = useTheme()
const [geometry, setGeometry] = useState<BufferGeometry>()
useEffect(() => {
const loader = new STLLoader()
const geometry = loader.parse(atob(file))
console.log(`Model ${geometry.id} loaded`)
setGeometry(geometry)
}, [file])
return (
<Canvas>
<ambientLight intensity={0.7} />
<pointLight position={[10, 10, 10]} />
<mesh geometry={geometry}>
<meshStandardMaterial color={theme?.colors.fg.default} />
</mesh>
<OrbitControls />
</Canvas>
)
}
export type CadDiffProps = FileDiff
export function CadDiff({ before, after }: CadDiffProps): React.ReactElement {
return (
<ThemeProvider colorMode="auto">
<Box display="flex" height={300}>
<Box flexGrow={1} backgroundColor="danger.subtle">
{before && <ModelView file={before} />}
</Box>
<Box
flexGrow={1}
backgroundColor="success.subtle"
borderLeftWidth={1}
borderLeftColor="border.default"
borderLeftStyle="solid"
>
{after && <ModelView file={after} />}
</Box>
</Box>
</ThemeProvider>
)
}