Skip to content

Commit

Permalink
feat: auto open for tree view
Browse files Browse the repository at this point in the history
  • Loading branch information
sxzz committed Aug 9, 2024
1 parent c3a9d9c commit 54857b6
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 8 deletions.
38 changes: 31 additions & 7 deletions components/ast/Property.vue
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
<script setup lang="ts">
import type { Range } from '#imports'
const props = defineProps<{
id?: string | number
value?: any
root?: boolean
open?: boolean
}>()
const open = defineModel<boolean>('open', { required: false })
const show = computed(() => !shouldHideKey(props.id, props.value))
Expand All @@ -25,8 +27,34 @@ const openable = computed(
props.value != null &&
Object.keys(props.value).length > 0,
)
const isHover = computed(() => {
if (Array.isArray(props.value)) {
return props.value.some((v) => checkRange(getRange(v)))
}
return checkRange(getRange(props.value))
function checkRange(range?: Range) {
if (!range) return false
return range[0] <= editorCursor.value && range[1] > editorCursor.value
}
})
const openManual = ref<boolean>()
const open = computed(
() => openable.value && (openManual.value ?? (props.open || isHover.value)),
)
function toggleOpen() {
if (openable.value) open.value = !open.value
if (!openable.value) return
if (
openManual.value !== undefined &&
openManual.value !== (props.open || isHover.value)
) {
openManual.value = undefined
} else {
openManual.value = !open.value
}
}
const key = computed(() => (props.id != null ? String(props.id) : undefined))
Expand All @@ -40,7 +68,7 @@ function handleMouseOver(event: MouseEvent) {
event.stopPropagation()
outputHoverRange.value = undefined
} else if (props.value) {
const range = currentParser.value.getAstLocation?.(props.value)
const range = getRange(props.value)
if (!range) return
event.stopPropagation()
Expand All @@ -53,10 +81,6 @@ function handleMouseLeave() {
outputHoverRange.value = undefined
}
}
defineExpose({
toggleOpen,
})
</script>

<template>
Expand Down
2 changes: 1 addition & 1 deletion composables/constants.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export const locationKeyList = ['loc', 'start', 'end', 'span', 'range']
export const isSafari = /Apple Computer/.test(globalThis.navigator?.vendor)
export const isSafari = globalThis.navigator?.vendor.includes('Apple Computer')
4 changes: 4 additions & 0 deletions composables/location.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,7 @@ function getJsonValue(
if (current?.type === 'Literal') return current.value
return current
}

export function getRange(ast: any) {
return currentParser.value.getAstLocation?.(ast)
}

0 comments on commit 54857b6

Please sign in to comment.