# Frontegg React

![alt text](https://fronteggstuff.blob.core.windows.net/frongegg-logos/logo-transparent.png)

Frontegg is a web platform where SaaS companies can set up their fully managed, scalable and brand aware - SaaS features and integrate them into their SaaS portals in up to 5 lines of code.


## Installation

Use the package manager [npm](https://www.npmjs.com/) to install frontegg React.JS library.

```bash
npm install @frontegg/react
```

## Usage

Frontegg offers multiple components for integration with the Frontegg's scaleable back-end and front end libraries

### Configuration

Frontegg react library requires simple one-liner configuration in order to efficiently interact with the Backend's Frontegg middleware

(*) Checkout the [@frontegg/client](https://www.npmjs.com/package/@frontegg/client) documentation to read on how to configure the Frontegg backend middleware 

#### Initializaing the Frontegg Configuration

On your App.js: 

```javascript
import * as Frontegg from '@frontegg/react'

// This method is mandatory in order to resolve the authorization header token
const resolveToken = async () => {
    const token = await getTokenSilently(); // This sample is based on Auth0 but every authentication provider is supported (Including Frontegg :-))
    return token;
}

// This method allows to append additional query params to the frontegg requests in case you need to use it on your backend in order to resolve contexts
const resolveAdditionalQueryParams = async () => {
    return [{key: 'my-additional-query-param', value: 'my-addition-query-param-value'}]
}

// This method allows to append additional headers to the frontegg requests in case you need to use it on your backend in order to resolve contexts
const resolveAdditionalHeaders = async () => {
    return [{key: 'my-additional-query-param', value: 'my-addition-query-param-value'}]
    return token;
}

const providerOptions = {
  baseUrl: 'http://localhost:9090',                             // You backend base URL (frontegg will direct the requests to it)
  tokenResolver: resolveToken,                                  // The token resolver (this is mandatory)
  additionalQueryParamsResolver: resolveAdditionalQueryParams,  // The query params resolver (this is optional)
  additionalHeadersResolver: resolveAdditionalHeaders           // The headers resolver (this is optional)
}


// And wrap Frontegg components with the context provider
<Frontegg.ContextProvider value={providerOptions}>
  ...
</Frontegg.ContextProvider>


```

### Audits

Let your customers record the events, activities and changes made to their tenant.

Frontegg’s Managed Audit Logs feature allows a SaaS company to embed an end-to-end working feature in just 5 lines of code.

Embedding the Managed Audits component is a simple one-liner

```javascript
import * as Frontegg from '@frontegg/react'

const AuditsContainer = () => {

return (
    <div className="App">
      <Frontegg.ContextProvider value={providerOptions}>
        <Frontegg.Audits />
      </Frontegg.ContextProvider>
    </div>
  );
```
