# portal-components
A library of components that are shared across portals

## Project Status
[![Build][Build-Status-Image]][Build-Status-Url]

## Contributing
Requires node `v10`+

### Installation
This project contains multiple child projects. You can install dependencies for all of the nested projects by running `npm run install_all`. This will install all necesary dependencies, and `link` the projects in the lib folder into the demo project.
```sh
git clone git@github.com:555platform/portal-components.git
nvm use 8.11
npm run install_all
```
Creat a `demo/server/.env` with the following settings (environment dependent)
```env
CLIENT_ID=<INSERT>
CLIENT_SECRET=<INSERT>
DOMAIN=pop.service.srv
REDIRECT_URI=http://localhost:4044/auth/iris/callback
AUTH_SERVER=http://localhost:4655
EKSURL=http://localhost:3007
PORT=4044
LOGIN_SUCCESS=http://localhost:4050/dashboard
LOGIN_FAILURE=http://localhost:4050/
JWT_PUBLIC_KEY=<INSERT>
LOG_FOLDER=logs
LOG_ROTATION_POLICY="YYYY-MM-DD"
SERVER_NAME=localhost:4044
DATABASE_URIS="localhost:27017"
DATABASE_NAME=identities
DB_USER=""
DB_PASSWORD=""
DATABASE_REPLSET=""
```
Creat a `demo/client/.env.development.local` with the following settings (environment dependent)
```env
REACT_APP_CLIENT_ID=<INSERT>
REACT_APP_DOMAIN=pop.service.srv
REACT_APP_REDIRECT_URI=http://localhost:4044/auth/iris/callback
REACT_APP_AUTH_SERVER=http://localhost:4655
```

### Workflow (Standalone)
1. Update files in `lib/server` and/or `lib/client`.
2. Build your changes
```sh
# from the root of the `portal-components` project
npm run build
```
3. Run the demo application
```sh
# from the root of the `portal-components` project
npm start
```
Note: Live reloading is set up *for the demo app code only*. Changes to files under `demo/` should be picked up immediately, however changes to any of the code under `lib/` will require a rebuild. Be sure to run `npm run build` from the root of the project whenever you make changes to `lib` code!

[Build-Status-Url]: https://drone-server.555.systems/555platform/portal-components
[Build-Status-Image]: https://drone-server.555.systems/api/badges/555platform/portal-components/status.svg

### Workflow (Portal integration)
When you are ready to integrate your component(s) with one of the portals:
1. Link `portal-components`
```sh
# from the root of the `portal-components` project
npm link
```
2. Build any changes
    1. Manual build
    ```sh
    # from the root of the `portal-components` project
    npm run build
    ```
    2. Automatic rebuild
    ```sh
    # from the root of the `portal-components` project
    npm run watch
    ```
3. From a local clone of either [`pop`](https://github.com/555platform/pop) or [`developer-portal`](https://github.com/555platform/developer-portal), link `portal-components` as a dependency
```sh
# from the root of either pop or developer-portal
npm link portal-components
cd client
npm link portal-components
```
4. You can now import your common code e.g `import { client as clientCommon } from 'portal-components'`.

