lsp-grid 1.0.5 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/cjs/revogr-clipboard.revogr-edit.revogr-order-editor.entry.cjs.js.map +1 -1
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js +2 -2
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -1
- package/dist/collection/components/editors/revogr-edit.js +3 -3
- package/dist/collection/components/editors/revogr-edit.js.map +1 -1
- package/dist/collection/types/selection.js.map +1 -1
- package/dist/esm/revogr-clipboard.revogr-edit.revogr-order-editor.entry.js.map +1 -1
- package/dist/esm/revogr-clipboard_3.entry.js +2 -2
- package/dist/esm/revogr-clipboard_3.entry.js.map +1 -1
- package/dist/revo-grid/revogr-clipboard.revogr-edit.revogr-order-editor.entry.esm.js.map +1 -1
- package/dist/revo-grid/revogr-clipboard_3.entry.js +2 -2
- package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -1
- package/dist/types/types/selection.d.ts +2 -2
- package/hydrate/index.js +2 -2
- package/hydrate/index.mjs +2 -2
- package/package.json +1 -1
- package/react/dist/index.d.ts +5 -3
- package/react/dist/react-datagrid.js +11 -3
- package/react/dist/react-datagrid.umd.cjs +11 -3
- package/standalone/revogr-edit2.js +2 -2
- package/standalone/revogr-edit2.js.map +1 -1
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revogr-clipboard.revogr-edit.revogr-order-editor.entry.cjs.js","sources":["src/components/clipboard/revogr-clipboard.tsx","src/components/editors/revogr-edit-style.scss?tag=revogr-edit","src/components/editors/revogr-edit.tsx","src/components/order/order-row.service.ts","src/components/order/revogr-order-editor.tsx"],"sourcesContent":["import {\r\n Component,\r\n Listen,\r\n Method,\r\n Event,\r\n EventEmitter,\r\n Prop,\r\n} from '@stencil/core';\r\nimport { DataFormat } from '@type';\r\n/**\r\n * This Clipboard provides functionality for handling clipboard events in a web application.\r\n */\r\n@Component({ tag: 'revogr-clipboard' })\r\nexport class Clipboard {\r\n /**\r\n * If readonly mode - disabled Paste event\r\n */\r\n @Prop() readonly: boolean;\r\n\r\n /**\r\n * Paste 1. Fired before paste applied to the grid\r\n * defaultPrevented - if true, paste will be canceled\r\n */\r\n @Event({ eventName: 'beforepaste' }) beforePaste: EventEmitter<{\r\n raw: string;\r\n isHTML: boolean;\r\n event: ClipboardEvent;\r\n dataText: string;\r\n }>;\r\n\r\n /**\r\n * Paste 2. Fired before paste applied to the grid and after data parsed\r\n */\r\n @Event({ eventName: 'beforepasteapply' })\r\n beforePasteApply: EventEmitter<{\r\n raw: string;\r\n parsed: string[][];\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Paste 3. Internal method. When data region is ready pass it to the top.\r\n * @property {string[][]} data - data to paste\r\n * @property {boolean} defaultPrevented - if true, paste will be canceled\r\n */\r\n @Event({ eventName: 'pasteregion' })\r\n pasteRegion: EventEmitter<string[][]>;\r\n\r\n /**\r\n * Paste 4. Fired after paste applied to the grid\r\n * defaultPrevented - if true, paste will be canceled\r\n */\r\n @Event({ eventName: 'afterpasteapply' }) afterPasteApply: EventEmitter<{\r\n raw: string;\r\n parsed: string[][];\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Cut 1. Fired before cut triggered\r\n * defaultPrevented - if true, cut will be canceled\r\n */\r\n @Event({ eventName: 'beforecut' }) beforeCut: EventEmitter<{\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Cut 2. Clears region when cut is done\r\n */\r\n @Event({ eventName: 'clearregion' }) clearRegion: EventEmitter<DataTransfer>;\r\n\r\n /**\r\n * Copy 1. Fired before copy triggered\r\n * defaultPrevented - if true, copy will be canceled\r\n */\r\n @Event({ eventName: 'beforecopy' }) beforeCopy: EventEmitter<{\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Copy Method 1. Fired before copy applied to the clipboard from outside.\r\n * defaultPrevented - if true, copy will be canceled\r\n */\r\n @Event({ eventName: 'beforecopyapply' }) beforeCopyApply: EventEmitter<{\r\n event: DataTransfer;\r\n data?: string[][];\r\n }>;\r\n\r\n /**\r\n * Copy 2. Fired when region copied\r\n * defaultPrevented - if true, copy will be canceled\r\n */\r\n @Event({ eventName: 'copyregion' })\r\n copyRegion: EventEmitter<DataTransfer>;\r\n\r\n @Listen('paste', { target: 'document' }) onPaste(e: ClipboardEvent) {\r\n // if readonly do nothing\r\n if (this.readonly) {\r\n return;\r\n }\r\n const clipboardData = this.getData(e);\r\n const isHTML = (clipboardData?.types.indexOf('text/html') || -1) > -1;\r\n const data =\r\n (isHTML\r\n ? clipboardData?.getData('text/html')\r\n : clipboardData?.getData('text')) || '';\r\n const dataText = clipboardData?.getData('text') || '';\r\n\r\n const beforePaste = this.beforePaste.emit({\r\n raw: data,\r\n dataText,\r\n isHTML,\r\n event: e,\r\n });\r\n\r\n if (beforePaste.defaultPrevented) {\r\n return;\r\n }\r\n\r\n let parsedData: string[][];\r\n // if html, then search for table if no table fallback to regular text parsing\r\n if (beforePaste.detail.isHTML) {\r\n const table = this.htmlParse(beforePaste.detail.raw);\r\n // fallback to text if not possible to parse as html\r\n parsedData = table || this.textParse(dataText || '');\r\n } else {\r\n parsedData = this.textParse(beforePaste.detail.raw);\r\n }\r\n const beforePasteApply = this.beforePasteApply.emit({\r\n raw: data,\r\n parsed: parsedData,\r\n event: e,\r\n });\r\n if (beforePasteApply.defaultPrevented) {\r\n return;\r\n }\r\n this.pasteRegion.emit(beforePasteApply.detail.parsed);\r\n // post paste action\r\n const afterPasteApply = this.afterPasteApply.emit({\r\n raw: data,\r\n parsed: parsedData,\r\n event: e,\r\n });\r\n // keep default behavior if needed\r\n if (afterPasteApply.defaultPrevented) {\r\n return;\r\n }\r\n e.preventDefault();\r\n }\r\n\r\n /**\r\n * Listen to copy event and emit copy region event\r\n */\r\n @Listen('copy', { target: 'document' }) copyStarted(e: ClipboardEvent) {\r\n const beforeCopy = this.beforeCopy.emit({\r\n event: e,\r\n });\r\n if (beforeCopy.defaultPrevented) {\r\n return;\r\n }\r\n const data = this.getData(beforeCopy.detail.event);\r\n this.copyRegion.emit(data || undefined);\r\n e.preventDefault();\r\n }\r\n\r\n /**\r\n * Listen to copy event and emit copy region event\r\n */\r\n @Listen('cut', { target: 'document' }) cutStarted(e: ClipboardEvent) {\r\n const beforeCut = this.beforeCut.emit({\r\n event: e,\r\n });\r\n if (beforeCut.defaultPrevented) {\r\n return;\r\n }\r\n const data = this.getData(beforeCut.detail.event);\r\n this.copyStarted(e);\r\n\r\n // if readonly do nothing\r\n if (this.readonly) {\r\n return;\r\n }\r\n\r\n this.clearRegion.emit(data || undefined);\r\n e.preventDefault();\r\n }\r\n\r\n @Method() async doCopy(e: DataTransfer, data?: DataFormat[][]) {\r\n const beforeCopyApply = this.beforeCopyApply.emit({\r\n event: e,\r\n data,\r\n });\r\n if (beforeCopyApply.defaultPrevented) {\r\n return;\r\n }\r\n const parsed = data ? this.parserCopy(data) : '';\r\n await navigator.clipboard.writeText(parsed);\r\n // e.setData('text/plain', parsed);\r\n }\r\n\r\n parserCopy(data: DataFormat[][]) {\r\n return data.map(rgRow => rgRow.join('\\t')).join('\\n');\r\n }\r\n\r\n private textParse(data: string) {\r\n const result: string[][] = [];\r\n const rows = data.split(/\\r\\n|\\n|\\r/);\r\n for (let y in rows) {\r\n result.push(rows[y].split('\\t'));\r\n }\r\n return result;\r\n }\r\n\r\n private htmlParse(data: string) {\r\n const result: string[][] = [];\r\n const fragment = document.createRange().createContextualFragment(data);\r\n const table = fragment.querySelector('table');\r\n if (!table) {\r\n return null;\r\n }\r\n for (const rgRow of Array.from(table.rows)) {\r\n result.push(Array.from(rgRow.cells).map(cell => cell.innerText));\r\n }\r\n return result;\r\n }\r\n\r\n private getData(e: ClipboardEvent) {\r\n return (\r\n e.clipboardData ||\r\n (window as unknown as { clipboardData: DataTransfer | null })\r\n ?.clipboardData\r\n );\r\n }\r\n}\r\n","revogr-edit {\r\n display: block;\r\n position: absolute;\r\n background-color: #fff;\r\n\r\n input {\r\n height: 100%;\r\n width: 100%;\r\n box-sizing: border-box;\r\n }\r\n\r\n revo-dropdown {\r\n height: 100%;\r\n\r\n &.shrink {\r\n fieldset legend > span {\r\n display: none;\r\n }\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n Event,\r\n EventEmitter,\r\n Prop,\r\n h,\r\n Element,\r\n Host,\r\n Method,\r\n} from '@stencil/core';\r\nimport { EDIT_INPUT_WR } from '../../utils/consts';\r\nimport { TextEditor } from './text-editor';\r\nimport { ColumnDataSchemaModel } from '@type';\r\nimport {\r\n EditCell,\r\n EditorCtr,\r\n SaveDataDetails,\r\n EditorBase,\r\n} from '@type';\r\n\r\nimport { isEditorCtrConstructible } from './edit.utils';\r\n\r\n/**\r\n * Represents a cell editor in a grid.\r\n * It manages the editing of cells by handling events, saving data, rendering the editor UI,\r\n * and managing the lifecycle of the editor instance.\r\n */\r\n@Component({\r\n tag: 'revogr-edit',\r\n styleUrl: 'revogr-edit-style.scss',\r\n})\r\nexport class RevoEdit {\r\n /**\r\n * Cell to edit data.\r\n */\r\n @Prop() editCell: EditCell;\r\n\r\n /**\r\n * Column data for editor.\r\n */\r\n @Prop() column: ColumnDataSchemaModel | null;\r\n /**\r\n * Custom editors register\r\n */\r\n @Prop() editor: EditorCtr | null;\r\n\r\n /**\r\n * Save on editor close. Defines if data should be saved on editor close.\r\n */\r\n @Prop() saveOnClose = false;\r\n /**\r\n * Additional data to pass to renderer\r\n */\r\n @Prop() additionalData: any;\r\n\r\n /**\r\n * Cell edit event initiator, first in the cellEdit event chain\r\n */\r\n @Event({ eventName: 'celleditinit' }) cellEdit: EventEmitter<SaveDataDetails>;\r\n\r\n /**\r\n * Close editor event\r\n * pass true if requires focus next\r\n */\r\n @Event({ eventName: 'closeedit' }) closeEdit: EventEmitter<\r\n boolean | undefined\r\n >;\r\n\r\n /** Edit session editor */\r\n @Element() element: HTMLElement;\r\n private currentEditor: EditorBase | null = null;\r\n private preventSaveOnClose = false;\r\n\r\n /**\r\n * Cancel pending changes flag. Editor will be closed without autosave.\r\n */\r\n @Method() async cancelChanges() {\r\n this.preventSaveOnClose = true;\r\n }\r\n\r\n /**\r\n * Before editor got disconnected.\r\n * Can be triggered multiple times before actual disconnect.\r\n */\r\n @Method() async beforeDisconnect() {\r\n this.currentEditor?.beforeDisconnect?.();\r\n }\r\n\r\n onAutoSave() {\r\n this.preventSaveOnClose = true;\r\n const val = this.currentEditor?.getValue?.();\r\n // For Editor plugin internal usage.\r\n // When you want to prevent save and use custom save of your own.\r\n if (this.currentEditor?.beforeAutoSave) {\r\n const canSave = this.currentEditor.beforeAutoSave(val);\r\n if (canSave === false) {\r\n return;\r\n }\r\n }\r\n this.onSave(val, true);\r\n }\r\n\r\n /**\r\n * Callback triggered when cell editor saved.\r\n * Closes editor when called.\r\n * @param preventFocus - if true, editor will not be closed & next cell will not be focused.\r\n */\r\n onSave(val?: any, preventFocus?: boolean) {\r\n this.preventSaveOnClose = true;\r\n if (this.editCell) {\r\n this.cellEdit.emit({\r\n rgCol: this.editCell.x,\r\n rgRow: this.editCell.y,\r\n type: this.editCell.type,\r\n prop: this.editCell.prop,\r\n val,\r\n preventFocus,\r\n });\r\n }\r\n }\r\n\r\n componentWillRender() {\r\n // Active editor present and not yet closed.\r\n if (this.currentEditor || !this.column) {\r\n return;\r\n }\r\n this.preventSaveOnClose = false;\r\n\r\n // Custom editor usage.\r\n // Start with TextEditor (editors/text.tsx) for Custom editor.\r\n // It can be class or function\r\n if (this.editor) {\r\n // if editor is constructible\r\n if (isEditorCtrConstructible(this.editor)) {\r\n this.currentEditor = new this.editor(\r\n this.column,\r\n // save callback\r\n (e, preventFocus) => {\r\n this.onSave(e, preventFocus);\r\n },\r\n // cancel callback\r\n focusNext => {\r\n this.preventSaveOnClose = true;\r\n this.closeEdit.emit(focusNext);\r\n },\r\n );\r\n // if editor is function\r\n } else {\r\n this.currentEditor = this.editor(\r\n this.column,\r\n // save callback\r\n (e, preventFocus) => {\r\n this.onSave(e, preventFocus);\r\n },\r\n // cancel callback\r\n focusNext => {\r\n this.preventSaveOnClose = true;\r\n this.closeEdit.emit(focusNext);\r\n },\r\n );\r\n }\r\n return;\r\n }\r\n // Default text editor usage\r\n this.currentEditor = new TextEditor(this.column, (e, preventFocus) =>\r\n this.onSave(e, preventFocus),\r\n );\r\n }\r\n\r\n componentDidRender() {\r\n if (!this.currentEditor) {\r\n return;\r\n }\r\n this.currentEditor.element = this.element.firstElementChild;\r\n this.currentEditor.componentDidRender?.();\r\n }\r\n\r\n disconnectedCallback() {\r\n if (this.saveOnClose) {\r\n // Can not be cancelled by `preventSaveOnClose` prop.\r\n // Editor requires `getValue` to be able to save.\r\n if (!this.preventSaveOnClose) {\r\n this.onAutoSave();\r\n }\r\n }\r\n\r\n this.preventSaveOnClose = false;\r\n if (!this.currentEditor) {\r\n return;\r\n }\r\n\r\n this.currentEditor.disconnectedCallback?.();\r\n this.currentEditor.element = null;\r\n this.currentEditor = null;\r\n }\r\n\r\n render() {\r\n if (this.currentEditor) {\r\n this.currentEditor.editCell = this.editCell;\r\n return (\r\n <Host class={EDIT_INPUT_WR}>\r\n {this.currentEditor.render(h, this.additionalData)}\r\n </Host>\r\n );\r\n }\r\n return '';\r\n }\r\n}\r\n","import { getItemByPosition } from '@store';\r\nimport { DimensionSettingsState, PositionItem, Cell } from '@type';\r\n\r\ntype EventData = { el: HTMLElement; rows: DimensionSettingsState; cols: DimensionSettingsState };\r\ninterface Config {\r\n positionChanged(from: number, to: number): void;\r\n}\r\n\r\nexport default class RowOrderService {\r\n private currentCell: Cell | null = null;\r\n private previousRow: number | null = null;\r\n\r\n constructor(private config: Config) {}\r\n\r\n /** Drag finished, calculate and apply changes */\r\n endOrder(e: MouseEvent, data: EventData) {\r\n if (this.currentCell === null) {\r\n return;\r\n }\r\n const newRow = this.getCell(e, data);\r\n\r\n // if position changed\r\n if (newRow.y !== this.currentCell.y) {\r\n // rgRow dragged out table\r\n if (newRow.y < 0) {\r\n newRow.y = 0;\r\n }\r\n // rgRow dragged to the top\r\n else if (newRow.y < this.currentCell.y) {\r\n newRow.y++;\r\n }\r\n this.config.positionChanged(this.currentCell.y, newRow.y);\r\n }\r\n this.clear();\r\n }\r\n\r\n /** Drag started, reserve initial cell for farther use */\r\n startOrder(e: MouseEvent, data: EventData): Cell {\r\n this.currentCell = this.getCell(e, data);\r\n return this.currentCell;\r\n }\r\n\r\n move(y: number, data: EventData): PositionItem | null {\r\n const rgRow = this.getRow(y, data);\r\n // if rgRow same as previous or below range (-1 = 0) do nothing\r\n if (this.previousRow === rgRow.itemIndex || rgRow.itemIndex < -1) {\r\n return null;\r\n }\r\n this.previousRow = rgRow.itemIndex;\r\n return rgRow;\r\n }\r\n\r\n /** Drag stopped, probably cursor outside of document area */\r\n clear() {\r\n this.currentCell = null;\r\n this.previousRow = null;\r\n }\r\n\r\n /** Calculate cell based on x, y position */\r\n getRow(y: number, { el, rows }: EventData): PositionItem {\r\n const { top } = el.getBoundingClientRect();\r\n const topRelative = y - top;\r\n const rgRow = getItemByPosition(rows, topRelative);\r\n const absolutePosition = {\r\n itemIndex: rgRow.itemIndex,\r\n start: rgRow.start + top,\r\n end: rgRow.end + top,\r\n };\r\n return absolutePosition;\r\n }\r\n\r\n /** Calculate cell based on x, y position */\r\n getCell({ x, y }: Cell, { el, rows, cols }: EventData): Cell {\r\n const { top, left } = el.getBoundingClientRect();\r\n const topRelative = y - top;\r\n const leftRelative = x - left;\r\n const rgRow = getItemByPosition(rows, topRelative);\r\n const rgCol = getItemByPosition(cols, leftRelative);\r\n return { x: rgCol.itemIndex, y: rgRow.itemIndex };\r\n }\r\n}\r\n","import { Component, Method, Event, EventEmitter, Prop } from '@stencil/core';\r\nimport debounce from 'lodash/debounce';\r\n\r\nimport { type DSourceState, getSourceItem } from '@store';\r\nimport { DRAGG_TEXT } from '../../utils/consts';\r\nimport RowOrderService from './order-row.service';\r\nimport type {\r\n DimensionRows,\r\n DataType,\r\n DimensionSettingsState,\r\n DragStartEvent,\r\n PositionItem,\r\n Cell,\r\n RowDragStartDetails,\r\n} from '@type';\r\nimport type { Observable } from '../../utils';\r\n\r\n/**\r\n * Component for handling row order editor.\r\n */\r\n@Component({ tag: 'revogr-order-editor' })\r\nexport class OrderEditor {\r\n // #region Properties\r\n /** Parent element */\r\n @Prop() parent: HTMLElement;\r\n /** Dimension settings Y */\r\n @Prop() dimensionRow: Observable<DimensionSettingsState>;\r\n /** Dimension settings X */\r\n @Prop() dimensionCol: Observable<DimensionSettingsState>;\r\n\r\n /** Static stores, not expected to change during component lifetime */\r\n @Prop() dataStore: Observable<DSourceState<DataType, DimensionRows>>;\r\n\r\n @Prop() rowType: DimensionRows;\r\n // #endregion\r\n\r\n // #region Events\r\n /** Row drag started */\r\n @Event({ eventName: 'rowdragstartinit', cancelable: true })\r\n rowDragStart: EventEmitter<RowDragStartDetails>;\r\n\r\n /** Row drag ended started */\r\n @Event({ eventName: 'rowdragendinit' })\r\n rowDragEnd: EventEmitter<{ rowType: DimensionRows }>;\r\n\r\n /** Row move started */\r\n @Event({ eventName: 'rowdragmoveinit', cancelable: true })\r\n rowDrag: EventEmitter<PositionItem & { rowType: DimensionRows }>;\r\n\r\n /** Row mouse move started */\r\n @Event({ eventName: 'rowdragmousemove', cancelable: true })\r\n rowMouseMove: EventEmitter<Cell & { rowType: DimensionRows }>;\r\n\r\n /** Row dragged, new range ready to be applied */\r\n @Event({ eventName: 'rowdropinit', cancelable: true })\r\n rowDropped: EventEmitter<{\r\n from: number;\r\n to: number;\r\n rowType: DimensionRows;\r\n }>;\r\n\r\n /** Row drag ended finished. Time to apply data */\r\n @Event({ eventName: 'roworderchange' })\r\n rowOrderChange: EventEmitter<{\r\n from: number;\r\n to: number;\r\n rowType: DimensionRows;\r\n }>;\r\n\r\n // #endregion\r\n\r\n // #region Private\r\n private rowOrderService: RowOrderService;\r\n private events: {\r\n name: keyof DocumentEventMap;\r\n listener: (e: MouseEvent) => void;\r\n }[] = [];\r\n private rowMoveFunc = debounce((y: number) => {\r\n const rgRow = this.rowOrderService.move(y, this.getData());\r\n if (rgRow !== null) {\r\n this.rowDrag.emit({\r\n ...rgRow,\r\n rowType: this.rowType,\r\n });\r\n }\r\n }, 5);\r\n // #endregion\r\n\r\n // #region Methods\r\n @Method() async dragStart(e: DragStartEvent) {\r\n e.originalEvent.preventDefault();\r\n\r\n // extra check if previous ended\r\n if (this.events.length) {\r\n this.clearOrder();\r\n }\r\n\r\n const data = this.getData();\r\n const cell = this.rowOrderService.startOrder(e.originalEvent, data);\r\n const pos = this.rowOrderService.getRow(e.originalEvent.y, data);\r\n const dragStartEvent = this.rowDragStart.emit({\r\n cell,\r\n text: DRAGG_TEXT,\r\n pos,\r\n event: e.originalEvent,\r\n rowType: this.rowType,\r\n model: getSourceItem(this.dataStore, pos.itemIndex),\r\n });\r\n if (dragStartEvent.defaultPrevented) {\r\n return;\r\n }\r\n\r\n const moveMove = (e: MouseEvent) => this.move(e);\r\n const mouseUp = (e: MouseEvent) => this.endOrder(e);\r\n const mouseLeave = () => this.clearOrder();\r\n\r\n this.events.push(\r\n {\r\n name: 'mousemove',\r\n listener: moveMove,\r\n },\r\n {\r\n name: 'mouseup',\r\n listener: mouseUp,\r\n },\r\n {\r\n name: 'mouseleave',\r\n listener: mouseLeave,\r\n },\r\n );\r\n document.addEventListener('mousemove', moveMove);\r\n // Action finished inside of the document\r\n document.addEventListener('mouseup', mouseUp);\r\n document.addEventListener('mouseleave', mouseLeave);\r\n }\r\n\r\n @Method() async endOrder(e: MouseEvent) {\r\n this.rowOrderService.endOrder(e, this.getData());\r\n this.clearOrder();\r\n }\r\n\r\n @Method() async clearOrder() {\r\n this.rowOrderService.clear();\r\n this.events.forEach(v => document.removeEventListener(v.name, v.listener));\r\n this.events.length = 0;\r\n this.rowDragEnd.emit({ rowType: this.rowType });\r\n }\r\n // #endregion\r\n\r\n move({ x, y }: { x: number; y: number }) {\r\n this.rowMouseMove.emit({ x, y, rowType: this.rowType });\r\n this.rowMoveFunc(y);\r\n }\r\n\r\n connectedCallback() {\r\n this.rowOrderService = new RowOrderService({\r\n positionChanged: (from: number, to: number) => {\r\n const dropEvent = this.rowDropped.emit({\r\n from,\r\n to,\r\n rowType: this.rowType,\r\n });\r\n if (dropEvent.defaultPrevented) {\r\n return;\r\n }\r\n this.rowOrderChange.emit(dropEvent.detail);\r\n },\r\n });\r\n }\r\n\r\n private getData() {\r\n return {\r\n el: this.parent,\r\n rows: this.dimensionRow.state,\r\n cols: this.dimensionCol.state,\r\n };\r\n }\r\n}\r\n"],"names":["isEditorCtrConstructible","TextEditor","h","Host","EDIT_INPUT_WR","getItemByPosition","debounce","DRAGG_TEXT","getSourceItem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"revogr-clipboard.revogr-edit.revogr-order-editor.entry.cjs.js","sources":["src/components/clipboard/revogr-clipboard.tsx","src/components/editors/revogr-edit-style.scss?tag=revogr-edit","src/components/editors/revogr-edit.tsx","src/components/order/order-row.service.ts","src/components/order/revogr-order-editor.tsx"],"sourcesContent":["import {\r\n Component,\r\n Listen,\r\n Method,\r\n Event,\r\n EventEmitter,\r\n Prop,\r\n} from '@stencil/core';\r\nimport { DataFormat } from '@type';\r\n/**\r\n * This Clipboard provides functionality for handling clipboard events in a web application.\r\n */\r\n@Component({ tag: 'revogr-clipboard' })\r\nexport class Clipboard {\r\n /**\r\n * If readonly mode - disabled Paste event\r\n */\r\n @Prop() readonly: boolean;\r\n\r\n /**\r\n * Paste 1. Fired before paste applied to the grid\r\n * defaultPrevented - if true, paste will be canceled\r\n */\r\n @Event({ eventName: 'beforepaste' }) beforePaste: EventEmitter<{\r\n raw: string;\r\n isHTML: boolean;\r\n event: ClipboardEvent;\r\n dataText: string;\r\n }>;\r\n\r\n /**\r\n * Paste 2. Fired before paste applied to the grid and after data parsed\r\n */\r\n @Event({ eventName: 'beforepasteapply' })\r\n beforePasteApply: EventEmitter<{\r\n raw: string;\r\n parsed: string[][];\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Paste 3. Internal method. When data region is ready pass it to the top.\r\n * @property {string[][]} data - data to paste\r\n * @property {boolean} defaultPrevented - if true, paste will be canceled\r\n */\r\n @Event({ eventName: 'pasteregion' })\r\n pasteRegion: EventEmitter<string[][]>;\r\n\r\n /**\r\n * Paste 4. Fired after paste applied to the grid\r\n * defaultPrevented - if true, paste will be canceled\r\n */\r\n @Event({ eventName: 'afterpasteapply' }) afterPasteApply: EventEmitter<{\r\n raw: string;\r\n parsed: string[][];\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Cut 1. Fired before cut triggered\r\n * defaultPrevented - if true, cut will be canceled\r\n */\r\n @Event({ eventName: 'beforecut' }) beforeCut: EventEmitter<{\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Cut 2. Clears region when cut is done\r\n */\r\n @Event({ eventName: 'clearregion' }) clearRegion: EventEmitter<DataTransfer>;\r\n\r\n /**\r\n * Copy 1. Fired before copy triggered\r\n * defaultPrevented - if true, copy will be canceled\r\n */\r\n @Event({ eventName: 'beforecopy' }) beforeCopy: EventEmitter<{\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Copy Method 1. Fired before copy applied to the clipboard from outside.\r\n * defaultPrevented - if true, copy will be canceled\r\n */\r\n @Event({ eventName: 'beforecopyapply' }) beforeCopyApply: EventEmitter<{\r\n event: DataTransfer;\r\n data?: string[][];\r\n }>;\r\n\r\n /**\r\n * Copy 2. Fired when region copied\r\n * defaultPrevented - if true, copy will be canceled\r\n */\r\n @Event({ eventName: 'copyregion' })\r\n copyRegion: EventEmitter<DataTransfer>;\r\n\r\n @Listen('paste', { target: 'document' }) onPaste(e: ClipboardEvent) {\r\n // if readonly do nothing\r\n if (this.readonly) {\r\n return;\r\n }\r\n const clipboardData = this.getData(e);\r\n const isHTML = (clipboardData?.types.indexOf('text/html') || -1) > -1;\r\n const data =\r\n (isHTML\r\n ? clipboardData?.getData('text/html')\r\n : clipboardData?.getData('text')) || '';\r\n const dataText = clipboardData?.getData('text') || '';\r\n\r\n const beforePaste = this.beforePaste.emit({\r\n raw: data,\r\n dataText,\r\n isHTML,\r\n event: e,\r\n });\r\n\r\n if (beforePaste.defaultPrevented) {\r\n return;\r\n }\r\n\r\n let parsedData: string[][];\r\n // if html, then search for table if no table fallback to regular text parsing\r\n if (beforePaste.detail.isHTML) {\r\n const table = this.htmlParse(beforePaste.detail.raw);\r\n // fallback to text if not possible to parse as html\r\n parsedData = table || this.textParse(dataText || '');\r\n } else {\r\n parsedData = this.textParse(beforePaste.detail.raw);\r\n }\r\n const beforePasteApply = this.beforePasteApply.emit({\r\n raw: data,\r\n parsed: parsedData,\r\n event: e,\r\n });\r\n if (beforePasteApply.defaultPrevented) {\r\n return;\r\n }\r\n this.pasteRegion.emit(beforePasteApply.detail.parsed);\r\n // post paste action\r\n const afterPasteApply = this.afterPasteApply.emit({\r\n raw: data,\r\n parsed: parsedData,\r\n event: e,\r\n });\r\n // keep default behavior if needed\r\n if (afterPasteApply.defaultPrevented) {\r\n return;\r\n }\r\n e.preventDefault();\r\n }\r\n\r\n /**\r\n * Listen to copy event and emit copy region event\r\n */\r\n @Listen('copy', { target: 'document' }) copyStarted(e: ClipboardEvent) {\r\n const beforeCopy = this.beforeCopy.emit({\r\n event: e,\r\n });\r\n if (beforeCopy.defaultPrevented) {\r\n return;\r\n }\r\n const data = this.getData(beforeCopy.detail.event);\r\n this.copyRegion.emit(data || undefined);\r\n e.preventDefault();\r\n }\r\n\r\n /**\r\n * Listen to copy event and emit copy region event\r\n */\r\n @Listen('cut', { target: 'document' }) cutStarted(e: ClipboardEvent) {\r\n const beforeCut = this.beforeCut.emit({\r\n event: e,\r\n });\r\n if (beforeCut.defaultPrevented) {\r\n return;\r\n }\r\n const data = this.getData(beforeCut.detail.event);\r\n this.copyStarted(e);\r\n\r\n // if readonly do nothing\r\n if (this.readonly) {\r\n return;\r\n }\r\n\r\n this.clearRegion.emit(data || undefined);\r\n e.preventDefault();\r\n }\r\n\r\n @Method() async doCopy(e: DataTransfer, data?: DataFormat[][]) {\r\n const beforeCopyApply = this.beforeCopyApply.emit({\r\n event: e,\r\n data,\r\n });\r\n if (beforeCopyApply.defaultPrevented) {\r\n return;\r\n }\r\n const parsed = data ? this.parserCopy(data) : '';\r\n await navigator.clipboard.writeText(parsed);\r\n // e.setData('text/plain', parsed);\r\n }\r\n\r\n parserCopy(data: DataFormat[][]) {\r\n return data.map(rgRow => rgRow.join('\\t')).join('\\n');\r\n }\r\n\r\n private textParse(data: string) {\r\n const result: string[][] = [];\r\n const rows = data.split(/\\r\\n|\\n|\\r/);\r\n for (let y in rows) {\r\n result.push(rows[y].split('\\t'));\r\n }\r\n return result;\r\n }\r\n\r\n private htmlParse(data: string) {\r\n const result: string[][] = [];\r\n const fragment = document.createRange().createContextualFragment(data);\r\n const table = fragment.querySelector('table');\r\n if (!table) {\r\n return null;\r\n }\r\n for (const rgRow of Array.from(table.rows)) {\r\n result.push(Array.from(rgRow.cells).map(cell => cell.innerText));\r\n }\r\n return result;\r\n }\r\n\r\n private getData(e: ClipboardEvent) {\r\n return (\r\n e.clipboardData ||\r\n (window as unknown as { clipboardData: DataTransfer | null })\r\n ?.clipboardData\r\n );\r\n }\r\n}\r\n","revogr-edit {\r\n display: block;\r\n position: absolute;\r\n background-color: #fff;\r\n\r\n input {\r\n height: 100%;\r\n width: 100%;\r\n box-sizing: border-box;\r\n }\r\n\r\n revo-dropdown {\r\n height: 100%;\r\n\r\n &.shrink {\r\n fieldset legend > span {\r\n display: none;\r\n }\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n Event,\r\n EventEmitter,\r\n Prop,\r\n h,\r\n Element,\r\n Host,\r\n Method,\r\n} from '@stencil/core';\r\nimport { EDIT_INPUT_WR } from '../../utils/consts';\r\nimport { TextEditor } from './text-editor';\r\nimport { ColumnDataSchemaModel } from '@type';\r\nimport { EditCell, EditorCtr, SaveDataDetails, EditorBase } from '@type';\r\n\r\nimport { isEditorCtrConstructible } from './edit.utils';\r\n\r\n/**\r\n * Represents a cell editor in a grid.\r\n * It manages the editing of cells by handling events, saving data, rendering the editor UI,\r\n * and managing the lifecycle of the editor instance.\r\n */\r\n@Component({\r\n tag: 'revogr-edit',\r\n styleUrl: 'revogr-edit-style.scss',\r\n})\r\nexport class RevoEdit {\r\n /**\r\n * Cell to edit data.\r\n */\r\n @Prop() editCell: EditCell;\r\n\r\n /**\r\n * Column data for editor.\r\n */\r\n @Prop() column: ColumnDataSchemaModel | null;\r\n /**\r\n * Custom editors register\r\n */\r\n @Prop() editor: EditorCtr | null;\r\n\r\n /**\r\n * Save on editor close. Defines if data should be saved on editor close.\r\n */\r\n @Prop() saveOnClose = false;\r\n /**\r\n * Additional data to pass to renderer\r\n */\r\n @Prop() additionalData: any;\r\n\r\n /**\r\n * Cell edit event initiator, first in the cellEdit event chain\r\n */\r\n @Event({ eventName: 'celleditinit' }) cellEdit: EventEmitter<SaveDataDetails>;\r\n\r\n /**\r\n * Close editor event\r\n * pass true if requires focus next\r\n */\r\n @Event({ eventName: 'closeedit' }) closeEdit: EventEmitter<\r\n boolean | undefined\r\n >;\r\n\r\n /** Edit session editor */\r\n @Element() element: HTMLElement;\r\n private currentEditor: EditorBase | null = null;\r\n private preventSaveOnClose = false;\r\n\r\n /**\r\n * Cancel pending changes flag. Editor will be closed without autosave.\r\n */\r\n @Method() async cancelChanges() {\r\n this.preventSaveOnClose = true;\r\n }\r\n\r\n /**\r\n * Before editor got disconnected.\r\n * Can be triggered multiple times before actual disconnect.\r\n */\r\n @Method() async beforeDisconnect() {\r\n this.currentEditor?.beforeDisconnect?.();\r\n }\r\n\r\n onAutoSave() {\r\n this.preventSaveOnClose = true;\r\n const val = this.currentEditor?.getValue?.();\r\n // For Editor plugin internal usage.\r\n // When you want to prevent save and use custom save of your own.\r\n if (this.currentEditor?.beforeAutoSave) {\r\n const canSave = this.currentEditor.beforeAutoSave(val);\r\n if (canSave === false) {\r\n return;\r\n }\r\n }\r\n this.onSave(val, true);\r\n }\r\n\r\n /**\r\n * Callback triggered when cell editor saved.\r\n * Closes editor when called.\r\n * @param preventFocus - if true, editor will not be closed & next cell will not be focused.\r\n */\r\n onSave(val?: any, preventFocus?: boolean) {\r\n this.preventSaveOnClose = true;\r\n if (this.editCell) {\r\n this.cellEdit.emit({\r\n rgCol: this.editCell.x,\r\n rgRow: this.editCell.y,\r\n type: this.editCell.type,\r\n prop: this.editCell.prop,\r\n val,\r\n preventFocus,\r\n });\r\n }\r\n }\r\n\r\n componentWillRender() {\r\n // Active editor present and not yet closed.\r\n if (this.currentEditor || !this.column) {\r\n return;\r\n }\r\n this.preventSaveOnClose = false;\r\n\r\n // Custom editor usage.\r\n // Start with TextEditor (editors/text.tsx) for Custom editor.\r\n // It can be class or function\r\n if (this.editor) {\r\n // if editor is constructible\r\n if (isEditorCtrConstructible(this.editor)) {\r\n this.currentEditor = new this.editor(\r\n this.column,\r\n this.additionalData,\r\n // save callback\r\n (e, preventFocus) => {\r\n this.onSave(e, preventFocus);\r\n },\r\n // cancel callback\r\n focusNext => {\r\n this.preventSaveOnClose = true;\r\n this.closeEdit.emit(focusNext);\r\n },\r\n );\r\n // if editor is function\r\n } else {\r\n this.currentEditor = this.editor(\r\n this.column,\r\n this.additionalData,\r\n // save callback\r\n (e, preventFocus) => {\r\n this.onSave(e, preventFocus);\r\n },\r\n // cancel callback\r\n focusNext => {\r\n this.preventSaveOnClose = true;\r\n this.closeEdit.emit(focusNext);\r\n },\r\n );\r\n }\r\n return;\r\n }\r\n // Default text editor usage\r\n this.currentEditor = new TextEditor(this.column, (e, preventFocus) =>\r\n this.onSave(e, preventFocus),\r\n );\r\n }\r\n\r\n componentDidRender() {\r\n if (!this.currentEditor) {\r\n return;\r\n }\r\n this.currentEditor.element = this.element.firstElementChild;\r\n this.currentEditor.componentDidRender?.();\r\n }\r\n\r\n disconnectedCallback() {\r\n if (this.saveOnClose) {\r\n // Can not be cancelled by `preventSaveOnClose` prop.\r\n // Editor requires `getValue` to be able to save.\r\n if (!this.preventSaveOnClose) {\r\n this.onAutoSave();\r\n }\r\n }\r\n\r\n this.preventSaveOnClose = false;\r\n if (!this.currentEditor) {\r\n return;\r\n }\r\n\r\n this.currentEditor.disconnectedCallback?.();\r\n this.currentEditor.element = null;\r\n this.currentEditor = null;\r\n }\r\n\r\n render() {\r\n if (this.currentEditor) {\r\n this.currentEditor.editCell = this.editCell;\r\n return (\r\n <Host class={EDIT_INPUT_WR}>\r\n {this.currentEditor.render(h, this.additionalData)}\r\n </Host>\r\n );\r\n }\r\n return '';\r\n }\r\n}\r\n","import { getItemByPosition } from '@store';\r\nimport { DimensionSettingsState, PositionItem, Cell } from '@type';\r\n\r\ntype EventData = { el: HTMLElement; rows: DimensionSettingsState; cols: DimensionSettingsState };\r\ninterface Config {\r\n positionChanged(from: number, to: number): void;\r\n}\r\n\r\nexport default class RowOrderService {\r\n private currentCell: Cell | null = null;\r\n private previousRow: number | null = null;\r\n\r\n constructor(private config: Config) {}\r\n\r\n /** Drag finished, calculate and apply changes */\r\n endOrder(e: MouseEvent, data: EventData) {\r\n if (this.currentCell === null) {\r\n return;\r\n }\r\n const newRow = this.getCell(e, data);\r\n\r\n // if position changed\r\n if (newRow.y !== this.currentCell.y) {\r\n // rgRow dragged out table\r\n if (newRow.y < 0) {\r\n newRow.y = 0;\r\n }\r\n // rgRow dragged to the top\r\n else if (newRow.y < this.currentCell.y) {\r\n newRow.y++;\r\n }\r\n this.config.positionChanged(this.currentCell.y, newRow.y);\r\n }\r\n this.clear();\r\n }\r\n\r\n /** Drag started, reserve initial cell for farther use */\r\n startOrder(e: MouseEvent, data: EventData): Cell {\r\n this.currentCell = this.getCell(e, data);\r\n return this.currentCell;\r\n }\r\n\r\n move(y: number, data: EventData): PositionItem | null {\r\n const rgRow = this.getRow(y, data);\r\n // if rgRow same as previous or below range (-1 = 0) do nothing\r\n if (this.previousRow === rgRow.itemIndex || rgRow.itemIndex < -1) {\r\n return null;\r\n }\r\n this.previousRow = rgRow.itemIndex;\r\n return rgRow;\r\n }\r\n\r\n /** Drag stopped, probably cursor outside of document area */\r\n clear() {\r\n this.currentCell = null;\r\n this.previousRow = null;\r\n }\r\n\r\n /** Calculate cell based on x, y position */\r\n getRow(y: number, { el, rows }: EventData): PositionItem {\r\n const { top } = el.getBoundingClientRect();\r\n const topRelative = y - top;\r\n const rgRow = getItemByPosition(rows, topRelative);\r\n const absolutePosition = {\r\n itemIndex: rgRow.itemIndex,\r\n start: rgRow.start + top,\r\n end: rgRow.end + top,\r\n };\r\n return absolutePosition;\r\n }\r\n\r\n /** Calculate cell based on x, y position */\r\n getCell({ x, y }: Cell, { el, rows, cols }: EventData): Cell {\r\n const { top, left } = el.getBoundingClientRect();\r\n const topRelative = y - top;\r\n const leftRelative = x - left;\r\n const rgRow = getItemByPosition(rows, topRelative);\r\n const rgCol = getItemByPosition(cols, leftRelative);\r\n return { x: rgCol.itemIndex, y: rgRow.itemIndex };\r\n }\r\n}\r\n","import { Component, Method, Event, EventEmitter, Prop } from '@stencil/core';\r\nimport debounce from 'lodash/debounce';\r\n\r\nimport { type DSourceState, getSourceItem } from '@store';\r\nimport { DRAGG_TEXT } from '../../utils/consts';\r\nimport RowOrderService from './order-row.service';\r\nimport type {\r\n DimensionRows,\r\n DataType,\r\n DimensionSettingsState,\r\n DragStartEvent,\r\n PositionItem,\r\n Cell,\r\n RowDragStartDetails,\r\n} from '@type';\r\nimport type { Observable } from '../../utils';\r\n\r\n/**\r\n * Component for handling row order editor.\r\n */\r\n@Component({ tag: 'revogr-order-editor' })\r\nexport class OrderEditor {\r\n // #region Properties\r\n /** Parent element */\r\n @Prop() parent: HTMLElement;\r\n /** Dimension settings Y */\r\n @Prop() dimensionRow: Observable<DimensionSettingsState>;\r\n /** Dimension settings X */\r\n @Prop() dimensionCol: Observable<DimensionSettingsState>;\r\n\r\n /** Static stores, not expected to change during component lifetime */\r\n @Prop() dataStore: Observable<DSourceState<DataType, DimensionRows>>;\r\n\r\n @Prop() rowType: DimensionRows;\r\n // #endregion\r\n\r\n // #region Events\r\n /** Row drag started */\r\n @Event({ eventName: 'rowdragstartinit', cancelable: true })\r\n rowDragStart: EventEmitter<RowDragStartDetails>;\r\n\r\n /** Row drag ended started */\r\n @Event({ eventName: 'rowdragendinit' })\r\n rowDragEnd: EventEmitter<{ rowType: DimensionRows }>;\r\n\r\n /** Row move started */\r\n @Event({ eventName: 'rowdragmoveinit', cancelable: true })\r\n rowDrag: EventEmitter<PositionItem & { rowType: DimensionRows }>;\r\n\r\n /** Row mouse move started */\r\n @Event({ eventName: 'rowdragmousemove', cancelable: true })\r\n rowMouseMove: EventEmitter<Cell & { rowType: DimensionRows }>;\r\n\r\n /** Row dragged, new range ready to be applied */\r\n @Event({ eventName: 'rowdropinit', cancelable: true })\r\n rowDropped: EventEmitter<{\r\n from: number;\r\n to: number;\r\n rowType: DimensionRows;\r\n }>;\r\n\r\n /** Row drag ended finished. Time to apply data */\r\n @Event({ eventName: 'roworderchange' })\r\n rowOrderChange: EventEmitter<{\r\n from: number;\r\n to: number;\r\n rowType: DimensionRows;\r\n }>;\r\n\r\n // #endregion\r\n\r\n // #region Private\r\n private rowOrderService: RowOrderService;\r\n private events: {\r\n name: keyof DocumentEventMap;\r\n listener: (e: MouseEvent) => void;\r\n }[] = [];\r\n private rowMoveFunc = debounce((y: number) => {\r\n const rgRow = this.rowOrderService.move(y, this.getData());\r\n if (rgRow !== null) {\r\n this.rowDrag.emit({\r\n ...rgRow,\r\n rowType: this.rowType,\r\n });\r\n }\r\n }, 5);\r\n // #endregion\r\n\r\n // #region Methods\r\n @Method() async dragStart(e: DragStartEvent) {\r\n e.originalEvent.preventDefault();\r\n\r\n // extra check if previous ended\r\n if (this.events.length) {\r\n this.clearOrder();\r\n }\r\n\r\n const data = this.getData();\r\n const cell = this.rowOrderService.startOrder(e.originalEvent, data);\r\n const pos = this.rowOrderService.getRow(e.originalEvent.y, data);\r\n const dragStartEvent = this.rowDragStart.emit({\r\n cell,\r\n text: DRAGG_TEXT,\r\n pos,\r\n event: e.originalEvent,\r\n rowType: this.rowType,\r\n model: getSourceItem(this.dataStore, pos.itemIndex),\r\n });\r\n if (dragStartEvent.defaultPrevented) {\r\n return;\r\n }\r\n\r\n const moveMove = (e: MouseEvent) => this.move(e);\r\n const mouseUp = (e: MouseEvent) => this.endOrder(e);\r\n const mouseLeave = () => this.clearOrder();\r\n\r\n this.events.push(\r\n {\r\n name: 'mousemove',\r\n listener: moveMove,\r\n },\r\n {\r\n name: 'mouseup',\r\n listener: mouseUp,\r\n },\r\n {\r\n name: 'mouseleave',\r\n listener: mouseLeave,\r\n },\r\n );\r\n document.addEventListener('mousemove', moveMove);\r\n // Action finished inside of the document\r\n document.addEventListener('mouseup', mouseUp);\r\n document.addEventListener('mouseleave', mouseLeave);\r\n }\r\n\r\n @Method() async endOrder(e: MouseEvent) {\r\n this.rowOrderService.endOrder(e, this.getData());\r\n this.clearOrder();\r\n }\r\n\r\n @Method() async clearOrder() {\r\n this.rowOrderService.clear();\r\n this.events.forEach(v => document.removeEventListener(v.name, v.listener));\r\n this.events.length = 0;\r\n this.rowDragEnd.emit({ rowType: this.rowType });\r\n }\r\n // #endregion\r\n\r\n move({ x, y }: { x: number; y: number }) {\r\n this.rowMouseMove.emit({ x, y, rowType: this.rowType });\r\n this.rowMoveFunc(y);\r\n }\r\n\r\n connectedCallback() {\r\n this.rowOrderService = new RowOrderService({\r\n positionChanged: (from: number, to: number) => {\r\n const dropEvent = this.rowDropped.emit({\r\n from,\r\n to,\r\n rowType: this.rowType,\r\n });\r\n if (dropEvent.defaultPrevented) {\r\n return;\r\n }\r\n this.rowOrderChange.emit(dropEvent.detail);\r\n },\r\n });\r\n }\r\n\r\n private getData() {\r\n return {\r\n el: this.parent,\r\n rows: this.dimensionRow.state,\r\n cols: this.dimensionCol.state,\r\n };\r\n }\r\n}\r\n"],"names":["isEditorCtrConstructible","TextEditor","h","Host","EDIT_INPUT_WR","getItemByPosition","debounce","DRAGG_TEXT","getSourceItem"],"mappings":"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"}
|
|
@@ -219,7 +219,7 @@ const RevoEdit = class {
|
|
|
219
219
|
if (this.editor) {
|
|
220
220
|
// if editor is constructible
|
|
221
221
|
if (edit_utils.isEditorCtrConstructible(this.editor)) {
|
|
222
|
-
this.currentEditor = new this.editor(this.column,
|
|
222
|
+
this.currentEditor = new this.editor(this.column, this.additionalData,
|
|
223
223
|
// save callback
|
|
224
224
|
(e, preventFocus) => {
|
|
225
225
|
this.onSave(e, preventFocus);
|
|
@@ -232,7 +232,7 @@ const RevoEdit = class {
|
|
|
232
232
|
// if editor is function
|
|
233
233
|
}
|
|
234
234
|
else {
|
|
235
|
-
this.currentEditor = this.editor(this.column,
|
|
235
|
+
this.currentEditor = this.editor(this.column, this.additionalData,
|
|
236
236
|
// save callback
|
|
237
237
|
(e, preventFocus) => {
|
|
238
238
|
this.onSave(e, preventFocus);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"revogr-clipboard.revogr-edit.revogr-order-editor.entry.cjs.js","mappings":"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","names":["isEditorCtrConstructible","TextEditor","h","Host","EDIT_INPUT_WR","getItemByPosition","debounce","DRAGG_TEXT","getSourceItem"],"sources":["src/components/clipboard/revogr-clipboard.tsx","src/components/editors/revogr-edit-style.scss?tag=revogr-edit","src/components/editors/revogr-edit.tsx","src/components/order/order-row.service.ts","src/components/order/revogr-order-editor.tsx"],"sourcesContent":["import {\r\n Component,\r\n Listen,\r\n Method,\r\n Event,\r\n EventEmitter,\r\n Prop,\r\n} from '@stencil/core';\r\nimport { DataFormat } from '@type';\r\n/**\r\n * This Clipboard provides functionality for handling clipboard events in a web application.\r\n */\r\n@Component({ tag: 'revogr-clipboard' })\r\nexport class Clipboard {\r\n /**\r\n * If readonly mode - disabled Paste event\r\n */\r\n @Prop() readonly: boolean;\r\n\r\n /**\r\n * Paste 1. Fired before paste applied to the grid\r\n * defaultPrevented - if true, paste will be canceled\r\n */\r\n @Event({ eventName: 'beforepaste' }) beforePaste: EventEmitter<{\r\n raw: string;\r\n isHTML: boolean;\r\n event: ClipboardEvent;\r\n dataText: string;\r\n }>;\r\n\r\n /**\r\n * Paste 2. Fired before paste applied to the grid and after data parsed\r\n */\r\n @Event({ eventName: 'beforepasteapply' })\r\n beforePasteApply: EventEmitter<{\r\n raw: string;\r\n parsed: string[][];\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Paste 3. Internal method. When data region is ready pass it to the top.\r\n * @property {string[][]} data - data to paste\r\n * @property {boolean} defaultPrevented - if true, paste will be canceled\r\n */\r\n @Event({ eventName: 'pasteregion' })\r\n pasteRegion: EventEmitter<string[][]>;\r\n\r\n /**\r\n * Paste 4. Fired after paste applied to the grid\r\n * defaultPrevented - if true, paste will be canceled\r\n */\r\n @Event({ eventName: 'afterpasteapply' }) afterPasteApply: EventEmitter<{\r\n raw: string;\r\n parsed: string[][];\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Cut 1. Fired before cut triggered\r\n * defaultPrevented - if true, cut will be canceled\r\n */\r\n @Event({ eventName: 'beforecut' }) beforeCut: EventEmitter<{\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Cut 2. Clears region when cut is done\r\n */\r\n @Event({ eventName: 'clearregion' }) clearRegion: EventEmitter<DataTransfer>;\r\n\r\n /**\r\n * Copy 1. Fired before copy triggered\r\n * defaultPrevented - if true, copy will be canceled\r\n */\r\n @Event({ eventName: 'beforecopy' }) beforeCopy: EventEmitter<{\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Copy Method 1. Fired before copy applied to the clipboard from outside.\r\n * defaultPrevented - if true, copy will be canceled\r\n */\r\n @Event({ eventName: 'beforecopyapply' }) beforeCopyApply: EventEmitter<{\r\n event: DataTransfer;\r\n data?: string[][];\r\n }>;\r\n\r\n /**\r\n * Copy 2. Fired when region copied\r\n * defaultPrevented - if true, copy will be canceled\r\n */\r\n @Event({ eventName: 'copyregion' })\r\n copyRegion: EventEmitter<DataTransfer>;\r\n\r\n @Listen('paste', { target: 'document' }) onPaste(e: ClipboardEvent) {\r\n // if readonly do nothing\r\n if (this.readonly) {\r\n return;\r\n }\r\n const clipboardData = this.getData(e);\r\n const isHTML = (clipboardData?.types.indexOf('text/html') || -1) > -1;\r\n const data =\r\n (isHTML\r\n ? clipboardData?.getData('text/html')\r\n : clipboardData?.getData('text')) || '';\r\n const dataText = clipboardData?.getData('text') || '';\r\n\r\n const beforePaste = this.beforePaste.emit({\r\n raw: data,\r\n dataText,\r\n isHTML,\r\n event: e,\r\n });\r\n\r\n if (beforePaste.defaultPrevented) {\r\n return;\r\n }\r\n\r\n let parsedData: string[][];\r\n // if html, then search for table if no table fallback to regular text parsing\r\n if (beforePaste.detail.isHTML) {\r\n const table = this.htmlParse(beforePaste.detail.raw);\r\n // fallback to text if not possible to parse as html\r\n parsedData = table || this.textParse(dataText || '');\r\n } else {\r\n parsedData = this.textParse(beforePaste.detail.raw);\r\n }\r\n const beforePasteApply = this.beforePasteApply.emit({\r\n raw: data,\r\n parsed: parsedData,\r\n event: e,\r\n });\r\n if (beforePasteApply.defaultPrevented) {\r\n return;\r\n }\r\n this.pasteRegion.emit(beforePasteApply.detail.parsed);\r\n // post paste action\r\n const afterPasteApply = this.afterPasteApply.emit({\r\n raw: data,\r\n parsed: parsedData,\r\n event: e,\r\n });\r\n // keep default behavior if needed\r\n if (afterPasteApply.defaultPrevented) {\r\n return;\r\n }\r\n e.preventDefault();\r\n }\r\n\r\n /**\r\n * Listen to copy event and emit copy region event\r\n */\r\n @Listen('copy', { target: 'document' }) copyStarted(e: ClipboardEvent) {\r\n const beforeCopy = this.beforeCopy.emit({\r\n event: e,\r\n });\r\n if (beforeCopy.defaultPrevented) {\r\n return;\r\n }\r\n const data = this.getData(beforeCopy.detail.event);\r\n this.copyRegion.emit(data || undefined);\r\n e.preventDefault();\r\n }\r\n\r\n /**\r\n * Listen to copy event and emit copy region event\r\n */\r\n @Listen('cut', { target: 'document' }) cutStarted(e: ClipboardEvent) {\r\n const beforeCut = this.beforeCut.emit({\r\n event: e,\r\n });\r\n if (beforeCut.defaultPrevented) {\r\n return;\r\n }\r\n const data = this.getData(beforeCut.detail.event);\r\n this.copyStarted(e);\r\n\r\n // if readonly do nothing\r\n if (this.readonly) {\r\n return;\r\n }\r\n\r\n this.clearRegion.emit(data || undefined);\r\n e.preventDefault();\r\n }\r\n\r\n @Method() async doCopy(e: DataTransfer, data?: DataFormat[][]) {\r\n const beforeCopyApply = this.beforeCopyApply.emit({\r\n event: e,\r\n data,\r\n });\r\n if (beforeCopyApply.defaultPrevented) {\r\n return;\r\n }\r\n const parsed = data ? this.parserCopy(data) : '';\r\n await navigator.clipboard.writeText(parsed);\r\n // e.setData('text/plain', parsed);\r\n }\r\n\r\n parserCopy(data: DataFormat[][]) {\r\n return data.map(rgRow => rgRow.join('\\t')).join('\\n');\r\n }\r\n\r\n private textParse(data: string) {\r\n const result: string[][] = [];\r\n const rows = data.split(/\\r\\n|\\n|\\r/);\r\n for (let y in rows) {\r\n result.push(rows[y].split('\\t'));\r\n }\r\n return result;\r\n }\r\n\r\n private htmlParse(data: string) {\r\n const result: string[][] = [];\r\n const fragment = document.createRange().createContextualFragment(data);\r\n const table = fragment.querySelector('table');\r\n if (!table) {\r\n return null;\r\n }\r\n for (const rgRow of Array.from(table.rows)) {\r\n result.push(Array.from(rgRow.cells).map(cell => cell.innerText));\r\n }\r\n return result;\r\n }\r\n\r\n private getData(e: ClipboardEvent) {\r\n return (\r\n e.clipboardData ||\r\n (window as unknown as { clipboardData: DataTransfer | null })\r\n ?.clipboardData\r\n );\r\n }\r\n}\r\n","revogr-edit {\r\n display: block;\r\n position: absolute;\r\n background-color: #fff;\r\n\r\n input {\r\n height: 100%;\r\n width: 100%;\r\n box-sizing: border-box;\r\n }\r\n\r\n revo-dropdown {\r\n height: 100%;\r\n\r\n &.shrink {\r\n fieldset legend > span {\r\n display: none;\r\n }\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n Event,\r\n EventEmitter,\r\n Prop,\r\n h,\r\n Element,\r\n Host,\r\n Method,\r\n} from '@stencil/core';\r\nimport { EDIT_INPUT_WR } from '../../utils/consts';\r\nimport { TextEditor } from './text-editor';\r\nimport { ColumnDataSchemaModel } from '@type';\r\nimport {\r\n EditCell,\r\n EditorCtr,\r\n SaveDataDetails,\r\n EditorBase,\r\n} from '@type';\r\n\r\nimport { isEditorCtrConstructible } from './edit.utils';\r\n\r\n/**\r\n * Represents a cell editor in a grid.\r\n * It manages the editing of cells by handling events, saving data, rendering the editor UI,\r\n * and managing the lifecycle of the editor instance.\r\n */\r\n@Component({\r\n tag: 'revogr-edit',\r\n styleUrl: 'revogr-edit-style.scss',\r\n})\r\nexport class RevoEdit {\r\n /**\r\n * Cell to edit data.\r\n */\r\n @Prop() editCell: EditCell;\r\n\r\n /**\r\n * Column data for editor.\r\n */\r\n @Prop() column: ColumnDataSchemaModel | null;\r\n /**\r\n * Custom editors register\r\n */\r\n @Prop() editor: EditorCtr | null;\r\n\r\n /**\r\n * Save on editor close. Defines if data should be saved on editor close.\r\n */\r\n @Prop() saveOnClose = false;\r\n /**\r\n * Additional data to pass to renderer\r\n */\r\n @Prop() additionalData: any;\r\n\r\n /**\r\n * Cell edit event initiator, first in the cellEdit event chain\r\n */\r\n @Event({ eventName: 'celleditinit' }) cellEdit: EventEmitter<SaveDataDetails>;\r\n\r\n /**\r\n * Close editor event\r\n * pass true if requires focus next\r\n */\r\n @Event({ eventName: 'closeedit' }) closeEdit: EventEmitter<\r\n boolean | undefined\r\n >;\r\n\r\n /** Edit session editor */\r\n @Element() element: HTMLElement;\r\n private currentEditor: EditorBase | null = null;\r\n private preventSaveOnClose = false;\r\n\r\n /**\r\n * Cancel pending changes flag. Editor will be closed without autosave.\r\n */\r\n @Method() async cancelChanges() {\r\n this.preventSaveOnClose = true;\r\n }\r\n\r\n /**\r\n * Before editor got disconnected.\r\n * Can be triggered multiple times before actual disconnect.\r\n */\r\n @Method() async beforeDisconnect() {\r\n this.currentEditor?.beforeDisconnect?.();\r\n }\r\n\r\n onAutoSave() {\r\n this.preventSaveOnClose = true;\r\n const val = this.currentEditor?.getValue?.();\r\n // For Editor plugin internal usage.\r\n // When you want to prevent save and use custom save of your own.\r\n if (this.currentEditor?.beforeAutoSave) {\r\n const canSave = this.currentEditor.beforeAutoSave(val);\r\n if (canSave === false) {\r\n return;\r\n }\r\n }\r\n this.onSave(val, true);\r\n }\r\n\r\n /**\r\n * Callback triggered when cell editor saved.\r\n * Closes editor when called.\r\n * @param preventFocus - if true, editor will not be closed & next cell will not be focused.\r\n */\r\n onSave(val?: any, preventFocus?: boolean) {\r\n this.preventSaveOnClose = true;\r\n if (this.editCell) {\r\n this.cellEdit.emit({\r\n rgCol: this.editCell.x,\r\n rgRow: this.editCell.y,\r\n type: this.editCell.type,\r\n prop: this.editCell.prop,\r\n val,\r\n preventFocus,\r\n });\r\n }\r\n }\r\n\r\n componentWillRender() {\r\n // Active editor present and not yet closed.\r\n if (this.currentEditor || !this.column) {\r\n return;\r\n }\r\n this.preventSaveOnClose = false;\r\n\r\n // Custom editor usage.\r\n // Start with TextEditor (editors/text.tsx) for Custom editor.\r\n // It can be class or function\r\n if (this.editor) {\r\n // if editor is constructible\r\n if (isEditorCtrConstructible(this.editor)) {\r\n this.currentEditor = new this.editor(\r\n this.column,\r\n // save callback\r\n (e, preventFocus) => {\r\n this.onSave(e, preventFocus);\r\n },\r\n // cancel callback\r\n focusNext => {\r\n this.preventSaveOnClose = true;\r\n this.closeEdit.emit(focusNext);\r\n },\r\n );\r\n // if editor is function\r\n } else {\r\n this.currentEditor = this.editor(\r\n this.column,\r\n // save callback\r\n (e, preventFocus) => {\r\n this.onSave(e, preventFocus);\r\n },\r\n // cancel callback\r\n focusNext => {\r\n this.preventSaveOnClose = true;\r\n this.closeEdit.emit(focusNext);\r\n },\r\n );\r\n }\r\n return;\r\n }\r\n // Default text editor usage\r\n this.currentEditor = new TextEditor(this.column, (e, preventFocus) =>\r\n this.onSave(e, preventFocus),\r\n );\r\n }\r\n\r\n componentDidRender() {\r\n if (!this.currentEditor) {\r\n return;\r\n }\r\n this.currentEditor.element = this.element.firstElementChild;\r\n this.currentEditor.componentDidRender?.();\r\n }\r\n\r\n disconnectedCallback() {\r\n if (this.saveOnClose) {\r\n // Can not be cancelled by `preventSaveOnClose` prop.\r\n // Editor requires `getValue` to be able to save.\r\n if (!this.preventSaveOnClose) {\r\n this.onAutoSave();\r\n }\r\n }\r\n\r\n this.preventSaveOnClose = false;\r\n if (!this.currentEditor) {\r\n return;\r\n }\r\n\r\n this.currentEditor.disconnectedCallback?.();\r\n this.currentEditor.element = null;\r\n this.currentEditor = null;\r\n }\r\n\r\n render() {\r\n if (this.currentEditor) {\r\n this.currentEditor.editCell = this.editCell;\r\n return (\r\n <Host class={EDIT_INPUT_WR}>\r\n {this.currentEditor.render(h, this.additionalData)}\r\n </Host>\r\n );\r\n }\r\n return '';\r\n }\r\n}\r\n","import { getItemByPosition } from '@store';\r\nimport { DimensionSettingsState, PositionItem, Cell } from '@type';\r\n\r\ntype EventData = { el: HTMLElement; rows: DimensionSettingsState; cols: DimensionSettingsState };\r\ninterface Config {\r\n positionChanged(from: number, to: number): void;\r\n}\r\n\r\nexport default class RowOrderService {\r\n private currentCell: Cell | null = null;\r\n private previousRow: number | null = null;\r\n\r\n constructor(private config: Config) {}\r\n\r\n /** Drag finished, calculate and apply changes */\r\n endOrder(e: MouseEvent, data: EventData) {\r\n if (this.currentCell === null) {\r\n return;\r\n }\r\n const newRow = this.getCell(e, data);\r\n\r\n // if position changed\r\n if (newRow.y !== this.currentCell.y) {\r\n // rgRow dragged out table\r\n if (newRow.y < 0) {\r\n newRow.y = 0;\r\n }\r\n // rgRow dragged to the top\r\n else if (newRow.y < this.currentCell.y) {\r\n newRow.y++;\r\n }\r\n this.config.positionChanged(this.currentCell.y, newRow.y);\r\n }\r\n this.clear();\r\n }\r\n\r\n /** Drag started, reserve initial cell for farther use */\r\n startOrder(e: MouseEvent, data: EventData): Cell {\r\n this.currentCell = this.getCell(e, data);\r\n return this.currentCell;\r\n }\r\n\r\n move(y: number, data: EventData): PositionItem | null {\r\n const rgRow = this.getRow(y, data);\r\n // if rgRow same as previous or below range (-1 = 0) do nothing\r\n if (this.previousRow === rgRow.itemIndex || rgRow.itemIndex < -1) {\r\n return null;\r\n }\r\n this.previousRow = rgRow.itemIndex;\r\n return rgRow;\r\n }\r\n\r\n /** Drag stopped, probably cursor outside of document area */\r\n clear() {\r\n this.currentCell = null;\r\n this.previousRow = null;\r\n }\r\n\r\n /** Calculate cell based on x, y position */\r\n getRow(y: number, { el, rows }: EventData): PositionItem {\r\n const { top } = el.getBoundingClientRect();\r\n const topRelative = y - top;\r\n const rgRow = getItemByPosition(rows, topRelative);\r\n const absolutePosition = {\r\n itemIndex: rgRow.itemIndex,\r\n start: rgRow.start + top,\r\n end: rgRow.end + top,\r\n };\r\n return absolutePosition;\r\n }\r\n\r\n /** Calculate cell based on x, y position */\r\n getCell({ x, y }: Cell, { el, rows, cols }: EventData): Cell {\r\n const { top, left } = el.getBoundingClientRect();\r\n const topRelative = y - top;\r\n const leftRelative = x - left;\r\n const rgRow = getItemByPosition(rows, topRelative);\r\n const rgCol = getItemByPosition(cols, leftRelative);\r\n return { x: rgCol.itemIndex, y: rgRow.itemIndex };\r\n }\r\n}\r\n","import { Component, Method, Event, EventEmitter, Prop } from '@stencil/core';\r\nimport debounce from 'lodash/debounce';\r\n\r\nimport { type DSourceState, getSourceItem } from '@store';\r\nimport { DRAGG_TEXT } from '../../utils/consts';\r\nimport RowOrderService from './order-row.service';\r\nimport type {\r\n DimensionRows,\r\n DataType,\r\n DimensionSettingsState,\r\n DragStartEvent,\r\n PositionItem,\r\n Cell,\r\n RowDragStartDetails,\r\n} from '@type';\r\nimport type { Observable } from '../../utils';\r\n\r\n/**\r\n * Component for handling row order editor.\r\n */\r\n@Component({ tag: 'revogr-order-editor' })\r\nexport class OrderEditor {\r\n // #region Properties\r\n /** Parent element */\r\n @Prop() parent: HTMLElement;\r\n /** Dimension settings Y */\r\n @Prop() dimensionRow: Observable<DimensionSettingsState>;\r\n /** Dimension settings X */\r\n @Prop() dimensionCol: Observable<DimensionSettingsState>;\r\n\r\n /** Static stores, not expected to change during component lifetime */\r\n @Prop() dataStore: Observable<DSourceState<DataType, DimensionRows>>;\r\n\r\n @Prop() rowType: DimensionRows;\r\n // #endregion\r\n\r\n // #region Events\r\n /** Row drag started */\r\n @Event({ eventName: 'rowdragstartinit', cancelable: true })\r\n rowDragStart: EventEmitter<RowDragStartDetails>;\r\n\r\n /** Row drag ended started */\r\n @Event({ eventName: 'rowdragendinit' })\r\n rowDragEnd: EventEmitter<{ rowType: DimensionRows }>;\r\n\r\n /** Row move started */\r\n @Event({ eventName: 'rowdragmoveinit', cancelable: true })\r\n rowDrag: EventEmitter<PositionItem & { rowType: DimensionRows }>;\r\n\r\n /** Row mouse move started */\r\n @Event({ eventName: 'rowdragmousemove', cancelable: true })\r\n rowMouseMove: EventEmitter<Cell & { rowType: DimensionRows }>;\r\n\r\n /** Row dragged, new range ready to be applied */\r\n @Event({ eventName: 'rowdropinit', cancelable: true })\r\n rowDropped: EventEmitter<{\r\n from: number;\r\n to: number;\r\n rowType: DimensionRows;\r\n }>;\r\n\r\n /** Row drag ended finished. Time to apply data */\r\n @Event({ eventName: 'roworderchange' })\r\n rowOrderChange: EventEmitter<{\r\n from: number;\r\n to: number;\r\n rowType: DimensionRows;\r\n }>;\r\n\r\n // #endregion\r\n\r\n // #region Private\r\n private rowOrderService: RowOrderService;\r\n private events: {\r\n name: keyof DocumentEventMap;\r\n listener: (e: MouseEvent) => void;\r\n }[] = [];\r\n private rowMoveFunc = debounce((y: number) => {\r\n const rgRow = this.rowOrderService.move(y, this.getData());\r\n if (rgRow !== null) {\r\n this.rowDrag.emit({\r\n ...rgRow,\r\n rowType: this.rowType,\r\n });\r\n }\r\n }, 5);\r\n // #endregion\r\n\r\n // #region Methods\r\n @Method() async dragStart(e: DragStartEvent) {\r\n e.originalEvent.preventDefault();\r\n\r\n // extra check if previous ended\r\n if (this.events.length) {\r\n this.clearOrder();\r\n }\r\n\r\n const data = this.getData();\r\n const cell = this.rowOrderService.startOrder(e.originalEvent, data);\r\n const pos = this.rowOrderService.getRow(e.originalEvent.y, data);\r\n const dragStartEvent = this.rowDragStart.emit({\r\n cell,\r\n text: DRAGG_TEXT,\r\n pos,\r\n event: e.originalEvent,\r\n rowType: this.rowType,\r\n model: getSourceItem(this.dataStore, pos.itemIndex),\r\n });\r\n if (dragStartEvent.defaultPrevented) {\r\n return;\r\n }\r\n\r\n const moveMove = (e: MouseEvent) => this.move(e);\r\n const mouseUp = (e: MouseEvent) => this.endOrder(e);\r\n const mouseLeave = () => this.clearOrder();\r\n\r\n this.events.push(\r\n {\r\n name: 'mousemove',\r\n listener: moveMove,\r\n },\r\n {\r\n name: 'mouseup',\r\n listener: mouseUp,\r\n },\r\n {\r\n name: 'mouseleave',\r\n listener: mouseLeave,\r\n },\r\n );\r\n document.addEventListener('mousemove', moveMove);\r\n // Action finished inside of the document\r\n document.addEventListener('mouseup', mouseUp);\r\n document.addEventListener('mouseleave', mouseLeave);\r\n }\r\n\r\n @Method() async endOrder(e: MouseEvent) {\r\n this.rowOrderService.endOrder(e, this.getData());\r\n this.clearOrder();\r\n }\r\n\r\n @Method() async clearOrder() {\r\n this.rowOrderService.clear();\r\n this.events.forEach(v => document.removeEventListener(v.name, v.listener));\r\n this.events.length = 0;\r\n this.rowDragEnd.emit({ rowType: this.rowType });\r\n }\r\n // #endregion\r\n\r\n move({ x, y }: { x: number; y: number }) {\r\n this.rowMouseMove.emit({ x, y, rowType: this.rowType });\r\n this.rowMoveFunc(y);\r\n }\r\n\r\n connectedCallback() {\r\n this.rowOrderService = new RowOrderService({\r\n positionChanged: (from: number, to: number) => {\r\n const dropEvent = this.rowDropped.emit({\r\n from,\r\n to,\r\n rowType: this.rowType,\r\n });\r\n if (dropEvent.defaultPrevented) {\r\n return;\r\n }\r\n this.rowOrderChange.emit(dropEvent.detail);\r\n },\r\n });\r\n }\r\n\r\n private getData() {\r\n return {\r\n el: this.parent,\r\n rows: this.dimensionRow.state,\r\n cols: this.dimensionCol.state,\r\n };\r\n }\r\n}\r\n"],"version":3}
|
|
1
|
+
{"file":"revogr-clipboard.revogr-edit.revogr-order-editor.entry.cjs.js","mappings":"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","names":["isEditorCtrConstructible","TextEditor","h","Host","EDIT_INPUT_WR","getItemByPosition","debounce","DRAGG_TEXT","getSourceItem"],"sources":["src/components/clipboard/revogr-clipboard.tsx","src/components/editors/revogr-edit-style.scss?tag=revogr-edit","src/components/editors/revogr-edit.tsx","src/components/order/order-row.service.ts","src/components/order/revogr-order-editor.tsx"],"sourcesContent":["import {\r\n Component,\r\n Listen,\r\n Method,\r\n Event,\r\n EventEmitter,\r\n Prop,\r\n} from '@stencil/core';\r\nimport { DataFormat } from '@type';\r\n/**\r\n * This Clipboard provides functionality for handling clipboard events in a web application.\r\n */\r\n@Component({ tag: 'revogr-clipboard' })\r\nexport class Clipboard {\r\n /**\r\n * If readonly mode - disabled Paste event\r\n */\r\n @Prop() readonly: boolean;\r\n\r\n /**\r\n * Paste 1. Fired before paste applied to the grid\r\n * defaultPrevented - if true, paste will be canceled\r\n */\r\n @Event({ eventName: 'beforepaste' }) beforePaste: EventEmitter<{\r\n raw: string;\r\n isHTML: boolean;\r\n event: ClipboardEvent;\r\n dataText: string;\r\n }>;\r\n\r\n /**\r\n * Paste 2. Fired before paste applied to the grid and after data parsed\r\n */\r\n @Event({ eventName: 'beforepasteapply' })\r\n beforePasteApply: EventEmitter<{\r\n raw: string;\r\n parsed: string[][];\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Paste 3. Internal method. When data region is ready pass it to the top.\r\n * @property {string[][]} data - data to paste\r\n * @property {boolean} defaultPrevented - if true, paste will be canceled\r\n */\r\n @Event({ eventName: 'pasteregion' })\r\n pasteRegion: EventEmitter<string[][]>;\r\n\r\n /**\r\n * Paste 4. Fired after paste applied to the grid\r\n * defaultPrevented - if true, paste will be canceled\r\n */\r\n @Event({ eventName: 'afterpasteapply' }) afterPasteApply: EventEmitter<{\r\n raw: string;\r\n parsed: string[][];\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Cut 1. Fired before cut triggered\r\n * defaultPrevented - if true, cut will be canceled\r\n */\r\n @Event({ eventName: 'beforecut' }) beforeCut: EventEmitter<{\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Cut 2. Clears region when cut is done\r\n */\r\n @Event({ eventName: 'clearregion' }) clearRegion: EventEmitter<DataTransfer>;\r\n\r\n /**\r\n * Copy 1. Fired before copy triggered\r\n * defaultPrevented - if true, copy will be canceled\r\n */\r\n @Event({ eventName: 'beforecopy' }) beforeCopy: EventEmitter<{\r\n event: ClipboardEvent;\r\n }>;\r\n\r\n /**\r\n * Copy Method 1. Fired before copy applied to the clipboard from outside.\r\n * defaultPrevented - if true, copy will be canceled\r\n */\r\n @Event({ eventName: 'beforecopyapply' }) beforeCopyApply: EventEmitter<{\r\n event: DataTransfer;\r\n data?: string[][];\r\n }>;\r\n\r\n /**\r\n * Copy 2. Fired when region copied\r\n * defaultPrevented - if true, copy will be canceled\r\n */\r\n @Event({ eventName: 'copyregion' })\r\n copyRegion: EventEmitter<DataTransfer>;\r\n\r\n @Listen('paste', { target: 'document' }) onPaste(e: ClipboardEvent) {\r\n // if readonly do nothing\r\n if (this.readonly) {\r\n return;\r\n }\r\n const clipboardData = this.getData(e);\r\n const isHTML = (clipboardData?.types.indexOf('text/html') || -1) > -1;\r\n const data =\r\n (isHTML\r\n ? clipboardData?.getData('text/html')\r\n : clipboardData?.getData('text')) || '';\r\n const dataText = clipboardData?.getData('text') || '';\r\n\r\n const beforePaste = this.beforePaste.emit({\r\n raw: data,\r\n dataText,\r\n isHTML,\r\n event: e,\r\n });\r\n\r\n if (beforePaste.defaultPrevented) {\r\n return;\r\n }\r\n\r\n let parsedData: string[][];\r\n // if html, then search for table if no table fallback to regular text parsing\r\n if (beforePaste.detail.isHTML) {\r\n const table = this.htmlParse(beforePaste.detail.raw);\r\n // fallback to text if not possible to parse as html\r\n parsedData = table || this.textParse(dataText || '');\r\n } else {\r\n parsedData = this.textParse(beforePaste.detail.raw);\r\n }\r\n const beforePasteApply = this.beforePasteApply.emit({\r\n raw: data,\r\n parsed: parsedData,\r\n event: e,\r\n });\r\n if (beforePasteApply.defaultPrevented) {\r\n return;\r\n }\r\n this.pasteRegion.emit(beforePasteApply.detail.parsed);\r\n // post paste action\r\n const afterPasteApply = this.afterPasteApply.emit({\r\n raw: data,\r\n parsed: parsedData,\r\n event: e,\r\n });\r\n // keep default behavior if needed\r\n if (afterPasteApply.defaultPrevented) {\r\n return;\r\n }\r\n e.preventDefault();\r\n }\r\n\r\n /**\r\n * Listen to copy event and emit copy region event\r\n */\r\n @Listen('copy', { target: 'document' }) copyStarted(e: ClipboardEvent) {\r\n const beforeCopy = this.beforeCopy.emit({\r\n event: e,\r\n });\r\n if (beforeCopy.defaultPrevented) {\r\n return;\r\n }\r\n const data = this.getData(beforeCopy.detail.event);\r\n this.copyRegion.emit(data || undefined);\r\n e.preventDefault();\r\n }\r\n\r\n /**\r\n * Listen to copy event and emit copy region event\r\n */\r\n @Listen('cut', { target: 'document' }) cutStarted(e: ClipboardEvent) {\r\n const beforeCut = this.beforeCut.emit({\r\n event: e,\r\n });\r\n if (beforeCut.defaultPrevented) {\r\n return;\r\n }\r\n const data = this.getData(beforeCut.detail.event);\r\n this.copyStarted(e);\r\n\r\n // if readonly do nothing\r\n if (this.readonly) {\r\n return;\r\n }\r\n\r\n this.clearRegion.emit(data || undefined);\r\n e.preventDefault();\r\n }\r\n\r\n @Method() async doCopy(e: DataTransfer, data?: DataFormat[][]) {\r\n const beforeCopyApply = this.beforeCopyApply.emit({\r\n event: e,\r\n data,\r\n });\r\n if (beforeCopyApply.defaultPrevented) {\r\n return;\r\n }\r\n const parsed = data ? this.parserCopy(data) : '';\r\n await navigator.clipboard.writeText(parsed);\r\n // e.setData('text/plain', parsed);\r\n }\r\n\r\n parserCopy(data: DataFormat[][]) {\r\n return data.map(rgRow => rgRow.join('\\t')).join('\\n');\r\n }\r\n\r\n private textParse(data: string) {\r\n const result: string[][] = [];\r\n const rows = data.split(/\\r\\n|\\n|\\r/);\r\n for (let y in rows) {\r\n result.push(rows[y].split('\\t'));\r\n }\r\n return result;\r\n }\r\n\r\n private htmlParse(data: string) {\r\n const result: string[][] = [];\r\n const fragment = document.createRange().createContextualFragment(data);\r\n const table = fragment.querySelector('table');\r\n if (!table) {\r\n return null;\r\n }\r\n for (const rgRow of Array.from(table.rows)) {\r\n result.push(Array.from(rgRow.cells).map(cell => cell.innerText));\r\n }\r\n return result;\r\n }\r\n\r\n private getData(e: ClipboardEvent) {\r\n return (\r\n e.clipboardData ||\r\n (window as unknown as { clipboardData: DataTransfer | null })\r\n ?.clipboardData\r\n );\r\n }\r\n}\r\n","revogr-edit {\r\n display: block;\r\n position: absolute;\r\n background-color: #fff;\r\n\r\n input {\r\n height: 100%;\r\n width: 100%;\r\n box-sizing: border-box;\r\n }\r\n\r\n revo-dropdown {\r\n height: 100%;\r\n\r\n &.shrink {\r\n fieldset legend > span {\r\n display: none;\r\n }\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n Event,\r\n EventEmitter,\r\n Prop,\r\n h,\r\n Element,\r\n Host,\r\n Method,\r\n} from '@stencil/core';\r\nimport { EDIT_INPUT_WR } from '../../utils/consts';\r\nimport { TextEditor } from './text-editor';\r\nimport { ColumnDataSchemaModel } from '@type';\r\nimport { EditCell, EditorCtr, SaveDataDetails, EditorBase } from '@type';\r\n\r\nimport { isEditorCtrConstructible } from './edit.utils';\r\n\r\n/**\r\n * Represents a cell editor in a grid.\r\n * It manages the editing of cells by handling events, saving data, rendering the editor UI,\r\n * and managing the lifecycle of the editor instance.\r\n */\r\n@Component({\r\n tag: 'revogr-edit',\r\n styleUrl: 'revogr-edit-style.scss',\r\n})\r\nexport class RevoEdit {\r\n /**\r\n * Cell to edit data.\r\n */\r\n @Prop() editCell: EditCell;\r\n\r\n /**\r\n * Column data for editor.\r\n */\r\n @Prop() column: ColumnDataSchemaModel | null;\r\n /**\r\n * Custom editors register\r\n */\r\n @Prop() editor: EditorCtr | null;\r\n\r\n /**\r\n * Save on editor close. Defines if data should be saved on editor close.\r\n */\r\n @Prop() saveOnClose = false;\r\n /**\r\n * Additional data to pass to renderer\r\n */\r\n @Prop() additionalData: any;\r\n\r\n /**\r\n * Cell edit event initiator, first in the cellEdit event chain\r\n */\r\n @Event({ eventName: 'celleditinit' }) cellEdit: EventEmitter<SaveDataDetails>;\r\n\r\n /**\r\n * Close editor event\r\n * pass true if requires focus next\r\n */\r\n @Event({ eventName: 'closeedit' }) closeEdit: EventEmitter<\r\n boolean | undefined\r\n >;\r\n\r\n /** Edit session editor */\r\n @Element() element: HTMLElement;\r\n private currentEditor: EditorBase | null = null;\r\n private preventSaveOnClose = false;\r\n\r\n /**\r\n * Cancel pending changes flag. Editor will be closed without autosave.\r\n */\r\n @Method() async cancelChanges() {\r\n this.preventSaveOnClose = true;\r\n }\r\n\r\n /**\r\n * Before editor got disconnected.\r\n * Can be triggered multiple times before actual disconnect.\r\n */\r\n @Method() async beforeDisconnect() {\r\n this.currentEditor?.beforeDisconnect?.();\r\n }\r\n\r\n onAutoSave() {\r\n this.preventSaveOnClose = true;\r\n const val = this.currentEditor?.getValue?.();\r\n // For Editor plugin internal usage.\r\n // When you want to prevent save and use custom save of your own.\r\n if (this.currentEditor?.beforeAutoSave) {\r\n const canSave = this.currentEditor.beforeAutoSave(val);\r\n if (canSave === false) {\r\n return;\r\n }\r\n }\r\n this.onSave(val, true);\r\n }\r\n\r\n /**\r\n * Callback triggered when cell editor saved.\r\n * Closes editor when called.\r\n * @param preventFocus - if true, editor will not be closed & next cell will not be focused.\r\n */\r\n onSave(val?: any, preventFocus?: boolean) {\r\n this.preventSaveOnClose = true;\r\n if (this.editCell) {\r\n this.cellEdit.emit({\r\n rgCol: this.editCell.x,\r\n rgRow: this.editCell.y,\r\n type: this.editCell.type,\r\n prop: this.editCell.prop,\r\n val,\r\n preventFocus,\r\n });\r\n }\r\n }\r\n\r\n componentWillRender() {\r\n // Active editor present and not yet closed.\r\n if (this.currentEditor || !this.column) {\r\n return;\r\n }\r\n this.preventSaveOnClose = false;\r\n\r\n // Custom editor usage.\r\n // Start with TextEditor (editors/text.tsx) for Custom editor.\r\n // It can be class or function\r\n if (this.editor) {\r\n // if editor is constructible\r\n if (isEditorCtrConstructible(this.editor)) {\r\n this.currentEditor = new this.editor(\r\n this.column,\r\n this.additionalData,\r\n // save callback\r\n (e, preventFocus) => {\r\n this.onSave(e, preventFocus);\r\n },\r\n // cancel callback\r\n focusNext => {\r\n this.preventSaveOnClose = true;\r\n this.closeEdit.emit(focusNext);\r\n },\r\n );\r\n // if editor is function\r\n } else {\r\n this.currentEditor = this.editor(\r\n this.column,\r\n this.additionalData,\r\n // save callback\r\n (e, preventFocus) => {\r\n this.onSave(e, preventFocus);\r\n },\r\n // cancel callback\r\n focusNext => {\r\n this.preventSaveOnClose = true;\r\n this.closeEdit.emit(focusNext);\r\n },\r\n );\r\n }\r\n return;\r\n }\r\n // Default text editor usage\r\n this.currentEditor = new TextEditor(this.column, (e, preventFocus) =>\r\n this.onSave(e, preventFocus),\r\n );\r\n }\r\n\r\n componentDidRender() {\r\n if (!this.currentEditor) {\r\n return;\r\n }\r\n this.currentEditor.element = this.element.firstElementChild;\r\n this.currentEditor.componentDidRender?.();\r\n }\r\n\r\n disconnectedCallback() {\r\n if (this.saveOnClose) {\r\n // Can not be cancelled by `preventSaveOnClose` prop.\r\n // Editor requires `getValue` to be able to save.\r\n if (!this.preventSaveOnClose) {\r\n this.onAutoSave();\r\n }\r\n }\r\n\r\n this.preventSaveOnClose = false;\r\n if (!this.currentEditor) {\r\n return;\r\n }\r\n\r\n this.currentEditor.disconnectedCallback?.();\r\n this.currentEditor.element = null;\r\n this.currentEditor = null;\r\n }\r\n\r\n render() {\r\n if (this.currentEditor) {\r\n this.currentEditor.editCell = this.editCell;\r\n return (\r\n <Host class={EDIT_INPUT_WR}>\r\n {this.currentEditor.render(h, this.additionalData)}\r\n </Host>\r\n );\r\n }\r\n return '';\r\n }\r\n}\r\n","import { getItemByPosition } from '@store';\r\nimport { DimensionSettingsState, PositionItem, Cell } from '@type';\r\n\r\ntype EventData = { el: HTMLElement; rows: DimensionSettingsState; cols: DimensionSettingsState };\r\ninterface Config {\r\n positionChanged(from: number, to: number): void;\r\n}\r\n\r\nexport default class RowOrderService {\r\n private currentCell: Cell | null = null;\r\n private previousRow: number | null = null;\r\n\r\n constructor(private config: Config) {}\r\n\r\n /** Drag finished, calculate and apply changes */\r\n endOrder(e: MouseEvent, data: EventData) {\r\n if (this.currentCell === null) {\r\n return;\r\n }\r\n const newRow = this.getCell(e, data);\r\n\r\n // if position changed\r\n if (newRow.y !== this.currentCell.y) {\r\n // rgRow dragged out table\r\n if (newRow.y < 0) {\r\n newRow.y = 0;\r\n }\r\n // rgRow dragged to the top\r\n else if (newRow.y < this.currentCell.y) {\r\n newRow.y++;\r\n }\r\n this.config.positionChanged(this.currentCell.y, newRow.y);\r\n }\r\n this.clear();\r\n }\r\n\r\n /** Drag started, reserve initial cell for farther use */\r\n startOrder(e: MouseEvent, data: EventData): Cell {\r\n this.currentCell = this.getCell(e, data);\r\n return this.currentCell;\r\n }\r\n\r\n move(y: number, data: EventData): PositionItem | null {\r\n const rgRow = this.getRow(y, data);\r\n // if rgRow same as previous or below range (-1 = 0) do nothing\r\n if (this.previousRow === rgRow.itemIndex || rgRow.itemIndex < -1) {\r\n return null;\r\n }\r\n this.previousRow = rgRow.itemIndex;\r\n return rgRow;\r\n }\r\n\r\n /** Drag stopped, probably cursor outside of document area */\r\n clear() {\r\n this.currentCell = null;\r\n this.previousRow = null;\r\n }\r\n\r\n /** Calculate cell based on x, y position */\r\n getRow(y: number, { el, rows }: EventData): PositionItem {\r\n const { top } = el.getBoundingClientRect();\r\n const topRelative = y - top;\r\n const rgRow = getItemByPosition(rows, topRelative);\r\n const absolutePosition = {\r\n itemIndex: rgRow.itemIndex,\r\n start: rgRow.start + top,\r\n end: rgRow.end + top,\r\n };\r\n return absolutePosition;\r\n }\r\n\r\n /** Calculate cell based on x, y position */\r\n getCell({ x, y }: Cell, { el, rows, cols }: EventData): Cell {\r\n const { top, left } = el.getBoundingClientRect();\r\n const topRelative = y - top;\r\n const leftRelative = x - left;\r\n const rgRow = getItemByPosition(rows, topRelative);\r\n const rgCol = getItemByPosition(cols, leftRelative);\r\n return { x: rgCol.itemIndex, y: rgRow.itemIndex };\r\n }\r\n}\r\n","import { Component, Method, Event, EventEmitter, Prop } from '@stencil/core';\r\nimport debounce from 'lodash/debounce';\r\n\r\nimport { type DSourceState, getSourceItem } from '@store';\r\nimport { DRAGG_TEXT } from '../../utils/consts';\r\nimport RowOrderService from './order-row.service';\r\nimport type {\r\n DimensionRows,\r\n DataType,\r\n DimensionSettingsState,\r\n DragStartEvent,\r\n PositionItem,\r\n Cell,\r\n RowDragStartDetails,\r\n} from '@type';\r\nimport type { Observable } from '../../utils';\r\n\r\n/**\r\n * Component for handling row order editor.\r\n */\r\n@Component({ tag: 'revogr-order-editor' })\r\nexport class OrderEditor {\r\n // #region Properties\r\n /** Parent element */\r\n @Prop() parent: HTMLElement;\r\n /** Dimension settings Y */\r\n @Prop() dimensionRow: Observable<DimensionSettingsState>;\r\n /** Dimension settings X */\r\n @Prop() dimensionCol: Observable<DimensionSettingsState>;\r\n\r\n /** Static stores, not expected to change during component lifetime */\r\n @Prop() dataStore: Observable<DSourceState<DataType, DimensionRows>>;\r\n\r\n @Prop() rowType: DimensionRows;\r\n // #endregion\r\n\r\n // #region Events\r\n /** Row drag started */\r\n @Event({ eventName: 'rowdragstartinit', cancelable: true })\r\n rowDragStart: EventEmitter<RowDragStartDetails>;\r\n\r\n /** Row drag ended started */\r\n @Event({ eventName: 'rowdragendinit' })\r\n rowDragEnd: EventEmitter<{ rowType: DimensionRows }>;\r\n\r\n /** Row move started */\r\n @Event({ eventName: 'rowdragmoveinit', cancelable: true })\r\n rowDrag: EventEmitter<PositionItem & { rowType: DimensionRows }>;\r\n\r\n /** Row mouse move started */\r\n @Event({ eventName: 'rowdragmousemove', cancelable: true })\r\n rowMouseMove: EventEmitter<Cell & { rowType: DimensionRows }>;\r\n\r\n /** Row dragged, new range ready to be applied */\r\n @Event({ eventName: 'rowdropinit', cancelable: true })\r\n rowDropped: EventEmitter<{\r\n from: number;\r\n to: number;\r\n rowType: DimensionRows;\r\n }>;\r\n\r\n /** Row drag ended finished. Time to apply data */\r\n @Event({ eventName: 'roworderchange' })\r\n rowOrderChange: EventEmitter<{\r\n from: number;\r\n to: number;\r\n rowType: DimensionRows;\r\n }>;\r\n\r\n // #endregion\r\n\r\n // #region Private\r\n private rowOrderService: RowOrderService;\r\n private events: {\r\n name: keyof DocumentEventMap;\r\n listener: (e: MouseEvent) => void;\r\n }[] = [];\r\n private rowMoveFunc = debounce((y: number) => {\r\n const rgRow = this.rowOrderService.move(y, this.getData());\r\n if (rgRow !== null) {\r\n this.rowDrag.emit({\r\n ...rgRow,\r\n rowType: this.rowType,\r\n });\r\n }\r\n }, 5);\r\n // #endregion\r\n\r\n // #region Methods\r\n @Method() async dragStart(e: DragStartEvent) {\r\n e.originalEvent.preventDefault();\r\n\r\n // extra check if previous ended\r\n if (this.events.length) {\r\n this.clearOrder();\r\n }\r\n\r\n const data = this.getData();\r\n const cell = this.rowOrderService.startOrder(e.originalEvent, data);\r\n const pos = this.rowOrderService.getRow(e.originalEvent.y, data);\r\n const dragStartEvent = this.rowDragStart.emit({\r\n cell,\r\n text: DRAGG_TEXT,\r\n pos,\r\n event: e.originalEvent,\r\n rowType: this.rowType,\r\n model: getSourceItem(this.dataStore, pos.itemIndex),\r\n });\r\n if (dragStartEvent.defaultPrevented) {\r\n return;\r\n }\r\n\r\n const moveMove = (e: MouseEvent) => this.move(e);\r\n const mouseUp = (e: MouseEvent) => this.endOrder(e);\r\n const mouseLeave = () => this.clearOrder();\r\n\r\n this.events.push(\r\n {\r\n name: 'mousemove',\r\n listener: moveMove,\r\n },\r\n {\r\n name: 'mouseup',\r\n listener: mouseUp,\r\n },\r\n {\r\n name: 'mouseleave',\r\n listener: mouseLeave,\r\n },\r\n );\r\n document.addEventListener('mousemove', moveMove);\r\n // Action finished inside of the document\r\n document.addEventListener('mouseup', mouseUp);\r\n document.addEventListener('mouseleave', mouseLeave);\r\n }\r\n\r\n @Method() async endOrder(e: MouseEvent) {\r\n this.rowOrderService.endOrder(e, this.getData());\r\n this.clearOrder();\r\n }\r\n\r\n @Method() async clearOrder() {\r\n this.rowOrderService.clear();\r\n this.events.forEach(v => document.removeEventListener(v.name, v.listener));\r\n this.events.length = 0;\r\n this.rowDragEnd.emit({ rowType: this.rowType });\r\n }\r\n // #endregion\r\n\r\n move({ x, y }: { x: number; y: number }) {\r\n this.rowMouseMove.emit({ x, y, rowType: this.rowType });\r\n this.rowMoveFunc(y);\r\n }\r\n\r\n connectedCallback() {\r\n this.rowOrderService = new RowOrderService({\r\n positionChanged: (from: number, to: number) => {\r\n const dropEvent = this.rowDropped.emit({\r\n from,\r\n to,\r\n rowType: this.rowType,\r\n });\r\n if (dropEvent.defaultPrevented) {\r\n return;\r\n }\r\n this.rowOrderChange.emit(dropEvent.detail);\r\n },\r\n });\r\n }\r\n\r\n private getData() {\r\n return {\r\n el: this.parent,\r\n rows: this.dimensionRow.state,\r\n cols: this.dimensionCol.state,\r\n };\r\n }\r\n}\r\n"],"version":3}
|
|
@@ -77,7 +77,7 @@ export class RevoEdit {
|
|
|
77
77
|
if (this.editor) {
|
|
78
78
|
// if editor is constructible
|
|
79
79
|
if (isEditorCtrConstructible(this.editor)) {
|
|
80
|
-
this.currentEditor = new this.editor(this.column,
|
|
80
|
+
this.currentEditor = new this.editor(this.column, this.additionalData,
|
|
81
81
|
// save callback
|
|
82
82
|
(e, preventFocus) => {
|
|
83
83
|
this.onSave(e, preventFocus);
|
|
@@ -90,7 +90,7 @@ export class RevoEdit {
|
|
|
90
90
|
// if editor is function
|
|
91
91
|
}
|
|
92
92
|
else {
|
|
93
|
-
this.currentEditor = this.editor(this.column,
|
|
93
|
+
this.currentEditor = this.editor(this.column, this.additionalData,
|
|
94
94
|
// save callback
|
|
95
95
|
(e, preventFocus) => {
|
|
96
96
|
this.onSave(e, preventFocus);
|
|
@@ -205,7 +205,7 @@ export class RevoEdit {
|
|
|
205
205
|
"mutable": false,
|
|
206
206
|
"complexType": {
|
|
207
207
|
"original": "EditorCtr | null",
|
|
208
|
-
"resolved": "((column: ColumnDataSchemaModel, save: (value?: any, preventFocus?: boolean | undefined) => void, close: (focusNext?: boolean | undefined) => void) => EditorBase) | EditorCtrConstructible | null",
|
|
208
|
+
"resolved": "((column: ColumnDataSchemaModel, additionalData: any, save: (value?: any, preventFocus?: boolean | undefined) => void, close: (focusNext?: boolean | undefined) => void) => EditorBase) | EditorCtrConstructible | null",
|
|
209
209
|
"references": {
|
|
210
210
|
"EditorCtr": {
|
|
211
211
|
"location": "import",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revogr-edit.js","sourceRoot":"","sources":["../../../src/components/editors/revogr-edit.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EAEL,IAAI,EACJ,CAAC,EACD,OAAO,EACP,IAAI,EACJ,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"revogr-edit.js","sourceRoot":"","sources":["../../../src/components/editors/revogr-edit.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\r\n Component,\r\n Event,\r\n EventEmitter,\r\n Prop,\r\n h,\r\n Element,\r\n Host,\r\n Method,\r\n} from '@stencil/core';\r\nimport { EDIT_INPUT_WR } from '../../utils/consts';\r\nimport { TextEditor } from './text-editor';\r\nimport { ColumnDataSchemaModel } from '@type';\r\nimport { EditCell, EditorCtr, SaveDataDetails, EditorBase } from '@type';\r\n\r\nimport { isEditorCtrConstructible } from './edit.utils';\r\n\r\n/**\r\n * Represents a cell editor in a grid.\r\n * It manages the editing of cells by handling events, saving data, rendering the editor UI,\r\n * and managing the lifecycle of the editor instance.\r\n */\r\n@Component({\r\n tag: 'revogr-edit',\r\n styleUrl: 'revogr-edit-style.scss',\r\n})\r\nexport class RevoEdit {\r\n /**\r\n * Cell to edit data.\r\n */\r\n @Prop() editCell: EditCell;\r\n\r\n /**\r\n * Column data for editor.\r\n */\r\n @Prop() column: ColumnDataSchemaModel | null;\r\n /**\r\n * Custom editors register\r\n */\r\n @Prop() editor: EditorCtr | null;\r\n\r\n /**\r\n * Save on editor close. Defines if data should be saved on editor close.\r\n */\r\n @Prop() saveOnClose = false;\r\n /**\r\n * Additional data to pass to renderer\r\n */\r\n @Prop() additionalData: any;\r\n\r\n /**\r\n * Cell edit event initiator, first in the cellEdit event chain\r\n */\r\n @Event({ eventName: 'celleditinit' }) cellEdit: EventEmitter<SaveDataDetails>;\r\n\r\n /**\r\n * Close editor event\r\n * pass true if requires focus next\r\n */\r\n @Event({ eventName: 'closeedit' }) closeEdit: EventEmitter<\r\n boolean | undefined\r\n >;\r\n\r\n /** Edit session editor */\r\n @Element() element: HTMLElement;\r\n private currentEditor: EditorBase | null = null;\r\n private preventSaveOnClose = false;\r\n\r\n /**\r\n * Cancel pending changes flag. Editor will be closed without autosave.\r\n */\r\n @Method() async cancelChanges() {\r\n this.preventSaveOnClose = true;\r\n }\r\n\r\n /**\r\n * Before editor got disconnected.\r\n * Can be triggered multiple times before actual disconnect.\r\n */\r\n @Method() async beforeDisconnect() {\r\n this.currentEditor?.beforeDisconnect?.();\r\n }\r\n\r\n onAutoSave() {\r\n this.preventSaveOnClose = true;\r\n const val = this.currentEditor?.getValue?.();\r\n // For Editor plugin internal usage.\r\n // When you want to prevent save and use custom save of your own.\r\n if (this.currentEditor?.beforeAutoSave) {\r\n const canSave = this.currentEditor.beforeAutoSave(val);\r\n if (canSave === false) {\r\n return;\r\n }\r\n }\r\n this.onSave(val, true);\r\n }\r\n\r\n /**\r\n * Callback triggered when cell editor saved.\r\n * Closes editor when called.\r\n * @param preventFocus - if true, editor will not be closed & next cell will not be focused.\r\n */\r\n onSave(val?: any, preventFocus?: boolean) {\r\n this.preventSaveOnClose = true;\r\n if (this.editCell) {\r\n this.cellEdit.emit({\r\n rgCol: this.editCell.x,\r\n rgRow: this.editCell.y,\r\n type: this.editCell.type,\r\n prop: this.editCell.prop,\r\n val,\r\n preventFocus,\r\n });\r\n }\r\n }\r\n\r\n componentWillRender() {\r\n // Active editor present and not yet closed.\r\n if (this.currentEditor || !this.column) {\r\n return;\r\n }\r\n this.preventSaveOnClose = false;\r\n\r\n // Custom editor usage.\r\n // Start with TextEditor (editors/text.tsx) for Custom editor.\r\n // It can be class or function\r\n if (this.editor) {\r\n // if editor is constructible\r\n if (isEditorCtrConstructible(this.editor)) {\r\n this.currentEditor = new this.editor(\r\n this.column,\r\n this.additionalData,\r\n // save callback\r\n (e, preventFocus) => {\r\n this.onSave(e, preventFocus);\r\n },\r\n // cancel callback\r\n focusNext => {\r\n this.preventSaveOnClose = true;\r\n this.closeEdit.emit(focusNext);\r\n },\r\n );\r\n // if editor is function\r\n } else {\r\n this.currentEditor = this.editor(\r\n this.column,\r\n this.additionalData,\r\n // save callback\r\n (e, preventFocus) => {\r\n this.onSave(e, preventFocus);\r\n },\r\n // cancel callback\r\n focusNext => {\r\n this.preventSaveOnClose = true;\r\n this.closeEdit.emit(focusNext);\r\n },\r\n );\r\n }\r\n return;\r\n }\r\n // Default text editor usage\r\n this.currentEditor = new TextEditor(this.column, (e, preventFocus) =>\r\n this.onSave(e, preventFocus),\r\n );\r\n }\r\n\r\n componentDidRender() {\r\n if (!this.currentEditor) {\r\n return;\r\n }\r\n this.currentEditor.element = this.element.firstElementChild;\r\n this.currentEditor.componentDidRender?.();\r\n }\r\n\r\n disconnectedCallback() {\r\n if (this.saveOnClose) {\r\n // Can not be cancelled by `preventSaveOnClose` prop.\r\n // Editor requires `getValue` to be able to save.\r\n if (!this.preventSaveOnClose) {\r\n this.onAutoSave();\r\n }\r\n }\r\n\r\n this.preventSaveOnClose = false;\r\n if (!this.currentEditor) {\r\n return;\r\n }\r\n\r\n this.currentEditor.disconnectedCallback?.();\r\n this.currentEditor.element = null;\r\n this.currentEditor = null;\r\n }\r\n\r\n render() {\r\n if (this.currentEditor) {\r\n this.currentEditor.editCell = this.editCell;\r\n return (\r\n <Host class={EDIT_INPUT_WR}>\r\n {this.currentEditor.render(h, this.additionalData)}\r\n </Host>\r\n );\r\n }\r\n return '';\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/types/selection.ts"],"names":[],"mappings":"","sourcesContent":["import { type VNode } from '@stencil/core';\r\nimport type { DimensionRows, DimensionCols } from './dimension';\r\nimport type {\r\n ColumnProp,\r\n DataType,\r\n DataLookup,\r\n HyperFunc,\r\n ColumnDataSchemaModel,\r\n PositionItem,\r\n} from './interfaces';\r\n\r\n// Virtual index of row\r\nexport type RowIndex = number;\r\n// Virtual index of row\r\nexport type ColIndex = number;\r\n\r\n/**\r\n * Represents the state of the selection store.\r\n * It contains information about the selection range, temporary range,\r\n * focused cell, editing cell, last focused cell, and next cell to focus.\r\n */\r\nexport type SelectionStoreState = {\r\n range: RangeArea | null;\r\n /**\r\n * Temporary range selection area\r\n */\r\n tempRange: RangeArea | null;\r\n /**\r\n * Type of the temporary range selection\r\n */\r\n tempRangeType: string | null;\r\n /**\r\n * Focused cell coordinate\r\n */\r\n focus: Cell | null;\r\n /**\r\n * Editing cell store\r\n */\r\n edit: EditCellStore | null;\r\n /**\r\n * Last cell which was focused\r\n */\r\n lastCell: Cell | null;\r\n /**\r\n * Next cell to focus\r\n */\r\n nextFocus: Cell | null;\r\n};\r\n\r\n// Virtual index of row (y) and column (x)\r\nexport type RangeArea = {\r\n x: ColIndex;\r\n y: RowIndex;\r\n x1: ColIndex;\r\n y1: RowIndex;\r\n};\r\nexport type TempRange = {\r\n type: string;\r\n area: RangeArea;\r\n};\r\nexport type OldNewRangeMapping = {\r\n [newRowIndex: number]: {\r\n [T in ColumnProp]: {\r\n // new column prop\r\n rowIndex: number; // Virtual index of original row\r\n colIndex: number; // Virtual index of original col\r\n colProp: ColumnProp; // original column prop\r\n };\r\n };\r\n};\r\nexport type ChangedRange = {\r\n type: DimensionRows;\r\n colType: DimensionCols;\r\n newRange: RangeArea; // new range to apply\r\n oldRange: RangeArea; // range to copy from\r\n mapping: OldNewRangeMapping;\r\n newData: {\r\n [newRowIndex: number]: DataType;\r\n };\r\n};\r\n\r\n/**\r\n * Cell coordinates\r\n */\r\nexport interface Cell {\r\n x: ColIndex; // Virtual index of column\r\n y: RowIndex; // Virtual index of row\r\n}\r\nexport type FocusedCells = {\r\n focus: Cell;\r\n end: Cell;\r\n};\r\nexport type RangeAreaCss = {\r\n left: string;\r\n top: string;\r\n width: string;\r\n height: string;\r\n};\r\n\r\nexport type SaveDataDetails = {\r\n rgRow: RowIndex; // Virtual index of row\r\n rgCol: ColIndex; // Virtual index of column\r\n type: DimensionRows;\r\n prop: ColumnProp;\r\n val: any;\r\n preventFocus?: boolean;\r\n};\r\n\r\nexport type BeforeEdit = BeforeSaveDataDetails;\r\n\r\nexport type RowDragStartDetails = {\r\n cell: Cell;\r\n text: string;\r\n pos: PositionItem;\r\n event: MouseEvent;\r\n rowType: DimensionRows;\r\n model: any;\r\n};\r\n\r\nexport interface BeforeSaveDataDetails extends ColumnDataSchemaModel {\r\n /**\r\n * Value from editor to save, not part of the model value yet\r\n */\r\n val?: any;\r\n /**\r\n * Previous row data before the edit.\r\n */\r\n previousModel?: DataType;\r\n}\r\n\r\nexport type BeforeRangeSaveDataDetails = {\r\n data: DataLookup;\r\n models: Partial<DataLookup>;\r\n previousModels: Partial<DataLookup> | null;\r\n type: DimensionRows;\r\n newRange: RangeArea | null;\r\n oldRange: RangeArea | null;\r\n copy?: boolean;\r\n clearByKeyboard?: boolean;\r\n};\r\n\r\nexport type AfterEditEvent = BeforeRangeSaveDataDetails | BeforeSaveDataDetails;\r\n\r\n/**\r\n * Edit cell info for store\r\n */\r\nexport interface EditCellStore extends Cell {\r\n val?: any;\r\n}\r\n/**\r\n * Edit cell info for editor\r\n */\r\nexport type EditCell = EditCellStore & BeforeSaveDataDetails;\r\n\r\n/**\r\n * Available editors in grid\r\n */\r\nexport type Editors = {\r\n [name: string]: EditorCtr;\r\n};\r\n\r\n/**\r\n * Editor component\r\n */\r\nexport type EditorCtr = EditorCtrCallable | EditorCtrConstructible;\r\n\r\n/**\r\n * Editor component callable function\r\n */\r\nexport type EditorCtrCallable = {\r\n (\r\n column: ColumnDataSchemaModel,\r\n save: (value?: any, preventFocus?: boolean) => void,\r\n close: (focusNext?: boolean) => void,\r\n ): EditorBase;\r\n};\r\n/**\r\n * Editor component constructible class\r\n */\r\nexport interface EditorCtrConstructible {\r\n new (\r\n column: ColumnDataSchemaModel,\r\n save: (value: any, preventFocus?: boolean) => void,\r\n close: (focusNext?: boolean) => void,\r\n ): EditorBase;\r\n}\r\n\r\n/**\r\n * Editor interface\r\n */\r\nexport interface EditorBase {\r\n element?: Element | null;\r\n editCell?: EditCell;\r\n /**\r\n * Autosave usage when you want to return value for models.\r\n */\r\n getValue?(): any;\r\n /**\r\n * For Editor plugin internal usage.\r\n * Prevents Editor save. Manual save usage required.\r\n */\r\n beforeAutoSave?(val?: any): boolean;\r\n beforeUpdate?(): void;\r\n /**\r\n * Before editor got disconnected.\r\n * Can be triggered multiple times before actual disconnect.\r\n */\r\n beforeDisconnect?(): void;\r\n componentDidRender?(): void;\r\n disconnectedCallback?(): void;\r\n render(\r\n createElement: HyperFunc<VNode>,\r\n additionalData?: any,\r\n ): VNode | VNode[] | string | void;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/types/selection.ts"],"names":[],"mappings":"","sourcesContent":["import { type VNode } from '@stencil/core';\r\nimport type { DimensionRows, DimensionCols } from './dimension';\r\nimport type {\r\n ColumnProp,\r\n DataType,\r\n DataLookup,\r\n HyperFunc,\r\n ColumnDataSchemaModel,\r\n PositionItem,\r\n} from './interfaces';\r\n\r\n// Virtual index of row\r\nexport type RowIndex = number;\r\n// Virtual index of row\r\nexport type ColIndex = number;\r\n\r\n/**\r\n * Represents the state of the selection store.\r\n * It contains information about the selection range, temporary range,\r\n * focused cell, editing cell, last focused cell, and next cell to focus.\r\n */\r\nexport type SelectionStoreState = {\r\n range: RangeArea | null;\r\n /**\r\n * Temporary range selection area\r\n */\r\n tempRange: RangeArea | null;\r\n /**\r\n * Type of the temporary range selection\r\n */\r\n tempRangeType: string | null;\r\n /**\r\n * Focused cell coordinate\r\n */\r\n focus: Cell | null;\r\n /**\r\n * Editing cell store\r\n */\r\n edit: EditCellStore | null;\r\n /**\r\n * Last cell which was focused\r\n */\r\n lastCell: Cell | null;\r\n /**\r\n * Next cell to focus\r\n */\r\n nextFocus: Cell | null;\r\n};\r\n\r\n// Virtual index of row (y) and column (x)\r\nexport type RangeArea = {\r\n x: ColIndex;\r\n y: RowIndex;\r\n x1: ColIndex;\r\n y1: RowIndex;\r\n};\r\nexport type TempRange = {\r\n type: string;\r\n area: RangeArea;\r\n};\r\nexport type OldNewRangeMapping = {\r\n [newRowIndex: number]: {\r\n [T in ColumnProp]: {\r\n // new column prop\r\n rowIndex: number; // Virtual index of original row\r\n colIndex: number; // Virtual index of original col\r\n colProp: ColumnProp; // original column prop\r\n };\r\n };\r\n};\r\nexport type ChangedRange = {\r\n type: DimensionRows;\r\n colType: DimensionCols;\r\n newRange: RangeArea; // new range to apply\r\n oldRange: RangeArea; // range to copy from\r\n mapping: OldNewRangeMapping;\r\n newData: {\r\n [newRowIndex: number]: DataType;\r\n };\r\n};\r\n\r\n/**\r\n * Cell coordinates\r\n */\r\nexport interface Cell {\r\n x: ColIndex; // Virtual index of column\r\n y: RowIndex; // Virtual index of row\r\n}\r\nexport type FocusedCells = {\r\n focus: Cell;\r\n end: Cell;\r\n};\r\nexport type RangeAreaCss = {\r\n left: string;\r\n top: string;\r\n width: string;\r\n height: string;\r\n};\r\n\r\nexport type SaveDataDetails = {\r\n rgRow: RowIndex; // Virtual index of row\r\n rgCol: ColIndex; // Virtual index of column\r\n type: DimensionRows;\r\n prop: ColumnProp;\r\n val: any;\r\n preventFocus?: boolean;\r\n};\r\n\r\nexport type BeforeEdit = BeforeSaveDataDetails;\r\n\r\nexport type RowDragStartDetails = {\r\n cell: Cell;\r\n text: string;\r\n pos: PositionItem;\r\n event: MouseEvent;\r\n rowType: DimensionRows;\r\n model: any;\r\n};\r\n\r\nexport interface BeforeSaveDataDetails extends ColumnDataSchemaModel {\r\n /**\r\n * Value from editor to save, not part of the model value yet\r\n */\r\n val?: any;\r\n /**\r\n * Previous row data before the edit.\r\n */\r\n previousModel?: DataType;\r\n}\r\n\r\nexport type BeforeRangeSaveDataDetails = {\r\n data: DataLookup;\r\n models: Partial<DataLookup>;\r\n previousModels: Partial<DataLookup> | null;\r\n type: DimensionRows;\r\n newRange: RangeArea | null;\r\n oldRange: RangeArea | null;\r\n copy?: boolean;\r\n clearByKeyboard?: boolean;\r\n};\r\n\r\nexport type AfterEditEvent = BeforeRangeSaveDataDetails | BeforeSaveDataDetails;\r\n\r\n/**\r\n * Edit cell info for store\r\n */\r\nexport interface EditCellStore extends Cell {\r\n val?: any;\r\n}\r\n/**\r\n * Edit cell info for editor\r\n */\r\nexport type EditCell = EditCellStore & BeforeSaveDataDetails;\r\n\r\n/**\r\n * Available editors in grid\r\n */\r\nexport type Editors = {\r\n [name: string]: EditorCtr;\r\n};\r\n\r\n/**\r\n * Editor component\r\n */\r\nexport type EditorCtr = EditorCtrCallable | EditorCtrConstructible;\r\n\r\n/**\r\n * Editor component callable function\r\n */\r\nexport type EditorCtrCallable = {\r\n (\r\n column: ColumnDataSchemaModel,\r\n additionalData: any,\r\n save: (value?: any, preventFocus?: boolean) => void,\r\n close: (focusNext?: boolean) => void,\r\n ): EditorBase;\r\n};\r\n/**\r\n * Editor component constructible class\r\n */\r\nexport interface EditorCtrConstructible {\r\n new (\r\n column: ColumnDataSchemaModel,\r\n additionalData: any | undefined,\r\n save: (value: any, preventFocus?: boolean) => void,\r\n close: (focusNext?: boolean) => void,\r\n ): EditorBase;\r\n}\r\n\r\n/**\r\n * Editor interface\r\n */\r\nexport interface EditorBase {\r\n element?: Element | null;\r\n editCell?: EditCell;\r\n /**\r\n * Autosave usage when you want to return value for models.\r\n */\r\n getValue?(): any;\r\n /**\r\n * For Editor plugin internal usage.\r\n * Prevents Editor save. Manual save usage required.\r\n */\r\n beforeAutoSave?(val?: any): boolean;\r\n beforeUpdate?(): void;\r\n /**\r\n * Before editor got disconnected.\r\n * Can be triggered multiple times before actual disconnect.\r\n */\r\n beforeDisconnect?(): void;\r\n componentDidRender?(): void;\r\n disconnectedCallback?(): void;\r\n render(\r\n createElement: HyperFunc<VNode>,\r\n additionalData?: any,\r\n ): VNode | VNode[] | string | void;\r\n}\r\n"]}
|