# sherl-react-sdk

> Ce package à pour but de faciliter les interactions avec le service Sherl depuis react.

[![NPM](https://img.shields.io/npm/v/sherl-react-sdk.svg)](https://www.npmjs.com/package/sherl-react-sdk) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)

Autres traductions : [English](../blob/master/README.md)

## Installation

Cloner le sdk au même niveau que le dossier du projet :

```bash
git clone git@git.winzana.com:sherl/sherl-react-sdk.git
```

Ensuite à la racine du projet dans lequel on souhaite utiliser le module :

```bash
yarn add link:../sherl-react-sdk
```

Vérifiez la présence des dépendances suivantes :

```bash
yarn add axios i18next react react-i18next react-redux redux
```

Configurer axios :

```js
axios.defaults.baseURL = <baseURL>
```

```ts
import { initialize } from 'sherl-react-sdk';

initialize(
  <apiKey>,
  <apiSecret>,
  <instanceName>, // Will produce https://api.sherl.io
  `<baseURL>`,// Optiona
  `<analytics_url>`, // Optional
  `<cms_url>`, // Optional
  `<place_url>`, // Optional
  `<calendar_url>`, // Optional
  `<communication_url>`, // Optional
  `<opinion_url>`, // Optional
  `<pdf-url>`, // Optional
);
```

```tsx
import { store } from 'sherl-react-sdk';
import { Provider } from 'react-redux';

export const App = () => <Provider store={store}>...app</Provider>;
```

Ensuite pour que les modifications se répercutent sur le dist automatiquement il suffit de lancer le packager :

```bash
yarn install && yarn start
```

## Utilisation

Le package est découpé en domaines. Pour utiliser les fonctionnalités d'un domaine, il suffit de faire comme suit :

```jsx
import { Organization } from 'sherl-react-sdk';

type OrganizationMetadatas = {
    constraints: string;
};

const MyComponent = () => {

    const { getOrganization, organization, loading, error } = Organization.useOrganizations<OrganizationMetadatas>();

    return ...;
};

```

## Problèmes conus

`Cannot read property 'referencesPath' of undefined:`

Vérifiez que vous ne destructurez pas directement dans le catch :

```ts
try {
  response = await PersonApi.getPersons(page, itemsPerPage, params);
} catch ({ name, response: responseError, isAxiosError, stack, ...rest }) {}
```

Si c'est le cas le changer en suivant :

```ts
try {
  response = await PersonApi.getPersons(page, itemsPerPage, params);
} catch (err) {
  const { name, response: responseError, isAxiosError, stack, ...rest } = err;
}
```

## Domaines Disponibles

- Auth
- Analytics
- BugReport
- Calendar
- Claim
- CMS
- Communication
- Config
- Contact
- Gallery
- Media
- Notification
- Opinion
- Order
- Organization
- Pdf
- Person
- Place
- Shop
- Subscription
- User

## License

MIT © [support@winzana.com](https://github.com/support@winzana.com)
