-
@ Doop
2024-08-07 00:47:35```js const buildEvent = async (draft) => { const NewDTag = uuidv4(); const event = new NDKEvent(); let type; let encryptedContent;
switch (draft?.type) { case 'resource': if (draft?.price) { // encrypt the content with NEXT_PUBLIC_APP_PRIV_KEY to NEXT_PUBLIC_APP_PUBLIC_KEY encryptedContent = await nip04.encrypt(process.env.NEXT_PUBLIC_APP_PRIV_KEY, process.env.NEXT_PUBLIC_APP_PUBLIC_KEY, draft.content); } event.kind = draft?.price ? 30402 : 30023 // Determine kind based on if price is present event.content = draft?.price ? encryptedContent : draft.content event.tags = [ ['d', NewDTag], ['title', draft.title], ['summary', draft.summary], ['image', draft.image], ...draft.topics.map(topic => ['t', topic]), ['published_at', Math.floor(Date.now() / 1000).toString()], // Include price and location tags only if price is present ...(draft?.price ? [['price', draft.price.toString()], ['location', `https://plebdevs.com/details/${draft.id}`]] : []), ] type = 'resource'; break; case 'workshop': if (draft?.price) { // encrypt the content with NEXT_PUBLIC_APP_PRIV_KEY to NEXT_PUBLIC_APP_PUBLIC_KEY encryptedContent = await nip04.encrypt(process.env.NEXT_PUBLIC_APP_PRIV_KEY, process.env.NEXT_PUBLIC_APP_PUBLIC_KEY, draft.content); } event.kind = draft?.price ? 30402 : 30023 event.content = draft?.price ? encryptedContent : draft.content event.tags = [ ['d', NewDTag], ['title', draft.title], ['summary', draft.summary], ['image', draft.image], ...draft.topics.map(topic => ['t', topic]), ['published_at', Math.floor(Date.now() / 1000).toString()], ] type = 'workshop'; break; case 'course': event.kind = 30023 event.content = draft.content event.tags = [ ['d', NewDTag], ['title', draft.title], ['summary', draft.summary], ['image', draft.image], ...draft.topics.map(topic => ['t', topic]), ['published_at', Math.floor(Date.now() / 1000).toString()], ] type = 'course'; break; default: return null; } return { unsignedEvent: event, type }; }; return ( <div className='w-full px-24 pt-12 mx-auto mt-4 max-tab:px-0 max-mob:px-0 max-tab:pt-2 max-mob:pt-2'> <div className='w-full flex flex-row justify-between max-tab:flex-col max-mob:flex-col'> <i className='pi pi-arrow-left pl-8 cursor-pointer hover:opacity-75 max-tab:pl-2 max-mob:pl-2' onClick={() => router.push('/')} /> <div className='w-[75vw] mx-auto flex flex-row items-start justify-between max-tab:flex-col max-mob:flex-col max-tab:w-[95vw] max-mob:w-[95vw]'> <div className='flex flex-col items-start max-w-[45vw] max-tab:max-w-[100vw] max-mob:max-w-[100vw]'> <div className='pt-2 flex flex-row justify-start w-full'> {/* List out topics */} {draft?.topics && draft.topics.map((topic, index) => { if (topic === "plebdevs") return; return ( <Tag className='mr-2 text-white' key={index} value={topic}></Tag> ) }) } </div> <h1 className='text-4xl mt-6'>{draft?.title}</h1> <p className='text-xl mt-6'>{draft?.summary}</p> <div className='flex flex-row w-full mt-6 items-center'> <Image alt="resource thumbnail" src={returnImageProxy(draft?.author?.avatar, draft?.author?.pubkey)} width={50} height={50} className="rounded-full mr-4" /> {user && user?.pubkey && ( <p className='text-lg'> Created by{' '} <a href={`https://nostr.com/${hexToNpub(user?.pubkey)}`} rel='noreferrer noopener' target='_blank' className='text-blue-500 hover:underline'> {user?.username || user?.pubkey.slice(0, 10)}{'... '} </a> </p> )} </div> </div> <div className='flex flex-col max-tab:mt-12 max-mob:mt-12'> {draft && ( <div style={{ width: width < 768 ? "auto" : width }} onClick={() => router.push(`/details/${draft.id}`)} className="flex flex-col items-center mx-auto cursor-pointer rounded-md shadow-lg"> <div style={{ maxWidth: width, minWidth: width }} className="max-tab:h-auto max-mob:h-auto"> <Image alt="resource thumbnail" src={returnImageProxy(draft.image)} quality={100} width={width} height={height} className="w-full h-full object-cover object-center rounded-md" /> </div> </div> )} </div> </div> </div> <div className='w-[75vw] mx-auto flex flex-row justify-end mt-12'> <div className='w-fit flex flex-row justify-between'> <Button onClick={handleSubmit} label="Publish" severity='success' outlined className="w-auto m-2" /> <Button onClick={() => router.push(`/draft/${draft?.id}/edit`)} label="Edit" severity='warning' outlined className="w-auto m-2" /> <Button onClick={handleDelete} label="Delete" severity='danger' outlined className="w-auto m-2 mr-0" /> </div> </div> <div className='w-[75vw] mx-auto mt-12 p-12 border-t-2 border-gray-300 max-tab:p-0 max-mob:p-0 max-tab:max-w-[100vw] max-mob:max-w-[100vw]'> { draft?.content && <MDDisplay source={draft.content} /> } </div> </div> );
} ```