mirror of
https://github.com/umami-software/umami.git
synced 2026-02-04 04:37:11 +01:00
Use context hooks.
This commit is contained in:
parent
00adb00d2d
commit
600a3d28c3
13 changed files with 46 additions and 44 deletions
|
|
@ -9,15 +9,13 @@ import {
|
||||||
PasswordField,
|
PasswordField,
|
||||||
useToast,
|
useToast,
|
||||||
} from '@umami/react-zen';
|
} from '@umami/react-zen';
|
||||||
import { useApi, useLoginQuery, useMessages, useModified } from '@/components/hooks';
|
import { useApi, useLoginQuery, useMessages, useModified, useUser } from '@/components/hooks';
|
||||||
import { ROLES } from '@/lib/constants';
|
import { ROLES } from '@/lib/constants';
|
||||||
import { useContext } from 'react';
|
|
||||||
import { UserContext } from './UserProvider';
|
|
||||||
|
|
||||||
export function UserEditForm({ userId, onSave }: { userId: string; onSave?: () => void }) {
|
export function UserEditForm({ userId, onSave }: { userId: string; onSave?: () => void }) {
|
||||||
const { formatMessage, labels, messages, getMessage } = useMessages();
|
const { formatMessage, labels, messages, getMessage } = useMessages();
|
||||||
const { post, useMutation } = useApi();
|
const { post, useMutation } = useApi();
|
||||||
const user = useContext(UserContext);
|
const user = useUser();
|
||||||
const { user: login } = useLoginQuery();
|
const { user: login } = useLoginQuery();
|
||||||
const { toast } = useToast();
|
const { toast } = useToast();
|
||||||
const { touch } = useModified();
|
const { touch } = useModified();
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,9 @@
|
||||||
import { useContext } from 'react';
|
|
||||||
import { User } from '@/components/icons';
|
import { User } from '@/components/icons';
|
||||||
import { PageHeader } from '@/components/common/PageHeader';
|
import { PageHeader } from '@/components/common/PageHeader';
|
||||||
import { UserContext } from '@/app/(main)/admin/users/[userId]/UserProvider';
|
import { useUser } from '@/components/hooks';
|
||||||
|
|
||||||
export function UserHeader() {
|
export function UserHeader() {
|
||||||
const user = useContext(UserContext);
|
const user = useUser();
|
||||||
|
|
||||||
return <PageHeader title={user?.username} icon={<User />} />;
|
return <PageHeader title={user?.username} icon={<User />} />;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,7 @@ import {
|
||||||
useToast,
|
useToast,
|
||||||
} from '@umami/react-zen';
|
} from '@umami/react-zen';
|
||||||
import { getRandomChars } from '@/lib/crypto';
|
import { getRandomChars } from '@/lib/crypto';
|
||||||
import { useContext } from 'react';
|
import { useApi, useMessages, useModified, useTeam } from '@/components/hooks';
|
||||||
import { useApi, useMessages, useModified } from '@/components/hooks';
|
|
||||||
import { TeamContext } from '@/app/(main)/teams/TeamProvider';
|
|
||||||
|
|
||||||
const generateId = () => `team_${getRandomChars(16)}`;
|
const generateId = () => `team_${getRandomChars(16)}`;
|
||||||
|
|
||||||
|
|
@ -23,7 +21,7 @@ export function TeamEditForm({
|
||||||
allowEdit?: boolean;
|
allowEdit?: boolean;
|
||||||
onSave?: () => void;
|
onSave?: () => void;
|
||||||
}) {
|
}) {
|
||||||
const team = useContext(TeamContext);
|
const team = useTeam();
|
||||||
const { formatMessage, labels, messages } = useMessages();
|
const { formatMessage, labels, messages } = useMessages();
|
||||||
const { post, useMutation } = useApi();
|
const { post, useMutation } = useApi();
|
||||||
const { toast } = useToast();
|
const { toast } = useToast();
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import { useContext, useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { Column, Tabs, TabList, Tab, TabPanel } from '@umami/react-zen';
|
import { Column, Tabs, TabList, Tab, TabPanel } from '@umami/react-zen';
|
||||||
import { TeamContext } from '@/app/(main)/teams/TeamProvider';
|
import { useLoginQuery, useMessages, useNavigation, useTeam } from '@/components/hooks';
|
||||||
import { useLoginQuery, useMessages, useNavigation } from '@/components/hooks';
|
|
||||||
|
|
||||||
import { ROLES } from '@/lib/constants';
|
import { ROLES } from '@/lib/constants';
|
||||||
import { Users } from '@/components/icons';
|
import { Users } from '@/components/icons';
|
||||||
|
|
@ -14,7 +13,7 @@ import { PageHeader } from '@/components/common/PageHeader';
|
||||||
import { Panel } from '@/components/common/Panel';
|
import { Panel } from '@/components/common/Panel';
|
||||||
|
|
||||||
export function TeamSettings({ teamId }: { teamId: string }) {
|
export function TeamSettings({ teamId }: { teamId: string }) {
|
||||||
const team = useContext(TeamContext);
|
const team = useTeam();
|
||||||
const { formatMessage, labels } = useMessages();
|
const { formatMessage, labels } = useMessages();
|
||||||
const { user } = useLoginQuery();
|
const { user } = useLoginQuery();
|
||||||
const { query, pathname } = useNavigation();
|
const { query, pathname } = useNavigation();
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,19 @@
|
||||||
import { useFormat } from '@/components//hooks/useFormat';
|
import { useFormat } from '@/components//hooks/useFormat';
|
||||||
import { Empty } from '@/components/common/Empty';
|
import { Empty } from '@/components/common/Empty';
|
||||||
import { FilterButtons } from '@/components/input/FilterButtons';
|
import { FilterButtons } from '@/components/input/FilterButtons';
|
||||||
import { useCountryNames, useLocale, useMessages, useTimezone } from '@/components/hooks';
|
import {
|
||||||
|
useCountryNames,
|
||||||
|
useLocale,
|
||||||
|
useMessages,
|
||||||
|
useTimezone,
|
||||||
|
useWebsite,
|
||||||
|
} from '@/components/hooks';
|
||||||
import { Eye, Visitor, Bolt } from '@/components/icons';
|
import { Eye, Visitor, Bolt } from '@/components/icons';
|
||||||
import { BROWSERS, OS_NAMES } from '@/lib/constants';
|
import { BROWSERS, OS_NAMES } from '@/lib/constants';
|
||||||
import { stringToColor } from '@/lib/format';
|
import { stringToColor } from '@/lib/format';
|
||||||
import { useContext, useMemo, useState } from 'react';
|
import { useMemo, useState } from 'react';
|
||||||
import { Icon, SearchField, StatusLight, Text } from '@umami/react-zen';
|
import { Icon, SearchField, StatusLight, Text } from '@umami/react-zen';
|
||||||
import { FixedSizeList } from 'react-window';
|
import { FixedSizeList } from 'react-window';
|
||||||
import { WebsiteContext } from '@/app/(main)/websites/WebsiteProvider';
|
|
||||||
import styles from './RealtimeLog.module.css';
|
import styles from './RealtimeLog.module.css';
|
||||||
|
|
||||||
const TYPE_ALL = 'all';
|
const TYPE_ALL = 'all';
|
||||||
|
|
@ -23,7 +28,7 @@ const icons = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export function RealtimeLog({ data }: { data: any }) {
|
export function RealtimeLog({ data }: { data: any }) {
|
||||||
const website = useContext(WebsiteContext);
|
const website = useWebsite();
|
||||||
const [search, setSearch] = useState('');
|
const [search, setSearch] = useState('');
|
||||||
const { formatMessage, labels, messages } = useMessages();
|
const { formatMessage, labels, messages } = useMessages();
|
||||||
const { formatValue } = useFormat();
|
const { formatValue } = useFormat();
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,16 @@
|
||||||
import { useContext, useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { Row } from '@umami/react-zen';
|
import { Row } from '@umami/react-zen';
|
||||||
import thenby from 'thenby';
|
import thenby from 'thenby';
|
||||||
import { percentFilter } from '@/lib/filters';
|
import { percentFilter } from '@/lib/filters';
|
||||||
import { ListTable } from '@/components/metrics/ListTable';
|
import { ListTable } from '@/components/metrics/ListTable';
|
||||||
import { useMessages } from '@/components/hooks';
|
import { useMessages, useWebsite } from '@/components/hooks';
|
||||||
import { RealtimeData } from '@/lib/types';
|
|
||||||
import { WebsiteContext } from '../WebsiteProvider';
|
|
||||||
import { FilterButtons } from '@/components/input/FilterButtons';
|
import { FilterButtons } from '@/components/input/FilterButtons';
|
||||||
|
|
||||||
const FILTER_REFERRERS = 'filter-referrers';
|
const FILTER_REFERRERS = 'filter-referrers';
|
||||||
const FILTER_PAGES = 'filter-pages';
|
const FILTER_PAGES = 'filter-pages';
|
||||||
|
|
||||||
export function RealtimeUrls({ data }: { data: RealtimeData }) {
|
export function RealtimeUrls({ data }: { data: any }) {
|
||||||
const website = useContext(WebsiteContext);
|
const website = useWebsite();
|
||||||
const { formatMessage, labels } = useMessages();
|
const { formatMessage, labels } = useMessages();
|
||||||
const { referrers, urls } = data || {};
|
const { referrers, urls } = data || {};
|
||||||
const [filter, setFilter] = useState(FILTER_REFERRERS);
|
const [filter, setFilter] = useState(FILTER_REFERRERS);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
import { useContext } from 'react';
|
|
||||||
import {
|
import {
|
||||||
FormSubmitButton,
|
FormSubmitButton,
|
||||||
Form,
|
Form,
|
||||||
|
|
@ -7,12 +6,11 @@ import {
|
||||||
TextField,
|
TextField,
|
||||||
useToast,
|
useToast,
|
||||||
} from '@umami/react-zen';
|
} from '@umami/react-zen';
|
||||||
import { useApi, useMessages, useModified } from '@/components/hooks';
|
import { useApi, useMessages, useModified, useWebsite } from '@/components/hooks';
|
||||||
import { DOMAIN_REGEX } from '@/lib/constants';
|
import { DOMAIN_REGEX } from '@/lib/constants';
|
||||||
import { WebsiteContext } from '@/app/(main)/websites/WebsiteProvider';
|
|
||||||
|
|
||||||
export function WebsiteEditForm({ websiteId, onSave }: { websiteId: string; onSave?: () => void }) {
|
export function WebsiteEditForm({ websiteId, onSave }: { websiteId: string; onSave?: () => void }) {
|
||||||
const website = useContext(WebsiteContext);
|
const website = useWebsite();
|
||||||
const { formatMessage, labels, messages } = useMessages();
|
const { formatMessage, labels, messages } = useMessages();
|
||||||
const { post, useMutation } = useApi();
|
const { post, useMutation } = useApi();
|
||||||
const { toast } = useToast();
|
const { toast } = useToast();
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,12 @@
|
||||||
import { useContext } from 'react';
|
|
||||||
import { Tabs, TabList, Tab, TabPanel } from '@umami/react-zen';
|
import { Tabs, TabList, Tab, TabPanel } from '@umami/react-zen';
|
||||||
import { WebsiteContext } from '@/app/(main)/websites/WebsiteProvider';
|
import { useMessages, useWebsite } from '@/components/hooks';
|
||||||
import { useMessages } from '@/components/hooks';
|
|
||||||
import { WebsiteShareForm } from './WebsiteShareForm';
|
import { WebsiteShareForm } from './WebsiteShareForm';
|
||||||
import { WebsiteTrackingCode } from './WebsiteTrackingCode';
|
import { WebsiteTrackingCode } from './WebsiteTrackingCode';
|
||||||
import { WebsiteData } from './WebsiteData';
|
import { WebsiteData } from './WebsiteData';
|
||||||
import { WebsiteEditForm } from './WebsiteEditForm';
|
import { WebsiteEditForm } from './WebsiteEditForm';
|
||||||
|
|
||||||
export function WebsiteSettings({ websiteId }: { websiteId: string; openExternal?: boolean }) {
|
export function WebsiteSettings({ websiteId }: { websiteId: string; openExternal?: boolean }) {
|
||||||
const website = useContext(WebsiteContext);
|
const website = useWebsite();
|
||||||
const { formatMessage, labels } = useMessages();
|
const { formatMessage, labels } = useMessages();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,9 @@
|
||||||
import { useContext } from 'react';
|
|
||||||
import { WebsiteContext } from '@/app/(main)/websites/WebsiteProvider';
|
|
||||||
import { PageHeader } from '@/components/common/PageHeader';
|
import { PageHeader } from '@/components/common/PageHeader';
|
||||||
import { Globe } from '@/components/icons';
|
import { Globe } from '@/components/icons';
|
||||||
|
import { useWebsite } from '@/components/hooks';
|
||||||
|
|
||||||
export function WebsiteSettingsHeader() {
|
export function WebsiteSettingsHeader() {
|
||||||
const website = useContext(WebsiteContext);
|
const website = useWebsite();
|
||||||
|
|
||||||
return <PageHeader title={website?.name} icon={<Globe />} />;
|
return <PageHeader title={website?.name} icon={<Globe />} />;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { Key, useContext, useState } from 'react';
|
import { Key, useState } from 'react';
|
||||||
import {
|
import {
|
||||||
Button,
|
Button,
|
||||||
Form,
|
Form,
|
||||||
|
|
@ -10,8 +10,13 @@ import {
|
||||||
ListItem,
|
ListItem,
|
||||||
Text,
|
Text,
|
||||||
} from '@umami/react-zen';
|
} from '@umami/react-zen';
|
||||||
import { useApi, useLoginQuery, useMessages, useUserTeamsQuery } from '@/components/hooks';
|
import {
|
||||||
import { WebsiteContext } from '@/app/(main)/websites/WebsiteProvider';
|
useApi,
|
||||||
|
useLoginQuery,
|
||||||
|
useMessages,
|
||||||
|
useUserTeamsQuery,
|
||||||
|
useWebsite,
|
||||||
|
} from '@/components/hooks';
|
||||||
import { ROLES } from '@/lib/constants';
|
import { ROLES } from '@/lib/constants';
|
||||||
|
|
||||||
export function WebsiteTransferForm({
|
export function WebsiteTransferForm({
|
||||||
|
|
@ -24,7 +29,7 @@ export function WebsiteTransferForm({
|
||||||
onClose?: () => void;
|
onClose?: () => void;
|
||||||
}) {
|
}) {
|
||||||
const { user } = useLoginQuery();
|
const { user } = useLoginQuery();
|
||||||
const website = useContext(WebsiteContext);
|
const website = useWebsite();
|
||||||
const [teamId, setTeamId] = useState<string>(null);
|
const [teamId, setTeamId] = useState<string>(null);
|
||||||
const { formatMessage, labels, messages } = useMessages();
|
const { formatMessage, labels, messages } = useMessages();
|
||||||
const { post, useMutation } = useApi();
|
const { post, useMutation } = useApi();
|
||||||
|
|
|
||||||
6
src/components/hooks/context/useUser.ts
Normal file
6
src/components/hooks/context/useUser.ts
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
import { UserContext } from '@/app/(main)/admin/users/[userId]/UserProvider';
|
||||||
|
import { useContext } from 'react';
|
||||||
|
|
||||||
|
export function useUser() {
|
||||||
|
return useContext(UserContext);
|
||||||
|
}
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
export * from './context/useLink';
|
export * from './context/useLink';
|
||||||
export * from './context/usePixel';
|
export * from './context/usePixel';
|
||||||
export * from './context/useTeam';
|
export * from './context/useTeam';
|
||||||
|
export * from './context/useUser';
|
||||||
export * from './context/useWebsite';
|
export * from './context/useWebsite';
|
||||||
|
|
||||||
// Query hooks
|
// Query hooks
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,7 @@
|
||||||
import { WebsiteContext } from '@/app/(main)/websites/WebsiteProvider';
|
|
||||||
import { FilterButtons } from '@/components/input/FilterButtons';
|
import { FilterButtons } from '@/components/input/FilterButtons';
|
||||||
import { FilterLink } from '@/components/common/FilterLink';
|
import { FilterLink } from '@/components/common/FilterLink';
|
||||||
import { useMessages, useNavigation } from '@/components/hooks';
|
import { useMessages, useNavigation, useWebsite } from '@/components/hooks';
|
||||||
import { emptyFilter } from '@/lib/filters';
|
import { emptyFilter } from '@/lib/filters';
|
||||||
import { useContext } from 'react';
|
|
||||||
import { MetricsTable, MetricsTableProps } from './MetricsTable';
|
import { MetricsTable, MetricsTableProps } from './MetricsTable';
|
||||||
|
|
||||||
export interface PagesTableProps extends MetricsTableProps {
|
export interface PagesTableProps extends MetricsTableProps {
|
||||||
|
|
@ -14,7 +12,7 @@ export interface PagesTableProps extends MetricsTableProps {
|
||||||
export function PagesTable({ type, allowFilter, ...props }: PagesTableProps) {
|
export function PagesTable({ type, allowFilter, ...props }: PagesTableProps) {
|
||||||
const { router, updateParams } = useNavigation();
|
const { router, updateParams } = useNavigation();
|
||||||
const { formatMessage, labels } = useMessages();
|
const { formatMessage, labels } = useMessages();
|
||||||
const { domain } = useContext(WebsiteContext);
|
const { domain } = useWebsite();
|
||||||
|
|
||||||
const handleChange = (id: any) => {
|
const handleChange = (id: any) => {
|
||||||
router.push(updateParams({ view: id }));
|
router.push(updateParams({ view: id }));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue