layout sharing via url

[deploy]
This commit is contained in:
2023-07-08 23:19:58 +02:00
parent 3a167030da
commit 391c9d8837
7 changed files with 395 additions and 8 deletions

View File

@@ -21,9 +21,7 @@ export async function getSharableUrl(name: string, data: any, baseHref = window.
return new Promise(async resolve => {
const reader = new FileReader()
reader.onloadend = function () {
const base64String = (reader.result as string)
.replace(/^data:application\/octet-stream;base64,/, "")
.replace(/==$/, "")
const base64String = (reader.result as string).replace(/^data:application\/octet-stream;base64,/, "")
const url = new URL(baseHref)
url.searchParams.set(name, base64String)
resolve(url)
@@ -31,3 +29,15 @@ export async function getSharableUrl(name: string, data: any, baseHref = window.
reader.readAsDataURL(await stringifyCompressed(data))
})
}
export async function parseSharableUrl<T>(
name: string,
url: string = window.location.href,
): Promise<T | undefined> {
const searchParams = new URL(url).searchParams
if (!searchParams.has(name)) return
return await fetch(`data:application/octet-stream;base64,${searchParams.get(name)}`)
.then(it => it.blob())
.then(it => parseCompressed(it))
}