Commit cf5d3b0e authored by 陈帅's avatar 陈帅

run eslint fix

parent 8ae5c0b9
This diff is collapsed.
/functions/mock/** /functions/mock/**
/scripts /scripts
/config /config
**/node_modules/**
_scripts
\ No newline at end of file
const fabric = require('@umijs/fabric');
module.exports = { module.exports = {
parser: 'babel-eslint', ...fabric.default,
extends: ['airbnb', 'prettier', 'plugin:compat/recommended'], rules: {
env: { ...fabric.default.rules,
browser: true,
node: true,
es6: true,
mocha: true,
jest: true,
jasmine: true,
}, },
globals: { globals: {
APP_TYPE: true, ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION: true,
page: true, page: true,
}, },
rules: {
'react/jsx-filename-extension': [1, { extensions: ['.js'] }],
'react/jsx-wrap-multilines': 0,
'react/prop-types': 0,
'react/forbid-prop-types': 0,
'react/jsx-one-expression-per-line': 0,
'import/no-unresolved': [2, { ignore: ['^@/', '^umi/'] }],
'import/no-extraneous-dependencies': [
2,
{
optionalDependencies: true,
devDependencies: ['**/tests/**.js', '/mock/**.js', '**/**.test.js'],
},
],
'jsx-a11y/no-noninteractive-element-interactions': 0,
'jsx-a11y/click-events-have-key-events': 0,
'jsx-a11y/no-static-element-interactions': 0,
'jsx-a11y/anchor-is-valid': 0,
'linebreak-style': 0,
},
settings: {
polyfills: ['fetch', 'promises', 'url'],
},
}; };
{
"singleQuote": true,
"trailingComma": "all",
"printWidth": 100,
"proseWrap": "never",
"overrides": [
{
"files": ".prettierrc",
"options": {
"parser": "json"
}
}
]
}
\ No newline at end of file
const fabric = require('@umijs/fabric');
module.exports = {
...fabric.prettier,
};
const fabric = require('@umijs/fabric');
module.exports = {
...fabric.stylelint,
};
{
"extends": [
"stylelint-config-standard",
"stylelint-config-css-modules",
"stylelint-config-rational-order",
"stylelint-config-prettier"
],
"plugins": ["stylelint-order", "stylelint-declaration-block-no-ignored-properties"],
"rules": {
"no-descending-specificity": null,
"plugin/declaration-block-no-ignored-properties": true
}
}
...@@ -119,7 +119,7 @@ function fakeList(count: number): ListItemDataType[] { ...@@ -119,7 +119,7 @@ function fakeList(count: number): ListItemDataType[] {
owner: user[i % 10], owner: user[i % 10],
title: titles[i % 8], title: titles[i % 8],
avatar: avatars[i % 8], avatar: avatars[i % 8],
cover: parseInt(i / 4 + '', 10) % 2 === 0 ? covers[i % 4] : covers[3 - (i % 4)], cover: parseInt(`${i / 4}`, 10) % 2 === 0 ? covers[i % 4] : covers[3 - (i % 4)],
status: ['active', 'exception', 'normal'][i % 3] as status: ['active', 'exception', 'normal'][i % 3] as
| 'normal' | 'normal'
| 'exception' | 'exception'
......
...@@ -19,7 +19,7 @@ export interface AvatarListProps { ...@@ -19,7 +19,7 @@ export interface AvatarListProps {
maxLength?: number; maxLength?: number;
excessItemsStyle?: React.CSSProperties; excessItemsStyle?: React.CSSProperties;
style?: React.CSSProperties; style?: React.CSSProperties;
children: React.ReactElement<AvatarItemProps> | Array<React.ReactElement<AvatarItemProps>>; children: React.ReactElement<AvatarItemProps> | React.ReactElement<AvatarItemProps>[];
} }
const avatarSizeToClassName = (size?: SizeType) => const avatarSizeToClassName = (size?: SizeType) =>
...@@ -54,9 +54,7 @@ const AvatarList: React.SFC<AvatarListProps> & { Item: typeof Item } = ({ ...@@ -54,9 +54,7 @@ const AvatarList: React.SFC<AvatarListProps> & { Item: typeof Item } = ({
}) => { }) => {
const numOfChildren = React.Children.count(children); const numOfChildren = React.Children.count(children);
const numToShow = maxLength >= numOfChildren ? numOfChildren : maxLength; const numToShow = maxLength >= numOfChildren ? numOfChildren : maxLength;
const childrenArray = React.Children.toArray(children) as Array< const childrenArray = React.Children.toArray(children) as React.ReactElement<AvatarItemProps>[];
React.ReactElement<AvatarItemProps>
>;
const childrenWithProps = childrenArray.slice(0, numToShow).map(child => const childrenWithProps = childrenArray.slice(0, numToShow).map(child =>
React.cloneElement(child, { React.cloneElement(child, {
size, size,
......
...@@ -138,6 +138,7 @@ class PAGE_NAME_UPPER_CAMEL_CASE extends PureComponent< ...@@ -138,6 +138,7 @@ class PAGE_NAME_UPPER_CAMEL_CASE extends PureComponent<
inputValue: '', inputValue: '',
}); });
}; };
renderChildrenByTabKey = (tabKey: BLOCK_NAME_CAMEL_CASEState['tabKey']) => { renderChildrenByTabKey = (tabKey: BLOCK_NAME_CAMEL_CASEState['tabKey']) => {
if (tabKey === 'projects') { if (tabKey === 'projects') {
return <Projects />; return <Projects />;
...@@ -150,6 +151,7 @@ class PAGE_NAME_UPPER_CAMEL_CASE extends PureComponent< ...@@ -150,6 +151,7 @@ class PAGE_NAME_UPPER_CAMEL_CASE extends PureComponent<
} }
return null; return null;
}; };
render() { render() {
const { newTags, inputVisible, inputValue, tabKey } = this.state; const { newTags, inputVisible, inputValue, tabKey } = this.state;
const { currentUser, currentUserLoading } = this.props; const { currentUser, currentUserLoading } = this.props;
...@@ -184,9 +186,7 @@ class PAGE_NAME_UPPER_CAMEL_CASE extends PureComponent< ...@@ -184,9 +186,7 @@ class PAGE_NAME_UPPER_CAMEL_CASE extends PureComponent<
<Divider dashed /> <Divider dashed />
<div className={styles.tags}> <div className={styles.tags}>
<div className={styles.tagsTitle}>标签</div> <div className={styles.tagsTitle}>标签</div>
{currentUser.tags.concat(newTags).map(item => { {currentUser.tags.concat(newTags).map(item => <Tag key={item.key}>{item.label}</Tag>)}
return <Tag key={item.key}>{item.label}</Tag>;
})}
{inputVisible && ( {inputVisible && (
<Input <Input
ref={ref => this.saveInputRef(ref)} ref={ref => this.saveInputRef(ref)}
......
import { queryCurrent, queryFakeList } from './service';
import { Reducer, AnyAction } from 'redux';
import { EffectsCommandMap } from 'dva';
import { CurrentUser, ListItemDataType } from './data'; import { CurrentUser, ListItemDataType } from './data';
import { queryCurrent, queryFakeList } from './service';
export interface ModalState { export interface ModalState {
currentUser: Partial<CurrentUser>; currentUser: Partial<CurrentUser>;
list: ListItemDataType[]; list: ListItemDataType[];
} }
import { Reducer } from 'redux';
import { EffectsCommandMap } from 'dva';
import { AnyAction } from 'redux';
export type Effect = ( export type Effect = (
action: AnyAction, action: AnyAction,
effects: EffectsCommandMap & { select: <T>(func: (state: ModalState) => T) => T }, effects: EffectsCommandMap & { select: <T>(func: (state: ModalState) => T) => T },
......
...@@ -5,7 +5,7 @@ export async function queryCurrent() { ...@@ -5,7 +5,7 @@ export async function queryCurrent() {
} }
export async function queryFakeList(params: { count: number }) { export async function queryFakeList(params: { count: number }) {
return request(`/api/fake_list`, { return request('/api/fake_list', {
params, params,
}); });
} }
import React, { Component } from 'react'; import React, { Component } from 'react';
import { Select, Spin } from 'antd'; import { Select, Spin } from 'antd';
import { connect } from 'dva'; import { connect } from 'dva';
import styles from './GeographicView.less';
import { Dispatch } from 'redux'; import { Dispatch } from 'redux';
import styles from './GeographicView.less';
import { ProvinceData, CityData } from '../data'; import { ProvinceData, CityData } from '../data';
const { Option } = Select; const { Option } = Select;
interface SelectItem { interface SelectItem {
......
...@@ -7,6 +7,7 @@ import styles from './BaseView.less'; ...@@ -7,6 +7,7 @@ import styles from './BaseView.less';
import GeographicView from './GeographicView'; import GeographicView from './GeographicView';
import PhoneView from './PhoneView'; import PhoneView from './PhoneView';
import { CurrentUser } from '../data'; import { CurrentUser } from '../data';
const FormItem = Form.Item; const FormItem = Form.Item;
const { Option } = Select; const { Option } = Select;
...@@ -71,6 +72,7 @@ interface BaseViewProps extends FormComponentProps { ...@@ -71,6 +72,7 @@ interface BaseViewProps extends FormComponentProps {
})) }))
class BaseView extends Component<BaseViewProps> { class BaseView extends Component<BaseViewProps> {
view: HTMLDivElement | undefined; view: HTMLDivElement | undefined;
componentDidMount() { componentDidMount() {
this.setBaseInfo(); this.setBaseInfo();
} }
......
...@@ -34,6 +34,7 @@ class PAGE_NAME_UPPER_CAMEL_CASE extends Component< ...@@ -34,6 +34,7 @@ class PAGE_NAME_UPPER_CAMEL_CASE extends Component<
PAGE_NAME_UPPER_CAMEL_CASEState PAGE_NAME_UPPER_CAMEL_CASEState
> { > {
main: HTMLDivElement | undefined; main: HTMLDivElement | undefined;
constructor(props: PAGE_NAME_UPPER_CAMEL_CASEProps) { constructor(props: PAGE_NAME_UPPER_CAMEL_CASEProps) {
super(props); super(props);
const menuMap = { const menuMap = {
......
import { query as queryUsers, queryCurrent, queryProvince, queryCity } from './service'; import { Reducer, AnyAction } from 'redux';
import { Reducer } from 'redux';
import { EffectsCommandMap } from 'dva'; import { EffectsCommandMap } from 'dva';
import { AnyAction } from 'redux';
import { query as queryUsers, queryCurrent, queryProvince, queryCity } from './service';
import { CurrentUser, City, Province } from './data'; import { CurrentUser, City, Province } from './data';
export interface ModalState { export interface ModalState {
......
...@@ -10,10 +10,10 @@ export interface IBarProps { ...@@ -10,10 +10,10 @@ export interface IBarProps {
color?: string; color?: string;
padding?: [number, number, number, number]; padding?: [number, number, number, number];
height?: number; height?: number;
data: Array<{ data: {
x: string; x: string;
y: number; y: number;
}>; }[];
forceFit?: boolean; forceFit?: boolean;
autoLabel?: boolean; autoLabel?: boolean;
style?: React.CSSProperties; style?: React.CSSProperties;
...@@ -28,7 +28,9 @@ class Bar extends Component< ...@@ -28,7 +28,9 @@ class Bar extends Component<
state = { state = {
autoHideXLabels: false, autoHideXLabels: false,
}; };
root: HTMLDivElement | undefined; root: HTMLDivElement | undefined;
node: HTMLDivElement | undefined; node: HTMLDivElement | undefined;
componentDidMount() { componentDidMount() {
...@@ -38,9 +40,11 @@ class Bar extends Component< ...@@ -38,9 +40,11 @@ class Bar extends Component<
componentWillUnmount() { componentWillUnmount() {
window.removeEventListener('resize', this.resize); window.removeEventListener('resize', this.resize);
} }
handleRoot = (n: HTMLDivElement) => { handleRoot = (n: HTMLDivElement) => {
this.root = n; this.root = n;
}; };
handleRef = (n: HTMLDivElement) => { handleRef = (n: HTMLDivElement) => {
this.node = n; this.node = n;
}; };
......
...@@ -112,7 +112,7 @@ class Gauge extends React.Component<IGaugeProps> { ...@@ -112,7 +112,7 @@ class Gauge extends React.Component<IGaugeProps> {
label={{ label={{
offset: -12, offset: -12,
formatter, formatter,
textStyle: textStyle, textStyle,
}} }}
/> />
<Guide> <Guide>
......
...@@ -23,10 +23,10 @@ export interface IMiniAreaProps { ...@@ -23,10 +23,10 @@ export interface IMiniAreaProps {
scale?: { x: any; y: any }; scale?: { x: any; y: any };
yAxis?: IAxis; yAxis?: IAxis;
borderWidth?: number; borderWidth?: number;
data: Array<{ data: {
x: number | string; x: number | string;
y: number; y: number;
}>; }[];
} }
class MiniArea extends React.Component<IMiniAreaProps> { class MiniArea extends React.Component<IMiniAreaProps> {
......
...@@ -6,10 +6,10 @@ import styles from '../index.less'; ...@@ -6,10 +6,10 @@ import styles from '../index.less';
export interface IMiniBarProps { export interface IMiniBarProps {
color?: string; color?: string;
height?: number; height?: number;
data: Array<{ data: {
x: number | string; x: number | string;
y: number; y: number;
}>; }[];
forceFit?: boolean; forceFit?: boolean;
style?: React.CSSProperties; style?: React.CSSProperties;
} }
......
...@@ -17,8 +17,7 @@ const MiniProgress: React.SFC<IMiniProgressProps> = ({ ...@@ -17,8 +17,7 @@ const MiniProgress: React.SFC<IMiniProgressProps> = ({
color = 'rgb(19, 194, 194)', color = 'rgb(19, 194, 194)',
strokeWidth, strokeWidth,
percent, percent,
}) => { }) => (
return (
<div className={styles.miniProgress}> <div className={styles.miniProgress}>
<Tooltip title={targetLabel}> <Tooltip title={targetLabel}>
<div className={styles.target} style={{ left: target ? `${target}%` : undefined }}> <div className={styles.target} style={{ left: target ? `${target}%` : undefined }}>
...@@ -38,6 +37,5 @@ const MiniProgress: React.SFC<IMiniProgressProps> = ({ ...@@ -38,6 +37,5 @@ const MiniProgress: React.SFC<IMiniProgressProps> = ({
</div> </div>
</div> </div>
); );
};
export default MiniProgress; export default MiniProgress;
...@@ -9,6 +9,7 @@ import Bind from 'lodash-decorators/bind'; ...@@ -9,6 +9,7 @@ import Bind from 'lodash-decorators/bind';
import autoHeight from '../autoHeight'; import autoHeight from '../autoHeight';
import styles from './index.less'; import styles from './index.less';
export interface IPieProps { export interface IPieProps {
animate?: boolean; animate?: boolean;
color?: string; color?: string;
...@@ -19,10 +20,10 @@ export interface IPieProps { ...@@ -19,10 +20,10 @@ export interface IPieProps {
hasLegend?: boolean; hasLegend?: boolean;
padding?: [number, number, number, number]; padding?: [number, number, number, number];
percent?: number; percent?: number;
data?: Array<{ data?: {
x: string | string; x: string | string;
y: number; y: number;
}>; }[];
inner?: number; inner?: number;
lineWidth?: number; lineWidth?: number;
forceFit?: boolean; forceFit?: boolean;
...@@ -35,7 +36,7 @@ export interface IPieProps { ...@@ -35,7 +36,7 @@ export interface IPieProps {
subTitle?: React.ReactNode; subTitle?: React.ReactNode;
} }
interface IPieState { interface IPieState {
legendData: Array<{ checked: boolean; x: string; color: string; percent: number; y: string }>; legendData: { checked: boolean; x: string; color: string; percent: number; y: string }[];
legendBlock: boolean; legendBlock: boolean;
} }
class Pie extends Component<IPieProps, IPieState> { class Pie extends Component<IPieProps, IPieState> {
...@@ -45,7 +46,9 @@ class Pie extends Component<IPieProps, IPieState> { ...@@ -45,7 +46,9 @@ class Pie extends Component<IPieProps, IPieState> {
}; };
requestRef: number | undefined; requestRef: number | undefined;
root!: HTMLDivElement; root!: HTMLDivElement;
chart: G2.Chart | undefined; chart: G2.Chart | undefined;
componentDidMount() { componentDidMount() {
...@@ -104,6 +107,7 @@ class Pie extends Component<IPieProps, IPieState> { ...@@ -104,6 +107,7 @@ class Pie extends Component<IPieProps, IPieState> {
legendData, legendData,
}); });
}; };
handleRoot = (n: HTMLDivElement) => { handleRoot = (n: HTMLDivElement) => {
this.root = n; this.root = n;
}; };
...@@ -118,7 +122,7 @@ class Pie extends Component<IPieProps, IPieState> { ...@@ -118,7 +122,7 @@ class Pie extends Component<IPieProps, IPieState> {
const filteredLegendData = legendData.filter(l => l.checked).map(l => l.x); const filteredLegendData = legendData.filter(l => l.checked).map(l => l.x);
if (this.chart) { if (this.chart) {
this.chart.filter('x', val => filteredLegendData.indexOf(val + '') > -1); this.chart.filter('x', val => filteredLegendData.indexOf(`${val}`) > -1);
} }
this.setState({ this.setState({
...@@ -216,11 +220,11 @@ class Pie extends Component<IPieProps, IPieState> { ...@@ -216,11 +220,11 @@ class Pie extends Component<IPieProps, IPieState> {
data = [ data = [
{ {
x: '占比', x: '占比',
y: parseFloat(percent + ''), y: parseFloat(`${percent}`),
}, },
{ {
x: '反比', x: '反比',
y: 100 - parseFloat(percent + ''), y: 100 - parseFloat(`${percent}`),
}, },
]; ];
} }
......
...@@ -13,10 +13,10 @@ import styles from './index.less'; ...@@ -13,10 +13,10 @@ import styles from './index.less';
const imgUrl = 'https://gw.alipayobjects.com/zos/rmsportal/gWyeGLCdFFRavBGIDzWk.png'; const imgUrl = 'https://gw.alipayobjects.com/zos/rmsportal/gWyeGLCdFFRavBGIDzWk.png';
export interface ITagCloudProps { export interface ITagCloudProps {
data: Array<{ data: {
name: string; name: string;
value: number; value: number;
}>; }[];
height?: number; height?: number;
className?: string; className?: string;
style?: React.CSSProperties; style?: React.CSSProperties;
...@@ -34,10 +34,13 @@ class TagCloud extends Component<ITagCloudProps, ITagCloudState> { ...@@ -34,10 +34,13 @@ class TagCloud extends Component<ITagCloudProps, ITagCloudState> {
height: 0, height: 0,
width: 0, width: 0,
}; };
isUnmount!: boolean; isUnmount!: boolean;
requestRef!: number; requestRef!: number;
root: HTMLDivElement | undefined; root: HTMLDivElement | undefined;
imageMask: HTMLImageElement | undefined; imageMask: HTMLImageElement | undefined;
componentDidMount() { componentDidMount() {
...@@ -54,16 +57,19 @@ class TagCloud extends Component<ITagCloudProps, ITagCloudState> { ...@@ -54,16 +57,19 @@ class TagCloud extends Component<ITagCloudProps, ITagCloudState> {
this.renderChart(this.props); this.renderChart(this.props);
} }
} }
componentWillUnmount() { componentWillUnmount() {
this.isUnmount = true; this.isUnmount = true;
window.cancelAnimationFrame(this.requestRef); window.cancelAnimationFrame(this.requestRef);
window.removeEventListener('resize', this.resize); window.removeEventListener('resize', this.resize);
} }
resize = () => { resize = () => {
this.requestRef = requestAnimationFrame(() => { this.requestRef = requestAnimationFrame(() => {
this.renderChart(this.props); this.renderChart(this.props);
}); });
}; };
saveRootRef = (node: HTMLDivElement) => { saveRootRef = (node: HTMLDivElement) => {
this.root = node; this.root = node;
}; };
......
...@@ -6,11 +6,11 @@ import autoHeight from '../autoHeight'; ...@@ -6,11 +6,11 @@ import autoHeight from '../autoHeight';
import styles from './index.less'; import styles from './index.less';
export interface ITimelineChartProps { export interface ITimelineChartProps {
data: Array<{ data: {
x: number; x: number;
y1: number; y1: number;
y2: number; y2: number;
}>; }[];
title?: string; title?: string;
titleMap: { y1: string; y2: string }; titleMap: { y1: string; y2: string };
padding?: [number, number, number, number]; padding?: [number, number, number, number];
......
...@@ -18,8 +18,11 @@ class WaterWave extends Component<IWaterWaveProps> { ...@@ -18,8 +18,11 @@ class WaterWave extends Component<IWaterWaveProps> {
state = { state = {
radio: 1, radio: 1,
}; };
timer: number = 0; timer: number = 0;
root: HTMLDivElement | undefined | null; root: HTMLDivElement | undefined | null;
node: HTMLCanvasElement | undefined | null; node: HTMLCanvasElement | undefined | null;
componentDidMount() { componentDidMount() {
...@@ -59,6 +62,7 @@ class WaterWave extends Component<IWaterWaveProps> { ...@@ -59,6 +62,7 @@ class WaterWave extends Component<IWaterWaveProps> {
}); });
} }
}; };
renderChart(type?: string) { renderChart(type?: string) {
const { percent, color = '#1890FF' } = this.props; const { percent, color = '#1890FF' } = this.props;
const data = percent / 100; const data = percent / 100;
...@@ -201,6 +205,7 @@ class WaterWave extends Component<IWaterWaveProps> { ...@@ -201,6 +205,7 @@ class WaterWave extends Component<IWaterWaveProps> {
} }
render(); render();
} }
render() { render() {
const { radio } = this.state; const { radio } = this.state;
const { percent, title, height = 1 } = this.props; const { percent, title, height = 1 } = this.props;
......
...@@ -7,10 +7,10 @@ export type IReactComponent<P = any> = ...@@ -7,10 +7,10 @@ export type IReactComponent<P = any> =
function computeHeight(node: HTMLDivElement) { function computeHeight(node: HTMLDivElement) {
node.style.height = '100%'; node.style.height = '100%';
const totalHeight = parseInt(getComputedStyle(node).height + '', 10); const totalHeight = parseInt(`${getComputedStyle(node).height}`, 10);
const padding = const padding =
parseInt(getComputedStyle(node).paddingTop + '', 10) + parseInt(`${getComputedStyle(node).paddingTop}`, 10) +
parseInt(getComputedStyle(node).paddingBottom + '', 10); parseInt(`${getComputedStyle(node).paddingBottom}`, 10);
return totalHeight - padding; return totalHeight - padding;
} }
...@@ -35,14 +35,16 @@ interface IAutoHeightProps { ...@@ -35,14 +35,16 @@ interface IAutoHeightProps {
} }
function autoHeight() { function autoHeight() {
return function<P extends IAutoHeightProps>( return function<P extends IAutoHeightProps> (
WrappedComponent: React.ComponentClass<P> | React.SFC<P>, WrappedComponent: React.ComponentClass<P> | React.SFC<P>,
): React.ComponentClass<P> { ): React.ComponentClass<P> {
class AutoHeightComponent extends React.Component<P & IAutoHeightProps> { class AutoHeightComponent extends React.Component<P & IAutoHeightProps> {
state = { state = {
computedHeight: 0, computedHeight: 0,
}; };
root!: HTMLDivElement; root!: HTMLDivElement;
componentDidMount() { componentDidMount() {
const { height } = this.props; const { height } = this.props;
if (!height) { if (!height) {
...@@ -55,9 +57,11 @@ function autoHeight() { ...@@ -55,9 +57,11 @@ function autoHeight() {
} }
} }
} }
handleRoot = (node: HTMLDivElement) => { handleRoot = (node: HTMLDivElement) => {
this.root = node; this.root = node;
}; };
render() { render() {
const { height } = this.props; const { height } = this.props;
const { computedHeight } = this.state; const { computedHeight } = this.state;
......
import React from 'react'; import React from 'react';
import { Row, Col, Icon, Tooltip } from 'antd'; import { Row, Col, Icon, Tooltip } from 'antd';
import { FormattedMessage } from 'umi-plugin-react/locale'; import { FormattedMessage } from 'umi-plugin-react/locale';
import Charts from './Charts';
import numeral from 'numeral'; import numeral from 'numeral';
import Charts from './Charts';
import styles from '../style.less'; import styles from '../style.less';
import Yuan from '../utils/Yuan'; import Yuan from '../utils/Yuan';
import Trend from './Trend'; import Trend from './Trend';
import { IVisitData } from '../data.d'; import { IVisitData } from '../data.d';
const { ChartCard, MiniArea, MiniBar, MiniProgress, Field } = Charts; const { ChartCard, MiniArea, MiniBar, MiniProgress, Field } = Charts;
const topColResponsiveProps = { const topColResponsiveProps = {
...@@ -18,8 +19,7 @@ const topColResponsiveProps = { ...@@ -18,8 +19,7 @@ const topColResponsiveProps = {
style: { marginBottom: 24 }, style: { marginBottom: 24 },
}; };
const IntroduceRow = ({ loading, visitData }: { loading: boolean; visitData: IVisitData[] }) => { const IntroduceRow = ({ loading, visitData }: { loading: boolean; visitData: IVisitData[] }) => (
return (
<Row gutter={24}> <Row gutter={24}>
<Col {...topColResponsiveProps}> <Col {...topColResponsiveProps}>
<ChartCard <ChartCard
...@@ -160,6 +160,5 @@ const IntroduceRow = ({ loading, visitData }: { loading: boolean; visitData: IVi ...@@ -160,6 +160,5 @@ const IntroduceRow = ({ loading, visitData }: { loading: boolean; visitData: IVi
</Col> </Col>
</Row> </Row>
); );
};
export default IntroduceRow; export default IntroduceRow;
...@@ -2,6 +2,7 @@ import React from 'react'; ...@@ -2,6 +2,7 @@ import React from 'react';
import { Icon } from 'antd'; import { Icon } from 'antd';
import classNames from 'classnames'; import classNames from 'classnames';
import styles from './index.less'; import styles from './index.less';
export interface NumberInfoProps { export interface NumberInfoProps {
title?: React.ReactNode | string; title?: React.ReactNode | string;
subTitle?: React.ReactNode | string; subTitle?: React.ReactNode | string;
......
...@@ -5,6 +5,7 @@ import Charts from './Charts'; ...@@ -5,6 +5,7 @@ import Charts from './Charts';
import styles from '../style.less'; import styles from '../style.less';
import NumberInfo from './NumberInfo'; import NumberInfo from './NumberInfo';
import { IOfflineData, IOfflineChartData } from '../data'; import { IOfflineData, IOfflineChartData } from '../data';
const { TimelineChart, Pie } = Charts; const { TimelineChart, Pie } = Charts;
const CustomTab = ({ const CustomTab = ({
...@@ -13,8 +14,7 @@ const CustomTab = ({ ...@@ -13,8 +14,7 @@ const CustomTab = ({
}: { }: {
data: IOfflineData; data: IOfflineData;
currentTabKey: string; currentTabKey: string;
}) => { }) => (
return (
<Row gutter={8} style={{ width: 138, margin: '8px 0' }}> <Row gutter={8} style={{ width: 138, margin: '8px 0' }}>
<Col span={12}> <Col span={12}>
<NumberInfo <NumberInfo
...@@ -42,7 +42,6 @@ const CustomTab = ({ ...@@ -42,7 +42,6 @@ const CustomTab = ({
</Col> </Col>
</Row> </Row>
); );
};
const { TabPane } = Tabs; const { TabPane } = Tabs;
......
import React from 'react'; import React from 'react';
import { Card, Radio } from 'antd'; import { Card, Radio } from 'antd';
import Charts from './Charts';
import { FormattedMessage } from 'umi-plugin-react/locale'; import { FormattedMessage } from 'umi-plugin-react/locale';
import { RadioChangeEvent } from 'antd/es/radio';
import Charts from './Charts';
import styles from '../style.less'; import styles from '../style.less';
import Yuan from '../utils/Yuan'; import Yuan from '../utils/Yuan';
import { RadioChangeEvent } from 'antd/es/radio';
import { ISalesData } from '../data'; import { ISalesData } from '../data';
const { Pie } = Charts; const { Pie } = Charts;
...@@ -21,8 +21,7 @@ const ProportionSales = ({ ...@@ -21,8 +21,7 @@ const ProportionSales = ({
salesType: 'all' | 'online' | 'stores'; salesType: 'all' | 'online' | 'stores';
salesPieData: ISalesData[]; salesPieData: ISalesData[];
handleChangeSalesType?: (e: RadioChangeEvent) => void; handleChangeSalesType?: (e: RadioChangeEvent) => void;
}) => { }) => (
return (
<Card <Card
loading={loading} loading={loading}
className={styles.salesCard} className={styles.salesCard}
...@@ -74,6 +73,5 @@ const ProportionSales = ({ ...@@ -74,6 +73,5 @@ const ProportionSales = ({
</div> </div>
</Card> </Card>
); );
};
export default ProportionSales; export default ProportionSales;
...@@ -2,8 +2,8 @@ import React from 'react'; ...@@ -2,8 +2,8 @@ import React from 'react';
import { Row, Col, Card, Tabs, DatePicker } from 'antd'; import { Row, Col, Card, Tabs, DatePicker } from 'antd';
import { FormattedMessage, formatMessage } from 'umi-plugin-react/locale'; import { FormattedMessage, formatMessage } from 'umi-plugin-react/locale';
import numeral from 'numeral'; import numeral from 'numeral';
import Charts from './Charts';
import { RangePickerValue } from 'antd/es/date-picker/interface'; import { RangePickerValue } from 'antd/es/date-picker/interface';
import Charts from './Charts';
import { ISalesData } from '../data'; import { ISalesData } from '../data';
import styles from '../style.less'; import styles from '../style.less';
......
import React from 'react'; import React from 'react';
import { Row, Col, Table, Tooltip, Card, Icon } from 'antd'; import { Row, Col, Table, Tooltip, Card, Icon } from 'antd';
import { FormattedMessage } from 'umi-plugin-react/locale'; import { FormattedMessage } from 'umi-plugin-react/locale';
import numeral from 'numeral';
import Charts from './Charts'; import Charts from './Charts';
import Trend from './Trend'; import Trend from './Trend';
import NumberInfo from './NumberInfo'; import NumberInfo from './NumberInfo';
import numeral from 'numeral';
import styles from '../style.less'; import styles from '../style.less';
import { ISearchData, IVisitData2 } from '../data'; import { ISearchData, IVisitData2 } from '../data';
......
...@@ -2,13 +2,13 @@ import React, { Component, Suspense } from 'react'; ...@@ -2,13 +2,13 @@ import React, { Component, Suspense } from 'react';
import { connect } from 'dva'; import { connect } from 'dva';
import { Row, Col, Icon, Menu, Dropdown } from 'antd'; import { Row, Col, Icon, Menu, Dropdown } from 'antd';
import { RangePickerValue } from 'antd/es/date-picker/interface'; import { RangePickerValue } from 'antd/es/date-picker/interface';
import { Dispatch } from 'redux';
import { RadioChangeEvent } from 'antd/es/radio';
import { GridContent } from '@ant-design/pro-layout';
import { getTimeDistance } from './utils/utils'; import { getTimeDistance } from './utils/utils';
import styles from './style.less'; import styles from './style.less';
import PageLoading from './components/PageLoading'; import PageLoading from './components/PageLoading';
import { Dispatch } from 'redux';
import { IAnalysisData } from './data.d'; import { IAnalysisData } from './data.d';
import { RadioChangeEvent } from 'antd/es/radio';
import { GridContent } from '@ant-design/pro-layout';
const IntroduceRow = React.lazy(() => import('./components/IntroduceRow')); const IntroduceRow = React.lazy(() => import('./components/IntroduceRow'));
const SalesCard = React.lazy(() => import('./components/SalesCard')); const SalesCard = React.lazy(() => import('./components/SalesCard'));
...@@ -51,8 +51,11 @@ class PAGE_NAME_UPPER_CAMEL_CASE extends Component< ...@@ -51,8 +51,11 @@ class PAGE_NAME_UPPER_CAMEL_CASE extends Component<
currentTabKey: '', currentTabKey: '',
rangePickerValue: getTimeDistance('year'), rangePickerValue: getTimeDistance('year'),
}; };
reqRef!: number; reqRef!: number;
timeoutId!: number; timeoutId!: number;
componentDidMount() { componentDidMount() {
const { dispatch } = this.props; const { dispatch } = this.props;
this.reqRef = requestAnimationFrame(() => { this.reqRef = requestAnimationFrame(() => {
......
import { fakeChartData } from './service'; import { Reducer, AnyAction } from 'redux';
import { IAnalysisData } from './data';
import { Reducer } from 'redux';
import { EffectsCommandMap } from 'dva'; import { EffectsCommandMap } from 'dva';
import { AnyAction } from 'redux';
import { IAnalysisData } from './data';
import { fakeChartData } from './service';
export type Effect = ( export type Effect = (
action: AnyAction, action: AnyAction,
......
...@@ -7,6 +7,7 @@ export default class Yuan extends React.Component<{ ...@@ -7,6 +7,7 @@ export default class Yuan extends React.Component<{
children: React.ReactText; children: React.ReactText;
}> { }> {
main: HTMLSpanElement | undefined | null; main: HTMLSpanElement | undefined | null;
componentDidMount() { componentDidMount() {
this.renderToHtml(); this.renderToHtml();
} }
...@@ -14,6 +15,7 @@ export default class Yuan extends React.Component<{ ...@@ -14,6 +15,7 @@ export default class Yuan extends React.Component<{
componentDidUpdate() { componentDidUpdate() {
this.renderToHtml(); this.renderToHtml();
} }
renderToHtml = () => { renderToHtml = () => {
const { children } = this.props; const { children } = this.props;
if (this.main) { if (this.main) {
......
import React, { Component } from 'react'; import React, { Component } from 'react';
import Charts from '../Charts';
import { Statistic } from 'antd'; import { Statistic } from 'antd';
import Charts from '../Charts';
import styles from './index.less'; import styles from './index.less';
const { MiniArea } = Charts; const { MiniArea } = Charts;
...@@ -24,12 +24,15 @@ export default class ActiveChart extends Component { ...@@ -24,12 +24,15 @@ export default class ActiveChart extends Component {
state = { state = {
activeData: getActiveData(), activeData: getActiveData(),
}; };
timer: number | undefined; timer: number | undefined;
requestRef: number | undefined; requestRef: number | undefined;
componentDidMount() { componentDidMount() {
this.loopData(); this.loopData();
} }
componentWillUnmount() { componentWillUnmount() {
clearTimeout(this.timer); clearTimeout(this.timer);
if (this.requestRef) { if (this.requestRef) {
......
...@@ -112,7 +112,7 @@ class Gauge extends React.Component<IGaugeProps> { ...@@ -112,7 +112,7 @@ class Gauge extends React.Component<IGaugeProps> {
label={{ label={{
offset: -12, offset: -12,
formatter, formatter,
textStyle: textStyle, textStyle,
}} }}
/> />
<Guide> <Guide>
......
...@@ -24,10 +24,10 @@ export interface IMiniAreaProps { ...@@ -24,10 +24,10 @@ export interface IMiniAreaProps {
scale?: { x?: any; y?: any }; scale?: { x?: any; y?: any };
yAxis?: Partial<IAxis>; yAxis?: Partial<IAxis>;
borderWidth?: number; borderWidth?: number;
data: Array<{ data: {
x: number | string; x: number | string;
y: number; y: number;
}>; }[];
} }
class MiniArea extends React.Component<IMiniAreaProps> { class MiniArea extends React.Component<IMiniAreaProps> {
......
...@@ -9,6 +9,7 @@ import Bind from 'lodash-decorators/bind'; ...@@ -9,6 +9,7 @@ import Bind from 'lodash-decorators/bind';
import autoHeight from '../autoHeight'; import autoHeight from '../autoHeight';
import styles from './index.less'; import styles from './index.less';
export interface IPieProps { export interface IPieProps {
animate?: boolean; animate?: boolean;
color?: string; color?: string;
...@@ -19,10 +20,10 @@ export interface IPieProps { ...@@ -19,10 +20,10 @@ export interface IPieProps {
hasLegend?: boolean; hasLegend?: boolean;
padding?: [number, number, number, number]; padding?: [number, number, number, number];
percent?: number; percent?: number;
data?: Array<{ data?: {
x: string | string; x: string | string;
y: number; y: number;
}>; }[];
inner?: number; inner?: number;
lineWidth?: number; lineWidth?: number;
forceFit?: boolean; forceFit?: boolean;
...@@ -35,7 +36,7 @@ export interface IPieProps { ...@@ -35,7 +36,7 @@ export interface IPieProps {
subTitle?: React.ReactNode; subTitle?: React.ReactNode;
} }
interface IPieState { interface IPieState {
legendData: Array<{ checked: boolean; x: string; color: string; percent: number; y: string }>; legendData: { checked: boolean; x: string; color: string; percent: number; y: string }[];
legendBlock: boolean; legendBlock: boolean;
} }
class Pie extends Component<IPieProps, IPieState> { class Pie extends Component<IPieProps, IPieState> {
...@@ -45,7 +46,9 @@ class Pie extends Component<IPieProps, IPieState> { ...@@ -45,7 +46,9 @@ class Pie extends Component<IPieProps, IPieState> {
}; };
requestRef: number | undefined; requestRef: number | undefined;
root!: HTMLDivElement; root!: HTMLDivElement;
chart: G2.Chart | undefined; chart: G2.Chart | undefined;
componentDidMount() { componentDidMount() {
...@@ -104,6 +107,7 @@ class Pie extends Component<IPieProps, IPieState> { ...@@ -104,6 +107,7 @@ class Pie extends Component<IPieProps, IPieState> {
legendData, legendData,
}); });
}; };
handleRoot = (n: HTMLDivElement) => { handleRoot = (n: HTMLDivElement) => {
this.root = n; this.root = n;
}; };
...@@ -118,7 +122,7 @@ class Pie extends Component<IPieProps, IPieState> { ...@@ -118,7 +122,7 @@ class Pie extends Component<IPieProps, IPieState> {
const filteredLegendData = legendData.filter(l => l.checked).map(l => l.x); const filteredLegendData = legendData.filter(l => l.checked).map(l => l.x);
if (this.chart) { if (this.chart) {
this.chart.filter('x', val => filteredLegendData.indexOf(val + '') > -1); this.chart.filter('x', val => filteredLegendData.indexOf(`${val}`) > -1);
} }
this.setState({ this.setState({
...@@ -216,11 +220,11 @@ class Pie extends Component<IPieProps, IPieState> { ...@@ -216,11 +220,11 @@ class Pie extends Component<IPieProps, IPieState> {
data = [ data = [
{ {
x: '占比', x: '占比',
y: parseFloat(percent + ''), y: parseFloat(`${percent}`),
}, },
{ {
x: '反比', x: '反比',
y: 100 - parseFloat(percent + ''), y: 100 - parseFloat(`${percent}`),
}, },
]; ];
} }
......
...@@ -13,10 +13,10 @@ import styles from './index.less'; ...@@ -13,10 +13,10 @@ import styles from './index.less';
const imgUrl = 'https://gw.alipayobjects.com/zos/rmsportal/gWyeGLCdFFRavBGIDzWk.png'; const imgUrl = 'https://gw.alipayobjects.com/zos/rmsportal/gWyeGLCdFFRavBGIDzWk.png';
export interface ITagCloudProps { export interface ITagCloudProps {
data: Array<{ data: {
name: string; name: string;
value: string; value: string;
}>; }[];
height?: number; height?: number;
className?: string; className?: string;
style?: React.CSSProperties; style?: React.CSSProperties;
...@@ -34,10 +34,13 @@ class TagCloud extends Component<ITagCloudProps, ITagCloudState> { ...@@ -34,10 +34,13 @@ class TagCloud extends Component<ITagCloudProps, ITagCloudState> {
height: 0, height: 0,
width: 0, width: 0,
}; };
isUnmount!: boolean; isUnmount!: boolean;
requestRef!: number; requestRef!: number;
root: HTMLDivElement | undefined; root: HTMLDivElement | undefined;
imageMask: HTMLImageElement | undefined; imageMask: HTMLImageElement | undefined;
componentDidMount() { componentDidMount() {
...@@ -54,16 +57,19 @@ class TagCloud extends Component<ITagCloudProps, ITagCloudState> { ...@@ -54,16 +57,19 @@ class TagCloud extends Component<ITagCloudProps, ITagCloudState> {
this.renderChart(this.props); this.renderChart(this.props);
} }
} }
componentWillUnmount() { componentWillUnmount() {
this.isUnmount = true; this.isUnmount = true;
window.cancelAnimationFrame(this.requestRef); window.cancelAnimationFrame(this.requestRef);
window.removeEventListener('resize', this.resize); window.removeEventListener('resize', this.resize);
} }
resize = () => { resize = () => {
this.requestRef = requestAnimationFrame(() => { this.requestRef = requestAnimationFrame(() => {
this.renderChart(this.props); this.renderChart(this.props);
}); });
}; };
saveRootRef = (node: HTMLDivElement) => { saveRootRef = (node: HTMLDivElement) => {
this.root = node; this.root = node;
}; };
......
...@@ -18,8 +18,11 @@ class WaterWave extends Component<IWaterWaveProps> { ...@@ -18,8 +18,11 @@ class WaterWave extends Component<IWaterWaveProps> {
state = { state = {
radio: 1, radio: 1,
}; };
timer: number = 0; timer: number = 0;
root: HTMLDivElement | undefined | null; root: HTMLDivElement | undefined | null;
node: HTMLCanvasElement | undefined | null; node: HTMLCanvasElement | undefined | null;
componentDidMount() { componentDidMount() {
...@@ -59,6 +62,7 @@ class WaterWave extends Component<IWaterWaveProps> { ...@@ -59,6 +62,7 @@ class WaterWave extends Component<IWaterWaveProps> {
}); });
} }
}; };
renderChart(type?: string) { renderChart(type?: string) {
const { percent, color = '#1890FF' } = this.props; const { percent, color = '#1890FF' } = this.props;
const data = percent / 100; const data = percent / 100;
...@@ -201,6 +205,7 @@ class WaterWave extends Component<IWaterWaveProps> { ...@@ -201,6 +205,7 @@ class WaterWave extends Component<IWaterWaveProps> {
} }
render(); render();
} }
render() { render() {
const { radio } = this.state; const { radio } = this.state;
const { percent, title, height = 1 } = this.props; const { percent, title, height = 1 } = this.props;
......
...@@ -7,10 +7,10 @@ export type IReactComponent<P = any> = ...@@ -7,10 +7,10 @@ export type IReactComponent<P = any> =
function computeHeight(node: HTMLDivElement) { function computeHeight(node: HTMLDivElement) {
node.style.height = '100%'; node.style.height = '100%';
const totalHeight = parseInt(getComputedStyle(node).height + '', 10); const totalHeight = parseInt(`${getComputedStyle(node).height}`, 10);
const padding = const padding =
parseInt(getComputedStyle(node).paddingTop + '', 10) + parseInt(`${getComputedStyle(node).paddingTop}`, 10) +
parseInt(getComputedStyle(node).paddingBottom + '', 10); parseInt(`${getComputedStyle(node).paddingBottom}`, 10);
return totalHeight - padding; return totalHeight - padding;
} }
...@@ -35,14 +35,16 @@ interface IAutoHeightProps { ...@@ -35,14 +35,16 @@ interface IAutoHeightProps {
} }
function autoHeight() { function autoHeight() {
return function<P extends IAutoHeightProps>( return function<P extends IAutoHeightProps> (
WrappedComponent: React.ComponentClass<P> | React.SFC<P>, WrappedComponent: React.ComponentClass<P> | React.SFC<P>,
): React.ComponentClass<P> { ): React.ComponentClass<P> {
class AutoHeightComponent extends React.Component<P & IAutoHeightProps> { class AutoHeightComponent extends React.Component<P & IAutoHeightProps> {
state = { state = {
computedHeight: 0, computedHeight: 0,
}; };
root!: HTMLDivElement; root!: HTMLDivElement;
componentDidMount() { componentDidMount() {
const { height } = this.props; const { height } = this.props;
if (!height) { if (!height) {
...@@ -54,9 +56,11 @@ function autoHeight() { ...@@ -54,9 +56,11 @@ function autoHeight() {
} }
} }
} }
handleRoot = (node: HTMLDivElement) => { handleRoot = (node: HTMLDivElement) => {
this.root = node; this.root = node;
}; };
render() { render() {
const { height } = this.props; const { height } = this.props;
const { computedHeight } = this.state; const { computedHeight } = this.state;
......
...@@ -3,6 +3,7 @@ import Gauge from './Gauge'; ...@@ -3,6 +3,7 @@ import Gauge from './Gauge';
import WaterWave from './WaterWave'; import WaterWave from './WaterWave';
import TagCloud from './TagCloud'; import TagCloud from './TagCloud';
import MiniArea from './MiniArea'; import MiniArea from './MiniArea';
const Charts = { const Charts = {
Pie, Pie,
WaterWave, WaterWave,
......
...@@ -4,11 +4,11 @@ import { formatMessage, FormattedMessage } from 'umi-plugin-react/locale'; ...@@ -4,11 +4,11 @@ import { formatMessage, FormattedMessage } from 'umi-plugin-react/locale';
import { Row, Col, Card, Statistic, Tooltip } from 'antd'; import { Row, Col, Card, Statistic, Tooltip } from 'antd';
import numeral from 'numeral'; import numeral from 'numeral';
import { Dispatch } from 'redux'; import { Dispatch } from 'redux';
import { GridContent } from '@ant-design/pro-layout';
import { IStateType } from './model'; import { IStateType } from './model';
import ActiveChart from './components/ActiveChart'; import ActiveChart from './components/ActiveChart';
import styles from './style.less'; import styles from './style.less';
import Charts from './components/Charts'; import Charts from './components/Charts';
import { GridContent } from '@ant-design/pro-layout';
const { Countdown } = Statistic; const { Countdown } = Statistic;
......
import { queryTags } from './service'; import { Reducer, AnyAction } from 'redux';
import { ITag } from './data';
import { Reducer } from 'redux';
import { EffectsCommandMap } from 'dva'; import { EffectsCommandMap } from 'dva';
import { AnyAction } from 'redux';
import { ITag } from './data';
import { queryTags } from './service';
export interface IStateType { export interface IStateType {
tags: ITag[]; tags: ITag[];
......
...@@ -7,10 +7,10 @@ export type IReactComponent<P = any> = ...@@ -7,10 +7,10 @@ export type IReactComponent<P = any> =
function computeHeight(node: HTMLDivElement) { function computeHeight(node: HTMLDivElement) {
node.style.height = '100%'; node.style.height = '100%';
const totalHeight = parseInt(getComputedStyle(node).height + '', 10); const totalHeight = parseInt(`${getComputedStyle(node).height}`, 10);
const padding = const padding =
parseInt(getComputedStyle(node).paddingTop + '', 10) + parseInt(`${getComputedStyle(node).paddingTop}`, 10) +
parseInt(getComputedStyle(node).paddingBottom + '', 10); parseInt(`${getComputedStyle(node).paddingBottom}`, 10);
return totalHeight - padding; return totalHeight - padding;
} }
...@@ -35,14 +35,16 @@ interface IAutoHeightProps { ...@@ -35,14 +35,16 @@ interface IAutoHeightProps {
} }
function autoHeight() { function autoHeight() {
return function<P extends IAutoHeightProps>( return function<P extends IAutoHeightProps> (
WrappedComponent: React.ComponentClass<P> | React.SFC<P>, WrappedComponent: React.ComponentClass<P> | React.SFC<P>,
): React.ComponentClass<P> { ): React.ComponentClass<P> {
class AutoHeightComponent extends React.Component<P & IAutoHeightProps> { class AutoHeightComponent extends React.Component<P & IAutoHeightProps> {
state = { state = {
computedHeight: 0, computedHeight: 0,
}; };
root!: HTMLDivElement; root!: HTMLDivElement;
componentDidMount() { componentDidMount() {
const { height } = this.props; const { height } = this.props;
if (!height) { if (!height) {
...@@ -55,9 +57,11 @@ function autoHeight() { ...@@ -55,9 +57,11 @@ function autoHeight() {
} }
} }
} }
handleRoot = (node: HTMLDivElement) => { handleRoot = (node: HTMLDivElement) => {
this.root = node; this.root = node;
}; };
render() { render() {
const { height } = this.props; const { height } = this.props;
const { computedHeight } = this.state; const { computedHeight } = this.state;
......
...@@ -9,11 +9,11 @@ export interface IRadarProps { ...@@ -9,11 +9,11 @@ export interface IRadarProps {
height?: number; height?: number;
padding?: [number, number, number, number]; padding?: [number, number, number, number];
hasLegend?: boolean; hasLegend?: boolean;
data: Array<{ data: {
name: string; name: string;
label: string; label: string;
value: string | number; value: string | number;
}>; }[];
colors?: string[]; colors?: string[];
animate?: boolean; animate?: boolean;
forceFit?: boolean; forceFit?: boolean;
...@@ -21,20 +21,22 @@ export interface IRadarProps { ...@@ -21,20 +21,22 @@ export interface IRadarProps {
style?: React.CSSProperties; style?: React.CSSProperties;
} }
interface IRadarState { interface IRadarState {
legendData: Array<{ legendData: {
checked: boolean; checked: boolean;
name: string; name: string;
color: string; color: string;
percent: number; percent: number;
value: string; value: string;
}>; }[];
} }
/* eslint react/no-danger:0 */ /* eslint react/no-danger:0 */
class Radar extends Component<IRadarProps, IRadarState> { class Radar extends Component<IRadarProps, IRadarState> {
state: IRadarState = { state: IRadarState = {
legendData: [], legendData: [],
}; };
chart: G2.Chart | undefined; chart: G2.Chart | undefined;
node: HTMLDivElement | undefined; node: HTMLDivElement | undefined;
componentDidMount() { componentDidMount() {
...@@ -97,7 +99,7 @@ class Radar extends Component<IRadarProps, IRadarState> { ...@@ -97,7 +99,7 @@ class Radar extends Component<IRadarProps, IRadarState> {
const filteredLegendData = legendData.filter(l => l.checked).map(l => l.name); const filteredLegendData = legendData.filter(l => l.checked).map(l => l.name);
if (this.chart) { if (this.chart) {
this.chart.filter('name', val => filteredLegendData.indexOf(val + '') > -1); this.chart.filter('name', val => filteredLegendData.indexOf(`${val}`) > -1);
this.chart.repaint(); this.chart.repaint();
} }
......
...@@ -5,11 +5,11 @@ import Link from 'umi/link'; ...@@ -5,11 +5,11 @@ import Link from 'umi/link';
import { Row, Col, Card, List, Avatar } from 'antd'; import { Row, Col, Card, List, Avatar } from 'antd';
import { Dispatch } from 'redux'; import { Dispatch } from 'redux';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import EditableLinkGroup from './components/EditableLinkGroup'; import EditableLinkGroup from './components/EditableLinkGroup';
import Radar from './components/Radar'; import Radar from './components/Radar';
import { ModalState } from './model'; import { ModalState } from './model';
import { ICurrentUser, IActivities, IRadarData, INotice } from './data'; import { ICurrentUser, IActivities, IRadarData, INotice } from './data';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import styles from './style.less'; import styles from './style.less';
...@@ -209,9 +209,7 @@ class PAGE_NAME_UPPER_CAMEL_CASE extends PureComponent<BLOCK_NAME_CAMEL_CASEProp ...@@ -209,9 +209,7 @@ class PAGE_NAME_UPPER_CAMEL_CASE extends PureComponent<BLOCK_NAME_CAMEL_CASEProp
> >
<List<IActivities> <List<IActivities>
loading={activitiesLoading} loading={activitiesLoading}
renderItem={item => { renderItem={item => this.renderActivities(item)}
return this.renderActivities(item);
}}
dataSource={activities} dataSource={activities}
className={styles.activitiesList} className={styles.activitiesList}
size="large" size="large"
......
...@@ -7,6 +7,7 @@ flow ...@@ -7,6 +7,7 @@ flow
```sh ```sh
umi block add ant-design-pro/flow umi block add ant-design-pro/flow
``` ```
## SNAPSHOT ## SNAPSHOT
![SNAPSHOT](./snapshot.png) ![SNAPSHOT](./snapshot.png)
......
...@@ -3,8 +3,7 @@ import { NodeMenu, EdgeMenu, GroupMenu, MultiMenu, CanvasMenu, ContextMenu } fro ...@@ -3,8 +3,7 @@ import { NodeMenu, EdgeMenu, GroupMenu, MultiMenu, CanvasMenu, ContextMenu } fro
import MenuItem from './MenuItem'; import MenuItem from './MenuItem';
import styles from './index.less'; import styles from './index.less';
const FlowContextMenu = () => { const FlowContextMenu = () => (
return (
<ContextMenu className={styles.contextMenu}> <ContextMenu className={styles.contextMenu}>
<NodeMenu> <NodeMenu>
<MenuItem command="copy" /> <MenuItem command="copy" />
...@@ -31,6 +30,5 @@ const FlowContextMenu = () => { ...@@ -31,6 +30,5 @@ const FlowContextMenu = () => {
</CanvasMenu> </CanvasMenu>
</ContextMenu> </ContextMenu>
); );
};
export default FlowContextMenu; export default FlowContextMenu;
...@@ -3,9 +3,7 @@ import { Command } from 'gg-editor'; ...@@ -3,9 +3,7 @@ import { Command } from 'gg-editor';
import IconFont from '../../common/IconFont'; import IconFont from '../../common/IconFont';
import styles from './index.less'; import styles from './index.less';
const upperFirst = (str: string) => { const upperFirst = (str: string) => str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
return str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
};
interface MenuItemProps { interface MenuItemProps {
command: string; command: string;
......
...@@ -3,8 +3,7 @@ import { NodeMenu, CanvasMenu, ContextMenu } from 'gg-editor'; ...@@ -3,8 +3,7 @@ import { NodeMenu, CanvasMenu, ContextMenu } from 'gg-editor';
import MenuItem from './MenuItem'; import MenuItem from './MenuItem';
import styles from './index.less'; import styles from './index.less';
const MindContextMenu = () => { const MindContextMenu = () => (
return (
<ContextMenu className={styles.contextMenu}> <ContextMenu className={styles.contextMenu}>
<NodeMenu> <NodeMenu>
<MenuItem command="append" text="Topic" /> <MenuItem command="append" text="Topic" />
...@@ -19,6 +18,5 @@ const MindContextMenu = () => { ...@@ -19,6 +18,5 @@ const MindContextMenu = () => {
</CanvasMenu> </CanvasMenu>
</ContextMenu> </ContextMenu>
); );
};
export default MindContextMenu; export default MindContextMenu;
...@@ -3,9 +3,7 @@ import { Card, Form, Input, Select } from 'antd'; ...@@ -3,9 +3,7 @@ import { Card, Form, Input, Select } from 'antd';
import { withPropsAPI } from 'gg-editor'; import { withPropsAPI } from 'gg-editor';
import { FormComponentProps } from 'antd/es/form'; import { FormComponentProps } from 'antd/es/form';
const upperFirst = (str: string) => { const upperFirst = (str: string) => str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
return str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
};
const { Item } = Form; const { Item } = Form;
const { Option } = Select; const { Option } = Select;
...@@ -60,15 +58,13 @@ class DetailForm extends React.Component<DetailFormProps> { ...@@ -60,15 +58,13 @@ class DetailForm extends React.Component<DetailFormProps> {
}, 0); }, 0);
}; };
renderEdgeShapeSelect = () => { renderEdgeShapeSelect = () => (
return (
<Select onChange={this.handleSubmit}> <Select onChange={this.handleSubmit}>
<Option value="flow-smooth">Smooth</Option> <Option value="flow-smooth">Smooth</Option>
<Option value="flow-polyline">Polyline</Option> <Option value="flow-polyline">Polyline</Option>
<Option value="flow-polyline-round">Polyline Round</Option> <Option value="flow-polyline-round">Polyline Round</Option>
</Select> </Select>
); );
};
renderNodeDetail = () => { renderNodeDetail = () => {
const { form } = this.props; const { form } = this.props;
......
...@@ -4,8 +4,7 @@ import { NodePanel, EdgePanel, GroupPanel, MultiPanel, CanvasPanel, DetailPanel ...@@ -4,8 +4,7 @@ import { NodePanel, EdgePanel, GroupPanel, MultiPanel, CanvasPanel, DetailPanel
import DetailForm from './DetailForm'; import DetailForm from './DetailForm';
import styles from './index.less'; import styles from './index.less';
const FlowDetailPanel = () => { const FlowDetailPanel = () => (
return (
<DetailPanel className={styles.detailPanel}> <DetailPanel className={styles.detailPanel}>
<NodePanel> <NodePanel>
<DetailForm type="node" /> <DetailForm type="node" />
...@@ -24,6 +23,5 @@ const FlowDetailPanel = () => { ...@@ -24,6 +23,5 @@ const FlowDetailPanel = () => {
</CanvasPanel> </CanvasPanel>
</DetailPanel> </DetailPanel>
); );
};
export default FlowDetailPanel; export default FlowDetailPanel;
...@@ -4,8 +4,7 @@ import { NodePanel, CanvasPanel, DetailPanel } from 'gg-editor'; ...@@ -4,8 +4,7 @@ import { NodePanel, CanvasPanel, DetailPanel } from 'gg-editor';
import DetailForm from './DetailForm'; import DetailForm from './DetailForm';
import styles from './index.less'; import styles from './index.less';
const MindDetailPanel = () => { const MindDetailPanel = () => (
return (
<DetailPanel className={styles.detailPanel}> <DetailPanel className={styles.detailPanel}>
<NodePanel> <NodePanel>
<DetailForm type="node" /> <DetailForm type="node" />
...@@ -15,6 +14,5 @@ const MindDetailPanel = () => { ...@@ -15,6 +14,5 @@ const MindDetailPanel = () => {
</CanvasPanel> </CanvasPanel>
</DetailPanel> </DetailPanel>
); );
};
export default MindDetailPanel; export default MindDetailPanel;
...@@ -3,8 +3,7 @@ import { Card } from 'antd'; ...@@ -3,8 +3,7 @@ import { Card } from 'antd';
import { ItemPanel, Item } from 'gg-editor'; import { ItemPanel, Item } from 'gg-editor';
import styles from './index.less'; import styles from './index.less';
const FlowItemPanel = () => { const FlowItemPanel = () => (
return (
<ItemPanel className={styles.itemPanel}> <ItemPanel className={styles.itemPanel}>
<Card bordered={false}> <Card bordered={false}>
<Item <Item
...@@ -50,6 +49,5 @@ const FlowItemPanel = () => { ...@@ -50,6 +49,5 @@ const FlowItemPanel = () => {
</Card> </Card>
</ItemPanel> </ItemPanel>
); );
};
export default FlowItemPanel; export default FlowItemPanel;
...@@ -3,8 +3,7 @@ import { Card } from 'antd'; ...@@ -3,8 +3,7 @@ import { Card } from 'antd';
import { ItemPanel, Item } from 'gg-editor'; import { ItemPanel, Item } from 'gg-editor';
import styles from './index.less'; import styles from './index.less';
const KoniItemPanel = () => { const KoniItemPanel = () => (
return (
<ItemPanel className={styles.itemPanel}> <ItemPanel className={styles.itemPanel}>
<Card bordered={false}> <Card bordered={false}>
<Item <Item
...@@ -49,6 +48,5 @@ const KoniItemPanel = () => { ...@@ -49,6 +48,5 @@ const KoniItemPanel = () => {
</Card> </Card>
</ItemPanel> </ItemPanel>
); );
};
export default KoniItemPanel; export default KoniItemPanel;
...@@ -2,12 +2,10 @@ import React from 'react'; ...@@ -2,12 +2,10 @@ import React from 'react';
import { Card } from 'antd'; import { Card } from 'antd';
import { Minimap } from 'gg-editor'; import { Minimap } from 'gg-editor';
const EditorMinimap = () => { const EditorMinimap = () => (
return (
<Card type="inner" size="small" title="Minimap" bordered={false}> <Card type="inner" size="small" title="Minimap" bordered={false}>
<Minimap height={200} /> <Minimap height={200} />
</Card> </Card>
); );
};
export default EditorMinimap; export default EditorMinimap;
...@@ -4,8 +4,7 @@ import { Toolbar } from 'gg-editor'; ...@@ -4,8 +4,7 @@ import { Toolbar } from 'gg-editor';
import ToolbarButton from './ToolbarButton'; import ToolbarButton from './ToolbarButton';
import styles from './index.less'; import styles from './index.less';
const FlowToolbar = () => { const FlowToolbar = () => (
return (
<Toolbar className={styles.toolbar}> <Toolbar className={styles.toolbar}>
<ToolbarButton command="undo" /> <ToolbarButton command="undo" />
<ToolbarButton command="redo" /> <ToolbarButton command="redo" />
...@@ -27,6 +26,5 @@ const FlowToolbar = () => { ...@@ -27,6 +26,5 @@ const FlowToolbar = () => {
<ToolbarButton command="unGroup" icon="ungroup" text="Ungroup" /> <ToolbarButton command="unGroup" icon="ungroup" text="Ungroup" />
</Toolbar> </Toolbar>
); );
};
export default FlowToolbar; export default FlowToolbar;
...@@ -4,8 +4,7 @@ import { Toolbar } from 'gg-editor'; ...@@ -4,8 +4,7 @@ import { Toolbar } from 'gg-editor';
import ToolbarButton from './ToolbarButton'; import ToolbarButton from './ToolbarButton';
import styles from './index.less'; import styles from './index.less';
const FlowToolbar = () => { const FlowToolbar = () => (
return (
<Toolbar className={styles.toolbar}> <Toolbar className={styles.toolbar}>
<ToolbarButton command="undo" /> <ToolbarButton command="undo" />
<ToolbarButton command="redo" /> <ToolbarButton command="redo" />
...@@ -22,6 +21,5 @@ const FlowToolbar = () => { ...@@ -22,6 +21,5 @@ const FlowToolbar = () => {
<ToolbarButton command="expand" text="Unfold" /> <ToolbarButton command="expand" text="Unfold" />
</Toolbar> </Toolbar>
); );
};
export default FlowToolbar; export default FlowToolbar;
...@@ -4,9 +4,7 @@ import { Command } from 'gg-editor'; ...@@ -4,9 +4,7 @@ import { Command } from 'gg-editor';
import IconFont from '../../common/IconFont'; import IconFont from '../../common/IconFont';
import styles from './index.less'; import styles from './index.less';
const upperFirst = (str: string) => { const upperFirst = (str: string) => str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
return str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
};
interface ToolbarButtonProps { interface ToolbarButtonProps {
command: string; command: string;
......
import React from 'react'; import React from 'react';
import { Row, Col } from 'antd'; import { Row, Col } from 'antd';
import GGEditor, { Flow } from 'gg-editor'; import GGEditor, { Flow } from 'gg-editor';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { formatMessage } from 'umi-plugin-react/locale';
import EditorMinimap from './components/EditorMinimap'; import EditorMinimap from './components/EditorMinimap';
import { FlowContextMenu } from './components/EditorContextMenu'; import { FlowContextMenu } from './components/EditorContextMenu';
import { FlowToolbar } from './components/EditorToolbar'; import { FlowToolbar } from './components/EditorToolbar';
import { FlowItemPanel } from './components/EditorItemPanel'; import { FlowItemPanel } from './components/EditorItemPanel';
import { FlowDetailPanel } from './components/EditorDetailPanel'; import { FlowDetailPanel } from './components/EditorDetailPanel';
import styles from './index.less'; import styles from './index.less';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { formatMessage } from 'umi-plugin-react/locale';
GGEditor.setTrackable(false); GGEditor.setTrackable(false);
export default () => { export default () => (
return (
<PageHeaderWrapper <PageHeaderWrapper
content={formatMessage({ content={formatMessage({
id: 'BLOCK_NAME.description', id: 'BLOCK_NAME.description',
...@@ -41,5 +40,4 @@ export default () => { ...@@ -41,5 +40,4 @@ export default () => {
<FlowContextMenu /> <FlowContextMenu />
</GGEditor> </GGEditor>
</PageHeaderWrapper> </PageHeaderWrapper>
); );
};
...@@ -7,6 +7,7 @@ flow ...@@ -7,6 +7,7 @@ flow
```sh ```sh
umi block add ant-design-pro/flow umi block add ant-design-pro/flow
``` ```
## SNAPSHOT ## SNAPSHOT
![SNAPSHOT](./snapshot.png) ![SNAPSHOT](./snapshot.png)
......
...@@ -3,8 +3,7 @@ import { NodeMenu, EdgeMenu, GroupMenu, MultiMenu, CanvasMenu, ContextMenu } fro ...@@ -3,8 +3,7 @@ import { NodeMenu, EdgeMenu, GroupMenu, MultiMenu, CanvasMenu, ContextMenu } fro
import MenuItem from './MenuItem'; import MenuItem from './MenuItem';
import styles from './index.less'; import styles from './index.less';
const FlowContextMenu = () => { const FlowContextMenu = () => (
return (
<ContextMenu className={styles.contextMenu}> <ContextMenu className={styles.contextMenu}>
<NodeMenu> <NodeMenu>
<MenuItem command="copy" /> <MenuItem command="copy" />
...@@ -31,6 +30,5 @@ const FlowContextMenu = () => { ...@@ -31,6 +30,5 @@ const FlowContextMenu = () => {
</CanvasMenu> </CanvasMenu>
</ContextMenu> </ContextMenu>
); );
};
export default FlowContextMenu; export default FlowContextMenu;
...@@ -3,9 +3,8 @@ import { Command } from 'gg-editor'; ...@@ -3,9 +3,8 @@ import { Command } from 'gg-editor';
import IconFont from '../../common/IconFont'; import IconFont from '../../common/IconFont';
import styles from './index.less'; import styles from './index.less';
const upperFirst = (str: string) => { const upperFirst = (str: string) =>
return str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase()); str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
};
interface MenuItemProps { interface MenuItemProps {
command: string; command: string;
......
...@@ -3,8 +3,7 @@ import { NodeMenu, CanvasMenu, ContextMenu } from 'gg-editor'; ...@@ -3,8 +3,7 @@ import { NodeMenu, CanvasMenu, ContextMenu } from 'gg-editor';
import MenuItem from './MenuItem'; import MenuItem from './MenuItem';
import styles from './index.less'; import styles from './index.less';
const MindContextMenu = () => { const MindContextMenu = () => (
return (
<ContextMenu className={styles.contextMenu}> <ContextMenu className={styles.contextMenu}>
<NodeMenu> <NodeMenu>
<MenuItem command="append" text="Topic" /> <MenuItem command="append" text="Topic" />
...@@ -19,6 +18,5 @@ const MindContextMenu = () => { ...@@ -19,6 +18,5 @@ const MindContextMenu = () => {
</CanvasMenu> </CanvasMenu>
</ContextMenu> </ContextMenu>
); );
};
export default MindContextMenu; export default MindContextMenu;
...@@ -3,9 +3,7 @@ import { Card, Form, Input, Select } from 'antd'; ...@@ -3,9 +3,7 @@ import { Card, Form, Input, Select } from 'antd';
import { withPropsAPI } from 'gg-editor'; import { withPropsAPI } from 'gg-editor';
import { FormComponentProps } from 'antd/es/form'; import { FormComponentProps } from 'antd/es/form';
const upperFirst = (str: string) => { const upperFirst = (str: string) => str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
return str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
};
const { Item } = Form; const { Item } = Form;
const { Option } = Select; const { Option } = Select;
...@@ -60,15 +58,13 @@ class DetailForm extends React.Component<DetailFormProps> { ...@@ -60,15 +58,13 @@ class DetailForm extends React.Component<DetailFormProps> {
}, 0); }, 0);
}; };
renderEdgeShapeSelect = () => { renderEdgeShapeSelect = () => (
return (
<Select onChange={this.handleSubmit}> <Select onChange={this.handleSubmit}>
<Option value="flow-smooth">Smooth</Option> <Option value="flow-smooth">Smooth</Option>
<Option value="flow-polyline">Polyline</Option> <Option value="flow-polyline">Polyline</Option>
<Option value="flow-polyline-round">Polyline Round</Option> <Option value="flow-polyline-round">Polyline Round</Option>
</Select> </Select>
); );
};
renderNodeDetail = () => { renderNodeDetail = () => {
const { form } = this.props; const { form } = this.props;
......
...@@ -4,8 +4,7 @@ import { NodePanel, EdgePanel, GroupPanel, MultiPanel, CanvasPanel, DetailPanel ...@@ -4,8 +4,7 @@ import { NodePanel, EdgePanel, GroupPanel, MultiPanel, CanvasPanel, DetailPanel
import DetailForm from './DetailForm'; import DetailForm from './DetailForm';
import styles from './index.less'; import styles from './index.less';
const FlowDetailPanel = () => { const FlowDetailPanel = () => (
return (
<DetailPanel className={styles.detailPanel}> <DetailPanel className={styles.detailPanel}>
<NodePanel> <NodePanel>
<DetailForm type="node" /> <DetailForm type="node" />
...@@ -24,6 +23,5 @@ const FlowDetailPanel = () => { ...@@ -24,6 +23,5 @@ const FlowDetailPanel = () => {
</CanvasPanel> </CanvasPanel>
</DetailPanel> </DetailPanel>
); );
};
export default FlowDetailPanel; export default FlowDetailPanel;
...@@ -4,8 +4,7 @@ import { NodePanel, CanvasPanel, DetailPanel } from 'gg-editor'; ...@@ -4,8 +4,7 @@ import { NodePanel, CanvasPanel, DetailPanel } from 'gg-editor';
import DetailForm from './DetailForm'; import DetailForm from './DetailForm';
import styles from './index.less'; import styles from './index.less';
const MindDetailPanel = () => { const MindDetailPanel = () => (
return (
<DetailPanel className={styles.detailPanel}> <DetailPanel className={styles.detailPanel}>
<NodePanel> <NodePanel>
<DetailForm type="node" /> <DetailForm type="node" />
...@@ -15,6 +14,5 @@ const MindDetailPanel = () => { ...@@ -15,6 +14,5 @@ const MindDetailPanel = () => {
</CanvasPanel> </CanvasPanel>
</DetailPanel> </DetailPanel>
); );
};
export default MindDetailPanel; export default MindDetailPanel;
...@@ -3,8 +3,7 @@ import { Card } from 'antd'; ...@@ -3,8 +3,7 @@ import { Card } from 'antd';
import { ItemPanel, Item } from 'gg-editor'; import { ItemPanel, Item } from 'gg-editor';
import styles from './index.less'; import styles from './index.less';
const FlowItemPanel = () => { const FlowItemPanel = () => (
return (
<ItemPanel className={styles.itemPanel}> <ItemPanel className={styles.itemPanel}>
<Card bordered={false}> <Card bordered={false}>
<Item <Item
...@@ -50,6 +49,5 @@ const FlowItemPanel = () => { ...@@ -50,6 +49,5 @@ const FlowItemPanel = () => {
</Card> </Card>
</ItemPanel> </ItemPanel>
); );
};
export default FlowItemPanel; export default FlowItemPanel;
...@@ -3,8 +3,7 @@ import { Card } from 'antd'; ...@@ -3,8 +3,7 @@ import { Card } from 'antd';
import { ItemPanel, Item } from 'gg-editor'; import { ItemPanel, Item } from 'gg-editor';
import styles from './index.less'; import styles from './index.less';
const KoniItemPanel = () => { const KoniItemPanel = () => (
return (
<ItemPanel className={styles.itemPanel}> <ItemPanel className={styles.itemPanel}>
<Card bordered={false}> <Card bordered={false}>
<Item <Item
...@@ -49,6 +48,5 @@ const KoniItemPanel = () => { ...@@ -49,6 +48,5 @@ const KoniItemPanel = () => {
</Card> </Card>
</ItemPanel> </ItemPanel>
); );
};
export default KoniItemPanel; export default KoniItemPanel;
...@@ -2,12 +2,10 @@ import React from 'react'; ...@@ -2,12 +2,10 @@ import React from 'react';
import { Card } from 'antd'; import { Card } from 'antd';
import { Minimap } from 'gg-editor'; import { Minimap } from 'gg-editor';
const EditorMinimap = () => { const EditorMinimap = () => (
return (
<Card type="inner" size="small" title="Minimap" bordered={false}> <Card type="inner" size="small" title="Minimap" bordered={false}>
<Minimap height={200} /> <Minimap height={200} />
</Card> </Card>
); );
};
export default EditorMinimap; export default EditorMinimap;
...@@ -4,8 +4,7 @@ import { Toolbar } from 'gg-editor'; ...@@ -4,8 +4,7 @@ import { Toolbar } from 'gg-editor';
import ToolbarButton from './ToolbarButton'; import ToolbarButton from './ToolbarButton';
import styles from './index.less'; import styles from './index.less';
const FlowToolbar = () => { const FlowToolbar = () => (
return (
<Toolbar className={styles.toolbar}> <Toolbar className={styles.toolbar}>
<ToolbarButton command="undo" /> <ToolbarButton command="undo" />
<ToolbarButton command="redo" /> <ToolbarButton command="redo" />
...@@ -27,6 +26,5 @@ const FlowToolbar = () => { ...@@ -27,6 +26,5 @@ const FlowToolbar = () => {
<ToolbarButton command="unGroup" icon="ungroup" text="Ungroup" /> <ToolbarButton command="unGroup" icon="ungroup" text="Ungroup" />
</Toolbar> </Toolbar>
); );
};
export default FlowToolbar; export default FlowToolbar;
...@@ -4,8 +4,7 @@ import { Toolbar } from 'gg-editor'; ...@@ -4,8 +4,7 @@ import { Toolbar } from 'gg-editor';
import ToolbarButton from './ToolbarButton'; import ToolbarButton from './ToolbarButton';
import styles from './index.less'; import styles from './index.less';
const FlowToolbar = () => { const FlowToolbar = () => (
return (
<Toolbar className={styles.toolbar}> <Toolbar className={styles.toolbar}>
<ToolbarButton command="undo" /> <ToolbarButton command="undo" />
<ToolbarButton command="redo" /> <ToolbarButton command="redo" />
...@@ -22,6 +21,5 @@ const FlowToolbar = () => { ...@@ -22,6 +21,5 @@ const FlowToolbar = () => {
<ToolbarButton command="expand" text="Unfold" /> <ToolbarButton command="expand" text="Unfold" />
</Toolbar> </Toolbar>
); );
};
export default FlowToolbar; export default FlowToolbar;
...@@ -4,9 +4,7 @@ import { Command } from 'gg-editor'; ...@@ -4,9 +4,7 @@ import { Command } from 'gg-editor';
import IconFont from '../../common/IconFont'; import IconFont from '../../common/IconFont';
import styles from './index.less'; import styles from './index.less';
const upperFirst = (str: string) => { const upperFirst = (str: string) => str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
return str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
};
interface ToolbarButtonProps { interface ToolbarButtonProps {
command: string; command: string;
......
import React from 'react'; import React from 'react';
import { Row, Col } from 'antd'; import { Row, Col } from 'antd';
import GGEditor, { Koni } from 'gg-editor'; import GGEditor, { Koni } from 'gg-editor';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { formatMessage } from 'umi-plugin-react/locale';
import EditorMinimap from './components/EditorMinimap'; import EditorMinimap from './components/EditorMinimap';
import { KoniContextMenu } from './components/EditorContextMenu'; import { KoniContextMenu } from './components/EditorContextMenu';
import { KoniToolbar } from './components/EditorToolbar'; import { KoniToolbar } from './components/EditorToolbar';
import { KoniItemPanel } from './components/EditorItemPanel'; import { KoniItemPanel } from './components/EditorItemPanel';
import { KoniDetailPanel } from './components/EditorDetailPanel'; import { KoniDetailPanel } from './components/EditorDetailPanel';
import styles from './index.less'; import styles from './index.less';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { formatMessage } from 'umi-plugin-react/locale';
GGEditor.setTrackable(false); GGEditor.setTrackable(false);
export default () => { export default () => (
return (
<PageHeaderWrapper <PageHeaderWrapper
content={formatMessage({ content={formatMessage({
id: 'BLOCK_NAME.description', id: 'BLOCK_NAME.description',
...@@ -42,4 +41,3 @@ export default () => { ...@@ -42,4 +41,3 @@ export default () => {
</GGEditor> </GGEditor>
</PageHeaderWrapper> </PageHeaderWrapper>
); );
};
...@@ -7,6 +7,7 @@ flow ...@@ -7,6 +7,7 @@ flow
```sh ```sh
umi block add ant-design-pro/flow umi block add ant-design-pro/flow
``` ```
## SNAPSHOT ## SNAPSHOT
![SNAPSHOT](./snapshot.png) ![SNAPSHOT](./snapshot.png)
......
...@@ -3,8 +3,7 @@ import { NodeMenu, EdgeMenu, GroupMenu, MultiMenu, CanvasMenu, ContextMenu } fro ...@@ -3,8 +3,7 @@ import { NodeMenu, EdgeMenu, GroupMenu, MultiMenu, CanvasMenu, ContextMenu } fro
import MenuItem from './MenuItem'; import MenuItem from './MenuItem';
import styles from './index.less'; import styles from './index.less';
const FlowContextMenu = () => { const FlowContextMenu = () => (
return (
<ContextMenu className={styles.contextMenu}> <ContextMenu className={styles.contextMenu}>
<NodeMenu> <NodeMenu>
<MenuItem command="copy" /> <MenuItem command="copy" />
...@@ -31,6 +30,5 @@ const FlowContextMenu = () => { ...@@ -31,6 +30,5 @@ const FlowContextMenu = () => {
</CanvasMenu> </CanvasMenu>
</ContextMenu> </ContextMenu>
); );
};
export default FlowContextMenu; export default FlowContextMenu;
...@@ -3,9 +3,7 @@ import { Command } from 'gg-editor'; ...@@ -3,9 +3,7 @@ import { Command } from 'gg-editor';
import IconFont from '../../common/IconFont'; import IconFont from '../../common/IconFont';
import styles from './index.less'; import styles from './index.less';
const upperFirst = (str: string) => { const upperFirst = (str: string) => str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
return str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
};
interface MenuItemProps { interface MenuItemProps {
command: string; command: string;
......
...@@ -3,8 +3,7 @@ import { NodeMenu, CanvasMenu, ContextMenu } from 'gg-editor'; ...@@ -3,8 +3,7 @@ import { NodeMenu, CanvasMenu, ContextMenu } from 'gg-editor';
import MenuItem from './MenuItem'; import MenuItem from './MenuItem';
import styles from './index.less'; import styles from './index.less';
const MindContextMenu = () => { const MindContextMenu = () => (
return (
<ContextMenu className={styles.contextMenu}> <ContextMenu className={styles.contextMenu}>
<NodeMenu> <NodeMenu>
<MenuItem command="append" text="Topic" /> <MenuItem command="append" text="Topic" />
...@@ -19,6 +18,5 @@ const MindContextMenu = () => { ...@@ -19,6 +18,5 @@ const MindContextMenu = () => {
</CanvasMenu> </CanvasMenu>
</ContextMenu> </ContextMenu>
); );
};
export default MindContextMenu; export default MindContextMenu;
...@@ -3,9 +3,7 @@ import { Card, Form, Input, Select } from 'antd'; ...@@ -3,9 +3,7 @@ import { Card, Form, Input, Select } from 'antd';
import { withPropsAPI } from 'gg-editor'; import { withPropsAPI } from 'gg-editor';
import { FormComponentProps } from 'antd/es/form'; import { FormComponentProps } from 'antd/es/form';
const upperFirst = (str: string) => { const upperFirst = (str: string) => str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
return str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
};
const { Item } = Form; const { Item } = Form;
const { Option } = Select; const { Option } = Select;
...@@ -60,15 +58,13 @@ class DetailForm extends React.Component<DetailFormProps> { ...@@ -60,15 +58,13 @@ class DetailForm extends React.Component<DetailFormProps> {
}, 0); }, 0);
}; };
renderEdgeShapeSelect = () => { renderEdgeShapeSelect = () => (
return (
<Select onChange={this.handleSubmit}> <Select onChange={this.handleSubmit}>
<Option value="flow-smooth">Smooth</Option> <Option value="flow-smooth">Smooth</Option>
<Option value="flow-polyline">Polyline</Option> <Option value="flow-polyline">Polyline</Option>
<Option value="flow-polyline-round">Polyline Round</Option> <Option value="flow-polyline-round">Polyline Round</Option>
</Select> </Select>
); );
};
renderNodeDetail = () => { renderNodeDetail = () => {
const { form } = this.props; const { form } = this.props;
......
...@@ -4,8 +4,7 @@ import { NodePanel, EdgePanel, GroupPanel, MultiPanel, CanvasPanel, DetailPanel ...@@ -4,8 +4,7 @@ import { NodePanel, EdgePanel, GroupPanel, MultiPanel, CanvasPanel, DetailPanel
import DetailForm from './DetailForm'; import DetailForm from './DetailForm';
import styles from './index.less'; import styles from './index.less';
const FlowDetailPanel = () => { const FlowDetailPanel = () => (
return (
<DetailPanel className={styles.detailPanel}> <DetailPanel className={styles.detailPanel}>
<NodePanel> <NodePanel>
<DetailForm type="node" /> <DetailForm type="node" />
...@@ -24,6 +23,5 @@ const FlowDetailPanel = () => { ...@@ -24,6 +23,5 @@ const FlowDetailPanel = () => {
</CanvasPanel> </CanvasPanel>
</DetailPanel> </DetailPanel>
); );
};
export default FlowDetailPanel; export default FlowDetailPanel;
...@@ -4,8 +4,7 @@ import { NodePanel, CanvasPanel, DetailPanel } from 'gg-editor'; ...@@ -4,8 +4,7 @@ import { NodePanel, CanvasPanel, DetailPanel } from 'gg-editor';
import DetailForm from './DetailForm'; import DetailForm from './DetailForm';
import styles from './index.less'; import styles from './index.less';
const MindDetailPanel = () => { const MindDetailPanel = () => (
return (
<DetailPanel className={styles.detailPanel}> <DetailPanel className={styles.detailPanel}>
<NodePanel> <NodePanel>
<DetailForm type="node" /> <DetailForm type="node" />
...@@ -15,6 +14,5 @@ const MindDetailPanel = () => { ...@@ -15,6 +14,5 @@ const MindDetailPanel = () => {
</CanvasPanel> </CanvasPanel>
</DetailPanel> </DetailPanel>
); );
};
export default MindDetailPanel; export default MindDetailPanel;
...@@ -3,8 +3,7 @@ import { Card } from 'antd'; ...@@ -3,8 +3,7 @@ import { Card } from 'antd';
import { ItemPanel, Item } from 'gg-editor'; import { ItemPanel, Item } from 'gg-editor';
import styles from './index.less'; import styles from './index.less';
const FlowItemPanel = () => { const FlowItemPanel = () => (
return (
<ItemPanel className={styles.itemPanel}> <ItemPanel className={styles.itemPanel}>
<Card bordered={false}> <Card bordered={false}>
<Item <Item
...@@ -50,6 +49,5 @@ const FlowItemPanel = () => { ...@@ -50,6 +49,5 @@ const FlowItemPanel = () => {
</Card> </Card>
</ItemPanel> </ItemPanel>
); );
};
export default FlowItemPanel; export default FlowItemPanel;
...@@ -3,8 +3,7 @@ import { Card } from 'antd'; ...@@ -3,8 +3,7 @@ import { Card } from 'antd';
import { ItemPanel, Item } from 'gg-editor'; import { ItemPanel, Item } from 'gg-editor';
import styles from './index.less'; import styles from './index.less';
const KoniItemPanel = () => { const KoniItemPanel = () => (
return (
<ItemPanel className={styles.itemPanel}> <ItemPanel className={styles.itemPanel}>
<Card bordered={false}> <Card bordered={false}>
<Item <Item
...@@ -49,6 +48,5 @@ const KoniItemPanel = () => { ...@@ -49,6 +48,5 @@ const KoniItemPanel = () => {
</Card> </Card>
</ItemPanel> </ItemPanel>
); );
};
export default KoniItemPanel; export default KoniItemPanel;
...@@ -2,12 +2,10 @@ import React from 'react'; ...@@ -2,12 +2,10 @@ import React from 'react';
import { Card } from 'antd'; import { Card } from 'antd';
import { Minimap } from 'gg-editor'; import { Minimap } from 'gg-editor';
const EditorMinimap = () => { const EditorMinimap = () => (
return (
<Card type="inner" size="small" title="Minimap" bordered={false}> <Card type="inner" size="small" title="Minimap" bordered={false}>
<Minimap height={200} /> <Minimap height={200} />
</Card> </Card>
); );
};
export default EditorMinimap; export default EditorMinimap;
...@@ -4,8 +4,7 @@ import { Toolbar } from 'gg-editor'; ...@@ -4,8 +4,7 @@ import { Toolbar } from 'gg-editor';
import ToolbarButton from './ToolbarButton'; import ToolbarButton from './ToolbarButton';
import styles from './index.less'; import styles from './index.less';
const FlowToolbar = () => { const FlowToolbar = () => (
return (
<Toolbar className={styles.toolbar}> <Toolbar className={styles.toolbar}>
<ToolbarButton command="undo" /> <ToolbarButton command="undo" />
<ToolbarButton command="redo" /> <ToolbarButton command="redo" />
...@@ -27,6 +26,5 @@ const FlowToolbar = () => { ...@@ -27,6 +26,5 @@ const FlowToolbar = () => {
<ToolbarButton command="unGroup" icon="ungroup" text="Ungroup" /> <ToolbarButton command="unGroup" icon="ungroup" text="Ungroup" />
</Toolbar> </Toolbar>
); );
};
export default FlowToolbar; export default FlowToolbar;
...@@ -4,8 +4,7 @@ import { Toolbar } from 'gg-editor'; ...@@ -4,8 +4,7 @@ import { Toolbar } from 'gg-editor';
import ToolbarButton from './ToolbarButton'; import ToolbarButton from './ToolbarButton';
import styles from './index.less'; import styles from './index.less';
const FlowToolbar = () => { const FlowToolbar = () => (
return (
<Toolbar className={styles.toolbar}> <Toolbar className={styles.toolbar}>
<ToolbarButton command="undo" /> <ToolbarButton command="undo" />
<ToolbarButton command="redo" /> <ToolbarButton command="redo" />
...@@ -22,6 +21,5 @@ const FlowToolbar = () => { ...@@ -22,6 +21,5 @@ const FlowToolbar = () => {
<ToolbarButton command="expand" text="Unfold" /> <ToolbarButton command="expand" text="Unfold" />
</Toolbar> </Toolbar>
); );
};
export default FlowToolbar; export default FlowToolbar;
...@@ -4,9 +4,7 @@ import { Command } from 'gg-editor'; ...@@ -4,9 +4,7 @@ import { Command } from 'gg-editor';
import IconFont from '../../common/IconFont'; import IconFont from '../../common/IconFont';
import styles from './index.less'; import styles from './index.less';
const upperFirst = (str: string) => { const upperFirst = (str: string) => str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
return str.toLowerCase().replace(/( |^)[a-z]/g, (l: string) => l.toUpperCase());
};
interface ToolbarButtonProps { interface ToolbarButtonProps {
command: string; command: string;
......
import React from 'react'; import React from 'react';
import { Row, Col } from 'antd'; import { Row, Col } from 'antd';
import GGEditor, { Mind } from 'gg-editor'; import GGEditor, { Mind } from 'gg-editor';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { formatMessage } from 'umi-plugin-react/locale';
import EditorMinimap from './components/EditorMinimap'; import EditorMinimap from './components/EditorMinimap';
import { MindContextMenu } from './components/EditorContextMenu'; import { MindContextMenu } from './components/EditorContextMenu';
import { MindToolbar } from './components/EditorToolbar'; import { MindToolbar } from './components/EditorToolbar';
import { MindDetailPanel } from './components/EditorDetailPanel'; import { MindDetailPanel } from './components/EditorDetailPanel';
import data from './worldCup2018.json'; import data from './worldCup2018.json';
import styles from './index.less'; import styles from './index.less';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { formatMessage } from 'umi-plugin-react/locale';
GGEditor.setTrackable(false); GGEditor.setTrackable(false);
export default () => { export default () => (
return (
<PageHeaderWrapper <PageHeaderWrapper
content={formatMessage({ content={formatMessage({
id: 'BLOCK_NAME.description', id: 'BLOCK_NAME.description',
...@@ -39,4 +38,3 @@ export default () => { ...@@ -39,4 +38,3 @@ export default () => {
</GGEditor> </GGEditor>
</PageHeaderWrapper> </PageHeaderWrapper>
); );
};
...@@ -2,9 +2,9 @@ import { Button } from 'antd'; ...@@ -2,9 +2,9 @@ import { Button } from 'antd';
import classNames from 'classnames'; import classNames from 'classnames';
import * as H from 'history'; import * as H from 'history';
import React, { createElement } from 'react'; import React, { createElement } from 'react';
import Link from 'umi/link';
import styles from './index.less'; import styles from './index.less';
import config from './typeConfig'; import config from './typeConfig';
import Link from 'umi/link';
export interface ExceptionProps< export interface ExceptionProps<
L = { L = {
......
...@@ -2,9 +2,9 @@ import { Button } from 'antd'; ...@@ -2,9 +2,9 @@ import { Button } from 'antd';
import classNames from 'classnames'; import classNames from 'classnames';
import * as H from 'history'; import * as H from 'history';
import React, { createElement } from 'react'; import React, { createElement } from 'react';
import Link from 'umi/link';
import styles from './index.less'; import styles from './index.less';
import config from './typeConfig'; import config from './typeConfig';
import Link from 'umi/link';
export interface ExceptionProps< export interface ExceptionProps<
L = { L = {
......
...@@ -2,9 +2,9 @@ import { Button } from 'antd'; ...@@ -2,9 +2,9 @@ import { Button } from 'antd';
import classNames from 'classnames'; import classNames from 'classnames';
import * as H from 'history'; import * as H from 'history';
import React, { createElement } from 'react'; import React, { createElement } from 'react';
import Link from 'umi/link';
import styles from './index.less'; import styles from './index.less';
import config from './typeConfig'; import config from './typeConfig';
import Link from 'umi/link';
export interface ExceptionProps< export interface ExceptionProps<
L = { L = {
......
...@@ -13,9 +13,11 @@ class TableForm extends PureComponent { ...@@ -13,9 +13,11 @@ class TableForm extends PureComponent {
value: nextProps.value, value: nextProps.value,
}; };
} }
index = 0; index = 0;
cacheOriginData = {}; cacheOriginData = {};
columns = [ columns = [
{ {
title: '成员姓名', title: '成员姓名',
...@@ -230,6 +232,7 @@ class TableForm extends PureComponent { ...@@ -230,6 +232,7 @@ class TableForm extends PureComponent {
this.setState({ data: newData }); this.setState({ data: newData });
this.clickedCancel = false; this.clickedCancel = false;
} }
render() { render() {
const { loading, data } = this.state; const { loading, data } = this.state;
......
...@@ -13,12 +13,12 @@ import { ...@@ -13,12 +13,12 @@ import {
Popover, Popover,
} from 'antd'; } from 'antd';
import { connect } from 'dva'; import { connect } from 'dva';
import TableForm from './components/TableForm';
import styles from './style.less';
import { FormComponentProps } from 'antd/es/form'; import { FormComponentProps } from 'antd/es/form';
import { Dispatch } from 'redux'; import { Dispatch } from 'redux';
import FooterToolbar from './components/FooterToolbar';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import TableForm from './components/TableForm';
import styles from './style.less';
import FooterToolbar from './components/FooterToolbar';
const { Option } = Select; const { Option } = Select;
const { RangePicker } = DatePicker; const { RangePicker } = DatePicker;
......
import { message } from 'antd'; import { message } from 'antd';
import { fakeSubmitForm } from './service';
import { EffectsCommandMap } from 'dva'; import { EffectsCommandMap } from 'dva';
import { AnyAction } from 'redux'; import { AnyAction } from 'redux';
import { fakeSubmitForm } from './service';
export interface ModalState {} export interface ModalState {}
......
...@@ -14,9 +14,9 @@ import { ...@@ -14,9 +14,9 @@ import {
Tooltip, Tooltip,
} from 'antd'; } from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import styles from './style.less';
import { FormComponentProps } from 'antd/es/form'; import { FormComponentProps } from 'antd/es/form';
import { Dispatch } from 'redux'; import { Dispatch } from 'redux';
import styles from './style.less';
const FormItem = Form.Item; const FormItem = Form.Item;
const { Option } = Select; const { Option } = Select;
......
import { message } from 'antd'; import { message } from 'antd';
import { fakeSubmitForm } from './service';
import { EffectsCommandMap } from 'dva'; import { EffectsCommandMap } from 'dva';
import { AnyAction } from 'redux'; import { AnyAction } from 'redux';
import { fakeSubmitForm } from './service';
export interface ModalState {} export interface ModalState {}
......
import React, { Fragment } from 'react'; import React, { Fragment } from 'react';
import { connect } from 'dva'; import { connect } from 'dva';
import { Form, Input, Button, Select, Divider } from 'antd'; import { Form, Input, Button, Select, Divider } from 'antd';
import styles from './index.less';
import { FormComponentProps } from 'antd/es/form'; import { FormComponentProps } from 'antd/es/form';
import { IStateType } from '../../model';
import { Dispatch } from 'redux'; import { Dispatch } from 'redux';
import styles from './index.less';
import { IStateType } from '../../model';
const { Option } = Select; const { Option } = Select;
......
import React from 'react'; import React from 'react';
import { connect } from 'dva'; import { connect } from 'dva';
import { Form, Input, Button, Alert, Divider, Statistic } from 'antd'; import { Form, Input, Button, Alert, Divider } from 'antd';
import styles from './index.less';
import { FormComponentProps } from 'antd/es/form'; import { FormComponentProps } from 'antd/es/form';
import { IStateType } from '../../model';
import { Dispatch } from 'redux'; import { Dispatch } from 'redux';
import styles from './index.less';
import { IStateType } from '../../model';
const formItemLayout = { const formItemLayout = {
labelCol: { labelCol: {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment