Fix broken icons, remove showActions from TeamsTable, fix margins for pixel/link overview

This commit is contained in:
Francis Cao 2025-09-23 13:55:27 -07:00
parent ee70baaeb7
commit 1a5c7df671
9 changed files with 45 additions and 43 deletions

2
pnpm-lock.yaml generated
View file

@ -364,8 +364,6 @@ importers:
specifier: ^5.9.2 specifier: ^5.9.2
version: 5.9.2 version: 5.9.2
dist: {}
packages: packages:
'@ampproject/remapping@2.3.0': '@ampproject/remapping@2.3.0':

View file

@ -7,19 +7,24 @@ import { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart';
import { LinkMetricsBar } from '@/app/(main)/links/[linkId]/LinkMetricsBar'; import { LinkMetricsBar } from '@/app/(main)/links/[linkId]/LinkMetricsBar';
import { LinkControls } from '@/app/(main)/links/[linkId]/LinkControls'; import { LinkControls } from '@/app/(main)/links/[linkId]/LinkControls';
import { LinkPanels } from '@/app/(main)/links/[linkId]/LinkPanels'; import { LinkPanels } from '@/app/(main)/links/[linkId]/LinkPanels';
import { Column, Grid } from '@umami/react-zen';
export function LinkPage({ linkId }: { linkId: string }) { export function LinkPage({ linkId }: { linkId: string }) {
return ( return (
<LinkProvider linkId={linkId}> <LinkProvider linkId={linkId}>
<PageBody gap> <Grid width="100%" height="100%">
<LinkHeader /> <Column margin="2">
<LinkControls linkId={linkId} /> <PageBody gap>
<LinkMetricsBar linkId={linkId} showChange={true} /> <LinkHeader />
<Panel> <LinkControls linkId={linkId} />
<WebsiteChart websiteId={linkId} /> <LinkMetricsBar linkId={linkId} showChange={true} />
</Panel> <Panel>
<LinkPanels linkId={linkId} /> <WebsiteChart websiteId={linkId} />
</PageBody> </Panel>
<LinkPanels linkId={linkId} />
</PageBody>
</Column>
</Grid>
</LinkProvider> </LinkProvider>
); );
} }

View file

@ -7,19 +7,24 @@ import { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart';
import { PixelMetricsBar } from '@/app/(main)/pixels/[pixelId]/PixelMetricsBar'; import { PixelMetricsBar } from '@/app/(main)/pixels/[pixelId]/PixelMetricsBar';
import { PixelControls } from '@/app/(main)/pixels/[pixelId]/PixelControls'; import { PixelControls } from '@/app/(main)/pixels/[pixelId]/PixelControls';
import { PixelPanels } from '@/app/(main)/pixels/[pixelId]/PixelPanels'; import { PixelPanels } from '@/app/(main)/pixels/[pixelId]/PixelPanels';
import { Column, Grid } from '@umami/react-zen';
export function PixelPage({ pixelId }: { pixelId: string }) { export function PixelPage({ pixelId }: { pixelId: string }) {
return ( return (
<PixelProvider pixelId={pixelId}> <PixelProvider pixelId={pixelId}>
<PageBody gap> <Grid width="100%" height="100%">
<PixelHeader /> <Column margin="2">
<PixelControls pixelId={pixelId} /> <PageBody gap>
<PixelMetricsBar pixelId={pixelId} showChange={true} /> <PixelHeader />
<Panel> <PixelControls pixelId={pixelId} />
<WebsiteChart websiteId={pixelId} /> <PixelMetricsBar pixelId={pixelId} showChange={true} />
</Panel> <Panel>
<PixelPanels pixelId={pixelId} /> <WebsiteChart websiteId={pixelId} />
</PageBody> </Panel>
<PixelPanels pixelId={pixelId} />
</PageBody>
</Column>
</Grid>
</PixelProvider> </PixelProvider>
); );
} }

View file

@ -1,16 +1,9 @@
import { ReactNode } from 'react';
import Link from 'next/link';
import { DataGrid } from '@/components/common/DataGrid'; import { DataGrid } from '@/components/common/DataGrid';
import { TeamsTable } from './TeamsTable';
import { useLoginQuery, useNavigation, useUserTeamsQuery } from '@/components/hooks'; import { useLoginQuery, useNavigation, useUserTeamsQuery } from '@/components/hooks';
import Link from 'next/link';
import { TeamsTable } from './TeamsTable';
export function TeamsDataTable({ export function TeamsDataTable() {
showActions,
}: {
allowEdit?: boolean;
showActions?: boolean;
children?: ReactNode;
}) {
const { user } = useLoginQuery(); const { user } = useLoginQuery();
const query = useUserTeamsQuery(user.id); const query = useUserTeamsQuery(user.id);
const { pathname } = useNavigation(); const { pathname } = useNavigation();
@ -27,7 +20,7 @@ export function TeamsDataTable({
return ( return (
<DataGrid query={query}> <DataGrid query={query}>
{({ data }) => { {({ data }) => {
return <TeamsTable data={data} showActions={showActions} renderLink={renderLink} />; return <TeamsTable data={data} renderLink={renderLink} />;
}} }}
</DataGrid> </DataGrid>
); );

View file

@ -1,5 +1,5 @@
import { Button, Icon, Modal, DialogTrigger, Dialog, Text, useToast } from '@umami/react-zen'; import { Button, Icon, Modal, DialogTrigger, Dialog, Text, useToast } from '@umami/react-zen';
import { AddUser } from '@/components/icons'; import { AddUserSvg } from '@/components/icons';
import { useMessages, useModified } from '@/components/hooks'; import { useMessages, useModified } from '@/components/hooks';
import { TeamJoinForm } from './TeamJoinForm'; import { TeamJoinForm } from './TeamJoinForm';
@ -17,7 +17,7 @@ export function TeamsJoinButton() {
<DialogTrigger> <DialogTrigger>
<Button> <Button>
<Icon> <Icon>
<AddUser /> <AddUserSvg />
</Icon> </Icon>
<Text>{formatMessage(labels.joinTeam)}</Text> <Text>{formatMessage(labels.joinTeam)}</Text>
</Button> </Button>

View file

@ -20,12 +20,12 @@ export function TeamsTable({
<DataColumn id="owner" label={formatMessage(labels.owner)}> <DataColumn id="owner" label={formatMessage(labels.owner)}>
{(row: any) => row?.members?.find(({ role }) => role === ROLES.teamOwner)?.user?.username} {(row: any) => row?.members?.find(({ role }) => role === ROLES.teamOwner)?.user?.username}
</DataColumn> </DataColumn>
<DataColumn id="websites" label={formatMessage(labels.websites)} align="end">
{(row: any) => row?._count?.websites}
</DataColumn>
<DataColumn id="members" label={formatMessage(labels.members)} align="end"> <DataColumn id="members" label={formatMessage(labels.members)} align="end">
{(row: any) => row?._count?.members} {(row: any) => row?._count?.members}
</DataColumn> </DataColumn>
<DataColumn id="websites" label={formatMessage(labels.websites)} align="end">
{(row: any) => row?._count?.websites}
</DataColumn>
</DataTable> </DataTable>
); );
} }

View file

@ -2,7 +2,7 @@ import Link from 'next/link';
import { Column, Icon, Text, Row } from '@umami/react-zen'; import { Column, Icon, Text, Row } from '@umami/react-zen';
import { useLoginQuery, useMessages, useNavigation, useTeam } from '@/components/hooks'; import { useLoginQuery, useMessages, useNavigation, useTeam } from '@/components/hooks';
import { ROLES } from '@/lib/constants'; import { ROLES } from '@/lib/constants';
import { Users, Arrow } from '@/components/icons'; import { Users, ArrowLeft } from '@/components/icons';
import { TeamLeaveButton } from '@/app/(main)/teams/TeamLeaveButton'; import { TeamLeaveButton } from '@/app/(main)/teams/TeamLeaveButton';
import { TeamManage } from './TeamManage'; import { TeamManage } from './TeamManage';
import { TeamEditForm } from './TeamEditForm'; import { TeamEditForm } from './TeamEditForm';
@ -34,8 +34,8 @@ export function TeamSettings({ teamId }: { teamId: string }) {
<> <>
<Link href="/settings/teams"> <Link href="/settings/teams">
<Row marginTop="2" alignItems="center" gap> <Row marginTop="2" alignItems="center" gap>
<Icon rotate={180}> <Icon>
<Arrow /> <ArrowLeft />
</Icon> </Icon>
<Text>{formatMessage(labels.teams)}</Text> <Text>{formatMessage(labels.teams)}</Text>
</Row> </Row>

View file

@ -14,4 +14,5 @@ export {
Path as PathSvg, Path as PathSvg,
Tag as TagSvg, Tag as TagSvg,
Target as TargetSvg, Target as TargetSvg,
AddUser as AddUserSvg,
} from '@/components/svg'; } from '@/components/svg';

View file

@ -127,12 +127,12 @@ export const DATA_TYPES = {
export const ROLES = { export const ROLES = {
admin: 'admin', admin: 'admin',
teamManager: 'team-manager',
teamMember: 'team-member',
teamOwner: 'team-owner',
teamViewOnly: 'team-view-only',
user: 'user', user: 'user',
viewOnly: 'view-only', viewOnly: 'view-only',
teamOwner: 'team-owner',
teamManager: 'team-manager',
teamMember: 'team-member',
teamViewOnly: 'team-view-only',
} as const; } as const;
export const PERMISSIONS = { export const PERMISSIONS = {