Search command should re-focus search box if already open

This commit is contained in:
Philip Peterson 2025-06-07 20:44:19 -07:00
parent d65dfba445
commit 610cd21897
7 changed files with 18 additions and 7 deletions

View file

@ -141,7 +141,7 @@ export function openSearch(uid?: string) {
dispatch({ dispatch({
type: SESSION_SEARCH, type: SESSION_SEARCH,
uid: targetUid, uid: targetUid,
value: true value: new Date()
}); });
}; };
} }
@ -153,7 +153,7 @@ export function closeSearch(uid?: string, keyEvent?: any) {
dispatch({ dispatch({
type: SESSION_SEARCH, type: SESSION_SEARCH,
uid: targetUid, uid: targetUid,
value: false value: null
}); });
} else { } else {
if (keyEvent) { if (keyEvent) {

View file

@ -87,6 +87,7 @@ const SearchButton = ({
const SearchBox = forwardRef<HTMLDivElement, SearchBoxProps>((props, ref) => { const SearchBox = forwardRef<HTMLDivElement, SearchBoxProps>((props, ref) => {
const { const {
caseSensitive, caseSensitive,
dateFocused,
wholeWord, wholeWord,
regex, regex,
results, results,
@ -122,6 +123,14 @@ const SearchBox = forwardRef<HTMLDivElement, SearchBoxProps>((props, ref) => {
inputRef.current?.focus(); inputRef.current?.focus();
}, [inputRef.current]); }, [inputRef.current]);
useEffect(() => {
if (!dateFocused) {
return;
}
inputRef.current?.focus();
inputRef.current?.select();
}, [dateFocused]);
const searchButtonColors: SearchButtonColors = { const searchButtonColors: SearchButtonColors = {
backgroundColor: borderColor, backgroundColor: borderColor,
selectionColor, selectionColor,

View file

@ -86,7 +86,7 @@ class TermGroup_ extends React.PureComponent<TermGroupProps> {
modifierKeys: this.props.modifierKeys, modifierKeys: this.props.modifierKeys,
padding: this.props.padding, padding: this.props.padding,
cleared: session.cleared, cleared: session.cleared,
search: session.search, search: session.search?.asMutable() ?? null,
cols: session.cols, cols: session.cols,
rows: session.rows, rows: session.rows,
copyOnSelect: this.props.copyOnSelect, copyOnSelect: this.props.copyOnSelect,

View file

@ -518,6 +518,7 @@ export default class Term extends React.PureComponent<
{this.props.customChildren} {this.props.customChildren}
{this.props.search ? ( {this.props.search ? (
<SearchBox <SearchBox
dateFocused={this.props.search}
next={this.searchNext} next={this.searchNext}
prev={this.searchPrevious} prev={this.searchPrevious}
close={this.closeSearchBox} close={this.closeSearchBox}

View file

@ -27,7 +27,7 @@ function Session(obj: Immutable.DeepPartial<session>) {
cols: null, cols: null,
rows: null, rows: null,
cleared: false, cleared: false,
search: false, search: null,
shell: '', shell: '',
pid: null, pid: null,
profile: '' profile: ''

View file

@ -74,7 +74,7 @@ export interface SessionSetCwdAction {
export interface SessionSearchAction { export interface SessionSearchAction {
type: typeof SESSION_SEARCH; type: typeof SESSION_SEARCH;
uid: string; uid: string;
value: boolean; value: Date | null;
} }
export type SessionActions = export type SessionActions =

5
typings/hyper.d.ts vendored
View file

@ -118,7 +118,7 @@ export type session = {
pid: number | null; pid: number | null;
resizeAt?: number; resizeAt?: number;
rows: number | null; rows: number | null;
search: boolean; search: Date | null;
shell: string | null; shell: string | null;
title: string; title: string;
uid: string; uid: string;
@ -326,6 +326,7 @@ import type {TermGroupConnectedProps} from '../lib/components/term-group';
export type TermGroupProps = TermGroupConnectedProps & TermGroupOwnProps; export type TermGroupProps = TermGroupConnectedProps & TermGroupOwnProps;
export type SearchBoxProps = { export type SearchBoxProps = {
dateFocused: Date | null;
caseSensitive: boolean; caseSensitive: boolean;
wholeWord: boolean; wholeWord: boolean;
regex: boolean; regex: boolean;
@ -386,7 +387,7 @@ export type TermProps = {
rows: number | null; rows: number | null;
screenReaderMode: boolean; screenReaderMode: boolean;
scrollback: number; scrollback: number;
search: boolean; search: Date | null;
searchAddon: SearchAddon | null; searchAddon: SearchAddon | null;
selectionColor: string; selectionColor: string;
term: Terminal | null; term: Terminal | null;