summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-11-30 05:28:48 -0600
committerAdam <[email protected]>2025-11-30 05:29:07 -0600
commit5268eb479d5006d879a5cd3a852441c9b4e8f749 (patch)
tree5e6e5b3c1a80732fe075e85ccf90d9b079c02f50
parenta4eba2e6e9f1529655ae9987bf1cc4357ae662a2 (diff)
downloadopencode-5268eb479d5006d879a5cd3a852441c9b4e8f749.tar.gz
opencode-5268eb479d5006d879a5cd3a852441c9b4e8f749.zip
feat(share): split diffs on wide screens
-rw-r--r--packages/enterprise/src/routes/share/[shareID].tsx59
1 files changed, 48 insertions, 11 deletions
diff --git a/packages/enterprise/src/routes/share/[shareID].tsx b/packages/enterprise/src/routes/share/[shareID].tsx
index ffe7f533a..b95004749 100644
--- a/packages/enterprise/src/routes/share/[shareID].tsx
+++ b/packages/enterprise/src/routes/share/[shareID].tsx
@@ -41,6 +41,9 @@ const getData = query(async (shareID) => {
session_diff_preload: {
[sessionID: string]: PreloadMultiFileDiffResult<any>[]
}
+ session_diff_preload_split: {
+ [sessionID: string]: PreloadMultiFileDiffResult<any>[]
+ }
session_status: {
[sessionID: string]: SessionStatus
}
@@ -62,6 +65,9 @@ const getData = query(async (shareID) => {
session_diff_preload: {
[share.sessionID]: [],
},
+ session_diff_preload_split: {
+ [share.sessionID]: [],
+ },
session_status: {
[share.sessionID]: {
type: "idle",
@@ -78,16 +84,28 @@ const getData = query(async (shareID) => {
break
case "session_diff":
result.session_diff[share.sessionID] = item.data
- result.session_diff_preload[share.sessionID] = await Promise.all(
- item.data.map(async (diff) =>
- preloadMultiFileDiff<any>({
- oldFile: { name: diff.file, contents: diff.before },
- newFile: { name: diff.file, contents: diff.after },
- options: createDefaultOptions("unified"),
- // annotations,
- }),
- ),
- )
+ await Promise.all([
+ Promise.all(
+ item.data.map(async (diff) =>
+ preloadMultiFileDiff<any>({
+ oldFile: { name: diff.file, contents: diff.before },
+ newFile: { name: diff.file, contents: diff.after },
+ options: createDefaultOptions("unified"),
+ // annotations,
+ }),
+ ),
+ ).then((r) => (result.session_diff_preload[share.sessionID] = r)),
+ Promise.all(
+ item.data.map(async (diff) =>
+ preloadMultiFileDiff<any>({
+ oldFile: { name: diff.file, contents: diff.before },
+ newFile: { name: diff.file, contents: diff.after },
+ options: createDefaultOptions("split"),
+ // annotations,
+ }),
+ ),
+ ).then((r) => (result.session_diff_preload_split[share.sessionID] = r)),
+ ])
break
case "message":
result.message[item.data.sessionID] = result.message[item.data.sessionID] ?? []
@@ -169,6 +187,14 @@ export default function () {
preloaded: preloaded.find((d) => d.newFile.name === diff.file),
}))
})
+ const splitDiffs = createMemo(() => {
+ const diffs = data().session_diff[data().sessionID] ?? []
+ const preloaded = data().session_diff_preload_split[data().sessionID] ?? []
+ return diffs.map((diff) => ({
+ ...diff,
+ preloaded: preloaded.find((d) => d.newFile.name === diff.file),
+ }))
+ })
const title = () => (
<div class="flex flex-col gap-4">
@@ -281,8 +307,9 @@ export default function () {
</div>
</div>
<Show when={diffs().length > 0}>
- <div class="relative grow pt-14 flex-1 min-h-0 border-l border-border-weak-base">
+ <div class="@container relative grow pt-14 flex-1 min-h-0 border-l border-border-weak-base">
<SessionReview
+ class="@4xl:hidden"
diffs={diffs()}
classes={{
root: "pb-20",
@@ -290,6 +317,16 @@ export default function () {
container: "px-6",
}}
/>
+ <SessionReview
+ class="hidden @4xl:flex"
+ split
+ diffs={splitDiffs()}
+ classes={{
+ root: "pb-20",
+ header: "px-6",
+ container: "px-6",
+ }}
+ />
</div>
</Show>
</div>