diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 000000000..64a88fbc9 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,91 @@ +# NPM renames .gitignore to .npmignore +# In order to prevent that, we remove the initial "." +# And the CLI then renames it + +# Using Android gitignore template: https://github.com/github/gitignore/blob/master/Android.gitignore + +# Built application files +*.apk +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +release/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/modules.xml +# Comment next line if keeping position of elements in Navigation Editor is relevant for you +.idea/navEditor.xml + +# Keystore files +# Uncomment the following lines if you do not want to check your keystore files in. +#*.jks +#*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +# lint/reports/ + +# Cordova plugins for Capacitor +capacitor-cordova-android-plugins + +# Copied web assets +app/src/main/assets/public diff --git a/android/.idea/jarRepositories.xml b/android/.idea/jarRepositories.xml new file mode 100644 index 000000000..e34606ccd --- /dev/null +++ b/android/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/.idea/misc.xml b/android/.idea/misc.xml new file mode 100644 index 000000000..7bfef59df --- /dev/null +++ b/android/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/android/app/.npmignore b/android/app/.npmignore new file mode 100644 index 000000000..043df802a --- /dev/null +++ b/android/app/.npmignore @@ -0,0 +1,2 @@ +/build/* +!/build/.npmkeep diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 000000000..20c80874b --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,47 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion rootProject.ext.compileSdkVersion + defaultConfig { + applicationId "com.gpr.gabinetedigital" + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +repositories { + flatDir{ + dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs' + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion" + implementation project(':capacitor-android') + implementation 'com.android.support:support-v4:28.0.0' + testImplementation "junit:junit:$junitVersion" + androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" + androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" + implementation project(':capacitor-cordova-android-plugins') +} + +apply from: 'capacitor.build.gradle' + +try { + def servicesJSON = file('google-services.json') + if (servicesJSON.text) { + apply plugin: 'com.google.gms.google-services' + } +} catch(Exception e) { + logger.warn("google-services.json not found, google-services plugin not applied. Push Notifications won't work") +} \ No newline at end of file diff --git a/android/app/capacitor.build.gradle b/android/app/capacitor.build.gradle new file mode 100644 index 000000000..f950a9aa0 --- /dev/null +++ b/android/app/capacitor.build.gradle @@ -0,0 +1,19 @@ +// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN + +android { + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" +dependencies { + + implementation "com.android.support:support-v4:27.+" +} + + +if (hasProperty('postBuildExtras')) { + postBuildExtras() +} diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro new file mode 100644 index 000000000..f1b424510 --- /dev/null +++ b/android/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java b/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java new file mode 100644 index 000000000..8834b0a51 --- /dev/null +++ b/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java @@ -0,0 +1,27 @@ +package com.getcapacitor.myapp; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + + assertEquals("com.getcapacitor.app", appContext.getPackageName()); + } +} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..b4b21b5e7 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/assets/capacitor.config.json b/android/app/src/main/assets/capacitor.config.json new file mode 100644 index 000000000..4a2bb66dd --- /dev/null +++ b/android/app/src/main/assets/capacitor.config.json @@ -0,0 +1,20 @@ +{ + "appId": "com.gpr.gabinetedigital", + "appName": "gabinete-digital", + "webDir": "www", + "npmClient": "npm", + "cordova": { + "preferences": { + "ScrollEnabled": "false", + "BackupWebStorage": "none", + "SplashMaintainAspectRatio": "true", + "FadeSplashScreenDuration": "300", + "SplashShowOnlyFirstTime": "false", + "SplashScreen": "screen", + "SplashScreenDelay": "3000" + } + }, + "android": { + "allowMixedContent": true + } +} diff --git a/android/app/src/main/java/com/gpr/gabinetedigital/MainActivity.java b/android/app/src/main/java/com/gpr/gabinetedigital/MainActivity.java new file mode 100644 index 000000000..879fa210c --- /dev/null +++ b/android/app/src/main/java/com/gpr/gabinetedigital/MainActivity.java @@ -0,0 +1,21 @@ +package com.gpr.gabinetedigital; + +import android.os.Bundle; + +import com.getcapacitor.BridgeActivity; +import com.getcapacitor.Plugin; + +import java.util.ArrayList; + +public class MainActivity extends BridgeActivity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Initializes the Bridge + this.init(savedInstanceState, new ArrayList>() {{ + // Additional plugins you've installed go here + // Ex: add(TotallyAwesomePlugin.class); + }}); + } +} diff --git a/android/app/src/main/res/drawable-land-hdpi/splash.png b/android/app/src/main/res/drawable-land-hdpi/splash.png new file mode 100644 index 000000000..e31573b4f Binary files /dev/null and b/android/app/src/main/res/drawable-land-hdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-mdpi/splash.png b/android/app/src/main/res/drawable-land-mdpi/splash.png new file mode 100644 index 000000000..f7a64923e Binary files /dev/null and b/android/app/src/main/res/drawable-land-mdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-xhdpi/splash.png b/android/app/src/main/res/drawable-land-xhdpi/splash.png new file mode 100644 index 000000000..807725501 Binary files /dev/null and b/android/app/src/main/res/drawable-land-xhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-xxhdpi/splash.png b/android/app/src/main/res/drawable-land-xxhdpi/splash.png new file mode 100644 index 000000000..14c6c8fe3 Binary files /dev/null and b/android/app/src/main/res/drawable-land-xxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-land-xxxhdpi/splash.png b/android/app/src/main/res/drawable-land-xxxhdpi/splash.png new file mode 100644 index 000000000..244ca2506 Binary files /dev/null and b/android/app/src/main/res/drawable-land-xxxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-hdpi/splash.png b/android/app/src/main/res/drawable-port-hdpi/splash.png new file mode 100644 index 000000000..74faaa583 Binary files /dev/null and b/android/app/src/main/res/drawable-port-hdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-mdpi/splash.png b/android/app/src/main/res/drawable-port-mdpi/splash.png new file mode 100644 index 000000000..e944f4ad4 Binary files /dev/null and b/android/app/src/main/res/drawable-port-mdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-xhdpi/splash.png b/android/app/src/main/res/drawable-port-xhdpi/splash.png new file mode 100644 index 000000000..564a82ff9 Binary files /dev/null and b/android/app/src/main/res/drawable-port-xhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-xxhdpi/splash.png b/android/app/src/main/res/drawable-port-xxhdpi/splash.png new file mode 100644 index 000000000..bfabe6871 Binary files /dev/null and b/android/app/src/main/res/drawable-port-xxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-port-xxxhdpi/splash.png b/android/app/src/main/res/drawable-port-xxxhdpi/splash.png new file mode 100644 index 000000000..692907126 Binary files /dev/null and b/android/app/src/main/res/drawable-port-xxxhdpi/splash.png differ diff --git a/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 000000000..c7bd21dbd --- /dev/null +++ b/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/android/app/src/main/res/drawable/ic_launcher_background.xml b/android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 000000000..d5fccc538 --- /dev/null +++ b/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/res/drawable/splash.png b/android/app/src/main/res/drawable/splash.png new file mode 100644 index 000000000..f7a64923e Binary files /dev/null and b/android/app/src/main/res/drawable/splash.png differ diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 000000000..b5ad13870 --- /dev/null +++ b/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 000000000..036d09bc5 --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 000000000..036d09bc5 --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..c023e5059 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 000000000..2127973b2 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 000000000..b441f37d6 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..72905b854 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 000000000..8ed0605c2 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 000000000..9502e47a2 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..4d1e07710 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 000000000..df0f15880 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 000000000..853db043d Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..6cdf97c11 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 000000000..2960cbb61 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 000000000..8e3093a86 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..46de6e255 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 000000000..d2ea9abed Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 000000000..a40d73e9c Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/values/ic_launcher_background.xml b/android/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 000000000..c5d5899fd --- /dev/null +++ b/android/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml new file mode 100644 index 000000000..c967d7a2f --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,7 @@ + + + gabinete-digital + gabinete-digital + com.gpr.gabinetedigital + com.gpr.gabinetedigital + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..bb45498f6 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/xml/config.xml b/android/app/src/main/res/xml/config.xml new file mode 100644 index 000000000..286e39ce1 --- /dev/null +++ b/android/app/src/main/res/xml/config.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/xml/file_paths.xml b/android/app/src/main/res/xml/file_paths.xml new file mode 100644 index 000000000..bd0c4d80d --- /dev/null +++ b/android/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java b/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java new file mode 100644 index 000000000..4a45edf8e --- /dev/null +++ b/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.getcapacitor.myapp; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 000000000..68fcb19d0 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,29 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + + repositories { + google() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:4.0.1' + classpath 'com.google.gms:google-services:4.3.3' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +apply from: "variables.gradle" + +allprojects { + repositories { + google() + jcenter() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/android/capacitor.settings.gradle b/android/capacitor.settings.gradle new file mode 100644 index 000000000..9a5fa872e --- /dev/null +++ b/android/capacitor.settings.gradle @@ -0,0 +1,3 @@ +// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN +include ':capacitor-android' +project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 000000000..0566c221d --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,24 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 000000000..5c2d1cf01 Binary files /dev/null and b/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..39731c2d6 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jan 15 09:55:16 WAT 2021 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/android/gradlew b/android/gradlew new file mode 100644 index 000000000..83f2acfdc --- /dev/null +++ b/android/gradlew @@ -0,0 +1,188 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 000000000..9618d8d96 --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,100 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 000000000..3b4431d77 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,5 @@ +include ':app' +include ':capacitor-cordova-android-plugins' +project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/') + +apply from: 'capacitor.settings.gradle' \ No newline at end of file diff --git a/android/variables.gradle b/android/variables.gradle new file mode 100644 index 000000000..42ed4358a --- /dev/null +++ b/android/variables.gradle @@ -0,0 +1,17 @@ +ext { + minSdkVersion = 21 + compileSdkVersion = 29 + targetSdkVersion = 29 + androidxAppCompatVersion = '1.1.0' + androidxCoreVersion = '1.2.0' + androidxMaterialVersion = '1.1.0-rc02' + androidxBrowserVersion = '1.2.0' + androidxLocalbroadcastmanagerVersion = '1.0.0' + androidxExifInterfaceVersion = '1.2.0' + firebaseMessagingVersion = '20.1.2' + playServicesLocationVersion = '17.0.0' + junitVersion = '4.12' + androidxJunitVersion = '1.1.1' + androidxEspressoCoreVersion = '3.2.0' + cordovaAndroidVersion = '7.0.0' +} \ No newline at end of file diff --git a/capacitor.config.json b/capacitor.config.json index 0967ef424..4a2bb66dd 100644 --- a/capacitor.config.json +++ b/capacitor.config.json @@ -1 +1,20 @@ -{} +{ + "appId": "com.gpr.gabinetedigital", + "appName": "gabinete-digital", + "webDir": "www", + "npmClient": "npm", + "cordova": { + "preferences": { + "ScrollEnabled": "false", + "BackupWebStorage": "none", + "SplashMaintainAspectRatio": "true", + "FadeSplashScreenDuration": "300", + "SplashShowOnlyFirstTime": "false", + "SplashScreen": "screen", + "SplashScreenDelay": "3000" + } + }, + "android": { + "allowMixedContent": true + } +} diff --git a/ionic.config.json b/ionic.config.json index bad8f73b9..0861ddaef 100644 --- a/ionic.config.json +++ b/ionic.config.json @@ -1,9 +1,7 @@ { "name": "gabinete-digital", "integrations": { - "capacitor": { - "enabled": false - }, + "capacitor": {}, "cordova": {} }, "type": "angular" diff --git a/package-lock.json b/package-lock.json index 90c01a2f4..9a6c1e6e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1920,6 +1920,88 @@ "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-2.4.0.tgz", "integrity": "sha512-5sJicZjtuBRgtmBuV1kvWnIjlu7bnw2TGGp62UXf0ZrjvMUCYSFHBqIHZ8neffW7a3xM5cdGMUlxJ+HfA9ntAg==" }, + "@capacitor/cli": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-2.4.5.tgz", + "integrity": "sha512-nv0IRd3xnif8kIvAFk+ssEkwqZ8n0DvLuB7s0CmtRvMf6Rns02TTYndtV/YkSVja4JbrKb9FrcMd2aLu9KJEIg==", + "requires": { + "chalk": "^2.3.0", + "commander": "^4.1.1", + "compare-versions": "^3.1.0", + "fs-extra": "^4.0.3", + "inquirer": "6.3.1", + "open": "^6.1.0", + "ora": "^1.3.0", + "plist": "^3.0.1", + "semver": "^5.4.1", + "which": "^1.3.0", + "xml2js": "^0.4.19" + }, + "dependencies": { + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==" + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "requires": { + "chalk": "^2.0.1" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "ora": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-1.4.0.tgz", + "integrity": "sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==", + "requires": { + "chalk": "^2.1.0", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.0.1", + "log-symbols": "^2.1.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + } + } + }, + "@capacitor/core": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-2.4.5.tgz", + "integrity": "sha512-3GfDAN3s8ajglbn0X6wS+1mtmLwtaBNyvrje3qZ7mzRGVOMWLlOL+n2EeA9IlhMyp8KbQFwXr7gKUk6DjMAKUQ==", + "requires": { + "tslib": "^1.9.0" + } + }, "@capacitor/ios": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-2.4.0.tgz", @@ -3362,6 +3444,11 @@ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + }, "ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", @@ -3377,7 +3464,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -3655,37 +3741,6 @@ "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", "dev": true }, - "axios": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", - "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", - "requires": { - "follow-redirects": "1.5.10" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, "axobject-query": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", @@ -4344,7 +4399,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -4354,8 +4408,7 @@ "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "cheerio": { "version": "1.0.0-rc.3", @@ -4519,8 +4572,7 @@ "cli-width": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" }, "cliui": { "version": "5.0.0", @@ -4672,6 +4724,11 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -4681,8 +4738,7 @@ "compare-versions": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" }, "component-bind": { "version": "1.0.0", @@ -6533,8 +6589,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint-scope": { "version": "4.0.3", @@ -6784,7 +6839,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -6920,6 +6974,14 @@ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, "file-loader": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.0.0.tgz", @@ -7148,6 +7210,16 @@ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -7403,8 +7475,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { "version": "1.0.1", @@ -7866,7 +7937,6 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -8004,6 +8074,63 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" }, + "inquirer": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", + "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.11", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + } + } + }, "internal-ip": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", @@ -8357,8 +8484,7 @@ "is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" }, "isarray": { "version": "1.0.0", @@ -8613,6 +8739,11 @@ } } }, + "jetifier": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.6.tgz", + "integrity": "sha512-JNAkmPeB/GS2tCRqUzRPsTOHpGDah7xP18vGJfIjZC+W2sxEHbxgJxetIjIqhjQ3yYbYNEELkM/spKLtwoOSUQ==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8696,7 +8827,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -10388,6 +10518,14 @@ "mimic-fn": "^2.1.0" } }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "requires": { + "is-wsl": "^1.1.0" + } + }, "opn": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", @@ -12630,8 +12768,7 @@ "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "run-parallel": { "version": "1.1.9", @@ -12672,8 +12809,7 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass": { "version": "1.26.3", @@ -12737,8 +12873,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "schema-utils": { "version": "2.7.0", @@ -13867,7 +14002,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "requires": { "ansi-regex": "^4.1.0" }, @@ -13875,8 +14009,7 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" } } }, @@ -14035,7 +14168,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -14298,8 +14430,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "2.0.5", @@ -14336,7 +14467,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -14639,8 +14769,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "unorm": { "version": "1.6.0", @@ -15794,7 +15923,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -15943,7 +16071,6 @@ "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, "requires": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -15952,8 +16079,7 @@ "xmlbuilder": { "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" } } }, diff --git a/package.json b/package.json index f47b2185f..d26fbd427 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,8 @@ "@angular/platform-browser-dynamic": "~9.1.6", "@angular/router": "~9.1.6", "@capacitor/android": "^2.4.0", + "@capacitor/cli": "^2.4.5", + "@capacitor/core": "^2.4.5", "@capacitor/ios": "^2.4.0", "@fullcalendar/angular": "^5.3.0", "@fullcalendar/daygrid": "^5.3.0", @@ -36,7 +38,6 @@ "@ionic/pwa-elements": "^3.0.1", "@ionic/storage": "^2.3.1", "@logisticinfotech/ionic4-datepicker": "^1.4.4", - "axios": "^0.19.2", "cordova-ios": "6.1.0", "cordova-plugin-camera": "^5.0.1", "cordova-plugin-file": "^6.0.2", @@ -47,6 +48,7 @@ "ionic-selectable": "^4.5.0", "ionic2-alpha-scroll": "^2.0.1", "ionic2-calendar": "^0.6.6", + "jetifier": "^1.6.6", "moment": "^2.27.0", "ngx-socket-io": "^3.2.0", "rxjs": "~6.5.1", diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 6e197ae99..d03f1ebd9 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -9,40 +9,57 @@ const routes: Routes = [ { path: '', loadChildren: () => import('./home/home.module').then( m => m.HomePageModule) + }, + { + path: 'events', + loadChildren: () => import('./pages/events/events.module').then( m => m.EventsPageModule) + }, + { + path: 'chat', + loadChildren: () => import('./pages/chat/chat.module').then( m => m.ChatPageModule) + }, + { + path: 'publications', + loadChildren: () => import('./pages/publications/publications.module').then( m => m.PublicationsPageModule) + }, + { + path: 'header', + loadChildren: () => import('./shared/header/header.module').then( m => m.HeaderPageModule) + }, + { + path: 'header', + loadChildren: () => import('./shared/header/header.module').then( m => m.HeaderPageModule) + }, + { + path: 'header-pr', + loadChildren: () => import('./shared/header-pr/header-pr.module').then( m => m.HeaderPrPageModule) + }, + { + path: 'btn-seguinte', + loadChildren: () => import('./shared/btn-seguinte/btn-seguinte.module').then( m => m.BtnSeguintePageModule) + }, + { + path: 'btn-modal-dismiss', + loadChildren: () => import('./shared/btn-modal-dismiss/btn-modal-dismiss.module').then( m => m.BtnModalDismissPageModule) + }, + { + path: 'chat-popover', + loadChildren: () => import('./shared/popover/chat-popover/chat-popover.module').then( m => m.ChatPopoverPageModule) + }, + { + path: 'chat-options-popover', + loadChildren: () => import('./shared/popover/chat-options-popover/chat-options-popover.module').then( m => m.ChatOptionsPopoverPageModule) }, { - path: 'chat', - loadChildren: () => import('./pages/chat/chat.module').then( m => m.ChatPageModule) + path: 'messages-options', + loadChildren: () => import('./shared/popover/messages-options/messages-options.module').then( m => m.MessagesOptionsPageModule) }, { - path: 'publications', - loadChildren: () => import('./pages/publications/publications.module').then( m => m.PublicationsPageModule) - }, - { - path: 'header', - loadChildren: () => import('./shared/header/header.module').then( m => m.HeaderPageModule) - }, - { - path: 'header', - loadChildren: () => import('./shared/header/header.module').then( m => m.HeaderPageModule) - }, - { - path: 'header-pr', - loadChildren: () => import('./shared/header-pr/header-pr.module').then( m => m.HeaderPrPageModule) - }, - { - path: 'btn-seguinte', - loadChildren: () => import('./shared/btn-seguinte/btn-seguinte.module').then( m => m.BtnSeguintePageModule) - }, - { - path: 'btn-modal-dismiss', - loadChildren: () => import('./shared/btn-modal-dismiss/btn-modal-dismiss.module').then( m => m.BtnModalDismissPageModule) - }, - { - path: 'chat-popover', - loadChildren: () => import('./shared/popover/chat-popover/chat-popover.module').then( m => m.ChatPopoverPageModule) + path: 'group-duration', + loadChildren: () => import('./shared/popover/group-duration/group-duration.module').then( m => m.GroupDurationPageModule) }, + /* { path: 'cal-modal', loadChildren: () => import('./pages/cal-modal/cal-modal.module').then( m => m.CalModalPageModule) diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 21fd97ea0..bc8c8e056 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -18,6 +18,7 @@ import { WebView } from '@ionic-native/ionic-webview/ngx'; import { FilePath } from '@ionic-native/file-path/ngx'; import { Camera } from '@ionic-native/camera/ngx'; import { IonicStorageModule } from '@ionic/storage'; +import { PipesModule } from './pipes/pipes.module'; @NgModule({ declarations: [AppComponent], @@ -26,6 +27,7 @@ import { IonicStorageModule } from '@ionic/storage'; IonicModule.forRoot(), IonicStorageModule.forRoot(), AppRoutingModule, + PipesModule, HttpClientModule, ], providers: [ diff --git a/src/app/config/auth-constants.ts b/src/app/config/auth-constants.ts index 5c19b3b24..4cee9ccc0 100644 --- a/src/app/config/auth-constants.ts +++ b/src/app/config/auth-constants.ts @@ -1,6 +1,6 @@ /* This file stores all the keys */ export class AuthConnstants{ /* My reference key */ - public static readonly AUTH = 'user'; + public static readonly AUTH = 'userDataKey'; public static readonly PROFILE = 'profile'; } \ No newline at end of file diff --git a/src/app/home/home-routing.module.ts b/src/app/home/home-routing.module.ts index ec29eb7f3..2d788629c 100644 --- a/src/app/home/home-routing.module.ts +++ b/src/app/home/home-routing.module.ts @@ -153,7 +153,7 @@ const routes: Routes = [ }, { path: '', - redirectTo: 'home/events', + redirectTo: '/home/events', pathMatch: 'full' } ]; diff --git a/src/app/home/home.page.html b/src/app/home/home.page.html index 4ddebb1de..80df426b9 100644 --- a/src/app/home/home.page.html +++ b/src/app/home/home.page.html @@ -27,7 +27,7 @@ Pesquisa - + --> Chat diff --git a/src/app/models/chat/status.model.ts b/src/app/models/chat/status.model.ts new file mode 100644 index 000000000..ebd8b9bf4 --- /dev/null +++ b/src/app/models/chat/status.model.ts @@ -0,0 +1,5 @@ +export class Status { + _id: string; + status: string; + success: boolean; +} \ No newline at end of file diff --git a/src/app/models/contact.model.ts b/src/app/models/contact.model.ts new file mode 100644 index 000000000..5accb1b63 --- /dev/null +++ b/src/app/models/contact.model.ts @@ -0,0 +1,5 @@ +interface Contact { + first: string; + last: string; + url: string; + } \ No newline at end of file diff --git a/src/app/pages/agenda/agenda.page.ts b/src/app/pages/agenda/agenda.page.ts index b335c523f..8da456b1e 100644 --- a/src/app/pages/agenda/agenda.page.ts +++ b/src/app/pages/agenda/agenda.page.ts @@ -196,7 +196,7 @@ export class AgendaPage implements OnInit { this.eventSource=[]; if(this.profile == "mdgpr"){ this.eventService.getAllMdEvents(formatDate(startTime, 'yyyy-MM-dd HH:mm:ss', 'pt'), formatDate(endTime, 'yyyy-MM-dd HH:mm:ss', 'pt')).subscribe(response => { - this.eventsListPessoal = response.filter(data => data.CalendarName == "Pessoal");; + this.eventsListPessoal = response.filter(data => data.CalendarName == "Pessoal"); this.eventsListPessoal.forEach(element => { this.eventSource.push({ title: element.Subject, diff --git a/src/app/pages/chat/chat-routing.module.ts b/src/app/pages/chat/chat-routing.module.ts index 566514901..dd3a97dfb 100644 --- a/src/app/pages/chat/chat-routing.module.ts +++ b/src/app/pages/chat/chat-routing.module.ts @@ -22,6 +22,10 @@ const routes: Routes = [ { path: 'group-messages', loadChildren: () => import('./group-messages/group-messages.module').then( m => m.GroupMessagesPageModule) + }, + { + path: 'messages', + loadChildren: () => import('./messages/messages.module').then( m => m.MessagesPageModule) } ]; diff --git a/src/app/pages/chat/chat.page.html b/src/app/pages/chat/chat.page.html index 849dd49ca..999f7b612 100644 --- a/src/app/pages/chat/chat.page.html +++ b/src/app/pages/chat/chat.page.html @@ -10,7 +10,6 @@
-
@@ -37,21 +36,41 @@ - + +
-
+
- Secretário Assuntos Sociais + + + {{user}} + + +
+
{{dm.lastMessage._updatedAt | date: 'HH:mm'}}
+
+
+ {{dm.lastMessage.msg}} +
+
+
+ - + +
+
+ +
+
+
+
+ {{group.name}} +
+
{{group.lastMessage._updatedAt | date: 'HH:mm'}}
+
+
+ {{group.lastMessage.u.name}}: {{group.lastMessage.msg}} +
+
+
+
diff --git a/src/app/pages/chat/chat.page.scss b/src/app/pages/chat/chat.page.scss index ce22de9f4..2d381ea85 100644 --- a/src/app/pages/chat/chat.page.scss +++ b/src/app/pages/chat/chat.page.scss @@ -63,6 +63,7 @@ .item{ width: 100%; border-bottom: 1px solid #ebebeb; + overflow: auto; .item-icon{ width: 40px; diff --git a/src/app/pages/chat/chat.page.ts b/src/app/pages/chat/chat.page.ts index faa8987b7..cc083cb90 100644 --- a/src/app/pages/chat/chat.page.ts +++ b/src/app/pages/chat/chat.page.ts @@ -1,9 +1,12 @@ +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Component, OnInit } from '@angular/core'; import { ModalController } from '@ionic/angular'; import { AuthService } from 'src/app/services/auth.service'; import { ChatService } from 'src/app/services/chat.service'; import { ConversationPage } from './conversation/conversation.page'; import { GroupMessagesPage } from './group-messages/group-messages.page'; +import { ContactsPage } from './messages/contacts/contacts.page'; +import { MessagesPage } from './messages/messages.page'; import { NewGroupPage } from './new-group/new-group.page'; import { NewchatPage } from './newchat/newchat.page'; @@ -13,48 +16,121 @@ import { NewchatPage } from './newchat/newchat.page'; styleUrls: ['./chat.page.scss'], }) export class ChatPage implements OnInit { + + headers: HttpHeaders; + options:any; + X_User_Id:any; + X_Auth_Token:any; + showLoader: boolean; loggedUser: any; /* Set segment variable */ segment:string; - groupList: any[]; + allGroups: any[]; + privateGroups: any[]; + publicGroups: any[]; userConnectedList: any[]; + userRooms: any[]; + userChannels: any[]; + userDirectMessages: any[]; result:any; + dmUsers:any; constructor( + private http:HttpClient, private chatService: ChatService, private modalController: ModalController, - private authService: AuthService) { } + private authService: AuthService, + + ) { + this.headers = new HttpHeaders(); + this.headers = this.headers.set('X-User-Id', 'GqjNWiLrGEHRna7Zn'); + this.headers = this.headers.set('X-Auth-Token', 'SJwIgtlqfloPK696fpc2VBvyDluipuIHKB_0Q6-9ycJ'); + } ngOnInit() { this.segment = "Contactos"; + this.authService.userData$.subscribe((res:any)=>{ + this.loggedUser=res; + console.log(this.loggedUser); + + }); this.doRefresh(); - this.authService.getUserData(); - + this.loadJoinedRooms(); + } + loadJoinedRooms(){ + this.chatService.loadJoinedRooms().subscribe(res => { + console.log(res); + }); } onSegmentChange(){ this.doRefresh(); } doRefresh(){ - this.getGroups(); - this.getConnectedUsers(); + setInterval(()=>{ + this.getDirectMessages(); + this.getGroups(); + }, 2000); } getGroups(){ this.showLoader = true; this.result = this.chatService.getAllPrivateGroups().subscribe((res:any)=>{ - this.groupList = res.groups; + this.privateGroups = res.groups; + this.result = this.chatService.getAllUserChannels().subscribe((res:any)=>{ + this.publicGroups = res.channels; + this.allGroups = this.privateGroups.concat(this.publicGroups); this.showLoader = false; + }); }); } - - getConnectedUsers(){ + getDirectMessages(){ this.showLoader = true; + + this.result = this.chatService.getAllDirectMessages().subscribe((res:any)=>{ + this.userDirectMessages = res.ims; + console.log(res); + + this.showLoader = false; + }); + } + getChatMembers(){ + this.chatService.getMembers(this.userDirectMessages[0]._id).subscribe(res=> { + this.dmUsers = res['members'].filter(data => data.username != this.loggedUser.me.username) + /* console.log(res); + console.log(this.dmUsers); */ + }); + } + /* getConnectedChannels(){ + this.showLoader = true; + + this.result = this.chatService.getAllUserChannels().subscribe((res:any)=>{ + this.userChannels = res.channels; + console.log(res); + + this.showLoader = false; + }); + } */ + + /* getConnectedRooms(){ + this.showLoader = true; + + this.result = this.chatService.getAllRooms().subscribe((res:any)=>{ + this.userRooms = res.update; + console.log(res.update); + + this.showLoader = false; + }); + } */ + + /* getConnectedUsers(){ + this.showLoader = true; + this.result = this.chatService.getAllConnectedUsers().subscribe((res:any)=>{ this.userConnectedList = res.users; - console.log(this.userConnectedList); + this.showLoader = false; - }); - } + }); + } */ async startConversation(selectedUser) { const modal = await this.modalController.create({ @@ -70,8 +146,8 @@ export class ChatPage implements OnInit { } async selectContact(){ const modal = await this.modalController.create({ - component: NewchatPage, - cssClass: 'newchat', + component: ContactsPage, + cssClass: 'contacts', backdropDismiss: false, }); await modal.present(); @@ -86,11 +162,28 @@ export class ChatPage implements OnInit { await modal.present(); modal.onDidDismiss(); } - async openGroupMessages(){ + async openMessages(dm:any){ + console.log(dm); + + const modal = await this.modalController.create({ + component: MessagesPage, + cssClass: 'group-messages', + backdropDismiss: false, + componentProps: { + dm: dm, + }, + }); + await modal.present(); + modal.onDidDismiss(); + } + async openGroupMessages(user:any){ const modal = await this.modalController.create({ component: GroupMessagesPage, cssClass: 'group-messages', backdropDismiss: false, + componentProps: { + user: user, + }, }); await modal.present(); modal.onDidDismiss(); diff --git a/src/app/pages/chat/group-messages/group-contacts/group-contacts-routing.module.ts b/src/app/pages/chat/group-messages/group-contacts/group-contacts-routing.module.ts new file mode 100644 index 000000000..c998741ed --- /dev/null +++ b/src/app/pages/chat/group-messages/group-contacts/group-contacts-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { GroupContactsPage } from './group-contacts.page'; + +const routes: Routes = [ + { + path: '', + component: GroupContactsPage + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class GroupContactsPageRoutingModule {} diff --git a/src/app/pages/chat/group-messages/group-contacts/group-contacts.module.ts b/src/app/pages/chat/group-messages/group-contacts/group-contacts.module.ts new file mode 100644 index 000000000..9ec279e82 --- /dev/null +++ b/src/app/pages/chat/group-messages/group-contacts/group-contacts.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { IonicModule } from '@ionic/angular'; + +import { GroupContactsPageRoutingModule } from './group-contacts-routing.module'; + +import { GroupContactsPage } from './group-contacts.page'; +import { SharedModule } from 'src/app/shared/shared.module'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + SharedModule, + GroupContactsPageRoutingModule + ], + declarations: [GroupContactsPage] +}) +export class GroupContactsPageModule {} diff --git a/src/app/pages/chat/group-messages/group-contacts/group-contacts.page.html b/src/app/pages/chat/group-messages/group-contacts/group-contacts.page.html new file mode 100644 index 000000000..190194b56 --- /dev/null +++ b/src/app/pages/chat/group-messages/group-contacts/group-contacts.page.html @@ -0,0 +1,51 @@ + + +
+
+
+ +
+
+ Contactos +
+ +
+
+
+ + + +
+ + + + + + + +
+ + + + + +
+ {{header}} +
+ +
+ +

{{user.first}} {{user.last}}

+ +
+ +
+ +
+
diff --git a/src/app/pages/chat/group-messages/group-contacts/group-contacts.page.scss b/src/app/pages/chat/group-messages/group-contacts/group-contacts.page.scss new file mode 100644 index 000000000..cf9de70f9 --- /dev/null +++ b/src/app/pages/chat/group-messages/group-contacts/group-contacts.page.scss @@ -0,0 +1,127 @@ +.header-toolbar{ + --background:transparent; + --opacity: 1; + + .main-header{ + width: 100%; /* 400px */ + height: 100%; + font-family: Roboto; + border-top-left-radius: 25px; + border-top-right-radius: 25px; + background-color: #fff; + overflow:hidden; + padding: 30px 20px 0px 20px; + color:#000; + transform: translate3d(0, 1px, 0); + + .div-icon{ + width: 40px; + float: right; + font-size: 35px; + overflow: auto; + padding: 1px; + } + .div-icon ion-icon{ + float: right; + padding-left: 20px; + } + .title-content{ + width: 360px; + margin: 0px auto; + overflow: auto; + padding: 0 !important; + } + + .back-icon{ + width: 37px; + float: left; + font-size: 35px; + overflow: auto; + + } + .div-title{ + width: 221px; + padding: 0!important; + float: left; + margin: 2.5px 0 0 5px; + } + .title{ + font-size: 25px; + } + } + } + .toolbar-search{ + --padding-top:0 !important; + --padding-bottom:0 !important; + --padding-start:0 !important; + --padding-end:0 !important; + + .search{ + border: 1px solid #ebebeb; + margin: 5px 20px 5px 20px; + border-radius: 5px; + } + .search ion-searchbar{ + /* border: 1px solid green; */ + width: 100%; + margin: 0 !important; + padding: 0 !important; + --border-radius: 5px; + --box-shadow: none; + overflow: auto; + --icon-color:#0d89d1; + } + + } + ion-content{ + --background:transparent; + } + .main-content{ + width: 100%; + height: 100%; + font-family: Roboto; + margin: 0 auto; + background-color: #fff; + overflow:auto; + padding: 0 0 0 0; + + .item-divider{ + background: #ebebeb; + font-size: 15px; + margin: 10px 0 10px 0; + padding:5px 0 5px 20px; + + } + + .item-checkbox{ + display: flex; + margin: 10px 20px 10px 20px !important; + overflow: auto; + align-items: center; + + } + + .item-checkbox ion-checkbox{ + --border-color: #0d89d1; + --background-checked:#0d89d1; + float: left; + } + + .item-checkbox p{ + display: block; + margin: 0 !important; + width: 330px; + padding-left: 10px; + font-size: 15px; + color: #0d89d1; + float: left; + } + .item-checkbox ion-icon{ + font-size: 10px; + float: left; + color:#99e47b; + margin-left: 10px; + } + } + + \ No newline at end of file diff --git a/src/app/pages/chat/group-messages/group-contacts/group-contacts.page.spec.ts b/src/app/pages/chat/group-messages/group-contacts/group-contacts.page.spec.ts new file mode 100644 index 000000000..dde2043a8 --- /dev/null +++ b/src/app/pages/chat/group-messages/group-contacts/group-contacts.page.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { GroupContactsPage } from './group-contacts.page'; + +describe('GroupContactsPage', () => { + let component: GroupContactsPage; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ GroupContactsPage ], + imports: [IonicModule.forRoot()] + }).compileComponents(); + + fixture = TestBed.createComponent(GroupContactsPage); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/chat/group-messages/group-contacts/group-contacts.page.ts b/src/app/pages/chat/group-messages/group-contacts/group-contacts.page.ts new file mode 100644 index 000000000..f109751bd --- /dev/null +++ b/src/app/pages/chat/group-messages/group-contacts/group-contacts.page.ts @@ -0,0 +1,152 @@ +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { GroupMessagesPage } from '../group-messages.page'; + +@Component({ + selector: 'app-group-contacts', + templateUrl: './group-contacts.page.html', + styleUrls: ['./group-contacts.page.scss'], +}) +export class GroupContactsPage implements OnInit { + showLoader: boolean; + users = []; + + contact: string[] = [" Ana M.", "Andre F.", "Bruno G.", "Catarina T", "Tiago"]; + + headers: HttpHeaders; + options:any; + + contacts: Contact[] = [ + { + first: 'Ana', + last: 'Manuel', + url: 'https://randomuser.me/api/portraits/med/women/54.jpg', + }, + { + first: 'Abdullah', + last: 'Hill', + url: 'https://randomuser.me/api/portraits/med/women/54.jpg', + }, + { + first: 'Batur', + last: 'Oymen', + url: 'https://randomuser.me/api/portraits/med/women/54.jpg', + }, + { + first: 'Bianca', + last: 'Costa', + url: 'https://randomuser.me/api/portraits/med/women/54.jpg', + }, + { + first: 'Zaya', + last: 'Mary', + url: 'https://randomuser.me/api/portraits/med/women/54.jpg', + }, + { + first: 'Tiago', + last: 'Kayaya', + url: 'https://randomuser.me/api/portraits/med/women/54.jpg', + } +]; + + constructor( + private modalController: ModalController, + private http: HttpClient, + ) + { + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Access-Control-Allow-Origin' , '*'); + this.headers = this.headers.set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT'); + this.headers = this.headers.set('Accept','application/json'); + this.headers = this.headers.set('content-type','application/json'); + + + } + + ngOnInit() { + this.loadUsers(); + + } + + loadUsers(){ + this.options = { + headers: this.headers, + }; + /* this.http.get('https://randomuser.me/api/?results=100', this.options) + .subscribe(res => { + this.users = res['results'].sort((a,b) => { + if(a.name.first < b.name.first){ + return -1; + } + if(a.name.first > b.name.first){ + return 1; + } + return 0; + }); + console.log(res); + console.log(this.users); + }); */ + this.users = this.contacts.sort((a,b) => { + if(a.first < b.first){ + return -1; + } + if(a.first > b.first){ + return 1; + } + return 0; + }); + } + + separateLetter(record, recordIndex, records){ + /* if(recordIndex == 0){ + return record.name.first[0]; + } + + let first_prev = records[recordIndex - 1].name.first[0]; + let first_current = record.name.first[0]; + + if(first_prev != first_current){ + return first_current; + } + return null; */ + if(recordIndex == 0){ + return record.first[0]; + } + + let first_prev = records[recordIndex - 1].first[0]; + let first_current = record.first[0]; + + if(first_prev != first_current){ + return first_current; + } + return null; + } + + doRefresh(event){ + + } + close(){ + this.modalController.dismiss(); + } + onChange(event){ + + } + clicked(){ + console.log('clicked'); + + } + async groupMessages(){ + const modal = await this.modalController.create({ + component: GroupMessagesPage, + componentProps: {}, + cssClass: 'contacts', + backdropDismiss: false + }); + + await modal.present(); + + modal.onDidDismiss(); + } + +} diff --git a/src/app/pages/chat/group-messages/group-messages-routing.module.ts b/src/app/pages/chat/group-messages/group-messages-routing.module.ts index 5a4f0ae40..708ec8d8f 100644 --- a/src/app/pages/chat/group-messages/group-messages-routing.module.ts +++ b/src/app/pages/chat/group-messages/group-messages-routing.module.ts @@ -1,17 +1,21 @@ -import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; - -import { GroupMessagesPage } from './group-messages.page'; - -const routes: Routes = [ - { - path: '', - component: GroupMessagesPage +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { GroupMessagesPage } from './group-messages.page'; + +const routes: Routes = [ + { + path: '', + component: GroupMessagesPage + }, { + path: 'group-contacts', + loadChildren: () => import('./group-contacts/group-contacts.module').then( m => m.GroupContactsPageModule) } -]; -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule], -}) -export class GroupMessagesPageRoutingModule {} +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class GroupMessagesPageRoutingModule {} diff --git a/src/app/pages/chat/group-messages/group-messages.page.html b/src/app/pages/chat/group-messages/group-messages.page.html index a999b764c..ca0a8e4b8 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.html +++ b/src/app/pages/chat/group-messages/group-messages.page.html @@ -1,7 +1,7 @@
-
+
Grupo de Trabalho A @@ -10,36 +10,104 @@
+
+
+ +
+
+ + {{contact}} + +
+
-

HHHHH

- - - +
+ Esta conversa passou a grupo
+ A conversa original mantêm-se como chat individual +
+
+
+
+ Secretário Assuntos sociais + 14:23 +
+
+ + +
+
+
+
+ Secretário Assuntos sociais + 14:23 +
+
+ Caros colegas, partilho o momento de confraternização do presidente Filipe Nyusi e de dua excelência, o presidente da república +
+
+
+
+ Presidente da República + 14:23 +
+
+ Pois é, momentos históricos +
+
+
+
+ Ministro do interior + 16:23 +
+
+ Grande momento +
+
+
+
+ Secretário Assuntos sociais + 14:23 +
+
+ Caros colegas, partilho o momento de confraternização do presidente Filipe Nyusi e de dua excelência, o presidente da república +
+
+
+
+ Secretário Assuntos sociais + 14:23 +
+
+ Caros colegas, partilho o momento de confraternização do presidente Filipe Nyusi e de dua excelência, o presidente da república +
+
+
- + - - - - - + + + + + - - + + - + - - - - + + + + + diff --git a/src/app/pages/chat/group-messages/group-messages.page.scss b/src/app/pages/chat/group-messages/group-messages.page.scss index f02b586d7..cbe5a62e7 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.scss +++ b/src/app/pages/chat/group-messages/group-messages.page.scss @@ -1,3 +1,4 @@ +@import '~src/function.scss'; .header-toolbar{ --background:transparent; --opacity: 1; @@ -14,7 +15,7 @@ color:#000; transform: translate3d(0, 1px, 0); - .title-content{ + .header-top{ width: 360px; margin: 0px auto; overflow: auto; @@ -34,6 +35,30 @@ margin: 5px 0 0 0; } } + .header-bottom{ + width: 310px; + overflow: auto; + margin: 0 auto; + + .header-bottom-icon{ + width: 30px; + font-size: 25px; + float: left; + padding: 2px; + + } + .header-bottom-contacts{ + width: 275px; + font-size: 15px; + color: #797979; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + float: left; + padding: 5px; + margin: 1px; + } + } .title{ font-size: 25px; @@ -50,4 +75,88 @@ padding-left: 20px; } } + } + ion-content{ + .welcome-text{ + /* width: 322px; */ + width: em(422px); + background: #ebebeb; + text-align: center; + font-size: 13px; + color: #797979; + padding: 10px; + margin: 0 auto; + line-height: 1.2rem; + margin: 20px 39px 25px; + border-radius: 8px; + } + .messages{ + font-size: 13px; + font-family: Roboto; + overflow: auto; + + .incoming, .outgoing{ + width: 305px; + padding: 15px 20px; + border-radius: 10px; + } + + .incoming{ + margin: 10px 75px 10px 20px; + background: #ebebeb; + float: left; + + } + } + .outgoing{ + margin: 10px 20px 10px 75px; + background: #e4f4fe; + float: right; + } + .title{ + color: #0782c9; + + font-weight: bold; + margin-bottom: 5px; + + .time{ + color: #797979; + text-align: right; + float: right; + } + } + } + + ion-footer{ + .row{ + width: 380px; + margin: 0 auto; + } + + .chat-icon-options{ + display:block !important; + font-size: 25px; + float: right !important; + margin-top: 10px; + } + + .chat-icon-send{ + font-size: 45px; + margin: 0 auto; + margin-top: 4px; + } + + .type-message{ + display: flex; + border: 1px solid #ebebeb; + border-radius: 25px; + padding-left: 15px; + align-items: center; + overflow: auto; + + ion-textarea{ + margin: 0 !important; + align-self: center; + } + } } \ No newline at end of file diff --git a/src/app/pages/chat/group-messages/group-messages.page.ts b/src/app/pages/chat/group-messages/group-messages.page.ts index 2cfa68310..5399545da 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.ts +++ b/src/app/pages/chat/group-messages/group-messages.page.ts @@ -1,6 +1,9 @@ import { Component, OnInit } from '@angular/core'; -import { ActionSheetController, MenuController, PopoverController } from '@ionic/angular'; +import { ActionSheetController, MenuController, ModalController, PopoverController } from '@ionic/angular'; +import { ChatOptionsPopoverPage } from 'src/app/shared/popover/chat-options-popover/chat-options-popover.page'; import { ChatPopoverPage } from 'src/app/shared/popover/chat-popover/chat-popover.page'; +import { ContactsPage } from '../new-group/contacts/contacts.page'; +import { NewGroupPage } from '../new-group/new-group.page'; @Component({ selector: 'app-group-messages', @@ -10,9 +13,11 @@ import { ChatPopoverPage } from 'src/app/shared/popover/chat-popover/chat-popove export class GroupMessagesPage implements OnInit { message:any; + contacts: string[] = [" Ana M.", "Andre F.", "Bruno G.", "Catarina T", "Tiago"]; constructor( private menu: MenuController, + private modalController: ModalController, private actionSheetController: ActionSheetController, public popoverController: PopoverController, ) { } @@ -53,6 +58,27 @@ export class GroupMessagesPage implements OnInit { }); return await popover.present(); } + async openChatOptions(ev: any) { + const popover = await this.popoverController.create({ + component: ChatOptionsPopoverPage, + cssClass: 'chat-options-popover', + event: ev, + translucent: true + }); + return await popover.present(); + } + async addContacts(){ + const modal = await this.modalController.create({ + component: ContactsPage, + componentProps: {}, + cssClass: 'contacts', + backdropDismiss: false + }); + + await modal.present(); + + modal.onDidDismiss(); + } } diff --git a/src/app/pages/chat/messages/contacts/contacts-routing.module.ts b/src/app/pages/chat/messages/contacts/contacts-routing.module.ts new file mode 100644 index 000000000..fb8c7a5ea --- /dev/null +++ b/src/app/pages/chat/messages/contacts/contacts-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { ContactsPage } from './contacts.page'; + +const routes: Routes = [ + { + path: '', + component: ContactsPage + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class ContactsPageRoutingModule {} diff --git a/src/app/pages/chat/messages/contacts/contacts.module.ts b/src/app/pages/chat/messages/contacts/contacts.module.ts new file mode 100644 index 000000000..8284984be --- /dev/null +++ b/src/app/pages/chat/messages/contacts/contacts.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { IonicModule } from '@ionic/angular'; + +import { ContactsPageRoutingModule } from './contacts-routing.module'; + +import { ContactsPage } from './contacts.page'; +import { SharedModule } from 'src/app/shared/shared.module'; +import { PipesModule } from 'src/app/pipes/pipes.module'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + SharedModule, + PipesModule, + ContactsPageRoutingModule + ], + declarations: [ContactsPage] +}) +export class ContactsPageModule {} diff --git a/src/app/pages/chat/messages/contacts/contacts.page.html b/src/app/pages/chat/messages/contacts/contacts.page.html new file mode 100644 index 000000000..b2f8e9705 --- /dev/null +++ b/src/app/pages/chat/messages/contacts/contacts.page.html @@ -0,0 +1,46 @@ + + +
+
+
+ +
+
+ Nova Conversa +
+
+
+
+ + + +
+ + + + + + + +
+ + + +
+ {{header}} +
+ +
+

{{user.name}}

+ + + + +
+ +
+ +
+
diff --git a/src/app/pages/chat/messages/contacts/contacts.page.scss b/src/app/pages/chat/messages/contacts/contacts.page.scss new file mode 100644 index 000000000..1eb104bdb --- /dev/null +++ b/src/app/pages/chat/messages/contacts/contacts.page.scss @@ -0,0 +1,136 @@ + +.header-toolbar{ + --background:transparent; + --opacity: 1; + + .main-header{ + width: 100%; /* 400px */ + height: 100%; + font-family: Roboto; + border-top-left-radius: 25px; + border-top-right-radius: 25px; + background-color: #fff; + overflow:hidden; + padding: 30px 20px 0px 20px; + color:#000; + transform: translate3d(0, 1px, 0); + + .div-icon{ + width: 40px; + float: right; + font-size: 35px; + overflow: auto; + padding: 1px; + } + .div-icon ion-icon{ + float: right; + padding-left: 20px; + } + .title-content{ + width: 360px; + margin: 0px auto; + overflow: auto; + padding: 0 !important; + } + + .back-icon{ + width: 37px; + float: left; + font-size: 35px; + overflow: auto; + + } + .div-title{ + width: 221px; + padding: 0!important; + float: left; + margin: 2.5px 0 0 5px; + } + .title{ + font-size: 25px; + } + } + } + .toolbar-search{ + --padding-top:0 !important; + --padding-bottom:0 !important; + --padding-start:0 !important; + --padding-end:0 !important; + + .search{ + border: 1px solid #ebebeb; + margin: 5px 20px 5px 20px; + border-radius: 5px; + height: auto; + padding: 0 !important; + } + .search ion-searchbar{ + /* border: 1px solid green; */ + width: 100%; + margin: 0 !important; + padding: 0 !important; + --border-radius: 5px; + --box-shadow: none; + overflow: hidden; + --icon-color:#0d89d1; + } + + } + ion-content{ + --background:transparent; + } + .main-content{ + width: 100%; + height: 100%; + font-family: Roboto; + margin: 0 auto; + background-color: #fff; + overflow:auto; + padding: 0 0 0 0; + + .item-divider{ + background: #ebebeb; + font-size: 15px; + margin: 10px 0 10px 0; + padding:5px 0 5px 20px; + + } + + .item-user{ + display: flex; + margin: 10px 20px 10px 20px !important; + overflow: auto; + align-items: center; + } + + .item-user p{ + display: block; + margin: 0 !important; + width: 90%; + font-size: 15px; + color: #0d89d1; + float: left; + } + .item-user .icon{ + width: 10%; + font-size: 10px; + display: block; + text-align: right; + overflow: auto; + } + .online{ + color:#99e47b; + } + .offline{ + color:#cbced1; + } + .away{ + color:#ffd21f; + } + .invisible{ + color:#cbced1; + } + .busy{ + color:#f5455c; + } + } \ No newline at end of file diff --git a/src/app/pages/chat/messages/contacts/contacts.page.spec.ts b/src/app/pages/chat/messages/contacts/contacts.page.spec.ts new file mode 100644 index 000000000..8f263232b --- /dev/null +++ b/src/app/pages/chat/messages/contacts/contacts.page.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { ContactsPage } from './contacts.page'; + +describe('ContactsPage', () => { + let component: ContactsPage; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ContactsPage ], + imports: [IonicModule.forRoot()] + }).compileComponents(); + + fixture = TestBed.createComponent(ContactsPage); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/chat/messages/contacts/contacts.page.ts b/src/app/pages/chat/messages/contacts/contacts.page.ts new file mode 100644 index 000000000..ff86e8d5b --- /dev/null +++ b/src/app/pages/chat/messages/contacts/contacts.page.ts @@ -0,0 +1,153 @@ +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { AuthService } from 'src/app/services/auth.service'; +import { ChatService } from 'src/app/services/chat.service'; +import { GroupMessagesPage } from '../../group-messages/group-messages.page'; +import { MessagesPage } from '../messages.page'; + +@Component({ + selector: 'app-contacts', + templateUrl: './contacts.page.html', + styleUrls: ['./contacts.page.scss'], +}) +export class ContactsPage implements OnInit { + showLoader: boolean; + loggedUser: any; + users = []; + + headers: HttpHeaders; + options:any; + contacts:any; + textSearch:string; + room:any; + dm:any; + + constructor( + private modalController: ModalController, + private http: HttpClient, + private chatService: ChatService, + private authService: AuthService, + ) + { + this.authService.userData$.subscribe((res:any)=>{ + this.loggedUser=res; + }); + this.textSearch=""; + this.dm=null; + this.room=null; + } + + ngOnInit() { + this.loadUsers(); + + } + onChange(event){ + this.textSearch = event.detail.value; + } + + loadUsers(){ + this.options = { + headers: this.headers, + }; + this.chatService.getAllUsers().subscribe((res:any)=>{ + console.log(res.users); + this.contacts = res.users.filter(data => data.username != this.loggedUser.me.username); + this.users = this.contacts.sort((a,b) => { + if(a.name < b.name){ + return -1; + } + if(a.name > b.name){ + return 1; + } + return 0; + }); + this.showLoader = false; + }); + } + + separateLetter(record, recordIndex, records){ + if(recordIndex == 0){ + return record.name[0]; + } + + let first_prev = records[recordIndex - 1].name[0]; + let first_current = record.name[0]; + + if(first_prev != first_current){ + return first_current; + } + return null; + } + + doRefresh(event){ + } + + close(){ + this.modalController.dismiss(); + } + + clicked(){ + console.log('clicked'); + } + + createRoom(username:string){ + let body = { + username: username, + } + this.chatService.createRoom(body).subscribe(res => { + console.log(res); + this.room = res['room']; + this.getDirectMessage(this.room._id); + }); + } + getDirectMessage(roomId:any){ + console.log(roomId); + + this.chatService.getAllDirectMessages().subscribe(res=>{ + let result = res['ims'].filter(data => data._id == roomId); + this.dm = result[0]; + console.log(this.dm); + this.openModal(this.dm); + }); + } + async openModal(dm:any){ + this.close(); + console.log(dm); + + const modal = await this.modalController.create({ + component: MessagesPage, + cssClass: 'group-messages', + backdropDismiss: false, + componentProps: { + dm: dm, + }, + }); + await modal.present(); + modal.onDidDismiss(); + } + + async openMessages(username:string){ + /* this.close(); */ + + let dm:any; + //Create new room + this.createRoom(username); + //Get direct messages (dm) + /* this.getDirectMessage(this.room._id); */ + console.log(this.dm); + + + /* const modal = await this.modalController.create({ + component: MessagesPage, + cssClass: 'group-messages', + backdropDismiss: false, + componentProps: { + dm: dm, + }, + }); + await modal.present(); + modal.onDidDismiss(); */ + } + +} diff --git a/src/app/pages/chat/messages/messages-routing.module.ts b/src/app/pages/chat/messages/messages-routing.module.ts new file mode 100644 index 000000000..c00bd5ccb --- /dev/null +++ b/src/app/pages/chat/messages/messages-routing.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { MessagesPage } from './messages.page'; + +const routes: Routes = [ + { + path: '', + component: MessagesPage + }, { + path: 'contacts', + loadChildren: () => import('./contacts/contacts.module').then( m => m.ContactsPageModule) + } + +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class MessagesPageRoutingModule {} diff --git a/src/app/pages/chat/messages/messages.module.ts b/src/app/pages/chat/messages/messages.module.ts new file mode 100644 index 000000000..c933f79fe --- /dev/null +++ b/src/app/pages/chat/messages/messages.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { IonicModule } from '@ionic/angular'; + +import { MessagesPageRoutingModule } from './messages-routing.module'; + +import { MessagesPage } from './messages.page'; +import { SharedModule } from 'src/app/shared/shared.module'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + SharedModule, + MessagesPageRoutingModule + ], + declarations: [MessagesPage] +}) +export class MessagesPageModule {} diff --git a/src/app/pages/chat/messages/messages.page.html b/src/app/pages/chat/messages/messages.page.html new file mode 100644 index 000000000..76c20b2f0 --- /dev/null +++ b/src/app/pages/chat/messages/messages.page.html @@ -0,0 +1,113 @@ + + +
+
+ +
+ {{users.name}} + +
+
+ +
+
+
+
+ +
+
+ Adicionar contacto +
+
+
+
+
+ + +
+ + +
+
+ {{msg.u.name}} + {{msg._updatedAt | date: 'HH:mm' }} +
+
+ {{msg.msg}} +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/pages/chat/messages/messages.page.scss b/src/app/pages/chat/messages/messages.page.scss new file mode 100644 index 000000000..c485116ff --- /dev/null +++ b/src/app/pages/chat/messages/messages.page.scss @@ -0,0 +1,194 @@ +@import '~src/function.scss'; +.header-toolbar{ + --background:transparent; + --opacity: 1; + + .main-header{ + width: 100%; /* 400px */ + height: 100%; + font-family: Roboto; + border-top-left-radius: 25px; + border-top-right-radius: 25px; + background-color: #fff; + overflow:hidden; + padding: 30px 20px 0px 20px; + color:#000; + transform: translate3d(0, 1px, 0); + + .header-top{ + width: 360px; + margin: 0px auto; + overflow: auto; + padding: 0 !important; + background: #fff; + .middle{ + padding: 0!important; + float: left; + width: 280px; + margin: 2.5px 0 0 5px; + display: flex; + align-items: center; + + } + .right{ + padding: 0!important; + float: right; + font-size: 25px; + color: #0782c9; + margin: 5px 0 0 0; + } + } + .header-bottom{ + width: 310px; + overflow: auto; + margin: 0 auto; + + .header-bottom-icon{ + width: 30px; + font-size: 25px; + float: left; + padding: 2px; + + } + .header-bottom-contacts{ + width: 275px; + font-size: 15px; + color: #797979; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + float: left; + padding: 5px; + margin: 1px; + } + } + + .title{ + font-size: 25px; + overflow: auto; + float: left; + } + .div-icon{ + width: 40px; + float: right; + font-size: 35px; + overflow: auto; + padding: 1px; + } + .div-icon ion-icon{ + float: right; + padding-left: 20px; + } + } + } + ion-content{ + .welcome-text{ + /* width: 322px; */ + width: em(422px); + background: #ebebeb; + text-align: center; + font-size: 13px; + color: #797979; + padding: 10px; + margin: 0 auto; + line-height: 1.2rem; + margin: 20px 39px 25px; + border-radius: 8px; + } + .messages{ + font-size: 13px; + font-family: Roboto; + overflow: auto; + + //set scroll do bottom + position: absolute; + top: 0; + left: 0; + overflow-x: hidden; + overflow-y: auto; + width: 100%; + height: 100%; + word-wrap: break-word; + -webkit-overflow-scrolling: touch; + + + .incoming-true, .incoming-false{ + width: 305px; + padding: 15px 20px; + border-radius: 10px; + + } + + .incoming-true{ + margin: 10px 75px 10px 20px; + background: #ebebeb; + float: left; + + } + } + .incoming-false{ + margin: 10px 20px 10px 75px; + background: #e4f4fe; + float: right; + } + .title{ + display: inline; + color: #0782c9; + font-weight: bold; + margin-bottom: 5px; + + .time{ + color: #797979; + text-align: right; + float: right; + } + } + } + + ion-footer{ + .row{ + width: 380px; + margin: 0 auto; + } + + .chat-icon-options{ + display:block !important; + font-size: 25px; + float: right !important; + margin-top: 10px; + } + + .chat-icon-send{ + font-size: 45px; + margin: 0 auto; + margin-top: 4px; + } + + .type-message{ + display: flex; + border: 1px solid #ebebeb; + border-radius: 25px; + padding-left: 15px; + align-items: center; + overflow: auto; + + ion-textarea{ + margin: 0 !important; + align-self: center; + } + } + } + + .text-color-blue{ + font-size: 15px; + color: #0782c9; + font-weight: 500; + letter-spacing: normal; + } + .user-status-online{ + display: block; + float: left; + color:#99e47b; + padding-left: 10px; + } + \ No newline at end of file diff --git a/src/app/pages/chat/messages/messages.page.spec.ts b/src/app/pages/chat/messages/messages.page.spec.ts new file mode 100644 index 000000000..826962a23 --- /dev/null +++ b/src/app/pages/chat/messages/messages.page.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { MessagesPage } from './messages.page'; + +describe('MessagesPage', () => { + let component: MessagesPage; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ MessagesPage ], + imports: [IonicModule.forRoot()] + }).compileComponents(); + + fixture = TestBed.createComponent(MessagesPage); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/chat/messages/messages.page.ts b/src/app/pages/chat/messages/messages.page.ts new file mode 100644 index 000000000..ce5a3f1a5 --- /dev/null +++ b/src/app/pages/chat/messages/messages.page.ts @@ -0,0 +1,144 @@ +import { AfterViewChecked, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { ModalController, NavParams, PopoverController } from '@ionic/angular'; +import { Status } from 'src/app/models/chat/status.model'; +import { AuthService } from 'src/app/services/auth.service'; +import { ChatService } from 'src/app/services/chat.service'; +import { ChatOptionsPopoverPage } from 'src/app/shared/popover/chat-options-popover/chat-options-popover.page'; +import { MessagesOptionsPage } from 'src/app/shared/popover/messages-options/messages-options.page'; +import { ContactsPage } from '../new-group/contacts/contacts.page'; + +@Component({ + selector: 'app-messages', + templateUrl: './messages.page.html', + styleUrls: ['./messages.page.scss'], +}) +export class MessagesPage implements OnInit, AfterViewChecked { + + @ViewChild('scrollMe') private myScrollContainer: ElementRef; + + loggedUser: any; + + message = ''; + messages:any; + dm:any; + userPresence=''; + dmUsers:any; + + + constructor( + public popoverController: PopoverController, + private modalController: ModalController, + private navParams: NavParams, + private chatService: ChatService, + private authService: AuthService, + ) { + this.dm = this.navParams.get('dm'); + } + + ngOnInit() { + + this.scrollToBottom(); + + this.authService.userData$.subscribe((res:any)=>{ + this.loggedUser=res; + console.log(this.loggedUser); + }); + + /* console.log(this.dm); */ + + setInterval(()=>{ + this.checkUserPresence(); + this.loadMessages(); + }, 2000); + + this.getChatMembers(); + + + } + loadUser(){ + console.log('working'); + + } + ngAfterViewChecked() { + this.scrollToBottom(); + } + scrollToBottom(): void { + try { + this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight; + } catch(err) { } + } + loadMoreMessages(ev:any){ + + } + + checkUserPresence(){ + this.chatService.getUserPresence(this.dm.lastMessage.u._id).subscribe(res=>{ + this.userPresence = res['presence']; + }); + } + sendMessage(){ + + let body = { + "message": + { + "rid": this.dm._id, "msg": this.message + } + } + + this.chatService.sendMessage(body).subscribe(res=> { + this.loadMessages(); + }); + this.message = ""; + } + + loadMessages(){ + this.chatService.getRoomMessages(this.dm._id).subscribe(res => { + /* console.log(res); */ + this.messages = res['messages'].reverse(); + }) + } + getChatMembers(){ + this.chatService.getMembers(this.dm._id).subscribe(res=> { + this.dmUsers = res['members'].filter(data => data.username != this.loggedUser.me.username) + console.log(res); + console.log(this.dmUsers); + }); + } + + async openMessagesOptions(ev: any) { + const popover = await this.popoverController.create({ + component: MessagesOptionsPage, + componentProps: { + roomId: this.dm._id, + }, + cssClass: 'messages-options', + event: ev, + translucent: true, + }); + return await popover.present(); + } + + async addContacts(){ + const modal = await this.modalController.create({ + component: ContactsPage, + componentProps: {}, + cssClass: 'contacts', + backdropDismiss: false + }); + + await modal.present(); + + modal.onDidDismiss(); + } + + async openChatOptions(ev: any) { + const popover = await this.popoverController.create({ + component: ChatOptionsPopoverPage, + cssClass: 'chat-options-popover', + event: ev, + translucent: true + }); + return await popover.present(); + } + +} diff --git a/src/app/pages/chat/new-group/contacts/contacts.page.html b/src/app/pages/chat/new-group/contacts/contacts.page.html index ab73e8012..5120198ad 100644 --- a/src/app/pages/chat/new-group/contacts/contacts.page.html +++ b/src/app/pages/chat/new-group/contacts/contacts.page.html @@ -12,8 +12,10 @@
- - + + @@ -25,32 +27,26 @@
- - -
- -

Tiago Kayaya

+ + --> + + + +
+ {{header}}
-
+ +
-

Gilson Manuel

+

{{user.first}} {{user.last}}

- - + + +
diff --git a/src/app/pages/chat/new-group/contacts/contacts.page.scss b/src/app/pages/chat/new-group/contacts/contacts.page.scss index a940a13d8..c97008f82 100644 --- a/src/app/pages/chat/new-group/contacts/contacts.page.scss +++ b/src/app/pages/chat/new-group/contacts/contacts.page.scss @@ -1,6 +1,4 @@ -ion-content{ - --background:transparent; -} + .header-toolbar{ --background:transparent; --opacity: 1; @@ -53,19 +51,55 @@ ion-content{ } } } - .main-content{ - width: 360px; - height: 100%; - font-family: Roboto; - margin: 0 auto; - background-color: #fff; - overflow:auto; - padding: 0 20px 0 20px; +.toolbar-search{ + --padding-top:0 !important; + --padding-bottom:0 !important; + --padding-start:0 !important; + --padding-end:0 !important; + + .search{ + border: 1px solid #ebebeb; + margin: 5px 20px 5px 20px; + border-radius: 5px; + } + .search ion-searchbar{ + /* border: 1px solid green; */ + width: 100%; + margin: 0 !important; + padding: 0 !important; + --border-radius: 5px; + --box-shadow: none; + overflow: auto; + --icon-color:#0d89d1; + } + +} +ion-content{ + --background:transparent; +} +.main-content{ + width: 100%; + height: 100%; + font-family: Roboto; + margin: 0 auto; + background-color: #fff; + overflow:auto; + padding: 0 0 0 0; + + .item-divider{ + background: #ebebeb; + font-size: 15px; + margin: 10px 0 10px 0; + padding:5px 0 5px 20px; + + } .item-checkbox{ - width: 100%; - margin: 15px 0 15px 0; - overflow: auto; + display: flex; + margin: 10px 20px 10px 20px !important; + overflow: auto; + align-items: center; + } .item-checkbox ion-checkbox{ @@ -77,26 +111,17 @@ ion-content{ .item-checkbox p{ display: block; margin: 0 !important; - width: 270px; + width: 330px; padding-left: 10px; font-size: 15px; color: #0d89d1; float: left; } .item-checkbox ion-icon{ - float: left; - color:#99e47b; + font-size: 10px; + float: left; + color:#99e47b; + margin-left: 10px; } } - .header-search{ - margin-top: 15px; - ion-searchbar{ - width: 380px; - margin: 0px auto; - --border-radius: 5px; - --box-shadow: /* inset */ .5px .5px 5px #ebebeb; - overflow: auto; - --icon-color:#0d89d1; - } - } diff --git a/src/app/pages/chat/new-group/contacts/contacts.page.ts b/src/app/pages/chat/new-group/contacts/contacts.page.ts index 82c3b001c..b2d114651 100644 --- a/src/app/pages/chat/new-group/contacts/contacts.page.ts +++ b/src/app/pages/chat/new-group/contacts/contacts.page.ts @@ -1,3 +1,4 @@ +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Component, OnInit } from '@angular/core'; import { ModalController } from '@ionic/angular'; import { GroupMessagesPage } from '../../group-messages/group-messages.page'; @@ -9,16 +10,119 @@ import { GroupMessagesPage } from '../../group-messages/group-messages.page'; }) export class ContactsPage implements OnInit { showLoader: boolean; + users = []; + + contact: string[] = [" Ana M.", "Andre F.", "Bruno G.", "Catarina T", "Tiago"]; + + headers: HttpHeaders; + options:any; + + contacts: Contact[] = [ + { + first: 'Ana', + last: 'Manuel', + url: 'https://randomuser.me/api/portraits/med/women/54.jpg', + }, + { + first: 'Abdullah', + last: 'Hill', + url: 'https://randomuser.me/api/portraits/med/women/54.jpg', + }, + { + first: 'Batur', + last: 'Oymen', + url: 'https://randomuser.me/api/portraits/med/women/54.jpg', + }, + { + first: 'Bianca', + last: 'Costa', + url: 'https://randomuser.me/api/portraits/med/women/54.jpg', + }, + { + first: 'Zaya', + last: 'Mary', + url: 'https://randomuser.me/api/portraits/med/women/54.jpg', + }, + { + first: 'Tiago', + last: 'Kayaya', + url: 'https://randomuser.me/api/portraits/med/women/54.jpg', + } +]; constructor( - private modalController: ModalController, - ) { + private modalController: ModalController, + private http: HttpClient, + ) + { + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Access-Control-Allow-Origin' , '*'); + this.headers = this.headers.set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT'); + this.headers = this.headers.set('Accept','application/json'); + this.headers = this.headers.set('content-type','application/json'); + } ngOnInit() { + this.loadUsers(); } + + loadUsers(){ + this.options = { + headers: this.headers, + }; + /* this.http.get('https://randomuser.me/api/?results=100', this.options) + .subscribe(res => { + this.users = res['results'].sort((a,b) => { + if(a.name.first < b.name.first){ + return -1; + } + if(a.name.first > b.name.first){ + return 1; + } + return 0; + }); + console.log(res); + console.log(this.users); + }); */ + this.users = this.contacts.sort((a,b) => { + if(a.first < b.first){ + return -1; + } + if(a.first > b.first){ + return 1; + } + return 0; + }); + } + + separateLetter(record, recordIndex, records){ + /* if(recordIndex == 0){ + return record.name.first[0]; + } + + let first_prev = records[recordIndex - 1].name.first[0]; + let first_current = record.name.first[0]; + + if(first_prev != first_current){ + return first_current; + } + return null; */ + if(recordIndex == 0){ + return record.first[0]; + } + + let first_prev = records[recordIndex - 1].first[0]; + let first_current = record.first[0]; + + if(first_prev != first_current){ + return first_current; + } + return null; + } + doRefresh(event){ } diff --git a/src/app/pages/chat/new-group/new-group.page.html b/src/app/pages/chat/new-group/new-group.page.html index 8b6d4b772..5dbfe0769 100644 --- a/src/app/pages/chat/new-group/new-group.page.html +++ b/src/app/pages/chat/new-group/new-group.page.html @@ -19,26 +19,18 @@
- - +
+ Grupo Ultra-secreto - +
-
+
- - +
diff --git a/src/app/pages/chat/new-group/new-group.page.scss b/src/app/pages/chat/new-group/new-group.page.scss index 244fbb7bd..d05552f41 100644 --- a/src/app/pages/chat/new-group/new-group.page.scss +++ b/src/app/pages/chat/new-group/new-group.page.scss @@ -107,21 +107,19 @@ ion-content{ border-radius: 5px; padding-left: 10px; } + .item-container-no-border{ + display: flex; width: 360px; - margin: 15px auto; + margin: 25px auto; border-radius: 5px; - padding-left: 10px; - } - .item-container-no-border ion-checkbox{ - margin-top: 10px; + align-items: center; } .item-container-no-border ion-label{ padding-left: 10px; font-size: 12px; color: #000; - margin-top: 0 !important; } } diff --git a/src/app/pages/chat/new-group/new-group.page.ts b/src/app/pages/chat/new-group/new-group.page.ts index c284363ea..4cd6e03be 100644 --- a/src/app/pages/chat/new-group/new-group.page.ts +++ b/src/app/pages/chat/new-group/new-group.page.ts @@ -1,5 +1,7 @@ +import { analyzeAndValidateNgModules } from '@angular/compiler'; import { Component, OnInit } from '@angular/core'; -import { ModalController } from '@ionic/angular'; +import { ModalController, PickerController, PopoverController } from '@ionic/angular'; +import { GroupDurationPage } from 'src/app/shared/popover/group-duration/group-duration.page'; import { ContactsPage } from './contacts/contacts.page'; @Component({ @@ -9,8 +11,13 @@ import { ContactsPage } from './contacts/contacts.page'; }) export class NewGroupPage implements OnInit { showLoader: boolean; + displayDuration: any; + showDuration: boolean; + selectedDuration = ['','','']; constructor( + private pickerController: PickerController, + private popoverController: PopoverController, private modalController: ModalController, ) { @@ -18,6 +25,9 @@ export class NewGroupPage implements OnInit { ngOnInit() { + } + _ionChange(event){ + this.showDuration = event.detail.checked; } close(){ this.modalController.dismiss(); @@ -35,5 +45,130 @@ export class NewGroupPage implements OnInit { modal.onDidDismiss(); } + + async setDuration(ev: any) { + const popover = await this.popoverController.create({ + component: GroupDurationPage, + cssClass: 'group-duration', + event: ev, + translucent: true + }); + return await popover.present(); + } + + async showPicker(){ + const picker = await this.pickerController.create({ + cssClass: '', + buttons: [ + { + text: 'Cancelar', role: 'cancel', cssClass: 'btn-cancel' + }, + { + text: 'Ok', + cssClass: 'btn-cancel', + handler:(value:any)=>{ + console.log('button done pressed'); + this.selectedDuration = [ + value.days.value, + value.hours.value, + value.minutes.value, + ] + console.log(this.selectedDuration); + if(value.days.value != null && value.hours.value != null && value.minutes.value != null){ + if(value.days.value > 0){ + if(value.days.value == 1){ + if(value.hours.value == 1){ + this.displayDuration = value.days.value + " day " + + value.hours.value + " hora " + + value.minutes.value + " minutos"; + } + else{ + this.displayDuration = value.days.value + " days " + + value.hours.value + " horas " + + value.minutes.value + " minutos"; + } + } + else{ + if(value.hours.value == 1){ + this.displayDuration = value.days.value + " days " + + value.hours.value + " hora " + + value.minutes.value + " minutos"; + } + else{ + this.displayDuration = value.days.value + " days " + + value.hours.value + " horas " + + value.minutes.value + " minutos"; + } + } + } + else{ + if(value.hours.value == 1){ + this.displayDuration = value.hours.value + " hora " + + value.minutes.value + " minutos"; + } + else{ + this.displayDuration = value.hours.value + " horas " + + value.minutes.value + " minutos"; + } + } + } + }, + }, + ], + columns: [ + { + name: 'days', + prefix: 'Dias', + options: [ + { text: '0', value: 0 }, + { text: '1', value: 1 }, + { text: '2', value: 2 }, + { text: '3', value: 3 }, + { text: '4', value: 4 }, + ] + }, + { + name: 'hours', + prefix: 'Horas', + options: [ + { text: '0', value: 0 }, + { text: '1', value: 1 }, + { text: '2', value: 2 }, + { text: '3', value: 3 }, + { text: '4', value: 4 }, + { text: '5', value: 5 }, + { text: '6', value: 6 }, + { text: '7', value: 7 }, + { text: '8', value: 8 }, + ] + }, + { + name: 'minutes', + prefix: 'Minutos', + selectedIndex: 3, + options: [ + { text: '0', value: 0 }, + { text: '5', value: 5 }, + { text: '10', value: 10 }, + { text: '15', value: 15 }, + { text: '20', value: 20 }, + { text: '25', value: 25 }, + { text: '30', value: 30 }, + { text: '35', value: 35 }, + { text: '45', value: 45 }, + { text: '50', value: 50 }, + { text: '55', value: 55 }, + ] + } + ] + }); + await picker.present(); + picker.onDidDismiss().then(async data =>{ + let day = await picker.getColumn('days'); + let hour = await picker.getColumn('hours'); + let minutes = await picker.getColumn('minutes'); + }); + + } } diff --git a/src/app/pages/events/events.page.ts b/src/app/pages/events/events.page.ts index 002c690a9..79128f750 100644 --- a/src/app/pages/events/events.page.ts +++ b/src/app/pages/events/events.page.ts @@ -131,7 +131,9 @@ export class EventsPage implements OnInit { if(this.profile == "mdgpr"){ this.eventService.getAllMdEvents(formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss', 'pt') /* + ' 00:00:00' */, formatDate(new Date(), 'yyyy-MM-dd', 'pt') + ' 23:59:59').subscribe(res => { this.eventsList = res; - this.currentEvent = res[0].Subject; + if(res.length > 0){ + this.currentEvent = res[0].Subject; + } this.totalEvent = this.eventsList.length; this.showLoader = false; }); diff --git a/src/app/pages/login/login.page.ts b/src/app/pages/login/login.page.ts index 0e019fd0a..095126a7f 100644 --- a/src/app/pages/login/login.page.ts +++ b/src/app/pages/login/login.page.ts @@ -23,7 +23,7 @@ export class LoginPage implements OnInit { userattempt: User; public body = {"user": this.username,"password": this.password}; - public postData = {"user": "admin","password": this.password}; + public postData = {"user": this.username,"password": this.password}; constructor( private router: Router, @@ -57,7 +57,7 @@ export class LoginPage implements OnInit { loginRocketChat(){ this.authService.loginChat(this.postData).subscribe((res: any) =>{ - this.storageService.store(res); + this.storageService.store(AuthConnstants.AUTH, res.data); console.log('Login to Rocket chat OK'); },(error:any) =>{ console.log('Network error'); @@ -67,7 +67,7 @@ export class LoginPage implements OnInit { async Login(){ - try { + /* try { */ //Go to our home in home/feed. //this.router.navigate(['/home/events']); if(this.validateInput()){ @@ -79,8 +79,7 @@ export class LoginPage implements OnInit { } if (await this.authService.login(this.userattempt)){ this.loginRocketChat(); - console.log('Log Gabinete Digital OK'); - this.router.navigate(['/home/events']); + this.router.navigate(['/home/events']);this.presentAlert('1'); } else { @@ -92,8 +91,9 @@ export class LoginPage implements OnInit { //this.toastService.presentToast('Preencha todos campos'); this.presentAlert('Por favor, insira o seu nome de utilizador e palavra-passe.'); } - } catch (error) { - this.presentAlert('Ocorreu um erro ao fazer login. Contacte o administrador de sistema.'); - } + /* } catch (error) { + error + this.presentAlert('Ocorreu um erro ao fazer login. Contacte o administrador de sistema. '+ error); + } */ } } diff --git a/src/app/pages/publications/new-publication/new-publication.page.ts b/src/app/pages/publications/new-publication/new-publication.page.ts index ee3389064..48a448a72 100644 --- a/src/app/pages/publications/new-publication/new-publication.page.ts +++ b/src/app/pages/publications/new-publication/new-publication.page.ts @@ -10,9 +10,10 @@ import { Image } from 'src/app/models/image'; import { ThrowStmt } from '@angular/compiler'; import { PhotoService } from 'src/app/services/photo.service'; import { AlertService } from 'src/app/services/alert.service'; - +//Capacitor /* const { Camera } = Plugins; */ +//Cordova import { Camera, CameraOptions } from '@ionic-native/camera/ngx'; import { PublicationFolder } from 'src/app/models/publicationfolder'; import { ViewPublicationsPage } from '../view-publications/view-publications.page'; diff --git a/src/app/pages/publications/view-publications/publication-detail/publication-detail.page.ts b/src/app/pages/publications/view-publications/publication-detail/publication-detail.page.ts index 3bd5967dc..29226a050 100644 --- a/src/app/pages/publications/view-publications/publication-detail/publication-detail.page.ts +++ b/src/app/pages/publications/view-publications/publication-detail/publication-detail.page.ts @@ -70,9 +70,6 @@ export class PublicationDetailPage implements OnInit { this.showLoader = false; }); } - doRefresh(event){ - - } close(){ this.modalController.dismiss(); diff --git a/src/app/pipes/filter.pipe.spec.ts b/src/app/pipes/filter.pipe.spec.ts new file mode 100644 index 000000000..1427de361 --- /dev/null +++ b/src/app/pipes/filter.pipe.spec.ts @@ -0,0 +1,8 @@ +import { FilterPipe } from './filter.pipe'; + +describe('FilterPipe', () => { + it('create an instance', () => { + const pipe = new FilterPipe(); + expect(pipe).toBeTruthy(); + }); +}); diff --git a/src/app/pipes/filter.pipe.ts b/src/app/pipes/filter.pipe.ts new file mode 100644 index 000000000..68440de14 --- /dev/null +++ b/src/app/pipes/filter.pipe.ts @@ -0,0 +1,21 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'filter' +}) +export class FilterPipe implements PipeTransform { + + transform(array: any[], text:string, column:string): any { + + if(text === ''){ + return array; + } + + text = text.toLowerCase(); + + return array.filter(item =>{ + return item[column].toLowerCase().includes(text); + }); + } + +} diff --git a/src/app/pipes/pipes.module.ts b/src/app/pipes/pipes.module.ts new file mode 100644 index 000000000..0d9ad52be --- /dev/null +++ b/src/app/pipes/pipes.module.ts @@ -0,0 +1,10 @@ +import { NgModule } from '@angular/core'; +import { FilterPipe } from './filter.pipe'; + + +@NgModule({ + declarations: [FilterPipe], + exports: [FilterPipe], + imports: [] +}) +export class PipesModule { } diff --git a/src/app/resolvers/userData.resolver.ts b/src/app/resolvers/userData.resolver.ts index 8d9771fc6..b5b5bbc93 100644 --- a/src/app/resolvers/userData.resolver.ts +++ b/src/app/resolvers/userData.resolver.ts @@ -8,6 +8,6 @@ export class UserDataResolver{ constructor(private authService: AuthService){} resolve(){ - /* return this.authService.getUserData(); */ + return this.authService.getUserData(); } } \ No newline at end of file diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index 177d1c37c..bdb4ca88e 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -47,37 +47,28 @@ export class AuthService { //Login to rocketChat server loginChat(postData: any):Observable { - const res = this.httpService.post('login', postData); - const res2 = res.subscribe(res=>{ - this.storageService.store(res); - }); - return res; + return this.httpService.post('login', postData); } - //Get user data from RocketChat + //Get user data from RocketChat | global object getUserData(){ - const res = this.storageService.get('user'); - console.log(res); - - - /* this.storageService.get(AuthConnstants.AUTH).then(res=>{ + this.storageService.get(AuthConnstants.AUTH).then(res=>{ this.userData$.next(res); - }) */ + }); } - /* getProfile(){ + getProfile(){ this.storageService.get(AuthConnstants.PROFILE).then(res=>{ return res; }); - } */ + } logoutChat(){ //this.storageService.clear(); - /* this.storageService.removeStorageItem(AuthConnstants.AUTH).then(res =>{ + this.storageService.removeStorageItem(AuthConnstants.AUTH).then(res =>{ this.userData$.next(''); this.router.navigate(['']); - }) */ - + }) } } diff --git a/src/app/services/chat.service.ts b/src/app/services/chat.service.ts index 0b0de9853..f400ca1ca 100644 --- a/src/app/services/chat.service.ts +++ b/src/app/services/chat.service.ts @@ -1,4 +1,4 @@ -import { HttpHeaders } from '@angular/common/http'; +import { HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from "rxjs" import { AuthService } from './auth.service'; @@ -14,6 +14,9 @@ import { Storage } from '@ionic/storage'; export class ChatService { headers: HttpHeaders; options:any; + options1:any; + X_User_Id:any; + X_Auth_Token:any; constructor( @@ -23,35 +26,126 @@ export class ChatService { private storage: Storage, private storageService:StorageService,) { this.headers = new HttpHeaders(); - - this.storage.get('user').then((val) => { - console.log(JSON.parse(unescape(atob(val))).data.userId); - let user = JSON.parse(unescape(atob(val))).data; - - this.headers = this.headers.set('Access-Control-Allow-Origin', 'http://localhost:8100'); - this.headers = this.headers.set('Access-Control-Allow-Credentials', 'true'); - this.headers = this.headers.set('Access-Control-Allow-Headers', 'Access-Control-Allow-Origin, Access-Control-Allow-Credentials, Access-Control-Allow-Headers, x-requested-with, Content-Type, X-Auth-Token, X-User-Id, origin, authorization, accept, client-security-token'); - this.headers = this.headers.set('X-User-Id', user.userId); - this.headers = this.headers.set('X-Auth-Token', user.authToken); - }); - - /* this.authService.userData$.subscribe((res:any)=>{ + /* this.headers = this.headers.set('X-User-Id', 'GqjNWiLrGEHRna7Zn'); + this.headers = this.headers.set('X-Auth-Token', 'dAM0ZOTAy8jzQA_vS25z2IrnSc6sYLfi5rmaa35YNUz'); */ + - + this.authService.userData$.subscribe((res:any)=>{ this.headers = this.headers.set('X-User-Id', res.userId); this.headers = this.headers.set('X-Auth-Token', res.authToken); - }); */ + }); this.options = { headers: this.headers, }; } + /* getUser(){ + this.storage.get('user').then((val) => { + let user = JSON.parse(unescape(atob(val))).data; + + this.headers = this.headers.set('X-User-Id', user.userId); + this.headers = this.headers.set('X-Auth-Token', user.authToken); + + this.options1 = { + headers: this.headers, + }; + console.log(this.options1); + + this.http.get(environment.apiChatUrl+'users.presence', this.options1).subscribe(res => { + console.log(res); + }); + + }); + } */ + getAllDirectMessages(){ + return this.http.get(environment.apiChatUrl+'im.list', this.options); + } + getAllChannels(){ + return this.http.get(environment.apiChatUrl+'channels.list', this.options); + } + getAllUserChannels(){ + return this.http.get(environment.apiChatUrl+'channels.list.joined', this.options); + } + + getAllRooms(){ + return this.http.get(environment.apiChatUrl+'rooms.get', this.options); + } + getAllPrivateGroups(){ + return this.http.get(environment.apiChatUrl+'groups.list', this.options); + } + getAllUsers(){ - console.log(this.headers); return this.http.get(environment.apiChatUrl+'users.list', this.options); } getAllConnectedUsers(){ return this.http.get(environment.apiChatUrl+'users.presence', this.options); } - getAllPrivateGroups(){ - return this.http.get(environment.apiChatUrl+'groups.list', this.options); + //Check whether user is online or offline + getUserPresence(id:any){ + + let params = new HttpParams(); + params = params.set("userId", id); + + let opts = { + headers: this.headers, + params: params + } + return this.http.get(environment.apiChatUrl+'users.getPresence', opts); } + + //Load messages from roomId + loadJoinedRooms(){ + return this.http.get(environment.apiChatUrl+'im.list', this.options); + } + + //Load messages from roomId + getRoomMessages(roomId:any){ + + let params = new HttpParams(); + params = params.set("roomId", roomId); + + let opts = { + headers: this.headers, + params: params + } + return this.http.get(environment.apiChatUrl+'im.history', opts); + } + + sendMessage(body:any){ + let opts = { + headers: this.headers, + } + return this.http.post(environment.apiChatUrl+'chat.sendMessage', body, opts); + } + //Load members from a chat + getMembers(roomId:any){ + + let params = new HttpParams(); + params = params.set("roomId", roomId); + + let opts = { + headers: this.headers, + params: params + } + return this.http.get(environment.apiChatUrl+'im.members', opts); + } + removeChatRoom(body:any){ + let opts = { + headers: this.headers, + } + return this.http.post(environment.apiChatUrl+'im.close', body, this.options); + } + createRoom(body:any){ + return this.http.post(environment.apiChatUrl+'im.create', body, this.options); + } + getDirectMessage(roomId:string){ + let params = new HttpParams(); + params = params.set("roomId", roomId); + + let opts = { + headers: this.headers, + params: params + } + return this.http.get(environment.apiChatUrl+'im.messages', opts); + } + } diff --git a/src/app/services/storage.service.ts b/src/app/services/storage.service.ts index 9650edd7b..d47dacad2 100644 --- a/src/app/services/storage.service.ts +++ b/src/app/services/storage.service.ts @@ -1,37 +1,33 @@ import { Injectable } from '@angular/core'; -import { Storage } from '@ionic/storage'; -import { AuthConnstants } from '../config/auth-constants'; +import { Plugins } from '@capacitor/core'; +const { Storage } = Plugins; @Injectable({ providedIn: 'root' }) export class StorageService { - user: any = "Max"; - storageKey = "user"; - constructor(private storage: Storage) {} + constructor() {} - // set a key/value2 - store(user:any){ - const encryptedValue = btoa(escape(JSON.stringify(user))); - this.storage.set(AuthConnstants.AUTH, encryptedValue); + // Store the value + async store(storageKey: string, value: any) { + const encryptedValue = btoa(escape(JSON.stringify(value))); + await Storage.set({ + key: storageKey, + value: encryptedValue + }); } - - // Or to get a key/value pair - get(key:any){ - let user = this.storage.get(key).then((val) => { - console.log(JSON.parse(unescape(atob(val))).data); - return JSON.parse(unescape(atob(val))).data; - }); - return user; + // Get the value + async get(storageKey: string) { + const ret = await Storage.get({ key: storageKey }); + return JSON.parse(unescape(atob(ret.value))); } - - /* async removeStorageItem(storageKey: string) { - await this.storage.remove({ key: storageKey }); - } */ + async removeStorageItem(storageKey: string) { + await Storage.remove({ key: storageKey }); + } // Clear storage async clear() { - await this.storage.clear(); + await Storage.clear(); } } diff --git a/src/app/shared/popover/chat-options-popover/chat-options-popover-routing.module.ts b/src/app/shared/popover/chat-options-popover/chat-options-popover-routing.module.ts new file mode 100644 index 000000000..8e189ed7f --- /dev/null +++ b/src/app/shared/popover/chat-options-popover/chat-options-popover-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { ChatOptionsPopoverPage } from './chat-options-popover.page'; + +const routes: Routes = [ + { + path: '', + component: ChatOptionsPopoverPage + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class ChatOptionsPopoverPageRoutingModule {} diff --git a/src/app/shared/popover/chat-options-popover/chat-options-popover.module.ts b/src/app/shared/popover/chat-options-popover/chat-options-popover.module.ts new file mode 100644 index 000000000..d6e7129d9 --- /dev/null +++ b/src/app/shared/popover/chat-options-popover/chat-options-popover.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { IonicModule } from '@ionic/angular'; + +import { ChatOptionsPopoverPageRoutingModule } from './chat-options-popover-routing.module'; + +import { ChatOptionsPopoverPage } from './chat-options-popover.page'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + ChatOptionsPopoverPageRoutingModule + ], + declarations: [ChatOptionsPopoverPage] +}) +export class ChatOptionsPopoverPageModule {} diff --git a/src/app/shared/popover/chat-options-popover/chat-options-popover.page.html b/src/app/shared/popover/chat-options-popover/chat-options-popover.page.html new file mode 100644 index 000000000..ebd9a9c01 --- /dev/null +++ b/src/app/shared/popover/chat-options-popover/chat-options-popover.page.html @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/shared/popover/chat-options-popover/chat-options-popover.page.scss b/src/app/shared/popover/chat-options-popover/chat-options-popover.page.scss new file mode 100644 index 000000000..1e44f4b3d --- /dev/null +++ b/src/app/shared/popover/chat-options-popover/chat-options-popover.page.scss @@ -0,0 +1,32 @@ +ion-row{ + padding: 10px 10px 5px 10px; +} +.border-top{ + padding-top: 5px !important; + border-top: 1px solid #ebebeb; +} +/* ion-col{ + border: 1px solid red; +} */ +.btn-cancel{ + display: block; + width: 170px !important; + height: 45px !important; + border-radius: 22.5px; + background-color: #e0e9ee; + --color: #061b52 !important; + --background:transparent; + --box-shadow: none; + margin: 0 auto !important; + } + +.btn-ok{ + display: block; + width: 170px !important; + height: 45px !important; + border-radius: 22.5px; + --background: #42b9fe; + --color: #ffffff !important; + margin: 0 auto !important; + + } \ No newline at end of file diff --git a/src/app/shared/popover/chat-options-popover/chat-options-popover.page.spec.ts b/src/app/shared/popover/chat-options-popover/chat-options-popover.page.spec.ts new file mode 100644 index 000000000..a720defb5 --- /dev/null +++ b/src/app/shared/popover/chat-options-popover/chat-options-popover.page.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { ChatOptionsPopoverPage } from './chat-options-popover.page'; + +describe('ChatOptionsPopoverPage', () => { + let component: ChatOptionsPopoverPage; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ChatOptionsPopoverPage ], + imports: [IonicModule.forRoot()] + }).compileComponents(); + + fixture = TestBed.createComponent(ChatOptionsPopoverPage); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/popover/chat-options-popover/chat-options-popover.page.ts b/src/app/shared/popover/chat-options-popover/chat-options-popover.page.ts new file mode 100644 index 000000000..283b273a0 --- /dev/null +++ b/src/app/shared/popover/chat-options-popover/chat-options-popover.page.ts @@ -0,0 +1,22 @@ +import { Component, OnInit } from '@angular/core'; +import { PopoverController } from '@ionic/angular'; + +@Component({ + selector: 'app-chat-options-popover', + templateUrl: './chat-options-popover.page.html', + styleUrls: ['./chat-options-popover.page.scss'], +}) +export class ChatOptionsPopoverPage implements OnInit { + + constructor( + private popoverController: PopoverController + ) { } + + ngOnInit() { + } + + close(){ + this.popoverController.dismiss(); + } + +} diff --git a/src/app/shared/popover/chat-popover/chat-popover.page.html b/src/app/shared/popover/chat-popover/chat-popover.page.html index 69938a705..93794cd0d 100644 --- a/src/app/shared/popover/chat-popover/chat-popover.page.html +++ b/src/app/shared/popover/chat-popover/chat-popover.page.html @@ -1,16 +1,18 @@ -
- -
-
- Sair do Grupo. - Alterar nome -
-
-
-
-
- Apagar grupo -
-
-
-
+ + + + + + + + + + + + + + + + + + diff --git a/src/app/shared/popover/chat-popover/chat-popover.page.scss b/src/app/shared/popover/chat-popover/chat-popover.page.scss index cb6972c78..0171ad1d0 100644 --- a/src/app/shared/popover/chat-popover/chat-popover.page.scss +++ b/src/app/shared/popover/chat-popover/chat-popover.page.scss @@ -1,49 +1,15 @@ -.buttons{ - overflow: auto; - padding-top: 10px; - padding-bottom: 10px; +ion-row{ + padding: 10px 10px 5px 10px; } -.btn-item{ - padding: 2px; - margin: 10px 20px 10px 20px !important; - overflow: auto; +.border-top{ + padding-top: 5px !important; + border-top: 1px solid #ebebeb; } -.btn-ok, .btn-cancel, .btn-delete{ +/* ion-col{ + border: 1px solid red; +} */ + +/* .btn-ok, .btn-cancel, .btn-delete{ font-size: 13px; padding:0 !important; -} -hr.solid { - width: 360px; - border-top: 1px solid #ebebeb; - } -.btn-ok{ - display: block; - width: 170px !important; - height: 45px !important; - border-radius: 22.5px; - /* right: 20px !important; */ - --background: #42b9fe; - --color: #ffffff !important; - float: left; - } - .btn-cancel{ - width: 170px !important; - height: 45px !important; - border-radius: 22.5px; - background-color: #e0e9ee; - --color: #061b52 !important; - --background:transparent; - --box-shadow: none; - float: right; - - } - .btn-delete{ - width: 170px !important; - height: 45px !important;; - border-radius: 22.5px; - --background: #ffe0e0; - --color: #d30a0a !important; - --padding-start:0 !important; - --padding-end:0 !important; - float: left; - } \ No newline at end of file +} */ diff --git a/src/app/shared/popover/chat-popover/chat-popover.page.ts b/src/app/shared/popover/chat-popover/chat-popover.page.ts index 3e18c59fb..07c0841ee 100644 --- a/src/app/shared/popover/chat-popover/chat-popover.page.ts +++ b/src/app/shared/popover/chat-popover/chat-popover.page.ts @@ -1,4 +1,5 @@ import { Component, OnInit } from '@angular/core'; +import { PopoverController } from '@ionic/angular'; @Component({ selector: 'app-chat-popover', @@ -7,9 +8,14 @@ import { Component, OnInit } from '@angular/core'; }) export class ChatPopoverPage implements OnInit { - constructor() { } + constructor( + private popoverController: PopoverController, + ) { } ngOnInit() { } + close(){ + this.popoverController.dismiss(); + } } diff --git a/src/app/shared/popover/group-duration/group-duration-routing.module.ts b/src/app/shared/popover/group-duration/group-duration-routing.module.ts new file mode 100644 index 000000000..fe80d4118 --- /dev/null +++ b/src/app/shared/popover/group-duration/group-duration-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { GroupDurationPage } from './group-duration.page'; + +const routes: Routes = [ + { + path: '', + component: GroupDurationPage + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class GroupDurationPageRoutingModule {} diff --git a/src/app/shared/popover/group-duration/group-duration.module.ts b/src/app/shared/popover/group-duration/group-duration.module.ts new file mode 100644 index 000000000..eb4dd1468 --- /dev/null +++ b/src/app/shared/popover/group-duration/group-duration.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { IonicModule } from '@ionic/angular'; + +import { GroupDurationPageRoutingModule } from './group-duration-routing.module'; + +import { GroupDurationPage } from './group-duration.page'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + GroupDurationPageRoutingModule + ], + declarations: [GroupDurationPage] +}) +export class GroupDurationPageModule {} diff --git a/src/app/shared/popover/group-duration/group-duration.page.html b/src/app/shared/popover/group-duration/group-duration.page.html new file mode 100644 index 000000000..768a33230 --- /dev/null +++ b/src/app/shared/popover/group-duration/group-duration.page.html @@ -0,0 +1,19 @@ + +
+

Duração

+
+
+ +
+
+ + + + + + + + +
+ +
diff --git a/src/app/shared/popover/group-duration/group-duration.page.scss b/src/app/shared/popover/group-duration/group-duration.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src/app/shared/popover/group-duration/group-duration.page.spec.ts b/src/app/shared/popover/group-duration/group-duration.page.spec.ts new file mode 100644 index 000000000..ba52f3ffa --- /dev/null +++ b/src/app/shared/popover/group-duration/group-duration.page.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { GroupDurationPage } from './group-duration.page'; + +describe('GroupDurationPage', () => { + let component: GroupDurationPage; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ GroupDurationPage ], + imports: [IonicModule.forRoot()] + }).compileComponents(); + + fixture = TestBed.createComponent(GroupDurationPage); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/popover/group-duration/group-duration.page.ts b/src/app/shared/popover/group-duration/group-duration.page.ts new file mode 100644 index 000000000..7e095ff05 --- /dev/null +++ b/src/app/shared/popover/group-duration/group-duration.page.ts @@ -0,0 +1,21 @@ +import { Component, OnInit } from '@angular/core'; +import { PopoverController } from '@ionic/angular'; + +@Component({ + selector: 'app-group-duration', + templateUrl: './group-duration.page.html', + styleUrls: ['./group-duration.page.scss'], +}) +export class GroupDurationPage implements OnInit { + + constructor( + public popoverController: PopoverController, + ) { } + + ngOnInit() { + } + close(){ + this.popoverController.dismiss(); + } + +} diff --git a/src/app/shared/popover/messages-options/messages-options-routing.module.ts b/src/app/shared/popover/messages-options/messages-options-routing.module.ts new file mode 100644 index 000000000..1ae2ef283 --- /dev/null +++ b/src/app/shared/popover/messages-options/messages-options-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { MessagesOptionsPage } from './messages-options.page'; + +const routes: Routes = [ + { + path: '', + component: MessagesOptionsPage + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class MessagesOptionsPageRoutingModule {} diff --git a/src/app/shared/popover/messages-options/messages-options.module.ts b/src/app/shared/popover/messages-options/messages-options.module.ts new file mode 100644 index 000000000..da09a957d --- /dev/null +++ b/src/app/shared/popover/messages-options/messages-options.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { IonicModule } from '@ionic/angular'; + +import { MessagesOptionsPageRoutingModule } from './messages-options-routing.module'; + +import { MessagesOptionsPage } from './messages-options.page'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + MessagesOptionsPageRoutingModule + ], + declarations: [MessagesOptionsPage] +}) +export class MessagesOptionsPageModule {} diff --git a/src/app/shared/popover/messages-options/messages-options.page.html b/src/app/shared/popover/messages-options/messages-options.page.html new file mode 100644 index 000000000..be9bcf347 --- /dev/null +++ b/src/app/shared/popover/messages-options/messages-options.page.html @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/app/shared/popover/messages-options/messages-options.page.scss b/src/app/shared/popover/messages-options/messages-options.page.scss new file mode 100644 index 000000000..63122bda8 --- /dev/null +++ b/src/app/shared/popover/messages-options/messages-options.page.scss @@ -0,0 +1,3 @@ +ion-row{ + padding: 10px 10px 5px 10px; +} \ No newline at end of file diff --git a/src/app/shared/popover/messages-options/messages-options.page.spec.ts b/src/app/shared/popover/messages-options/messages-options.page.spec.ts new file mode 100644 index 000000000..f81205230 --- /dev/null +++ b/src/app/shared/popover/messages-options/messages-options.page.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { MessagesOptionsPage } from './messages-options.page'; + +describe('MessagesOptionsPage', () => { + let component: MessagesOptionsPage; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ MessagesOptionsPage ], + imports: [IonicModule.forRoot()] + }).compileComponents(); + + fixture = TestBed.createComponent(MessagesOptionsPage); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/popover/messages-options/messages-options.page.ts b/src/app/shared/popover/messages-options/messages-options.page.ts new file mode 100644 index 000000000..98ac52044 --- /dev/null +++ b/src/app/shared/popover/messages-options/messages-options.page.ts @@ -0,0 +1,38 @@ +import { Component, OnInit } from '@angular/core'; +import { NavParams, PopoverController } from '@ionic/angular'; +import { ChatService } from 'src/app/services/chat.service'; + +@Component({ + selector: 'app-messages-options', + templateUrl: './messages-options.page.html', + styleUrls: ['./messages-options.page.scss'], +}) +export class MessagesOptionsPage implements OnInit { + + roomId:string; + + constructor( + private popoverController: PopoverController, + private chatService: ChatService, + private navParams: NavParams, + ) + { + this.roomId = this.navParams.get('roomId'); + } + + ngOnInit() { + } + + close(){ + this.popoverController.dismiss(); + } + + closeChatRoom(){ + let body = { "roomId": this.roomId } + this.chatService.removeChatRoom(body).subscribe(res=>{ + console.log(res); + }); + this.close(); + } + +} diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 981845628..5af0817a6 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -19,14 +19,12 @@ import { ChatPopoverPage } from './popover/chat-popover/chat-popover.page'; HeaderPrPage, BtnSeguintePage, BtnModalDismissPage, - ChatPopoverPage, ], entryComponents:[], declarations: [HeaderPage, HeaderPrPage, BtnSeguintePage, BtnModalDismissPage, - ChatPopoverPage, ] }) export class SharedModule {} \ No newline at end of file diff --git a/src/assets/icon/icons-chat-mic.svg b/src/assets/icon/icons-chat-mic.svg new file mode 100644 index 000000000..6ee4201ff --- /dev/null +++ b/src/assets/icon/icons-chat-mic.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/icon/icons-chat-options.svg b/src/assets/icon/icons-chat-options.svg new file mode 100644 index 000000000..0823c7065 --- /dev/null +++ b/src/assets/icon/icons-chat-options.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/icons-chat-send.svg b/src/assets/icon/icons-chat-send.svg similarity index 100% rename from src/assets/images/icons-chat-send.svg rename to src/assets/icon/icons-chat-send.svg diff --git a/src/assets/icon/icons-user.svg b/src/assets/icon/icons-user.svg new file mode 100644 index 000000000..74a4a034b --- /dev/null +++ b/src/assets/icon/icons-user.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/icons-chat-contacts-list.svg b/src/assets/images/icons-chat-contacts-list.svg new file mode 100644 index 000000000..74a4a034b --- /dev/null +++ b/src/assets/images/icons-chat-contacts-list.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 640e53a5a..74da63bde 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -1,7 +1,7 @@ export const environment = { production: true, apiURL: 'http://gpr-dev-01.gabinetedigital.local/GabineteDigital.Services/v1/api/', - apiChatUrl: 'http://192.168.100.111:3000/api/v1/', + apiChatUrl: 'http://chat.gabinetedigital.local:3000/api/v1/', domain: 'gabinetedigital.local', defaultuser: '', defaultuserpwd: '' diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 4b92544cb..8792937f1 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -5,7 +5,7 @@ export const environment = { production: false, apiURL: 'http://gpr-dev-01.gabinetedigital.local/GabineteDigital.Services/V3/api/', - apiChatUrl: 'http://192.168.100.111:3000/api/v1/', + apiChatUrl: 'http://chat.gabinetedigital.local:3000/api/v1/', domain: 'gabinetedigital.local', defaultuser: 'paulo.pinto', defaultuserpwd: 'tabteste@006' diff --git a/src/theme/variables.scss b/src/theme/variables.scss index 877420d58..6e7fc3d46 100644 --- a/src/theme/variables.scss +++ b/src/theme/variables.scss @@ -264,7 +264,7 @@ background: rgba(51, 51, 51, 0.3); } .newchat, .new-group, .contacts, .group-messages, .custom-modal{ - padding-top: 73px; + padding-top: 93px; --border-radius: 25px 25px 0 0; --border-width:0px; } @@ -281,6 +281,33 @@ max-height: 160px; min-height: 160px; } +.messages-options .popover-content{ + width: 100% !important; + left: 0 !important; + bottom: 0 !important; + right: 0 !important; + top: calc(100% - 90px) !important; + max-height: 90px; + min-height: 90px; +} +.chat-options-popover .popover-content{ + width: 100% !important; + left: 0 !important; + bottom: 0 !important; + right: 0 !important; + top: calc(100% - 210px) !important; + max-height: 210px; + min-height: 210px; +} +.group-duration .popover-content{ + width: 100% !important; + left: 0 !important; + bottom: 0 !important; + right: 0 !important; + top: calc(100% - 500px) !important; + max-height: 500px; + min-height: 500px; +} /* .event-actions-popover ion-list{ } */ @@ -381,10 +408,10 @@ --background: #fff; } .btn-ok{ - width: 160px !important; + width: 170px !important; height: 45px !important; - margin: 0 auto; - padding: 10px 15px; + margin: 0 auto !important; + padding:0 !important; border-radius: 22.5px; background-color: #42b9fe; color: #ffffff !important; @@ -398,22 +425,24 @@ color: #ffffff !important; } .btn-delete{ + display: block; width: 170px !important; height: 45px !important; - margin: 0 auto; + margin: 0 auto !important; padding:0 !important; border-radius: 22.5px; background-color: #ffe0e0; color: #d30a0a !important; } .btn-cancel{ - width: 160px !important; + display: block; + width: 170px !important; height: 45px !important; - margin: 0 auto; padding:0 !important; border-radius: 22.5px; background-color: #e0e9ee; color: #061b52 !important; + margin: 0 auto !important; } .bg-blue{ --background:#0782c9;