1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/renderer/components/input/search-input.tsx
Sebastian Malton 443081493b
Fix allowed resources checks on GKE (#6657)
* Add check for incomplete SelfSubjectRulesReview to fix GKE

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Adding namespaced for KubeApiResource

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Refactoring of AuthorizationNamespaceReview

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Removing dead code

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Refactoring ListApiResources

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Extract ClusterContext into deps for KubeObjectStore to fix circular import

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix remaining type errors

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix crash in frame by consolidating setup into runnables

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix type errors and remove dead code

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix core resources not showing up

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix namespaces not being shown

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Simplify ClusterContext to remove something only NamespaceStore needs

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Make sure the public API doesn't change

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix lint

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fixing namespace-select-filter tests

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix other tests requiring overrides

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix kludge in cluster-frame tests

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix remaining test failures

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix integration test due to incorrect casting

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix integration test and kube watches not working at all

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix secret details test

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix lint

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix non-ApplicationBuilder tests by adding overrides

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix crash due to trying to read hostedCluster too soon

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix crash due to timing issues
- Make injectable phases more explicit for renderer

Signed-off-by: Sebastian Malton <sebastian@malton.name>

Signed-off-by: Sebastian Malton <sebastian@malton.name>
2022-12-20 17:20:27 +02:00

112 lines
2.7 KiB
TypeScript

/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import "./search-input.scss";
import React, { createRef } from "react";
import { observer } from "mobx-react";
import { cssNames, autoBind } from "../../utils";
import { Icon } from "../icon";
import type { InputProps } from "./input";
import { Input } from "./input";
import { withInjectables } from "@ogre-tools/injectable-react";
import isMacInjectable from "../../../common/vars/is-mac.injectable";
export interface SearchInputProps extends InputProps {
compact?: boolean; // show only search-icon when not focused
bindGlobalFocusHotkey?: boolean;
showClearIcon?: boolean;
onClear?(): void;
}
const defaultProps: Partial<SearchInputProps> = {
autoFocus: true,
bindGlobalFocusHotkey: true,
showClearIcon: true,
placeholder: "Search...",
};
interface Dependencies {
isMac: boolean;
}
@observer
class NonInjectedSearchInput extends React.Component<SearchInputProps & Dependencies> {
static defaultProps = defaultProps as object;
private inputRef = createRef<Input>();
constructor(props: SearchInputProps & Dependencies) {
super(props);
autoBind(this);
}
componentDidMount() {
if (!this.props.bindGlobalFocusHotkey) return;
window.addEventListener("keydown", this.onGlobalKey);
}
componentWillUnmount() {
window.removeEventListener("keydown", this.onGlobalKey);
}
onGlobalKey(evt: KeyboardEvent) {
if (evt.key === "f" && (this.props.isMac ? evt.metaKey : evt.ctrlKey)) {
this.inputRef.current?.focus();
}
}
onKeyDown(evt: React.KeyboardEvent<any>) {
this.props.onKeyDown?.(evt);
if (evt.nativeEvent.code === "Escape") {
this.clear();
evt.stopPropagation();
}
}
clear() {
if (this.props.onClear) {
this.props.onClear();
} else {
this.inputRef.current?.setValue("");
}
}
render() {
const { className, compact, onClear, showClearIcon, bindGlobalFocusHotkey, value, isMac, ...inputProps } = this.props;
let rightIcon = <Icon small material="search"/>;
if (showClearIcon && value) {
rightIcon = (
<Icon
small
material="close"
onClick={this.clear}
/>
);
}
return (
<Input
{...inputProps}
className={cssNames("SearchInput", className, { compact })}
value={value}
onKeyDown={this.onKeyDown}
iconRight={rightIcon}
ref={this.inputRef}
blurOnEnter={false}
/>
);
}
}
export const SearchInput = withInjectables<Dependencies, SearchInputProps>(NonInjectedSearchInput, {
getProps: (di, props) => ({
...props,
isMac: di.inject(isMacInjectable),
}),
});