import React, { useCallback, useMemo } from 'react'; import Alert from 'Components/Alert'; import FieldSet from 'Components/FieldSet'; import Form from 'Components/Form/Form'; import FormGroup from 'Components/Form/FormGroup'; import FormInputGroup from 'Components/Form/FormInputGroup'; import FormLabel from 'Components/Form/FormLabel'; import { EnhancedSelectInputValue } from 'Components/Form/Select/EnhancedSelectInput'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import PageContent from 'Components/Page/PageContent'; import PageContentBody from 'Components/Page/PageContentBody'; import { inputTypes, kinds } from 'Helpers/Props'; import { useFilteredLanguages } from 'Language/useLanguages'; import SettingsToolbar from 'Settings/SettingsToolbar'; import themes from 'Styles/Themes'; import { InputChanged } from 'typings/inputs'; import timeZoneOptions from 'Utilities/Date/timeZoneOptions'; import titleCase from 'Utilities/String/titleCase'; import translate from 'Utilities/String/translate'; import { useManageUiSettings } from './useUiSettings'; export const firstDayOfWeekOptions: EnhancedSelectInputValue[] = [ { key: 0, get value() { return translate('Sunday'); }, }, { key: 1, get value() { return translate('Monday'); }, }, ]; export const weekColumnOptions: EnhancedSelectInputValue[] = [ { key: 'ddd M/D', value: 'Tue 3/25', hint: 'ddd M/D' }, { key: 'ddd MM/DD', value: 'Tue 03/25', hint: 'ddd MM/DD' }, { key: 'ddd D/M', value: 'Tue 25/3', hint: 'ddd D/M' }, { key: 'ddd DD/MM', value: 'Tue 25/03', hint: 'ddd DD/MM' }, ]; const shortDateFormatOptions: EnhancedSelectInputValue[] = [ { key: 'MMM D YYYY', value: 'Mar 25 2014', hint: 'MMM D YYYY' }, { key: 'DD MMM YYYY', value: '25 Mar 2014', hint: 'DD MMM YYYY' }, { key: 'MM/D/YYYY', value: '03/25/2014', hint: 'MM/D/YYYY' }, { key: 'MM/DD/YYYY', value: '03/25/2014', hint: 'MM/DD/YYYY' }, { key: 'DD/MM/YYYY', value: '25/03/2014', hint: 'DD/MM/YYYY' }, { key: 'YYYY-MM-DD', value: '2014-03-25', hint: 'YYYY-MM-DD' }, ]; const longDateFormatOptions: EnhancedSelectInputValue[] = [ { key: 'dddd, MMMM D YYYY', value: 'Tuesday, March 25, 2014' }, { key: 'dddd, D MMMM YYYY', value: 'Tuesday, 25 March, 2014' }, ]; export const timeFormatOptions: EnhancedSelectInputValue[] = [ { key: 'h(:mm)a', value: '5pm/5:30pm' }, { key: 'HH:mm', value: '17:00/17:30' }, ]; function UISettings() { const { data: languageItems = [], isFetching: isLanguagesFetching, isFetched: isLanguagesPopulated, error: languagesError, } = useFilteredLanguages({ Any: true, Original: true, Unknown: true, }); const { isFetching: isSettingsFetching, isFetched: isSettingsPopulated, error: settingsError, hasPendingChanges, hasSettings, settings, isSaving, validationErrors, validationWarnings, saveSettings, updateSetting, } = useManageUiSettings(); const isFetching = isLanguagesFetching || isSettingsFetching; const isPopulated = isLanguagesPopulated && isSettingsPopulated; const error = languagesError || settingsError; const languages = useMemo(() => { return languageItems.map((item) => { return { key: item.id, value: item.name, }; }); }, [languageItems]); const themeOptions = Object.keys(themes).map((theme) => ({ key: theme, value: titleCase(theme), })); const handleInputChange = useCallback( (change: InputChanged) => { // @ts-expect-error name needs to be keyof UiSettingsModel updateSetting(change.name, change.value); }, [updateSetting] ); const handleSavePress = useCallback(() => { saveSettings(); }, [saveSettings]); return ( {isFetching && isPopulated ? : null} {!isFetching && error ? ( {translate('UiSettingsLoadError')} ) : null} {hasSettings && isPopulated && !error ? (
{translate('FirstDayOfWeek')} {translate('WeekColumnHeader')}
{translate('ShortDateFormat')} {translate('LongDateFormat')} {translate('TimeFormat')} {translate('TimeZone')} {translate('ShowRelativeDates')}
{translate('Theme')} {translate('EnableColorImpairedMode')}
{translate('UiLanguage')} language.key === settings.uiLanguage.value ) ? settings.uiLanguage.errors : [ ...settings.uiLanguage.errors, { message: translate('InvalidUILanguage') }, ] } />
) : null}
); } export default UISettings;