# Columnas editables
# Añadir columna
# pages/index.vue
- Hacer el texto editable
A continuación de DragHandle
Añadimos el título de la columna
<input
class="title-input bg-transparent focus:bg-white rounded px-1 w-4/5"
@keyup.enter="($event.target as HTMLInputElement).blur()"
type="text"
v-model="column.title"
/>
# Botón que añade una columna
Después de la etiqueta final draggable
<button
@click="createColumn"
class="bg-gray-200 whitespace-nowrap p-2 rounded opacity-50"
>
+ Add Another Column
</button>
# Añadir estilo en el primer div del template
<div class="flex items-start overflow-x-auto gap-4">
# Añadir estilo al header
<header class="justify-between flex font-bold mb-4 ">
# Función crear nueva columna
- Creamos un objeto columna
- Con un id generado automáticamente
- Un título
- Ya tenemos el tipo de dato Column
- Añadimos el array de tareas
- Añadimos el nuevo valor de la columna al array de columnas con push()
- Luego añadimos código para que haga focus en la columna y añadamos un título
function createColumn() {
const column: Column = {
id: nanoid(),
title: "",
tasks: [],
};
columns.value.push(column);
nextTick(() => {
(
document.querySelector(
".column:last-of-type .title-input"
) as HTMLInputElement
).focus();
});
}
# Eliminar columna
# components/Remove.vue
Creamos el componente botón eliminar
<template>
<div class="bg-white w-6 text-center">
<i>
<font-awesome-icon icon="fa-solid fa-remove" />
</i>
</div>
</template>
# Función eliminar columna
const remove = (idx) => {
console.log("Columna ID: ", idx)
columns.value = columns.value.filter((c) => c.id !== idx);
}
# Añadimos el botón
Después del input
<Remove @click="remove(column.id)"/>
# Tecla eliminar columna
- Ahora si pulsamos la tecla retroceder espacio selecionaremos la columna con el campo id y podremos eleminarla
Después de @keyup.enter
@keydown.backspace="
column.title === ''
? (columns = columns.filter((c) => c.id !== column.id))
: null
"