- Rewrite messages.ts to plain string key maps (remove MessageDescriptor) - Rewrite useMessages hook to expose t from useTranslations() directly - Rename formatMessage → t across 193 consumer files - Replace custom FormattedMessage component with next-intl t.rich() - Update 52 language files to use rich text tags (<b>, <a>) - Remove all direct imports from @/components/messages in favor of useMessages() Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
143 lines
3.1 KiB
TypeScript
143 lines
3.1 KiB
TypeScript
import { useMessages } from './useMessages';
|
|
|
|
export type FieldGroup = 'url' | 'sources' | 'location' | 'environment' | 'utm' | 'other';
|
|
|
|
export interface Field {
|
|
name: string;
|
|
filterLabel: string;
|
|
label: string;
|
|
group: FieldGroup;
|
|
}
|
|
|
|
export function useFields() {
|
|
const { t, labels } = useMessages();
|
|
|
|
const fields: Field[] = [
|
|
{
|
|
name: 'path',
|
|
filterLabel: t(labels.path),
|
|
label: t(labels.path),
|
|
group: 'url',
|
|
},
|
|
{
|
|
name: 'query',
|
|
filterLabel: t(labels.query),
|
|
label: t(labels.query),
|
|
group: 'url',
|
|
},
|
|
{
|
|
name: 'title',
|
|
filterLabel: t(labels.pageTitle),
|
|
label: t(labels.pageTitle),
|
|
group: 'url',
|
|
},
|
|
{
|
|
name: 'referrer',
|
|
filterLabel: t(labels.referrer),
|
|
label: t(labels.referrer),
|
|
group: 'sources',
|
|
},
|
|
{
|
|
name: 'country',
|
|
filterLabel: t(labels.country),
|
|
label: t(labels.country),
|
|
group: 'location',
|
|
},
|
|
{
|
|
name: 'region',
|
|
filterLabel: t(labels.region),
|
|
label: t(labels.region),
|
|
group: 'location',
|
|
},
|
|
{
|
|
name: 'city',
|
|
filterLabel: t(labels.city),
|
|
label: t(labels.city),
|
|
group: 'location',
|
|
},
|
|
{
|
|
name: 'browser',
|
|
filterLabel: t(labels.browser),
|
|
label: t(labels.browser),
|
|
group: 'environment',
|
|
},
|
|
{
|
|
name: 'os',
|
|
filterLabel: t(labels.os),
|
|
label: t(labels.os),
|
|
group: 'environment',
|
|
},
|
|
{
|
|
name: 'device',
|
|
filterLabel: t(labels.device),
|
|
label: t(labels.device),
|
|
group: 'environment',
|
|
},
|
|
{
|
|
name: 'utmSource',
|
|
filterLabel: t(labels.source),
|
|
label: t(labels.utmSource),
|
|
group: 'utm',
|
|
},
|
|
{
|
|
name: 'utmMedium',
|
|
filterLabel: t(labels.medium),
|
|
label: t(labels.utmMedium),
|
|
group: 'utm',
|
|
},
|
|
{
|
|
name: 'utmCampaign',
|
|
filterLabel: t(labels.campaign),
|
|
label: t(labels.utmCampaign),
|
|
group: 'utm',
|
|
},
|
|
{
|
|
name: 'utmContent',
|
|
filterLabel: t(labels.content),
|
|
label: t(labels.utmContent),
|
|
group: 'utm',
|
|
},
|
|
{
|
|
name: 'utmTerm',
|
|
filterLabel: t(labels.term),
|
|
label: t(labels.utmTerm),
|
|
group: 'utm',
|
|
},
|
|
{
|
|
name: 'hostname',
|
|
filterLabel: t(labels.hostname),
|
|
label: t(labels.hostname),
|
|
group: 'other',
|
|
},
|
|
{
|
|
name: 'distinctId',
|
|
filterLabel: t(labels.distinctId),
|
|
label: t(labels.distinctId),
|
|
group: 'other',
|
|
},
|
|
{
|
|
name: 'tag',
|
|
filterLabel: t(labels.tag),
|
|
label: t(labels.tag),
|
|
group: 'other',
|
|
},
|
|
{
|
|
name: 'event',
|
|
filterLabel: t(labels.event),
|
|
label: t(labels.event),
|
|
group: 'other',
|
|
},
|
|
];
|
|
|
|
const groupLabels: { key: FieldGroup; label: string }[] = [
|
|
{ key: 'url', label: t(labels.url) },
|
|
{ key: 'sources', label: t(labels.sources) },
|
|
{ key: 'location', label: t(labels.location) },
|
|
{ key: 'environment', label: t(labels.environment) },
|
|
{ key: 'utm', label: t(labels.utm) },
|
|
{ key: 'other', label: t(labels.other) },
|
|
];
|
|
|
|
return { fields, groupLabels };
|
|
}
|