rowBoxSel.mjs

/**
 * 【ag-grid】框「整列」用之選擇器陣列:一列跨pinned-left與center兩容器(勾選框欄在pinned-left),
 * 交給captureStableWithBox取聯集即框出涵蓋整列之紅框;單一.ag-row選擇器只會命中其中一個容器
 *
 * 順序不是中性的:captureStableWithBox只把「第一個」目標捲入視窗,故順序決定捲動對象,改順序可能改變截圖。
 * 預設['pinned-left','center'](w-web-sso各測試檔手寫之順序);w-web-perm、w-web-task之現行實作為['center','pinned-left'],沿用時須以order指定
 *
 * @param {Number|String} rowIndex 輸入列之row-index
 * @param {Object} [opt={}] 輸入設定物件,預設{}
 * @param {String} [opt.scope=''] 輸入限定範圍之選擇器前綴字串(例如對話框內之表格),預設''
 * @param {Array} [opt.order=['pinned-left','center']] 輸入容器順序陣列,元素為'pinned-left'或'center',預設['pinned-left','center']
 * @returns {Array} 回傳選擇器字串陣列
 * @example
 *
 * import rowBoxSel from 'w-package-tools-e2e/src/rowBoxSel.mjs'
 *
 * let buf = await captureStableWithBox(page, rowBoxSel(3))
 * let buf2 = await captureStableWithBox(page, rowBoxSel(3, { order: ['center', 'pinned-left'] }))
 *
 */
function rowBoxSel(rowIndex, opt = {}) {
    let { scope = '', order = ['pinned-left', 'center'] } = opt
    let p = scope ? `${scope} ` : ''
    let cont = {
        'pinned-left': '.ag-pinned-left-cols-container',
        'center': '.ag-center-cols-container',
    }
    return order.map((k) => {
        if (!cont[k]) {
            throw new Error(`rowBoxSel: order 元素須為 pinned-left 或 center,實得「${k}」`)
        }
        return `${p}${cont[k]} .ag-row[row-index="${rowIndex}"]`
    })
}


export default rowBoxSel