Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • F Frontend
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 6
    • Merge requests 6
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Vincula
  • Frontend
  • Merge requests
  • !10

Merged
Created Aug 28, 2025 by Lorenzo Hubner Panato@lorenzo.panatoDeveloper

22/table component

  • Overview 3
  • Commits 16
  • Changes 10

Tarefa relacionada

https://dev.azure.com/ages-vincula/Vincula/_workitems/edit/22/

O que foi adicionado?

  • Componente de tabela genérica
  • Dependências Material UI
  • Pasta types
  • Linha "type": "module" no package.json. Sem ela, o comando npm run test estava quebrando

Revisar

  • A funcionalidade de ordenação só foi implementada quando a paginação é client-side. Se for ter ordenação quando é server-side, o endpoint deve receber os parâmetros necessários. Vamos ter suporte pra isso no back?

  • As opções de rowActions vão ser sempre "ver detalhes", "editar" e "excluir"?

  • Não foi adicionado no figma o design pra quando a tabela está vazia ou em estado de loading. Por enquanto deixei só um texto simples quando está vazia e um spinner para o loading.

  • A tabela do MUI tem suporte para a "variant"? Não encontrei na documentação

Como testar

Substitua o conteúdo de page.tsx pelo mock a seguir:

'use client'

import React, { useState } from 'react';
import { DeleteOutline, Edit } from '@mui/icons-material';
import GenericTable from "../components/GenericTable/GenericTable";
import { Column } from "../types/Table";
import styles from './page.module.css';

const data = [
  { id: 1, case: "Caso 001", responsible: "João Silva", status: "Aberto", openedAt: "2025-08-20" },
  { id: 2, case: "Caso 002", responsible: "Maria Souza", status: "Em andamento", openedAt: "2025-08-21" },
  { id: 3, case: "Caso 003", responsible: "Pedro Santos", status: "Concluído", openedAt: "2025-08-22" },
  { id: 4, case: "Caso 004", responsible: "Ana Oliveira", status: "Aberto", openedAt: "2025-08-23" },
  { id: 5, case: "Caso 005", responsible: "Carlos Pereira", status: "Em andamento", openedAt: "2025-08-24" },
  { id: 6, case: "Caso 006", responsible: "Fernanda Lima", status: "Concluído", openedAt: "2025-08-25" },
  { id: 7, case: "Caso 007", responsible: "Ricardo Alves", status: "Aberto", openedAt: "2025-08-26" },
  { id: 8, case: "Caso 008", responsible: "Juliana Costa", status: "Em andamento", openedAt: "2025-08-27" },
  { id: 9, case: "Caso 009", responsible: "Marcos Rocha", status: "Concluído", openedAt: "2025-08-28" },
  { id: 10, case: "Caso 010", responsible: "Patrícia Martins", status: "Aberto", openedAt: "2025-08-29" },
];

const columns: Column<typeof data[0]>[] = [
  { key: "case", label: "Caso", align: "left" },
  { key: "responsible", label: "Responsável", align: "left" },
  { key: "status", label: "Situação", align: "left" },
  { key: "openedAt", label: "Data de Abertura", align: "left" },
];


const rowActions = [
  // {
  //   label: "Editar",
  //   icon: <Edit />,
  //   onClick: (row: unknown) => console.log("Editar", row),
  // },
  // {
  //   label: "Excluir",
  //   icon: <DeleteOutline />,
  //   onClick: (row: unknown) => console.log("Excluir", row),
  // },
  {
    label: "Ver detalhes",
    onClick: (row: unknown) => console.log("Ver detalhes", row),
  },
];

export default function Home() {
  // const [currentPage, setCurrentPage] = useState(0);
  // const [pageSize, setPageSize] = useState(5);

  // // mock paginacao backend
  // // const paginatedData = data.slice(
  // //   currentPage * pageSize,
  // //   currentPage * pageSize + pageSize
  // // );

  // // const pagination = {
  // //   currentPage,
  // //   pageSize,
  // //   totalItems: data.length,
  // //   onPageChange: (page: number, newPageSize: number) => {
  // //     setCurrentPage(page);
  // //     setPageSize(newPageSize);
  // //   },
  // // };

  return (
    <div className={styles.page}>
      <main className={styles.main}>
        <GenericTable
          columns={columns}
          data={data}
          loading={false}
          selectable
          rowActions={rowActions}
        // pagination={pagination} // se passar, server side, se não, client-side
        />
      </main>
    </div>
  );
}

Screenshots

Screenshot_2025-08-28_202904

Screenshot_2025-08-28_202941

Screenshot_2025-08-28_203621

Screenshot_2025-08-28_203039

Screenshot_2025-08-28_203717

Edited Sep 01, 2025 by Lorenzo Hubner Panato
Assignee
Assign to
Reviewer
Request review from
Time tracking
Source branch: 22/table-component