UNPKG

2.04 kBJavaScriptView Raw
1import React, { useContext, useMemo } from 'react';
2import * as IntlLocalizers from './IntlLocalizer';
3import { getMessages } from './messages';
4
5function mergeWithDefaults(date, number, messages, formatOverrides = {}) {
6 if (!date && !number) throw new Error('This component requires a Localizer but none was provided');
7 return {
8 formatOverrides,
9 messages: getMessages(messages),
10
11 formatDate(value, format, userFormat) {
12 return date[format](value, userFormat != null ? userFormat : this.formatOverrides[format]);
13 },
14
15 formatNumber(value, userFormat) {
16 return number.format(value, userFormat != null ? userFormat : this.formatOverrides.number);
17 },
18
19 parseDate: date.parse.bind(date),
20 parseNumber: number.parse.bind(number),
21 decimalCharacter: number.decimalCharacter.bind(number),
22 firstOfWeek: date.firstOfWeek.bind(date)
23 };
24}
25
26const LocalizerContext = /*#__PURE__*/React.createContext(mergeWithDefaults(new IntlLocalizers.DateLocalizer(), new IntlLocalizers.NumberLocalizer()));
27
28const Localization = ({
29 date: _date = new IntlLocalizers.DateLocalizer(),
30 number: _number = new IntlLocalizers.NumberLocalizer(),
31 messages,
32 children
33}) => {
34 // eslint-disable-next-line react-hooks/exhaustive-deps
35 const localizer = useMemo(() => mergeWithDefaults(_date, _number, messages), [_date, _number, // eslint-disable-next-line react-hooks/exhaustive-deps
36 JSON.stringify(messages)]);
37 return /*#__PURE__*/React.createElement(LocalizerContext.Provider, {
38 value: localizer
39 }, children);
40};
41
42export const useLocalizer = (messages, formats) => {
43 const localizer = useContext(LocalizerContext);
44 return useMemo(() => {
45 if (!messages && !formats) return localizer;
46 return Object.assign({}, localizer, {
47 messages: getMessages(Object.assign({}, localizer.messages, messages)),
48 formatOverrides: Object.assign({}, localizer.formatOverrides, formats)
49 });
50 }, [messages, formats, localizer]);
51};
52Localization.useLocalizer = useLocalizer;
53export default Localization;
\No newline at end of file