Skip to content

Commit 17b0d48

Browse files
committed
Allowing user to explicitly set date format (en/cs) throughout the UI.
1 parent cab652d commit 17b0d48

File tree

5 files changed

+41
-1
lines changed

5 files changed

+41
-1
lines changed

src/components/forms/EditUserUIDataForm/EditUserUIDataForm.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ const getDefaultPages = defaultMemoize(formatMessage =>
3232
}))
3333
);
3434

35+
const dateFormatOverrideOptions = [
36+
{ key: 'cs', name: 'Český formát (d. m. yyyy)' },
37+
{ key: 'en', name: 'English format (m/d/yyyy)' },
38+
];
39+
3540
export const EDITOR_FONT_SIZE_MIN = 5;
3641
export const EDITOR_FONT_SIZE_MAX = 50;
3742
export const EDITOR_FONT_SIZE_DEFAULT = 16;
@@ -81,6 +86,19 @@ const EditUserUIDataForm = ({
8186
label={<FormattedMessage id="app.editUserUIData.defaultPage" defaultMessage="Default page (after login):" />}
8287
/>
8388

89+
<Field
90+
name="dateFormatOverride"
91+
component={SelectField}
92+
options={dateFormatOverrideOptions}
93+
addEmptyOption={true}
94+
label={
95+
<FormattedMessage
96+
id="app.editUserUIData.dateFormatOverride"
97+
defaultMessage="Date format override (if not set, date is formatted according to selected language):"
98+
/>
99+
}
100+
/>
101+
84102
<Field
85103
name="openedSidebar"
86104
component={CheckboxField}
@@ -100,6 +118,8 @@ const EditUserUIDataForm = ({
100118
}
101119
/>
102120

121+
<hr />
122+
103123
<NumericTextField
104124
name="editorFontSize"
105125
maxLength={2}

src/components/widgets/DateTime/DateTime.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,23 @@ import PropTypes from 'prop-types';
33
import { OverlayTrigger, Tooltip } from 'react-bootstrap';
44
import { FormattedDate, FormattedTime, FormattedRelativeTime } from 'react-intl';
55
import classnames from 'classnames';
6+
import { defaultMemoize } from 'reselect';
67

78
import Icon from '../../icons';
89
import { EMPTY_OBJ } from '../../../helpers/common';
10+
import { UserUIDataContext } from '../../../helpers/contexts';
11+
import { knownLocales } from '../../../helpers/localizedData';
912

1013
import styles from './DateTime.less';
1114

1215
const isAfter = unixTime => {
1316
return unixTime * 1000 < Date.now();
1417
};
1518

19+
const getLocalizedIntlDateFormatter = defaultMemoize(locale =>
20+
locale && knownLocales.includes(locale) ? new Intl.DateTimeFormat(locale) : null
21+
);
22+
1623
const dateTime = ({
1724
unixts,
1825
isDeadline = false,
@@ -42,7 +49,16 @@ const dateTime = ({
4249
className={classnames({
4350
'text-nowrap': true,
4451
})}>
45-
<FormattedDate value={unixts * 1000} />
52+
<UserUIDataContext.Consumer>
53+
{({ dateFormatOverride = null }) =>
54+
getLocalizedIntlDateFormatter(dateFormatOverride) ? (
55+
getLocalizedIntlDateFormatter(dateFormatOverride).format(unixts * 1000)
56+
) : (
57+
<FormattedDate value={unixts * 1000} />
58+
)
59+
}
60+
</UserUIDataContext.Consumer>
61+
4662
{(showTime || showRelative) && <span className="px-1"> </span>}
4763
</span>
4864
)}

src/locales/cs.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,7 @@
606606
"app.editUserSettings.submissionEvaluatedEmails": "Řešení vyhodnoceno (pokud trvalo delší dobu)",
607607
"app.editUserSettings.title": "Uživatelské nastavení",
608608
"app.editUserUIData.darkTheme": "Použít tmavý motiv pro editor zdrojového kódu",
609+
"app.editUserUIData.dateFormatOverride": "Explicitní nastavení formátu data (pokud není formát nastaven, určí se podle aktuálního jazyka):",
609610
"app.editUserUIData.defaultPage": "Výchozí stránka (po přihlášení):",
610611
"app.editUserUIData.defaultPage.dashboard": "Přehled",
611612
"app.editUserUIData.defaultPage.home": "Domovská stránka (o ReCodExu)",

src/locales/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,7 @@
606606
"app.editUserSettings.submissionEvaluatedEmails": "Submission evaluation (when taking a long time)",
607607
"app.editUserSettings.title": "User Settings",
608608
"app.editUserUIData.darkTheme": "Use a dark theme for the source code viewers and editors",
609+
"app.editUserUIData.dateFormatOverride": "Date format override (if not set, date is formatted according to selected language):",
609610
"app.editUserUIData.defaultPage": "Default page (after login):",
610611
"app.editUserUIData.defaultPage.dashboard": "Dashboard",
611612
"app.editUserUIData.defaultPage.home": "Home page (about)",

src/pages/EditUser/EditUser.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,15 @@ const prepareUserUIDataInitialValues = defaultMemoize(
5151
openedSidebar = true,
5252
useGravatar = true,
5353
defaultPage = null,
54+
dateFormatOverride = null,
5455
editorFontSize = EDITOR_FONT_SIZE_DEFAULT,
5556
}) => ({
5657
darkTheme,
5758
vimMode,
5859
openedSidebar,
5960
useGravatar,
6061
defaultPage: defaultPage || '',
62+
dateFormatOverride: dateFormatOverride || '',
6163
editorFontSize: prepareNumber(editorFontSize, EDITOR_FONT_SIZE_MIN, EDITOR_FONT_SIZE_MAX, EDITOR_FONT_SIZE_DEFAULT),
6264
})
6365
);

0 commit comments

Comments
 (0)