From 62b29b616a3ddc3db5b2e749c3a80628ae68ca16 Mon Sep 17 00:00:00 2001
From: Roberto Callari <robertocallari89@gmail.com>
Date: Mon, 26 Apr 2021 16:24:47 +0200
Subject: [PATCH] updated read.me

---
 README.md | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 211 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index c0cb6301..80e35604 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,25 @@
 # Urbanite UI Template
 This repository contains Urbanite UI Template. This template is built starting from [NGX-Admin](https://akveo.github.io/ngx-admin/), an open source dashboard based on [Angular](https://angular.io/), [Nebular](https://akveo.github.io/nebular/) with [Eva Design System](https://eva.design/).
 
+## Table of Contents
+- [Urbanite UI Template](#urbanite-ui-template)
+  - [Table of Contents](#table-of-contents)
+  - [Requirements](#requirements)
+  - [Install](#install)
+  - [Build & Deploy](#build--deploy)
+  - [Docker](#docker)
+    - [Docker-compose](#docker-compose)
+  - [Development](#development)
+    - [Create a Module](#create-a-module)
+    - [Create a Component](#create-a-component)
+    - [Create a Service](#create-a-service)
+    - [Manage Routing](#manage-routing)
+      - [URBANITE-UI routing](#urbanite-ui-routing)
+      - [Module routing](#module-routing)
+    - [Add Sidebar entry](#add-sidebar-entry)
+    - [Run the template](#run-the-template)
+
+
 ## Requirements
 To properly install and start the template, the following tools should be installed:
 - Git
@@ -9,13 +28,201 @@ To properly install and start the template, the following tools should be instal
 
 ## Install
 To properly install the template, follow these steps:
+
+```bash
+$ git clone https://git.code.tecnalia.com/urbanite/wp5-integration-and-devops/urbanite-ui-template.git
+$ cd urbanite-ui-template
+$ npm install
 ```
-git clone https://git.code.tecnalia.com/urbanite/wp5-integration-and-devops/urbanite-ui-template.git
-cd urbanite-ui-template
-npm install
+
+## Build & Deploy
+To build and deploy the template, follow these steps:
+
+```bash
+$ cd urbanite-ui-template
+$ ng build --prod
+```
+
+This command generates a **dist** folder within the *urbanite-ui-template* folder.
+To properly deploy the application, the content of the **dist** folder should be placed within a server for instance: [Nginx](https://www.nginx.com/) or [Apache HTTP Server](https://httpd.apache.org/).
+
+Please, refer to the official documentation for furhter details:
+- [Angular basic deployment to a remote server](https://angular.io/guide/deployment#basic-deployment-to-a-remote-server)
+- [Server configuration](https://angular.io/guide/deployment#server-configuration)
+
+## Docker
+
+Build docker image:
+
+```bash
+$ cd urbanite-ui-template
+$ docker build -t urbanite/urbanite-ui .
+```
+
+Run docker image:
+
+```bash
+$ cd urbanite-ui-template
+$ docker run -it -p 80:80 urbanite/urbanite-ui
 ```
 
-## Run
+### Docker-compose
+
+The provided **docker-compose.yml** build and deploy the application with an instance of the IDM (Keycloak).
+
+Run the following command to use the docker-compose:
+
+```bash
+$ cd urbanite-ui-template
+$ docker-compose up
+```
+
+## Development
+
+This section summarizes the basic commands and configurations needed to integrate a new tool into the URBANITE-UI.
+
+It is suggested to fork the repository or to create a specific branch for any new tool to be integrated.
+
+### Create a Module
+
+An [Angular module](https://angular.io/guide/architecture-modules) should be created, for any new tool to be integrated.
+To properly create a new module, execute the following command:
+
+```bash
+$ cd urbanite-ui-template
+$ ng generate module pages/<MODULE_NAME> --routing
+```
+
+Replace *<MODULE_NAME>* with the name of the new module.
+
+This command will generate a new folder within the **pages** folder with the specific module and routing files. 
+The routing file is mandatory if the new module is expected to contain more than one [components](#create-a-component).
+
+### Create a Component
+
+An [Angular component](https://angular.io/guide/architecture-components) manages the views.
+At least a component should be created for any new tool to be integrated.
+To create a new component, execute the following command:
+
+```bash
+$ cd urbanite-ui-template
+$ ng generate component pages/<MODULE_FOLDER>/<COMPONENT_NAME>
+```
+Replace *<MODULE_FOLDER>* with the path of the folder to the new module.
+Replace *<COMPONENT_NAME>* with the name of the new component.
+This command will generate a new folder within the **pages/<MODULE_FOLDER>** folder with the component details. 
+
+### Create a Service
+
+An [Angular service](https://angular.io/guide/architecture-services) is used, for instance, to build a REST client.
+To create a new service, execute the following command:
+
+```bash
+$ cd urbanite-ui-template
+$ ng generate service pages/<MODULE_FOLDER>/<SERVICE_NAME>
+```
+
+Replace *<MODULE_FOLDER>* with the path of the folder to the new module.
+Replace *<SERVICE_NAME>* with the name of the new service.
+
+Please, refer to the angular official [documentation](https://angular.io/guide/http#communicating-with-backend-services-using-http) to build a REST client.
+
+### Manage Routing
+
+To visualize the content for any new module the developer needs to manage routing.
+In the urbanite-ui-template there are two levels of routing:
+- [URBANITE-UI routing](#urbanite-ui-routing)
+- [Module routing](#module-routing)
+
+Refer to the official [routing documentation](https://angular.io/guide/router) for additional details.
+
+#### URBANITE-UI routing
+
+To allow the a module to be accessed, the developer should open the ***urbanite-ui-template/src/app/pages/pages-routing.module.ts*** file with the configured IDE and add the following entry:
+
+```typescript
+const routes: Routes = [{
+  path: '',
+
+  component: PagesComponent,
+  children: [
+    {
+      path: 'home',
+      loadChildren: () => import('./home/home.module')
+        .then(m => m.HomeModule),
+    },
+    ...
+    {
+      path: '<module>',
+      loadChildren: () => import('./<MODULE_FOLDER>/<MODULE_NAME>.module')
+        .then(m => m.<MODULE_NAME>),
+    },
+    ...
+```
+
+The **path** represents how the module will be accessible through the browser url.
+Replace *<MODULE_FOLDER>* and *<MODULE_NAME>* with the specific values.
+
+#### Module routing
+
+To allow to access the components defined within each module, the developer should open and edit the ***urbanite-ui-template/src/app/pages/<MODULE_FOLDER>/<MODULE_ROUTING>.module.ts***
+
+Please, replace *<MODULE_FOLDER>* and *<MODULE_ROUTING>* with the corresponding paths.
+
+```typescript
+const routes: Routes = [{
+  path: '',
+  children: [{
+    path: '<COMPONENT_1_URL>',
+    component: <COMPONENT_1>,
+  },
+  {
+    path: '<COMPONENT_2_URL>',
+    component: <COMPONENT_2>,
+  },
+  ...
+  ],
+}];
+```
+
+Each **path**, of the above, represents how the component will be accessible through the browser url.
+The **component** is the component name created within the module.
+
+### Add Sidebar entry
+
+To add a sidebar entry, the developer should open and edit the ***urbanite-ui-template/src/app/pages/pages-menu.ts*** and add the following entry:
+
+```typescript
+export const MENU_ITEMS: NbMenuItem[] = [
+  {
+    title: 'SERVICES',
+    group: true,
+  },
+  {
+    title: 'Home',
+    icon: 'home-outline',
+    link: "/pages/home",
+    data:{
+      name:"home"
+    }
+  },
+  ...
+  {
+    title: '<MODULE_TITLE>',
+    icon: '<MODULE_ICON>',
+    link: "/pages/<MODULE>",
+    data:{
+      name:"<MODULE>"
+    }
+  },
+  ...
+```
+
+The **title** is the label that would be added to the sidebar.
+Replace in the **link** and in the **name** the value defined for the **path** variable on [URBANITE-UI routing](#urbanite-ui-routing).
+About the icon, please select an icon among the [following](https://akveo.github.io/eva-icons/#/) and put its identifier.
+
+### Run the template
 
 To start the application, follow these steps:
 ```
-- 
GitLab