feat(frontend): inline tag rename, merge confirm dialog, TagsView wiring
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -25,7 +25,8 @@
|
||||
|
||||
<div class="fc-tags__grid">
|
||||
<TagCard
|
||||
v-for="c in store.cards" :key="c.id" :card="c" @open="openTag"
|
||||
v-for="c in store.cards" :key="c.id" :card="c"
|
||||
@open="openTag" @rename="onRename"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -33,6 +34,13 @@
|
||||
<v-progress-circular indeterminate color="accent" size="28" />
|
||||
</div>
|
||||
<div v-else-if="store.hasMore" ref="sentinelEl" class="fc-tags__sentinel" />
|
||||
|
||||
<MergeConfirmDialog
|
||||
:model-value="pendingMerge !== null"
|
||||
:collision="pendingMerge"
|
||||
@confirm="confirmMerge"
|
||||
@cancel="pendingMerge = null"
|
||||
/>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
@@ -41,6 +49,7 @@ import { ref, watch, onMounted, onUnmounted } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { useTagDirectoryStore } from '../stores/tagDirectory.js'
|
||||
import TagCard from '../components/discovery/TagCard.vue'
|
||||
import MergeConfirmDialog from '../components/discovery/MergeConfirmDialog.vue'
|
||||
|
||||
const KINDS = ['artist', 'character', 'copyright', 'general', 'series', 'meta']
|
||||
const store = useTagDirectoryStore()
|
||||
@@ -49,6 +58,18 @@ const router = useRouter()
|
||||
const search = ref('')
|
||||
const kind = ref(null)
|
||||
const sentinelEl = ref(null)
|
||||
const pendingMerge = ref(null)
|
||||
|
||||
async function onRename({ id, name }) {
|
||||
const res = await store.rename(id, name)
|
||||
if (res.collision) pendingMerge.value = res.collision
|
||||
}
|
||||
|
||||
async function confirmMerge() {
|
||||
const c = pendingMerge.value
|
||||
pendingMerge.value = null
|
||||
if (c) await store.merge(c.sourceId, c.target.id)
|
||||
}
|
||||
|
||||
let debounce = null
|
||||
watch(search, (v) => {
|
||||
|
||||
Reference in New Issue
Block a user