import { Link, type LinkComponentProps } from '@tanstack/react-router';
import { getPrefix } from 'intlayer';
import type { FC } from 'react';
import { useLocale } from 'react-intlayer';
export const LOCALE_ROUTE = '{-$locale}' as const;
// Main utility
export type RemoveLocaleParam<T> = T extends string
? RemoveLocaleFromString<T>
: T;
export type To = RemoveLocaleParam<LinkComponentProps['to']>;
type CollapseDoubleSlashes<S extends string> =
S extends `${infer H}//${infer T}` ? CollapseDoubleSlashes<`${H}/${T}`> : S;
type LocalizedLinkProps = {
to?: To;
} & Omit<LinkComponentProps, 'to'>;
// Helpers
type RemoveAll<
S extends string,
Sub extends string,
> = S extends `${infer H}${Sub}${infer T}` ? RemoveAll<`${H}${T}`, Sub> : S;
type RemoveLocaleFromString<S extends string> = CollapseDoubleSlashes<
RemoveAll<S, typeof LOCALE_ROUTE>
>;
export const LocalizedLink: FC<LocalizedLinkProps> = (props) => {
const { locale } = useLocale();
return (
<Link
{...props}
params={{
locale: getPrefix(locale).localePrefix,
...(typeof props?.params === 'object' ? props?.params : {}),
}}
to={`/${LOCALE_ROUTE}${props.to}` as LinkComponentProps['to']}
/>
);
};