4.1.1 • Published 9 months ago

@eduzz/ui-layout v4.1.1

Weekly downloads
-
License
MIT
Repository
-
Last release
9 months ago

Eduzz UI: Layout Eduzz

Components de UI padrão das aplicações, aqui você vai encontrar:

Layout

Estrutura padrão das aplicações.

Importação

import Layout from '@eduzz/ui-layout';

// ou
import Layout from '@eduzz/ui-layout';
import Sidebar from '@eduzz/ui-layout/Sidebar';
import Topbar from '@eduzz/ui-layout/Topbar';
import Content from '@eduzz/ui-layout/Content';

Estrutura base

<Layout>
  <Layout.Topbar />
  <Layout.Sidebar />
  <Layout.Content />
</Layout>

Desestruturando

Para simplificar a escrita do código, você pode desestruturar os componentes.

import Layout from '@eduzz/ui-layout';

const { Sidebar, Topbar, Content } = Layout;
const { Item, Group, GroupWithGroupSwitcher } = Sidebar;

function CustomLayout() {
  return (
    <Layout>
      <Topbar {...topbarProps}>
        {...}
      </Topbar>

      <Sidebar {...sidebarProps}>
        {...}
      </Sidebar>

      <Content>
        {...}
      </Content>
    </Layout>
  );
}

export default CustomLayout;

Exemplo

import { NavLink, useLocation } from 'react-router-dom';

const { Sidebar, Topbar, Content } = Layout;
const { Item, Group, GroupWithGroupSwitcher } = Sidebar;

function MyComponent() {
  const location = useLocation();

  return (
    <Layout>
      <Topbar
        currentApplication='orbita'
        user={{
          name: 'Houston User',
          belt: 'Black Belt',
          avatar: 'https://picsum.photos/200',
          tag: 'unity'
        }}
      >
        <Topbar.UnitySupportChat token='...token gerado pelo servidor' />

        <Topbar.Action icon={<NotificationOutline size={25} />} label='Notificações' />
        <Topbar.Action icon={<InfoChatOutline size={25} />} />

        <Topbar.UserMenu>
          <Topbar.UserMenuItem>Meus Dados</Topbar.UserMenuItem>
          <Topbar.UserMenuItem>Minhas Compras</Topbar.UserMenuItem>

          <Topbar.UserMenuGroup label='Contas:'>
            <Topbar.UserMenuItem href='http://google.com' target='_blank'>
              John Doe
            </Topbar.UserMenuItem>
            <Topbar.UserMenuItem disabled>John Doe 2</Topbar.UserMenuItem>
          </Topbar.UserMenuGroup>

          <Topbar.UserMenuDivider />

          <Topbar.UserMenuItem>Sair</Topbar.UserMenuItem>
        </Topbar.UserMenu>
      </Topbar>

      <Sidebar currentLocation={location.pathname}>
        <Item href='/agendamento'>Resumo</Item>

        <GroupWithGroupSwitcher
            label='Integrações'
            options={[
              {
                id: 'whatsapp',
                label: 'Whatsapp',
                icon: <WhatsAppOutlined />,
                items: [
                  <Item key={'option-1-item-1'} id='sidebar-option-1-item-1'>
                    Templates
                  </Item>,
                  <Item key={'option-1-item-2'} id='sidebar-option-1-item-2'>
                    Configurações
                  </Item>
                ]
              },
              {
                id: 'email',
                label: 'Email',
                icon: <MailOutlined />,
                items: [
                  <Item key={'option-2-item-1'} id='sidebar-option-2-item-1'>
                    Layout
                  </Item>,
                  <Item key={'option-2-item-2'} id='sidebar-option-2-item-2'>
                    Templates
                  </Item>,
                  <Item key={'option-2-item-3'} id='sidebar-option-2-item-3'>
                    Configurações
                  </Item>
                ]
              }
            ]}
          />

        <Group label='Agendamento'>
          <Item as={NavLink} to='/agendamento'>
            Evento
          </Item>
          <Item as={NavLink} to='/agendamento'>
            MasterMind
          </Item>
          <Item as={NavLink} to='/agendamento'>
            Lançamento
          </Item>
        </Group>

        <Item disabled>Marketplace</Item>
      </Sidebar>

      <Content>{/*Your content here*/}</Content>
    </Layout>
  );
}

Props

Layout props

