refactor(island): ♻️ remove deduplicated code from @deno/gfm
This commit is contained in:
parent
a75de86d68
commit
d44771dab9
|
@ -1,5 +1,5 @@
|
||||||
import { JsonParseStream } from '$std/json/mod.ts'
|
import { JsonParseStream } from '$std/json/mod.ts'
|
||||||
import { CSS, render as renderMd } from '@deno/gfm'
|
import { Markdown } from ':components/Markdown.tsx'
|
||||||
import { Signal, signal, useSignal } from '@preact/signals'
|
import { Signal, signal, useSignal } from '@preact/signals'
|
||||||
import { JSX } from 'preact'
|
import { JSX } from 'preact'
|
||||||
import { useEffect, useRef } from 'preact/hooks'
|
import { useEffect, useRef } from 'preact/hooks'
|
||||||
|
@ -15,16 +15,6 @@ const currentReader = signal<ReadableStreamDefaultReader<BotResponse> | null>(
|
||||||
)
|
)
|
||||||
let currentResponse: string[] = []
|
let currentResponse: string[] = []
|
||||||
|
|
||||||
function MdCell({ children }: { children: Signal<string> }) {
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
class='markdown-body'
|
|
||||||
dangerouslySetInnerHTML={{ __html: renderMd(children.value) }}
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
type BotMessage = {
|
type BotMessage = {
|
||||||
role: string
|
role: string
|
||||||
content: string
|
content: string
|
||||||
|
@ -95,7 +85,6 @@ export default function AiChatBox() {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<style dangerouslySetInnerHTML={{ __html: CSS }}></style>
|
|
||||||
<button
|
<button
|
||||||
class='islands__ai_chat_box__button'
|
class='islands__ai_chat_box__button'
|
||||||
onClick={() => dialog.current?.showModal()}
|
onClick={() => dialog.current?.showModal()}
|
||||||
|
@ -103,7 +92,9 @@ export default function AiChatBox() {
|
||||||
<i class='ri-bard-line'></i>
|
<i class='ri-bard-line'></i>
|
||||||
</button>
|
</button>
|
||||||
<dialog ref={dialog} class='islands__ai_chat_box__dialog'>
|
<dialog ref={dialog} class='islands__ai_chat_box__dialog'>
|
||||||
<div class='islands__ai_chat_box__dialog__content'>{history}</div>
|
<div class='islands__ai_chat_box__dialog__content'>
|
||||||
|
{history}
|
||||||
|
</div>
|
||||||
<form ref={form} class='islands__ai_chat_box__dialog__form'>
|
<form ref={form} class='islands__ai_chat_box__dialog__form'>
|
||||||
<input
|
<input
|
||||||
type='text'
|
type='text'
|
||||||
|
@ -139,7 +130,7 @@ async function chatListener(event: Event, history: Signal<JSX.Element[]>) {
|
||||||
|
|
||||||
const botEntry = (
|
const botEntry = (
|
||||||
<span class='islands__ai_chat_box__history_bot'>
|
<span class='islands__ai_chat_box__history_bot'>
|
||||||
<MdCell>{botMessage}</MdCell>
|
<Markdown>{botMessage}</Markdown>
|
||||||
</span>
|
</span>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue