@antv/s2
Version:
effective spreadsheet render core lib
88 lines • 3.88 kB
JavaScript
import { InteractionName, InteractionStateName, InterceptType, S2Event, } from '../../../common/constant';
import { afterSelectDataCells, getCellMeta, } from '../../../utils/interaction/select-event';
import { isMobile } from '../../../utils/is-mobile';
import { BaseEvent } from '../../base-event';
export class DataCellClick extends BaseEvent {
bindEvents() {
this.bindDataCellClick();
}
bindDataCellClick() {
this.spreadsheet.on(S2Event.DATA_CELL_CLICK, (event) => {
var _a, _b;
event.stopPropagation();
const { interaction } = this.spreadsheet;
interaction.clearHoverTimer();
if (interaction.hasIntercepts([InterceptType.CLICK])) {
return;
}
if (this.isLinkFieldText(event.target)) {
this.emitLinkFieldClickEvent(event);
return;
}
const cell = this.spreadsheet.getCell(event.target);
const meta = cell.getMeta();
if (!meta) {
return;
}
interaction.addIntercepts([InterceptType.HOVER]);
if (interaction.isSelectedCell(cell)) {
// https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail,使用 detail 属性来判断是否是双击,双击时不触发选择态 reset
if (event.detail === 1 ||
((_a = event.nativeEvent) === null || _a === void 0 ? void 0 : _a.detail) === 1 ||
((_b = event.originalEvent) === null || _b === void 0 ? void 0 : _b.detail) === 1 ||
isMobile()) {
interaction.reset();
// https://github.com/antvis/S2/issues/2447
interaction.emitSelectEvent({
event,
targetCell: cell,
interactionName: InteractionName.DATA_CELL_CLICK,
});
}
return;
}
interaction.changeState({
cells: [getCellMeta(cell)],
stateName: InteractionStateName.SELECTED,
onUpdateCells: afterSelectDataCells,
});
interaction.emitSelectEvent({
event,
targetCell: cell,
interactionName: InteractionName.DATA_CELL_CLICK,
cells: [cell],
});
this.showTooltip(event, meta);
// 点击单元格,高亮对应的行头、列头
interaction.updateDataCellRelevantHeaderCells(InteractionStateName.SELECTED, meta);
this.spreadsheet.emit(S2Event.DATA_CELL_CLICK_TRIGGERED_PRIVATE, cell);
});
}
showTooltip(event, meta) {
const { data, isTotals = false, fieldValue, valueField } = meta;
const onlyShowCellText = this.spreadsheet.isTableMode();
const cellData = onlyShowCellText
? Object.assign(Object.assign({}, data), { value: fieldValue, valueField })
: data;
const cellInfos = [
cellData || Object.assign(Object.assign({}, meta.rowQuery), meta.colQuery),
];
const operator = this.getTooltipOperator(event);
this.spreadsheet.showTooltipWithInfo(event, cellInfos, {
isTotals,
operator,
hideSummary: true,
onlyShowCellText,
});
}
emitLinkFieldClickEvent(event) {
const { meta } = this.getCellAppendInfo(event.target);
const { valueField: field, data: record } = meta;
this.spreadsheet.emit(S2Event.GLOBAL_LINK_FIELD_JUMP, {
meta: meta,
field,
record: Object.assign({ rowIndex: meta === null || meta === void 0 ? void 0 : meta.rowIndex }, record),
});
}
}
//# sourceMappingURL=data-cell-click.js.map