Everything's pretty much done but url.zoo.dev has been broken and we need to think about how to test reliably
This commit is contained in:
@ -99,7 +99,7 @@ function ProjectMenuPopover({
|
||||
const location = useLocation()
|
||||
const navigate = useNavigate()
|
||||
const filePath = useAbsoluteFilePath()
|
||||
const { settings } = useSettingsAuthContext()
|
||||
const { settings, auth } = useSettingsAuthContext()
|
||||
const { commandBarState, commandBarSend } = useCommandsContext()
|
||||
const { onProjectClose } = useLspContext()
|
||||
const exportCommandInfo = { name: 'Export', groupId: 'modeling' }
|
||||
@ -188,12 +188,14 @@ function ProjectMenuPopover({
|
||||
Element: 'button',
|
||||
children: 'Share link to file',
|
||||
onClick: async () => {
|
||||
const shareUrl = createFileLink({
|
||||
const shareUrl = await createFileLink(auth.context.token, {
|
||||
code: codeManager.code,
|
||||
name: file?.name || '',
|
||||
units: settings.context.modeling.defaultUnit.current,
|
||||
})
|
||||
|
||||
console.log(shareUrl)
|
||||
|
||||
await globalThis.navigator.clipboard.writeText(shareUrl)
|
||||
toast.success(
|
||||
'Link copied to clipboard. Anyone who clicks this link will get a copy of this file. Share carefully!',
|
||||
|
@ -3,6 +3,7 @@ import { ZOO_STUDIO_PROTOCOL } from 'lib/link'
|
||||
import { useState } from 'react'
|
||||
import { useCreateFileLinkQuery, CreateFileSchemaMethodOptional } from 'hooks/useCreateFileLinkQueryWatcher'
|
||||
import { isDesktop } from 'lib/isDesktop'
|
||||
import { Spinner } from './Spinner'
|
||||
|
||||
export const ProtocolHandler = (props: { children: ReactNode } ) => {
|
||||
const [hasCustomProtocolScheme, setHasCustomProtocolScheme] = useState(false)
|
||||
@ -34,7 +35,12 @@ export const ProtocolHandler = (props: { children: ReactNode } ) => {
|
||||
></div>
|
||||
<div className="flex items-center justify-center h-full" style={{ zIndex: 10 }}>
|
||||
<div className="p-4 mx-auto border rounded rounded-tl-none shadow-lg bg-chalkboard-10 dark:bg-chalkboard-100 dark:border-chalkboard-70">
|
||||
<span>Loading model into Zoo Design Studio, </span><a className="cursor-pointer" onClick={continueToWebApp}>or continue to the web app</a>
|
||||
<div className="gap-4 flex flex-col items-center">
|
||||
<div>Launching</div>
|
||||
<img src={pathLogomarkSvg} style={{ filter: `brightness(${getSystemTheme() === 'light' ? 10 : 0}%)`, }} />
|
||||
<Spinner />
|
||||
<button onClick={continueToWebApp}>Continue to web app</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> : props.children
|
||||
|
@ -1,6 +1,9 @@
|
||||
import { UnitLength_type } from '@kittycad/lib/dist/types/src/models'
|
||||
import { postUserShortlink } from 'lib/desktop'
|
||||
import { CREATE_FILE_URL_PARAM } from './constants'
|
||||
import { stringToBase64 } from './base64'
|
||||
import withBaseURL from 'lib/withBaseURL'
|
||||
import { isDesktop } from 'lib/isDesktop'
|
||||
|
||||
export interface FileLinkParams {
|
||||
code: string
|
||||
@ -11,31 +14,34 @@ export interface FileLinkParams {
|
||||
/**
|
||||
* Given a file's code, name, and units, creates shareable link
|
||||
*/
|
||||
export async function createFileLink({ code, name, units }: FileLinkParams) {
|
||||
const token = await getAndSyncStoredToken(input)
|
||||
const urlUserShortlinks = withBaseURL('/user/shortlinks')
|
||||
export async function createFileLink(token: string, { code, name, units }: FileLinkParams) {
|
||||
let urlUserShortlinks = withBaseURL('/users/shortlinks')
|
||||
|
||||
const origin = globalThis.window.location.origin
|
||||
// During development, the "handler" needs to first be the web app version,
|
||||
// which exists on localhost:3000 typically.
|
||||
let origin = 'http://localhost:3000'
|
||||
|
||||
if (!token && isDesktop()) return Promise.reject(new Error('No token found'))
|
||||
|
||||
let headers = {
|
||||
'Content-Type': 'application/json',
|
||||
}
|
||||
if (token) headers['Authorization'] = `Bearer ${token}`
|
||||
|
||||
const urlFileToShare = new URL(
|
||||
let urlFileToShare = new URL(
|
||||
`/?${CREATE_FILE_URL_PARAM}&name=${encodeURIComponent(
|
||||
name
|
||||
)}&units=${units}&code=${encodeURIComponent(stringToBase64(code))}`,
|
||||
origin
|
||||
origin,
|
||||
).toString()
|
||||
|
||||
const resp = await fetch(urlUserShortlinks, {
|
||||
headers,
|
||||
body: JSON.stringify({ url: urlFileToShare }),
|
||||
})
|
||||
const shortlink = await resp.json()
|
||||
// Remove this monkey patching
|
||||
function fixTheBrokenShitUntilItsFixedOnDev() {
|
||||
urlUserShortlinks = urlUserShortlinks.replace('https://api.dev.zoo.dev', 'https://api.zoo.dev')
|
||||
console.log(urlUserShortlinks)
|
||||
}
|
||||
|
||||
return shortlink.url
|
||||
fixTheBrokenShitUntilItsFixedOnDev()
|
||||
|
||||
return await fetch(urlUserShortlinks, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-type': 'application/json',
|
||||
'Authorization': `Bearer ${token}`,
|
||||
},
|
||||
body: JSON.stringify({ url: urlFileToShare })
|
||||
}).then((resp) => resp.json())
|
||||
}
|
||||
|
17
src/main.ts
17
src/main.ts
@ -9,6 +9,7 @@ import {
|
||||
dialog,
|
||||
shell,
|
||||
nativeTheme,
|
||||
session,
|
||||
} from 'electron'
|
||||
import path, { join } from 'path'
|
||||
import fs from 'fs'
|
||||
@ -87,6 +88,22 @@ const createWindow = (filePath?: string): BrowserWindow => {
|
||||
backgroundColor: nativeTheme.shouldUseDarkColors ? '#1C1C1C' : '#FCFCFC',
|
||||
})
|
||||
|
||||
const filter = {
|
||||
urls: ['*://api.zoo.dev/*', '*://api.dev.zoo.dev/*']
|
||||
}
|
||||
|
||||
session.defaultSession.webRequest.onBeforeSendHeaders(filter, (details, callback) => {
|
||||
console.log(details)
|
||||
details.requestHeaders['Origin'] = 'https://app.zoo.dev'
|
||||
details.requestHeaders['Access-Control-Allow-Origin'] = ['*']
|
||||
console.log(details)
|
||||
callback({
|
||||
requestHeaders: {
|
||||
'Origin': 'https://app.zoo.dev'
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
// and load the index.html of the app.
|
||||
if (MAIN_WINDOW_VITE_DEV_SERVER_URL) {
|
||||
newWindow.loadURL(MAIN_WINDOW_VITE_DEV_SERVER_URL).catch(reportRejection)
|
||||
|
Reference in New Issue
Block a user