npm package: @lifeomic/react-client
Description: React hooks for interacting with the LifeOmic platform
Author: LifeOmic
Latest version: 7.12.0

Hooks for interacting with our platform in a type-safe way. Powered by [`@tanstack/query`](https://github.com/TanStack/query) and [`@lifeomic/one-query`](https://github.com/lifeomic/one-query).

## Installation

```bash
yarn add @lifeomic/react-client @tanstack/react-query@^4.0.0 @lifeomic/one-query axios
```

## Usage

**Note**: The API of this package is almost entirely powered by
[`@lifeomic/one-query`](https://github.com/lifeomic/one-query) and
[`@tanstack/query`](https://github.com/TanStack/query). The following
documentation will assume a solid understanding of each of those packages.

Get started using `createRestAPIHooks`:

```typescript
import { createRestAPIHooks } from '@lifeomic/react-client';

const hooks = createRestAPIHooks({
  name: 'my-app',
  client: axios.create({
    /* ... */
  }),
});

// Re-export the well-typed hooks.
export const {
  useAPIQuery,
  useAPIMutation
  useCombinedAPIQueries,
  useAPICache
} = hooks;
```

## API Reference

### `createRestAPIHooks`

Factory function for creating a set of well-typed hooks for interacting with the platform REST API.

These hooks come directly from [the `createAPIHooks` function in `@lifeomic/one-query`](https://github.com/lifeomic/one-query#createapihooks).

```typescript
import { createRestAPIHooks } from '@lifeomic/react-client';

const { useAPIQuery } = createRestAPIHooks({
  name: 'my-app',
  // A pre-configured Axios instance
  client: axios.create({}),
});

useAPIQuery('GET /v1/accounts', {});
```

**Note**: you can also specify a _hook_ to use for the `client` option. This is useful for scenarios where you need to
dynamically change the client based on some condition.

```typescript
import { createRestAPIHooks } from '@lifeomic/react-client';

const hooks = createRestAPIHooks({
  name: 'my-app',
  client: () => {
    return useMyClient();
  },
});
```

### `createRestAPIClient`

Returns a well-typed client for interacting with the platform REST API. Useful for building your own custom hooks, and/or interacting with the API
outside of the React tree.

```typescript
import { createRestAPIClient } from '@lifeomic/react-client';

const client = createRestAPIClient(axios.create({}));

const { data } = await client.request('GET /v1/accounts', {});
```

### `createAuthAPIHooks`

Factory function for creating a set of well-typed hooks for interacting with the platform Authentication Rest API.

These hooks come directly from [the `createAPIHooks` function in `@lifeomic/one-query`](https://github.com/lifeomic/one-query#createapihooks).

```typescript
import { createAuthAPIHooks } from '@lifeomic/react-client';

const { useAPIMutation } = createAuthAPIHooks({
  name: 'my-app',
  // A pre-configured Axios instance
  client: axios.create({}),
});

useAPIMutation('POST /auth/v1/api/invite-validations', {});
```

**Note**: you can also specify a _hook_ to use for the `client` option. This is useful for scenarios where you need to
dynamically change the client based on some condition.

```typescript
import { createAuthAPIHooks } from '@lifeomic/react-client';

const hooks = createAuthAPIHooks({
  name: 'my-app',
  client: () => {
    return useMyClient();
  },
});
```

### `createAuthAPIClient`

Returns a well-typed client for interacting with the platform REST API. Useful for building your own custom hooks, and/or interacting with the API
outside of the React tree.

```typescript
import { createAuthAPIClient } from '@lifeomic/react-client';

const client = createAuthAPIClient(axios.create({}));

const { data } = await client.request(
  'POST /auth/v1/api/invite-validations',
  {},
);
```

### `createGraphQLHooks`

Factory function for creating a set of well-typed hooks for interacting with the
platform GraphQL API.

```typescript
import { createGraphQLHooks } from '@lifeomic/react-client';

const { useGQLMutation } = createGraphQLHooks({
  name: 'my-app',
  // A pre-configured Axios instance
  client: axios.create({}),
});

useGQLMutation('CreatePost')
```

**Note**: you can also specify a _hook_ to use for the `client` option. This is
useful for scenarios where you need to dynamically change the client based on
some condition.

```typescript
import { createGraphQLHooks } from '@lifeomic/react-client';

const {
  useGQLQuery,
  useGQLMutation
} = createGraphQLHooks({
  name: 'my-app',
  client: () => {
    return useMyClient();
  },
});

useGQLQuery('GetAllActivities', {...})

useGQLMutation('CreatePost')
```

### `createGraphQLClient`

Returns a well-typed client for interacting with the platform REST API. Useful
for building your own custom hooks, and/or interacting with the API outside of
the React tree.

```typescript
import { createGraphQLClient } from '@lifeomic/react-client';

const client = createGraphQLClient(axios.create({}), '/graphql');

const result = await client.query('GetAllActivities', {
  // ...
});

const result = await client.mutate('CreatePost', {
  // ...
});
```