ngx-los
Contenido
- Iniciando proyecto en Angular
- Requisitos
- Instalación
- SCSS
- HTML
- Configuración de enviroments
- Configuración de Angular CLI
- Configuración de package.json
- Configuración de Suscripciones de Graphql
- Configuración de Sentry
- Redux
- Errores de Graphql
- AppModule
- AppComponent HTML
- AppComponent TS
Iniciar proyecto en Angular
Para iniciar un proyecto que contenga la seguridad de LOS es necesario contar con la versión 9 de Angular, para validar que versión tienes instalada es necesario teclear en consola lo siguiente:
ng version
Se tendrá que mostrar en pantalla la versión de Angular CLI y tendrá que ser la 9 mas estable.
_ _ ____ _ ___ / \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _| / △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | | / ___ \| | | |
Confirmando que tenemos la versión 9 mas estable, procedemos a crear el proyecto con el siguiente comando.
ng new [Nombre-aplicación] --style=scss
Nota: El nombre de las aplicaciones debe ser escrito en minúsculas y separadas por un signo de menos (-) en caso de ser dos palabras. Agregamos el argumento --style=scss para indicarle que queremos usar scss en nuestro proyecto
Creará la plantilla base de Angular necesaria para trabajar e instalará todos las dependencias de npm.
CREATE nombre-aplicacion/angular.json CREATE nombre-aplicacion/package.json CREATE nombre-aplicacion/README.md CREATE nombre-aplicacion/tsconfig.json CREATE nombre-aplicacion/tslint.json CREATE nombre-aplicacion/.editorconfig CREATE nombre-aplicacion/.gitignore CREATE nombre-aplicacion/browserslist CREATE nombre-aplicacion/karma.conf.js CREATE nombre-aplicacion/tsconfig.app.json CREATE nombre-aplicacion/tsconfig.spec.json CREATE nombre-aplicacion/src/favicon.ico CREATE nombre-aplicacion/src/index.html CREATE nombre-aplicacion/src/main.ts CREATE nombre-aplicacion/src/polyfills.ts CREATE nombre-aplicacion/src/styles.scss CREATE nombre-aplicacion/src/test.ts CREATE nombre-aplicacion/src/assets/.gitkeep CREATE nombre-aplicacion/src/environments/environment.prod.ts CREATE nombre-aplicacion/src/environments/environment.ts CREATE nombre-aplicacion/src/app/app.module.ts CREATE nombre-aplicacion/src/app/app.component.html CREATE nombre-aplicacion/src/app/app.component.spec.ts CREATE nombre-aplicacion/src/app/app.component.ts CREATE nombre-aplicacion/src/app/app.component.scss CREATE nombre-aplicacion/e2e/protractor.conf.js CREATE nombre-aplicacion/e2e/tsconfig.json CREATE nombre-aplicacion/e2e/src/app.e2e-spec.ts CREATE nombre-aplicacion/e2e/src/app.po.ts - Installing packages...√ Packages installed successfully. Successfully initialized git.
Una vez finalice con la leyenda de Successfully initialized git.
tendremos listo nuestra plantilla base de Angular 9 lista para hacer la instalación de nuestra plantilla de seguridad.
Requisitos
Una vez creado el proyecto es necesario realizar la instalación de Angular Material mediante el siguiente comando.
ng add @angular/material
El proceso de instalación nos pedirá seleccionar un tema por defecto, seleccionamos Indigo/Pink. También nos preguntará si queremos establecer globalmente la tipografía de Angular Material, ademas de las animaciones del navegador, aceptamos ambas.
Skipping installation: Package already installed? Choose a prebuilt theme name, or "custom"
(Opcional) Para verficar que se realizo la instalacion correctamente podemos mostrar un componente de Angular material en pantalla realizando la importacion del modulo corresponiente del componente que queremos usar, en este caso un
mat-slider
import
Agregamos el tag <mat-slider>
a nuestro app.component.html como sigue:
<mat-slider min="1" max="100" step="1" value="1"></mat-slider>
Ejecutamos nuestra aplicacion con el comando ng serve
ingresa en el explorador a la direccio http://localhost:4200
Deberias ver el componente mat-slider en pantalla.
Instalación
Para la instalación comenzaremos con la siguiente instrucción dentro del proyecto vacío.
npm i ngx-los
SCSS
Es necesario configurar el SCSS para heredar todos los temas diseñados para la plantilla, buscamos el archivo de estilos de capas localizado en src/styles.scss
y agregamos la siguiente línea.
;
HTML
En la seccion <head>
agregamos la siguiente linea de codigo html
El cuerpo <body>
lo dejaremos de la siguiente manera.
Esto para dejar un "loading" cuando la pagina aun se este cargando.
Configuración de enviroments
Nota: Nota: Los archivos de ambiente deben hacer referencia al archivo package.json para realizar la importación del mismo es necesario agregar la siguiente configuracion en el archivo tsconfig.json.
"compilerOptions": ... "resolveJsonModule": true
Para hacer la configuración de ambientes es necesario tener la siguiente estructura en los archivos localizados en src/enviroments/enviroment.ts
y src/enviroments/enviroment.prod.ts
con su respectiva información de ambiente.
El archivo tiene que contener lo siguiente
;const environment = production: false app: id: "" version: packagejsonversion commit: "{COMMIT}" branch: "{BRANCH}" clientId: "" clientSecret: "" urls: key: "oauth" value: "http://host/url_endpoint_token" key: "login" value: "host/url_login" sentry: dsn: "http://url_sentry" showReportDialog: false template: storageName: "storage-name" graphql: uri: "host/url_endpoint_graphql" subscriptions: enabled: true uri: "ws://url_endpoint_graphql_subscriptions" header: title: "Titulo de Apliacion" theme: "nombre-tema" darkTheme: false colorThemeVisible: true fullScreenVisible: true wishHappyBirthday: true sidemenu: menuOpen: true menuOpenApps: false selectRoomsVisible: true ;
Llave | Descripción |
---|---|
production |
Saber si el ambiente es producción |
urls |
Contiene todas las URLs necesarias para el proyecto |
urls.auth |
Validar credenciales de acceso |
urls.auth.host |
URL para validar credenciales de acceso |
urls.auth.path.token |
End point para solicitar el token de acceso |
urls.auth.path.userChangePassword |
End point para que el usuario pueda cambiar su contraseña |
app.id |
Id de la aplicación |
app.version |
Version de la aplicacion obtenida del archivo package.json |
app.commit |
Id de commit del Git (este campo lo remplaza automaticamente gitlab) |
app.branch |
Branch de Git (este campo lo remplaza automaticamente gitlab) |
app.clientId |
Identificador client de la aplicacion |
app.clientSecret |
Secreto de aplicación cliente |
app.urls |
Arreglo con las urls que usara la aplicacion |
app.urls[indice].key |
llave para accesar al elemento en el arreglo |
app.urls[indice].value |
valor de la url |
app.sentry.dsn |
(Data Source Name) es la URL que representa la configuracion requerida por sentry |
app.showReportDialog |
Indica si se debe mostrar el dialog de feedback de usuario cuando se presenta un error |
template.storageName |
Nombre de la llave que se usara para guardar el token de la aplicacion en el storage |
template.graphql.subscriptions.enabled |
Indica si el socket de suscripciones estara habilitado |
template.graphql.subscriptions.uri |
url del socket de suscripciónes de graphql |
template.graphql.uri |
url del endpoint de graphql que usará el template |
header.title |
Titulo de la aplicación |
header.theme |
Tema que usara por default nuestra aplicacion |
header.darkTheme |
Indica si la aplicacion usara el tema osucuro |
header.colorThemeVisible |
Indica si se mostrara visible la opcion para cambiar tema |
header.fullScreenVisible |
Indica si se mostrara visible la opcion para cambiar a pantalla completa |
header.wishHappyBirthday |
Indica si se mostrara una felicitacion cuando el empleado cumpla año |
sidemenu.menuOpen |
Indica si al ingresar al sistema el menu se mostrara abierto |
sidemenu.menuOpenApps |
Indica si al ingresar al sistema los menus de aplicaciones se mostraran abierto |
sidemenu.selectRoomsVisible |
Indica si al ingresar al sistema la aplicación mostrara el combo de salas a las que se tiene acceso |
Es necesario también realizar una copia del archivo src/enviroments/enviroment.prod.ts
y renombrarlos de la siguiente manera src/enviroments/enviroment.dev.ts
y src/enviroments/enviroment.qa.ts
.
Configuración de Angular CLI
Abrimos el archivo angular.json ubicado en la raiz del proyecto,
a continuación ubicamos la siguiente propiedad projects/[nombre-proyecto]/architect/build/configurations
y agregamos la siguiente configuracion
"dev": "fileReplacements": "replace": "src/environments/environment.ts" "with": "src/environments/environment.dev.ts" "qa": "fileReplacements": "replace": "src/environments/environment.ts" "with": "src/environments/environment.qa.ts"
Configuración de package.json
Abrimos el archivo package.json ubicado en la raiz del proyecto,
en la propiedad scripts
agregamos la siguientes tareas:
"build:qa": "ng build --prod --configuration=qa" "build:dev": "ng build --prod --configuration=dev"
Una vez realizado el paso anterior podremos compilar nuestra aplicación apuntando a cualquiera de los ambientes previamente definidos, por ejemplo la siguiente instruccion de terminal compiará la aplicacion para el ambiente dev
:
npm run build:dev
Suscripciónes de Graphql
En nuestro archivos environment ubicamos la propiedad template/graphql
y agregamos la siguiente sub propiedad:
subscriptions: enabled: true uri: 'ws://url_subscriptions'
Sentry
En nuestro archivos environment ubicamos la propiedad template/graphql/app
y agregamos la siguiente sub propiedad:
sentry: dsn: 'http://url_dsn' showReportDialog: false
Redux
Para hacer la configuración de Redux es necesario crear un archivo en la siguiente estructura src/app/app.redux.ts
con el siguiente contenido
;; const reducers = auth: AuthauthReducers app: TemplateappReducers room: AuthroomReducers header: TemplateheaderReducers sidemenu: TemplatesideMenuReducers footer: TemplatefooterReducers;
Manejo de errores de graphql
Es necesario crear el siguiente archivo: src/app/app.error.ts
;;;;; const getToken = { const authStorage = localStorage; if authStorage return JSONaccess_token; return '';}; const hasErrorMessage = grapqhlErrors: GraphQLError name: string: { let hasError = false; for const error of grapqhlErrors const messageError = typeof errormessage === 'object' ? errormessage as anyerror : errormessage; if messageError === name hasError = true; return hasError;}; const hasStatusCode = grapqhlErrors: GraphQLError statusCode: number: { let hasError = false; for const error of grapqhlErrors const code: number = typeof errormessage === 'object' ? errormessage as anystatusCode as number : Numbererrormessage; if code === statusCode hasError = true; return hasError;}; const validateAuth = { let message = ''; if const token = ; if token message = 'No tienes los permisos necesarios para hacer esta acción'; else const hash = '/login'; if windowlocationhash > -1 else const redirectUrl = windowlocationhref; ; message = 'No has iniciado sesión, serás redireccionado en 3 segundos'; return message;}; { return ;} const getUrl = { const item = urls; if item return itemvalue; else return ''; }; // ###### Escribe aquí tus funciones // Code... // ######
AppModule
;;;;;;;;;;;;;;;; const options = storageName: environmenttemplatestorageName graphql: uri: environmenttemplategraphqluri subscriptions: environmenttemplategraphqlsubscriptions errorLink sentry: environmentappsentry; @ {}
AppComponent HTML
Localizamos el archivo src/app/app.component.html
borramos su contenido y dejamos la siguiente configuración.
AppComponent TS
Localizamos el archivo src/app/app.component.ts
dejamos la siguiente configuración.
;;; @ implements OnInit { } async { thislosAppService; thislosHeaderService; thislosSideMenuService; }