mirror of
https://github.com/ant-design/ant-design.git
synced 2024-11-27 20:49:53 +08:00
fix: Site link auto switch by locale (#42381)
* Revert "Revert "docs: auto trans link" (#42373)"
This reverts commit fa90b25b3e
.
* docs: site update link auto switch logic
This commit is contained in:
parent
78c814649c
commit
3097ec39e1
@ -1,5 +1,5 @@
|
||||
import assert from 'assert';
|
||||
import { type HastRoot, type UnifiedTransformer, unistUtilVisit } from 'dumi';
|
||||
import { unistUtilVisit, type HastRoot, type UnifiedTransformer } from 'dumi';
|
||||
|
||||
/**
|
||||
* plugin for modify hast tree when docs compiling
|
||||
@ -60,6 +60,10 @@ function rehypeAntd(): UnifiedTransformer<HastRoot> {
|
||||
if (!node.properties) return;
|
||||
node.properties.className ??= [];
|
||||
(node.properties.className as string[]).push('component-api-table');
|
||||
} else if (node.type === 'element' && (node.tagName === 'Link' || node.tagName === 'a')) {
|
||||
const { tagName } = node;
|
||||
node.properties.sourceType = tagName;
|
||||
node.tagName = 'LocaleLink';
|
||||
}
|
||||
});
|
||||
};
|
||||
|
49
.dumi/theme/builtins/LocaleLink/index.tsx
Normal file
49
.dumi/theme/builtins/LocaleLink/index.tsx
Normal file
@ -0,0 +1,49 @@
|
||||
import { Link } from 'dumi';
|
||||
import * as React from 'react';
|
||||
import useLocale from '../../../hooks/useLocale';
|
||||
|
||||
type LinkProps = Parameters<typeof Link>[0];
|
||||
|
||||
export interface LocaleLinkProps extends LinkProps {
|
||||
sourceType: 'a' | 'Link';
|
||||
children?: React.ReactNode;
|
||||
}
|
||||
|
||||
export default function LocaleLink({ sourceType, to, ...props }: LocaleLinkProps) {
|
||||
const Component = sourceType === 'a' ? 'a' : Link;
|
||||
|
||||
const [, localeType] = useLocale();
|
||||
|
||||
const localeTo = React.useMemo(() => {
|
||||
if (!to || typeof to !== 'string') {
|
||||
return to;
|
||||
}
|
||||
|
||||
// Auto locale switch
|
||||
const cells = to.match(/(\/[^#]*)(#.*)?/);
|
||||
if (cells) {
|
||||
let path = cells[1].replace(/\/$/, '');
|
||||
const hash = cells[2] || '';
|
||||
|
||||
if (localeType === 'cn' && !path.endsWith('-cn')) {
|
||||
path = `${path}-cn`;
|
||||
} else if (localeType === 'en' && path.endsWith('-cn')) {
|
||||
path = path.replace(/-cn$/, '');
|
||||
}
|
||||
|
||||
return `${path}${hash}`;
|
||||
}
|
||||
|
||||
return to;
|
||||
}, [to]);
|
||||
|
||||
const linkProps: LocaleLinkProps = {
|
||||
...props,
|
||||
} as LocaleLinkProps;
|
||||
|
||||
if (to) {
|
||||
linkProps.to = localeTo;
|
||||
}
|
||||
|
||||
return <Component {...linkProps} />;
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
{
|
||||
"singleQuote": true,
|
||||
"jsxSingleQuote": false,
|
||||
"trailingComma": "all",
|
||||
"printWidth": 100,
|
||||
"proseWrap": "never",
|
||||
|
Loading…
Reference in New Issue
Block a user