feat: add title extraction

This commit is contained in:
Julien Calixte
2026-01-24 14:05:43 +01:00
parent 5d51e8b46f
commit 97074f108c
4 changed files with 22 additions and 5 deletions

View File

@@ -5,11 +5,12 @@ import TaskForm from './TaskForm.vue'
const props = defineProps<{ const props = defineProps<{
initialSteps?: Stepable[] initialSteps?: Stepable[]
initialTitle?: string
}>() }>()
const id = createUuid() const id = createUuid()
</script> </script>
<template> <template>
<task-form :id="id" :initial-steps="props.initialSteps" /> <task-form :id="id" :initial-steps="props.initialSteps" :initial-title="props.initialTitle" />
</template> </template>

View File

@@ -15,6 +15,7 @@ const props = defineProps<{
id: string id: string
initialTask?: Taskable initialTask?: Taskable
initialSteps?: Stepable[] initialSteps?: Stepable[]
initialTitle?: string
}>() }>()
const id = computed(() => props.id) const id = computed(() => props.id)
const hasTasks = computed(() => store.tasks.length > 0) const hasTasks = computed(() => store.tasks.length > 0)
@@ -29,7 +30,7 @@ const steps = ref<Stepable[]>(
: exampleSteps : exampleSteps
) )
const title = ref(props.initialTask?.title ?? '') const title = ref(props.initialTitle ?? props.initialTask?.title ?? '')
const link = ref(props.initialTask?.link ?? '') const link = ref(props.initialTask?.link ?? '')
const totalEstimation = computed(() => const totalEstimation = computed(() =>

View File

@@ -16,20 +16,34 @@ const resetTasks = () => {
} }
} }
const extractTitleFromPaste = (
text: string
): { title: string | null; content: string } => {
const match = text.match(/^(#{1,6})\s+(.+?)\n+([\s\S]*)$/)
if (match) {
return { title: match[2].trim(), content: match[3] }
}
return { title: null, content: text }
}
const handlePaste = (event: ClipboardEvent) => { const handlePaste = (event: ClipboardEvent) => {
const clipboardText = event.clipboardData?.getData('text') const clipboardText = event.clipboardData?.getData('text')
if (!clipboardText) { if (!clipboardText) {
return return
} }
const steps = adaptTextareaToSteps(clipboardText) const { title, content } = extractTitleFromPaste(clipboardText)
const steps = adaptTextareaToSteps(content)
if (steps.length === 0) { if (steps.length === 0) {
return return
} }
router.push({ router.push({
name: 'new-task', name: 'new-task',
state: { initialSteps: JSON.stringify(steps) } state: {
initialTitle: title,
initialSteps: JSON.stringify(steps)
}
}) })
} }

View File

@@ -6,10 +6,11 @@ const rawInitialSteps = history.state?.initialSteps as string | undefined
const initialSteps = rawInitialSteps const initialSteps = rawInitialSteps
? (JSON.parse(rawInitialSteps) as Stepable[]) ? (JSON.parse(rawInitialSteps) as Stepable[])
: undefined : undefined
const initialTitle = history.state?.initialTitle as string | undefined
</script> </script>
<template> <template>
<div class="new-task"> <div class="new-task">
<NewTaskForm :initial-steps="initialSteps" /> <NewTaskForm :initial-steps="initialSteps" :initial-title="initialTitle" />
</div> </div>
</template> </template>