in src/plugins/console/public/application/components/settings_modal.tsx [64:289]
export function DevToolsSettingsModal(props: Props) {
const [fontSize, setFontSize] = useState(props.settings.fontSize);
const [wrapMode, setWrapMode] = useState(props.settings.wrapMode);
const [fields, setFields] = useState(props.settings.autocomplete.fields);
const [indices, setIndices] = useState(props.settings.autocomplete.indices);
const [templates, setTemplates] = useState(props.settings.autocomplete.templates);
const [polling, setPolling] = useState(props.settings.polling);
const [tripleQuotes, setTripleQuotes] = useState(props.settings.tripleQuotes);
const autoCompleteCheckboxes = [
{
id: 'fields',
label: i18n.translate('console.settingsPage.fieldsLabelText', {
defaultMessage: 'Fields',
}),
stateSetter: setFields,
},
{
id: 'indices',
label: i18n.translate('console.settingsPage.indicesAndAliasesLabelText', {
defaultMessage: 'Indices & Aliases',
}),
stateSetter: setIndices,
},
{
id: 'templates',
label: i18n.translate('console.settingsPage.templatesLabelText', {
defaultMessage: 'Templates',
}),
stateSetter: setTemplates,
},
];
const checkboxIdToSelectedMap = {
fields,
indices,
templates,
};
const onAutocompleteChange = (optionId: AutocompleteOptions) => {
const option = _.find(autoCompleteCheckboxes, (item) => item.id === optionId);
if (option) {
option.stateSetter(!checkboxIdToSelectedMap[optionId]);
}
};
function saveSettings() {
props.onSaveSettings({
fontSize,
wrapMode,
autocomplete: {
fields,
indices,
templates,
},
polling,
tripleQuotes,
});
}
// It only makes sense to show polling options if the user needs to fetch any data.
const pollingFields =
fields || indices || templates ? (
<Fragment>
<EuiFormRow
label={
<FormattedMessage
id="console.settingsPage.refreshingDataLabel"
defaultMessage="Refreshing autocomplete suggestions"
/>
}
helpText={
<FormattedMessage
id="console.settingsPage.refreshingDataDescription"
defaultMessage="Console refreshes autocomplete suggestions by querying OpenSearch.
Automatic refreshes may be an issue if you have a large cluster or if you have network limitations."
/>
}
>
<EuiSwitch
checked={polling}
data-test-subj="autocompletePolling"
id="autocompletePolling"
label={
<FormattedMessage
defaultMessage="Automatically refresh autocomplete suggestions"
id="console.settingsPage.pollingLabelText"
/>
}
onChange={(e) => setPolling(e.target.checked)}
/>
</EuiFormRow>
<EuiButton
data-test-subj="autocompletePolling"
id="autocompletePolling"
onClick={() => {
// Only refresh the currently selected settings.
props.refreshAutocompleteSettings({
fields,
indices,
templates,
});
}}
>
<FormattedMessage
defaultMessage="Refresh autocomplete suggestions"
id="console.settingsPage.refreshButtonLabel"
/>
</EuiButton>
</Fragment>
) : undefined;
return (
<EuiOverlayMask>
<EuiModal
data-test-subj="devToolsSettingsModal"
className="conApp__settingsModal"
onClose={props.onClose}
>
<EuiModalHeader>
<EuiModalHeaderTitle>
<FormattedMessage
id="console.settingsPage.pageTitle"
defaultMessage="Console Settings"
/>
</EuiModalHeaderTitle>
</EuiModalHeader>
<EuiModalBody>
<EuiFormRow
label={
<FormattedMessage
id="console.settingsPage.fontSizeLabel"
defaultMessage="Font Size"
/>
}
>
<EuiFieldNumber
autoFocus
data-test-subj="setting-font-size-input"
value={fontSize}
min={6}
max={50}
onChange={(e) => {
const val = parseInt(e.target.value, 10);
if (!val) return;
setFontSize(val);
}}
/>
</EuiFormRow>
<EuiFormRow>
<EuiSwitch
checked={wrapMode}
data-test-subj="settingsWrapLines"
id="wrapLines"
label={
<FormattedMessage
defaultMessage="Wrap long lines"
id="console.settingsPage.wrapLongLinesLabelText"
/>
}
onChange={(e) => setWrapMode(e.target.checked)}
/>
</EuiFormRow>
<EuiFormRow
label={
<FormattedMessage
id="console.settingsPage.jsonSyntaxLabel"
defaultMessage="JSON syntax"
/>
}
>
<EuiSwitch
checked={tripleQuotes}
data-test-subj="tripleQuotes"
id="tripleQuotes"
label={
<FormattedMessage
defaultMessage="Use triple quotes in output pane"
id="console.settingsPage.tripleQuotesMessage"
/>
}
onChange={(e) => setTripleQuotes(e.target.checked)}
/>
</EuiFormRow>
<EuiFormRow
labelType="legend"
label={
<FormattedMessage
id="console.settingsPage.autocompleteLabel"
defaultMessage="Autocomplete"
/>
}
>
<EuiCheckboxGroup
options={autoCompleteCheckboxes.map((opts) => {
const { stateSetter, ...rest } = opts;
return rest;
})}
idToSelectedMap={checkboxIdToSelectedMap}
onChange={(e: any) => {
onAutocompleteChange(e as AutocompleteOptions);
}}
/>
</EuiFormRow>
{pollingFields}
</EuiModalBody>
<EuiModalFooter>
<EuiButtonEmpty data-test-subj="settingsCancelButton" onClick={props.onClose}>
<FormattedMessage id="console.settingsPage.cancelButtonLabel" defaultMessage="Cancel" />
</EuiButtonEmpty>
<EuiButton fill data-test-subj="settings-save-button" onClick={saveSettings}>
<FormattedMessage id="console.settingsPage.saveButtonLabel" defaultMessage="Save" />
</EuiButton>
</EuiModalFooter>
</EuiModal>
</EuiOverlayMask>
);
}