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,
node: newLayoutNode(undefined, undefined, undefined, { blockId }),
magnified,
focused: true,
};
const activeTabId = globalStore.get(atoms.uiContext).activetabid;
const layoutModel = getLayoutModelForTabById(activeTabId);

View File

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

View File

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

View File

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

View File

@ -125,7 +125,11 @@ interface InsertNodeOperation {
/**
* 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;
nodesize?: number;
indexarr?: number[];
magnified?: boolean;
focused: boolean;
magnified: boolean;
};
// waveobj.LayoutState

View File

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

View File

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

View File

@ -24,6 +24,7 @@ type PortableLayout []struct {
IndexArr []int `json:"indexarr"`
Size *uint `json:"size,omitempty"`
BlockDef *waveobj.BlockDef `json:"blockdef"`
Focused bool `json:"focused"`
}
func GetStarterLayout() PortableLayout {
@ -33,7 +34,7 @@ func GetStarterLayout() PortableLayout {
waveobj.MetaKey_View: "term",
waveobj.MetaKey_Controller: "shell",
},
}},
}, Focused: true},
{IndexArr: []int{1}, BlockDef: &waveobj.BlockDef{
Meta: waveobj.MetaMapType{
waveobj.MetaKey_View: "cpuplot",
@ -77,7 +78,7 @@ func GetNewTabLayout() PortableLayout {
waveobj.MetaKey_View: "term",
waveobj.MetaKey_Controller: "shell",
},
}},
}, Focused: true},
}
}
@ -132,6 +133,7 @@ func ApplyPortableLayout(ctx context.Context, tabId string, layout PortableLayou
BlockId: blockData.OID,
IndexArr: &layoutAction.IndexArr,
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{
ActionType: wlayout.LayoutActionDataType_Insert,
BlockId: blockRef.OID,
Magnified: &data.Magnified,
Magnified: data.Magnified,
Focused: true,
})
return &waveobj.ORef{OType: waveobj.OType_Block, OID: blockRef.OID}, nil
}