diff options
| author | Shoubhit Dash <[email protected]> | 2026-04-02 14:44:05 +0530 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-04-02 17:14:05 +0800 |
| commit | d540d363a76909c9c1b1d4e4113a1b8fea62c5a8 (patch) | |
| tree | 76143602c2733161100d817a58c4cb5b93730c7d /packages/web/src/components/share | |
| parent | db938913736600ce3ad68d89a9a3532c4cd517f5 (diff) | |
| download | opencode-d540d363a76909c9c1b1d4e4113a1b8fea62c5a8.tar.gz opencode-d540d363a76909c9c1b1d4e4113a1b8fea62c5a8.zip | |
refactor: simplify solid reactivity across app and web (#20497)
Diffstat (limited to 'packages/web/src/components/share')
| -rw-r--r-- | packages/web/src/components/share/common.tsx | 11 | ||||
| -rw-r--r-- | packages/web/src/components/share/content-diff.tsx | 47 |
2 files changed, 35 insertions, 23 deletions
diff --git a/packages/web/src/components/share/common.tsx b/packages/web/src/components/share/common.tsx index 7ca4daa6a..aebc95537 100644 --- a/packages/web/src/components/share/common.tsx +++ b/packages/web/src/components/share/common.tsx @@ -83,12 +83,15 @@ export function createOverflow() { return overflow() }, ref(el: HTMLElement) { + const sync = () => { + setOverflow(el.scrollHeight > el.clientHeight + 1) + } + const ro = new ResizeObserver(() => { - if (el.scrollHeight > el.clientHeight + 1) { - setOverflow(true) - } - return + sync() }) + + sync() ro.observe(el) onCleanup(() => { diff --git a/packages/web/src/components/share/content-diff.tsx b/packages/web/src/components/share/content-diff.tsx index 9ccd554d0..c8dd35b38 100644 --- a/packages/web/src/components/share/content-diff.tsx +++ b/packages/web/src/components/share/content-diff.tsx @@ -1,5 +1,5 @@ import { parsePatch } from "diff" -import { createMemo } from "solid-js" +import { createMemo, For } from "solid-js" import { ContentCode } from "./content-code" import styles from "./content-diff.module.css" @@ -160,28 +160,37 @@ export function ContentDiff(props: Props) { return ( <div class={styles.root}> <div data-component="desktop"> - {rows().map((r) => ( - <div data-component="diff-row" data-type={r.type}> - <div data-slot="before" data-diff-type={r.type === "removed" || r.type === "modified" ? "removed" : ""}> - <ContentCode code={r.left} flush lang={props.lang} /> - </div> - <div data-slot="after" data-diff-type={r.type === "added" || r.type === "modified" ? "added" : ""}> - <ContentCode code={r.right} lang={props.lang} flush /> + <For each={rows()}> + {(row) => ( + <div data-component="diff-row" data-type={row.type}> + <div + data-slot="before" + data-diff-type={row.type === "removed" || row.type === "modified" ? "removed" : ""} + > + <ContentCode code={row.left} flush lang={props.lang} /> + </div> + <div data-slot="after" data-diff-type={row.type === "added" || row.type === "modified" ? "added" : ""}> + <ContentCode code={row.right} lang={props.lang} flush /> + </div> </div> - </div> - ))} + )} + </For> </div> <div data-component="mobile"> - {mobileRows().map((block) => ( - <div data-component="diff-block" data-type={block.type}> - {block.lines.map((line) => ( - <div data-diff-type={block.type === "removed" ? "removed" : block.type === "added" ? "added" : ""}> - <ContentCode code={line} lang={props.lang} flush /> - </div> - ))} - </div> - ))} + <For each={mobileRows()}> + {(block) => ( + <div data-component="diff-block" data-type={block.type}> + <For each={block.lines}> + {(line) => ( + <div data-diff-type={block.type === "removed" ? "removed" : block.type === "added" ? "added" : ""}> + <ContentCode code={line} lang={props.lang} flush /> + </div> + )} + </For> + </div> + )} + </For> </div> </div> ) |
