(sessionKey: string | Accessor<string>)
| 780 | }, |
| 781 | }, |
| 782 | view(sessionKey: string | Accessor<string>) { |
| 783 | const key = createSessionKeyReader(sessionKey, ensureKey) |
| 784 | const s = createMemo(() => store.sessionView[key()] ?? { scroll: {} }) |
| 785 | const terminalOpened = createMemo(() => store.terminal?.opened ?? false) |
| 786 | const reviewPanelOpened = createMemo(() => store.review?.panelOpened ?? DEFAULT_REVIEW_PANEL_OPENED) |
| 787 | const reviewPanelSource = createMemo(() => (reviewPanelOpened() ? ephemeral.reviewPanelSource : "other")) |
| 788 | |
| 789 | function setTerminalOpened(next: boolean) { |
| 790 | const current = store.terminal |
| 791 | if (!current) { |
| 792 | setStore("terminal", { height: DEFAULT_TERMINAL_HEIGHT, opened: next }) |
| 793 | return |
| 794 | } |
| 795 | |
| 796 | const value = current.opened ?? false |
| 797 | if (value === next) return |
| 798 | setStore("terminal", "opened", next) |
| 799 | } |
| 800 | |
| 801 | function setReviewPanelOpened(next: boolean, source: ReviewPanelSource) { |
| 802 | const nextSource = next ? source : "other" |
| 803 | const current = store.review |
| 804 | if (!current) { |
| 805 | batch(() => { |
| 806 | setStore("review", { diffStyle: "split" as ReviewDiffStyle, panelOpened: next }) |
| 807 | setEphemeral("reviewPanelSource", nextSource) |
| 808 | }) |
| 809 | return |
| 810 | } |
| 811 | |
| 812 | const value = current.panelOpened ?? DEFAULT_REVIEW_PANEL_OPENED |
| 813 | if (value === next) { |
| 814 | if (ephemeral.reviewPanelSource !== nextSource) setEphemeral("reviewPanelSource", nextSource) |
| 815 | return |
| 816 | } |
| 817 | batch(() => { |
| 818 | setStore("review", "panelOpened", next) |
| 819 | setEphemeral("reviewPanelSource", nextSource) |
| 820 | }) |
| 821 | } |
| 822 | |
| 823 | return { |
| 824 | scroll(tab: string) { |
| 825 | return scroll.scroll(key(), tab) |
| 826 | }, |
| 827 | setScroll(tab: string, pos: SessionScroll) { |
| 828 | scroll.setScroll(key(), tab, pos) |
| 829 | }, |
| 830 | todoCollapsed: { |
| 831 | get: () => s().todoCollapsed ?? false, |
| 832 | set(collapsed: boolean) { |
| 833 | const session = key() |
| 834 | const current = store.sessionView[session] |
| 835 | if (!current) { |
| 836 | setStore("sessionView", session, { scroll: {}, todoCollapsed: collapsed }) |
| 837 | } else { |
| 838 | setStore("sessionView", session, "todoCollapsed", collapsed) |
| 839 | } |
no test coverage detected