proptipoobrigatóriopadrãodescrição
mode'light' \| 'dark'false'light'Modo (Dark ou Light mode)
persistModebooleanfalsefalseFaz o modo (Dark ou Light mode) persistirem no localStorage como eduzz-ui-mode
acceptModeBySearchParambooleanfalsefalseAceita receber ?eduzzMode=dark na URL por exemplo, para definir o mode
onModeChange(newMode: 'light' \| 'dark') => voidfalse-Função a ser executada toda vez que houver uma mudança de modo.

Topbar props

proptipoobrigatóriopadrãodescrição
logourlfalse-Url para o logo padrao.
logoMobileurlfalse-Url para o logo na versão mobile.
logoDarkModeurlfalse-Url para o logo padrao no tema dark.
logoMobileDarkModeurlfalse-Url para o logo na versão mobile no tema dark.
currentApplicationstringfalse-Aplicação que está sendo usada, para marcar no menu de apps.
userobjectfalse-Se existe um usuário logado, sem ele não terá o menu User.
disableAppsbooleanfalsefalseSe verdadeiro esconde o menu de apps.
disableLogobooleanfalsefalseSe verdadeiro esconde a logo.
startElementReactNodefalse-Elemento que será adicionado antes da logo

Topbar.Action props

proptipoobrigatóriopadrãodescrição
iconReactNodetrue-Icone, tamanho ideal 25
labelstringfalse-
isActivebooleanfalsefalseSe o icone deve manter o estado de pressionado/ativo
onClickfunctionfalse-

Topbar.UserMenuItem props

proptipoobrigatóriopadrãodescrição
iconReactNodetrue-Icone, tamanho ideal 25
childrenstringfalse-Deve ser uma string
disabledbooleanfalse-
onClickfunctionfalse-

Topbar.UserMenuGroup props

proptipoobrigatóriopadrãodescrição
labelstringtrue-
childrenReactNodetrue-

Topbar.UnitySupportChat props

proptipoobrigatóriopadrãodescrição
tokenstringfalse-Token gerado pelo servidor para uso do LiveHelper

Topbar.HyperflowSupportChat props

proptipoobrigatóriopadrãodescrição
accountsJwt() => Promise<string>true-JWT gerado a partir do accounts
hyperflowConfigHyperflowConfigtrue-Tokens dos canais do Hyperflow
currentUserCurrentUsertrue-Dados do usuário que serão enviados para o Hyperflow
hyperflowJwtstringtrue-JWT gerado a partir do secret da Hyperflow
export type CurrentUser = {
  tag: string;
  belt: string;
  isClubeBlack: boolean;
  id: number;
  name: string;
  email: string;
  isAccessPolicy: boolean;
} & (
  | {
      isAccessPolicy: true;
      originalUserId: number;
      originalUserName: string;
      originalUserEmail: string;
    }
  | { isAccessPolicy: false }
);

type HyperflowConfig = {
  chatUnityID: string;
  chatBlackID: string;
  chatEliteID: string;
  flowId: string;
  origin: 'blinket' | 'checkout' | 'myeduzz' | 'nutror' | 'orbitpages' | 'safevideo';
};

Documentação de apoio: Hyperflow

Topbar.ModeSwitcher props

proptipoobrigatóriopadrãodescrição
tooltipstringfalse'Tema'Texto para o tooltip do botão. mode
badgeDotbooleanfalsefalseSe um badgeDot deve ser adicionado ao botão .

Sidebar props

proptipoobrigatóriopadrãodescrição
currentLocationstringfalse-Caminho de localização atual (pathname).

Sidebar.Item props

proptipoobrigatóriopadrãodescrição
asReact.ElementTypefalse-Componente que envolve o item.
anyanyfalse-Qualquer prop que o as receba
isActivebooleanfalsefalseIrá usar o currentLocation fornecido para tentar ver se está ativo ou não
tabIndexnumberfalse-
disabledbooleanfalse-
onClickfunctionfalse-

Sidebar.Group props

proptipoobrigatóriopadrãodescrição
labelReact.ReactNodefalse--
tabIndexnumberfalse-

Sidebar.GroupWithGroupSwitcher props

proptipoobrigatóriopadrãodescrição
idstringfalse-Identificador único para o elemento raiz (HTML <li>).
labelReactNodefalse-Label ou título do grupo, exibido acima das opções do seletor.
optionsSidebarGroupWithGroupSwitcherOption[]true-Array de opções que serão renderizadas no grupo. Cada opção define um conjunto de itens e atributos.
classNamestringfalse-Classe CSS adicional para customização do componente.
defaultOptionIdstringfalse-Valor padrão selecionado, caso não seja informado, será utilizada a primeira opção como padrão
onChangeOption(option: SidebarGroupWithGroupSwitcherOption) => voidfalse-Função que será chamada como callback ao alterar a opção

