
## Instalar dependencias

yarn add @fortawesome/fontawesome-svg-core @fortawesome/free-regular-svg-icons @fortawesome/free-solid-svg-icons @fortawesome/react-native-fontawesome
yarn add @react-navigation/bottom-tabs @react-navigation/drawer @react-navigation/native @react-navigation/stack
yarn add rxjs
yarn add react-native-svg
cd ios && pod install

add <uses-permission android:name="android.permission.VIBRATE" />

## Web
yarn add @fortawesome/fontawesome-svg-core @fortawesome/free-regular-svg-icons @fortawesome/free-solid-svg-icons @fortawesome/react-fontawesome
yarn add rxjs

## Library

Components:
* [Hooks](#hooks)
    * [useView](#useView)

# Hooks
## useView

### Descrição
Hook para facilitar a criação de páginas, facilita a busca e status da página.

### Uso:

```tsx
import React, { useState } from 'react';
import { Observable } from 'rxjs';
import { useView, Resolve } from 'react-lib';

const ExampleRequest: Resolve<any> = (params: any) =>
   new Observable((obs) => {
      obs.next({});
      obs.complete();
   });

const DelayedContentComponent = () => {
   const { starting, errorLoadData, registerOnInit, registerOnInitError, reloadPage } = useView({
      resolves: {
         example: ExampleRequest,
      },
   });

   const [resource, setResource] = useState<any>();

   registerOnInit((response) => {
      setResource(response.example);
   });

   registerOnInitError((err) => {
      // Error
   });

   return (
      <div>
         {starting && <div>Carregando página</div>}
         {errorLoadData && <div>Erro ao carregar página</div>}
         {!starting && errorLoadData && <div>Página carregada: {JSON.stringify(resource)}</div>}
         {!starting && errorLoadData && (
            <button onClick={() => reloadPage()}>Recarregar página</button>
         )}
      </div>
   );
};
```

### Opções:

| Nome | Tipo | Descrição |
| --- | --- | --- |
| resolves | `{ [key: string]: Resolve<any> }` | Observables que devem ser iniciados antes do inicio da página |
| firstLoad | `boolean` | Se deve fazer o carregamento inicial dos resolves |

### Retorno:

| Nome | Tipo | Descrição |
| --- | --- | --- |
| `registerOnInit` | `(fn: (resolves: any) => void) => void` | Registrar funções que são chamadas na inicialização da página |
| `registerOnInitError` | `(fn: (err: any) => void) => void` | Registrar funções que são chamadas no erro na inicialização da página |
| `starting` | `boolean` | Status: Iniciando |
| `errorLoadData` | `boolean` | Status: Erro no carregamento dos resolves |
| `criticalError` | `boolean` | Status: Erro crítico desconhecido |
| `statusInfo` | `IStatusInfo` | statusInfo |
| `setStatusInfo` | `(v: IObject) => any` | Definir status da página |
| `$destroy` | `Subject<any>` | Subject para destruir resolves |
| `reloadPage` | `(wait1s?: boolean) => void` | Recarregar página |
| `getParamsResolve` | `MutableRefObject<{ [key: string]: () => any }>` | Lista de funções que devem ser executadas no parametro de determinado resolver |
| `registerResolveParams` | `(resolveName: string, fn: () => any) => void` | Registrar nova função para parametro de resolver |