import { nsMerge } from 'shared/utils.mjs' import { useState, useContext } from 'react' import { LoadingStatusContext } from 'shared/context/loading-status-context.mjs' import { useBackend } from 'shared/hooks/use-backend.mjs' import { useTranslation } from 'next-i18next' import { StringInput, ListInput, ns as inputNs } from 'shared/components/inputs.mjs' export const ns = nsMerge('genimg', inputNs) export const GenerateImage = () => { const backend = useBackend() const { setLoadingStatus } = useContext(LoadingStatusContext) const { t } = useTranslation(ns) const [title, setTitle] = useState('') const [intro, setIntro] = useState('') const [type, setType] = useState('tall') const [site, setSite] = useState(false) const [preview, setPreview] = useState(false) const generate = async () => { let result try { setLoadingStatus([true, 'status:contactingBackend']) result = await backend.img({ title, intro, type, site }) if (result.success) { const uint8Array = new Uint8Array(result.data) let uint8String = '' uint8Array.map((byte) => (uint8String += String.fromCharCode(byte))) setLoadingStatus([true, 'status:nailedIt', true, true]) const base64String = btoa(uint8String) setPreview(`data:image/png;base64,${base64String}`) } else setLoadingStatus([true, 'status:backendError', true, false]) } catch (err) { console.log(err) } } return (
{preview ? ( <> ) : ( <> true} /> true} /> {type === 'wide' ? ( ) : null} )}
) }