SidebarGroupWithGroupSwitcherOption

proptipoobrigatóriopadrãodescrição
idstringtrue-Identificador único da opção.
labelstringtrue-Texto que representa o rótulo da opção. Pode ser um nome ou título descritivo.
iconReactNodefalse-Elemento opcional que pode conter um ícone ou qualquer outro elemento visual.
itemsReactNode[]true-Conjunto de itens (children) que serão renderizados quando a opção estiver selecionada.

Content props

proptipoobrigatóriopadrãodescrição
disablePaddingbooleanfalse-Remove o padding

App Loader

Loader de aplicação padrão.

Importação

import AppLoader, { useAppLoader } from '@eduzz/ui-layout';

Exemplo

Coloque no momento de createRoot e use o lazy para aparecer o loader antes da aplicação. Coloque o minimo de imports nesse arquivo para carregar o mais rapido possível.

import { lazy } from 'react';
import { createRoot } from 'react-dom/client';
import AppLoader from '@eduzz/ui-layout'; 

const App = lazy(() => import('./App'));

createRoot(document.getElementById('app') as HTMLElement).render(
  <AppLoader>
    <App />
  </AppLoader>
);

// App.tsx
import { useEffect } from 'react';
import { useAppLoader } from '@eduzz/ui-layout';

function App() {
  const appLoader = useAppLoader();

  useEffect(() => {
    // Faça o que precisar ser feito e entao chame o `hide`
    appLoader.hide();
    // Caso queira aparecer novamente
    appLoader.show();
    // Se algo acontecer pode mostrar uma mensagem de erro
    appLoader.error(new Error(), () => console.log('Tente novamente'));
  }, []);

  return <div />
}

Props

AppLoader props

proptipoobrigatóriopadrão
logourl\|ReactNodefalseEduzz Logo
logoDarkModeurl\|ReactNodefalseEduzz Logo
2.0.3

11 months ago

2.0.2

11 months ago

2.0.5

10 months ago

2.0.4

10 months ago

2.0.1

11 months ago

2.0.0

11 months ago

4.0.1

10 months ago

4.0.0

10 months ago

4.0.3

9 months ago

4.0.2

10 months ago

1.4.6-beta.3

1 year ago

1.5.2

11 months ago

1.5.1

11 months ago

1.5.0

11 months ago

4.1.0

9 months ago

1.4.9

1 year ago

1.4.11

1 year ago

1.4.8

1 year ago

4.1.1

9 months ago

1.4.10

1 year ago

1.4.7

1 year ago

1.4.6-beta.2

1 year ago

1.4.6-beta

1 year ago

1.4.5

1 year ago

1.4.4

1 year ago

1.4.3

2 years ago

1.4.2

2 years ago

1.4.1

2 years ago

1.4.0

2 years ago

1.4.0-beta.1

2 years ago

1.3.0

2 years ago

1.2.0

2 years ago

1.2.0-beta.12

2 years ago

1.2.0-beta.11

2 years ago

1.2.0-beta.10

2 years ago

1.2.0-beta.9

2 years ago

1.2.0-beta.8

2 years ago

1.2.0-beta.7

2 years ago

1.2.0-beta.6

2 years ago

1.2.0-beta.3

2 years ago

1.2.0-beta.2

2 years ago

1.2.0-beta.5

2 years ago

1.2.0-beta.4

2 years ago

1.2.0-beta.1

2 years ago

1.2.0-beta.0

2 years ago

1.1.15

2 years ago

1.1.14

2 years ago

1.1.13

2 years ago

1.1.12

2 years ago

1.1.11

2 years ago

1.1.10

3 years ago

1.1.9

3 years ago

1.1.8

3 years ago

1.1.7

3 years ago

1.1.6

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago

0.0.29

3 years ago

0.0.28

3 years ago

0.0.27

3 years ago

0.0.26

3 years ago

0.0.25

3 years ago

0.0.24

3 years ago

0.0.23

3 years ago

0.0.22

3 years ago

0.0.21

3 years ago

0.0.19

3 years ago

0.0.18

3 years ago

0.0.17

3 years ago

0.0.16

3 years ago

0.0.15

3 years ago

0.0.14

3 years ago

0.0.13

3 years ago

0.0.12

3 years ago

0.0.11

3 years ago

0.0.10

3 years ago

0.0.9

3 years ago

0.0.8

3 years ago

0.0.7

3 years ago

0.0.6

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago