1
0
Fork 0
mirror of https://github.com/pawelmalak/flame.git synced 2025-07-21 20:39:36 +02:00
flame/client/src/components/Settings/OtherSettings/OtherSettings.tsx

304 lines
8.7 KiB
TypeScript
Raw Normal View History

import { useState, useEffect, ChangeEvent, FormEvent } from 'react';
// Redux
import { connect } from 'react-redux';
import {
createNotification,
updateConfig,
sortApps,
2021-09-06 12:24:01 +02:00
sortCategories,
} from '../../../store/actions';
// Typescript
import {
2021-10-22 13:31:02 +02:00
Config,
GlobalState,
NewNotification,
2021-10-22 13:31:02 +02:00
OtherSettingsForm,
} from '../../../interfaces';
// UI
import InputGroup from '../../UI/Forms/InputGroup/InputGroup';
import Button from '../../UI/Buttons/Button/Button';
import SettingsHeadline from '../../UI/Headlines/SettingsHeadline/SettingsHeadline';
// Utils
2021-10-22 13:31:02 +02:00
import { otherSettingsTemplate, inputHandler } from '../../../utility';
interface ComponentProps {
createNotification: (notification: NewNotification) => void;
2021-10-22 13:31:02 +02:00
updateConfig: (formData: OtherSettingsForm) => void;
sortApps: () => void;
sortCategories: () => void;
loading: boolean;
2021-10-22 13:31:02 +02:00
config: Config;
}
const OtherSettings = (props: ComponentProps): JSX.Element => {
2021-10-22 13:31:02 +02:00
const { config } = props;
// Initial state
2021-10-22 13:31:02 +02:00
const [formData, setFormData] = useState<OtherSettingsForm>(
otherSettingsTemplate
);
// Get config
useEffect(() => {
setFormData({
2021-10-22 13:31:02 +02:00
...config,
});
}, [props.loading]);
// Form handler
const formSubmitHandler = async (e: FormEvent) => {
e.preventDefault();
// Save settings
await props.updateConfig(formData);
// Update local page title
document.title = formData.customTitle;
// Sort apps and categories with new settings
props.sortApps();
props.sortCategories();
};
// Input handler
const inputChangeHandler = (
e: ChangeEvent<HTMLInputElement | HTMLSelectElement>,
2021-10-22 13:31:02 +02:00
options?: { isNumber?: boolean; isBool?: boolean }
) => {
2021-10-22 13:31:02 +02:00
inputHandler<OtherSettingsForm>({
e,
options,
setStateHandler: setFormData,
state: formData,
});
};
return (
2021-09-06 12:24:01 +02:00
<form onSubmit={(e) => formSubmitHandler(e)}>
{/* OTHER OPTIONS */}
<SettingsHeadline text="Miscellaneous" />
<InputGroup>
2021-09-06 12:24:01 +02:00
<label htmlFor="customTitle">Custom page title</label>
<input
2021-09-06 12:24:01 +02:00
type="text"
id="customTitle"
name="customTitle"
placeholder="Flame"
value={formData.customTitle}
2021-09-06 12:24:01 +02:00
onChange={(e) => inputChangeHandler(e)}
/>
</InputGroup>
<InputGroup>
<label htmlFor="useAmericanDate">Date formatting</label>
<select
id="useAmericanDate"
name="useAmericanDate"
value={formData.useAmericanDate ? 1 : 0}
onChange={(e) => inputChangeHandler(e, { isBool: true })}
>
<option value={1}>Friday, October 22 2021</option>
<option value={0}>Friday, 22 October 2021</option>
</select>
</InputGroup>
{/* BEAHVIOR OPTIONS */}
<SettingsHeadline text="App Behavior" />
<InputGroup>
2021-09-06 12:24:01 +02:00
<label htmlFor="pinAppsByDefault">
Pin new applications by default
</label>
<select
2021-09-06 12:24:01 +02:00
id="pinAppsByDefault"
name="pinAppsByDefault"
2021-10-22 13:31:02 +02:00
value={formData.pinAppsByDefault ? 1 : 0}
onChange={(e) => inputChangeHandler(e, { isBool: true })}
>
<option value={1}>True</option>
<option value={0}>False</option>
</select>
</InputGroup>
<InputGroup>
2021-09-06 12:24:01 +02:00
<label htmlFor="pinCategoriesByDefault">
Pin new categories by default
</label>
<select
2021-09-06 12:24:01 +02:00
id="pinCategoriesByDefault"
name="pinCategoriesByDefault"
2021-10-22 13:31:02 +02:00
value={formData.pinCategoriesByDefault ? 1 : 0}
onChange={(e) => inputChangeHandler(e, { isBool: true })}
>
<option value={1}>True</option>
<option value={0}>False</option>
</select>
</InputGroup>
<InputGroup>
2021-09-06 12:24:01 +02:00
<label htmlFor="useOrdering">Sorting type</label>
<select
2021-09-06 12:24:01 +02:00
id="useOrdering"
name="useOrdering"
value={formData.useOrdering}
2021-09-06 12:24:01 +02:00
onChange={(e) => inputChangeHandler(e)}
>
2021-09-06 12:24:01 +02:00
<option value="createdAt">By creation date</option>
<option value="name">Alphabetical order</option>
<option value="orderId">Custom order</option>
</select>
</InputGroup>
<InputGroup>
2021-09-06 12:24:01 +02:00
<label htmlFor="appsSameTab">Open applications in the same tab</label>
<select
2021-09-06 12:24:01 +02:00
id="appsSameTab"
name="appsSameTab"
2021-10-22 13:31:02 +02:00
value={formData.appsSameTab ? 1 : 0}
onChange={(e) => inputChangeHandler(e, { isBool: true })}
>
<option value={1}>True</option>
<option value={0}>False</option>
</select>
</InputGroup>
<InputGroup>
2021-09-06 12:24:01 +02:00
<label htmlFor="bookmarksSameTab">Open bookmarks in the same tab</label>
<select
2021-09-06 12:24:01 +02:00
id="bookmarksSameTab"
name="bookmarksSameTab"
2021-10-22 13:31:02 +02:00
value={formData.bookmarksSameTab ? 1 : 0}
onChange={(e) => inputChangeHandler(e, { isBool: true })}
>
<option value={1}>True</option>
<option value={0}>False</option>
</select>
</InputGroup>
{/* MODULES OPTIONS */}
<SettingsHeadline text="Modules" />
<InputGroup>
2021-09-06 12:24:01 +02:00
<label htmlFor="hideHeader">Hide greeting and date</label>
<select
2021-09-06 12:24:01 +02:00
id="hideHeader"
name="hideHeader"
2021-10-22 13:31:02 +02:00
value={formData.hideHeader ? 1 : 0}
onChange={(e) => inputChangeHandler(e, { isBool: true })}
>
<option value={1}>True</option>
<option value={0}>False</option>
</select>
</InputGroup>
<InputGroup>
<label htmlFor="greetingsSchema">Custom greetings</label>
<input
type="text"
id="greetingsSchema"
name="greetingsSchema"
placeholder="Good day;Hi;Bye!"
value={formData.greetingsSchema}
onChange={(e) => inputChangeHandler(e)}
/>
<span>
Greetings must be separated with semicolon. Only 4 messages can be
used
</span>
</InputGroup>
<InputGroup>
2021-09-06 12:24:01 +02:00
<label htmlFor="hideApps">Hide applications</label>
<select
2021-09-06 12:24:01 +02:00
id="hideApps"
name="hideApps"
2021-10-22 13:31:02 +02:00
value={formData.hideApps ? 1 : 0}
onChange={(e) => inputChangeHandler(e, { isBool: true })}
>
<option value={1}>True</option>
<option value={0}>False</option>
</select>
</InputGroup>
<InputGroup>
2021-09-06 12:24:01 +02:00
<label htmlFor="hideCategories">Hide categories</label>
<select
2021-09-06 12:24:01 +02:00
id="hideCategories"
name="hideCategories"
2021-10-22 13:31:02 +02:00
value={formData.hideCategories ? 1 : 0}
onChange={(e) => inputChangeHandler(e, { isBool: true })}
>
<option value={1}>True</option>
<option value={0}>False</option>
</select>
</InputGroup>
{/* DOCKER SETTINGS */}
<SettingsHeadline text="Docker" />
2021-10-06 22:17:43 +02:00
<InputGroup>
<label htmlFor="dockerHost">Docker Host</label>
<input
type="text"
id="dockerHost"
name="dockerHost"
placeholder="dockerHost:port"
value={formData.dockerHost}
onChange={(e) => inputChangeHandler(e)}
/>
</InputGroup>
2021-08-04 22:19:35 +02:00
<InputGroup>
2021-09-06 12:24:01 +02:00
<label htmlFor="dockerApps">Use Docker API</label>
2021-08-04 22:19:35 +02:00
<select
2021-09-06 12:24:01 +02:00
id="dockerApps"
name="dockerApps"
2021-10-22 13:31:02 +02:00
value={formData.dockerApps ? 1 : 0}
onChange={(e) => inputChangeHandler(e, { isBool: true })}
2021-08-04 22:19:35 +02:00
>
<option value={1}>True</option>
<option value={0}>False</option>
</select>
</InputGroup>
<InputGroup>
2021-09-06 12:24:01 +02:00
<label htmlFor="unpinStoppedApps">
Unpin stopped containers / other apps
</label>
2021-08-04 22:19:35 +02:00
<select
2021-09-06 12:24:01 +02:00
id="unpinStoppedApps"
name="unpinStoppedApps"
2021-10-22 13:31:02 +02:00
value={formData.unpinStoppedApps ? 1 : 0}
onChange={(e) => inputChangeHandler(e, { isBool: true })}
2021-08-04 22:19:35 +02:00
>
<option value={1}>True</option>
<option value={0}>False</option>
</select>
</InputGroup>
{/* KUBERNETES SETTINGS */}
<SettingsHeadline text="Kubernetes" />
<InputGroup>
2021-09-06 12:24:01 +02:00
<label htmlFor="kubernetesApps">Use Kubernetes Ingress API</label>
<select
2021-09-06 12:24:01 +02:00
id="kubernetesApps"
name="kubernetesApps"
2021-10-22 13:31:02 +02:00
value={formData.kubernetesApps ? 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>
);
};
const mapStateToProps = (state: GlobalState) => {
return {
2021-09-06 12:24:01 +02:00
loading: state.config.loading,
2021-10-22 13:31:02 +02:00
config: state.config.config,
};
};
const actions = {
createNotification,
updateConfig,
sortApps,
2021-09-06 12:24:01 +02:00
sortCategories,
};
export default connect(mapStateToProps, actions)(OtherSettings);