mirror of
https://github.com/umami-software/umami.git
synced 2026-02-08 22:57:12 +01:00
Added reports section.
This commit is contained in:
parent
ad918c5bba
commit
a5700d4a25
36 changed files with 422 additions and 43 deletions
17
hooks/index.js
Normal file
17
hooks/index.js
Normal 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';
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue