Skip to content

Commit e25f20c

Browse files
committed
feat(useParent): new composable
1 parent 5eba736 commit e25f20c

File tree

11 files changed

+22
-28
lines changed

11 files changed

+22
-28
lines changed

docs/guide/components/menu.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ To open menu on hover use set `trigger` prop to `hover`.
2929
<!-- 👉 v-model support -->
3030
::::card v-model support
3131

32-
description
32+
`AMenu` also support `v-model` to show/hide menu.
3333

3434
:::code DemoMenuVModelSupport
3535
<<< @/components/demos/menu/DemoMenuVModelSupport.vue{11,17}

packages/anu-vue/src/components/floating/AFloating.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ const { x, y, strategy } = useFloating(toRef(props, 'referenceEl'), refFloating,
6868
if (props.modelValue === undefined) {
6969
// If trigger is hover
7070
if (props.trigger === 'hover') {
71+
// TODO: Try to refactor multiple listeners via https://github.com/vueuse/vueuse/pull/2180
7172
// Reference
7273
useEventListener(toRef(props, 'referenceEl'), 'mouseenter', () => {
7374
if (isFloatingElVisible.value === false)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export { default as AFloating } from './AFloating.vue'
2+
export { sameWidth as sameWidthFloatingUIMiddleware } from './middlewares'
23
export * from './props'

packages/anu-vue/src/components/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export { AChip } from './chip'
99
export { ADataTable } from './data-table'
1010
export { ADialog } from './dialog'
1111
export { ADrawer } from './drawer'
12+
export { AFloating } from './floating'
1213
export { AInput } from './input'
1314
export { AList } from './list'
1415
export { AListItem } from './list-item'

packages/anu-vue/src/components/menu/AMenu.vue

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,21 @@
22
import { menuProps } from './props'
33
import { ACard } from '@/components'
44
import { AFloating } from '@/components/floating'
5+
import { useParentEl } from '@/composables'
56
67
const props = defineProps(menuProps)
78
8-
const emit = defineEmits<{
9-
(e: 'update:modelValue', value: boolean): void
10-
}>()
11-
129
defineOptions({
1310
name: 'AMenu',
1411
})
1512
16-
const refReference = ref()
17-
onMounted(() => {
18-
const vm = getCurrentInstance()
19-
if (vm?.proxy?.$parent)
20-
refReference.value = vm?.proxy?.$parent.$el
21-
})
13+
const { parentEL } = useParentEl()
2214
</script>
2315

2416
<template>
2517
<AFloating
2618
v-bind="props"
27-
:reference-el="refReference"
19+
:reference-el="parentEL"
2820
>
2921
<ACard>
3022
<slot />
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
11
export { default as AMenu } from './AMenu.vue'
2-
export { sameWidth as sameWidthFloatingUIMiddleware } from './middlewares'
3-

packages/anu-vue/src/components/menu/middlewares.ts

Lines changed: 0 additions & 14 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { ExtractPropTypes } from 'vue'
22
import { floatingProps } from '@/components/floating'
33

4+
// TODO: Maybe we don't need reactivePick, Normal Object filter will do the job.
45
export const menuProps = reactivePick(floatingProps, Object.keys(floatingProps).filter(k => !['referenceEl'].includes(k)) as Array<keyof typeof floatingProps>)
56

67
export type CardProps = ExtractPropTypes<typeof menuProps>

packages/anu-vue/src/composables/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export * from './useDOMScrollLock'
44
export * from './useGroupModel'
55
export * from './useInternalBooleanState'
66
export * from './useLayer'
7+
export * from './useParentEl'
78
export * from './useSearch'
89
export * from './useSort'
910
export { spacingProp, useSpacing } from './useSpacing'

packages/anu-vue/src/composables/useInternalBooleanState.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import type { Ref } from 'vue'
55
export const useInternalBooleanState = (state: Ref<boolean | undefined>, emit: any, eventToEmit: string, initialValue: boolean) => {
66
const _internalState = ref(initialValue)
77

8+
// TODO: Allow passing value to set the value instead of just toggling
89
const toggle = () => {
910
if (state.value !== undefined)
1011
emit(eventToEmit)

0 commit comments

Comments
 (0)