[fix] actions menu freezing ui (#2187)
This PR fixes a bug where a render to the popover component would cause the menu to never close. ### Change Type - [x] `patch` — Bug fix ### Test Plan 1. Open the quick actions menu with two shapes selected 2. Click the group button 3. Click on the canvas The menu should close. ### Release Notes - Fix actions menu not closing when clicking the canvas after grouping items via the actions menu.
This commit is contained in:
parent
9b2b1411aa
commit
185a0ae658
3 changed files with 11 additions and 7 deletions
|
@ -41,6 +41,10 @@ export function useCanvasEvents() {
|
||||||
})
|
})
|
||||||
|
|
||||||
if (editor.openMenus.length > 0) {
|
if (editor.openMenus.length > 0) {
|
||||||
|
editor.updateInstanceState({
|
||||||
|
openMenus: [],
|
||||||
|
})
|
||||||
|
|
||||||
document.body.click()
|
document.body.click()
|
||||||
editor.getContainer().focus()
|
editor.getContainer().focus()
|
||||||
}
|
}
|
||||||
|
|
|
@ -175,7 +175,7 @@ export const useAllowUngroup = () => {
|
||||||
return useValue(
|
return useValue(
|
||||||
'allowUngroup',
|
'allowUngroup',
|
||||||
() => editor.selectedShapeIds.some((id) => editor.getShape(id)?.type === 'group'),
|
() => editor.selectedShapeIds.some((id) => editor.getShape(id)?.type === 'group'),
|
||||||
[]
|
[editor]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Editor, track, useEditor } from '@tldraw/editor'
|
import { Editor, useEditor, useValue } from '@tldraw/editor'
|
||||||
import React, { useMemo } from 'react'
|
import React, { useMemo } from 'react'
|
||||||
import {
|
import {
|
||||||
TLUiMenuSchema,
|
TLUiMenuSchema,
|
||||||
|
@ -33,14 +33,14 @@ export type ActionsMenuSchemaProviderProps = {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @internal */
|
/** @internal */
|
||||||
export const ActionsMenuSchemaProvider = track(function ActionsMenuSchemaProvider({
|
export const ActionsMenuSchemaProvider = ({
|
||||||
overrides,
|
overrides,
|
||||||
children,
|
children,
|
||||||
}: ActionsMenuSchemaProviderProps) {
|
}: ActionsMenuSchemaProviderProps) => {
|
||||||
const editor = useEditor()
|
const editor = useEditor()
|
||||||
const actions = useActions()
|
const actions = useActions()
|
||||||
|
|
||||||
const selectedCount = editor.selectedShapeIds.length
|
const selectedCount = useValue('selected count', () => editor.selectedShapeIds.length, [editor])
|
||||||
|
|
||||||
const oneSelected = selectedCount > 0
|
const oneSelected = selectedCount > 0
|
||||||
const twoSelected = selectedCount > 1
|
const twoSelected = selectedCount > 1
|
||||||
|
@ -50,7 +50,7 @@ export const ActionsMenuSchemaProvider = track(function ActionsMenuSchemaProvide
|
||||||
const allowUngroup = useAllowUngroup()
|
const allowUngroup = useAllowUngroup()
|
||||||
const showEditLink = useHasLinkShapeSelected()
|
const showEditLink = useHasLinkShapeSelected()
|
||||||
const breakpoint = useBreakpoint()
|
const breakpoint = useBreakpoint()
|
||||||
const isZoomedTo100 = editor.zoomLevel === 1
|
const isZoomedTo100 = useValue('zoom is 1', () => editor.zoomLevel === 1, [editor])
|
||||||
|
|
||||||
const actionTLUiMenuSchema = useMemo<TLUiMenuSchema>(() => {
|
const actionTLUiMenuSchema = useMemo<TLUiMenuSchema>(() => {
|
||||||
const results = [
|
const results = [
|
||||||
|
@ -107,7 +107,7 @@ export const ActionsMenuSchemaProvider = track(function ActionsMenuSchemaProvide
|
||||||
{children}
|
{children}
|
||||||
</ActionsMenuSchemaContext.Provider>
|
</ActionsMenuSchemaContext.Provider>
|
||||||
)
|
)
|
||||||
})
|
}
|
||||||
|
|
||||||
/** @public */
|
/** @public */
|
||||||
export function useActionsMenuSchema(): TLUiMenuSchema {
|
export function useActionsMenuSchema(): TLUiMenuSchema {
|
||||||
|
|
Loading…
Reference in a new issue