Libreria per l'accesso ai servizi REST di Applica.

| Info            | Dettagli                                                |
| --------------- | ------------------------------------------------------- |
| Ultima versione | 1.0.\*                                                  |
| Autore          | Roberto Conte Rosito                                    |
| Repository      | https://bitbucket.org/applicaguru/crud-client           |
| Pipeline        | https://bitbucket.org/applicaguru/crud-client/pipelines |

# Prefazione

La libreria `@applica-software-guru/crud-client` è un client REST che consente l'accesso ai servizi REST di Applica.
La sua implementazione si basa sui principi e le linee guida definite all'interno del progetto [React-Admin](https://marmelab.com/react-admin/Admin.html#dataprovider)

# Utilizzo

La libreria può essere utilizzata in associazione a React-Admin come `dataProvider` (scopo per cui è nata) oppure direttamente come strumento per eseguire chiamate REST in modo agevole e veloce.

Per installare la libreria:

```bash
npm install @applica-software-guru/crud-client
```

Successivamente puoi configurare il client REST in questo modo:

```javascript
import { createDataProvider } from '@applica-software-guru/crud-client';
import { createAuthProvider } from '@applica-software-guru/iam-client';

const apiUrl = 'https://api.applica.guru/api';
const authProvider = createAuthProvider({ apiUrl });
const getToken = () => authProvider.getToken();
const getHeaders = () => authProvider.getHeaders();
const dataProvider = createDataProvider({ apiUrl, getToken, getHeaders });
```

## Mobile

Se lavori su un'applicazione mobile devi necessariamente creare il data provider in questo modo:

```javascript
const dataProvider = createDataProvider({ apiUrl, ..., **mobile**: true })
```

## Get List

```javascript
dataProvider
  .getList('entities/user', {
    pagination: { page: 1, perPage: 10 },
    filter: {
      name__like: 'Giovanni',
      id__gt: 10,
      active__is: true
    }
  })
  .then((response) => {
    console.log(response);
  })
  .catch((error) => alert(error));
```

## Get One

```javascript
dataProvider
  .getOne('entities/user', { id: 1 })
  .then((response) => {
    console.log(response);
  })
  .catch((error) => alert(error));
```

## Get

```javascript
dataProvider
  .get('users', { id: 1 })
  .then((response) => {
    console.log(response);
  })
  .catch((error) => alert(error));
```

## Post

```javascript
import { stringify } from 'query-string';

dataProvider
  .post(`users?${stringify({ k: 'f' })}`, { id: 1, name: 'Roberto' })
  .then((response) => {
    console.log(response);
  })
  .catch((error) => alert(error));
```
