X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/ee9d1e39b5d469a827be5a719c9c0860914ab2a8..7786e414318b20123a5435ea0f6403ffe95bccf7:/services/workbench2/src/views-components/search-bar/search-bar-view.tsx diff --git a/services/workbench2/src/views-components/search-bar/search-bar-view.tsx b/services/workbench2/src/views-components/search-bar/search-bar-view.tsx index eba281c9f0..0c08e38b7d 100644 --- a/services/workbench2/src/views-components/search-bar/search-bar-view.tsx +++ b/services/workbench2/src/views-components/search-bar/search-bar-view.tsx @@ -24,6 +24,7 @@ import { KEY_CODE_DOWN, KEY_CODE_ESC, KEY_CODE_UP, KEY_ENTER } from "common/code import { debounce } from "debounce"; import { Vocabulary } from "models/vocabulary"; import { connectVocabulary } from "../resource-properties-form/property-field-common"; +import { Session } from "models/session"; type CssRules = "container" | "containerSearchViewOpened" | "input" | "view"; @@ -64,6 +65,7 @@ interface SearchBarViewDataProps { isPopoverOpen: boolean; debounce?: number; vocabulary?: Vocabulary; + sessions: Session[]; } export type SearchBarActionProps = SearchBarViewActionProps & @@ -81,6 +83,7 @@ interface SearchBarViewActionProps { moveUp: () => void; moveDown: () => void; setAdvancedDataFromSearchValue: (search: string, vocabulary?: Vocabulary) => void; + searchSingleCluster: (session: Session, searchValue: string) => any; } type SearchBarViewProps = SearchBarDataProps & SearchBarActionProps & WithStyles; @@ -137,6 +140,10 @@ export const SearchBarView = compose( withStyles(styles) )( class extends React.Component { + state={ + loggedInSessions: [], + } + debouncedSearch = debounce(() => { this.props.onSearch(this.props.searchValue); }, 1000); @@ -151,6 +158,21 @@ export const SearchBarView = compose( this.props.onSubmit(event); }; + componentDidMount(): void { + this.setState({ loggedInSessions: this.props.sessions.filter((ss) => ss.loggedIn && ss.userIsActive)}); + } + + componentDidUpdate( prevProps: Readonly, prevState: Readonly<{loggedInSessions: Session[]}>, snapshot?: any ): void { + if (prevProps.sessions !== this.props.sessions) { + this.setState({ loggedInSessions: this.props.sessions.filter((ss) => ss.loggedIn)}); + } + //if a new session is logged in after a search is started, search the new cluster and append those to the results + if(prevState.loggedInSessions.length !== this.state.loggedInSessions.length){ + const newLogin = this.state.loggedInSessions.filter((ss) => !prevState.loggedInSessions.includes(ss)); + this.props.searchSingleCluster(newLogin[0], this.props.searchValue); + } + } + componentWillUnmount() { this.debouncedSearch.clear(); }