stories/feat.theme.stories.js (293 lines of code) (raw):

import React, { useEffect, useMemo, useRef, useState } from 'react'; import { storiesOf } from '@storybook/react'; import { action } from '@storybook/addon-actions'; import { withKnobs, select, color } from '@storybook/addon-knobs'; import { themes, Wcontainer, Wline, Wbar, Wlinebar } from '@alicloud/cloud-charts'; import { isContrastColorWhite } from '@antv/g2/esm/util/color'; const data = [ { name: '机房A', data: [ [1483372800000, 4092], [1483459200000, 1592], [1483545600000, 3714], [1483632000000, 4854], [1483718400000, 6514], [1483804800000, 9022], [1483891200000, 6023], [1483977600000, 4018], ], }, { name: '机房B', yAxis: 1, data: [ [1483372800000, 6051], [1483459200000, 3278], [1483545600000, 5175], [1483632000000, 6548], [1483718400000, 9048], [1483804800000, 11394], [1483891200000, 8597], [1483977600000, 6588], ], }, ]; const lineBarData = [ { name: '机房1', type: 'bar', data: [ [1483372800000, 1892], [1483459200000, 7292], [1483545600000, 5714], [1483632000000, 5354], [1483718400000, 2014], [1483804800000, 22], [1483891200000, 11023], [1483977600000, 5218], [1484064000000, 8759], [1484150400000, 9981], [1484236800000, 4533], [1484323200000, 11398], [1484409600000, 1064], [1484496000000, 6494], ], }, { name: '机房2', type: 'bar', data: [ [1483372800000, 182], [1483459200000, 792], [1483545600000, 514], [1483632000000, 554], [1483718400000, 204], [1483804800000, 22], [1483891200000, 1023], [1483977600000, 528], [1484064000000, 879], [1484150400000, 981], [1484236800000, 453], [1484323200000, 1198], [1484409600000, 1064], [1484496000000, 694], ], }, { name: '机房3', type: 'line', yAxis: 1, data: [ [1483372800000, 11751], [1483459200000, 4078], [1483545600000, 2175], [1483632000000, 12048], [1483718400000, 1748], [1483804800000, 10494], [1483891200000, 9597], [1483977600000, 4788], [1484064000000, 2085], [1484150400000, 492], [1484236800000, 2965], [1484323200000, 4246], [1484409600000, 2160], [1484496000000, 11877], ], }, { name: '机房4', type: 'line', yAxis: 1, data: [ [1483372800000, 1151], [1483459200000, 4778], [1483545600000, 21175], [1483632000000, 19048], [1483718400000, 14748], [1483804800000, 18494], [1483891200000, 10597], [1483977600000, 8788], [1484064000000, 12985], [1484150400000, 2492], [1484236800000, 5965], [1484323200000, 10246], [1484409600000, 12160], [1484496000000, 6877], ], }, ]; const stories = storiesOf('theme', module); stories.addDecorator(withKnobs); const config1 = { percentage: false, // unit: '个', gaugeScale: { scaleNum: 9, // scale: false, }, } function ThemeDemo() { const theme = select( '主题', { 默认: 'normal', 暗色: 'dark', 自定义: { name: 'customTheme', 'widgets-container-background': '#f2f3f7', }, }, themes.name, ); useMemo(() => { themes.setTheme(theme); }, [theme]); return ( <div> <div style={{ display: 'flex' }}> <div style={{ flex: '1 1 33.33%' }}> <Wplaceholder loading height={200} /> </div> <div style={{ flex: '1 1 33.33%' }}> <Wplaceholder noData height={200} language={'en-us'} /> </div> <div style={{ flex: '1 1 33.33%' }}> <Wline height="200" data={[]} language={'en-us'} /> </div> </div> <div style={{ display: 'flex' }}> <div style={{ flex: '1 1 33.33%' }}> <Wcontainer className="demos"> <Wline height="300" data={data} config={{ area: true, colors: ['#00FFFF'], areaColors: ['l(90) 0:#000000 1:#00FFFF00'], // 颜色渐变 }} /> </Wcontainer> </div> <div style={{ flex: '1 1 33.33%' }}> <Wcontainer className="demos"> <Wbar height="300" config={{ xAxis: { type: 'timeCat', }, colors: ['#131313'], stack: true, label: { position: 'middle', }, }} data={data} /> </Wcontainer> </div> <div style={{ flex: '1 1 33.33%' }}> <Wcontainer className="demos"> <Wlinebar height="300" data={lineBarData} config={{ label: { position: 'middle', }, }} /> </Wcontainer> </div> </div> <div style={{ display: 'flex' }}> <div style={{ flex: '1 1 33.33%' }}> <Wpie height={200} data={[ { name: '浏览器占比', data: [ ['Firefox', 45.0], ['IE', 26.8], ['Chrome', 12.8], ['Safari', 8.5], ['Opera', 6.2], ['Others', 0.7], ], }, ]} /> </div> <div style={{ flex: '1 1 33.33%' }}> <Wbar data={data} height={200} language={'en-us'} config={{ xAxis: { type: 'timeCat', autoRotate: true, autoHide: false, // autoEllipsis: true }, }} /> </div> <div style={{ flex: '1 1 33.33%' }}> <Wline height="200" data={data} language={'en-us'} /> </div> </div> </div> ); } stories.add('主题动态切换', () => <ThemeDemo />); stories.add('亮暗颜色判断测试', () => { const bg = color('背景色', '#fff'); const isDark = isContrastColorWhite(bg); return ( <div style={{ width: 300, height: 300, background: bg }}> <span style={{ color: isDark ? '#fff' : '#333' }}>isDark: {String(isDark)}</span> </div> ); }); stories.add('颜色变量测试', () => { return ( <div> <Wbar height="300" config={{ xAxis: { type: 'timeCat', }, colors: ['error', 'warning'], stack: true, }} data={data} /> </div> ); }); stories.add('loading测试', () => { const [loading, setLoading] = useState(true); useEffect(() => { setTimeout(() => { setLoading(false); }, 3000); }, []); return ( <div style={{ height: 300 }}> <Wbar height="300" config={{ xAxis: { type: 'timeCat', }, stack: true, }} data={data} loading={loading} /> </div> ); });