import {Layer} from "../../../picasso-layout/src/types"; const fontMap = { 'Thin': 100, 'Ultralight': 200, 'Light': 300, 'Regular': 'normal', 'Medium': 500, 'Semibold': 600, 'Bold': 'bold' } /** * 通过优化手段,减少css代码量 * @param data * @param parent */ const handlerStyle = (data:Layer[], parent?:Layer) => { // 文本处理 const textLayers = data.filter(item => item.type === 'Text'); if (textLayers.length > 1 && parent.type === 'Container') { const advanceStyle = JSON.parse(JSON.stringify(textLayers[0].style.textStyle)); let styleKeys = Object.keys(advanceStyle); for (let i = 0; i < data.length; i++) { if (data[i].type === 'Text') { styleKeys.forEach((key) => { if (key === 'fontFamily') { // todo 字体优化 const size = data[i].style.textStyle[key].replace('PingFangSC-', ''); if (fontMap[size]) { data[i].style.textStyle.fontWeight = fontMap[size]; delete data[i].style.textStyle[key]; } } if (typeof advanceStyle[key] === 'object' && JSON.stringify(data[i].style.textStyle[key]) !== JSON.stringify(advanceStyle[key])) { delete advanceStyle[key]; } else if (typeof advanceStyle[key] !== 'object' &&data[i].style.textStyle[key] !== advanceStyle[key]) { delete advanceStyle[key]; } }); } } styleKeys = Object.keys(advanceStyle); if (!!styleKeys.length) { parent.style.textStyle = advanceStyle; for (let i = 0; i < data.length; i++) { if (data[i].type === 'Text') { styleKeys.forEach((key) => { if (data[i].style.textStyle[key] === advanceStyle[key]) { delete data[i].style.textStyle[key]; } }); } } } } for(let i = 0; i < data.length; i++) { // 图片文件,保宽 if (data[i].type === 'Image' && data[i].structure.width === data[i].structure.height) { delete data[i].style.height; } // let class_name // let class_value: any = {}; // if (data[i].style.display === 'flex') { // class_name = 'flex'; // class_value.display = 'flex' // if (data[i].style.flexDirection === 'column') { // class_value.flexDirection = 'column'; // class_name += '-column'; // } // if (data[i].style.justifyContent) { // class_value.justifyContent = data[i].style.justifyContent; // class_name += `-jsf-${data[i].style.justifyContent}` // } // if (data[i].style.alignItems) { // class_value.alignItems = data[i].style.alignItems; // class_name += `-alg-${data[i].style.alignItems}`; // } // // // 先找公共样式 // commonClassList.push({ // class_name, // class_value, // id: data[i].id, // }); // } if (data[i].children) { data[i].children = handlerStyle(data[i].children, data[i]); } } return data; } const optimizeStyle = (data:Layer[], parent?:Layer) => { return handlerStyle(data, parent);} export default optimizeStyle;