summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context/file
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-12 11:26:19 -0600
committerGitHub <[email protected]>2026-02-12 11:26:19 -0600
commitda952135cabba2926698298797cd301e7adaf48c (patch)
tree78635fe4f7d656266ad3cc1c353b04b56969515c /packages/app/src/context/file
parent789705ea96ae28af7e30801fd6039ce89b6ac48e (diff)
downloadopencode-da952135cabba2926698298797cd301e7adaf48c.tar.gz
opencode-da952135cabba2926698298797cd301e7adaf48c.zip
chore(app): refactor for better solidjs hygiene (#13344)
Diffstat (limited to 'packages/app/src/context/file')
-rw-r--r--packages/app/src/context/file/view-cache.ts52
1 files changed, 31 insertions, 21 deletions
diff --git a/packages/app/src/context/file/view-cache.ts b/packages/app/src/context/file/view-cache.ts
index 2614b2fb5..6e8ddf62d 100644
--- a/packages/app/src/context/file/view-cache.ts
+++ b/packages/app/src/context/file/view-cache.ts
@@ -23,6 +23,16 @@ function normalizeSelectedLines(range: SelectedLineRange): SelectedLineRange {
}
}
+function equalSelectedLines(a: SelectedLineRange | null | undefined, b: SelectedLineRange | null | undefined) {
+ if (!a && !b) return true
+ if (!a || !b) return false
+ const left = normalizeSelectedLines(a)
+ const right = normalizeSelectedLines(b)
+ return (
+ left.start === right.start && left.end === right.end && left.side === right.side && left.endSide === right.endSide
+ )
+}
+
function createViewSession(dir: string, id: string | undefined) {
const legacyViewKey = `${dir}/file${id ? "/" + id : ""}.v1`
@@ -65,36 +75,36 @@ function createViewSession(dir: string, id: string | undefined) {
const selectedLines = (path: string) => view.file[path]?.selectedLines
const setScrollTop = (path: string, top: number) => {
- setView("file", path, (current) => {
- if (current?.scrollTop === top) return current
- return {
- ...(current ?? {}),
- scrollTop: top,
- }
- })
+ setView(
+ produce((draft) => {
+ const file = draft.file[path] ?? (draft.file[path] = {})
+ if (file.scrollTop === top) return
+ file.scrollTop = top
+ }),
+ )
pruneView(path)
}
const setScrollLeft = (path: string, left: number) => {
- setView("file", path, (current) => {
- if (current?.scrollLeft === left) return current
- return {
- ...(current ?? {}),
- scrollLeft: left,
- }
- })
+ setView(
+ produce((draft) => {
+ const file = draft.file[path] ?? (draft.file[path] = {})
+ if (file.scrollLeft === left) return
+ file.scrollLeft = left
+ }),
+ )
pruneView(path)
}
const setSelectedLines = (path: string, range: SelectedLineRange | null) => {
const next = range ? normalizeSelectedLines(range) : null
- setView("file", path, (current) => {
- if (current?.selectedLines === next) return current
- return {
- ...(current ?? {}),
- selectedLines: next,
- }
- })
+ setView(
+ produce((draft) => {
+ const file = draft.file[path] ?? (draft.file[path] = {})
+ if (equalSelectedLines(file.selectedLines, next)) return
+ file.selectedLines = next
+ }),
+ )
pruneView(path)
}