Skip to content

Transform

Por defecto @mapped emite MappedResult[], que está orientado a columnas. Usa transform para recibir datos orientados a filas.

typescript
import type { TransformFn } from "@dazzadev/vue-sheet-mapper";

type Contacto = {
  full_name: string;
  email: string;
  phone: string;
};

const contactTransform: TransformFn<Contacto> = (row) => {
  if (!row.first_name) return null; // saltar filas vacías
  return {
    full_name: `${row.first_name.trim()} ${row.last_name?.trim() ?? ""}`.trim(),
    email: row.email?.toLowerCase().trim() ?? "",
    phone: row.phone?.replace(/\D/g, "") ?? "",
  };
};

function onMapped(rows: Contacto[]) {
  // [{ full_name: 'Ana García', email: 'ana@mail.com', phone: '3001234567' }, ...]
}
vue
<SheetMapper
  :fields="fields"
  :transform="contactTransform"
  @mapped="(rows) => onMapped(rows as Contacto[])"
/>

Devolver null excluye esa fila del resultado.

transform se ignora con output="mapping": son mutuamente excluyentes, porque en ese modo nada se convierte en filas.

Conversión manual

Si no usas transform pero aun así necesitas datos por filas, usa la utilidad toRows:

typescript
import { toRows } from "@dazzadev/vue-sheet-mapper";
import type { MappedResult } from "@dazzadev/vue-sheet-mapper";

function onMapped(results: MappedResult[]) {
  const rows = toRows(results);
  // [{ first_name: 'Ana', email: 'ana@mail.com', ... }, ...]
}

Publicado bajo la licencia MIT.