[bug] Fix edit parameter flow and test (#5997)
* Fix callstack blowup in edit flow * Avoid dumb timeout issue with command registration in test * A snapshot a day keeps the bugs away! 📷🐛 * Use a safer way to wait for modeling command registration in test * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * De-flake create parameter test step --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
@ -513,7 +513,8 @@ c = 3 + a`
|
||||
await homePage.openProject(projectName)
|
||||
// TODO: you probably shouldn't need an engine connection to add a parameter,
|
||||
// but you do because all modeling commands have that requirement
|
||||
await scene.settled(cmdBar)
|
||||
// Don't use scene.settled here
|
||||
await expect(scene.startEditSketchBtn).toBeEnabled({ timeout: 15_000 })
|
||||
|
||||
await test.step(`Create a parameter via command bar`, async () => {
|
||||
await cmdBar.cmdBarOpenBtn.click()
|
||||
@ -542,7 +543,12 @@ c = 3 + a`
|
||||
)
|
||||
|
||||
const newValue = `2 * b + a`
|
||||
|
||||
await test.step(`Edit the parameter via command bar`, async () => {
|
||||
// TODO: make the command palette command registration more static, and the enabled state more dynamic
|
||||
// so that we can just open the command palette and know all commands will be there.
|
||||
await expect(scene.startEditSketchBtn).toBeEnabled()
|
||||
|
||||
await cmdBar.cmdBarOpenBtn.click()
|
||||
await cmdBar.chooseCommand('edit parameter')
|
||||
await cmdBar.expectState({
|
||||
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 143 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
@ -29,5 +29,5 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"kcl_version": "0.2.53"
|
||||
"kcl_version": "0.2.54"
|
||||
}
|
@ -4,7 +4,7 @@ import { useKclContext } from 'lang/KclProvider'
|
||||
import { findUniqueName } from 'lang/modifyAst'
|
||||
import { PrevVariable, findAllPreviousVariables } from 'lang/queryAst'
|
||||
import { Expr, SourceRange } from 'lang/wasm'
|
||||
import { useEffect, useRef, useState } from 'react'
|
||||
import { useEffect, useMemo, useRef, useState } from 'react'
|
||||
import { getCalculatedKclExpressionValue } from './kclHelpers'
|
||||
import { parse, resultIsOk } from 'lang/wasm'
|
||||
import { err } from 'lib/trap'
|
||||
@ -44,8 +44,11 @@ export function useCalculateKclExpression({
|
||||
| (typeof context)['selectionRanges']['graphSelections'][number]['codeRef']['range']
|
||||
| undefined = context.selectionRanges.graphSelections[0]?.codeRef?.range
|
||||
// If there is no selection, use the end of the code
|
||||
const endingSourceRange = sourceRange ||
|
||||
selectionRange || [code.length, code.length]
|
||||
// If we don't memoize this, we risk an infinite set/read state loop
|
||||
const endingSourceRange = useMemo(
|
||||
() => sourceRange || selectionRange || [code.length, code.length],
|
||||
[code, selectionRange, sourceRange]
|
||||
)
|
||||
const inputRef = useRef<HTMLInputElement>(null)
|
||||
const [availableVarInfo, setAvailableVarInfo] = useState<
|
||||
ReturnType<typeof findAllPreviousVariables>
|
||||
|