This commit is contained in:
Gautamkumarsolanki 2025-10-07 13:58:21 +08:00 committed by GitHub
commit efe7413a9e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 30 additions and 20 deletions

View file

@ -18,6 +18,7 @@ import ScreenTable from '@/components/metrics/ScreenTable';
import TagsTable from '@/components/metrics/TagsTable'; import TagsTable from '@/components/metrics/TagsTable';
import ChannelsTable from '@/components/metrics/ChannelsTable'; import ChannelsTable from '@/components/metrics/ChannelsTable';
import styles from './WebsiteExpandedView.module.css'; import styles from './WebsiteExpandedView.module.css';
import { sub } from 'date-fns';
const views = { const views = {
url: PagesTable, url: PagesTable,
@ -136,8 +137,8 @@ export default function WebsiteExpandedView({
const DetailsComponent = views[view] || (() => null); const DetailsComponent = views[view] || (() => null);
const handleChange = (view: any) => { const handleChange = (view?: any) => {
router.push(renderUrl({ view })); router.push(renderUrl({ view }, false, ['subview']));
}; };
const renderValue = (value: string) => items.find(({ key }) => key === value)?.label; const renderValue = (value: string) => items.find(({ key }) => key === value)?.label;
@ -146,7 +147,7 @@ export default function WebsiteExpandedView({
<div className={styles.layout}> <div className={styles.layout}>
<div className={styles.menu}> <div className={styles.menu}>
<LinkButton <LinkButton
href={renderUrl({ view: undefined })} href={renderUrl({ view: undefined, subview: undefined })}
className={styles.back} className={styles.back}
variant="quiet" variant="quiet"
scroll={false} scroll={false}
@ -156,7 +157,7 @@ export default function WebsiteExpandedView({
</Icon> </Icon>
<Text>{formatMessage(labels.back)}</Text> <Text>{formatMessage(labels.back)}</Text>
</LinkButton> </LinkButton>
<SideNav className={styles.nav} items={items} selectedKey={view} shallow={true} /> <SideNav onSelect={handleChange} className={styles.nav} items={items} selectedKey={view} shallow={true} />
<Dropdown <Dropdown
className={styles.dropdown} className={styles.dropdown}
items={items} items={items}
@ -181,4 +182,4 @@ export default function WebsiteExpandedView({
</div> </div>
</div> </div>
); );
} }

View file

@ -6,7 +6,7 @@ export function useNavigation(): {
pathname: string; pathname: string;
query: { [key: string]: string }; query: { [key: string]: string };
router: any; router: any;
renderUrl: (params: any, reset?: boolean) => string; renderUrl: (params: any, reset?: boolean, removeParams?: string[]) => string;
} { } {
const router = useRouter(); const router = useRouter();
const pathname = usePathname(); const pathname = usePathname();
@ -22,8 +22,17 @@ export function useNavigation(): {
return obj; return obj;
}, [params]); }, [params]);
function renderUrl(params: any, reset?: boolean) { function renderUrl(params: any, reset?: boolean, removeParams: string[] = []) {
return reset ? pathname : buildUrl(pathname, { ...query, ...params }); if (reset) {
return pathname;
} else {
const newParams = { ...query, ...params };
removeParams.forEach(param => {
delete newParams[param];
});
return buildUrl(pathname, newParams);
}
} }
return { pathname, query, router, renderUrl }; return { pathname, query, router, renderUrl };

View file

@ -14,13 +14,13 @@ export function PagesTable({ allowFilter, ...props }: PagesTableProps) {
const { const {
router, router,
renderUrl, renderUrl,
query: { view = 'url' }, query: { subview = "url" },
} = useNavigation(); } = useNavigation();
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const { domain } = useContext(WebsiteContext); const { domain } = useContext(WebsiteContext);
const handleSelect = (key: any) => { const handleSelect = (key: any) => {
router.push(renderUrl({ view: key }), { scroll: false }); router.push(renderUrl({ subview: key }), { scroll: false });
}; };
const buttons = [ const buttons = [
@ -45,11 +45,11 @@ export function PagesTable({ allowFilter, ...props }: PagesTableProps) {
const renderLink = ({ x }) => { const renderLink = ({ x }) => {
return ( return (
<FilterLink <FilterLink
id={view === 'entry' || view === 'exit' ? 'url' : view} id={subview === 'entry' || subview === 'exit' ? 'url' : subview}
value={x} value={x}
label={!x && formatMessage(labels.none)} label={!x && formatMessage(labels.none)}
externalUrl={ externalUrl={
view !== 'title' subview !== 'title'
? `${domain.startsWith('http') ? domain : `https://${domain}`}${x}` ? `${domain.startsWith('http') ? domain : `https://${domain}`}${x}`
: null : null
} }
@ -61,12 +61,12 @@ export function PagesTable({ allowFilter, ...props }: PagesTableProps) {
<MetricsTable <MetricsTable
{...props} {...props}
title={formatMessage(labels.pages)} title={formatMessage(labels.pages)}
type={view} type={subview}
metric={formatMessage(labels.visitors)} metric={formatMessage(labels.visitors)}
dataFilter={emptyFilter} dataFilter={emptyFilter}
renderLabel={renderLink} renderLabel={renderLink}
> >
{allowFilter && <FilterButtons items={buttons} selectedKey={view} onSelect={handleSelect} />} {allowFilter && <FilterButtons items={buttons} selectedKey={subview} onSelect={handleSelect} />}
</MetricsTable> </MetricsTable>
); );
} }

View file

@ -15,12 +15,12 @@ export function ReferrersTable({ allowFilter, ...props }: ReferrersTableProps) {
const { const {
router, router,
renderUrl, renderUrl,
query: { view = 'referrer' }, query: { subview = 'referrer' },
} = useNavigation(); } = useNavigation();
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const handleSelect = (key: any) => { const handleSelect = (key: any) => {
router.push(renderUrl({ view: key }), { scroll: false }); router.push(renderUrl({ subview: key }), { scroll: false });
}; };
const buttons = [ const buttons = [
@ -35,7 +35,7 @@ export function ReferrersTable({ allowFilter, ...props }: ReferrersTableProps) {
]; ];
const renderLink = ({ x: referrer }) => { const renderLink = ({ x: referrer }) => {
if (view === 'grouped') { if (subview === 'grouped') {
if (referrer === '_other') { if (referrer === '_other') {
return `(${formatMessage(labels.other)})`; return `(${formatMessage(labels.other)})`;
} else { } else {
@ -92,15 +92,15 @@ export function ReferrersTable({ allowFilter, ...props }: ReferrersTableProps) {
title={formatMessage(labels.referrers)} title={formatMessage(labels.referrers)}
type="referrer" type="referrer"
metric={formatMessage(labels.visitors)} metric={formatMessage(labels.visitors)}
dataFilter={view === 'grouped' ? groupedFilter : undefined} dataFilter={subview === 'grouped' ? groupedFilter : undefined}
renderLabel={renderLink} renderLabel={renderLink}
> >
{allowFilter && ( {allowFilter && (
<FilterButtons items={buttons} selectedKey={view} onSelect={handleSelect} /> <FilterButtons items={buttons} selectedKey={subview} onSelect={handleSelect} />
)} )}
</MetricsTable> </MetricsTable>
</> </>
); );
} }
export default ReferrersTable; export default ReferrersTable;