主要是參考Kitchen一款爲設計者提高工做效率的 Sketch 工具集,我在他的基礎上豐富了本身想要的功能。javascript
以前作可視化大屏項目的時候,首先你要通讀一遍圖表開發文檔。並且常常要查api,在作的過程當中很煩。因而我就想作一個一勞永逸的事情,本身寫一個生成圖表的工具,無需看開發文檔。直接經過Charts Tool編輯圖表屬性生成相對應的圖表及代碼。前端
還有什麼了???你們能夠腦補,我再補充java
預留坑位,給各位要吐槽的大佬,哈哈哈react
作設計的同窗,遇到圖表也是千方百計的想要展現本身的美感。那給你定製化一套圖表,你就能夠省去這些煩惱。git
只須要編輯圖表就能生成代碼,你不想要嗎?程序員
填寫數據,編輯圖表,生成圖表,而後再粘貼到你的ppt上是否是會很輕鬆github
如今以上場景均已實現web
##################核心代碼
## web
/* 下方代碼爲生成svg,展現在sketch中 */
const { title, subTitle } = chartConfig
const { group, type } = chartRoute
const { subTitle: layerTitle } = getMenuInfoFromRoute(group, type);
const targetSvg = getSvgCodeFromEle(document.getElementsByTagName('svg'));
console.log(targetSvg);
window.postMessage(
'JsBridge_InsertSvg',
JSON.stringify({
layerTitle,
svg: targetSvg,
config: {
title,
subTitle,
},
}),
);
複製代碼
## sketch webview
// add a handler for a call from web content's javascript webContents.on('JsBridge_InsertSvg', data => { const json = JSON.parse(data); const { svg, config, layerTitle } = json; SvgInsert(context, json, webContents); browserWindow.close(); }); 複製代碼
## web index.js
const getFullChartConfig = () => {
const result = merge({}, chartData[group][type], chartFormatUtils[group][type](chartConfig));
return result;
};
複製代碼
注意若是要生成svg dom,圖表必需是支持svg渲染的。BizCharts能夠支持canvas和svg渲染的。json
################# ReactFromJson index.js
## transform爲一個對象
return `
import React from 'react';
import { Chart, Geom, Axis, Tooltip, Coord, Legend, Label, Guide } from 'bizcharts';
${transform ? `import DataSet from '@antv/data-set';` : ''}
const { Html } = Guide;
export default () => {
const data = ${JSON.stringify(data)}
${transform
? `const { DataView } = DataSet;
const dv = new DataView();
dv.source(data).transform(${JSON.stringify(transform)});
` : ''}
return (
<Chart ${getPropsFromJson(ChartProps)} data=${transform ? `{dv}` : '{data}'}>
${XAxisProps ? `<Axis ${getPropsFromJson(XAxisProps)} />` : ''}
${YAxisProps ? `<Axis ${getPropsFromJson(YAxisProps)} />` : ''}
${TooltipProps ? `<Tooltip ${getPropsFromJson(TooltipProps)} />` : ''}
${Array.isArray(GeomProps) ? GeomProps.map(item => `<Geom ${getPropsFromJson(item)} />`) : `<Geom ${getPropsFromJson(GeomProps)}>${LabelProps ? `<Label ${getPropsFromJson(LabelProps)} />` : ''}</Geom>`}
${CoordProps ? `<Coord ${getPropsFromJson(CoordProps)} />` : ''}
${LegendProps ? `<Legend ${getPropsFromJson(LegendProps)} />` : ''}
${GuideProps ? `<Guide ${getPropsFromJson(GuideProps)}>${HtmlProps ? `<Html ${getPropsFromJson(HtmlProps)} />` : ''}</Guide>` : ''}
</Chart>
);
};
`;
複製代碼
開發前期踩過不少坑,也考慮了不少,可是當時是想着先把它作出來,而後再去優化。canvas
若是有大家的加入,我相信咱們這個產品會更好
謝謝你們的觀看,以爲Charts Tool好的,那就毫無猶豫的去github上給個star吧。或者你也能夠加入咱們,一塊兒好好打磨這個產品。