UNPKG

@eureca/eureca-ui

Version:

UI component library of Eureca's user and admin apps

252 lines (215 loc) 6.13 kB
import { Meta, Story, Preview, Title, Subtitle, Description, Props, } from '@storybook/addon-docs/blocks'; import { withKnobs } from '@storybook/addon-knobs'; import { Board } from '../'; import { SimpleBoard } from './board.stories.js'; <Meta title='Originals/Board' component={Board} decorators={[withKnobs]}/> <Title>Board</Title> <Description> Board dos aplicativos Eureca. </Description> <Preview> <Story name="Board"> <SimpleBoard /> </Story> </Preview> <Subtitle>Props</Subtitle> | Nome | Descrição | Default | |:-------:|:-------------------------------:|:-----------:| | values | Dados de entrada do board, se existirem <br /> 'string' \| 'node' | '' | | cardsOptions | Tipos de cards disponíveis no board <br /> 'func' | () => { } | | columnMenu | Itens presentes no menu das fases <br /> Recebe todos os valores do **editor** 'func' | () => { } | | onChange | Função disparada em mudanças no board. Retorna os novos dados do Board <br /> Recebe todos os valores do **editor** 'func' | () => { } | | onAddCard | Função disparada ao se adicionar um card. Retorna card e column <br /> 'string' | '' | | onClickCard | Função disparada ao se clicar em um card. Retorna id e title <br /> | - | | onClickColumnMenu | Função disparada ao se escolher uma opção do menu das colunas. Retorna o id da coluna e a opção <br /> | - | | onClickCardAction | Função disparada ao se escolher uma opção de edição de um card. Retorna id, columnId, action <br /> | - | <Subtitle>Exemplo de Arquivos de Entrada</Subtitle> É um objeto com as seguintes chaves: - `tasks`: Uma task por ser de um dos tipos presentes no `cardsOptions`. O conjunto de tasks é o conteúdo de cada coluna. - `columns`: Objeto com as colunas presentes no Board. - `columnOrder`: Ordem em que as colunas serão exibidas no Board. ```jsx { tasks: [ { id: '0', type: 'form', title: 'Exemplo de Task 0', subtitle: 'Formulário', }, { id: '1', type: 'fit-cultural', title: 'Exemplo de Task com texto muito grande', subtitle: 'Fit Cultural', }, { id: '2', type: 'form', title: 'Exemplo de Task 2', subtitle: 'Formulário', }, { id: '3', type: 'fit-cultural', title: 'Exemplo de Task 3', subtitle: 'Fit Cultural', }, ], columns: { 0: { id: `0`, title: 'Inscritos', icon: <FiUserCheck />, points: '1000', taskIds: ['0', '1'], }, 1: { id: `1`, title: 'Resultados', icon: <FiAward />, taskIds: ['2', '3'], }, }, columnOrder: ['0', '1'], }; ``` > Card Options Esse array de objetos define as opções de cards possíveis no Board. ```jsx [ { id: 'form', name: 'Formulário', icon: <FiEdit />, }, { id: 'fit-cultural', name: 'Fit Cultural', icon: <FiMinimize2 />, }, ]; ``` > Column Menu Esse array de objetos defne os itens presentes no menu das colunas. ```jsx [ { id: 'config', name: 'Configurar fase', icon: <FiSettings />, }, { id: 'duplicate', name: 'Duplicar fase', icon: <FiCopy />, }, { id: 'delete', name: 'Excluir fase', icon: <FiTrash2 />, }, ]; ``` > Phase Options Defne as opções de colunas que poderão ser adicionadas ```jsx [ { id: 0, value: 'online', label: 'Online', icon: <FiLayers />, }, { id: 1, value: 'presencial', label: 'Presencial', icon: <FiTarget />, }, { id: 2, value: 'entrevista', label: 'Entrevista', icon: <FiMic />, }, ]; ``` <Subtitle>Utilização com SSR</Subtitle> Para que o componente funcione corretamente é necessário importar e executar no root do app (no caso do Next dentro do `getInitialProps` do `_document.js`) a função `resetServerContext` exportada por essa biblioteca. Essa função sincroniza o estado da biblioteca `react-beautiful-dnd`, utilizada pelo componente, no servidor e cliente. Segue abaixo um exemplo de configuração do `_document.js` com a função. Repare no uso da função logo no início do `getInitialProps`. ```jsx import React from 'react'; import Document, { Html, Head, Main, NextScript, } from 'next/document'; import { ServerStyleSheets } from '@material-ui/core/styles'; import { resetServerContext } from '@eureca/eureca-ui'; class MyDocument extends Document { render() { return ( <Html lang="en"> <Head> <link rel="stylesheet" type="text/css" charSet="UTF-8" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.css" /> <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick-theme.min.css" /> </Head> <body> <Main /> <NextScript /> </body> </Html> ); } } MyDocument.getInitialProps = async (ctx) => { resetServerContext(); // Função que habilita uso com SSR // Render app and page and get the context of the page with collected side effects. const sheets = new ServerStyleSheets(); const originalRenderPage = ctx.renderPage; ctx.renderPage = () => originalRenderPage({ // eslint-disable-next-line react/jsx-props-no-spreading enhanceApp: (App) => (props) => sheets.collect(<App {...props} />), }); const initialProps = await Document.getInitialProps(ctx); return { ...initialProps, // Styles fragment is rendered after the app and page rendering finish. styles: [...React.Children.toArray(initialProps.styles), sheets.getStyleElement()], }; }; export default MyDocument; ``` <Subtitle>Exemplo de Aplicação</Subtitle> ```jsx <Board values={data} cardsOptions={cardsOptions} onAddCard={handleAddCard} onClickCard={handleClickCard} onChange={handleChange} columnMenu={columnMenu} onClickColumnMenu={handleColumnMenu} phaseOptions={phaseOptions} onClickCardAction={handleCardAction} /> ```