Select pasted content after pasting
This commit is contained in:
parent
2a7d4828cb
commit
2fb95c3951
|
@ -25,7 +25,7 @@
|
||||||
setIn,
|
setIn,
|
||||||
updateIn
|
updateIn
|
||||||
} from './utils/immutabilityHelpers.js'
|
} from './utils/immutabilityHelpers.js'
|
||||||
import { compileJSONPointer } from './utils/jsonPointer.js'
|
import { compileJSONPointer, parseJSONPointer } from './utils/jsonPointer.js'
|
||||||
import { keyComboFromEvent } from './utils/keyBindings.js'
|
import { keyComboFromEvent } from './utils/keyBindings.js'
|
||||||
import { flattenSearch, search } from './utils/search.js'
|
import { flattenSearch, search } from './utils/search.js'
|
||||||
import { immutableJSONPatch } from './utils/immutableJSONPatch'
|
import { immutableJSONPatch } from './utils/immutableJSONPatch'
|
||||||
|
@ -140,33 +140,38 @@
|
||||||
if (selection && clipboard) {
|
if (selection && clipboard) {
|
||||||
console.log('paste', { clipboard, selection })
|
console.log('paste', { clipboard, selection })
|
||||||
|
|
||||||
|
function selectAddOperations (operations) {
|
||||||
|
handleSelect({
|
||||||
|
paths: operations
|
||||||
|
.filter(operation => operation.op === 'add')
|
||||||
|
.map(operation => parseJSONPointer(operation.path))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
if (selection.beforePath) {
|
if (selection.beforePath) {
|
||||||
const parentPath = initial(selection.beforePath)
|
const parentPath = initial(selection.beforePath)
|
||||||
const beforeKey = last(selection.beforePath)
|
const beforeKey = last(selection.beforePath)
|
||||||
const props = getIn(state, parentPath.concat(STATE_PROPS))
|
const props = getIn(state, parentPath.concat(STATE_PROPS))
|
||||||
const nextKeys = getNextKeys(props, parentPath, beforeKey, true)
|
const nextKeys = getNextKeys(props, parentPath, beforeKey, true)
|
||||||
const operations = insertBefore(doc, selection.beforePath, clipboard, nextKeys)
|
const operations = insertBefore(doc, selection.beforePath, clipboard, nextKeys)
|
||||||
console.log('patch', operations)
|
|
||||||
handlePatch(operations)
|
|
||||||
|
|
||||||
// FIXME: must adjust STATE_PROPS of the object where we inserted the clipboard
|
handlePatch(operations)
|
||||||
|
selectAddOperations(operations)
|
||||||
} else if (selection.appendPath) {
|
} else if (selection.appendPath) {
|
||||||
const operations = append(doc, selection.appendPath, clipboard)
|
const operations = append(doc, selection.appendPath, clipboard)
|
||||||
console.log('patch', operations)
|
|
||||||
handlePatch(operations)
|
|
||||||
|
|
||||||
// FIXME: must adjust STATE_PROPS of the object where we inserted the clipboard
|
handlePatch(operations)
|
||||||
|
selectAddOperations(operations)
|
||||||
} else if (selection.paths) {
|
} else if (selection.paths) {
|
||||||
const lastPath = last(selection.paths) // FIXME: here we assume selection.paths is sorted correctly
|
const lastPath = last(selection.paths) // FIXME: here we assume selection.paths is sorted correctly, that's a dangerous assumption
|
||||||
const parentPath = initial(lastPath)
|
const parentPath = initial(lastPath)
|
||||||
const beforeKey = last(lastPath)
|
const beforeKey = last(lastPath)
|
||||||
const props = getIn(state, parentPath.concat(STATE_PROPS))
|
const props = getIn(state, parentPath.concat(STATE_PROPS))
|
||||||
const nextKeys = getNextKeys(props, parentPath, beforeKey, true)
|
const nextKeys = getNextKeys(props, parentPath, beforeKey, true)
|
||||||
const operations = replace(doc, selection.paths, clipboard, nextKeys)
|
const operations = replace(doc, selection.paths, clipboard, nextKeys)
|
||||||
console.log('patch', operations)
|
|
||||||
handlePatch(operations)
|
|
||||||
|
|
||||||
// FIXME: must adjust STATE_PROPS of the object where we inserted the clipboard
|
handlePatch(operations)
|
||||||
|
selectAddOperations(operations)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -174,6 +179,7 @@
|
||||||
// TODO: cleanup
|
// TODO: cleanup
|
||||||
$: console.log('doc', doc)
|
$: console.log('doc', doc)
|
||||||
$: console.log('state', state)
|
$: console.log('state', state)
|
||||||
|
$: console.log('selection', selection)
|
||||||
|
|
||||||
function handleUndo() {
|
function handleUndo() {
|
||||||
if (history.getState().canUndo) {
|
if (history.getState().canUndo) {
|
||||||
|
@ -278,9 +284,11 @@
|
||||||
function handlePatch(operations) {
|
function handlePatch(operations) {
|
||||||
// console.log('handlePatch', operations)
|
// console.log('handlePatch', operations)
|
||||||
|
|
||||||
patch(operations)
|
const patchResult = patch(operations)
|
||||||
|
|
||||||
emitOnChange()
|
emitOnChange()
|
||||||
|
|
||||||
|
return patchResult
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleUpdateKey (oldKey, newKey) {
|
function handleUpdateKey (oldKey, newKey) {
|
||||||
|
@ -320,10 +328,22 @@
|
||||||
* @param {Selection} newSelection
|
* @param {Selection} newSelection
|
||||||
*/
|
*/
|
||||||
function handleSelect (newSelection) {
|
function handleSelect (newSelection) {
|
||||||
if (newSelection) {
|
// TODO: refactor handleSelect: should be redundant except for the functionality to expand the selection and generate pathsMap
|
||||||
const { anchorPath, focusPath, beforePath, appendPath } = newSelection
|
|
||||||
|
|
||||||
if (beforePath) {
|
if (newSelection) {
|
||||||
|
const { paths, anchorPath, focusPath, beforePath, appendPath } = newSelection
|
||||||
|
|
||||||
|
if (paths) {
|
||||||
|
const pathsMap = {}
|
||||||
|
paths.forEach(path => {
|
||||||
|
pathsMap[compileJSONPointer(path)] = true
|
||||||
|
})
|
||||||
|
|
||||||
|
selection = {
|
||||||
|
paths,
|
||||||
|
pathsMap
|
||||||
|
}
|
||||||
|
} else if (beforePath) {
|
||||||
selection = {
|
selection = {
|
||||||
beforePath
|
beforePath
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue