import { presetArtStyles } from "@/util/presets"; import { decompressFromEncodedURIComponent, compressToEncodedURIComponent, } from "lz-string"; import { useSearchParams } from "next/navigation"; export interface Option { emoji: string; name: string; prompt: string; seed: number; strength: number; } const fallbackOptions: Option = { emoji: "🐤", name: "cat", prompt: presetArtStyles[0].prompt, seed: 2159232, strength: 0.7, }; export const shareString2Json = (shareString: string): Option => { try { return JSON.parse(decompressFromEncodedURIComponent(shareString)); } catch (_) { return fallbackOptions; } }; export const useShare = (): { option: Option; hasShare: boolean } => { const searchParams = useSearchParams(); const shareParam = searchParams.get("share"); if (shareParam) { try { return { option: JSON.parse(decompressFromEncodedURIComponent(shareParam)), hasShare: true, }; } catch (_) { return { option: fallbackOptions, hasShare: false }; } } return { option: fallbackOptions, hasShare: false }; }; export const getShareUrl = (option: Option) => { return compressToEncodedURIComponent(JSON.stringify(option)); };