commit
4047a7ec23
378 changed files with 29334 additions and 0 deletions
43
hooks/useDateRange.js
Normal file
43
hooks/useDateRange.js
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { parseISO } from 'date-fns';
|
||||
import { getDateRange } from 'lib/date';
|
||||
import { getItem, setItem } from 'lib/web';
|
||||
import { setDateRange } from '../redux/actions/websites';
|
||||
import { DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE } from 'lib/constants';
|
||||
import useForceUpdate from './useForceUpdate';
|
||||
import useLocale from './useLocale';
|
||||
|
||||
export default function useDateRange(websiteId, defaultDateRange = DEFAULT_DATE_RANGE) {
|
||||
const dispatch = useDispatch();
|
||||
const { locale } = useLocale();
|
||||
const dateRange = useSelector(state => state.websites[websiteId]?.dateRange);
|
||||
const forceUpdate = useForceUpdate();
|
||||
|
||||
const globalDefault = getItem(DATE_RANGE_CONFIG);
|
||||
let globalDateRange;
|
||||
|
||||
if (globalDefault) {
|
||||
if (typeof globalDefault === 'string') {
|
||||
globalDateRange = getDateRange(globalDefault, locale);
|
||||
} else if (typeof globalDefault === 'object') {
|
||||
globalDateRange = {
|
||||
...globalDefault,
|
||||
startDate: parseISO(globalDefault.startDate),
|
||||
endDate: parseISO(globalDefault.endDate),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
function saveDateRange(values) {
|
||||
const { value } = values;
|
||||
|
||||
if (websiteId) {
|
||||
dispatch(setDateRange(websiteId, values));
|
||||
} else {
|
||||
setItem(DATE_RANGE_CONFIG, value === 'custom' ? values : value);
|
||||
forceUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
return [dateRange || globalDateRange || getDateRange(defaultDateRange, locale), saveDateRange];
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue