mirror of
https://github.com/umami-software/umami.git
synced 2026-02-12 16:45:35 +01:00
Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
741c77d9f8
5 changed files with 38 additions and 33 deletions
|
|
@ -14,7 +14,7 @@ import styles from './NavBar.module.css';
|
||||||
export function NavBar() {
|
export function NavBar() {
|
||||||
const { formatMessage, labels } = useMessages();
|
const { formatMessage, labels } = useMessages();
|
||||||
const { pathname, router } = useNavigation();
|
const { pathname, router } = useNavigation();
|
||||||
const { renderTeamUrl } = useTeamUrl();
|
const { teamId, renderTeamUrl } = useTeamUrl();
|
||||||
|
|
||||||
const cloudMode = !!process.env.cloudMode;
|
const cloudMode = !!process.env.cloudMode;
|
||||||
|
|
||||||
|
|
@ -34,25 +34,38 @@ export function NavBar() {
|
||||||
label: formatMessage(labels.settings),
|
label: formatMessage(labels.settings),
|
||||||
url: renderTeamUrl('/settings'),
|
url: renderTeamUrl('/settings'),
|
||||||
children: [
|
children: [
|
||||||
|
...(teamId
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
label: formatMessage(labels.team),
|
||||||
|
url: renderTeamUrl('/settings/team'),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []),
|
||||||
{
|
{
|
||||||
label: formatMessage(labels.websites),
|
label: formatMessage(labels.websites),
|
||||||
url: '/settings/websites',
|
url: renderTeamUrl('/settings/websites'),
|
||||||
},
|
|
||||||
{
|
|
||||||
label: formatMessage(labels.teams),
|
|
||||||
url: '/settings/teams',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: formatMessage(labels.users),
|
|
||||||
url: '/settings/users',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: formatMessage(labels.profile),
|
|
||||||
url: '/profile',
|
|
||||||
},
|
},
|
||||||
|
...(!teamId
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
label: formatMessage(labels.teams),
|
||||||
|
url: renderTeamUrl('/settings/teams'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: formatMessage(labels.users),
|
||||||
|
url: '/settings/users',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: [
|
||||||
|
{
|
||||||
|
label: formatMessage(labels.members),
|
||||||
|
url: renderTeamUrl('/settings/members'),
|
||||||
|
},
|
||||||
|
]),
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
cloudMode && {
|
{
|
||||||
label: formatMessage(labels.profile),
|
label: formatMessage(labels.profile),
|
||||||
url: '/profile',
|
url: '/profile',
|
||||||
},
|
},
|
||||||
|
|
@ -94,6 +107,7 @@ export function NavBar() {
|
||||||
<ProfileButton />
|
<ProfileButton />
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.mobile}>
|
<div className={styles.mobile}>
|
||||||
|
<TeamsButton onChange={handleTeamChange} showText={false} />
|
||||||
<HamburgerButton menuItems={menuItems} />
|
<HamburgerButton menuItems={menuItems} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { GridColumn, GridTable, Icon, Text } from 'react-basics';
|
import { GridColumn, GridTable, Icon, Text, useBreakpoint } from 'react-basics';
|
||||||
import { useLogin, useMessages } from 'components/hooks';
|
import { useLogin, useMessages } from 'components/hooks';
|
||||||
import Icons from 'components/icons';
|
import Icons from 'components/icons';
|
||||||
import LinkButton from 'components/common/LinkButton';
|
import LinkButton from 'components/common/LinkButton';
|
||||||
|
|
@ -14,9 +14,10 @@ export function TeamWebsitesTable({
|
||||||
}) {
|
}) {
|
||||||
const { user } = useLogin();
|
const { user } = useLogin();
|
||||||
const { formatMessage, labels } = useMessages();
|
const { formatMessage, labels } = useMessages();
|
||||||
|
const breakpoint = useBreakpoint();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<GridTable data={data}>
|
<GridTable data={data} cardMode={['xs', 'sm', 'md'].includes(breakpoint)}>
|
||||||
<GridColumn name="name" label={formatMessage(labels.name)} />
|
<GridColumn name="name" label={formatMessage(labels.name)} />
|
||||||
<GridColumn name="domain" label={formatMessage(labels.domain)} />
|
<GridColumn name="domain" label={formatMessage(labels.domain)} />
|
||||||
<GridColumn name="createdBy" label={formatMessage(labels.createdBy)}>
|
<GridColumn name="createdBy" label={formatMessage(labels.createdBy)}>
|
||||||
|
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
@media screen and (max-width: 992px) {
|
|
||||||
.row {
|
|
||||||
flex-wrap: wrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header .actions {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.actions {
|
|
||||||
flex-basis: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -6,7 +6,7 @@ import WebsiteChart from './WebsiteChart';
|
||||||
import useDashboard from 'store/dashboard';
|
import useDashboard from 'store/dashboard';
|
||||||
import WebsiteHeader from './WebsiteHeader';
|
import WebsiteHeader from './WebsiteHeader';
|
||||||
import { WebsiteMetricsBar } from './WebsiteMetricsBar';
|
import { WebsiteMetricsBar } from './WebsiteMetricsBar';
|
||||||
import { useMessages, useLocale } from 'components/hooks';
|
import { useMessages, useLocale, useTeamUrl } from 'components/hooks';
|
||||||
|
|
||||||
export default function WebsiteChartList({
|
export default function WebsiteChartList({
|
||||||
websites,
|
websites,
|
||||||
|
|
@ -19,6 +19,7 @@ export default function WebsiteChartList({
|
||||||
}) {
|
}) {
|
||||||
const { formatMessage, labels } = useMessages();
|
const { formatMessage, labels } = useMessages();
|
||||||
const { websiteOrder } = useDashboard();
|
const { websiteOrder } = useDashboard();
|
||||||
|
const { renderTeamUrl } = useTeamUrl();
|
||||||
const { dir } = useLocale();
|
const { dir } = useLocale();
|
||||||
|
|
||||||
const ordered = useMemo(
|
const ordered = useMemo(
|
||||||
|
|
@ -35,7 +36,7 @@ export default function WebsiteChartList({
|
||||||
return index < limit ? (
|
return index < limit ? (
|
||||||
<div key={id}>
|
<div key={id}>
|
||||||
<WebsiteHeader websiteId={id} showLinks={false}>
|
<WebsiteHeader websiteId={id} showLinks={false}>
|
||||||
<Link href={`/websites/${id}`}>
|
<Link href={renderTeamUrl(`/websites/${id}`)}>
|
||||||
<Button variant="primary">
|
<Button variant="primary">
|
||||||
<Text>{formatMessage(labels.viewDetails)}</Text>
|
<Text>{formatMessage(labels.viewDetails)}</Text>
|
||||||
<Icon>
|
<Icon>
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,11 @@ import styles from './TeamsButton.module.css';
|
||||||
|
|
||||||
export function TeamsButton({
|
export function TeamsButton({
|
||||||
className,
|
className,
|
||||||
|
showText = true,
|
||||||
onChange,
|
onChange,
|
||||||
}: {
|
}: {
|
||||||
className?: string;
|
className?: string;
|
||||||
|
showText?: boolean;
|
||||||
onChange?: (value: string) => void;
|
onChange?: (value: string) => void;
|
||||||
}) {
|
}) {
|
||||||
const { user } = useLogin();
|
const { user } = useLogin();
|
||||||
|
|
@ -31,7 +33,7 @@ export function TeamsButton({
|
||||||
<PopupTrigger>
|
<PopupTrigger>
|
||||||
<Button className={classNames(styles.button, className)} variant="quiet">
|
<Button className={classNames(styles.button, className)} variant="quiet">
|
||||||
<Icon>{teamId ? <Icons.Users /> : <Icons.User />}</Icon>
|
<Icon>{teamId ? <Icons.Users /> : <Icons.User />}</Icon>
|
||||||
<Text>{teamId ? team?.name : user.username}</Text>
|
{showText && <Text>{teamId ? team?.name : user.username}</Text>}
|
||||||
<Icon>
|
<Icon>
|
||||||
<Icons.ChevronDown />
|
<Icons.ChevronDown />
|
||||||
</Icon>
|
</Icon>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue