diff --git a/android/app/build.gradle b/android/app/build.gradle index ed789500f..72ad69b1e 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -20,7 +20,7 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode code - versionName "2.1.0" + versionName "2.4.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/android/app/capacitor.build.gradle b/android/app/capacitor.build.gradle index d224f1d80..6fbed166a 100644 --- a/android/app/capacitor.build.gradle +++ b/android/app/capacitor.build.gradle @@ -11,6 +11,7 @@ apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" dependencies { implementation project(':capacitor-app') implementation project(':capacitor-browser') + implementation project(':capacitor-clipboard') implementation project(':capacitor-filesystem') implementation project(':capacitor-haptics') implementation project(':capacitor-keyboard') diff --git a/android/app/src/main/assets/capacitor.plugins.json b/android/app/src/main/assets/capacitor.plugins.json index 582b2afb6..e305a1edf 100644 --- a/android/app/src/main/assets/capacitor.plugins.json +++ b/android/app/src/main/assets/capacitor.plugins.json @@ -7,6 +7,10 @@ "pkg": "@capacitor/browser", "classpath": "com.capacitorjs.plugins.browser.BrowserPlugin" }, + { + "pkg": "@capacitor/clipboard", + "classpath": "com.capacitorjs.plugins.clipboard.ClipboardPlugin" + }, { "pkg": "@capacitor/filesystem", "classpath": "com.capacitorjs.plugins.filesystem.FilesystemPlugin" diff --git a/android/capacitor.settings.gradle b/android/capacitor.settings.gradle index 014c5a5b0..f97b5ba59 100644 --- a/android/capacitor.settings.gradle +++ b/android/capacitor.settings.gradle @@ -8,6 +8,9 @@ project(':capacitor-app').projectDir = new File('../node_modules/@capacitor/app/ include ':capacitor-browser' project(':capacitor-browser').projectDir = new File('../node_modules/@capacitor/browser/android') +include ':capacitor-clipboard' +project(':capacitor-clipboard').projectDir = new File('../node_modules/@capacitor/clipboard/android') + include ':capacitor-filesystem' project(':capacitor-filesystem').projectDir = new File('../node_modules/@capacitor/filesystem/android') diff --git a/ios/App/Podfile b/ios/App/Podfile index 2270d97c8..db0743cb8 100644 --- a/ios/App/Podfile +++ b/ios/App/Podfile @@ -11,6 +11,7 @@ def capacitor_pods pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios' pod 'CapacitorApp', :path => '../../node_modules/@capacitor/app' pod 'CapacitorBrowser', :path => '../../node_modules/@capacitor/browser' + pod 'CapacitorClipboard', :path => '../../node_modules/@capacitor/clipboard' pod 'CapacitorFilesystem', :path => '../../node_modules/@capacitor/filesystem' pod 'CapacitorHaptics', :path => '../../node_modules/@capacitor/haptics' pod 'CapacitorKeyboard', :path => '../../node_modules/@capacitor/keyboard' diff --git a/package.json b/package.json index 870923082..adb3c5982 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "@capacitor/app": "1.1.1", "@capacitor/browser": "^1.0.7", "@capacitor/cli": "^3.5.1", + "@capacitor/clipboard": "^1.0.8", "@capacitor/core": "^3.5.1", "@capacitor/filesystem": "^1.1.0", "@capacitor/haptics": "1.1.4", diff --git a/src/app/core/constants/formConstant.ts b/src/app/core/constants/formConstant.ts index b28c8ae05..efef3e6ec 100644 --- a/src/app/core/constants/formConstant.ts +++ b/src/app/core/constants/formConstant.ts @@ -33,4 +33,18 @@ export const HELP_VIDEOS: IFORM = { "subType": "videos", "action": "videoFields", "templateName":"defaultTemplate", +} + +export const PLATFORMS: IFORM = { + "type": "platformApp", + "subType": "platformAppForm", + "action": "platformAppFields", + "templateName": "defaultTemplate" +} + +export const HELP: IFORM = { + "type": "help", + "subType": "helpForm", + "action": "helpFields", + "templateName":"defaultTemplate" } \ No newline at end of file diff --git a/src/app/core/constants/urlConstants.ts b/src/app/core/constants/urlConstants.ts index 54f803d93..85320b7bf 100644 --- a/src/app/core/constants/urlConstants.ts +++ b/src/app/core/constants/urlConstants.ts @@ -19,6 +19,7 @@ export const urlConstants = { UPCOMING_SESSIONS:"/mentoring/v1/mentors/upcomingSessions/", SHARE_MENTOR_PROFILE:"/mentoring/v1/mentors/share/", REPORT_ISSUE:"/mentoring/v1/issues/create", + GET_MAIL_INFO:"/mentoring/v1/platform/config", // FORMS FORM_READ:'/mentoring/v1/form/read', diff --git a/src/app/core/services/auth/auth.service.ts b/src/app/core/services/auth/auth.service.ts index f9cf6a48a..d64e7e4e0 100644 --- a/src/app/core/services/auth/auth.service.ts +++ b/src/app/core/services/auth/auth.service.ts @@ -119,4 +119,13 @@ export class AuthService { } } + async getMailInfo(){ + const config = { + url: urlConstants.API_URLS.GET_MAIL_INFO + }; + let data: any = await this.httpService.post(config); + let result = _.get(data, 'result'); + return result; + } + } \ No newline at end of file diff --git a/src/app/core/services/http/http.service.ts b/src/app/core/services/http/http.service.ts index 80ad378c1..b59ff8101 100644 --- a/src/app/core/services/http/http.service.ts +++ b/src/app/core/services/http/http.service.ts @@ -20,6 +20,7 @@ import { FeedbackPage } from 'src/app/pages/feedback/feedback.page'; }) export class HttpService { baseUrl; + isFeedbackTriggered = false; constructor( private http: HTTP, private userService: UserService, @@ -75,7 +76,8 @@ export class HttpService { return this.http.get(this.baseUrl + requestParam.url, '', headers) .then((data: any) => { let result: any = JSON.parse(data.data); - if(result?.meta?.data?.length){ + if(result?.meta?.data?.length && !this.isFeedbackTriggered){ + this.isFeedbackTriggered = true; this.openModal(result?.meta?.data[0]); } if (result.responseCode === "OK") { @@ -179,6 +181,8 @@ export class HttpService { data: sessionData, } }); - return await modal.present(); + await modal.present(); + const isModelClosed = await modal.onWillDismiss(); + this.isFeedbackTriggered = isModelClosed.data; } } diff --git a/src/app/core/services/session/session.service.ts b/src/app/core/services/session/session.service.ts index d6678c374..e04783552 100644 --- a/src/app/core/services/session/session.service.ts +++ b/src/app/core/services/session/session.service.ts @@ -4,13 +4,15 @@ import { urlConstants } from '../../constants/urlConstants'; import * as _ from 'lodash-es'; import { InAppBrowser } from '@awesome-cordova-plugins/in-app-browser/ngx'; import { Router } from '@angular/router'; +import { JoinDialogBoxComponent } from 'src/app/shared/components/join-dialog-box/join-dialog-box.component'; +import { ModalController } from '@ionic/angular'; @Injectable({ providedIn: 'root' }) export class SessionService { - constructor(private loaderService: LoaderService, private httpService: HttpService, private toast: ToastService, private inAppBrowser: InAppBrowser, private router: Router) { } + constructor(private loaderService: LoaderService, private httpService: HttpService, private toast: ToastService, private inAppBrowser: InAppBrowser, private router: Router, private modalCtrl: ModalController) { } async createSession(formData, id?: string) { @@ -29,6 +31,7 @@ export class SessionService { } catch (error) { this.loaderService.stopLoader(); + return false } } @@ -151,7 +154,8 @@ async getSessionsList(obj) { } } - async joinSession(id) { + async joinSession(sessionData) { + let id = sessionData.sessionId?sessionData.sessionId: sessionData._id; await this.loaderService.startLoader(); const config = { url: urlConstants.API_URLS.JOIN_SESSION + id, @@ -161,7 +165,12 @@ async getSessionsList(obj) { let data = await this.httpService.get(config); this.loaderService.stopLoader(); if (data.responseCode == "OK") { - this.openBrowser(data.result.link); + let modal = await this.modalCtrl.create({ + component: JoinDialogBoxComponent, + componentProps: { data: data.result, sessionData : sessionData}, + cssClass: 'example-modal' + }); + modal.present() } } catch (error) { diff --git a/src/app/core/services/toast.service.ts b/src/app/core/services/toast.service.ts index 53d33885c..cd5743e1e 100644 --- a/src/app/core/services/toast.service.ts +++ b/src/app/core/services/toast.service.ts @@ -11,7 +11,7 @@ export class ToastService { private translate : TranslateService ) { } - async showToast(msg, color) { + async showToast(msg, color , duration= 5000,toastButton = []) { let texts; this.translate.get([msg]).subscribe(resp =>{ texts = resp; @@ -19,8 +19,10 @@ export class ToastService { let toast = await this.toastCtrl.create({ message: texts[msg], color:color, - duration: 5000, + duration: duration, position: 'top', + buttons: toastButton, + cssClass: 'custom-toast' }); toast.present(); } diff --git a/src/app/pages/auth/login/login.page.html b/src/app/pages/auth/login/login.page.html index 731d37eb6..90d0f5150 100644 --- a/src/app/pages/auth/login/login.page.html +++ b/src/app/pages/auth/login/login.page.html @@ -24,6 +24,14 @@ +
+
+ + {{"HAVING_TROUBLE_LOGIN"|translate}} + + +
+

{{"TERMS_AND_CONDITION"|translate}} {{"PRIVACY_POLICY"|translate}} & {{"TERMS_OF_SERVICE"|translate}}

diff --git a/src/app/pages/auth/login/login.page.ts b/src/app/pages/auth/login/login.page.ts index 4a1581ca1..61a0c36db 100644 --- a/src/app/pages/auth/login/login.page.ts +++ b/src/app/pages/auth/login/login.page.ts @@ -55,6 +55,7 @@ export class LoginPage implements OnInit { }; labels = ["LOGIN_TO_MENTOR_ED"]; mentorId: any; + supportInfo: any; constructor(private authService: AuthService, private router: Router, private menuCtrl: MenuController, private activatedRoute: ActivatedRoute, private translateService: TranslateService, private localStorage: LocalStorageService) { @@ -63,6 +64,7 @@ export class LoginPage implements OnInit { ngOnInit() { this.translateText(); + this.getMailInfo(); } async translateText() { @@ -116,5 +118,9 @@ export class LoginPage implements OnInit { goToSignup() { this.router.navigate([`/${CommonRoutes.AUTH}/${CommonRoutes.PERSONA_SELECTION}`]); } - + getMailInfo(){ + this.authService.getMailInfo().then((result:any) =>{ + this.supportInfo = result + }) +} } diff --git a/src/app/pages/auth/register/register.page.html b/src/app/pages/auth/register/register.page.html index ea9f9a589..2ac8cd4a0 100644 --- a/src/app/pages/auth/register/register.page.html +++ b/src/app/pages/auth/register/register.page.html @@ -4,7 +4,6 @@
-
@@ -20,4 +19,5 @@

{{"LOGIN"|translate}}

-
\ No newline at end of file +
+ \ No newline at end of file diff --git a/src/app/pages/create-session/create-session.page.html b/src/app/pages/create-session/create-session.page.html index 2d9d072af..5e1096a98 100644 --- a/src/app/pages/create-session/create-session.page.html +++ b/src/app/pages/create-session/create-session.page.html @@ -1,15 +1,56 @@ - - - -
- +
+ + +
1
+ {{ firstStepperTitle | translate}} +
+ +
2
+ {{"MEETING_LINK" | translate}} +
+
+
+ + + +
+ +
+
+
+ + + + {{"SELECT_MEETING_PLATFORM" | translate}} + + + + + + {{ option.name }} + + + + + {{selectedHint}} + + +
+ +
+
+
+
- -
+
+ +
- {{'PUBLISH' | translate}} + {{'PUBLISH_AND_ADD_LINK' | translate}} +
+
+ {{'SET_IT_LATER' | translate}} + {{'SUBMIT' | translate}}
\ No newline at end of file diff --git a/src/app/pages/create-session/create-session.page.scss b/src/app/pages/create-session/create-session.page.scss index e69de29bb..8eed97edd 100644 --- a/src/app/pages/create-session/create-session.page.scss +++ b/src/app/pages/create-session/create-session.page.scss @@ -0,0 +1,38 @@ +.segment{ + display: flex; + justify-content: space-evenly; +} +.height{ + height: 100%; +} +ion-label{ + text-transform: none; +} +.card-title{ + font-weight: 800; +} +.select{ + width: 100%; +} +.hint-icon{ + font-size: 12px; + margin: 0%; +} +.hint-label{ + font-size: 12px; + padding-left: 5px; + margin: 0%; +} +.btns{ + width: 100%; +} +.icon-2{ + background: var(--ion-color-primary); + height: 25px; + width: 25px; + border-radius: 50px; + color: var(--white); + display: flex; + align-items: center; + justify-content: center; +} \ No newline at end of file diff --git a/src/app/pages/create-session/create-session.page.ts b/src/app/pages/create-session/create-session.page.ts index fc3ab04bf..3b208b71f 100644 --- a/src/app/pages/create-session/create-session.page.ts +++ b/src/app/pages/create-session/create-session.page.ts @@ -1,5 +1,5 @@ import { HttpClient } from '@angular/common/http'; -import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; +import { ChangeDetectorRef, Component, Input, OnInit, ViewChild } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { AttachmentService, LoaderService, ToastService } from 'src/app/core/services'; import { HttpService } from 'src/app/core/services/http/http.service'; @@ -16,7 +16,7 @@ import { File } from "@ionic-native/file/ngx"; import { urlConstants } from 'src/app/core/constants/urlConstants'; import * as moment from 'moment'; import { TranslateService } from '@ngx-translate/core'; -import { CREATE_SESSION_FORM } from 'src/app/core/constants/formConstant'; +import { CREATE_SESSION_FORM, PLATFORMS } from 'src/app/core/constants/formConstant'; import { FormService } from 'src/app/core/services/form/form.service'; @Component({ @@ -28,13 +28,14 @@ export class CreateSessionPage implements OnInit { lastUploadedImage: boolean; private win: any = window; @ViewChild('form1') form1: DynamicFormComponent; + @ViewChild('platformForm') platformForm: DynamicFormComponent; id: any = null; localImage; path; public headerConfig: any = { // menu: true, backButton: { - label: 'CREATE_SESSION', + label: '', }, notification: false, }; @@ -42,9 +43,17 @@ export class CreateSessionPage implements OnInit { type: 'session', haveValidationError: false } + public formData: JsonFormData; showForm: boolean = false; isSubmited: boolean; + type: any ; + selectedLink: any; + selectedHint: any; + meetingPlatforms:any ; + firstStepperTitle: string; + sessionDetails: any; + constructor( private http: HttpClient, private sessionService: SessionService, @@ -62,60 +71,75 @@ export class CreateSessionPage implements OnInit { private changeDetRef: ChangeDetectorRef, private router: Router ) { - this.activatedRoute.queryParamMap.subscribe(params => { - this.id = params?.get('id'); - this.path = this.platform.is("ios") ? this.file.documentsDirectory : this.file.externalDataDirectory; - }); + this.path = this.platform.is("ios") ? this.file.documentsDirectory : this.file.externalDataDirectory; } async ngOnInit() { const result = await this.form.getForm(CREATE_SESSION_FORM); this.formData = _.get(result, 'result.data.fields'); - if (this.id) { - let response = await this.sessionService.getSessionDetailsAPI(this.id); - this.profileImageData.image = response.image; - this.profileImageData.isUploaded = true; - response.startDate = moment.unix(response.startDate).format("YYYY-MM-DDTHH:mm"); - response.endDate = moment.unix(response.endDate).format("YYYY-MM-DDTHH:mm"); - this.preFillData(response); - } else { - this.showForm = true; - } + this.changeDetRef.detectChanges(); + this.activatedRoute.queryParamMap.subscribe(async (params) => { + this.id = params?.get('id'); + this.headerConfig.label = this.id ? "EDIT_SESSION":"CREATE_NEW_SESSION"; + this.type = params?.get('type')? params?.get('type'): 'default'; + this.firstStepperTitle = (this.id) ? "EDIT_SESSION_LABEL":"CREATE_NEW_SESSION"; + if (this.id) { + let response = await this.sessionService.getSessionDetailsAPI(this.id); + this.sessionDetails= response; + this.profileImageData.image = response.image; + this.profileImageData.isUploaded = true; + response.startDate = moment.unix(response.startDate).format("YYYY-MM-DDTHH:mm"); + response.endDate = moment.unix(response.endDate).format("YYYY-MM-DDTHH:mm"); + this.preFillData(response); + } else { + this.showForm = true; + } + }); + this.getPlatformFormDetails(); this.isSubmited = false; //to be removed this.profileImageData.isUploaded = true; this.changeDetRef.detectChanges(); } + async getPlatformFormDetails() { + let form = await this.form.getForm(PLATFORMS); + this.meetingPlatforms = form.result.data.fields.forms; + this.selectedLink = this.meetingPlatforms[0]; + this.selectedHint = this.meetingPlatforms[0].hint; + } + async canPageLeave() { - if (!this.form1.myForm.pristine || this.profileImageData.haveValidationError) { - let texts: any; - this.translate.get(['SESSION_FORM_UNSAVED_DATA', 'EXIT', 'BACK']).subscribe(text => { - texts = text; - }) - const alert = await this.alert.create({ - message: texts['SESSION_FORM_UNSAVED_DATA'], - buttons: [ - { - text: texts['EXIT'], - cssClass: "alert-button", - handler: () => { } - }, - { - text: texts['BACK'], - cssClass: "alert-button", - role: 'cancel', - handler: () => { } - } - ] - }); - await alert.present(); - let data = await alert.onDidDismiss(); - if (data.role == 'cancel') { - return false; + if(this.type=='default'){ + if (!this.form1?.myForm.pristine || this.profileImageData.haveValidationError) { + let texts: any; + this.translate.get(['SESSION_FORM_UNSAVED_DATA', 'EXIT', 'BACK']).subscribe(text => { + texts = text; + }) + const alert = await this.alert.create({ + message: texts['SESSION_FORM_UNSAVED_DATA'], + buttons: [ + { + text: texts['EXIT'], + cssClass: "alert-button", + handler: () => { } + }, + { + text: texts['BACK'], + cssClass: "alert-button", + role: 'cancel', + handler: () => { } + } + ] + }); + await alert.present(); + let data = await alert.onDidDismiss(); + if (data.role == 'cancel') { + return false; + } else { + return true; + } } else { return true; } - } else { - return true; } return true } @@ -124,7 +148,6 @@ export class CreateSessionPage implements OnInit { async onSubmit() { if(!this.isSubmited){ this.form1.onSubmit(); - this.isSubmited = true; } if (this.form1.myForm.valid) { if (this.profileImageData.image && !this.profileImageData.isUploaded) { @@ -137,8 +160,15 @@ export class CreateSessionPage implements OnInit { form.timeZone = timezone; this.form1.myForm.markAsPristine(); let result = await this.sessionService.createSession(form, this.id); + this.id = this.id ? this.id : result._id; if (result) { - this.id ? this.location.back() : this.router.navigate([`${CommonRoutes.SESSIONS_DETAILS}/`+result._id],{replaceUrl:true}) + this.sessionDetails = _.isEmpty(result) ? this.sessionDetails : result; + this.isSubmited = true; + this.firstStepperTitle = (this.id) ? "EDIT_SESSION_LABEL":"CREATE_NEW_SESSION"; + this.headerConfig.label = this.id ? "EDIT_SESSION":"CREATE_NEW_SESSION"; + result.startDate = moment.unix(result.startDate).format("YYYY-MM-DDTHH:mm"); + result.endDate = moment.unix(result.endDate).format("YYYY-MM-DDTHH:mm"); + this.router.navigate([CommonRoutes.CREATE_SESSION], { queryParams: { id: this.id , type: 'segment'}, replaceUrl: true }); } else { this.profileImageData.image = this.lastUploadedImage; this.profileImageData.isUploaded = false; @@ -177,6 +207,21 @@ export class CreateSessionPage implements OnInit { } preFillData(existingData) { + for(let j=0;j link?.name == 'link') + let meetingId = this?.meetingPlatforms[j]?.form?.controls.find( (meetingId:any) => meetingId?.name == 'meetingId') + let password = this?.meetingPlatforms[j]?.form?.controls.find( (password:any) => password?.name == 'password') + if(existingData.meetingInfo.link){ + obj.value = existingData?.meetingInfo?.link; + meetingId = existingData?.meetingInfo?.meta?.meetingId; + password = existingData?.meetingInfo?.meta?.password; + } + } + } + for (let i = 0; i < this.formData.controls.length; i++) { this.formData.controls[i].value = existingData[this.formData.controls[i].name]; @@ -202,4 +247,39 @@ export class CreateSessionPage implements OnInit { this.profileImageData.isUploaded = true; this.profileImageData.haveValidationError = false; } + segmentChanged(event){ + this.type = event.target.value; + } + isValid(event){ + this.isSubmited = event; + } + clickOptions(event:any){ + this.selectedHint = event.detail.value.hint; + } + setItLater(){ + this.id ? this.router.navigate([`/${"session-detail"}/${this.id}`], {replaceUrl: true}): this.location.back(); + + } + onSubmitLink(){ + if (this.platformForm.myForm.valid){ + let meetingInfo = { + 'meetingInfo':{ + 'platform': this.selectedLink.name, + 'link': this.platformForm.myForm.value?.link, + 'value': this.selectedLink.value, + "meta": { + "password": this.platformForm.myForm.value?.password, + "meetingId":this.platformForm.myForm.value?.meetingId + } + + }} + this.sessionService.createSession(meetingInfo,this.id).then(()=>{ + this.router.navigate([`/${"session-detail"}/${this.id}`],{replaceUrl: true}) + }) + } + } + compareWithFn(o1, o2) { + return o1 === o2; + }; + } diff --git a/src/app/pages/feedback/feedback.page.ts b/src/app/pages/feedback/feedback.page.ts index 35fe398dd..914aaf593 100644 --- a/src/app/pages/feedback/feedback.page.ts +++ b/src/app/pages/feedback/feedback.page.ts @@ -64,11 +64,11 @@ export class FeedbackPage implements OnInit { if (result) { this.toast.showToast(result?.message, "success"); } - await this.modalController.dismiss(); + await this.modalController.dismiss(false); } async closeModal() { await this.sessionService.submitFeedback({ skippedFeedback: true, feedbackAs: this.feedbackData.feedbackAs }, this.sessionData._id); - await this.modalController.dismiss(); + await this.modalController.dismiss(false); } } diff --git a/src/app/pages/help/help.page.html b/src/app/pages/help/help.page.html index 9de44a95a..c5f28637f 100644 --- a/src/app/pages/help/help.page.html +++ b/src/app/pages/help/help.page.html @@ -1,11 +1,23 @@ - {{"REPORT_AN_ISSUE" | translate}}
- {{"TELL_US_THE_PROBLEM" | translate}} - + + + + + + {{ option?.name }} + + + +
+
+ +
+
+
- - {{"SUBMIT" | translate}} + + {{option?.buttonText | translate}} \ No newline at end of file diff --git a/src/app/pages/help/help.page.ts b/src/app/pages/help/help.page.ts index e2bebd54d..47948f8a3 100644 --- a/src/app/pages/help/help.page.ts +++ b/src/app/pages/help/help.page.ts @@ -5,6 +5,13 @@ import { HttpService, LoaderService, ToastService } from 'src/app/core/services' import { DynamicFormComponent, JsonFormData } from 'src/app/shared/components/dynamic-form/dynamic-form.component'; import { CommonRoutes } from 'src/global.routes'; import { Device } from '@awesome-cordova-plugins/device/ngx'; +import { FormService } from 'src/app/core/services/form/form.service'; +import { HELP } from 'src/app/core/constants/formConstant'; +import * as _ from 'lodash'; +import { App } from '@capacitor/app'; +import { TranslateService } from '@ngx-translate/core'; +import { AlertController } from '@ionic/angular'; +import { ProfileService } from 'src/app/core/services/profile/profile.service'; @Component({ selector: 'app-help', @@ -17,34 +24,37 @@ export class HelpPage implements OnInit { backButton: true, label: "HELP" }; - formData: JsonFormData = { - controls: [ - { - "name": "description", - "label": "Tell us here", - "value": "", - "class": "ion-margin", - "type": "text", - "position": "floating", - "validators": {} - }, - ] - }; - metaData: { deviceName: string; androidVersion: string; }; + public formData: JsonFormData; + metaData: { deviceName: string; androidVersion: string; version: string; type: string}; + selectedOption: any; + helpForms: any; + userDetails: any; + message: any; - constructor(private router: Router, private loaderService: LoaderService, private toast: ToastService, private httpService: HttpService, private device: Device) { } + constructor(private router: Router, private loaderService: LoaderService, private toast: ToastService, private httpService: HttpService, private device: Device, + private form: FormService, private translate: TranslateService,private alert: AlertController,private profileService: ProfileService,) { } - ngOnInit() { - this.metaData = { - deviceName: this.device.model, - androidVersion: this.device.version - } + async ngOnInit() { + this.helpForm(); + await this.profileService.profileDetails().then((userDetails) => { + this.userDetails = userDetails; + }); + App.getInfo().then((data)=>{ + this.metaData = { + deviceName: this.device.model, + androidVersion: this.device.version, + version: data.version, + type: '' + } + }) + } - onSubmit() { + onSubmit(option: any) { + this.metaData.type = option.value; this.form1.myForm.value.metaData = this.metaData; - this.submitHelpReport() - this.router.navigate([`/${CommonRoutes.TABS}/${CommonRoutes.HOME}`]) + this.form1.myForm.value.description = this.form1.myForm.value.description ? this.form1.myForm.value.description: option.value; + (option.buttonText == "DELETE_ACCOUNT") ? this.deteteAccount(): this.submitHelpReport(); } async submitHelpReport() { await this.loaderService.startLoader(); @@ -60,5 +70,44 @@ export class HelpPage implements OnInit { catch (error) { this.loaderService.stopLoader(); } + this.router.navigate([`/${CommonRoutes.TABS}/${CommonRoutes.HOME}`]) + } + async deteteAccount(){ + let texts: any; + this.translate.get(['DELETE_ALERT_MSG', 'YES', 'NO']).subscribe(text => { + texts = text; + }) + const alert = await this.alert.create({ + message: texts['DELETE_ALERT_MSG'], + buttons: [ + { + text: texts['YES'], + cssClass: "alert-button", + handler: () => { } + }, + { + text: texts['NO'], + cssClass: "alert-button-no", + role: 'no', + handler: () => { } + } + ] + }); + await alert.present(); + let data = await alert.onDidDismiss(); + if(data.role == 'no'){ + this.submitHelpReport(); + } + } + async helpForm(){ + const result = await this.form.getForm(HELP); + this.formData = _.get(result, 'result.data.fields'); + this.helpForms = _.get(result, 'result.data.fields.forms'); + this.selectedOption = this.helpForms[0]; + this.message = (this.userDetails?.isAMentor) ? this.selectedOption?.menterMessage : this.selectedOption?.menteeMessage; + } + clickOptions(event:any){ + this.selectedOption = event.detail.value; + this.message = (this.userDetails.isAMentor) ? this.selectedOption?.menterMessage : this.selectedOption?.menteeMessage; } } \ No newline at end of file diff --git a/src/app/pages/home-search/home-search.page.ts b/src/app/pages/home-search/home-search.page.ts index c217c56ac..f33b4bf08 100644 --- a/src/app/pages/home-search/home-search.page.ts +++ b/src/app/pages/home-search/home-search.page.ts @@ -86,7 +86,7 @@ export class HomeSearchPage implements OnInit { break; case 'joinAction': - (event.data.sessionId)?await this.sessionService.joinSession(event.data.sessionId):await this.sessionService.joinSession(event.data._id); + this.sessionService.joinSession(event.data) this.search(); break; diff --git a/src/app/pages/mentor-details/mentor-details.page.ts b/src/app/pages/mentor-details/mentor-details.page.ts index cde5de66d..efc022b9a 100644 --- a/src/app/pages/mentor-details/mentor-details.page.ts +++ b/src/app/pages/mentor-details/mentor-details.page.ts @@ -112,7 +112,7 @@ export class MentorDetailsPage implements OnInit { break; case 'joinAction': - await this.sessionService.joinSession(event.data._id); + await this.sessionService.joinSession(event.data); this.upcomingSessions = await this.sessionService.getUpcomingSessions(this.mentorId); break; diff --git a/src/app/pages/session-detail/session-detail.page.html b/src/app/pages/session-detail/session-detail.page.html index f764ffc80..fdceb8812 100644 --- a/src/app/pages/session-detail/session-detail.page.html +++ b/src/app/pages/session-detail/session-detail.page.html @@ -21,10 +21,11 @@
{{detailData?.data?.title}}
-
- + {{"START_SESSIONS" | translate}} -
+ +
{{"ENROLL" | translate}} diff --git a/src/app/pages/session-detail/session-detail.page.scss b/src/app/pages/session-detail/session-detail.page.scss index 0ff4786fb..26f542ba8 100644 --- a/src/app/pages/session-detail/session-detail.page.scss +++ b/src/app/pages/session-detail/session-detail.page.scss @@ -1,8 +1,11 @@ .main-wrapper{ - margin : 10px 15px 0px 15px + margin : 10px 15px 0px 15px; + padding-bottom: 40px; } .load-more-button{ height: 50px; + width: 100%; + font-size: 15px !important; } .session-btn{ margin: 10px,; @@ -40,4 +43,9 @@ img{ width: 93%; border-radius: 10px; height: 220px; -} \ No newline at end of file +} +ion-item { + --padding-end: 0px; + --inner-padding-end: 0px; + --padding-start: 0px; + } \ No newline at end of file diff --git a/src/app/pages/session-detail/session-detail.page.ts b/src/app/pages/session-detail/session-detail.page.ts index b5e3e144c..d0800fef7 100644 --- a/src/app/pages/session-detail/session-detail.page.ts +++ b/src/app/pages/session-detail/session-detail.page.ts @@ -6,6 +6,9 @@ import { CommonRoutes } from 'src/global.routes'; import * as moment from 'moment'; import { localKeys } from 'src/app/core/constants/localStorage.keys'; import { Location } from '@angular/common'; +import { ToastController } from '@ionic/angular'; +import { TranslateService } from '@ngx-translate/core'; +import { App, AppState } from '@capacitor/app'; @Component({ selector: 'app-session-detail', @@ -20,13 +23,21 @@ export class SessionDetailPage implements OnInit { isEnabled: boolean; startDate: any; endDate: any; + sessionDatas: any; + snackbarRef: any; constructor(private localStorage: LocalStorageService, private router: Router, private activatedRoute: ActivatedRoute, private sessionService: SessionService, - private utilService: UtilService, private toast: ToastService, private _location: Location, private user: UserService) { + private utilService: UtilService, private toast: ToastService, private _location: Location, private user: UserService ,private toaster: ToastController,private translate : TranslateService) { this.id = this.activatedRoute.snapshot.paramMap.get('id') } - ngOnInit() {} + ngOnInit() { + App.addListener('appStateChange', (state: AppState) => { + if (state.isActive == true) { + this.fetchSessionDetails(); + } + }); + } async ionViewWillEnter() { await this.user.getUserValue(); @@ -41,6 +52,10 @@ export class SessionDetailPage implements OnInit { }; detailData = { form: [ + { + title: "MEETING_PLATFORM", + key: "meetingInfo", + }, { title: 'RECOMMENDED_FOR', key: 'recommendedFor', @@ -103,12 +118,14 @@ export class SessionDetailPage implements OnInit { status:null, isEnrolled:null, title:"", - startDate:"" + startDate:"", + meetingInfo:"" }, }; async fetchSessionDetails() { var response = await this.sessionService.getSessionDetailsAPI(this.id); + this.sessionDatas = response; if (response) { this.setPageHeader(response); let readableStartDate = moment.unix(response.startDate).toLocaleString(); @@ -120,10 +137,25 @@ export class SessionDetailPage implements OnInit { } this.detailData.data = Object.assign({}, response); this.detailData.data.startDate = readableStartDate; + this.detailData.data.meetingInfo = response.meetingInfo.platform; this.startDate = (response.startDate>0)?moment.unix(response.startDate).toLocaleString():this.startDate; this.endDate = (response.endDate>0)?moment.unix(response.endDate).toLocaleString():this.endDate; } + if((response.meetingInfo.platform == 'OFF') && this.isCreator && response.status=='published'){ + this.showToasts('ADD_MEETING_LINK', 0 , [ + { + text: 'Add meeting link', + role: 'cancel', + handler: () => { + this.router.navigate([CommonRoutes.CREATE_SESSION], { queryParams: { id: this.id , type: 'segment'} }); + } + } + ]) + } } + ionViewWillLeave(){ + this.snackbarRef = this.toaster.dismiss(); + } setPageHeader(response) { let currentTimeInSeconds=Math.floor(Date.now()/1000); @@ -133,7 +165,7 @@ export class SessionDetailPage implements OnInit { if(this.userDetails){ this.isCreator = this.userDetails._id == response.userId ? true : false; } - this.headerConfig.edit = (this.isCreator && response.status=="published")?true:null; + this.headerConfig.edit = (this.isCreator && response.status=="published"&& !this.isEnabled)?true:null; this.headerConfig.delete = (this.isCreator && response.status=="published" && !this.isEnabled)?true:null; } @@ -192,7 +224,7 @@ export class SessionDetailPage implements OnInit { } async onJoin() { - await this.sessionService.joinSession(this.id); + await this.sessionService.joinSession(this.sessionDatas); } async onEnroll() { @@ -235,4 +267,19 @@ export class SessionDetailPage implements OnInit { } }).catch(error => { }) } + showToasts(message: any,duration : any, toastButton : any){ + let texts; + this.translate.get([message]).subscribe(resp =>{ + texts = resp; + }); + this.snackbarRef = this.toaster.create({ + message: texts[message], + // color: "danger", + buttons: toastButton, + cssClass: 'custom-toast' + }).then((toastData) => { + + toastData.present(); + }); + } } diff --git a/src/app/pages/sessions/sessions.ts b/src/app/pages/sessions/sessions.ts index 8b6238ede..fa67fb10c 100644 --- a/src/app/pages/sessions/sessions.ts +++ b/src/app/pages/sessions/sessions.ts @@ -94,6 +94,6 @@ export class SessionsPage implements OnInit { } async onJoin(event){ - await this.sessionService.joinSession(event.data.sessionId); + await this.sessionService.joinSession(event.data); } } \ No newline at end of file diff --git a/src/app/pages/tabs/home/home.page.ts b/src/app/pages/tabs/home/home.page.ts index 820509098..b5109968a 100644 --- a/src/app/pages/tabs/home/home.page.ts +++ b/src/app/pages/tabs/home/home.page.ts @@ -12,6 +12,8 @@ import { urlConstants } from 'src/app/core/constants/urlConstants'; import { SessionService } from 'src/app/core/services/session/session.service'; import { Location } from '@angular/common'; import { TermsAndConditionsPage } from '../../terms-and-conditions/terms-and-conditions.page'; +import { App, AppState } from '@capacitor/app'; + @Component({ selector: 'app-home', @@ -54,6 +56,15 @@ export class HomePage implements OnInit { private toast:ToastService) { } ngOnInit() { + App.addListener('appStateChange', (state: AppState) => { + if (state.isActive == true) { + this.getSessions(); + var obj = { page: this.page, limit: this.limit, searchText: "" }; + this.sessionService.getAllSessionsAPI(obj).then((data)=>{ + this.createdSessions = data; + }) + } + }); this.getUser(); this.userService.userEventEmitted$.subscribe(data => { if (data) { @@ -78,7 +89,7 @@ export class HomePage implements OnInit { break; case 'joinAction': - (event.data.sessionId)?await this.sessionService.joinSession(event.data.sessionId):await this.sessionService.joinSession(event.data._id); + await this.sessionService.joinSession(event.data) this.getSessions(); break; diff --git a/src/app/shared/components/dynamic-form/dynamic-form.component.html b/src/app/shared/components/dynamic-form/dynamic-form.component.html index 48baa4e39..31b8f11a4 100644 --- a/src/app/shared/components/dynamic-form/dynamic-form.component.html +++ b/src/app/shared/components/dynamic-form/dynamic-form.component.html @@ -42,6 +42,7 @@ [value]="control.value" [maxlength]="control?.validators?.maxLength" (ionChange)="removeSpace($event)" + [placeholder]="control.platformPlaceHolder" > +
+
+
+ {{ sessionData?.name || sessionData?.title }} +
+
+ + + + + + {{startDate | date: 'EEEE, MMMM d'}} . {{startDate | date:'hh:mm'}} - {{startDate | date:'shortTime'}} + + + + + + + +

+ {{ "MEETING_PLATFORM" | translate }} : + {{ meetingPlatform.platform }} +

+
+
+ + + + + +

+ {{'PASSWORD' | translate}}: + {{ data?.meta?.password }} +

+
+ + + +
+ + + + + +

+ {{'MEETING_ID' | translate}}: + {{ data?.meta?.meetingId }} +

+
+ + + +
+
+ + + + {{'JOIN' | translate}} + + + +
\ No newline at end of file diff --git a/src/app/shared/components/join-dialog-box/join-dialog-box.component.scss b/src/app/shared/components/join-dialog-box/join-dialog-box.component.scss new file mode 100644 index 000000000..aa7823ed3 --- /dev/null +++ b/src/app/shared/components/join-dialog-box/join-dialog-box.component.scss @@ -0,0 +1,15 @@ +.join-header{ + text-align: center; + max-width: 300px; + padding-left: 11%; +} +.join-platform{ + font-size: 12px; + overflow: hidden; + text-overflow: ellipsis; +} +.platform-ellipsis{ + overflow: hidden; + text-overflow:ellipsis; + white-space: nowrap; +} \ No newline at end of file diff --git a/src/app/shared/components/join-dialog-box/join-dialog-box.component.spec.ts b/src/app/shared/components/join-dialog-box/join-dialog-box.component.spec.ts new file mode 100644 index 000000000..7d3f7f20c --- /dev/null +++ b/src/app/shared/components/join-dialog-box/join-dialog-box.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { JoinDialogBoxComponent } from './join-dialog-box.component'; + +describe('JoinDialogBoxComponent', () => { + let component: JoinDialogBoxComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ JoinDialogBoxComponent ], + imports: [IonicModule.forRoot()] + }).compileComponents(); + + fixture = TestBed.createComponent(JoinDialogBoxComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/components/join-dialog-box/join-dialog-box.component.ts b/src/app/shared/components/join-dialog-box/join-dialog-box.component.ts new file mode 100644 index 000000000..3b16848f3 --- /dev/null +++ b/src/app/shared/components/join-dialog-box/join-dialog-box.component.ts @@ -0,0 +1,50 @@ +import { Component, OnInit } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import * as moment from 'moment'; +import { InAppBrowser } from '@awesome-cordova-plugins/in-app-browser/ngx'; +import { ToastService } from 'src/app/core/services'; +import { Clipboard } from '@capacitor/clipboard'; + +@Component({ + selector: 'app-join-dialog-box', + templateUrl: './join-dialog-box.component.html', + styleUrls: ['./join-dialog-box.component.scss'], +}) +export class JoinDialogBoxComponent implements OnInit { + data; + sessionData; + startDate: any; + endDate: any; + meetingPlatform: any; + + constructor(private modalCtrl: ModalController, private inAppBrowser: InAppBrowser, private toast: ToastService) { } + + ngOnInit() { + this.startDate = (this.sessionData.startDate>0)?moment.unix(this.sessionData.startDate).toLocaleString():this.startDate; + this.endDate = (this.sessionData.endDate>0)?moment.unix(this.sessionData.endDate).toLocaleString():this.endDate; + this.meetingPlatform = (this.sessionData.meetingInfo); + } + openBrowser(link) { + let browser = this.inAppBrowser.create(link, `_system`); + browser.on('exit').subscribe(() => { + }, err => { + console.error(err); + }); + } + + cancel(){ + return this.modalCtrl.dismiss(null, 'cancel'); + } + onButtonClick(){ + this.modalCtrl.dismiss(); + this.openBrowser(this.data.link); + } + + copyToClipBoard = async (copyData: any) => { + await Clipboard.write({ + string: copyData + }).then(()=>{ + this.toast.showToast('Copied successfully',"success"); + }); + }; +} diff --git a/src/app/shared/components/session-card/session-card.component.html b/src/app/shared/components/session-card/session-card.component.html index ee5e9f84c..0019fa7d1 100644 --- a/src/app/shared/components/session-card/session-card.component.html +++ b/src/app/shared/components/session-card/session-card.component.html @@ -19,18 +19,35 @@
{{data?.name || data?.title}}
- - + + - - - {{"STARTS_ON"|translate}} {{startDate|date:'dd/MM/yyyy'}} {{"AT"|translate}} {{startDate|date:'shortTime'}} - {{"STARTED_ON"|translate}} {{startDate|date:'dd/MM/yyyy'}} {{"AT"|translate}} {{startDate|date:'shortTime'}} - {{"COMPLETED_ON"|translate}} {{endDate|date:'dd/MM/yyyy'}} {{"AT"|translate}} {{endDate|date:'shortTime'}} - - - {{buttonConfig?.label | translate}} - - +
+ {{"STARTS_ON"|translate}} {{startDate|date:'dd/MM/yyyy'}} {{"AT"|translate}} {{startDate|date:'shortTime'}} + {{"STARTED_ON"|translate}} {{startDate|date:'dd/MM/yyyy'}} {{"AT"|translate}} {{startDate|date:'shortTime'}} + {{"COMPLETED_ON"|translate}} {{endDate|date:'dd/MM/yyyy'}} {{"AT"|translate}} {{endDate|date:'shortTime'}} +
+ + + +
+

+ {{ "MEETING_PLATFORM" | translate }} : + {{ meetingPlatform?.platform }} +

+
+
+ + +
+

+ Add meeting link +

+
+
+ + + {{buttonConfig?.label | translate}} + \ No newline at end of file diff --git a/src/app/shared/components/session-card/session-card.component.scss b/src/app/shared/components/session-card/session-card.component.scss index b31a9abdf..1df22329f 100644 --- a/src/app/shared/components/session-card/session-card.component.scss +++ b/src/app/shared/components/session-card/session-card.component.scss @@ -23,9 +23,6 @@ margin-top: 0px; font-size: 16px; } - p { - margin: 6px 0px 0px 0px; - } } .text-align { overflow: hidden; @@ -45,11 +42,26 @@ ion-icon{ font-size: 20px; color: black; } -.date-label{ - margin-left: 8px; +.header{ + margin-top: 10px; +} +.platform-date-label{ + padding-left: 8px; font-size: 12px; color: rgb(41, 41, 41); } -.header{ - margin-top: 10px; +.add-meeting-link{ + width: 75%; + text-decoration: underline; + font-weight: 600; + color: var(--ion-color-primary); + z-index: 1000; + +} +.join-platform-container{ + width: 350px; +} +.meeting-platform{ + padding-left: 10px; + width: max-content; } \ No newline at end of file diff --git a/src/app/shared/components/session-card/session-card.component.ts b/src/app/shared/components/session-card/session-card.component.ts index ee047d79a..83f87eeaf 100644 --- a/src/app/shared/components/session-card/session-card.component.ts +++ b/src/app/shared/components/session-card/session-card.component.ts @@ -1,10 +1,12 @@ -import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core'; +import { Component, Input, OnInit, Output, EventEmitter, ViewChild } from '@angular/core'; import { Router } from '@angular/router'; import * as moment from 'moment'; import { localKeys } from 'src/app/core/constants/localStorage.keys'; import { LocalStorageService, ToastService } from 'src/app/core/services'; import { SessionService } from 'src/app/core/services/session/session.service'; import { CommonRoutes } from 'src/global.routes'; +import { IonModal } from '@ionic/angular'; +import { App, AppState } from '@capacitor/app'; @Component({ selector: 'app-session-card', @@ -14,15 +16,24 @@ import { CommonRoutes } from 'src/global.routes'; export class SessionCardComponent implements OnInit { @Input() data: any; @Output() onClickEvent = new EventEmitter(); + @ViewChild(IonModal) modal: IonModal; startDate: string; isCreator: boolean; buttonConfig; userData: any; endDate: string; + isModalOpen = false; + meetingPlatform: any; constructor(private router: Router, private sessionService: SessionService, private toast: ToastService, private localStorage: LocalStorageService) { } async ngOnInit() { + App.addListener('appStateChange', (state: AppState) => { + if (state.isActive == true) { + this.setButtonConfig(this.isCreator); + } + }); + this.meetingPlatform = (this.data?.meetingInfo); this.isCreator = await this.checkIfCreator(); this.setButtonConfig(this.isCreator); this.startDate = (this.data.startDate>0)?moment.unix(this.data.startDate).toLocaleString():this.startDate; @@ -33,11 +44,10 @@ export class SessionCardComponent implements OnInit { let currentTimeInSeconds=Math.floor(Date.now()/1000); if(isCreator){ this.buttonConfig={label:"START",type:"startAction"}; - this.buttonConfig.isEnabled = ((this.data.startDate-currentTimeInSeconds)<600 || this.data.status=='live')?true:false; } else { this.buttonConfig=(!isCreator&&this.data.isEnrolled || !isCreator&&this.data.sessionId)?{label:"JOIN",type:"joinAction"}:{label:"ENROLL",type:"enrollAction"}; - this.buttonConfig.isEnabled = ((this.data.startDate-currentTimeInSeconds)<300 || this.data.status=='live')?true:false; } + this.buttonConfig.isEnabled = ((this.data.startDate - currentTimeInSeconds) < 600 && !(this.data?.meetingInfo?.platform == 'OFF')) ? true : false } async checkIfCreator() { @@ -60,4 +70,8 @@ export class SessionCardComponent implements OnInit { } this.userData.about?this.onClickEvent.emit(value):this.router.navigate([`/${CommonRoutes.EDIT_PROFILE}`]); } + clickOnAddMeetingLink(cardData:any){ + let id = cardData._id; + this.router.navigate([CommonRoutes.CREATE_SESSION], { queryParams: { id: id , type: 'segment'} }); + } } diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 0f362fc84..aed650e6b 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -24,6 +24,7 @@ import { import { SafeHtmlPipe } from './safe-html.pipe'; import { MentorCardComponent } from './components/mentor-card/mentor-card.component'; import { NumberOnlyDirective } from './directive/onlyNumbers'; +import { JoinDialogBoxComponent } from './components/join-dialog-box/join-dialog-box.component'; @NgModule({ declarations: [ @@ -45,7 +46,8 @@ import { NumberOnlyDirective } from './directive/onlyNumbers'; PersonaSelectionCardComponent, GenericProfileHeaderComponent, MentorCardComponent, - NumberOnlyDirective + NumberOnlyDirective, + JoinDialogBoxComponent ], imports: [ CommonModule, @@ -72,7 +74,8 @@ import { NumberOnlyDirective } from './directive/onlyNumbers'; SafeHtmlPipe, PersonaSelectionCardComponent, GenericProfileHeaderComponent, - MentorCardComponent + MentorCardComponent, + JoinDialogBoxComponent ], }) export class SharedModule {} diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 7c063f959..a976bd0dd 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -100,7 +100,7 @@ "SAVE":"Save", "TERMS_OF_USE": "Terms of use", "SOMETHING_WENT_WRONG":"Something went wrong", - "CREATE_NEW_SESSION": "Create new Session", + "CREATE_NEW_SESSION": "Create a new session", "DELETE": "Delete", "START_SESSIONS": "Start session", "START": "Start", @@ -168,5 +168,20 @@ "CATEGORIES": "Categories", "MEDIUM": "Medium", "DON'T_DELETE": "Don't delete", - "YES_DELETE": "Yes delete" + "YES_DELETE": "Yes delete", + "SET_IT_LATER": "Set it later", + "SELECT_MEETING_PLATFORM": "Add meeting link", + "MEETING_PLATFORM": "Meeting platform", + "MEETING_LINK": "Meeting link", + "EDIT_SESSION": "Edit session details", + "PUBLISH_AND_ADD_LINK": "Publish and Add link", + "MEETING_ID": "Meeting id", + "PASSWORD": "Password", + "EDIT_SESSION_LABEL": "Edit session", + "HAVING_TROUBLE_LOGIN": "Having trouble in logging in/signing up? Write to us.", + "ADD_MEETING_LINK": "Meeting link is not added, please add a link.", + "DELETE_ACCOUNT": "Delete account", + "DELETE_ALERT_MSG": "Deleting your account will remove all your data from the app forever. You will have to create a new account if you decide to come back. Do you want to continue?", + "YES": "Yes", + "NO": "No" } diff --git a/src/global.scss b/src/global.scss index 93cbbf8ce..82a608e0f 100644 --- a/src/global.scss +++ b/src/global.scss @@ -270,4 +270,32 @@ ion-accordion-group{ color: grey; } } +} + +////////////// + + +.example-modal { + --width: fit-content; + --min-width: 95%; + --height: fit-content; + --border-radius: 6px; + --box-shadow: 0 28px 48px rgba(0, 0, 0, 0.4); +} + +.example-modal .wrapper { + margin-bottom: 10px; +} +ion-toast.custom-toast::part(button) { + border-radius: 5px; + background-color: #39a464; + font-size: 15px; + text-transform: none; +} +ion-toast.custom-toast{ + --background: var(--ion-color-primary); +} +.alert-button-no { + background: var(--white) !important; + color: var(--ion-color-primary) !important; } \ No newline at end of file