## Conductor UI

The UI is a standard `create-react-app` React Single Page Application (SPA). To get started, with Node 14 and `yarn` installed, first run `yarn install` from within the `/ui` directory to retrieve package dependencies.

For more information regarding CRA configuration and usage, see the official [doc site](https://create-react-app.dev/).

> ### For upgrading users
>
> The UI is designed to operate directly with the Conductor Server API. A Node `express` backend is no longer required.

### Development Server

To run the UI on the bundled development server, run `yarn run start`. Navigate your browser to `http://localhost:5000`.

To enable errors inspector module export env var: `REACT_APP_ENABLE_ERRORS_INSPECTOR=true`, then run `yarn start`.

#### Reverse Proxy Configuration

By default, the development server proxies requests to `http://localhost:8080/api`.

To use a different Conductor Server, set the `WF_SERVER` environment variable:

```
export WF_SERVER=http://localhost:8081
yarn run start
```

For additional customization (e.g., path rewriting), edit `setupProxy.js`. Note that this file is only used by the development server.

### Hosting for Production

There is no need to "build" the project unless you require compiled assets to host on a production web server. In this case, the project can be built with the command `yarn build`. The assets will be produced to `/build`.

Your hosting environment should make the Conductor Server API available on the same domain. This avoids complexities regarding cross-origin data fetching. The default path prefix is `/api`. If a different prefix is desired, `plugins/fetch.js` can be modified to customize the API fetch behavior.

See `docker/serverAndUI` for an `nginx` based example.

#### Different host path

The static UI would work when rendered from any host route.
The default is '/'. You can customize this by setting the 'homepage' field in package.json
Refer

- https://docs.npmjs.com/cli/v9/configuring-npm/package-json#homepage
- https://create-react-app.dev/docs/deployment/#building-for-relative-paths

### Customization Hooks

For ease of maintenance, a number of touch points for customization have been removed to `/plugins`.

- `AppBarModules.jsx`
- `AppLogo.jsx`
- `env.js`
- `fetch.js`

### Authentication

We recommend that authentication & authorization be de-coupled from the UI and handled at the web server/access gateway.

#### Examples (WIP)

- Basic Auth (username/password) with `nginx`
- Commercial IAM Vendor
- Node `express` server with `passport.js`
