@eureca/eureca-ui
Version:
UI component library of Eureca's user and admin apps
161 lines (135 loc) • 5.2 kB
text/mdx
import {
Meta,
Story,
Preview,
Title,
Subtitle,
Description,
Props,
} from '@storybook/addon-docs/blocks';
import { withKnobs } from '@storybook/addon-knobs';
import { Box, ThemeProvider, Typography } from '@material-ui/core';
import MuiTheme from '../../../theme/mui';
import { Flex } from '../../Flex';
import { Table } from '../';
import { BasicTable, FixedColumnTable } from './table.stories.js';
<Meta title='Material/Table' component={Table} decorators={[withKnobs]}/>
<Title>Table</Title>
<Description>
Tabela dos aplicativos Eureca, extendido da tabela padrão do `Material-UI`.
</Description>
<Description>
Contém todas as props definidas no [Material-UI](https://material-ui.com/components/tables/#table) e tem estilo definido pelo tema desta biblioteca.
</Description>
<Preview>
<Story name="Basic Table">
<BasicTable />
</Story>
</Preview>
<Subtitle>Props</Subtitle>
| Nome | Descrição | Default |
|:-------:|:-------------------------------:|:-----------:|
| initialOrder | Ordem inicial dos items da tabela <br /> 'asc' \| 'desc' | 'asc' |
| initialOrderBy | Ordem inicial dada por alguma propriedade <br /> string | - |
| initialPage | Página inicial da tabela <br /> string | - |
| initialSelected | Array de IDs das linhas previamente selecionadas <br /> array | [ ] |
| totalRows | Total de linhas da tabela <br /> number | - |
| title | Título da tabela <br /> string | - |
| tableColumns | Array contendo as colunas da tabela <br /> array | - |
| tableContent | Array com o conteúdo que irá popular a tabela <br /> array | - |
| baseColumn | Coluna a se fixar na tabela <br /> string | - |
| checkboxes | Controla a exibição da coluna de checkboxes da tabela <br /> bool | true |
| extraColumns | number | - |
| rowHandler | Função associada ao clique de uma linha da tabela. Caso exista e seja uma função ao se clicar na linha o checkbox não será marcado, apenas essa função será executada. <br /> func | - |
| emptyTableText | Texto exibido quando a tabela não está populada <br /> string | - |
| selectedRows | Função que retorna as linhas selecionadas da tabela, um array de IDs <br /> func | - |
| onCheckRow | Função que controla o click do checkbox de uma linha. Recebe `id` da linha <br /> func | null |
| onCheckHeader | Função que controla o click do checkbox do header. Recebe estado do checkbox, `isSelected`. <br /> func | null |
<Subtitle>Colunas</Subtitle>
> O array com os dados das colunas deve possuir objetos com as chaves abaixo
| Nome | Chave | Default |
|:-------:|:-------------------------------:|:-----------:|
| id | ID da coluna <br /> string | - |
| skip | Usado para não exibir a coluna na tabela <br /> bool | false |
| disablePadding | Desabilita o padding interno da coluna <br /> bool | false |
| sortable | Página inicial da tabela <br /> string | true |
| label | Label da coluna no header da tabela <br /> string | - |
| style | Objeto de estilo para editar coluna <br /> object | - |
| sortFn | Função opcional de customização da ordenação de uma coluna <br /> func | - |
```jsx
const columns = [
{
id: 'id',
skip: true,
},
{
id: 'avatar',
numeric: false,
disablePadding: true,
sortable: false,
label: '',
style: { width: 40 },
},
{
id: 'email',
numeric: false,
disablePadding: false,
label: 'Email',
},
];
```
<Subtitle>Conteúdo</Subtitle>
> A tabela é populada com um array de objetos que contenham as chaves definidas no `id` das colunas.
Abaixo um exemplo de duas linhas populando as colunas definidas acima.
```jsx
const content = [
{
id: 1,
avatar: avatar_src_1,
email: 'test1@email.com'
},
{
id: 2,
avatar: avatar_src_2,
email: 'test2@email.com'
},
];
```
<Subtitle>Customização de Selecionados</Subtitle>
O controle de linhas selecionadas pode ser também feito externamente à tabela. Para isso basta passar as função `onCheckRow` e `onCheckHeader`. Caso essas funções não
existam a tabela utilizará seu controle interno.
Segue abaixo um exemplo de implementação dessas funções com um estado `selected`, que é passado à tabela pela prop `initialSelected`.
```jsx
const [selected, setSelected] = React.useState([]);
const handleCheckRow = (id) => {
const selectedIndex = selected.indexOf(id);
if (selectedIndex === -1) {
setSelected([...selected, id]);
} else {
const newSelected = [...selected];
newSelected.splice(selectedIndex, 1);
setSelected(newSelected);
}
};
const handleCheckHeader = (isSelected) => {
if (isSelected) {
const newSelecteds = basicContent.map(n => n.id);
return setSelected(newSelecteds);
}
return setSelected([]);
};
```
<Subtitle>Exemplo de Aplicação</Subtitle>
```jsx
<Table
initialSelected={selected}
tableColumns={basicColumns}
tableContent={basicContent}
rowHandler={action('row-click')}
selectedRows={(value) => setSelected(value)}
emptyTableText="Nenhum candidato se inscreveu nessa oportunidade."
checkboxes={checkboxes}
onCheckRow={handleCheckRow}
onCheckHeader={handleCheckHeader}
/>
```