Files
hnh-map/frontend-nuxt/components/map/MapBookmarkNameModal.vue
Nikolay Tatarinov 52c34ef8f2 Enhance map functionality with bookmark features and UI improvements
- Introduced a new MapBookmarkNameModal for adding and editing bookmarks.
- Updated MapView to manage selected markers for bookmarking and handle bookmark name submissions.
- Enhanced MapContextMenu with an option to add markers to bookmarks.
- Improved MapBookmarks component to support editing bookmark names and adding selected markers.
- Refactored MapControls and MapControlsContent to integrate selected marker functionality for bookmarks.
- Updated useMapBookmarks composable to include bookmark updating logic.
- Removed unused grid coordinates toggle from the UI for a cleaner interface.
2026-03-03 20:05:42 +03:00

75 lines
1.9 KiB
Vue

<template>
<dialog ref="modalRef" class="modal" @cancel="$emit('close')">
<div class="modal-box transition-all duration-200" @click.stop>
<h3 class="font-bold text-lg">{{ title }}</h3>
<div class="py-2">
<label class="label py-0"><span>Name</span></label>
<input
ref="inputRef"
v-model="localName"
type="text"
class="input input-bordered w-full"
placeholder="Bookmark name"
@keydown.enter.prevent="onSubmit"
/>
</div>
<div class="modal-action">
<form method="dialog" @submit.prevent="onSubmit">
<button type="submit" class="btn btn-primary">Save</button>
<button type="button" class="btn" @click="$emit('close')">Cancel</button>
</form>
</div>
</div>
<div class="modal-backdrop cursor-pointer" aria-label="Close" @click="$emit('close')" />
</dialog>
</template>
<script setup lang="ts">
const props = withDefaults(
defineProps<{
open: boolean
defaultName: string
title?: string
}>(),
{ title: 'Add bookmark' }
)
const emit = defineEmits<{
close: []
submit: [name: string]
}>()
const modalRef = ref<HTMLDialogElement | null>(null)
const inputRef = ref<HTMLInputElement | null>(null)
const localName = ref(props.defaultName)
watch(
() => props.open,
(open) => {
if (open) {
localName.value = props.defaultName || ''
nextTick(() => {
modalRef.value?.showModal()
inputRef.value?.focus()
})
} else {
modalRef.value?.close()
}
},
{ immediate: true }
)
watch(
() => props.defaultName,
(name) => {
if (props.open) localName.value = name || ''
}
)
function onSubmit() {
const name = localName.value.trim() || props.defaultName || 'Bookmark'
emit('submit', name)
emit('close')
}
</script>