cloneOptNoReflow.mjs

import cloneDeep from 'lodash-es/cloneDeep.js'


/**
 * 深層複製Highcharts設定物件並關閉其內建reflow
 *
 * 傳入Highcharts者須為複本, 避免Vue響應式物件與Highcharts內部共用參照; 函數(例如formatter、events)保留原參照
 * 容器尺寸同步改由組件以w-component-vue之v-domresize(wsemi domDetect)處理, 故關閉Highcharts內建reflow(其以ResizeObserver觸發並防抖100ms)
 *
 * @param {Object} [options={}] 輸入Highcharts設定物件,預設{}
 * @returns {Object} 回傳複製後之設定物件,其chart.reflow為false
 * @example
 *
 * let o = { chart: { type: 'line' } }
 * let r = cloneOptNoReflow(o)
 * console.log(r.chart)
 * // => { type: 'line', reflow: false }
 * console.log(o.chart)
 * // => { type: 'line' }
 *
 */
function cloneOptNoReflow(options = {}) {

    //r
    let r = cloneDeep(options || {})

    //chart
    r.chart = {
        ...(r.chart || {}),
        reflow: false,
    }

    return r
}


export default cloneOptNoReflow