Explicitly set focus on insert (#285)

Adds a flag to the insert layout action to explicitly set the focus of a
newly inserted node. This also adds a flag in the starter layout to
focus on the terminal block.
This commit is contained in:
Evan Simkowitz 2024-08-27 23:16:07 -07:00 committed by GitHub
parent a3aa941b68
commit fb65ec1e23
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 25 additions and 7 deletions

View File

@ -433,6 +433,7 @@ async function createBlock(blockDef: BlockDef, magnified = false): Promise<strin
type: LayoutTreeActionType.InsertNode, type: LayoutTreeActionType.InsertNode,
node: newLayoutNode(undefined, undefined, undefined, { blockId }), node: newLayoutNode(undefined, undefined, undefined, { blockId }),
magnified, magnified,
focused: true,
}; };
const activeTabId = globalStore.get(atoms.uiContext).activetabid; const activeTabId = globalStore.get(atoms.uiContext).activetabid;
const layoutModel = getLayoutModelForTabById(activeTabId); const layoutModel = getLayoutModelForTabById(activeTabId);

View File

@ -393,6 +393,7 @@ export class LayoutModel {
blockId: action.blockid, blockId: action.blockid,
}), }),
magnified: action.magnified, magnified: action.magnified,
focused: action.focused,
}; };
this.treeReducer(insertNodeAction); this.treeReducer(insertNodeAction);
break; break;
@ -423,6 +424,7 @@ export class LayoutModel {
}), }),
indexArr: action.indexarr, indexArr: action.indexarr,
magnified: action.magnified, magnified: action.magnified,
focused: action.focused,
}; };
this.treeReducer(insertAction); this.treeReducer(insertAction);
break; break;

View File

@ -75,7 +75,6 @@ export function useDebouncedNodeInnerRect(nodeModel: NodeModel): CSSProperties {
} }
setDebounceTimeout( setDebounceTimeout(
setTimeout(() => { setTimeout(() => {
console.log("setting inner rect", nodeInnerRect);
setInnerRect(nodeInnerRect); setInnerRect(nodeInnerRect);
setDebounceTimeout(null); setDebounceTimeout(null);
}, nodeModel.animationTimeS * 1000) }, nodeModel.animationTimeS * 1000)

View File

@ -268,7 +268,10 @@ export function insertNode(layoutState: LayoutTreeState, action: LayoutTreeInser
addChildAt(insertLoc.node, insertLoc.index, action.node); addChildAt(insertLoc.node, insertLoc.index, action.node);
if (action.magnified) { if (action.magnified) {
layoutState.magnifiedNodeId = action.node.id; layoutState.magnifiedNodeId = action.node.id;
layoutState.focusedNodeId = action.node.id;
} }
}
if (action.focused) {
layoutState.focusedNodeId = action.node.id; layoutState.focusedNodeId = action.node.id;
} }
layoutState.generation++; layoutState.generation++;
@ -290,7 +293,10 @@ export function insertNodeAtIndex(layoutState: LayoutTreeState, action: LayoutTr
addChildAt(insertLoc.node, insertLoc.index + 1, action.node); addChildAt(insertLoc.node, insertLoc.index + 1, action.node);
if (action.magnified) { if (action.magnified) {
layoutState.magnifiedNodeId = action.node.id; layoutState.magnifiedNodeId = action.node.id;
layoutState.focusedNodeId = action.node.id;
} }
}
if (action.focused) {
layoutState.focusedNodeId = action.node.id; layoutState.focusedNodeId = action.node.id;
} }
layoutState.generation++; layoutState.generation++;

View File

