From ae9bc339c98ce1fd0cb91c8bb69fc8ccb1852b9b Mon Sep 17 00:00:00 2001 From: "tiago.kayaya" Date: Wed, 27 Oct 2021 08:45:37 +0100 Subject: [PATCH] add timebomb feature --- config.xml | 2 +- src/app/pages/chat/chat.page.html | 3 +- src/app/pages/chat/chat.page.scss | 4 +- src/app/pages/chat/chat.page.ts | 8 +- src/app/services/chat.service.ts | 7 ++ src/app/services/functions/time.service.ts | 40 +++++++++- .../group-messages/group-messages.page.html | 4 + .../group-messages/group-messages.page.ts | 6 ++ .../shared/chat/new-group/new-group.page.html | 16 ++-- .../shared/chat/new-group/new-group.page.ts | 73 +++++++++++++++---- .../images/icons-duration-countdown.svg | 13 ++++ src/theme/variables.scss | 4 + 12 files changed, 153 insertions(+), 27 deletions(-) create mode 100644 src/assets/images/icons-duration-countdown.svg diff --git a/config.xml b/config.xml index ea0586ed8..14f27d481 100644 --- a/config.xml +++ b/config.xml @@ -47,7 +47,7 @@ - 3077110622 + 1109370933 3619450036 diff --git a/src/app/pages/chat/chat.page.html b/src/app/pages/chat/chat.page.html index 35ae9787e..f10ef6cdb 100644 --- a/src/app/pages/chat/chat.page.html +++ b/src/app/pages/chat/chat.page.html @@ -96,7 +96,8 @@
{{group.name.split('-').join(' ')}}
-
{{showDateDuration(group._updatedAt)}}
+
{{showDateDuration(group._updatedAt)}}
+
{{countDownDate(group.customFields.countDownDate, group._id)}}
{{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 50c2afa74..9a19cdb15 100644 --- a/src/app/pages/chat/chat.page.scss +++ b/src/app/pages/chat/chat.page.scss @@ -98,7 +98,7 @@ ion-content{ margin-top: 10px; } .item-title{ - width: calc(100% - 75px); + width: calc(100% - 80px); float: left; font-size: 15px; color: #0d89d1; @@ -107,7 +107,7 @@ ion-content{ color: #fff; } .item-date{ - width: 75px; + width: 80px; float: right; font-size: 13px; color: #797979; diff --git a/src/app/pages/chat/chat.page.ts b/src/app/pages/chat/chat.page.ts index 991abb5a2..66c5d8a7e 100644 --- a/src/app/pages/chat/chat.page.ts +++ b/src/app/pages/chat/chat.page.ts @@ -420,6 +420,10 @@ hideRefreshButton(){ return this.timeService.showDateDuration(start); } + countDownDate(date:any, roomId:string){ + return this.timeService.countDownDate(date, roomId); + } + async getChatMembers(){ //return await this.chatService.getMembers(roomId).toPromise(); this.chatService.getAllUsers().subscribe(res=> { @@ -432,7 +436,7 @@ hideRefreshButton(){ async getGroups(event?){ this.result = this.chatService.getAllPrivateGroups().subscribe(async (res:any)=>{ - + console.log(res); if(res.groups != 200){ this.privateGroups = res.groups; @@ -444,7 +448,7 @@ hideRefreshButton(){ var dateB = new Date(b._updatedAt).getTime(); return dateB - dateA; }); - //console.log(this.allGroups); + console.log(this.allGroups); /* }); */ if(this.route.url != "/home/chat"){ console.log("Timer message stop") diff --git a/src/app/services/chat.service.ts b/src/app/services/chat.service.ts index 0b05b66eb..16c07557c 100644 --- a/src/app/services/chat.service.ts +++ b/src/app/services/chat.service.ts @@ -209,8 +209,12 @@ export class ChatService { /* GROUPS */ addGroup(body:any){ + console.log(body); return this.http.post(environment.apiChatUrl+'groups.create', body, this.options); } + setGroupCustomFields(body:any){ + return this.http.post(environment.apiChatUrl+'groups.setCustomFields', body, this.options); + } getGroupMembers(roomId:string){ let params = new HttpParams(); @@ -223,6 +227,7 @@ export class ChatService { } return this.http.get(url, opts); } + getChannelMembers(roomId:string){ let params = new HttpParams(); let url=environment.apiChatUrl+'channels.members'; @@ -274,9 +279,11 @@ export class ChatService { } return this.http.post(environment.apiChatUrl+'channels.kick', body, opts); } + deleteGroup(body:any){ return this.http.post(environment.apiChatUrl+'groups.delete', body, this.options); } + deleteChannel(body:any){ return this.http.post(environment.apiChatUrl+'channels.delete', body, this.options); } diff --git a/src/app/services/functions/time.service.ts b/src/app/services/functions/time.service.ts index 33e8719cc..f94877e87 100644 --- a/src/app/services/functions/time.service.ts +++ b/src/app/services/functions/time.service.ts @@ -1,11 +1,14 @@ import { Injectable } from '@angular/core'; +import { ChatService } from '../chat.service'; @Injectable({ providedIn: 'root' }) export class TimeService { + countDownTime: any; + room: any; - constructor() { } + constructor(private chatService: ChatService) { } showDateDuration(start:any){ let end; @@ -13,6 +16,7 @@ export class TimeService { start = new Date(start); let customizedDate; + const totalSeconds = Math.floor((end - (start))/1000);; const totalMinutes = Math.floor(totalSeconds/60); const totalHours = Math.floor(totalMinutes/60); @@ -37,6 +41,40 @@ export class TimeService { } } + countDownDate(date:any, roomId:string){ + /* let timer = setInterval(() =>{ */ + console.log('Show TIMER'); + let difference = new Date(date).getTime() - new Date().getTime(); + let c_day = Math.floor(difference/(1000*60*60*24)); + let c_hours = Math.floor((difference % (1000*60*60*24)) / (1000*60*60)); + let c_minutes = Math.floor((difference % (1000*60*60)) / (1000*60)); + let c_seconds = Math.floor((difference % (1000*60)) / 1000); + + this.countDownTime = c_day + " : " + c_hours + " : " + c_minutes + " : " + c_seconds ; + + if(difference < 0){ + //clearInterval(timer); + this.countDownTime = "Expired"; + let body = { "roomId":roomId, } + this.chatService.getRoomInfo(roomId).subscribe(room=>{ + this.room = room['room']; + + if(this.room.t === 'p'){ + this.chatService.deleteGroup(body).subscribe(res=>{ + console.log(res); + }); + } + else{ + this.chatService.deleteChannel(body).subscribe(res=>{ + console.log(res); + }); + } + }); + } + //}) + return this.countDownTime; + } + addZero(i) { if (i < 10) { i = "0" + i; diff --git a/src/app/shared/chat/group-messages/group-messages.page.html b/src/app/shared/chat/group-messages/group-messages.page.html index f186c0e6a..1e8c3d427 100644 --- a/src/app/shared/chat/group-messages/group-messages.page.html +++ b/src/app/shared/chat/group-messages/group-messages.page.html @@ -21,6 +21,10 @@
+
+ + {{countDownDate(room.customFields.countDownDate, room._id)}} +
diff --git a/src/app/shared/chat/group-messages/group-messages.page.ts b/src/app/shared/chat/group-messages/group-messages.page.ts index 8b10e1990..c41b7e6b1 100644 --- a/src/app/shared/chat/group-messages/group-messages.page.ts +++ b/src/app/shared/chat/group-messages/group-messages.page.ts @@ -237,9 +237,15 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe return this.timeService.showDateDuration(start); } + countDownDate(date:any, roomId:string){ + return this.timeService.countDownDate(date, roomId); + } + getRoomInfo(){ this.showLoader = true; this.chatService.getRoomInfo(this.roomId).subscribe(room=>{ + console.log(room); + this.room = room['room']; if(this.room.name){ this.roomName = this.room.name.split('-').join(' '); diff --git a/src/app/shared/chat/new-group/new-group.page.html b/src/app/shared/chat/new-group/new-group.page.html index a8f9ccd2a..6d5b409e7 100644 --- a/src/app/shared/chat/new-group/new-group.page.html +++ b/src/app/shared/chat/new-group/new-group.page.html @@ -20,12 +20,13 @@
-
+ +
Grupo Ultra-secreto
- -
+ +
@@ -35,6 +36,11 @@
- -
+ {{displayDuration}} +
+ {{thedate}} +
+ {{countDownTime}} + +
diff --git a/src/app/shared/chat/new-group/new-group.page.ts b/src/app/shared/chat/new-group/new-group.page.ts index 160e0e21e..7c2d367a0 100644 --- a/src/app/shared/chat/new-group/new-group.page.ts +++ b/src/app/shared/chat/new-group/new-group.page.ts @@ -15,7 +15,10 @@ export class NewGroupPage implements OnInit { showLoader: boolean; displayDuration: any; showDuration: boolean; + thedate:any; + _day:any; selectedDuration = ['','','']; + countDownTime:any; //groupName:string; @Input() groupName:string; @@ -27,8 +30,8 @@ export class NewGroupPage implements OnInit { private modalController: ModalController, private chatService: ChatService, //private navParams: NavParams, - ) - { + ) + { this.isGroupCreated = false; //this.groupName = this.navParams.get('name'); } @@ -37,21 +40,36 @@ export class NewGroupPage implements OnInit { } _ionChange(event){ + console.log(event); + console.log(event.detail.checked); + this.showDuration = event.detail.checked; + //this.thedate = new Date(2021, 10, 1, 10, 33, 30, 0); + this.thedate = new Date(); + } close(){ //this.modalController.dismiss(); console.log('close'); this.addGroupMessage.emit(); } - + createGroup(){ let name = this.groupName.split(' ').join('-'); let body = { "name":name, } this.chatService.addGroup(body).subscribe(res=>{ console.log('group created'); console.log(res['group']); + this.addGroupMessage.emit(res['group']._id); + + let countDownBody = { + "roomId": res['group']._id, + "customFields":{"countDownDate":this.thedate} + } + this.chatService.setGroupCustomFields(countDownBody).subscribe(res=>{ + console.log(res); + }); }); } @@ -60,14 +78,14 @@ export class NewGroupPage implements OnInit { let name = this.groupName.split(' ').join('-'); console.log(name); - + const modal = await this.modalController.create({ component: GroupContactsPage, componentProps: { isCreated:this.isGroupCreated, name: name, duration:'', - }, + }, cssClass: 'contacts', backdropDismiss: false }); @@ -75,7 +93,7 @@ export class NewGroupPage implements OnInit { await modal.present(); modal.onDidDismiss(); } - + async setDuration(ev: any) { const popover = await this.popoverController.create({ component: GroupDurationPage, @@ -90,14 +108,37 @@ export class NewGroupPage implements OnInit { const picker = await this.pickerController.create({ cssClass: '', buttons: [ - { + { text: 'Cancelar', role: 'cancel', cssClass: 'btn-cancel' }, - { - text: 'Ok', + { + text: 'Ok', cssClass: 'btn-cancel', handler:(value:any)=>{ console.log('button done pressed'); + console.log(value); + + let now = new Date(); + this.thedate = new Date(now.getFullYear(), now.getMonth(), now.getDate() + value.days.value, now.getHours() + value.hours.value, now.getMinutes() + value.minutes.value, now.getSeconds(), now.getMilliseconds()); + /* let timer = setInterval(() =>{ + console.log('Show TIMER'); + let difference = this.thedate.getTime() - new Date().getTime(); + this._day = Math.floor(difference/(1000*60*60*24)); + let c_day = Math.floor(difference/(1000*60*60*24)); + let c_hours = Math.floor((difference % (1000*60*60*24)) / (1000*60*60)); + let c_minutes = Math.floor((difference % (1000*60*60)) / (1000*60)); + let c_seconds = Math.floor((difference % (1000*60)) / 1000); + + this.countDownTime = c_day + ":" + c_hours + ":" + c_minutes + ":" + c_seconds ; + + if(difference < 0){ + clearInterval(timer); + this.countDownTime = "Expired"; + } + + }) */ + + this.selectedDuration = [ value.days.value, value.hours.value, @@ -108,24 +149,24 @@ export class NewGroupPage implements OnInit { if(value.days.value > 0){ if(value.days.value == 1){ if(value.hours.value == 1){ - this.displayDuration = value.days.value + " day " + + this.displayDuration = value.days.value + " day " + value.hours.value + " hora " + value.minutes.value + " minutos"; } else{ - this.displayDuration = value.days.value + " days " + + 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 " + + this.displayDuration = value.days.value + " days " + value.hours.value + " hora " + value.minutes.value + " minutos"; } else{ - this.displayDuration = value.days.value + " days " + + this.displayDuration = value.days.value + " days " + value.hours.value + " horas " + value.minutes.value + " minutos"; } @@ -141,7 +182,7 @@ export class NewGroupPage implements OnInit { value.minutes.value + " minutos"; } } - } + } }, }, ], @@ -155,6 +196,8 @@ export class NewGroupPage implements OnInit { { text: '2', value: 2 }, { text: '3', value: 3 }, { text: '4', value: 4 }, + { text: '5', value: 5 }, + { text: '6', value: 6 }, ] }, { @@ -195,7 +238,7 @@ export class NewGroupPage implements OnInit { await picker.present(); picker.onDidDismiss().then(async data =>{ let day = await picker.getColumn('days'); - let hour = await picker.getColumn('hours'); + let hour = await picker.getColumn('hours'); let minutes = await picker.getColumn('minutes'); }); diff --git a/src/assets/images/icons-duration-countdown.svg b/src/assets/images/icons-duration-countdown.svg new file mode 100644 index 000000000..1a4ecd322 --- /dev/null +++ b/src/assets/images/icons-duration-countdown.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/theme/variables.scss b/src/theme/variables.scss index 9da84140a..d3feaaba6 100644 --- a/src/theme/variables.scss +++ b/src/theme/variables.scss @@ -77,6 +77,7 @@ $app-theme: mat-light-theme(( --ion-color-warning-contrast-rgb: 0, 0, 0; --ion-color-warning-shade: #e0ac08; --ion-color-warning-tint: #ffca22; + --ion-color-yellow-orange:#ffb703; /** danger **/ --ion-color-red:#d30a0a; @@ -274,6 +275,9 @@ $app-theme: mat-light-theme(( --ion-color-expediente: #dae3f3; } } +.yellow-orange{ + color: #ffb703 !important; +} .center{ text-align: center; }