"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TableDataCell = void 0;
const data_cell_1 = require("../cell/data-cell");
const constant_1 = require("../common/constant");
const engine_1 = require("../engine");
const utils_1 = require("../facet/utils");
const resize_1 = require("../utils/interaction/resize");
class TableDataCell extends data_cell_1.DataCell {
    getLinkFieldStyle() {
        return this.theme.rowCell.text.linkTextFill;
    }
    shouldDrawResizeArea() {
        // 每一行直绘制一条贯穿式 resize 热区
        const id = `${this.meta.rowIndex}`;
        const resizeArea = (0, resize_1.getOrCreateResizeAreaGroupById)(this.spreadsheet, constant_1.KEY_GROUP_ROW_RESIZE_AREA);
        return !(resizeArea === null || resizeArea === void 0 ? void 0 : resizeArea.getElementById(id));
    }
    drawResizeArea() {
        if (!this.shouldDrawResizeArea()) {
            return;
        }
        const resizeArea = (0, resize_1.getOrCreateResizeAreaGroupById)(this.spreadsheet, constant_1.KEY_GROUP_ROW_RESIZE_AREA);
        if (!resizeArea) {
            return;
        }
        const { rowIndex } = this.getMeta();
        const cellRange = this.spreadsheet.facet.getCellRange();
        const { rowCount, trailingRowCount } = this.spreadsheet.facet.getFrozenOptions();
        const isFrozenHead = (0, utils_1.isFrozenRow)(rowIndex, cellRange.start, rowCount);
        const isFrozenTrailing = (0, utils_1.isFrozenTrailingRow)(rowIndex, cellRange.end, trailingRowCount);
        const isFrozen = isFrozenHead || isFrozenTrailing;
        const { y, height } = this.getBBoxByType();
        const { x: panelBBoxX, y: panelBBoxY, viewportWidth, viewportHeight, } = this.spreadsheet.facet.panelBBox;
        const { scrollY } = this.spreadsheet.facet.getScrollOffset();
        const paginationSy = this.spreadsheet.facet.getPaginationScrollY();
        const frozenGroupAreas = this.spreadsheet.facet
            .frozenGroupAreas;
        const frozenRowGroup = frozenGroupAreas[constant_1.FrozenGroupArea.Row];
        const frozenTrailingRowGroup = frozenGroupAreas[constant_1.FrozenGroupArea.TrailingRow];
        const resizeStyle = this.getResizeAreaStyle();
        const width = panelBBoxX + viewportWidth;
        const resizeClipAreaBBox = {
            x: 0,
            y: isFrozen ? 0 : frozenRowGroup.height,
            width,
            height: isFrozen
                ? Number.POSITIVE_INFINITY
                : viewportHeight -
                    frozenRowGroup.height -
                    frozenTrailingRowGroup.height,
        };
        const resizeAreaBBox = {
            x: 0,
            y: y + height - resizeStyle.size,
            width,
            height: resizeStyle.size,
        };
        if (!(0, resize_1.shouldAddResizeArea)(resizeAreaBBox, resizeClipAreaBBox, {
            scrollX: 0,
            scrollY: isFrozen ? 0 : paginationSy + scrollY,
        })) {
            return;
        }
        let offsetY = panelBBoxY;
        if (isFrozenHead) {
            offsetY += y - frozenRowGroup.y;
        }
        else if (isFrozenTrailing) {
            offsetY +=
                viewportHeight -
                    frozenTrailingRowGroup.height +
                    y -
                    frozenTrailingRowGroup.y;
        }
        else {
            offsetY += y - paginationSy - scrollY;
        }
        const attrs = (0, resize_1.getResizeAreaAttrs)({
            theme: resizeStyle,
            type: constant_1.ResizeDirectionType.Vertical,
            effect: constant_1.ResizeAreaEffect.Cell,
            offsetX: 0,
            offsetY,
            width,
            height,
            meta: this.meta,
            cell: this,
        });
        resizeArea.appendChild(new engine_1.CustomRect({
            style: Object.assign(Object.assign({}, attrs.style), { x: 0, y: offsetY + height - resizeStyle.size, width }),
        }, attrs.appendInfo));
    }
    isDisableHover(cellMeta) {
        return (cellMeta === null || cellMeta === void 0 ? void 0 : cellMeta.type) === constant_1.CellType.COL_CELL;
    }
    getResizedTextMaxLines() {
        var _a, _b, _c, _d, _e;
        const { facet, options } = this.spreadsheet;
        const { rowCell } = options.style;
        const { id, rowId, rowIndex } = this.meta;
        return ((_d = (_b = (_a = rowCell === null || rowCell === void 0 ? void 0 : rowCell.maxLinesByField) === null || _a === void 0 ? void 0 : _a[id]) !== null && _b !== void 0 ? _b : (_c = rowCell === null || rowCell === void 0 ? void 0 : rowCell.maxLinesByField) === null || _c === void 0 ? void 0 : _c[rowId]) !== null && _d !== void 0 ? _d : this.getMaxLinesByCustomHeight({
            isCustomHeight: (_e = facet === null || facet === void 0 ? void 0 : facet.customRowHeightStatusMap) === null || _e === void 0 ? void 0 : _e[rowIndex],
        }));
    }
}
exports.TableDataCell = TableDataCell;
//# sourceMappingURL=table-data-cell.js.map