After a sketch keep the extrude button active (#2961)
* After a sketch keep the extrude button active * add test * Compare to 0,0 not any x,x or y,y --------- Co-authored-by: Kurt Hutten Irev-Dev <k.hutten@protonmail.ch>
This commit is contained in:
@ -4563,6 +4563,53 @@ test.describe('Sketch tests', () => {
|
|||||||
await doSnapAtDifferentScales(page, [0, 10000, 10000])
|
await doSnapAtDifferentScales(page, [0, 10000, 10000])
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
test('exiting a close extrude, has the extrude button enabled ready to go', async ({
|
||||||
|
page,
|
||||||
|
}) => {
|
||||||
|
// this was a regression https://github.com/KittyCAD/modeling-app/issues/2832
|
||||||
|
await page.addInitScript(async () => {
|
||||||
|
localStorage.setItem(
|
||||||
|
'persistCode',
|
||||||
|
`const sketch001 = startSketchOn('XZ')
|
||||||
|
|> startProfileAt([-0.45, 0.87], %)
|
||||||
|
|> line([1.32, 0.38], %)
|
||||||
|
|> line([1.02, -1.32], %, $seg01)
|
||||||
|
|> line([-1.01, -0.77], %)
|
||||||
|
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
||||||
|
|> close(%)
|
||||||
|
`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
const u = await getUtils(page)
|
||||||
|
await page.setViewportSize({ width: 1200, height: 500 })
|
||||||
|
|
||||||
|
await u.waitForAuthSkipAppStart()
|
||||||
|
|
||||||
|
// click "line([1.32, 0.38], %)"
|
||||||
|
await page.getByText(`line([1.32, 0.38], %)`).click()
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
// click edit sketch
|
||||||
|
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
||||||
|
await page.waitForTimeout(600) // wait for animation
|
||||||
|
|
||||||
|
// exit sketch
|
||||||
|
await page.getByRole('button', { name: 'Exit Sketch' }).click()
|
||||||
|
|
||||||
|
// expect extrude button to be enabled
|
||||||
|
await expect(
|
||||||
|
page.getByRole('button', { name: 'Extrude' })
|
||||||
|
).not.toBeDisabled()
|
||||||
|
|
||||||
|
// click extrude
|
||||||
|
await page.getByRole('button', { name: 'Extrude' }).click()
|
||||||
|
|
||||||
|
// sketch selection should already have been made. "Selection 1 face" only show up when the selection has been made already
|
||||||
|
// otherwise the cmdbar would be waiting for a selection.
|
||||||
|
await expect(
|
||||||
|
page.getByRole('button', { name: 'Selection 1 face' })
|
||||||
|
).toBeVisible()
|
||||||
|
})
|
||||||
test("Existing sketch with bad code delete user's code", async ({ page }) => {
|
test("Existing sketch with bad code delete user's code", async ({ page }) => {
|
||||||
// this was a regression https://github.com/KittyCAD/modeling-app/issues/2832
|
// this was a regression https://github.com/KittyCAD/modeling-app/issues/2832
|
||||||
await page.addInitScript(async () => {
|
await page.addInitScript(async () => {
|
||||||
|
@ -35,6 +35,7 @@ import {
|
|||||||
canExtrudeSelection,
|
canExtrudeSelection,
|
||||||
handleSelectionBatch,
|
handleSelectionBatch,
|
||||||
isSelectionLastLine,
|
isSelectionLastLine,
|
||||||
|
isRangeInbetweenCharacters,
|
||||||
isSketchPipe,
|
isSketchPipe,
|
||||||
updateSelections,
|
updateSelections,
|
||||||
} from 'lib/selections'
|
} from 'lib/selections'
|
||||||
@ -425,6 +426,7 @@ export const ModelingMachineProvider = ({
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
selectionRanges.codeBasedSelections.length === 0 ||
|
selectionRanges.codeBasedSelections.length === 0 ||
|
||||||
|
isRangeInbetweenCharacters(selectionRanges) ||
|
||||||
isSelectionLastLine(selectionRanges, codeManager.code)
|
isSelectionLastLine(selectionRanges, codeManager.code)
|
||||||
) {
|
) {
|
||||||
// they have no selection, we should enable the button
|
// they have no selection, we should enable the button
|
||||||
|
@ -360,6 +360,14 @@ export function isSelectionLastLine(
|
|||||||
return selectionRanges.codeBasedSelections[i].range[1] === code.length
|
return selectionRanges.codeBasedSelections[i].range[1] === code.length
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isRangeInbetweenCharacters(selectionRanges: Selections) {
|
||||||
|
return (
|
||||||
|
selectionRanges.codeBasedSelections.length === 1 &&
|
||||||
|
selectionRanges.codeBasedSelections[0].range[0] === 0 &&
|
||||||
|
selectionRanges.codeBasedSelections[0].range[1] === 0
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
export type CommonASTNode = {
|
export type CommonASTNode = {
|
||||||
selection: Selection
|
selection: Selection
|
||||||
ast: Program
|
ast: Program
|
||||||
|
Reference in New Issue
Block a user