"use strict";
/**
 * 拖拽写回策略
 *
 * 将"排序结果计算"与"排序结果落盘/持久化"拆开：
 * 1. commitColumnOrder  —— 更新视图列顺序（持久化到 viewConfig）
 * 2. commitRowOrderLocal —— 更新本地行数据顺序
 * 3. commitGroupedRowMove —— 跨组拖拽（改记录分组字段，远端回写）
 *
 * 组件层只负责收集参数、调用对应 committer。
 * 这样做的好处：纯计算（sortColumns/sortRows）可独立单测，写回副作用集中在此处。
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.commitColumnOrder = commitColumnOrder;
exports.commitRowOrderLocal = commitRowOrderLocal;
const drag_sort_1 = require("./drag-sort");
// ===================== Committers =====================
/**
 * 列拖拽写回：计算新顺序 → 持久化到 viewConfig
 *
 * @returns true 表示已写回；false 表示计算失败（如非法位置），调用方无需后续动作
 */
function commitColumnOrder(params) {
    const { dataModel, viewId, columnOrder, activeId, overId, pinnedColumnIds } = params;
    // 纯计算：根据 active/over 与冻结列约束算出新的顺序数组
    const result = (0, drag_sort_1.sortColumns)(columnOrder, activeId, overId, pinnedColumnIds);
    // result.ok=false 时通常意味着拖拽被冻结列约束拦截或目标位置无效，静默放弃
    if (!result.ok)
        return false;
    // 第三个参数 true：列顺序属于用户显式操作，需要立即持久化到服务端
    dataModel.setViewConfig(viewId, { columnOrder: result.value }, true);
    return true;
}
/**
 * 普通行拖拽写回：计算新顺序 → 仅本地更新 rawData
 *
 * 注意：此函数不做远端持久化，仅适用于无分组、行顺序仅在前端维护的场景；
 * 跨分组拖拽请使用 commitGroupedRowMove。
 */
function commitRowOrderLocal(params) {
    const { dataModel, activeId, overId, primaryKey } = params;
    // 基于主键在 rawData 中定位并重排，返回新的数组引用（不可变更新）
    const result = (0, drag_sort_1.sortRows)(dataModel.rawData, activeId, overId, primaryKey);
    if (!result.ok)
        return false;
    dataModel.setRawData(result.value);
    return true;
}
