import React from 'react'; import { message } from 'antd'; import RcFooter from 'rc-footer'; import { Link } from 'bisheng/router'; import { presetPalettes } from '@ant-design/colors'; import type { WrappedComponentProps } from 'react-intl'; import { FormattedMessage, injectIntl } from 'react-intl'; import { AntDesignOutlined, MediumOutlined, TwitterOutlined, ZhihuOutlined, UsergroupAddOutlined, GithubOutlined, HistoryOutlined, ProfileOutlined, BugOutlined, IssuesCloseOutlined, QuestionCircleOutlined, BgColorsOutlined, } from '@ant-design/icons'; import ColorPicker from '../Color/ColorPicker'; import { loadScript, getLocalizedPathname } from '../utils'; class Footer extends React.Component { lessLoaded = false; state = { color: presetPalettes.blue.primary, }; getColumns() { const { intl, location } = this.props; const isZhCN = intl.locale === 'zh-CN'; const getLinkHash = (path: string, hash: { zhCN: string; enUS: string }) => { const pathName = getLocalizedPathname(path, isZhCN, location.query, hash); const { pathname, query = {} } = pathName; const pathnames = pathname.split('#'); if ('direction' in query) { return `${pathnames[0]}?direction=rtl#${pathnames[1]}`; } return pathname; }; const getLink = (path: string) => { const pathName = getLocalizedPathname(path, isZhCN, location.query); const { pathname, query = {} } = pathName; if ('direction' in query) { return `${pathname}?direction=rtl}`; } return pathname; }; const col1 = { title: , items: [ { title: 'Ant Design Charts', url: 'https://charts.ant.design', openExternal: true, }, { title: 'Ant Design Pro', url: 'https://pro.ant.design', openExternal: true, }, { title: 'Ant Design Pro Components', url: 'https://procomponents.ant.design', openExternal: true, }, { title: 'Ant Design Mobile', url: 'https://mobile.ant.design', openExternal: true, }, { title: 'Ant Design Landing', description: , url: 'https://landing.ant.design', openExternal: true, }, { title: 'Scaffolds', description: , url: 'https://scaffold.ant.design', openExternal: true, }, { title: 'Umi', description: , url: 'https://umijs.org', openExternal: true, }, { title: 'Dumi', description: , url: 'https://d.umijs.org', openExternal: true, }, { title: 'qiankun', description: , url: 'https://qiankun.umijs.org', openExternal: true, }, { title: 'ahooks', description: , url: 'https://github.com/alibaba/hooks', openExternal: true, }, { title: 'Ant Motion', description: , url: 'https://motion.ant.design', openExternal: true, }, { title: , url: 'https://ant-design.gitee.io/', }, ], }; const col2 = { title: , items: [ { icon: , title: , url: 'https://github.com/websemantics/awesome-ant-design', openExternal: true, }, { icon: , title: 'Medium', url: 'http://medium.com/ant-design/', openExternal: true, }, { icon: , title: 'Twitter', url: 'http://twitter.com/antdesignui', openExternal: true, }, { icon: , title: , url: 'http://zhuanlan.zhihu.com/antdesign', openExternal: true, }, { icon: , title: , url: 'http://zhuanlan.zhihu.com/xtech', openExternal: true, }, { icon: ( seeconf ), title: 'SEE Conf', description: , url: 'https://seeconf.antfin.com/', openExternal: true, }, ], }; if (isZhCN) { col2.items.push({ icon: , title: , url: getLinkHash('/docs/resources', { zhCN: '加入我们', enUS: 'JoinUs', }), LinkComponent: Link, } as any); } const col3 = { title: , items: [ { icon: , title: 'GitHub', url: 'https://github.com/ant-design/ant-design', openExternal: true, }, { icon: , title: , url: getLink('/changelog'), LinkComponent: Link, }, { icon: , title: , url: getLink('/docs/react/faq'), LinkComponent: Link, }, { icon: , title: , url: 'https://new-issue.ant.design/', openExternal: true, }, { icon: , title: , url: 'https://github.com/ant-design/ant-design/issues', openExternal: true, }, { icon: , title: , url: 'https://github.com/ant-design/ant-design/discussions', openExternal: true, }, { icon: , title: , url: 'http://stackoverflow.com/questions/tagged/antd', openExternal: true, }, { icon: , title: , url: 'https://segmentfault.com/t/antd', openExternal: true, }, ], }; const col4 = { icon: ( Ant XTech ), title: , items: [ { icon: ( yuque ), title: , url: 'https://yuque.com', description: , openExternal: true, }, { icon: ( AntV ), title: 'AntV', url: 'https://antv.vision', description: , openExternal: true, }, { icon: ( Egg ), title: 'Egg', url: 'https://eggjs.org', description: , openExternal: true, }, { icon: ( kitchen ), title: 'Kitchen', description: , url: 'https://kitchen.alipay.com', openExternal: true, }, { icon: ( xtech ), title: , url: 'https://xtech.antfin.com/', openExternal: true, }, { icon: , title: , url: getLinkHash('/components/config-provider/', { zhCN: 'components-config-provider-demo-theme', enUS: 'components-config-provider-demo-theme', }), LinkComponent: Link, }, ], }; return [col1, col2, col3, col4]; } handleColorChange = (color: string) => { const { intl: { messages }, } = this.props; message.loading({ content: messages['app.footer.primary-color-changing'], key: 'change-primary-color', }); const changeColor = () => { (window as any).less .modifyVars({ '@primary-color': color, }) .then(() => { message.success({ content: messages['app.footer.primary-color-changed'], key: 'change-primary-color', }); this.setState({ color }); }); }; const lessUrl = 'https://gw.alipayobjects.com/os/lib/less/3.10.3/dist/less.min.js'; if (this.lessLoaded) { changeColor(); } else { (window as any).less = { async: true, javascriptEnabled: true, }; loadScript(lessUrl).then(() => { this.lessLoaded = true; changeColor(); }); } }; renderThemeChanger() { const { color } = this.state; const colors = Object.keys(presetPalettes).filter(item => item !== 'grey'); return ( presetPalettes[c][5]), ...colors.map(c => presetPalettes[c][4]), ...colors.map(c => presetPalettes[c][6]), ]} onChangeComplete={this.handleColorChange} /> ); } render() { return ( Made with by {/* eslint-disable-next-line react/jsx-curly-brace-presence */}{' '} } /> ); } } export default injectIntl(Footer);