Skip to content

Commit fdfa8b0

Browse files
committed
Added expanded view for pixels/links. Made filter form into a popover.
1 parent 8971f23 commit fdfa8b0

File tree

4 files changed

+83
-11
lines changed

4 files changed

+83
-11
lines changed

src/app/(main)/links/[linkId]/LinkPage.tsx

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,30 @@ import { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart';
77
import { LinkMetricsBar } from '@/app/(main)/links/[linkId]/LinkMetricsBar';
88
import { LinkControls } from '@/app/(main)/links/[linkId]/LinkControls';
99
import { LinkPanels } from '@/app/(main)/links/[linkId]/LinkPanels';
10-
import { Column, Grid } from '@umami/react-zen';
10+
import { Column, Dialog, Grid, Modal } from '@umami/react-zen';
11+
import { WebsiteExpandedView } from '@/app/(main)/websites/[websiteId]/WebsiteExpandedView';
12+
import { useNavigation } from '@/components/hooks';
13+
14+
const excludedIds = ['path', 'entry', 'exit', 'title', 'language', 'screen', 'event'];
1115

1216
export function LinkPage({ linkId }: { linkId: string }) {
17+
const {
18+
router,
19+
query: { view },
20+
updateParams,
21+
} = useNavigation();
22+
23+
const handleClose = (close: () => void) => {
24+
router.push(updateParams({ view: undefined }));
25+
close();
26+
};
27+
28+
const handleOpenChange = (isOpen: boolean) => {
29+
if (!isOpen) {
30+
router.push(updateParams({ view: undefined }));
31+
}
32+
};
33+
1334
return (
1435
<LinkProvider linkId={linkId}>
1536
<Grid width="100%" height="100%">
@@ -23,6 +44,19 @@ export function LinkPage({ linkId }: { linkId: string }) {
2344
</Panel>
2445
<LinkPanels linkId={linkId} />
2546
</PageBody>
47+
<Modal isOpen={!!view} onOpenChange={handleOpenChange} isDismissable>
48+
<Dialog style={{ maxWidth: 1320, width: '100vw', height: 'calc(100vh - 40px)' }}>
49+
{({ close }) => {
50+
return (
51+
<WebsiteExpandedView
52+
websiteId={linkId}
53+
excludedIds={excludedIds}
54+
onClose={() => handleClose(close)}
55+
/>
56+
);
57+
}}
58+
</Dialog>
59+
</Modal>
2660
</Column>
2761
</Grid>
2862
</LinkProvider>

src/app/(main)/pixels/[pixelId]/PixelPage.tsx

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,30 @@ import { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart';
77
import { PixelMetricsBar } from '@/app/(main)/pixels/[pixelId]/PixelMetricsBar';
88
import { PixelControls } from '@/app/(main)/pixels/[pixelId]/PixelControls';
99
import { PixelPanels } from '@/app/(main)/pixels/[pixelId]/PixelPanels';
10-
import { Column, Grid } from '@umami/react-zen';
10+
import { Column, Dialog, Grid, Modal } from '@umami/react-zen';
11+
import { WebsiteExpandedView } from '@/app/(main)/websites/[websiteId]/WebsiteExpandedView';
12+
import { useNavigation } from '@/components/hooks';
13+
14+
const excludedIds = ['path', 'entry', 'exit', 'title', 'language', 'screen', 'event'];
1115

1216
export function PixelPage({ pixelId }: { pixelId: string }) {
17+
const {
18+
router,
19+
query: { view },
20+
updateParams,
21+
} = useNavigation();
22+
23+
const handleClose = (close: () => void) => {
24+
router.push(updateParams({ view: undefined }));
25+
close();
26+
};
27+
28+
const handleOpenChange = (isOpen: boolean) => {
29+
if (!isOpen) {
30+
router.push(updateParams({ view: undefined }));
31+
}
32+
};
33+
1334
return (
1435
<PixelProvider pixelId={pixelId}>
1536
<Grid width="100%" height="100%">
@@ -23,6 +44,19 @@ export function PixelPage({ pixelId }: { pixelId: string }) {
2344
</Panel>
2445
<PixelPanels pixelId={pixelId} />
2546
</PageBody>
47+
<Modal isOpen={!!view} onOpenChange={handleOpenChange} isDismissable>
48+
<Dialog style={{ maxWidth: 1320, width: '100vw', height: 'calc(100vh - 40px)' }}>
49+
{({ close }) => {
50+
return (
51+
<WebsiteExpandedView
52+
websiteId={pixelId}
53+
excludedIds={excludedIds}
54+
onClose={() => handleClose(close)}
55+
/>
56+
);
57+
}}
58+
</Dialog>
59+
</Modal>
2660
</Column>
2761
</Grid>
2862
</PixelProvider>

src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ import { Lightning } from '@/components/svg';
2626

2727
export function WebsiteExpandedView({
2828
websiteId,
29+
excludedIds = [],
2930
onClose,
3031
}: {
3132
websiteId: string;
33+
excludedIds?: string[];
3234
onClose?: () => void;
3335
}) {
3436
const { formatMessage, labels } = useMessages();
@@ -37,9 +39,11 @@ export function WebsiteExpandedView({
3739
query: { view },
3840
} = useNavigation();
3941

42+
const filterExcluded = (item: { id: string }) => !excludedIds.includes(item.id);
43+
4044
const items = [
4145
{
42-
label: formatMessage(labels.pages),
46+
label: 'URL',
4347
items: [
4448
{
4549
id: 'path',
@@ -71,7 +75,7 @@ export function WebsiteExpandedView({
7175
path: updateParams({ view: 'query' }),
7276
icon: <Search />,
7377
},
74-
],
78+
].filter(filterExcluded),
7579
},
7680
{
7781
label: formatMessage(labels.sources),
@@ -94,7 +98,7 @@ export function WebsiteExpandedView({
9498
path: updateParams({ view: 'domain' }),
9599
icon: <Globe />,
96100
},
97-
],
101+
].filter(filterExcluded),
98102
},
99103
{
100104
label: formatMessage(labels.location),
@@ -117,7 +121,7 @@ export function WebsiteExpandedView({
117121
path: updateParams({ view: 'city' }),
118122
icon: <Landmark />,
119123
},
120-
],
124+
].filter(filterExcluded),
121125
},
122126
{
123127
label: formatMessage(labels.environment),
@@ -152,7 +156,7 @@ export function WebsiteExpandedView({
152156
path: updateParams({ view: 'screen' }),
153157
icon: <Monitor />,
154158
},
155-
],
159+
].filter(filterExcluded),
156160
},
157161
{
158162
label: formatMessage(labels.other),
@@ -175,7 +179,7 @@ export function WebsiteExpandedView({
175179
path: updateParams({ view: 'tag' }),
176180
icon: <Tag />,
177181
},
178-
],
182+
].filter(filterExcluded),
179183
},
180184
];
181185

src/components/input/WebsiteFilterButton.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Button, Icon, DialogTrigger, Dialog, Modal, Text } from '@umami/react-zen';
1+
import { Button, Icon, DialogTrigger, Dialog, Popover, Text } from '@umami/react-zen';
22
import { ListFilter } from '@/components/icons';
33
import { FilterEditForm } from '@/components/input/FilterEditForm';
44
import { useMessages, useNavigation } from '@/components/hooks';
@@ -32,13 +32,13 @@ export function WebsiteFilterButton({
3232
</Icon>
3333
{showText && <Text>{formatMessage(labels.filter)}</Text>}
3434
</Button>
35-
<Modal>
35+
<Popover placement="bottom start">
3636
<Dialog title={formatMessage(labels.filters)} style={{ width: 800, minHeight: 600 }}>
3737
{({ close }) => {
3838
return <FilterEditForm websiteId={websiteId} onChange={handleChange} onClose={close} />;
3939
}}
4040
</Dialog>
41-
</Modal>
41+
</Popover>
4242
</DialogTrigger>
4343
);
4444
}

0 commit comments

Comments
 (0)