Loading the shared order into the app...
\ No newline at end of file + diff --git a/src/router/index.js b/src/router/index.js index 48424ef..d3ace51 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -16,7 +16,7 @@ const routes = [ }, { name: 'Shared', - path: '/shared', + path: '/shared/:code', component: ()=> import('@/components/chart/Shared.vue') }, { diff --git a/src/share.js b/src/share.js index aa29b11..ba09404 100644 --- a/src/share.js +++ b/src/share.js @@ -4,6 +4,7 @@ import {changeIntervalSecs, onChartReady, setSymbol, widget} from "@/charts/char import {usePrefStore, useStore} from "@/store/store.js"; import {lookupSymbol} from "@/charts/datafeed.js"; import {track} from "@/track.js"; +import {socket} from "@/socket.js"; export async function getShareUrl() { const co = useChartOrderStore(); @@ -26,18 +27,18 @@ export async function getShareUrl() { } const json = JSON.stringify(data) console.log('sharing data', json, data) - const compressed = compressToEncodedURIComponent(json); - const imageFile = await takeSnapshot() - return import.meta.env.VITE_SERVER_URL+ `/share?i=${imageFile}&d=${compressed}`; + const snapshot = await takeSnapshot() + + const code = await new Promise((resolve)=>socket.emit('share', data, snapshot, resolve)) + if (code===null) return null + + return import.meta.env.VITE_SHARE_URL+ '/share/'+code; } -export function loadShareUrl() { - const urlParams = new URLSearchParams(window.location.search); - const dataStr = urlParams.get('d'); - if (!dataStr) return - const json = decompressFromEncodedURIComponent(dataStr); - const data = JSON.parse(json); +export async function loadShareUrl(code) { + const data = await new Promise((resolve)=>socket.emit('shared', code, resolve)) console.log('loaded shared orders data', data) + if (data===null) return const co = useChartOrderStore(); const s = useStore() const ticker = `${data.chainId}|${data.symbol.route.exchange}|${data.symbol.base.a}|${data.symbol.quote.a}|${data.symbol.route.fee}`; @@ -50,7 +51,9 @@ export function loadShareUrl() { const prefs = usePrefStore() prefs.selectedSymbol = ticker for (const order of data.orders) { + // force amount to be zero so that the user MUST enter a size before confirming the placement order.amount = 0 + order.amountIsTokenA = true order.valid = false } co.orders = data.orders @@ -65,11 +68,5 @@ export function loadShareUrl() { export async function takeSnapshot() { const screenshotCanvas = await widget.takeClientScreenshot(); - const image = await new Promise((resolve) => screenshotCanvas.toBlob(resolve)); - const response = await fetch(import.meta.env.VITE_SERVER_URL + '/snapshot', { - method: 'PUT', - body: image, - credentials: 'same-origin', - }); - return response.text() + return await new Promise((resolve) => screenshotCanvas.toBlob(resolve)); }