UNPKG

@antv/x6

Version:

JavaScript diagramming library that uses SVG and HTML for rendering

73 lines (62 loc) 1.7 kB
import type { HistoryCommand, HistoryCommonOptions, HistoryModelEvents, HistoryOptions, } from './type' export function isAddEvent(event?: HistoryModelEvents) { return event === 'cell:added' } export function isRemoveEvent(event?: HistoryModelEvents) { return event === 'cell:removed' } export function isChangeEvent(event?: HistoryModelEvents) { return event != null && event.startsWith('cell:change:') } export function getOptions(options: HistoryOptions): HistoryCommonOptions { const reservedNames: HistoryModelEvents[] = [ 'cell:added', 'cell:removed', 'cell:change:*', ] const batchEvents: HistoryModelEvents[] = ['batch:start', 'batch:stop'] const eventNames = options.eventNames ? options.eventNames.filter( (event) => !( isChangeEvent(event) || reservedNames.includes(event) || batchEvents.includes(event) ), ) : reservedNames return { enabled: true, ...options, eventNames, applyOptionsList: options.applyOptionsList || ['propertyPath'], revertOptionsList: options.revertOptionsList || ['propertyPath'], } } export function sortBatchCommands(cmds: HistoryCommand[]) { const results: HistoryCommand[] = [] for (let i = 0, ii = cmds.length; i < ii; i += 1) { const cmd = cmds[i] let index: number | null = null if (isAddEvent(cmd.event)) { const id = cmd.data.id for (let j = 0; j < i; j += 1) { if (cmds[j].data.id === id) { index = j break } } } if (index !== null) { results.splice(index, 0, cmd) } else { results.push(cmd) } } return results }