mirror of
https://github.com/anomalyco/opencode.git
synced 2026-02-16 22:04:56 +00:00
Compare commits
2 Commits
beta
...
clean-modi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
22f69cd315 | ||
|
|
b67fd167c9 |
@@ -152,6 +152,12 @@ export function Session() {
|
||||
const [showHeader, setShowHeader] = kv.signal("header_visible", true)
|
||||
const [diffWrapMode] = kv.signal<"word" | "none">("diff_wrap_mode", "word")
|
||||
const [animationsEnabled, setAnimationsEnabled] = kv.signal("animations_enabled", true)
|
||||
const [clearedDiff, setClearedDiff] = createSignal<Record<string, Record<string, true>>>({})
|
||||
const diff = createMemo(() => sync.data.session_diff[route.sessionID] ?? [])
|
||||
const diffKey = (item: { file: string; additions: number; deletions: number }) =>
|
||||
`${item.file}:${item.additions}:${item.deletions}`
|
||||
const hiddenDiff = createMemo(() => clearedDiff()[route.sessionID] ?? {})
|
||||
const visibleDiff = createMemo(() => diff().filter((item) => !hiddenDiff()[diffKey(item)]))
|
||||
|
||||
const wide = createMemo(() => dimensions().width > 120)
|
||||
const sidebarVisible = createMemo(() => {
|
||||
@@ -163,6 +169,32 @@ export function Session() {
|
||||
const showTimestamps = createMemo(() => timestamps() === "show")
|
||||
const contentWidth = createMemo(() => dimensions().width - (sidebarVisible() ? 42 : 0) - 4)
|
||||
|
||||
createEffect(() => {
|
||||
const current = new Set(diff().map((item) => diffKey(item)))
|
||||
const hidden = hiddenDiff()
|
||||
const keys = Object.keys(hidden)
|
||||
if (!keys.length) return
|
||||
const nextHidden = keys.reduce<Record<string, true>>((acc, key) => {
|
||||
if (!current.has(key)) return acc
|
||||
acc[key] = true
|
||||
return acc
|
||||
}, {})
|
||||
if (Object.keys(nextHidden).length === keys.length) return
|
||||
setClearedDiff((prev) => {
|
||||
const target = prev[route.sessionID]
|
||||
if (!target) return prev
|
||||
if (!Object.keys(nextHidden).length) {
|
||||
const next = { ...prev }
|
||||
delete next[route.sessionID]
|
||||
return next
|
||||
}
|
||||
return {
|
||||
...prev,
|
||||
[route.sessionID]: nextHidden,
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
const scrollAcceleration = createMemo(() => {
|
||||
const tui = sync.data.config.tui
|
||||
if (tui?.scroll_acceleration?.enabled) {
|
||||
@@ -526,6 +558,26 @@ export function Session() {
|
||||
dialog.clear()
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "Clear Modified",
|
||||
value: "session.modified.clear",
|
||||
category: "Session",
|
||||
enabled: !session()?.parentID && visibleDiff().length > 0,
|
||||
onSelect: (dialog) => {
|
||||
const nextHidden = diff().reduce<Record<string, true>>((acc, item) => {
|
||||
acc[diffKey(item)] = true
|
||||
return acc
|
||||
}, {})
|
||||
setClearedDiff((prev) => ({
|
||||
...prev,
|
||||
[route.sessionID]: {
|
||||
...(prev[route.sessionID] ?? {}),
|
||||
...nextHidden,
|
||||
},
|
||||
}))
|
||||
dialog.clear()
|
||||
},
|
||||
},
|
||||
{
|
||||
title: conceal() ? "Disable code concealment" : "Enable code concealment",
|
||||
value: "session.toggle.conceal",
|
||||
@@ -1120,7 +1172,7 @@ export function Session() {
|
||||
<Show when={sidebarVisible()}>
|
||||
<Switch>
|
||||
<Match when={wide()}>
|
||||
<Sidebar sessionID={route.sessionID} />
|
||||
<Sidebar sessionID={route.sessionID} hiddenDiff={hiddenDiff()} />
|
||||
</Match>
|
||||
<Match when={!wide()}>
|
||||
<box
|
||||
@@ -1132,7 +1184,7 @@ export function Session() {
|
||||
alignItems="flex-end"
|
||||
backgroundColor={RGBA.fromInts(0, 0, 0, 70)}
|
||||
>
|
||||
<Sidebar sessionID={route.sessionID} />
|
||||
<Sidebar sessionID={route.sessionID} hiddenDiff={hiddenDiff()} />
|
||||
</box>
|
||||
</Match>
|
||||
</Switch>
|
||||
|
||||
@@ -12,11 +12,16 @@ import { useDirectory } from "../../context/directory"
|
||||
import { useKV } from "../../context/kv"
|
||||
import { TodoItem } from "../../component/todo-item"
|
||||
|
||||
export function Sidebar(props: { sessionID: string; overlay?: boolean }) {
|
||||
export function Sidebar(props: { sessionID: string; overlay?: boolean; hiddenDiff?: Record<string, true> }) {
|
||||
const sync = useSync()
|
||||
const { theme } = useTheme()
|
||||
const session = createMemo(() => sync.session.get(props.sessionID)!)
|
||||
const diff = createMemo(() => sync.data.session_diff[props.sessionID] ?? [])
|
||||
const diff = createMemo(() => {
|
||||
const hidden = props.hiddenDiff ?? {}
|
||||
return (sync.data.session_diff[props.sessionID] ?? []).filter(
|
||||
(item) => !hidden[`${item.file}:${item.additions}:${item.deletions}`],
|
||||
)
|
||||
})
|
||||
const todo = createMemo(() => sync.data.todo[props.sessionID] ?? [])
|
||||
const messages = createMemo(() => sync.data.message[props.sessionID] ?? [])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user