Initial Commit
15
.browserslistrc
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
|
||||||
|
# For additional information regarding the format and rule options, please see:
|
||||||
|
# https://github.com/browserslist/browserslist#queries
|
||||||
|
|
||||||
|
# For the full list of supported browsers by the Angular framework, please see:
|
||||||
|
# https://angular.io/guide/browser-support
|
||||||
|
|
||||||
|
# You can see what browsers were selected by your queries by running:
|
||||||
|
# npx browserslist
|
||||||
|
|
||||||
|
Chrome >=60
|
||||||
|
Firefox >=63
|
||||||
|
Edge >=79
|
||||||
|
Safari >=13
|
||||||
|
iOS >=13
|
||||||
16
.editorconfig
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# Editor configuration, see https://editorconfig.org
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.ts]
|
||||||
|
quote_type = single
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
max_line_length = off
|
||||||
|
trim_trailing_whitespace = false
|
||||||
46
.eslintrc.json
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"root": true,
|
||||||
|
"ignorePatterns": ["projects/**/*"],
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"files": ["*.ts"],
|
||||||
|
"parserOptions": {
|
||||||
|
"project": ["tsconfig.json"],
|
||||||
|
"createDefaultProgram": true
|
||||||
|
},
|
||||||
|
"extends": [
|
||||||
|
"plugin:@angular-eslint/recommended",
|
||||||
|
"plugin:@angular-eslint/template/process-inline-templates"
|
||||||
|
],
|
||||||
|
"rules": {
|
||||||
|
"@angular-eslint/component-class-suffix": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
"suffixes": ["Page", "Component"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"@angular-eslint/component-selector": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
"type": "element",
|
||||||
|
"prefix": "app",
|
||||||
|
"style": "kebab-case"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"@angular-eslint/directive-selector": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
"type": "attribute",
|
||||||
|
"prefix": "app",
|
||||||
|
"style": "camelCase"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"files": ["*.html"],
|
||||||
|
"extends": ["plugin:@angular-eslint/template/recommended"],
|
||||||
|
"rules": {}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
96
.gitignore
vendored
@ -1,50 +1,68 @@
|
|||||||
# These are some examples of commonly ignored file patterns.
|
# Specifies intentionally untracked files to ignore when using Git
|
||||||
# You should customize this list as applicable to your project.
|
# http://git-scm.com/docs/gitignore
|
||||||
# Learn more about .gitignore:
|
|
||||||
# https://www.atlassian.com/git/tutorials/saving-changes/gitignore
|
|
||||||
|
|
||||||
# Node artifact files
|
*~
|
||||||
node_modules/
|
*.sw[mnpcod]
|
||||||
dist/
|
.tmp
|
||||||
|
*.tmp
|
||||||
|
*.tmp.*
|
||||||
|
UserInterfaceState.xcuserstate
|
||||||
|
$RECYCLE.BIN/
|
||||||
|
|
||||||
# Compiled Java class files
|
|
||||||
*.class
|
|
||||||
|
|
||||||
# Compiled Python bytecode
|
|
||||||
*.py[cod]
|
|
||||||
|
|
||||||
# Log files
|
|
||||||
*.log
|
*.log
|
||||||
|
log.txt
|
||||||
|
|
||||||
# Package files
|
|
||||||
*.jar
|
|
||||||
|
|
||||||
# Maven
|
/.sourcemaps
|
||||||
target/
|
/.versions
|
||||||
dist/
|
/coverage
|
||||||
|
|
||||||
# JetBrains IDE
|
# Ionic
|
||||||
|
/.ionic
|
||||||
|
/www
|
||||||
|
/platforms
|
||||||
|
/plugins
|
||||||
|
|
||||||
|
# Compiled output
|
||||||
|
/dist
|
||||||
|
/tmp
|
||||||
|
/out-tsc
|
||||||
|
/bazel-out
|
||||||
|
|
||||||
|
# Node
|
||||||
|
/node_modules
|
||||||
|
npm-debug.log
|
||||||
|
yarn-error.log
|
||||||
|
|
||||||
|
# IDEs and editors
|
||||||
.idea/
|
.idea/
|
||||||
|
.project
|
||||||
|
.classpath
|
||||||
|
.c9/
|
||||||
|
*.launch
|
||||||
|
.settings/
|
||||||
|
*.sublime-project
|
||||||
|
*.sublime-workspace
|
||||||
|
|
||||||
# Unit test reports
|
# Visual Studio Code
|
||||||
TEST*.xml
|
.vscode/*
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.history/*
|
||||||
|
|
||||||
# Generated by MacOS
|
|
||||||
|
# Miscellaneous
|
||||||
|
/.angular
|
||||||
|
/.angular/cache
|
||||||
|
.sass-cache/
|
||||||
|
/connect.lock
|
||||||
|
/coverage
|
||||||
|
/libpeerconnection.log
|
||||||
|
testem.log
|
||||||
|
/typings
|
||||||
|
|
||||||
|
# System files
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
# Generated by Windows
|
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
|
||||||
# Applications
|
|
||||||
*.app
|
|
||||||
*.exe
|
|
||||||
*.war
|
|
||||||
|
|
||||||
# Large media files
|
|
||||||
*.mp4
|
|
||||||
*.tiff
|
|
||||||
*.avi
|
|
||||||
*.flv
|
|
||||||
*.mov
|
|
||||||
*.wmv
|
|
||||||
|
|
||||||
|
|||||||
181
angular.json
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
{
|
||||||
|
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
||||||
|
"version": 1,
|
||||||
|
"newProjectRoot": "projects",
|
||||||
|
"projects": {
|
||||||
|
"app": {
|
||||||
|
"projectType": "application",
|
||||||
|
"schematics": {},
|
||||||
|
"root": "",
|
||||||
|
"sourceRoot": "src",
|
||||||
|
"prefix": "app",
|
||||||
|
"architect": {
|
||||||
|
"build": {
|
||||||
|
"builder": "@angular-devkit/build-angular:browser",
|
||||||
|
"options": {
|
||||||
|
"outputPath": "www",
|
||||||
|
"index": "src/index.html",
|
||||||
|
"main": "src/main.ts",
|
||||||
|
"polyfills": "src/polyfills.ts",
|
||||||
|
"tsConfig": "tsconfig.app.json",
|
||||||
|
"inlineStyleLanguage": "scss",
|
||||||
|
"assets": [
|
||||||
|
{
|
||||||
|
"glob": "**/*",
|
||||||
|
"input": "src/assets",
|
||||||
|
"output": "assets"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"glob": "**/*.svg",
|
||||||
|
"input": "node_modules/ionicons/dist/ionicons/svg",
|
||||||
|
"output": "./svg"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
|
||||||
|
"src/theme/variables.scss",
|
||||||
|
"src/global.scss"
|
||||||
|
],
|
||||||
|
"scripts": []
|
||||||
|
},
|
||||||
|
"configurations": {
|
||||||
|
"production": {
|
||||||
|
"budgets": [
|
||||||
|
{
|
||||||
|
"type": "initial",
|
||||||
|
"maximumWarning": "2mb",
|
||||||
|
"maximumError": "5mb"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "anyComponentStyle",
|
||||||
|
"maximumWarning": "2kb",
|
||||||
|
"maximumError": "4kb"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fileReplacements": [
|
||||||
|
{
|
||||||
|
"replace": "src/environments/environment.ts",
|
||||||
|
"with": "src/environments/environment.prod.ts"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputHashing": "all"
|
||||||
|
},
|
||||||
|
"development": {
|
||||||
|
"buildOptimizer": false,
|
||||||
|
"optimization": false,
|
||||||
|
"vendorChunk": true,
|
||||||
|
"extractLicenses": false,
|
||||||
|
"sourceMap": true,
|
||||||
|
"namedChunks": true
|
||||||
|
},
|
||||||
|
"ci": {
|
||||||
|
"progress": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"defaultConfiguration": "production"
|
||||||
|
},
|
||||||
|
"serve": {
|
||||||
|
"builder": "@angular-devkit/build-angular:dev-server",
|
||||||
|
"configurations": {
|
||||||
|
"production": {
|
||||||
|
"browserTarget": "app:build:production"
|
||||||
|
},
|
||||||
|
"development": {
|
||||||
|
"browserTarget": "app:build:development"
|
||||||
|
},
|
||||||
|
"ci": {
|
||||||
|
"progress": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"defaultConfiguration": "development"
|
||||||
|
},
|
||||||
|
"extract-i18n": {
|
||||||
|
"builder": "@angular-devkit/build-angular:extract-i18n",
|
||||||
|
"options": {
|
||||||
|
"browserTarget": "app:build"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"test": {
|
||||||
|
"builder": "@angular-devkit/build-angular:karma",
|
||||||
|
"options": {
|
||||||
|
"main": "src/test.ts",
|
||||||
|
"polyfills": "src/polyfills.ts",
|
||||||
|
"tsConfig": "tsconfig.spec.json",
|
||||||
|
"karmaConfig": "karma.conf.js",
|
||||||
|
"inlineStyleLanguage": "scss",
|
||||||
|
"assets": [
|
||||||
|
{
|
||||||
|
"glob": "**/*",
|
||||||
|
"input": "src/assets",
|
||||||
|
"output": "assets"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"glob": "**/*.svg",
|
||||||
|
"input": "node_modules/ionicons/dist/ionicons/svg",
|
||||||
|
"output": "./svg"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"src/theme/variables.scss",
|
||||||
|
"src/global.scss"
|
||||||
|
],
|
||||||
|
"scripts": []
|
||||||
|
},
|
||||||
|
"configurations": {
|
||||||
|
"ci": {
|
||||||
|
"progress": false,
|
||||||
|
"watch": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lint": {
|
||||||
|
"builder": "@angular-eslint/builder:lint",
|
||||||
|
"options": {
|
||||||
|
"lintFilePatterns": [
|
||||||
|
"src/**/*.ts",
|
||||||
|
"src/**/*.html"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ionic-cordova-serve": {
|
||||||
|
"builder": "@ionic/cordova-builders:cordova-serve",
|
||||||
|
"options": {
|
||||||
|
"cordovaBuildTarget": "app:ionic-cordova-build",
|
||||||
|
"devServerTarget": "app:serve"
|
||||||
|
},
|
||||||
|
"configurations": {
|
||||||
|
"production": {
|
||||||
|
"cordovaBuildTarget": "app:ionic-cordova-build:production",
|
||||||
|
"devServerTarget": "app:serve:production"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ionic-cordova-build": {
|
||||||
|
"builder": "@ionic/cordova-builders:cordova-build",
|
||||||
|
"options": {
|
||||||
|
"browserTarget": "app:build"
|
||||||
|
},
|
||||||
|
"configurations": {
|
||||||
|
"production": {
|
||||||
|
"browserTarget": "app:build:production"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cli": {
|
||||||
|
"schematicCollections": [
|
||||||
|
"@ionic/angular-toolkit"
|
||||||
|
],
|
||||||
|
"analytics": false
|
||||||
|
},
|
||||||
|
"schematics": {
|
||||||
|
"@ionic/angular-toolkit:component": {
|
||||||
|
"styleext": "scss"
|
||||||
|
},
|
||||||
|
"@ionic/angular-toolkit:page": {
|
||||||
|
"styleext": "scss"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
121
config.xml
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<widget id="io.ionic.starter" version="0.0.10" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||||
|
<name>vnms-app</name>
|
||||||
|
<description>An awesome Ionic/Cordova app.</description>
|
||||||
|
<author email="hi@ionicframework.com" href="http://ionicframework.com/">Ionic Framework Team</author>
|
||||||
|
<content src="index.html" />
|
||||||
|
<access origin="*" />
|
||||||
|
<allow-intent href="http://*/*" />
|
||||||
|
<allow-intent href="https://*/*" />
|
||||||
|
<allow-intent href="tel:*" />
|
||||||
|
<allow-intent href="sms:*" />
|
||||||
|
<allow-intent href="mailto:*" />
|
||||||
|
<allow-intent href="geo:*" />
|
||||||
|
<preference name="ScrollEnabled" value="false" />
|
||||||
|
<preference name="BackupWebStorage" value="none" />
|
||||||
|
<preference name="SplashMaintainAspectRatio" value="true" />
|
||||||
|
<preference name="FadeSplashScreenDuration" value="300" />
|
||||||
|
<preference name="SplashShowOnlyFirstTime" value="false" />
|
||||||
|
<preference name="SplashScreen" value="screen" />
|
||||||
|
<preference name="SplashScreenDelay" value="3000" />
|
||||||
|
<preference name="android-minSdkVersion" value="22" />
|
||||||
|
<preference name="android-targetSdkVersion" value="33" />
|
||||||
|
<preference name="AndroidXEnabled" value="true" />
|
||||||
|
<preference name="android-compileSdkVersion" value="33" />
|
||||||
|
<preference name="ShowSplashScreenSpinner" value="false" />
|
||||||
|
<preference name="AndroidLaunchMode" value="singleTask" />
|
||||||
|
<platform name="android">
|
||||||
|
<preference name="Scheme" value="http" />
|
||||||
|
<config-file parent="/manifest" target="AndroidManifest.xml">
|
||||||
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
|
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
||||||
|
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
|
<uses-feature android:name="android.hardware.camera.autofocus" />
|
||||||
|
<uses-feature android:name="android.hardware.camera2.full" />
|
||||||
|
<uses-feature android:name="android.hardware.camera2.autofocus" />
|
||||||
|
<uses-permission android:name="android.webkit.PermissionRequest" />
|
||||||
|
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
||||||
|
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
|
||||||
|
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
|
<uses-feature android:name="android.hardware.camera" android:required="true" />
|
||||||
|
</config-file>
|
||||||
|
<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
|
||||||
|
<allow-intent href="market:*" />
|
||||||
|
<icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
|
||||||
|
<icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
|
||||||
|
<icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
|
||||||
|
<icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
|
||||||
|
<icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
|
||||||
|
<icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
|
||||||
|
<splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
|
||||||
|
<splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
|
||||||
|
<splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
|
||||||
|
<splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
|
||||||
|
<splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
|
||||||
|
<splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
|
||||||
|
<splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
|
||||||
|
<splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
|
||||||
|
<splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
|
||||||
|
<splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
|
||||||
|
<splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
|
||||||
|
<splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
|
||||||
|
</platform>
|
||||||
|
<platform name="ios">
|
||||||
|
<allow-intent href="itms:*" />
|
||||||
|
<allow-intent href="itms-apps:*" />
|
||||||
|
<icon height="57" src="resources/ios/icon/icon.png" width="57" />
|
||||||
|
<icon height="114" src="resources/ios/icon/icon@2x.png" width="114" />
|
||||||
|
<icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
|
||||||
|
<icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58" />
|
||||||
|
<icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87" />
|
||||||
|
<icon height="20" src="resources/ios/icon/icon-20.png" width="20" />
|
||||||
|
<icon height="40" src="resources/ios/icon/icon-20@2x.png" width="40" />
|
||||||
|
<icon height="60" src="resources/ios/icon/icon-20@3x.png" width="60" />
|
||||||
|
<icon height="48" src="resources/ios/icon/icon-24@2x.png" width="48" />
|
||||||
|
<icon height="55" src="resources/ios/icon/icon-27.5@2x.png" width="55" />
|
||||||
|
<icon height="29" src="resources/ios/icon/icon-29.png" width="29" />
|
||||||
|
<icon height="58" src="resources/ios/icon/icon-29@2x.png" width="58" />
|
||||||
|
<icon height="87" src="resources/ios/icon/icon-29@3x.png" width="87" />
|
||||||
|
<icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
|
||||||
|
<icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" />
|
||||||
|
<icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120" />
|
||||||
|
<icon height="88" src="resources/ios/icon/icon-44@2x.png" width="88" />
|
||||||
|
<icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
|
||||||
|
<icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" />
|
||||||
|
<icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
|
||||||
|
<icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" />
|
||||||
|
<icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" />
|
||||||
|
<icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
|
||||||
|
<icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" />
|
||||||
|
<icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
|
||||||
|
<icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" />
|
||||||
|
<icon height="167" src="resources/ios/icon/icon-83.5@2x.png" width="167" />
|
||||||
|
<icon height="172" src="resources/ios/icon/icon-86@2x.png" width="172" />
|
||||||
|
<icon height="196" src="resources/ios/icon/icon-98@2x.png" width="196" />
|
||||||
|
<icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
|
||||||
|
<splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
|
||||||
|
<splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" />
|
||||||
|
<splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
|
||||||
|
<splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
|
||||||
|
<splash height="1125" src="resources/ios/splash/Default-Landscape-2436h.png" width="2436" />
|
||||||
|
<splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
|
||||||
|
<splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" />
|
||||||
|
<splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" />
|
||||||
|
<splash height="2732" src="resources/ios/splash/Default-Portrait@~ipadpro.png" width="2048" />
|
||||||
|
<splash height="2048" src="resources/ios/splash/Default-Landscape@~ipadpro.png" width="2732" />
|
||||||
|
<splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" />
|
||||||
|
<splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
|
||||||
|
<splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
|
||||||
|
<splash height="2436" src="resources/ios/splash/Default-2436h.png" width="1125" />
|
||||||
|
<splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" />
|
||||||
|
</platform>
|
||||||
|
<plugin name="cordova-plugin-statusbar" spec="2.4.2" />
|
||||||
|
<plugin name="cordova-plugin-device" spec="2.0.2" />
|
||||||
|
<plugin name="cordova-plugin-camera" spec="^6.0.0" />
|
||||||
|
<plugin name="cordova-plugin-splashscreen" spec="5.0.2" />
|
||||||
|
<plugin name="cordova-plugin-ionic-webview" spec="^5.0.0" />
|
||||||
|
<plugin name="cordova-plugin-ionic-keyboard" spec="^2.0.5" />
|
||||||
|
</widget>
|
||||||
7
ionic.config.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"name": "vnms-app",
|
||||||
|
"integrations": {
|
||||||
|
"cordova": {}
|
||||||
|
},
|
||||||
|
"type": "angular"
|
||||||
|
}
|
||||||
44
karma.conf.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
// Karma configuration file, see link for more information
|
||||||
|
// https://karma-runner.github.io/1.0/config/configuration-file.html
|
||||||
|
|
||||||
|
module.exports = function (config) {
|
||||||
|
config.set({
|
||||||
|
basePath: '',
|
||||||
|
frameworks: ['jasmine', '@angular-devkit/build-angular'],
|
||||||
|
plugins: [
|
||||||
|
require('karma-jasmine'),
|
||||||
|
require('karma-chrome-launcher'),
|
||||||
|
require('karma-jasmine-html-reporter'),
|
||||||
|
require('karma-coverage'),
|
||||||
|
require('@angular-devkit/build-angular/plugins/karma')
|
||||||
|
],
|
||||||
|
client: {
|
||||||
|
jasmine: {
|
||||||
|
// you can add configuration options for Jasmine here
|
||||||
|
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
|
||||||
|
// for example, you can disable the random execution with `random: false`
|
||||||
|
// or set a specific seed with `seed: 4321`
|
||||||
|
},
|
||||||
|
clearContext: false // leave Jasmine Spec Runner output visible in browser
|
||||||
|
},
|
||||||
|
jasmineHtmlReporter: {
|
||||||
|
suppressAll: true // removes the duplicated traces
|
||||||
|
},
|
||||||
|
coverageReporter: {
|
||||||
|
dir: require('path').join(__dirname, './coverage/app'),
|
||||||
|
subdir: '.',
|
||||||
|
reporters: [
|
||||||
|
{ type: 'html' },
|
||||||
|
{ type: 'text-summary' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
reporters: ['progress', 'kjhtml'],
|
||||||
|
port: 9876,
|
||||||
|
colors: true,
|
||||||
|
logLevel: config.LOG_INFO,
|
||||||
|
autoWatch: true,
|
||||||
|
browsers: ['Chrome'],
|
||||||
|
singleRun: false,
|
||||||
|
restartOnFileChange: true
|
||||||
|
});
|
||||||
|
};
|
||||||
18665
package-lock.json
generated
Normal file
89
package.json
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
{
|
||||||
|
"name": "sts-school-app",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"author": "Ionic Framework",
|
||||||
|
"homepage": "https://ionicframework.com/",
|
||||||
|
"scripts": {
|
||||||
|
"ng": "ng",
|
||||||
|
"start": "ng serve",
|
||||||
|
"build": "ng build",
|
||||||
|
"watch": "ng build --watch --configuration development",
|
||||||
|
"test": "ng test",
|
||||||
|
"lint": "ng lint"
|
||||||
|
},
|
||||||
|
"private": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@angular/common": "^15.0.0",
|
||||||
|
"@angular/core": "^15.0.0",
|
||||||
|
"@angular/forms": "^15.0.0",
|
||||||
|
"@angular/material": "^15.0.0",
|
||||||
|
"@angular/platform-browser": "^15.0.0",
|
||||||
|
"@angular/platform-browser-dynamic": "^15.0.0",
|
||||||
|
"@angular/router": "^15.0.0",
|
||||||
|
"@awesome-cordova-plugins/camera": "^6.2.0",
|
||||||
|
"@awesome-cordova-plugins/splash-screen": "^6.2.0",
|
||||||
|
"@awesome-cordova-plugins/status-bar": "^6.2.0",
|
||||||
|
"@ionic/angular": "^6.1.9",
|
||||||
|
"@ionic/cli": "^7.1.1",
|
||||||
|
"@ionic/cordova-builders": "^7.0.0",
|
||||||
|
"@ionic/storage-angular": "^3.0.6",
|
||||||
|
"ionicons": "^6.0.3",
|
||||||
|
"ng2-charts": "^4.1.1",
|
||||||
|
"rxjs": "~7.5.0",
|
||||||
|
"tslib": "^2.3.0",
|
||||||
|
"zone.js": "~0.11.4"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@angular-devkit/build-angular": "^15.0.0",
|
||||||
|
"@angular-eslint/builder": "^14.0.0",
|
||||||
|
"@angular-eslint/eslint-plugin": "^14.0.0",
|
||||||
|
"@angular-eslint/eslint-plugin-template": "^14.0.0",
|
||||||
|
"@angular-eslint/template-parser": "^14.0.0",
|
||||||
|
"@angular/cli": "^15.0.0",
|
||||||
|
"@angular/compiler": "^15.0.0",
|
||||||
|
"@angular/compiler-cli": "^15.0.0",
|
||||||
|
"@angular/language-service": "^15.0.0",
|
||||||
|
"@ionic/angular-toolkit": "^6.0.0",
|
||||||
|
"@types/jasmine": "~4.0.0",
|
||||||
|
"@types/node": "^12.11.1",
|
||||||
|
"@typescript-eslint/eslint-plugin": "5.3.0",
|
||||||
|
"@typescript-eslint/parser": "5.3.0",
|
||||||
|
"cordova-android": "^12.0.0",
|
||||||
|
"cordova-plugin-camera": "^6.0.0",
|
||||||
|
"cordova-plugin-device": "^2.0.2",
|
||||||
|
"cordova-plugin-ionic-keyboard": "^2.0.5",
|
||||||
|
"cordova-plugin-ionic-webview": "^5.0.0",
|
||||||
|
"cordova-plugin-splashscreen": "5.0.2",
|
||||||
|
"cordova-plugin-statusbar": "^2.4.2",
|
||||||
|
"eslint": "^7.6.0",
|
||||||
|
"eslint-plugin-import": "2.22.1",
|
||||||
|
"eslint-plugin-jsdoc": "30.7.6",
|
||||||
|
"eslint-plugin-prefer-arrow": "1.2.2",
|
||||||
|
"jasmine-core": "~4.3.0",
|
||||||
|
"jasmine-spec-reporter": "~5.0.0",
|
||||||
|
"karma": "~6.4.0",
|
||||||
|
"karma-chrome-launcher": "~3.1.0",
|
||||||
|
"karma-coverage": "~2.2.0",
|
||||||
|
"karma-coverage-istanbul-reporter": "~3.0.2",
|
||||||
|
"karma-jasmine": "~5.1.0",
|
||||||
|
"karma-jasmine-html-reporter": "~2.0.0",
|
||||||
|
"ts-node": "~8.3.0",
|
||||||
|
"typescript": "~4.8.4"
|
||||||
|
},
|
||||||
|
"description": "An Ionic project",
|
||||||
|
"cordova": {
|
||||||
|
"plugins": {
|
||||||
|
"cordova-plugin-statusbar": {},
|
||||||
|
"cordova-plugin-device": {},
|
||||||
|
"cordova-plugin-splashscreen": {},
|
||||||
|
"cordova-plugin-ionic-webview": {},
|
||||||
|
"cordova-plugin-ionic-keyboard": {},
|
||||||
|
"cordova-plugin-camera": {
|
||||||
|
"ANDROIDX_CORE_VERSION": "1.6.+"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"platforms": [
|
||||||
|
"android"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
8
resources/README.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
These are Cordova resources. You can replace icon.png and splash.png and run
|
||||||
|
`ionic cordova resources` to generate custom icons and splash screens for your
|
||||||
|
app. See `ionic cordova resources --help` for details.
|
||||||
|
|
||||||
|
Cordova reference documentation:
|
||||||
|
|
||||||
|
- Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html
|
||||||
|
- Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/
|
||||||
BIN
resources/android/icon/drawable-hdpi-icon.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
resources/android/icon/drawable-ldpi-icon.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
resources/android/icon/drawable-mdpi-icon.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
resources/android/icon/drawable-xhdpi-icon.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
resources/android/icon/drawable-xxhdpi-icon.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
resources/android/icon/drawable-xxxhdpi-icon.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
resources/android/splash/drawable-land-hdpi-screen.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
resources/android/splash/drawable-land-ldpi-screen.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |
BIN
resources/android/splash/drawable-land-mdpi-screen.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
resources/android/splash/drawable-land-xhdpi-screen.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
resources/android/splash/drawable-land-xxhdpi-screen.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
resources/android/splash/drawable-land-xxxhdpi-screen.png
Normal file
|
After Width: | Height: | Size: 111 KiB |
BIN
resources/android/splash/drawable-port-hdpi-screen.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
resources/android/splash/drawable-port-ldpi-screen.png
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
resources/android/splash/drawable-port-mdpi-screen.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
resources/android/splash/drawable-port-xhdpi-screen.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
resources/android/splash/drawable-port-xxhdpi-screen.png
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
resources/android/splash/drawable-port-xxxhdpi-screen.png
Normal file
|
After Width: | Height: | Size: 99 KiB |
6
resources/android/xml/network_security_config.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<network-security-config>
|
||||||
|
<domain-config cleartextTrafficPermitted="true">
|
||||||
|
<domain includeSubdomains="true">localhost</domain>
|
||||||
|
</domain-config>
|
||||||
|
</network-security-config>
|
||||||
BIN
resources/icon.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
resources/ios/icon/icon-1024.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
resources/ios/icon/icon-20.png
Normal file
|
After Width: | Height: | Size: 686 B |
BIN
resources/ios/icon/icon-20@2x.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
resources/ios/icon/icon-20@3x.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
resources/ios/icon/icon-24@2x.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
resources/ios/icon/icon-27.5@2x.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
resources/ios/icon/icon-29.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
resources/ios/icon/icon-29@2x.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
resources/ios/icon/icon-29@3x.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
resources/ios/icon/icon-40.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
resources/ios/icon/icon-40@2x.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
resources/ios/icon/icon-40@3x.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
resources/ios/icon/icon-44@2x.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
resources/ios/icon/icon-50.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
resources/ios/icon/icon-50@2x.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
resources/ios/icon/icon-60.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
resources/ios/icon/icon-60@2x.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
resources/ios/icon/icon-60@3x.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
resources/ios/icon/icon-72.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
resources/ios/icon/icon-72@2x.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
resources/ios/icon/icon-76.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
resources/ios/icon/icon-76@2x.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
resources/ios/icon/icon-83.5@2x.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
resources/ios/icon/icon-86@2x.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
resources/ios/icon/icon-98@2x.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
resources/ios/icon/icon-small.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
resources/ios/icon/icon-small@2x.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
resources/ios/icon/icon-small@3x.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
resources/ios/icon/icon.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
resources/ios/icon/icon@2x.png
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
resources/ios/splash/Default-2436h.png
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
resources/ios/splash/Default-568h@2x~iphone.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
resources/ios/splash/Default-667h.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
resources/ios/splash/Default-736h.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
resources/ios/splash/Default-Landscape-2436h.png
Normal file
|
After Width: | Height: | Size: 113 KiB |
BIN
resources/ios/splash/Default-Landscape-736h.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
resources/ios/splash/Default-Landscape@2x~ipad.png
Normal file
|
After Width: | Height: | Size: 133 KiB |
BIN
resources/ios/splash/Default-Landscape@~ipadpro.png
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
resources/ios/splash/Default-Landscape~ipad.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
resources/ios/splash/Default-Portrait@2x~ipad.png
Normal file
|
After Width: | Height: | Size: 147 KiB |
BIN
resources/ios/splash/Default-Portrait@~ipadpro.png
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
resources/ios/splash/Default-Portrait~ipad.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
resources/ios/splash/Default@2x~iphone.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
resources/ios/splash/Default@2x~universal~anyany.png
Normal file
|
After Width: | Height: | Size: 120 KiB |
BIN
resources/ios/splash/Default~iphone.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
resources/splash.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
55
src/app/app-routing.module.ts
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
|
||||||
|
import { AuthenticationComponent } from './pages/authentication/authentication.component';
|
||||||
|
import { vnmsComponent } from './pages/vnms/vnms/vnms.component';
|
||||||
|
import { AuthGuard } from './guard/auth.guard';
|
||||||
|
|
||||||
|
const routes: Routes = [
|
||||||
|
// {
|
||||||
|
// path: 'home',
|
||||||
|
// loadChildren: () => import('./home/home.module').then( m => m.HomePageModule)
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: '',
|
||||||
|
// redirectTo: 'home',
|
||||||
|
// pathMatch: 'full'
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
path: '',
|
||||||
|
redirectTo: 'authentication',
|
||||||
|
pathMatch: 'full'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path : '',
|
||||||
|
component:vnmsComponent,
|
||||||
|
canActivate:[AuthGuard],
|
||||||
|
children :[
|
||||||
|
{
|
||||||
|
path:'vnms',
|
||||||
|
loadChildren: () => import('./pages/vnms/vnms.module').then(m=>m.vnmsModule),
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path : '',
|
||||||
|
component:AuthenticationComponent,
|
||||||
|
children:[
|
||||||
|
{
|
||||||
|
path : 'authentication',
|
||||||
|
loadChildren:()=> import('./pages/authentication/authentication.module').then(m=>m.AuthenticationModule)
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'home',
|
||||||
|
loadChildren: () => import('./home/home.module').then(m => m.HomePageModule)
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })
|
||||||
|
],
|
||||||
|
exports: [RouterModule]
|
||||||
|
})
|
||||||
|
export class AppRoutingModule { }
|
||||||
140
src/app/app.component.html
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
<ion-app>
|
||||||
|
<ion-split-pane contentId="main-content">
|
||||||
|
<ion-menu contentId="main-content" type="overlay" class="full-width-menu">
|
||||||
|
<ion-header>
|
||||||
|
<ion-toolbar color="dark" class="user-profile">
|
||||||
|
|
||||||
|
<!-- <ion-item margin-bottom> -->
|
||||||
|
<!-- <ion-avatar slot="start" class="user-avatar">
|
||||||
|
<img src="assets/img/avatar.png">
|
||||||
|
</ion-avatar> -->
|
||||||
|
<ion-grid>
|
||||||
|
<ion-row>
|
||||||
|
<ion-col size="2" > <img src="assets/assets/icon/arrow-square-right.png"></ion-col>
|
||||||
|
<ion-col size="10" style="padding-left: 4rem;"> <ion-text color="medium" >
|
||||||
|
<span class="t-title" style="text-transform: capitalize;">My Account</span>
|
||||||
|
</ion-text></ion-col>
|
||||||
|
|
||||||
|
</ion-row>
|
||||||
|
</ion-grid>
|
||||||
|
|
||||||
|
<ion-label >
|
||||||
|
|
||||||
|
|
||||||
|
<!-- <ion-text color="secondary">
|
||||||
|
<h3>
|
||||||
|
{{user_role}}
|
||||||
|
</h3>
|
||||||
|
</ion-text> -->
|
||||||
|
<!-- <ion-menu-toggle class="mto" auto-hide="false">
|
||||||
|
<a class="text08" tappable (click)="goToEditProgile()">
|
||||||
|
<ion-text color="medium">
|
||||||
|
|
||||||
|
<ion-icon name="cog-outline"></ion-icon>
|
||||||
|
<strong>Edit profile</strong>
|
||||||
|
</ion-text>
|
||||||
|
</a> <ion-text color="secondary"> | </ion-text>
|
||||||
|
<a class="text08" tappable (click)="logout()">
|
||||||
|
<ion-text color="medium">
|
||||||
|
<ion-icon name="log-out"></ion-icon>
|
||||||
|
<strong>Logout</strong>
|
||||||
|
</ion-text>
|
||||||
|
</a>
|
||||||
|
</ion-menu-toggle> -->
|
||||||
|
</ion-label>
|
||||||
|
<!-- </ion-item> -->
|
||||||
|
|
||||||
|
</ion-toolbar>
|
||||||
|
</ion-header>
|
||||||
|
<ion-content class="menu_content">
|
||||||
|
<div class="menu-header" style="text-align:center !important;" >
|
||||||
|
<!--material-design-background-->
|
||||||
|
<!-- <img class="user-avatar round" style="height:111px;max-width:111px;" [src]="userDetails.profilepic" onerror="this.src='assets/img/avatar/girl-avatar.png'"
|
||||||
|
/> -->
|
||||||
|
<!-- <p class="name">{{userDetails.user_first_name}} {{userDetails.user_last_name}}</p>
|
||||||
|
<span>({{userDetails.role_name}})</span> -->
|
||||||
|
</div>
|
||||||
|
<!-- <div class="menu-header" style="text-align:center !important;" >
|
||||||
|
material-design-background-->
|
||||||
|
<!-- <img class="user-avatar round" style="height:111px;max-width:111px;" src="../../../../assets/img/avatar/girl-avatar.png" onerror="this.src='assets/img/avatar/girl-avatar.png'"
|
||||||
|
/>
|
||||||
|
<p class="name">Sineedge PD Officer</p>
|
||||||
|
</div> -->
|
||||||
|
<div class="hr"></div>
|
||||||
|
<ion-grid class="grid-content">
|
||||||
|
<ion-row>
|
||||||
|
|
||||||
|
<ion-col > <span class="content">
|
||||||
|
Gopikrishnan<br />
|
||||||
|
<span class="content-min content-sm">
|
||||||
|
|
||||||
|
gopikrishnan@gmail.com</span>
|
||||||
|
</span></ion-col>
|
||||||
|
|
||||||
|
|
||||||
|
</ion-row>
|
||||||
|
</ion-grid>
|
||||||
|
|
||||||
|
|
||||||
|
<ion-card *ngFor="let item of appPages; let i = index" (click)="getImg(i,item.title)" style=" margin-top: 1rem;" [routerLink]="[item.url]" >
|
||||||
|
<ion-card-header>
|
||||||
|
<ion-card-title>
|
||||||
|
|
||||||
|
<ion-grid>
|
||||||
|
<ion-row>
|
||||||
|
<ion-col size="2" style=" padding-left: 1rem;"> <img [src]="i === imgVal ? item.src2 : item.src"></ion-col>
|
||||||
|
<ion-col size="8" >
|
||||||
|
<span style="text-transform: capitalize;"> {{ item.title }}</span>
|
||||||
|
</ion-col>
|
||||||
|
<ion-col size="2" style=" padding-left: 1rem;" >
|
||||||
|
<!-- <img src="assets/assets/icon/menu/arrow-col.png"> -->
|
||||||
|
<img [src]="i != imgVal ? 'assets/assets/icon/menu/arrow-col.png' : 'assets/assets/icon/menu/arrow.png'">
|
||||||
|
</ion-col>
|
||||||
|
</ion-row>
|
||||||
|
</ion-grid>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ion-card-title>
|
||||||
|
</ion-card-header>
|
||||||
|
<!-- <ion-card-content>
|
||||||
|
{{ item.content }}
|
||||||
|
</ion-card-content> -->
|
||||||
|
</ion-card>
|
||||||
|
|
||||||
|
<ion-card style=" margin-top: 6rem;" (click)="logout()">
|
||||||
|
<ion-card-header>
|
||||||
|
<ion-card-title>
|
||||||
|
|
||||||
|
<ion-grid>
|
||||||
|
<ion-row>
|
||||||
|
<ion-col size="2" > <img src="assets/assets/icon/menu/logout-col.png"></ion-col>
|
||||||
|
<ion-col size="8" >
|
||||||
|
<span style="text-transform: capitalize;"> Log Out</span>
|
||||||
|
</ion-col>
|
||||||
|
<ion-col size="2" >
|
||||||
|
<!-- <img src="assets/assets/icon/menu/logout-col.png"> -->
|
||||||
|
</ion-col>
|
||||||
|
</ion-row>
|
||||||
|
</ion-grid>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ion-card-title>
|
||||||
|
</ion-card-header>
|
||||||
|
|
||||||
|
</ion-card>
|
||||||
|
<ion-row>
|
||||||
|
<ion-col style="text-align: center;"> v1.0</ion-col>
|
||||||
|
|
||||||
|
</ion-row>
|
||||||
|
|
||||||
|
|
||||||
|
</ion-content>
|
||||||
|
</ion-menu>
|
||||||
|
<ion-router-outlet id="main-content"></ion-router-outlet>
|
||||||
|
</ion-split-pane>
|
||||||
|
<!-- <div class="body-container"> -->
|
||||||
|
<!-- <ion-router-outlet id="main-content"></ion-router-outlet> -->
|
||||||
|
<!-- </div> -->
|
||||||
|
</ion-app>
|
||||||
130
src/app/app.component.scss
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
:host {
|
||||||
|
// ion-content {
|
||||||
|
// //--background: linear-gradient(135deg, var(--ion-color-dark), var(--ion-color-primary));
|
||||||
|
// }
|
||||||
|
|
||||||
|
// ion-list {
|
||||||
|
// &.list-md {
|
||||||
|
// padding: 0;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
ion-card-header{
|
||||||
|
padding: 1px;
|
||||||
|
}
|
||||||
|
ion-content{
|
||||||
|
padding: 2rem;
|
||||||
|
}
|
||||||
|
ion-card{
|
||||||
|
margin-left: 1.5rem;
|
||||||
|
margin-right: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.full-width-menu {
|
||||||
|
--width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.t-title{
|
||||||
|
color: #FFF;
|
||||||
|
font-size: 18px;
|
||||||
|
font-family: Roboto;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 16px;text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
ion-toolbar {
|
||||||
|
//text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content{
|
||||||
|
color: var(--text-4, #3A3A3A);
|
||||||
|
font-size: 20px;
|
||||||
|
font-family: Roboto;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-sm{
|
||||||
|
color: var(--text-4, #3A3A3A);
|
||||||
|
font-size: 16px;
|
||||||
|
font-family: Roboto;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 16px;
|
||||||
|
}
|
||||||
|
.grid-content{
|
||||||
|
// padding: 7.5px;
|
||||||
|
margin: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
ion-card {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
border-radius: 10px;
|
||||||
|
background: var(--white, #FFF);
|
||||||
|
|
||||||
|
/* white */
|
||||||
|
box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
ion-card-header {
|
||||||
|
ion-card-title {
|
||||||
|
|
||||||
|
color: #3A3A3A;
|
||||||
|
font-size: 16px;
|
||||||
|
font-family: Roboto;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ion-card-content {
|
||||||
|
padding: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ion-card-content:hover {
|
||||||
|
background-color: #043FB9; /* Set the desired hover background color */
|
||||||
|
ion-card-title{
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ion-card-content:hover {
|
||||||
|
background-color: #043FB9; /* Set the desired hover background color */
|
||||||
|
ion-card-title{
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Add hover effects to the card content */
|
||||||
|
ion-card:hover ion-card-content:hover{
|
||||||
|
ion-card-title{
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
color: #fff; /* Set the desired hover text color */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add hover effects to the card header */
|
||||||
|
ion-card:hover ion-card-header:hover {
|
||||||
|
background-color: #043FB9; /* Set the desired hover header background color */
|
||||||
|
ion-card-title{
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ion-card-content:hover {
|
||||||
|
color: #fff; /* Set the desired hover text color */
|
||||||
|
ion-card-title{
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
21
src/app/app.component.spec.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||||
|
import { TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { AppComponent } from './app.component';
|
||||||
|
|
||||||
|
describe('AppComponent', () => {
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [AppComponent],
|
||||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
|
}).compileComponents();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create the app', () => {
|
||||||
|
const fixture = TestBed.createComponent(AppComponent);
|
||||||
|
const app = fixture.componentInstance;
|
||||||
|
expect(app).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
249
src/app/app.component.ts
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
|
||||||
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
|
import { Platform, NavController, MenuController } from '@ionic/angular';
|
||||||
|
import { SplashScreen } from '@awesome-cordova-plugins/splash-screen/ngx';
|
||||||
|
import { StatusBar } from '@awesome-cordova-plugins/status-bar/ngx';
|
||||||
|
|
||||||
|
import { Pages } from './interfaces/pages';
|
||||||
|
import { VnmsService } from './pages/vnms/vnms.service';
|
||||||
|
@Component({
|
||||||
|
selector: 'app-root',
|
||||||
|
templateUrl: 'app.component.html',
|
||||||
|
styleUrls: ['app.component.scss'],
|
||||||
|
})
|
||||||
|
export class AppComponent {
|
||||||
|
|
||||||
|
public appPages: Array<Pages>;
|
||||||
|
user:any =[];
|
||||||
|
user_role:any =[];
|
||||||
|
imgVal:any=-10;;
|
||||||
|
constructor(
|
||||||
|
private platform: Platform,private menuCtrl: MenuController,
|
||||||
|
private splashScreen: SplashScreen,
|
||||||
|
private statusBar: StatusBar,
|
||||||
|
public navCtrl: NavController,public _api:VnmsService,
|
||||||
|
) {
|
||||||
|
|
||||||
|
|
||||||
|
this._api.sideDetails_observable$.subscribe((res:any) => {
|
||||||
|
console.log('menu', res);
|
||||||
|
|
||||||
|
if(res.length != 0){
|
||||||
|
localStorage.setItem('user_name',res.userName)
|
||||||
|
localStorage.setItem('user_role',res.role)
|
||||||
|
this.user = res.userName
|
||||||
|
this.user_role = res.role
|
||||||
|
|
||||||
|
if( this.user_role == 'DRIVER'){
|
||||||
|
|
||||||
|
//this.appPages.filter((arr:any)=>{return arr.title == 'Delivery list'})
|
||||||
|
}else{
|
||||||
|
|
||||||
|
//this.appPages.filter((arr:any)=>{return arr.title == 'Orders'})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
this.user = localStorage.getItem('user_name')
|
||||||
|
this.user_role = localStorage.getItem('user_role')
|
||||||
|
|
||||||
|
|
||||||
|
this.appPages = [
|
||||||
|
{
|
||||||
|
title: 'Home',
|
||||||
|
url: '/home-results',
|
||||||
|
direct: 'root',
|
||||||
|
icon: 'home',
|
||||||
|
src:'assets/assets/icon/menu/home-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/home.png'
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
title: 'My Orders',
|
||||||
|
url: '/view-report',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'list',
|
||||||
|
src:'assets/assets/icon/menu/list-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/list.png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Orders',
|
||||||
|
url: '/driver-list',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'list',
|
||||||
|
src:'assets/assets/icon/dark-box.png',
|
||||||
|
src2:'assets/assets/icon/box.png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Order Summary',
|
||||||
|
url: '/driver-list/list/return/summary',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'list',
|
||||||
|
src:'assets/assets/icon/menu/list-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/list.png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'My Profile',
|
||||||
|
url: '/edit-profile',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'list',
|
||||||
|
src:'assets/assets/icon/menu/profile-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/profile.png'
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
title: 'Our Services',
|
||||||
|
url: '/settings',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'cog',
|
||||||
|
src:'assets/assets/icon/menu/service-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/service.png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Contact Us',
|
||||||
|
url: '/contact',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'information-circle-outline',
|
||||||
|
src:'assets/assets/icon/menu/contact-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/contact.png'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
if( this.user_role == 'DRIVER'){
|
||||||
|
|
||||||
|
this.appPages = [
|
||||||
|
{
|
||||||
|
title: 'Home',
|
||||||
|
url: '/home-results',
|
||||||
|
direct: 'root',
|
||||||
|
icon: 'home',
|
||||||
|
src:'assets/assets/icon/menu/home-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/home.png'
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
title: 'Orders',
|
||||||
|
url: '/driver-list',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'list',
|
||||||
|
src:'assets/assets/icon/dark-box.png',
|
||||||
|
src2:'assets/assets/icon/box.png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Order Summary',
|
||||||
|
url: '/driver-list/summary',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'list',
|
||||||
|
src:'assets/assets/icon/menu/list-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/list.png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'My Profile',
|
||||||
|
url: '/edit-profile',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'list',
|
||||||
|
src:'assets/assets/icon/menu/profile-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/profile.png'
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
title: 'Contact Us',
|
||||||
|
url: '/contact',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'information-circle-outline',
|
||||||
|
src:'assets/assets/icon/menu/contact-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/contact.png'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}else{
|
||||||
|
|
||||||
|
this.appPages = [
|
||||||
|
{
|
||||||
|
title: 'Home',
|
||||||
|
url: '/home-results',
|
||||||
|
direct: 'root',
|
||||||
|
icon: 'home',
|
||||||
|
src:'assets/assets/icon/menu/home-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/home.png'
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
title: 'My Orders',
|
||||||
|
url: '/view-report',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'list',
|
||||||
|
src:'assets/assets/icon/menu/list-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/list.png'
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
title: 'My Profile',
|
||||||
|
url: '/edit-profile',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'list',
|
||||||
|
src:'assets/assets/icon/menu/profile-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/profile.png'
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
title: 'Our Services',
|
||||||
|
url: '/settings',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'cog',
|
||||||
|
src:'assets/assets/icon/menu/service-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/service.png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Contact Us',
|
||||||
|
url: '/contact',
|
||||||
|
direct: 'forward',
|
||||||
|
icon: 'information-circle-outline',
|
||||||
|
src:'assets/assets/icon/menu/contact-col.png',
|
||||||
|
src2:'assets/assets/icon/menu/contact.png'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
this.initializeApp();
|
||||||
|
|
||||||
|
|
||||||
|
console.log(this.user_role, this.appPages)
|
||||||
|
}
|
||||||
|
|
||||||
|
initializeApp() {
|
||||||
|
this.platform.ready().then(() => {
|
||||||
|
this.statusBar.styleDefault();
|
||||||
|
this.splashScreen.hide();
|
||||||
|
}).catch(() => {});
|
||||||
|
}
|
||||||
|
|
||||||
|
goToEditProgile() {
|
||||||
|
this.navCtrl.navigateForward('edit-profile');
|
||||||
|
}
|
||||||
|
|
||||||
|
logout() {
|
||||||
|
localStorage.clear();
|
||||||
|
this.navCtrl.navigateRoot('/');
|
||||||
|
}
|
||||||
|
getImg(i:any,title:any){
|
||||||
|
this.imgVal = i
|
||||||
|
|
||||||
|
this.closeMenu()
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
closeMenu() {
|
||||||
|
this.menuCtrl.close(); // Close the menu
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
65
src/app/app.module.ts
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
// import { NgModule } from '@angular/core';
|
||||||
|
// import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
// import { RouteReuseStrategy } from '@angular/router';
|
||||||
|
|
||||||
|
// import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
|
||||||
|
|
||||||
|
// import { AppComponent } from './app.component';
|
||||||
|
// import { AppRoutingModule } from './app-routing.module';
|
||||||
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||||
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
import { RouteReuseStrategy } from '@angular/router';
|
||||||
|
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
|
||||||
|
import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
|
||||||
|
import { AppComponent } from './app.component';
|
||||||
|
import { AppRoutingModule } from './app-routing.module';
|
||||||
|
import { FormsModule } from '@angular/forms';
|
||||||
|
import { CommonModule, HashLocationStrategy, LocationStrategy } from '@angular/common';
|
||||||
|
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
|
import { MatIconModule, } from '@angular/material/icon';
|
||||||
|
// import { IonicStorageModule } from '@ionic/storage';
|
||||||
|
import { IonicStorageModule } from '@ionic/storage-angular';
|
||||||
|
//import { CacheModule } from 'ionic-cache';
|
||||||
|
import { LoginModule } from './pages/authentication/login/login.module';
|
||||||
|
import { AuthenticationComponent } from './pages/authentication/authentication.component';
|
||||||
|
import { vnmsComponent } from './pages/vnms/vnms/vnms.component';
|
||||||
|
import { SplashScreen } from '@awesome-cordova-plugins/splash-screen/ngx';
|
||||||
|
import { StatusBar } from '@awesome-cordova-plugins/status-bar/ngx';
|
||||||
|
import { vnmsModule } from './pages/vnms/vnms.module';
|
||||||
|
import { AuthGuard } from './guard/auth.guard';
|
||||||
|
import { TokenInterceptor } from './guard/token.interceptor';
|
||||||
|
@NgModule({
|
||||||
|
declarations: [AppComponent,AuthenticationComponent,vnmsComponent],
|
||||||
|
imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule,
|
||||||
|
BrowserModule,
|
||||||
|
FormsModule,
|
||||||
|
CommonModule,
|
||||||
|
IonicModule.forRoot(),
|
||||||
|
AppRoutingModule,
|
||||||
|
vnmsModule,
|
||||||
|
|
||||||
|
BrowserAnimationsModule,
|
||||||
|
HttpClientModule,
|
||||||
|
IonicStorageModule.forRoot({
|
||||||
|
name: '_mydb',
|
||||||
|
driverOrder: ['indexeddb', 'sqlite', 'websql'],
|
||||||
|
|
||||||
|
}),
|
||||||
|
// CacheModule.forRoot(),
|
||||||
|
// ImageNameModule,
|
||||||
|
LoginModule,
|
||||||
|
|
||||||
|
//SocketIoModule.forRoot(socketConfig),
|
||||||
|
MatIconModule,
|
||||||
|
MatButtonModule,
|
||||||
|
],
|
||||||
|
providers: [ StatusBar,AuthGuard, {
|
||||||
|
provide: HTTP_INTERCEPTORS,
|
||||||
|
useClass: TokenInterceptor,
|
||||||
|
multi: true
|
||||||
|
},{provide: LocationStrategy, useClass: HashLocationStrategy},
|
||||||
|
SplashScreen,{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }],
|
||||||
|
bootstrap: [AppComponent],
|
||||||
|
})
|
||||||
|
export class AppModule {}
|
||||||
71
src/app/guard/auth.guard.ts
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild } from '@angular/router';
|
||||||
|
import { Observable , of } from 'rxjs';
|
||||||
|
// import { CognitoService } from '../AwsService/cognito.service';
|
||||||
|
@Injectable()
|
||||||
|
export class AuthGuard implements CanActivate, CanActivateChild {
|
||||||
|
|
||||||
|
constructor(private router: Router) { }
|
||||||
|
|
||||||
|
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
|
||||||
|
|
||||||
|
const token = localStorage.getItem('user_token');
|
||||||
|
|
||||||
|
if(token != '' && token != undefined && token != null){
|
||||||
|
return true
|
||||||
|
}else{
|
||||||
|
// alert("else");
|
||||||
|
// this.router.navigate(['auth/login']);
|
||||||
|
this.router.navigate(['/authentication/login'])
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (this.shared.getToken()) {
|
||||||
|
// alert("if");
|
||||||
|
// // this.router.navigate(['']);
|
||||||
|
// return true
|
||||||
|
// } else {
|
||||||
|
// alert("else");
|
||||||
|
// this.router.navigate(['/login']);
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
|
||||||
|
|
||||||
|
const token = localStorage.getItem('user_token');
|
||||||
|
console.log(token)
|
||||||
|
if(token != '' && token != undefined && token != null){
|
||||||
|
return true
|
||||||
|
}else{
|
||||||
|
// setTimeout(() => {
|
||||||
|
this.router.navigate(['/authentication/login']);
|
||||||
|
return false;
|
||||||
|
// },1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (this.shared.getCurrentUser() != null && this.shared.getToken()) {
|
||||||
|
// // alert("if");
|
||||||
|
|
||||||
|
// return true;
|
||||||
|
// } else {
|
||||||
|
// // alert("else");
|
||||||
|
// setTimeout(() => {
|
||||||
|
// this.router.navigate(['authentication/login']);
|
||||||
|
// return false;
|
||||||
|
// },1000);
|
||||||
|
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
// public getToken(): string {
|
||||||
|
// return localStorage.getItem('token');
|
||||||
|
// }
|
||||||
|
|
||||||
|
// public logOut() {
|
||||||
|
// localStorage.clear();
|
||||||
|
// if(localStorage.getItem('token') === null){
|
||||||
|
// this.router.navigate(['/login']);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
16
src/app/guard/token.interceptor.spec.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import { TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { TokenInterceptor } from './token.interceptor';
|
||||||
|
|
||||||
|
describe('TokenInterceptor', () => {
|
||||||
|
beforeEach(() => TestBed.configureTestingModule({
|
||||||
|
providers: [
|
||||||
|
TokenInterceptor
|
||||||
|
]
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should be created', () => {
|
||||||
|
const interceptor: TokenInterceptor = TestBed.inject(TokenInterceptor);
|
||||||
|
expect(interceptor).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
39
src/app/guard/token.interceptor.ts
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import {
|
||||||
|
HttpRequest,
|
||||||
|
HttpHandler,
|
||||||
|
HttpEvent,
|
||||||
|
HttpInterceptor
|
||||||
|
} from '@angular/common/http';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class TokenInterceptor implements HttpInterceptor {
|
||||||
|
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
// intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<unknown>> {
|
||||||
|
// return next.handle(request);
|
||||||
|
// }
|
||||||
|
|
||||||
|
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
|
||||||
|
// const tokenUrl = 'http://example.com/token'; // replace with your token url
|
||||||
|
const token = localStorage.getItem('user_token');
|
||||||
|
let authReq:any; // get the token from local storage
|
||||||
|
if(token != '' && token != undefined && token != null){
|
||||||
|
authReq = req.clone({
|
||||||
|
setHeaders: {
|
||||||
|
// 'Authorization': environment.authorization,
|
||||||
|
'x-access-token': token
|
||||||
|
}
|
||||||
|
// headers: req.headers.set('x-access-token', token).set('Content-Type', 'multipart/form-data')
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
authReq = req;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return next.handle(authReq);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
16
src/app/home/home-routing.module.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { RouterModule, Routes } from '@angular/router';
|
||||||
|
import { HomePage } from './home.page';
|
||||||
|
|
||||||
|
const routes: Routes = [
|
||||||
|
{
|
||||||
|
path: '',
|
||||||
|
component: HomePage,
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [RouterModule.forChild(routes)],
|
||||||
|
exports: [RouterModule]
|
||||||
|
})
|
||||||
|
export class HomePageRoutingModule {}
|
||||||
19
src/app/home/home.module.ts
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { IonicModule } from '@ionic/angular';
|
||||||
|
import { FormsModule } from '@angular/forms';
|
||||||
|
import { HomePage } from './home.page';
|
||||||
|
|
||||||
|
import { HomePageRoutingModule } from './home-routing.module';
|
||||||
|
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
FormsModule,
|
||||||
|
IonicModule,
|
||||||
|
HomePageRoutingModule
|
||||||
|
],
|
||||||
|
declarations: [HomePage]
|
||||||
|
})
|
||||||
|
export class HomePageModule {}
|
||||||
20
src/app/home/home.page.html
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<ion-header [translucent]="true">
|
||||||
|
<ion-toolbar>
|
||||||
|
<ion-title>
|
||||||
|
Blank
|
||||||
|
</ion-title>
|
||||||
|
</ion-toolbar>
|
||||||
|
</ion-header>
|
||||||
|
|
||||||
|
<ion-content [fullscreen]="true">
|
||||||
|
<ion-header collapse="condense">
|
||||||
|
<ion-toolbar>
|
||||||
|
<ion-title size="large">Blank</ion-title>
|
||||||
|
</ion-toolbar>
|
||||||
|
</ion-header>
|
||||||
|
|
||||||
|
<div id="container">
|
||||||
|
<strong>Ready to create an app?</strong>
|
||||||
|
<p>Start with Ionic <a target="_blank" rel="noopener noreferrer" href="https://ionicframework.com/docs/components">UI Components</a></p>
|
||||||
|
</div>
|
||||||
|
</ion-content>
|
||||||
27
src/app/home/home.page.scss
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#container {
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
#container strong {
|
||||||
|
font-size: 20px;
|
||||||
|
line-height: 26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#container p {
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 22px;
|
||||||
|
|
||||||
|
color: #8c8c8c;
|
||||||
|
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#container a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
24
src/app/home/home.page.spec.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
import { IonicModule } from '@ionic/angular';
|
||||||
|
|
||||||
|
import { HomePage } from './home.page';
|
||||||
|
|
||||||
|
describe('HomePage', () => {
|
||||||
|
let component: HomePage;
|
||||||
|
let fixture: ComponentFixture<HomePage>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [HomePage],
|
||||||
|
imports: [IonicModule.forRoot()]
|
||||||
|
}).compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(HomePage);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
12
src/app/home/home.page.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-home',
|
||||||
|
templateUrl: 'home.page.html',
|
||||||
|
styleUrls: ['home.page.scss'],
|
||||||
|
})
|
||||||
|
export class HomePage {
|
||||||
|
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
}
|
||||||
8
src/app/interfaces/pages.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
export interface Pages {
|
||||||
|
title: string;
|
||||||
|
url: any;
|
||||||
|
direct?: string;
|
||||||
|
icon?: string;
|
||||||
|
src?:string;
|
||||||
|
src2?:string;
|
||||||
|
}
|
||||||
3
src/app/myaccount/myaccount.component.html
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<p>
|
||||||
|
myaccount works!
|
||||||
|
</p>
|
||||||
0
src/app/myaccount/myaccount.component.scss
Normal file
24
src/app/myaccount/myaccount.component.spec.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
||||||
|
import { IonicModule } from '@ionic/angular';
|
||||||
|
|
||||||
|
import { MyaccountComponent } from './myaccount.component';
|
||||||
|
|
||||||
|
describe('MyaccountComponent', () => {
|
||||||
|
let component: MyaccountComponent;
|
||||||
|
let fixture: ComponentFixture<MyaccountComponent>;
|
||||||
|
|
||||||
|
beforeEach(waitForAsync(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ MyaccountComponent ],
|
||||||
|
imports: [IonicModule.forRoot()]
|
||||||
|
}).compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(MyaccountComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
14
src/app/myaccount/myaccount.component.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-myaccount',
|
||||||
|
templateUrl: './myaccount.component.html',
|
||||||
|
styleUrls: ['./myaccount.component.scss'],
|
||||||
|
})
|
||||||
|
export class MyaccountComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit() {}
|
||||||
|
|
||||||
|
}
|
||||||
16
src/app/pages/authentication/auth.service.spec.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import { TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { AuthService } from './auth.service';
|
||||||
|
|
||||||
|
describe('AuthService', () => {
|
||||||
|
let service: AuthService;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
TestBed.configureTestingModule({});
|
||||||
|
service = TestBed.inject(AuthService);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be created', () => {
|
||||||
|
expect(service).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
21
src/app/pages/authentication/auth.service.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
|
||||||
|
import { BehaviorSubject, Observable, of } from 'rxjs';
|
||||||
|
import { catchError } from 'rxjs/operators';
|
||||||
|
import { environment } from '../../../environments/environment';
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class AuthService {
|
||||||
|
private apiUrl = environment.apiEndpoint;
|
||||||
|
constructor(private _http: HttpClient) { }
|
||||||
|
|
||||||
|
|
||||||
|
getLoginToken(params:any): Observable<any> {
|
||||||
|
console.log(params.email)
|
||||||
|
return this._http.post<any>(this.apiUrl + "loginapp",{'email':params.email,'password':params.password})
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
1
src/app/pages/authentication/auth/auth.component.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
<h1>safe</h1>
|
||||||