Move expandPath to stateUtils.js
This commit is contained in:
parent
da2f912d6d
commit
2961e0d910
|
@ -1,13 +1,13 @@
|
|||
<script>
|
||||
import { tick } from 'svelte'
|
||||
import {
|
||||
append, duplicate,
|
||||
append,
|
||||
duplicate,
|
||||
insertBefore,
|
||||
removeAll,
|
||||
replace
|
||||
} from './operations.js'
|
||||
import {
|
||||
DEFAULT_LIMIT,
|
||||
STATE_EXPANDED,
|
||||
STATE_LIMIT,
|
||||
SCROLL_DURATION,
|
||||
|
@ -25,7 +25,6 @@
|
|||
} from './selection.js'
|
||||
import { isContentEditableDiv } from './utils/domUtils.js'
|
||||
import {
|
||||
existsIn,
|
||||
getIn,
|
||||
setIn,
|
||||
updateIn
|
||||
|
@ -34,9 +33,9 @@
|
|||
import { keyComboFromEvent } from './utils/keyBindings.js'
|
||||
import { search, searchNext, searchPrevious } from './utils/search.js'
|
||||
import { immutableJSONPatch } from './utils/immutableJSONPatch'
|
||||
import { isNumber, initial, last, cloneDeep } from 'lodash-es'
|
||||
import { initial, last, cloneDeep } from 'lodash-es'
|
||||
import jump from './assets/jump.js/src/jump.js'
|
||||
import { stateUtils } from './utils/stateUtils.js'
|
||||
import { expandPath, stateUtils } from './utils/stateUtils.js'
|
||||
import { getNextKeys, patchProps } from './utils/updateProps.js'
|
||||
|
||||
let divContents
|
||||
|
@ -268,7 +267,7 @@
|
|||
|
||||
async function focusActiveSearchResult (activeItem) {
|
||||
if (activeItem) {
|
||||
expandPath(activeItem.path)
|
||||
state = expandPath(state, activeItem.path)
|
||||
|
||||
await tick()
|
||||
|
||||
|
@ -374,27 +373,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Expand all nodes on given path
|
||||
* @param {Path} path
|
||||
*/
|
||||
function expandPath (path) {
|
||||
for (let i = 1; i < path.length; i++) {
|
||||
const partialPath = path.slice(0, i)
|
||||
state = setIn(state, partialPath.concat(STATE_EXPANDED), true)
|
||||
|
||||
// if needed, enlarge the limit such that the search result becomes visible
|
||||
const key = path[i]
|
||||
if (isNumber(key)) {
|
||||
const limit = getIn(state, partialPath.concat(STATE_LIMIT)) || DEFAULT_LIMIT
|
||||
if (key > limit) {
|
||||
const newLimit = Math.ceil(key / DEFAULT_LIMIT) * DEFAULT_LIMIT
|
||||
state = setIn(state, partialPath.concat(STATE_LIMIT), newLimit)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function handleKeyDown (event) {
|
||||
const combo = keyComboFromEvent(event)
|
||||
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
import { isNumber } from 'lodash-es'
|
||||
import {
|
||||
DEFAULT_LIMIT,
|
||||
STATE_EXPANDED,
|
||||
STATE_LIMIT,
|
||||
STATE_PROPS
|
||||
} from '../constants.js'
|
||||
import { setIn } from './immutabilityHelpers.js'
|
||||
import { isObject, isObjectOrArray } from './typeUtils.js'
|
||||
import { updateProps } from './updateProps.js'
|
||||
|
||||
|
@ -71,3 +73,32 @@ export function stateUtils (doc, state = undefined, path, expand, forceRefresh =
|
|||
// primitive values have no state
|
||||
return undefined
|
||||
}
|
||||
|
||||
/**
|
||||
* Expand all nodes on given path
|
||||
* @param {JSON} state
|
||||
* @param {Path} path
|
||||
* @return {JSON} returns the updated state
|
||||
*/
|
||||
// TODO: write unit tests for expandPath
|
||||
export function expandPath (state, path) {
|
||||
let updatedState = state
|
||||
|
||||
for (let i = 1; i < path.length; i++) {
|
||||
const partialPath = path.slice(0, i)
|
||||
// FIXME: setIn has to create object first
|
||||
updatedState = setIn(updatedState, partialPath.concat(STATE_EXPANDED), true)
|
||||
|
||||
// if needed, enlarge the limit such that the search result becomes visible
|
||||
const key = path[i]
|
||||
if (isNumber(key)) {
|
||||
const limit = getIn(updatedState, partialPath.concat(STATE_LIMIT)) || DEFAULT_LIMIT
|
||||
if (key > limit) {
|
||||
const newLimit = Math.ceil(key / DEFAULT_LIMIT) * DEFAULT_LIMIT
|
||||
updatedState = setIn(updatedState, partialPath.concat(STATE_LIMIT), newLimit)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return updatedState
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue