mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-20 09:09:35 +02:00
fix(tabs): Follow parent again keeps a Focus pin (#528/#582 integration)
#528's browser followParent operation rebuilt the target ref as { kind, id } to drop its manual placement, which also dropped #582's `focus` flag. The browser PUTs whole layouts, so the pin was erased on the next save. The operation now copies the ref and removes only `placement`. #528's row-menu test also expects #582's 'Add to Focus' entry now. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
a6ce52d3e7
commit
5d31e42db0
2 files changed
+20
-2
No files matched your search
@@ -23,7 +23,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vite
|
||||
const PUBLIC = join(process.cwd(), 'src/web/public');
|
||||
const read = (name: string) => readFileSync(join(PUBLIC, name), 'utf8');
|
||||
|
||||
type Ref = { kind: 'session' | 'webview'; id: string; placement?: 'manual' };
|
||||
type Ref = { kind: 'session' | 'webview'; id: string; placement?: 'manual'; focus?: true };
|
||||
type Layout = {
|
||||
version: number;
|
||||
updatedAt: string;
|
||||
@@ -133,6 +133,15 @@ describe('child sessions: follow and hand placement', () => {
|
||||
expect(next.groups[1].refs).toEqual([]);
|
||||
});
|
||||
|
||||
it('Follow parent again keeps a Focus pin: the whole layout is PUT, so a dropped field is erased', () => {
|
||||
const pinned = lineage();
|
||||
pinned.groups[1].refs[0] = { kind: 'session', id: 'moved', placement: 'manual', focus: true };
|
||||
const next = h.applyOperation(pinned, { type: 'followParent', ref: s('moved'), parents });
|
||||
const moved = next.groups[0].refs.find((ref: Ref) => ref.id === 'moved');
|
||||
expect(moved.placement).toBeUndefined();
|
||||
expect(moved.focus).toBe(true);
|
||||
});
|
||||
|
||||
it('refuses to follow a parent that is gone or loops, and leaves a following child as it is', () => {
|
||||
expect(() => h.applyOperation(lineage(), { type: 'followParent', ref: s('orphan'), parents })).toThrow();
|
||||
expect(() =>
|
||||
@@ -1078,8 +1087,10 @@ describe('child session placement in the row menu', () => {
|
||||
installFetch();
|
||||
const app = following(makeApp(lineageLayout()));
|
||||
openMenu(app, 's1');
|
||||
// 'Add to Focus' is #582's Focus section, offered on every row.
|
||||
expect(menuLabels()).toEqual([
|
||||
'Session options',
|
||||
'Add to Focus',
|
||||
'Move down',
|
||||
'Move to "Later"',
|
||||
'Move to Ungrouped',
|
||||
|
||||
Reference in new issue
Block a user