import React from 'react';
import { FormattedMessage, injectIntl } from 'react-intl';
import { Modal, message } from 'antd';
import { Link } from 'bisheng/router';
import RcFooter from 'rc-footer';
import { presetPalettes } from '@ant-design/colors';
import Icon from '../Icon';
import { isLocalStorageNameSupported, loadScript, getLocalizedPathname } from '../utils';
import ColorPicker from '../Color/ColorPicker';
class Footer extends React.Component {
lessLoaded = false;
state = {
color: presetPalettes.blue.primary,
};
componentDidMount() {
// for some iOS
// http://stackoverflow.com/a/14555361
if (!isLocalStorageNameSupported()) {
return;
}
// 大版本发布后全局弹窗提示
// 1. 点击『知道了』之后不再提示
// 2. 超过截止日期后不再提示
if (
localStorage.getItem('antd@3.0.0-notification-sent') !== 'true' &&
Date.now() < new Date('2017/12/20').getTime()
) {
this.infoNewVersion();
}
}
getColumns() {
const { intl = {} } = this.props;
const isZhCN = intl.locale === 'zh-CN';
return [
{
title: ,
items: [
{
title: 'Ant Design Pro',
url: 'https://pro.ant.design',
openExternal: true,
},
{
title: 'Ant Design Mobile',
url: 'https://mobile.ant.design',
openExternal: true,
},
{
title: 'NG-ZORRO',
description: 'Ant Design of Angular',
url: 'https://ng.ant.design',
openExternal: true,
},
{
title: 'NG-ZORRO-MOBILE',
url: 'https://ng.mobile.ant.design',
openExternal: true,
},
{
title: 'Ant Design Vue',
url: 'https://vue.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: 'Dva',
description: ,
url: 'https://dvajs.com',
openExternal: true,
},
{
title: 'Remax',
description: ,
url: 'https://remaxjs.org/',
openExternal: true,
},
{
title: 'Ant Motion',
description: ,
url: 'https://motion.ant.design',
openExternal: true,
},
{
title: ,
url: getLocalizedPathname('/docs/spec/download', isZhCN),
LinkComponent: Link,
},
{
title: ,
url: 'https://ant-design.gitee.io/',
},
],
},
{
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: ,
title: 'SEE Conf',
description: ,
url: 'https://seeconf.antfin.com/',
openExternal: true,
},
{
icon: ,
title: ,
url: getLocalizedPathname('/docs/spec/work-with-us', isZhCN),
LinkComponent: Link,
},
],
},
{
title: ,
items: [
{
icon: ,
title: 'GitHub',
url: 'https://github.com/ant-design/ant-design',
openExternal: true,
},
{
icon: ,
title: ,
url: getLocalizedPathname('/changelog', isZhCN),
LinkComponent: Link,
},
{
icon: ,
title: ,
url: getLocalizedPathname('/docs/react/faq', isZhCN),
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://www.yuque.com/ant-design/course',
openExternal: true,
},
{
icon: ,
title: ,
url: 'https://gitter.im/ant-design/ant-design',
openExternal: true,
},
{
icon: ,
title: ,
url: 'https://gitter.im/ant-design/ant-design-english',
openExternal: true,
},
{
icon: ,
title: ,
url: 'http://stackoverflow.com/questions/tagged/antd',
openExternal: true,
},
{
icon: ,
title: ,
url: 'https://segmentfault.com/t/antd',
openExternal: true,
},
],
},
{
icon: (
),
title: ,
items: [
{
icon: (
),
title: ,
url: 'https://yuque.com',
description: ,
openExternal: true,
},
{
icon: (
),
title: ,
url: 'https://yunfengdie.com',
description: ,
openExternal: true,
},
{
icon: (
),
title: 'AntV',
url: 'https://antv.vision',
description: ,
openExternal: true,
},
{
icon: (
),
title: 'Egg',
url: 'https://eggjs.org',
description: ,
openExternal: true,
},
{
icon: (
),
title: 'Kitchen',
description: ,
url: 'https://kitchen.alipay.com',
openExternal: true,
},
{
icon: (
),
title: ,
url: 'https://xtech.antfin.com/',
openExternal: true,
},
{
title: this.renderThemeChanger(),
style: {
marginTop: 20,
},
},
],
},
];
}
handleColorChange = color => {
const changeColor = () => {
const {
intl: { messages },
} = this.props;
const hide = message.loading(messages['app.footer.primary-color-changing']);
window.less
.modifyVars({
'@primary-color': color,
})
.then(() => {
hide();
Icon.setTwoToneColor({ primaryColor: color });
message.success(messages['app.footer.primary-color-changed']);
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.less = {
async: true,
javascriptEnabled: true,
};
loadScript(lessUrl).then(() => {
this.lessLoaded = true;
changeColor();
});
}
};
infoNewVersion() {
const {
intl: { messages },
} = this.props;
Modal.info({
title: messages['app.publish.title'],
content: (
{messages['app.publish.greeting']}
antd@3.0.0
{messages['app.publish.intro']}
{messages['app.publish.old-version-guide']}
2x.ant.design
{messages['app.publish.old-version-tips']}
),
okText: 'OK',
onOk: () => localStorage.setItem('antd@3.0.0-notification-sent', 'true'),
className: 'new-version-info-modal',
width: 470,
});
}
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);