@ -125,7 +125,11 @@ interface InsertNodeOperation {
/** /**
* Whether the inserted node should be magnified. * Whether the inserted node should be magnified.
*/ */
magnified?: boolean; magnified: boolean;
/**
* Whether the inserted node should be focused.
*/
focused: boolean;
} }
/** /**

View File

@ -209,7 +209,8 @@ declare global {
blockid: string; blockid: string;
nodesize?: number; nodesize?: number;
indexarr?: number[]; indexarr?: number[];
magnified?: boolean; focused: boolean;
magnified: boolean;
}; };
// waveobj.LayoutState // waveobj.LayoutState

View File

@ -139,6 +139,7 @@ func (svc *WindowService) MoveBlockToNewWindow(ctx context.Context, currentTabId
wlayout.QueueLayoutActionForTab(ctx, newWindow.ActiveTabId, waveobj.LayoutActionData{ wlayout.QueueLayoutActionForTab(ctx, newWindow.ActiveTabId, waveobj.LayoutActionData{
ActionType: wlayout.LayoutActionDataType_Insert, ActionType: wlayout.LayoutActionDataType_Insert,
BlockId: blockId, BlockId: blockId,
Focused: true,
}) })
return waveobj.ContextGetUpdatesRtn(ctx), nil return waveobj.ContextGetUpdatesRtn(ctx), nil
} }

View File

@ -178,7 +178,8 @@ type LayoutActionData struct {
BlockId string `json:"blockid"` BlockId string `json:"blockid"`
NodeSize *uint `json:"nodesize,omitempty"` NodeSize *uint `json:"nodesize,omitempty"`
IndexArr *[]int `json:"indexarr,omitempty"` IndexArr *[]int `json:"indexarr,omitempty"`
Magnified *bool `json:"magnified,omitempty"` Focused bool `json:"focused"`
Magnified bool `json:"magnified"`
} }
type LayoutState struct { type LayoutState struct {

View File

@ -24,6 +24,7 @@ type PortableLayout []struct {
IndexArr []int `json:"indexarr"` IndexArr []int `json:"indexarr"`
Size *uint `json:"size,omitempty"` Size *uint `json:"size,omitempty"`
BlockDef *waveobj.BlockDef `json:"blockdef"` BlockDef *waveobj.BlockDef `json:"blockdef"`
Focused bool `json:"focused"`
} }
func GetStarterLayout() PortableLayout { func GetStarterLayout() PortableLayout {
@ -33,7 +34,7 @@ func GetStarterLayout() PortableLayout {
waveobj.MetaKey_View: "term", waveobj.MetaKey_View: "term",
waveobj.MetaKey_Controller: "shell", waveobj.MetaKey_Controller: "shell",
}, },
}}, }, Focused: true},
{IndexArr: []int{1}, BlockDef: &waveobj.BlockDef{ {IndexArr: []int{1}, BlockDef: &waveobj.BlockDef{
Meta: waveobj.MetaMapType{ Meta: waveobj.MetaMapType{
waveobj.MetaKey_View: "cpuplot", waveobj.MetaKey_View: "cpuplot",
@ -77,7 +78,7 @@ func GetNewTabLayout() PortableLayout {
waveobj.MetaKey_View: "term", waveobj.MetaKey_View: "term",
waveobj.MetaKey_Controller: "shell", waveobj.MetaKey_Controller: "shell",
}, },
}}, }, Focused: true},
} }
} }
@ -132,6 +133,7 @@ func ApplyPortableLayout(ctx context.Context, tabId string, layout PortableLayou
BlockId: blockData.OID, BlockId: blockData.OID,
IndexArr: &layoutAction.IndexArr, IndexArr: &layoutAction.IndexArr,
NodeSize: layoutAction.Size, NodeSize: layoutAction.Size,
Focused: layoutAction.Focused,
} }
} }

View File

@ -281,7 +281,8 @@ func (ws *WshServer) CreateBlockCommand(ctx context.Context, data wshrpc.Command
wlayout.QueueLayoutActionForTab(ctx, tabId, waveobj.LayoutActionData{ wlayout.QueueLayoutActionForTab(ctx, tabId, waveobj.LayoutActionData{
ActionType: wlayout.LayoutActionDataType_Insert, ActionType: wlayout.LayoutActionDataType_Insert,
BlockId: blockRef.OID, BlockId: blockRef.OID,
Magnified: &data.Magnified, Magnified: data.Magnified,
Focused: true,
}) })
return &waveobj.ORef{OType: waveobj.OType_Block, OID: blockRef.OID}, nil return &waveobj.ORef{OType: waveobj.OType_Block, OID: blockRef.OID}, nil
} }