Added reports section.

This commit is contained in:
Mike Cao 2023-05-17 23:20:06 -07:00
parent ad918c5bba
commit a5700d4a25
36 changed files with 422 additions and 43 deletions

17
hooks/index.js Normal file
View file

@ -0,0 +1,17 @@
export * from './useApi';
export * from './useConfig';
export * from './useCountryNames';
export * from './useDateRange';
export * from './useDocumentClick';
export * from './useEscapeKey';
export * from './useForceUpdate';
export * from './useLanguageNames';
export * from './useLocale';
export * from './useMessages';
export * from './usePageQuery';
export * from './useRequireLogin';
export * from './useShareToken';
export * from './useSticky';
export * from './useTheme';
export * from './useTimezone';
export * from './useUser';

View file

@ -7,7 +7,7 @@ import useStore from 'store/app';
const selector = state => state.shareToken;
export default function useApi() {
export function useApi() {
const { basePath } = useRouter();
const shareToken = useStore(selector);
@ -18,3 +18,5 @@ export default function useApi() {
return { get, post, put, del, ...reactQuery };
}
export default useApi;

View file

@ -4,7 +4,7 @@ import useApi from 'hooks/useApi';
let loading = false;
export default function useConfig() {
export function useConfig() {
const { config } = useStore();
const { get } = useApi();
@ -23,3 +23,5 @@ export default function useConfig() {
return config || {};
}
export default useConfig;

View file

@ -7,7 +7,7 @@ const countryNames = {
'en-US': enUS,
};
export default function useCountryNames(locale) {
export function useCountryNames(locale) {
const [list, setList] = useState(countryNames[locale] || enUS);
const { basePath } = useRouter();
@ -32,3 +32,5 @@ export default function useCountryNames(locale) {
return list;
}
export default useCountryNames;

View file

@ -5,7 +5,7 @@ import useLocale from './useLocale';
import websiteStore, { setWebsiteDateRange } from 'store/websites';
import appStore, { setDateRange } from 'store/app';
export default function useDateRange(websiteId) {
export function useDateRange(websiteId) {
const { locale } = useLocale();
const websiteConfig = websiteStore(state => state[websiteId]?.dateRange);
const defaultConfig = DEFAULT_DATE_RANGE;
@ -23,3 +23,5 @@ export default function useDateRange(websiteId) {
return [dateRange, saveDateRange];
}
export default useDateRange;

View file

@ -1,6 +1,6 @@
import { useEffect } from 'react';
export default function useDocumentClick(handler) {
export function useDocumentClick(handler) {
useEffect(() => {
document.addEventListener('click', handler);
@ -11,3 +11,5 @@ export default function useDocumentClick(handler) {
return null;
}
export default useDocumentClick;

View file

@ -1,6 +1,6 @@
import { useEffect, useCallback } from 'react';
export default function useEscapeKey(handler) {
export function useEscapeKey(handler) {
const escFunction = useCallback(event => {
if (event.keyCode === 27) {
handler(event);
@ -17,3 +17,5 @@ export default function useEscapeKey(handler) {
return null;
}
export default useEscapeKey;

View file

@ -1,9 +1,11 @@
import { useCallback, useState } from 'react';
export default function useForceUpdate() {
export function useForceUpdate() {
const [, update] = useState(Object.create(null));
return useCallback(() => {
update(Object.create(null));
}, [update]);
}
export default useForceUpdate;

View file

@ -7,7 +7,7 @@ const languageNames = {
'en-US': enUS,
};
export default function useLanguageNames(locale) {
export function useLanguageNames(locale) {
const [list, setList] = useState(languageNames[locale] || enUS);
const { basePath } = useRouter();
@ -32,3 +32,5 @@ export default function useLanguageNames(locale) {
return list;
}
export default useLanguageNames;

View file

@ -13,7 +13,7 @@ const messages = {
const selector = state => state.locale;
export default function useLocale() {
export function useLocale() {
const locale = useStore(selector);
const { basePath } = useRouter();
const forceUpdate = useForceUpdate();
@ -61,3 +61,5 @@ export default function useLocale() {
return { locale, saveLocale, messages, dir, dateLocale };
}
export default useLocale;

View file

@ -1,7 +1,7 @@
import { useIntl, FormattedMessage } from 'react-intl';
import { messages, labels } from 'components/messages';
export default function useMessages() {
export function useMessages() {
const { formatMessage } = useIntl();
function getMessage(id) {
@ -12,3 +12,5 @@ export default function useMessages() {
return { formatMessage, FormattedMessage, messages, labels, getMessage };
}
export default useMessages;

View file

@ -2,7 +2,7 @@ import { useMemo } from 'react';
import { useRouter } from 'next/router';
import { buildUrl } from 'next-basics';
export default function usePageQuery() {
export function usePageQuery() {
const router = useRouter();
const { pathname, search } = location;
const { asPath } = router;
@ -29,3 +29,5 @@ export default function usePageQuery() {
return { pathname, query, resolveUrl, router };
}
export default usePageQuery;

View file

@ -3,7 +3,7 @@ import { useRouter } from 'next/router';
import useApi from 'hooks/useApi';
import useUser from 'hooks/useUser';
export default function useRequireLogin() {
export function useRequireLogin() {
const router = useRouter();
const { get } = useApi();
const { user, setUser } = useUser();
@ -26,3 +26,5 @@ export default function useRequireLogin() {
return { user };
}
export default useRequireLogin;

View file

@ -4,7 +4,7 @@ import useApi from './useApi';
const selector = state => state.shareToken;
export default function useShareToken(shareId) {
export function useShareToken(shareId) {
const shareToken = useStore(selector);
const { get } = useApi();
@ -24,3 +24,5 @@ export default function useShareToken(shareId) {
return shareToken;
}
export default useShareToken;

View file

@ -1,6 +1,6 @@
import { useState, useEffect, useRef } from 'react';
export default function useSticky({ enabled = true, threshold = 1 }) {
export function useSticky({ enabled = true, threshold = 1 }) {
const [isSticky, setIsSticky] = useState(false);
const ref = useRef(null);
@ -21,3 +21,5 @@ export default function useSticky({ enabled = true, threshold = 1 }) {
return { ref, isSticky };
}
export default useSticky;

View file

@ -5,7 +5,7 @@ import { THEME_CONFIG } from 'lib/constants';
const selector = state => state.theme;
export default function useTheme() {
export function useTheme() {
const defaultTheme =
typeof window !== 'undefined'
? window?.matchMedia('(prefers-color-scheme: dark)')?.matches
@ -34,3 +34,5 @@ export default function useTheme() {
return [theme, saveTheme];
}
export default useTheme;

View file

@ -3,7 +3,7 @@ import { getTimezone } from 'lib/date';
import { getItem, setItem } from 'next-basics';
import { TIMEZONE_CONFIG } from 'lib/constants';
export default function useTimezone() {
export function useTimezone() {
const [timezone, setTimezone] = useState(getItem(TIMEZONE_CONFIG) || getTimezone());
const saveTimezone = useCallback(
@ -16,3 +16,5 @@ export default function useTimezone() {
return [timezone, saveTimezone];
}
export default useTimezone;

View file

@ -2,8 +2,10 @@ import useStore, { setUser } from 'store/app';
const selector = state => state.user;
export default function useUser() {
export function useUser() {
const user = useStore(selector);
return { user, setUser };
}
export default useUser;