mirror of
https://github.com/kremalicious/umami.git
synced 2024-12-18 15:23:38 +01:00
Merge pull request #534 from gnarlex/fix-start-of-week
Use locale to determine start of week
This commit is contained in:
commit
e486acb316
@ -20,6 +20,7 @@ import Button from './Button';
|
|||||||
import useLocale from 'hooks/useLocale';
|
import useLocale from 'hooks/useLocale';
|
||||||
import { dateFormat } from 'lib/date';
|
import { dateFormat } from 'lib/date';
|
||||||
import { chunk } from 'lib/array';
|
import { chunk } from 'lib/array';
|
||||||
|
import { dateLocales } from 'lib/lang';
|
||||||
import Chevron from 'assets/chevron-down.svg';
|
import Chevron from 'assets/chevron-down.svg';
|
||||||
import Cross from 'assets/times.svg';
|
import Cross from 'assets/times.svg';
|
||||||
import styles from './Calendar.module.css';
|
import styles from './Calendar.module.css';
|
||||||
@ -105,8 +106,8 @@ export default function Calendar({ date, minDate, maxDate, onChange }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const DaySelector = ({ date, minDate, maxDate, locale, onSelect }) => {
|
const DaySelector = ({ date, minDate, maxDate, locale, onSelect }) => {
|
||||||
const startWeek = startOfWeek(date);
|
const startWeek = startOfWeek(date, { locale: dateLocales[locale] });
|
||||||
const startMonth = startOfMonth(date);
|
const startMonth = startOfMonth(date, { locale: dateLocales[locale] });
|
||||||
const startDay = subDays(startMonth, startMonth.getDay());
|
const startDay = subDays(startMonth, startMonth.getDay());
|
||||||
const month = date.getMonth();
|
const month = date.getMonth();
|
||||||
const year = date.getFullYear();
|
const year = date.getFullYear();
|
||||||
|
@ -55,6 +55,7 @@ const filterOptions = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
function DateFilter({ value, startDate, endDate, onChange, className }) {
|
function DateFilter({ value, startDate, endDate, onChange, className }) {
|
||||||
|
const [locale] = useLocale();
|
||||||
const [showPicker, setShowPicker] = useState(false);
|
const [showPicker, setShowPicker] = useState(false);
|
||||||
const displayValue =
|
const displayValue =
|
||||||
value === 'custom' ? (
|
value === 'custom' ? (
|
||||||
@ -68,7 +69,7 @@ function DateFilter({ value, startDate, endDate, onChange, className }) {
|
|||||||
setShowPicker(true);
|
setShowPicker(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
onChange(getDateRange(value));
|
onChange(getDateRange(value, locale));
|
||||||
}
|
}
|
||||||
|
|
||||||
function handlePickerChange(value) {
|
function handlePickerChange(value) {
|
||||||
|
@ -8,9 +8,11 @@ import Refresh from 'assets/redo.svg';
|
|||||||
import Dots from 'assets/ellipsis-h.svg';
|
import Dots from 'assets/ellipsis-h.svg';
|
||||||
import useDateRange from 'hooks/useDateRange';
|
import useDateRange from 'hooks/useDateRange';
|
||||||
import { getDateRange } from '../../lib/date';
|
import { getDateRange } from '../../lib/date';
|
||||||
|
import useLocale from 'hooks/useLocale';
|
||||||
|
|
||||||
function RefreshButton({ websiteId }) {
|
function RefreshButton({ websiteId }) {
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
const [locale] = useLocale();
|
||||||
const [dateRange] = useDateRange(websiteId);
|
const [dateRange] = useDateRange(websiteId);
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const completed = useSelector(state => state.queries[`/api/website/${websiteId}/stats`]);
|
const completed = useSelector(state => state.queries[`/api/website/${websiteId}/stats`]);
|
||||||
@ -18,7 +20,7 @@ function RefreshButton({ websiteId }) {
|
|||||||
function handleClick() {
|
function handleClick() {
|
||||||
if (dateRange) {
|
if (dateRange) {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
dispatch(setDateRange(websiteId, getDateRange(dateRange.value)));
|
dispatch(setDateRange(websiteId, getDateRange(dateRange.value, locale)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,13 +6,15 @@ import useDateRange from 'hooks/useDateRange';
|
|||||||
import { DEFAULT_DATE_RANGE } from 'lib/constants';
|
import { DEFAULT_DATE_RANGE } from 'lib/constants';
|
||||||
import { getDateRange } from 'lib/date';
|
import { getDateRange } from 'lib/date';
|
||||||
import styles from './DateRangeSetting.module.css';
|
import styles from './DateRangeSetting.module.css';
|
||||||
|
import useLocale from 'hooks/useLocale';
|
||||||
|
|
||||||
export default function DateRangeSetting() {
|
export default function DateRangeSetting() {
|
||||||
|
const [locale] = useLocale();
|
||||||
const [dateRange, setDateRange] = useDateRange();
|
const [dateRange, setDateRange] = useDateRange();
|
||||||
const { startDate, endDate, value } = dateRange;
|
const { startDate, endDate, value } = dateRange;
|
||||||
|
|
||||||
function handleReset() {
|
function handleReset() {
|
||||||
setDateRange(getDateRange(DEFAULT_DATE_RANGE));
|
setDateRange(getDateRange(DEFAULT_DATE_RANGE, locale));
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -5,9 +5,11 @@ import { getItem, setItem } from 'lib/web';
|
|||||||
import { setDateRange } from '../redux/actions/websites';
|
import { setDateRange } from '../redux/actions/websites';
|
||||||
import { DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE } from 'lib/constants';
|
import { DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE } from 'lib/constants';
|
||||||
import useForceUpdate from './useForceUpdate';
|
import useForceUpdate from './useForceUpdate';
|
||||||
|
import useLocale from './useLocale';
|
||||||
|
|
||||||
export default function useDateRange(websiteId, defaultDateRange = DEFAULT_DATE_RANGE) {
|
export default function useDateRange(websiteId, defaultDateRange = DEFAULT_DATE_RANGE) {
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
const [locale] = useLocale();
|
||||||
const dateRange = useSelector(state => state.websites[websiteId]?.dateRange);
|
const dateRange = useSelector(state => state.websites[websiteId]?.dateRange);
|
||||||
const forceUpdate = useForceUpdate();
|
const forceUpdate = useForceUpdate();
|
||||||
|
|
||||||
@ -16,7 +18,7 @@ export default function useDateRange(websiteId, defaultDateRange = DEFAULT_DATE_
|
|||||||
|
|
||||||
if (globalDefault) {
|
if (globalDefault) {
|
||||||
if (typeof globalDefault === 'string') {
|
if (typeof globalDefault === 'string') {
|
||||||
globalDateRange = getDateRange(globalDefault);
|
globalDateRange = getDateRange(globalDefault, locale);
|
||||||
} else if (typeof globalDefault === 'object') {
|
} else if (typeof globalDefault === 'object') {
|
||||||
globalDateRange = {
|
globalDateRange = {
|
||||||
...globalDefault,
|
...globalDefault,
|
||||||
@ -37,5 +39,5 @@ export default function useDateRange(websiteId, defaultDateRange = DEFAULT_DATE_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return [dateRange || globalDateRange || getDateRange(defaultDateRange), saveDateRange];
|
return [dateRange || globalDateRange || getDateRange(defaultDateRange, locale), saveDateRange];
|
||||||
}
|
}
|
||||||
|
@ -36,8 +36,9 @@ export function getLocalTime(t) {
|
|||||||
return addMinutes(new Date(t), new Date().getTimezoneOffset());
|
return addMinutes(new Date(t), new Date().getTimezoneOffset());
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getDateRange(value) {
|
export function getDateRange(value, locale = 'en-US') {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
|
const localeOptions = dateLocales[locale];
|
||||||
|
|
||||||
const { num, unit } = value.match(/^(?<num>[0-9]+)(?<unit>hour|day|week|month|year)$/).groups;
|
const { num, unit } = value.match(/^(?<num>[0-9]+)(?<unit>hour|day|week|month|year)$/).groups;
|
||||||
|
|
||||||
@ -52,8 +53,8 @@ export function getDateRange(value) {
|
|||||||
};
|
};
|
||||||
case 'week':
|
case 'week':
|
||||||
return {
|
return {
|
||||||
startDate: startOfWeek(now),
|
startDate: startOfWeek(now, { locale: localeOptions }),
|
||||||
endDate: endOfWeek(now),
|
endDate: endOfWeek(now, { locale: localeOptions }),
|
||||||
unit: 'day',
|
unit: 'day',
|
||||||
value,
|
value,
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user