From 409bbd43dbde6936b9fe4c32c1674b0368a6d930 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Tue, 9 Jun 2026 23:05:01 -0400 Subject: [PATCH] feat(series): rename a series from the management view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The management view showed the series name but had no way to change it post- creation (rename was only on the browse-card kebab). Add a pencil next to the title that opens TagRenameDialog (reuses the canonical rename → PATCH /api/tags/ with its collision→merge flow, since a series IS a Tag(kind=series)); the new name reflects in place. Operator-asked 2026-06-09. Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend/src/views/SeriesManageView.vue | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/frontend/src/views/SeriesManageView.vue b/frontend/src/views/SeriesManageView.vue index 35cc619..ad9d4e2 100644 --- a/frontend/src/views/SeriesManageView.vue +++ b/frontend/src/views/SeriesManageView.vue @@ -2,6 +2,12 @@
{{ store.series?.name || 'Series' }} + {{ store.chapters.length }} part(s) · {{ store.pageCount }} page(s) @@ -214,6 +220,14 @@
+ + + + @@ -223,6 +237,7 @@ import { useRoute } from 'vue-router' import { useSeriesManageStore, moveItem } from '../stores/seriesManage.js' import { useInfiniteScroll } from '../composables/useInfiniteScroll.js' import KebabMenu from '../components/common/KebabMenu.vue' +import TagRenameDialog from '../components/modal/TagRenameDialog.vue' const route = useRoute() const store = useSeriesManageStore() @@ -231,6 +246,14 @@ const drag = ref(null) // { chapterId, idx } const titleDraft = reactive({}) // chapterId -> draft title const partDraft = reactive({}) // chapterId -> draft stated_part (string) const pickerOpen = ref(false) +const renameOpen = ref(false) + +// A series IS a Tag(kind=series); TagRenameDialog PATCHes /api/tags/ and +// handles the same-name collision→merge flow. Reflect the new name in place. +function onRenamed(updated) { + renameOpen.value = false + if (store.series && updated?.name) store.series.name = updated.name +} // Keep local drafts in sync with loaded chapters. Edits commit on blur/Enter, // which refreshes and resets the draft to the saved value.