summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/pages/session
diff options
context:
space:
mode:
Diffstat (limited to 'packages/app/src/pages/session')
-rw-r--r--packages/app/src/pages/session/file-tabs.tsx30
-rw-r--r--packages/app/src/pages/session/session-prompt-dock.tsx39
2 files changed, 39 insertions, 30 deletions
diff --git a/packages/app/src/pages/session/file-tabs.tsx b/packages/app/src/pages/session/file-tabs.tsx
index 9e3a54311..ebc1f5922 100644
--- a/packages/app/src/pages/session/file-tabs.tsx
+++ b/packages/app/src/pages/session/file-tabs.tsx
@@ -168,6 +168,13 @@ export function FileTabContent(props: { tab: string }) {
draftTop: undefined as number | undefined,
})
+ const setCommenting = (range: SelectedLineRange | null) => {
+ setNote("commenting", range)
+ scheduleComments()
+ if (!range) return
+ setNote("draft", "")
+ }
+
const getRoot = () => {
const el = wrap
if (!el) return
@@ -261,13 +268,6 @@ export function FileTabContent(props: { tab: string }) {
})
createEffect(() => {
- const range = note.commenting
- scheduleComments()
- if (!range) return
- setNote("draft", "")
- })
-
- createEffect(() => {
const focus = comments.focus()
const p = path()
if (!focus || !p) return
@@ -278,7 +278,7 @@ export function FileTabContent(props: { tab: string }) {
if (!target) return
setNote("openedComment", target.id)
- setNote("commenting", null)
+ setCommenting(null)
file.setSelectedLines(p, target.selection)
requestAnimationFrame(() => comments.clearFocus())
})
@@ -438,16 +438,16 @@ export function FileTabContent(props: { tab: string }) {
const p = path()
if (!p) return
file.setSelectedLines(p, range)
- if (!range) setNote("commenting", null)
+ if (!range) setCommenting(null)
}}
onLineSelectionEnd={(range: SelectedLineRange | null) => {
if (!range) {
- setNote("commenting", null)
+ setCommenting(null)
return
}
setNote("openedComment", null)
- setNote("commenting", range)
+ setCommenting(range)
}}
overflow="scroll"
class="select-text"
@@ -468,7 +468,7 @@ export function FileTabContent(props: { tab: string }) {
onClick={() => {
const p = path()
if (!p) return
- setNote("commenting", null)
+ setCommenting(null)
setNote("openedComment", (current) => (current === comment.id ? null : comment.id))
file.setSelectedLines(p, comment.selection)
}}
@@ -483,12 +483,12 @@ export function FileTabContent(props: { tab: string }) {
value={note.draft}
selection={formatCommentLabel(range())}
onInput={(value) => setNote("draft", value)}
- onCancel={() => setNote("commenting", null)}
+ onCancel={() => setCommenting(null)}
onSubmit={(value) => {
const p = path()
if (!p) return
addCommentToContext({ file: p, selection: range(), comment: value, origin: "file" })
- setNote("commenting", null)
+ setCommenting(null)
}}
onPopoverFocusOut={(e: FocusEvent) => {
const current = e.currentTarget as HTMLDivElement
@@ -497,7 +497,7 @@ export function FileTabContent(props: { tab: string }) {
setTimeout(() => {
if (!document.activeElement || !current.contains(document.activeElement)) {
- setNote("commenting", null)
+ setCommenting(null)
}
}, 0)
}}
diff --git a/packages/app/src/pages/session/session-prompt-dock.tsx b/packages/app/src/pages/session/session-prompt-dock.tsx
index 3f0b7a6e8..abe12bcb0 100644
--- a/packages/app/src/pages/session/session-prompt-dock.tsx
+++ b/packages/app/src/pages/session/session-prompt-dock.tsx
@@ -70,29 +70,28 @@ export function SessionPromptDock(props: {
setSessionHandoff(sessionKey(), { prompt: previewPrompt() })
})
- const [responding, setResponding] = createSignal(false)
-
- createEffect(
- on(
- () => permissionRequest()?.id,
- () => setResponding(false),
- { defer: true },
- ),
- )
+ const [responding, setResponding] = createSignal<string | undefined>()
+ const permissionResponding = () => {
+ const perm = permissionRequest()
+ if (!perm) return false
+ return responding() === perm.id
+ }
const decide = (response: "once" | "always" | "reject") => {
const perm = permissionRequest()
if (!perm) return
- if (responding()) return
+ if (responding() === perm.id) return
- setResponding(true)
+ setResponding(perm.id)
sdk.client.permission
.respond({ sessionID: perm.sessionID, permissionID: perm.id, response })
.catch((err: unknown) => {
const message = err instanceof Error ? err.message : String(err)
showToast({ title: language.t("common.requestFailed"), description: message })
})
- .finally(() => setResponding(false))
+ .finally(() => {
+ setResponding((id) => (id === perm.id ? undefined : id))
+ })
}
const done = createMemo(
@@ -218,18 +217,28 @@ export function SessionPromptDock(props: {
<>
<div />
<div data-slot="permission-footer-actions">
- <Button variant="ghost" size="normal" onClick={() => decide("reject")} disabled={responding()}>
+ <Button
+ variant="ghost"
+ size="normal"
+ onClick={() => decide("reject")}
+ disabled={permissionResponding()}
+ >
{language.t("ui.permission.deny")}
</Button>
<Button
variant="secondary"
size="normal"
onClick={() => decide("always")}
- disabled={responding()}
+ disabled={permissionResponding()}
>
{language.t("ui.permission.allowAlways")}
</Button>
- <Button variant="primary" size="normal" onClick={() => decide("once")} disabled={responding()}>
+ <Button
+ variant="primary"
+ size="normal"
+ onClick={() => decide("once")}
+ disabled={permissionResponding()}
+ >
{language.t("ui.permission.allowOnce")}
</Button>
</div>