Added option to disable search bar autofocus

This commit is contained in:
Paweł Malak 2021-10-26 13:09:42 +02:00
parent 0ec77c33bf
commit df6d96f5b6
8 changed files with 45 additions and 6 deletions

10
DEV_GUIDELINES.md Normal file
View file

@ -0,0 +1,10 @@
## Adding new config key
1. Edit utils/init/initialConfig.json
2. Edit client/src/interfaces/Config.ts
3. Edit client/src/utility/templateObjects/configTemplate.ts
If config value will be used in a form:
4. Edit client/src/interfaces/Forms.ts
5. Edit client/src/utility/templateObjects/settingsTemplate.ts

View file

@ -5,7 +5,7 @@ import { connect } from 'react-redux';
import { createNotification } from '../../store/actions';
// Typescript
import { NewNotification } from '../../interfaces';
import { Config, GlobalState, NewNotification } from '../../interfaces';
// CSS
import classes from './SearchBar.module.css';
@ -16,16 +16,20 @@ import { searchParser, urlParser, redirectUrl } from '../../utility';
interface ComponentProps {
createNotification: (notification: NewNotification) => void;
setLocalSearch: (query: string) => void;
config: Config;
loading: boolean;
}
const SearchBar = (props: ComponentProps): JSX.Element => {
const { setLocalSearch, createNotification } = props;
const { setLocalSearch, createNotification, config, loading } = props;
const inputRef = useRef<HTMLInputElement>(document.createElement('input'));
useEffect(() => {
inputRef.current.focus();
}, []);
if (!loading && !config.disableAutofocus) {
inputRef.current.focus();
}
}, [config]);
const clearSearch = () => {
inputRef.current.value = '';
@ -78,4 +82,11 @@ const SearchBar = (props: ComponentProps): JSX.Element => {
);
};
export default connect(null, { createNotification })(SearchBar);
const mapStateToProps = (state: GlobalState) => {
return {
config: state.config.config,
loading: state.config.loading,
};
};
export default connect(mapStateToProps, { createNotification })(SearchBar);

View file

@ -121,6 +121,18 @@ const SearchSettings = (props: Props): JSX.Element => {
<option value={0}>False</option>
</select>
</InputGroup>
<InputGroup>
<label htmlFor="disableAutofocus">Disable search bar autofocus</label>
<select
id="disableAutofocus"
name="disableAutofocus"
value={formData.disableAutofocus ? 1 : 0}
onChange={(e) => inputChangeHandler(e, { isBool: true })}
>
<option value={1}>True</option>
<option value={0}>False</option>
</select>
</InputGroup>
<Button>Save changes</Button>
</form>

View file

@ -20,4 +20,5 @@ export interface Config {
kubernetesApps: boolean;
unpinStoppedApps: boolean;
useAmericanDate: boolean;
disableAutofocus: boolean;
}

View file

@ -9,6 +9,7 @@ export interface SearchForm {
hideSearch: boolean;
defaultSearchProvider: string;
searchSameTab: boolean;
disableAutofocus: boolean;
}
export interface OtherSettingsForm {

View file

@ -22,4 +22,5 @@ export const configTemplate: Config = {
kubernetesApps: false,
unpinStoppedApps: false,
useAmericanDate: false,
disableAutofocus: false,
};

View file

@ -28,4 +28,5 @@ export const searchSettingsTemplate: SearchForm = {
hideSearch: false,
searchSameTab: false,
defaultSearchProvider: 'l',
disableAutofocus: false,
};

View file

@ -18,5 +18,7 @@
"dockerApps": false,
"dockerHost": "localhost",
"kubernetesApps": false,
"unpinStoppedApps": false
"unpinStoppedApps": false,
"useAmericanDate": false,
"disableAutofocus": false
}