lsp-grid 1.0.5 → 1.0.6
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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"revogr-clipboard.revogr-edit.revogr-order-editor.entry.esm.js","mappings":"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","names":[],"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.esm.js","mappings":"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","names":[],"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}
|
|
@@ -143,13 +143,13 @@ export type EditorCtr = EditorCtrCallable | EditorCtrConstructible;
|
|
|
143
143
|
* Editor component callable function
|
|
144
144
|
*/
|
|
145
145
|
export type EditorCtrCallable = {
|
|
146
|
-
(column: ColumnDataSchemaModel, save: (value?: any, preventFocus?: boolean) => void, close: (focusNext?: boolean) => void): EditorBase;
|
|
146
|
+
(column: ColumnDataSchemaModel, additionalData: any, save: (value?: any, preventFocus?: boolean) => void, close: (focusNext?: boolean) => void): EditorBase;
|
|
147
147
|
};
|
|
148
148
|
/**
|
|
149
149
|
* Editor component constructible class
|
|
150
150
|
*/
|
|
151
151
|
export interface EditorCtrConstructible {
|
|
152
|
-
new (column: ColumnDataSchemaModel, save: (value: any, preventFocus?: boolean) => void, close: (focusNext?: boolean) => void): EditorBase;
|
|
152
|
+
new (column: ColumnDataSchemaModel, additionalData: any | undefined, save: (value: any, preventFocus?: boolean) => void, close: (focusNext?: boolean) => void): EditorBase;
|
|
153
153
|
}
|
|
154
154
|
/**
|
|
155
155
|
* Editor interface
|
package/hydrate/index.js
CHANGED
|
@@ -10949,7 +10949,7 @@ class RevoEdit {
|
|
|
10949
10949
|
if (this.editor) {
|
|
10950
10950
|
// if editor is constructible
|
|
10951
10951
|
if (isEditorCtrConstructible(this.editor)) {
|
|
10952
|
-
this.currentEditor = new this.editor(this.column,
|
|
10952
|
+
this.currentEditor = new this.editor(this.column, this.additionalData,
|
|
10953
10953
|
// save callback
|
|
10954
10954
|
(e, preventFocus) => {
|
|
10955
10955
|
this.onSave(e, preventFocus);
|
|
@@ -10962,7 +10962,7 @@ class RevoEdit {
|
|
|
10962
10962
|
// if editor is function
|
|
10963
10963
|
}
|
|
10964
10964
|
else {
|
|
10965
|
-
this.currentEditor = this.editor(this.column,
|
|
10965
|
+
this.currentEditor = this.editor(this.column, this.additionalData,
|
|
10966
10966
|
// save callback
|
|
10967
10967
|
(e, preventFocus) => {
|
|
10968
10968
|
this.onSave(e, preventFocus);
|
package/hydrate/index.mjs
CHANGED
|
@@ -10947,7 +10947,7 @@ class RevoEdit {
|
|
|
10947
10947
|
if (this.editor) {
|
|
10948
10948
|
// if editor is constructible
|
|
10949
10949
|
if (isEditorCtrConstructible(this.editor)) {
|
|
10950
|
-
this.currentEditor = new this.editor(this.column,
|
|
10950
|
+
this.currentEditor = new this.editor(this.column, this.additionalData,
|
|
10951
10951
|
// save callback
|
|
10952
10952
|
(e, preventFocus) => {
|
|
10953
10953
|
this.onSave(e, preventFocus);
|
|
@@ -10960,7 +10960,7 @@ class RevoEdit {
|
|
|
10960
10960
|
// if editor is function
|
|
10961
10961
|
}
|
|
10962
10962
|
else {
|
|
10963
|
-
this.currentEditor = this.editor(this.column,
|
|
10963
|
+
this.currentEditor = this.editor(this.column, this.additionalData,
|
|
10964
10964
|
// save callback
|
|
10965
10965
|
(e, preventFocus) => {
|
|
10966
10966
|
this.onSave(e, preventFocus);
|
package/package.json
CHANGED
package/react/dist/index.d.ts
CHANGED
|
@@ -1978,12 +1978,13 @@ export declare const Editor: (EditorComponent: ComponentType<EditorType>) => Edi
|
|
|
1978
1978
|
export declare class EditorAdapter implements EditorBase {
|
|
1979
1979
|
private EditorComponent;
|
|
1980
1980
|
column: ColumnDataSchemaModel;
|
|
1981
|
+
additionalData: any;
|
|
1981
1982
|
private save;
|
|
1982
1983
|
private close;
|
|
1983
1984
|
element: ReactElement | null;
|
|
1984
1985
|
editCell?: EditCell;
|
|
1985
1986
|
private renderedComponent;
|
|
1986
|
-
constructor(EditorComponent: ComponentType<EditorType>, column: ColumnDataSchemaModel, save: (value: any, preventFocus?: boolean) => void, close: (focusNext?: boolean) => void);
|
|
1987
|
+
constructor(EditorComponent: ComponentType<EditorType>, column: ColumnDataSchemaModel, additionalData: any, save: (value: any, preventFocus?: boolean) => void, close: (focusNext?: boolean) => void);
|
|
1987
1988
|
componentDidRender(): void;
|
|
1988
1989
|
disconnectedCallback(): void;
|
|
1989
1990
|
render(h: HyperFunc<VNode>): VNode;
|
|
@@ -2024,14 +2025,14 @@ export declare type EditorCtr = EditorCtrCallable | EditorCtrConstructible;
|
|
|
2024
2025
|
* Editor component callable function
|
|
2025
2026
|
*/
|
|
2026
2027
|
export declare type EditorCtrCallable = {
|
|
2027
|
-
(column: ColumnDataSchemaModel, save: (value?: any, preventFocus?: boolean) => void, close: (focusNext?: boolean) => void): EditorBase;
|
|
2028
|
+
(column: ColumnDataSchemaModel, additionalData: any, save: (value?: any, preventFocus?: boolean) => void, close: (focusNext?: boolean) => void): EditorBase;
|
|
2028
2029
|
};
|
|
2029
2030
|
|
|
2030
2031
|
/**
|
|
2031
2032
|
* Editor component constructible class
|
|
2032
2033
|
*/
|
|
2033
2034
|
export declare interface EditorCtrConstructible {
|
|
2034
|
-
new (column: ColumnDataSchemaModel, save: (value: any, preventFocus?: boolean) => void, close: (focusNext?: boolean) => void): EditorBase;
|
|
2035
|
+
new (column: ColumnDataSchemaModel, additionalData: any | undefined, save: (value: any, preventFocus?: boolean) => void, close: (focusNext?: boolean) => void): EditorBase;
|
|
2035
2036
|
}
|
|
2036
2037
|
|
|
2037
2038
|
/**
|
|
@@ -2046,6 +2047,7 @@ export declare type Editors = {
|
|
|
2046
2047
|
*/
|
|
2047
2048
|
export declare type EditorType = {
|
|
2048
2049
|
column: ColumnDataSchemaModel;
|
|
2050
|
+
additionalData: any;
|
|
2049
2051
|
save: (value: any, preventFocus?: boolean) => void;
|
|
2050
2052
|
close: (focusNext?: boolean) => void;
|
|
2051
2053
|
} & Partial<EditCell>;
|
|
@@ -210,12 +210,13 @@ const Template = (ReactComponent, customProps) => {
|
|
|
210
210
|
};
|
|
211
211
|
};
|
|
212
212
|
class EditorAdapter {
|
|
213
|
-
constructor(EditorComponent, column, save, close) {
|
|
213
|
+
constructor(EditorComponent, column, additionalData, save, close) {
|
|
214
214
|
__publicField(this, "element", null);
|
|
215
215
|
__publicField(this, "editCell");
|
|
216
216
|
__publicField(this, "renderedComponent", null);
|
|
217
217
|
this.EditorComponent = EditorComponent;
|
|
218
218
|
this.column = column;
|
|
219
|
+
this.additionalData = additionalData;
|
|
219
220
|
this.save = save;
|
|
220
221
|
this.close = close;
|
|
221
222
|
}
|
|
@@ -238,6 +239,7 @@ class EditorAdapter {
|
|
|
238
239
|
{
|
|
239
240
|
...this.editCell,
|
|
240
241
|
column: this.column,
|
|
242
|
+
additionalData: this.additionalData,
|
|
241
243
|
save: this.save,
|
|
242
244
|
close: this.close
|
|
243
245
|
},
|
|
@@ -247,8 +249,14 @@ class EditorAdapter {
|
|
|
247
249
|
}
|
|
248
250
|
}
|
|
249
251
|
const Editor = (EditorComponent) => {
|
|
250
|
-
return function(column, save, close) {
|
|
251
|
-
return new EditorAdapter(
|
|
252
|
+
return function(column, additionalData, save, close) {
|
|
253
|
+
return new EditorAdapter(
|
|
254
|
+
EditorComponent,
|
|
255
|
+
additionalData,
|
|
256
|
+
column,
|
|
257
|
+
save,
|
|
258
|
+
close
|
|
259
|
+
);
|
|
252
260
|
};
|
|
253
261
|
};
|
|
254
262
|
const RevoGrid = /* @__PURE__ */ createReactComponent("revo-grid", void 0, void 0, defineCustomElements);
|
|
@@ -208,12 +208,13 @@ var __publicField = (obj, key, value) => {
|
|
|
208
208
|
};
|
|
209
209
|
};
|
|
210
210
|
class EditorAdapter {
|
|
211
|
-
constructor(EditorComponent, column, save, close) {
|
|
211
|
+
constructor(EditorComponent, column, additionalData, save, close) {
|
|
212
212
|
__publicField(this, "element", null);
|
|
213
213
|
__publicField(this, "editCell");
|
|
214
214
|
__publicField(this, "renderedComponent", null);
|
|
215
215
|
this.EditorComponent = EditorComponent;
|
|
216
216
|
this.column = column;
|
|
217
|
+
this.additionalData = additionalData;
|
|
217
218
|
this.save = save;
|
|
218
219
|
this.close = close;
|
|
219
220
|
}
|
|
@@ -236,6 +237,7 @@ var __publicField = (obj, key, value) => {
|
|
|
236
237
|
{
|
|
237
238
|
...this.editCell,
|
|
238
239
|
column: this.column,
|
|
240
|
+
additionalData: this.additionalData,
|
|
239
241
|
save: this.save,
|
|
240
242
|
close: this.close
|
|
241
243
|
},
|
|
@@ -245,8 +247,14 @@ var __publicField = (obj, key, value) => {
|
|
|
245
247
|
}
|
|
246
248
|
}
|
|
247
249
|
const Editor = (EditorComponent) => {
|
|
248
|
-
return function(column, save, close) {
|
|
249
|
-
return new EditorAdapter(
|
|
250
|
+
return function(column, additionalData, save, close) {
|
|
251
|
+
return new EditorAdapter(
|
|
252
|
+
EditorComponent,
|
|
253
|
+
additionalData,
|
|
254
|
+
column,
|
|
255
|
+
save,
|
|
256
|
+
close
|
|
257
|
+
);
|
|
250
258
|
};
|
|
251
259
|
};
|
|
252
260
|
const RevoGrid = /* @__PURE__ */ createReactComponent("revo-grid", void 0, void 0, _coreLoader.defineCustomElements);
|
|
@@ -242,7 +242,7 @@ const RevoEdit = /*@__PURE__*/ proxyCustomElement(class RevoEdit extends HTMLEle
|
|
|
242
242
|
if (this.editor) {
|
|
243
243
|
// if editor is constructible
|
|
244
244
|
if (isEditorCtrConstructible(this.editor)) {
|
|
245
|
-
this.currentEditor = new this.editor(this.column,
|
|
245
|
+
this.currentEditor = new this.editor(this.column, this.additionalData,
|
|
246
246
|
// save callback
|
|
247
247
|
(e, preventFocus) => {
|
|
248
248
|
this.onSave(e, preventFocus);
|
|
@@ -255,7 +255,7 @@ const RevoEdit = /*@__PURE__*/ proxyCustomElement(class RevoEdit extends HTMLEle
|
|
|
255
255
|
// if editor is function
|
|
256
256
|
}
|
|
257
257
|
else {
|
|
258
|
-
this.currentEditor = this.editor(this.column,
|
|
258
|
+
this.currentEditor = this.editor(this.column, this.additionalData,
|
|
259
259
|
// save callback
|
|
260
260
|
(e, preventFocus) => {
|
|
261
261
|
this.onSave(e, preventFocus);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"revogr-edit2.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/utils/key.utils.ts","src/components/editors/text-editor.ts","src/components/editors/edit.utils.ts","src/components/editors/revogr-edit-style.scss?tag=revogr-edit","src/components/editors/revogr-edit.tsx"],"sourcesContent":["import KeyCodesEnum, { codesLetter, keyValues } from './key.codes';\r\nimport OsPlatform from './platform';\r\n\r\nexport function isMetaKey(code: number): boolean {\r\n const keys: KeyCodesEnum[] = [\r\n KeyCodesEnum.ARROW_DOWN,\r\n KeyCodesEnum.ARROW_UP,\r\n KeyCodesEnum.ARROW_LEFT,\r\n KeyCodesEnum.ARROW_RIGHT,\r\n KeyCodesEnum.HOME,\r\n KeyCodesEnum.END,\r\n KeyCodesEnum.DELETE,\r\n KeyCodesEnum.BACKSPACE,\r\n KeyCodesEnum.F1,\r\n KeyCodesEnum.F2,\r\n KeyCodesEnum.F3,\r\n KeyCodesEnum.F4,\r\n KeyCodesEnum.F5,\r\n KeyCodesEnum.F6,\r\n KeyCodesEnum.F7,\r\n KeyCodesEnum.F8,\r\n KeyCodesEnum.F9,\r\n KeyCodesEnum.F10,\r\n KeyCodesEnum.F11,\r\n KeyCodesEnum.F12,\r\n KeyCodesEnum.TAB,\r\n KeyCodesEnum.PAGE_DOWN,\r\n KeyCodesEnum.PAGE_UP,\r\n KeyCodesEnum.ENTER,\r\n KeyCodesEnum.ESCAPE,\r\n KeyCodesEnum.SHIFT,\r\n KeyCodesEnum.CAPS_LOCK,\r\n KeyCodesEnum.ALT,\r\n ];\r\n\r\n return keys.indexOf(code) !== -1;\r\n}\r\n\r\n// navigator.platform\r\nexport function isCtrlKey(code: number, platform: string): boolean {\r\n if (platform.includes(OsPlatform.mac)) {\r\n return [\r\n KeyCodesEnum.COMMAND_LEFT,\r\n KeyCodesEnum.COMMAND_RIGHT,\r\n KeyCodesEnum.COMMAND_FIREFOX,\r\n ].includes(code);\r\n }\r\n\r\n return code === KeyCodesEnum.CONTROL;\r\n}\r\n\r\nexport function isCtrlMetaKey(code: KeyCodesEnum): boolean {\r\n return [\r\n KeyCodesEnum.CONTROL,\r\n KeyCodesEnum.COMMAND_LEFT,\r\n KeyCodesEnum.COMMAND_RIGHT,\r\n KeyCodesEnum.COMMAND_FIREFOX,\r\n ].includes(code);\r\n}\r\n\r\nexport function isClear(code: string): boolean {\r\n return codesLetter.BACKSPACE === code || codesLetter.DELETE === code;\r\n}\r\n\r\nexport function isTab(code: string): boolean {\r\n return codesLetter.TAB === code;\r\n}\r\nexport function isTabKeyValue(key: string): boolean {\r\n return keyValues.TAB === key;\r\n}\r\n\r\nexport function isEnterKeyValue(key: string): boolean {\r\n return keyValues.ENTER === key;\r\n}\r\n\r\nexport function isCut(event: KeyboardEvent): boolean {\r\n return (\r\n (event.ctrlKey && event.code === 'KeyX') || // Ctrl + X on Windows\r\n (event.metaKey && event.code === 'KeyX')\r\n ); // Cmd + X on Mac\r\n}\r\nexport function isCopy(event: KeyboardEvent): boolean {\r\n return (\r\n (event.ctrlKey && event.code === 'KeyC') || // Ctrl + C on Windows\r\n (event.metaKey && event.code === 'KeyC')\r\n ); // Cmd + C on Mac\r\n}\r\nexport function isPaste(event: KeyboardEvent): boolean {\r\n return (\r\n (event.ctrlKey && event.code === 'KeyV') || // Ctrl + V on Windows\r\n (event.metaKey && event.code === 'KeyV')\r\n ); // Cmd + V on Mac\r\n}\r\nexport function isAll(event: KeyboardEvent): boolean {\r\n return (\r\n (event.ctrlKey && event.code === 'KeyA') || // Ctrl + A on Windows\r\n (event.metaKey && event.code === 'KeyA')\r\n ); // Cmd + A on Mac\r\n}\r\nexport function isBack(event: KeyboardEvent): boolean {\r\n return (\r\n (event.ctrlKey && event.code === 'KeyZ') || // Ctrl + X on Windows\r\n (event.metaKey && event.code === 'KeyZ')\r\n ); // Cmd + X on Mac\r\n}\r\n","import { type VNode, h as createElement } from '@stencil/core';\r\nimport { isEnterKeyValue, isTab } from '../../utils/key.utils';\r\nimport { timeout } from '../../utils';\r\nimport type { EditCell, EditorBase, ColumnDataSchemaModel } from '@type';\r\n\r\n/**\r\n * Represents a cell editor in a grid.\r\n *\r\n * It's a good place to start with your own editor.\r\n * It manages the editing of cells by handling events, saving data, rendering the editor UI, and managing the lifecycle of the editor instance.\r\n */\r\n\r\n/**\r\n * Callback triggered on cell editor save\r\n * Closes editor when called\r\n * @param preventFocus - if true editor will not be closed and next cell will not be focused\r\n */\r\nexport type SaveCallback = (value: any, preventFocus: boolean) => void;\r\n\r\nexport class TextEditor implements EditorBase {\r\n editInput: HTMLInputElement | null = null;\r\n\r\n element: Element | null = null;\r\n editCell?: EditCell = undefined;\r\n\r\n constructor(\r\n public data: ColumnDataSchemaModel,\r\n private saveCallback?: SaveCallback,\r\n ) {}\r\n\r\n /**\r\n * Callback triggered on cell editor render\r\n */\r\n async componentDidRender(): Promise<void> {\r\n if (this.editInput) {\r\n await timeout();\r\n this.editInput?.focus();\r\n }\r\n }\r\n\r\n onKeyDown(e: KeyboardEvent) {\r\n const isEnter = isEnterKeyValue(e.key);\r\n const isKeyTab = isTab(e.key);\r\n\r\n if (\r\n (isKeyTab || isEnter) &&\r\n e.target &&\r\n this.saveCallback &&\r\n !e.isComposing\r\n ) {\r\n // blur is needed to avoid autoscroll\r\n this.beforeDisconnect();\r\n // request callback which will close cell after all\r\n this.saveCallback(this.getValue(), isKeyTab);\r\n }\r\n }\r\n\r\n /**\r\n * IMPORTANT: Prevent scroll glitches when editor is closed and focus is on current input element.\r\n */\r\n beforeDisconnect() {\r\n this.editInput?.blur();\r\n }\r\n\r\n /**\r\n * Get value from input\r\n */\r\n getValue() {\r\n return this.editInput?.value;\r\n }\r\n\r\n /**\r\n * Render method for Editor plugin.\r\n * Renders input element with passed data from cell.\r\n * @param {Function} h - h function from stencil render.\r\n * @param {Object} _additionalData - additional data from plugin.\r\n * @returns {VNode} - input element.\r\n */\r\n render(h: typeof createElement, _additionalData: any): VNode | VNode[] {\r\n return h('input', {\r\n type: 'text',\r\n enterKeyHint: 'enter',\r\n // set input value from cell data\r\n value: this.editCell?.val ?? '',\r\n // save input element as ref for further usage\r\n ref: (el: HTMLInputElement | null) => {\r\n this.editInput = el;\r\n },\r\n // listen to keydown event on input element\r\n onKeyDown: (e: KeyboardEvent) => this.onKeyDown(e),\r\n });\r\n }\r\n}\r\n","import { EDIT_INPUT_WR } from '../../utils/consts';\r\nimport {\r\n EditorCtrConstructible,\r\n} from '@type';\r\n// is edit input\r\nexport function isEditInput(el?: HTMLElement) {\r\n return !!el?.closest(`.${EDIT_INPUT_WR}`);\r\n}\r\n\r\n\r\n// Type guard for EditorCtrConstructible\r\nexport function isEditorCtrConstructible(\r\n editor: any,\r\n): editor is EditorCtrConstructible {\r\n return typeof editor === 'function' && typeof editor.prototype === 'object';\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"],"version":3}
|
|
1
|
+
{"file":"revogr-edit2.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/utils/key.utils.ts","src/components/editors/text-editor.ts","src/components/editors/edit.utils.ts","src/components/editors/revogr-edit-style.scss?tag=revogr-edit","src/components/editors/revogr-edit.tsx"],"sourcesContent":["import KeyCodesEnum, { codesLetter, keyValues } from './key.codes';\r\nimport OsPlatform from './platform';\r\n\r\nexport function isMetaKey(code: number): boolean {\r\n const keys: KeyCodesEnum[] = [\r\n KeyCodesEnum.ARROW_DOWN,\r\n KeyCodesEnum.ARROW_UP,\r\n KeyCodesEnum.ARROW_LEFT,\r\n KeyCodesEnum.ARROW_RIGHT,\r\n KeyCodesEnum.HOME,\r\n KeyCodesEnum.END,\r\n KeyCodesEnum.DELETE,\r\n KeyCodesEnum.BACKSPACE,\r\n KeyCodesEnum.F1,\r\n KeyCodesEnum.F2,\r\n KeyCodesEnum.F3,\r\n KeyCodesEnum.F4,\r\n KeyCodesEnum.F5,\r\n KeyCodesEnum.F6,\r\n KeyCodesEnum.F7,\r\n KeyCodesEnum.F8,\r\n KeyCodesEnum.F9,\r\n KeyCodesEnum.F10,\r\n KeyCodesEnum.F11,\r\n KeyCodesEnum.F12,\r\n KeyCodesEnum.TAB,\r\n KeyCodesEnum.PAGE_DOWN,\r\n KeyCodesEnum.PAGE_UP,\r\n KeyCodesEnum.ENTER,\r\n KeyCodesEnum.ESCAPE,\r\n KeyCodesEnum.SHIFT,\r\n KeyCodesEnum.CAPS_LOCK,\r\n KeyCodesEnum.ALT,\r\n ];\r\n\r\n return keys.indexOf(code) !== -1;\r\n}\r\n\r\n// navigator.platform\r\nexport function isCtrlKey(code: number, platform: string): boolean {\r\n if (platform.includes(OsPlatform.mac)) {\r\n return [\r\n KeyCodesEnum.COMMAND_LEFT,\r\n KeyCodesEnum.COMMAND_RIGHT,\r\n KeyCodesEnum.COMMAND_FIREFOX,\r\n ].includes(code);\r\n }\r\n\r\n return code === KeyCodesEnum.CONTROL;\r\n}\r\n\r\nexport function isCtrlMetaKey(code: KeyCodesEnum): boolean {\r\n return [\r\n KeyCodesEnum.CONTROL,\r\n KeyCodesEnum.COMMAND_LEFT,\r\n KeyCodesEnum.COMMAND_RIGHT,\r\n KeyCodesEnum.COMMAND_FIREFOX,\r\n ].includes(code);\r\n}\r\n\r\nexport function isClear(code: string): boolean {\r\n return codesLetter.BACKSPACE === code || codesLetter.DELETE === code;\r\n}\r\n\r\nexport function isTab(code: string): boolean {\r\n return codesLetter.TAB === code;\r\n}\r\nexport function isTabKeyValue(key: string): boolean {\r\n return keyValues.TAB === key;\r\n}\r\n\r\nexport function isEnterKeyValue(key: string): boolean {\r\n return keyValues.ENTER === key;\r\n}\r\n\r\nexport function isCut(event: KeyboardEvent): boolean {\r\n return (\r\n (event.ctrlKey && event.code === 'KeyX') || // Ctrl + X on Windows\r\n (event.metaKey && event.code === 'KeyX')\r\n ); // Cmd + X on Mac\r\n}\r\nexport function isCopy(event: KeyboardEvent): boolean {\r\n return (\r\n (event.ctrlKey && event.code === 'KeyC') || // Ctrl + C on Windows\r\n (event.metaKey && event.code === 'KeyC')\r\n ); // Cmd + C on Mac\r\n}\r\nexport function isPaste(event: KeyboardEvent): boolean {\r\n return (\r\n (event.ctrlKey && event.code === 'KeyV') || // Ctrl + V on Windows\r\n (event.metaKey && event.code === 'KeyV')\r\n ); // Cmd + V on Mac\r\n}\r\nexport function isAll(event: KeyboardEvent): boolean {\r\n return (\r\n (event.ctrlKey && event.code === 'KeyA') || // Ctrl + A on Windows\r\n (event.metaKey && event.code === 'KeyA')\r\n ); // Cmd + A on Mac\r\n}\r\nexport function isBack(event: KeyboardEvent): boolean {\r\n return (\r\n (event.ctrlKey && event.code === 'KeyZ') || // Ctrl + X on Windows\r\n (event.metaKey && event.code === 'KeyZ')\r\n ); // Cmd + X on Mac\r\n}\r\n","import { type VNode, h as createElement } from '@stencil/core';\r\nimport { isEnterKeyValue, isTab } from '../../utils/key.utils';\r\nimport { timeout } from '../../utils';\r\nimport type { EditCell, EditorBase, ColumnDataSchemaModel } from '@type';\r\n\r\n/**\r\n * Represents a cell editor in a grid.\r\n *\r\n * It's a good place to start with your own editor.\r\n * It manages the editing of cells by handling events, saving data, rendering the editor UI, and managing the lifecycle of the editor instance.\r\n */\r\n\r\n/**\r\n * Callback triggered on cell editor save\r\n * Closes editor when called\r\n * @param preventFocus - if true editor will not be closed and next cell will not be focused\r\n */\r\nexport type SaveCallback = (value: any, preventFocus: boolean) => void;\r\n\r\nexport class TextEditor implements EditorBase {\r\n editInput: HTMLInputElement | null = null;\r\n\r\n element: Element | null = null;\r\n editCell?: EditCell = undefined;\r\n\r\n constructor(\r\n public data: ColumnDataSchemaModel,\r\n private saveCallback?: SaveCallback,\r\n ) {}\r\n\r\n /**\r\n * Callback triggered on cell editor render\r\n */\r\n async componentDidRender(): Promise<void> {\r\n if (this.editInput) {\r\n await timeout();\r\n this.editInput?.focus();\r\n }\r\n }\r\n\r\n onKeyDown(e: KeyboardEvent) {\r\n const isEnter = isEnterKeyValue(e.key);\r\n const isKeyTab = isTab(e.key);\r\n\r\n if (\r\n (isKeyTab || isEnter) &&\r\n e.target &&\r\n this.saveCallback &&\r\n !e.isComposing\r\n ) {\r\n // blur is needed to avoid autoscroll\r\n this.beforeDisconnect();\r\n // request callback which will close cell after all\r\n this.saveCallback(this.getValue(), isKeyTab);\r\n }\r\n }\r\n\r\n /**\r\n * IMPORTANT: Prevent scroll glitches when editor is closed and focus is on current input element.\r\n */\r\n beforeDisconnect() {\r\n this.editInput?.blur();\r\n }\r\n\r\n /**\r\n * Get value from input\r\n */\r\n getValue() {\r\n return this.editInput?.value;\r\n }\r\n\r\n /**\r\n * Render method for Editor plugin.\r\n * Renders input element with passed data from cell.\r\n * @param {Function} h - h function from stencil render.\r\n * @param {Object} _additionalData - additional data from plugin.\r\n * @returns {VNode} - input element.\r\n */\r\n render(h: typeof createElement, _additionalData: any): VNode | VNode[] {\r\n return h('input', {\r\n type: 'text',\r\n enterKeyHint: 'enter',\r\n // set input value from cell data\r\n value: this.editCell?.val ?? '',\r\n // save input element as ref for further usage\r\n ref: (el: HTMLInputElement | null) => {\r\n this.editInput = el;\r\n },\r\n // listen to keydown event on input element\r\n onKeyDown: (e: KeyboardEvent) => this.onKeyDown(e),\r\n });\r\n }\r\n}\r\n","import { EDIT_INPUT_WR } from '../../utils/consts';\r\nimport {\r\n EditorCtrConstructible,\r\n} from '@type';\r\n// is edit input\r\nexport function isEditInput(el?: HTMLElement) {\r\n return !!el?.closest(`.${EDIT_INPUT_WR}`);\r\n}\r\n\r\n\r\n// Type guard for EditorCtrConstructible\r\nexport function isEditorCtrConstructible(\r\n editor: any,\r\n): editor is EditorCtrConstructible {\r\n return typeof editor === 'function' && typeof editor.prototype === 'object';\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"],"version":3}
|