This commit is contained in:
tiago.kayaya
2021-06-03 14:11:34 +01:00
parent d05ef20373
commit bf90d2765f
34 changed files with 16 additions and 1527 deletions
-30
View File
@@ -1,46 +1,20 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HeaderPage } from '../shared/header/header.page';
import { BtnSeguintePage } from '../shared/btn-seguinte/btn-seguinte.page';
import { BtnModalDismissPage } from '../shared/btn-modal-dismiss/btn-modal-dismiss.page';
import { EmptyChatPage } from '../shared/chat/empty-chat/empty-chat.page';
import { BtnCriarPage } from '../shared/buttons/btn-criar/btn-criar.page';
import { BtnAdicionarPage } from '../shared/buttons/btn-adicionar/btn-adicionar.page';
import { HeaderNoSearchPage } from '../shared/headers/header-no-search/header-no-search.page';
import { NewEventPage } from '../shared/agenda/new-event/new-event.page';
import { EditEventComponent } from '../shared/agenda/edit-event/edit-event.component';
import { ViewEventPage } from '../shared/agenda/view-event/view-event.page';
import { EventListComponent } from '../shared/agenda/event-list/event-list.component';
import { ApproveEventComponent } from '../shared/agenda/approve-event/approve-event.component';
import { AttendeesPage } from '../shared/event/attendees/attendees.page';
import { AttendeeModalPage } from '../shared/event/attendee-modal/attendee-modal.page';
import { EventsToApprovePage } from '../shared/gabinete-digital/events-to-approve/events-to-approve.page';
import { MessagesPage } from '../shared/chat/messages/messages.page';
import { ContactsPage } from '../shared/chat/messages/contacts/contacts.page';
import { GroupMessagesPage } from '../shared/chat/group-messages/group-messages.page';
import { NewGroupPage } from '../shared/chat/new-group/new-group.page';
import { EditGroupPage } from '../shared/chat/edit-group/edit-group.page';
import { GroupContactsPage } from '../shared/chat/group-messages/group-contacts/group-contacts.page';
import { ChatPopoverPage } from '../shared/popover/chat-popover/chat-popover.page';
import { EmptyContainerPage } from '../shared/empty-container/empty-container.page';
import { ExpedientePage } from '../shared/gabinete-digital/expediente/expediente.page';
import { ExpedientsPage } from '../shared/gabinete-digital/expedients/expedients.page';
import { PedidosPage } from '../shared/gabinete-digital/pedidos/pedidos.page';
import { DespachosPage } from '../shared/gabinete-digital/despachos/despachos.page';
import { PendentesPage } from '../shared/gabinete-digital/pendentes/pendentes.page';
import { DespachosPrPage } from '../shared/gabinete-digital/despachos-pr/despachos-pr.page';
import { DiplomasPage } from '../pages/gabinete-digital/diplomas/diplomas.page';
import { ExpedientesPrPage } from '../shared/gabinete-digital/expedientes-pr/expedientes-pr.page';
import { DiplomasAssinarPage } from '../shared/gabinete-digital/diplomas-assinar/diplomas-assinar.page';
import { ChatPopoverPageModule } from '../shared/popover/chat-popover/chat-popover.module';
@NgModule({
declarations: [
//HeaderPage,
//HeaderNoSearchPage,
BtnSeguintePage,
BtnModalDismissPage,
BtnCriarPage,
@@ -55,13 +29,10 @@ import { ChatPopoverPageModule } from '../shared/popover/chat-popover/chat-popov
EventListComponent,
EmptyContainerPage,
//EventsToApprovePage,
],
exports: [
//HeaderPage,
//HeaderNoSearchPage,
BtnSeguintePage,
BtnModalDismissPage,
BtnCriarPage,
@@ -77,7 +48,6 @@ import { ChatPopoverPageModule } from '../shared/popover/chat-popover/chat-popov
//EventsToApprovePage,
EventListComponent,
EmptyContainerPage,
],
imports: [
-13
View File
@@ -10,14 +10,6 @@ const routes: Routes = [
path: '',
component: ChatPage,
},
{
path: 'conversation',
loadChildren: () => import('./conversation/conversation.module').then( m => m.ConversationPageModule)
},
{
path: 'newchat',
loadChildren: () => import('./newchat/newchat.module').then( m => m.NewchatPageModule)
},
{
path: 'new-group',
loadChildren: () => import('./new-group/new-group.module').then( m => m.NewGroupPageModule)
@@ -34,11 +26,6 @@ const routes: Routes = [
{
path: 'edit-group',
loadChildren: () => import('./edit-group/edit-group.module').then( m => m.EditGroupPageModule)
},
{
path: 'test',
outlet:'test',
loadChildren: () => import('./test/test.module').then( m => m.TestPageModule)
}
];
-15
View File
@@ -12,12 +12,10 @@ import {
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';
import { Storage } from '@ionic/storage';
import { AlertService } from 'src/app/services/alert.service';
import { EditGroupPage } from 'src/app/shared/chat/edit-group/edit-group.page';
@@ -277,19 +275,6 @@ sendMsg() {
});
});
}
async startConversation(selectedUser) {
const modal = await this.modalController.create({
component: ConversationPage,
cssClass: 'conversation',
backdropDismiss: false,
componentProps: {
user: selectedUser,
}
});
await modal.present();
modal.onDidDismiss();
}
async selectContact(){
const modal = await this.modalController.create({
@@ -1,17 +0,0 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { ConversationPage } from './conversation.page';
const routes: Routes = [
{
path: '',
component: ConversationPage
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class ConversationPageRoutingModule {}
@@ -1,20 +0,0 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { ConversationPageRoutingModule } from './conversation-routing.module';
import { ConversationPage } from './conversation.page';
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
ConversationPageRoutingModule
],
declarations: [ConversationPage]
})
export class ConversationPageModule {}
@@ -1,49 +0,0 @@
<ion-header>
<ion-toolbar>
<ion-buttons slot="start">
<ion-back-button (click)="close()" defaultHref="/home/chat" icon="chevron-back"></ion-back-button>
</ion-buttons>
<ion-title>{{chatUser.name}}</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-row *ngFor="let message of messages" class="chat-container">
<ion-col size="9" *ngIf="message.user !== currentUser" class="message other-message">
<p><b>{{message.user}}</b></p>
<span>{{message.msg}}</span>
<div class="message-date">{{message.createdAt | date: 'HH:mm'}}</div>
</ion-col>
<ion-col offset="3" size="9" *ngIf="message.user === currentUser" class="message my-message">
<ion-label>
<p><b>{{message.user}}</b></p>
<span>{{message.msg}}</span>
<div class="message-date">{{message.createdAt | date: 'HH:mm'}}</div>
</ion-label>
</ion-col>
</ion-row>
</ion-content>
<ion-footer class="ion-no-border">
<ion-toolbar>
<ion-row align-items-center>
<ion-col>
<ion-item button lines="none">
<img src="assets/images/icons-arrow-arrow-down-25.svg">
</ion-item>
</ion-col>
<ion-col>
<ion-item lines="none" class="div-message">
<ion-textarea placeholder="Escrever uma mensagem" auto-grow class="message-input" rows="1" [(ngModel)]="message"></ion-textarea>
<ion-icon slot="end" name="mic-outline"></ion-icon>
</ion-item>
</ion-col>
<ion-col>
<ion-item button lines="none" [disabled]="message === ''">
<img src="assets/images/icons-chat-send.svg">
</ion-item>
</ion-col>
</ion-row>
</ion-toolbar>
</ion-footer>
@@ -1,55 +0,0 @@
ion-content{
background-color:#fefefe;
}
.chat-container{
margin: 10px 10px 0 10px;
}
.message {
padding: 5px 5px 5px 10px;
border-radius: 10px;
margin-bottom: 10px;
white-space: pre-wrap;
}
.my-message {
background: var(--ion-color-primary);
color: #fff;
}
.my-message p{
margin: 0;
padding: 0;
color: #9ab8e9;
}
.message-date{
font-size: 10px;
text-align: right;
margin-right: 5px;
}
.other-message {
background: #f2f3f7;
color: #333;
}
.other-message p{
margin: 0;
padding: 0;
color:#959ba7;
}
.message-input {
margin-top: 0px;
background: #fff;
padding: 0;
margin: 0;
}
.div-message{
border: 1px solid var(--ion-color-medium);
border-radius: 20px;
}
@@ -1,24 +0,0 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { IonicModule } from '@ionic/angular';
import { ConversationPage } from './conversation.page';
describe('ConversationPage', () => {
let component: ConversationPage;
let fixture: ComponentFixture<ConversationPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ConversationPage ],
imports: [IonicModule.forRoot()]
}).compileComponents();
fixture = TestBed.createComponent(ConversationPage);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -1,73 +0,0 @@
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { ModalController, NavParams } from '@ionic/angular';
import { AuthService } from 'src/app/services/auth.service';
@Component({
selector: 'app-conversation',
templateUrl: './conversation.page.html',
styleUrls: ['./conversation.page.scss'],
})
export class ConversationPage implements OnInit {
message = '';
messages = [];
currentUser = '';
constructor(
private authService: AuthService,
private router:Router,
private modalController: ModalController,
private navParams: NavParams) { }
loggedUser: any;
chatUser: any;
ngOnInit() {
this.authService.userData$.subscribe((res:any)=>{
this.loggedUser=res;
})
this.chatUser = this.navParams.get('user');
console.log(this.navParams.get('user'));
console.log(this.chatUser.name);
/* console.log("ON");
this.socket.connect();
//Set current user
let name = `User-${new Date().getTime()}`;
this.currentUser=name;
this.socket.emit('set-name', name);
//Reat from event calling "fromEvent"
this.socket.fromEvent('users-changed').subscribe(data =>{
console.log('gOT data:', data);
});
//Add message to the array of messages
this.socket.fromEvent('message').subscribe(message =>{
console.log('New:', message);
this.messages.push(message);
}); */
}
close(){
this.router.navigate(['/home/chat']);
this.modalController.dismiss(null);
}
sendMessage(){
}
/* sendMessage(){
this.socket.emit('send-message', {text: this.message});
this.message="";
}
ionViewWillLeave(){
this.socket.disconnect();
} */
}
@@ -18,8 +18,8 @@ import { ChatPopoverPageModule } from 'src/app/shared/popover/chat-popover/chat-
FormsModule,
IonicModule,
ComponentsModule,
GroupMessagesPageRoutingModule,
ChatPopoverPageModule,
GroupMessagesPageRoutingModule
],
declarations: [GroupMessagesPage]
})
@@ -10,6 +10,7 @@ import { ContactsPage } from './contacts.page';
import { SharedModule } from 'src/app/shared/shared.module';
import { PipesModule } from 'src/app/pipes/pipes.module';
import { ComponentsModule } from 'src/app/components/components.module';
import { FilterPipe } from 'src/app/pipes/filter.pipe';
@NgModule({
imports: [
@@ -17,9 +18,9 @@ import { ComponentsModule } from 'src/app/components/components.module';
FormsModule,
IonicModule,
ComponentsModule,
ContactsPageRoutingModule,
PipesModule,
ContactsPageRoutingModule
],
declarations: [ContactsPage]
declarations: [ContactsPage, FilterPipe]
})
export class ContactsPageModule {}
@@ -1,17 +0,0 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { NewchatPage } from './newchat.page';
const routes: Routes = [
{
path: '',
component: NewchatPage
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class NewchatPageRoutingModule {}
@@ -1,21 +0,0 @@
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { NewchatPageRoutingModule } from './newchat-routing.module';
import { NewchatPage } from './newchat.page';
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
NewchatPageRoutingModule
],
declarations: [NewchatPage],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class NewchatPageModule {}
@@ -1,51 +0,0 @@
<ion-header class="ion-no-border">
<ion-toolbar class="header-toolbar">
<div class="main-header">
<div class="title-content">
<div class="back-icon">
<ion-icon (click)="close()" slot="end" src='assets/images/icons-arrow-arrow-left.svg'></ion-icon>
</div>
<div class="div-title">
<ion-label class="title">Nova Conversa</ion-label>
</div>
</div>
</div>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-refresher name="refresher" slot="fixed" (ionRefresh)="doRefresh($event)">
<ion-progress-bar type="indeterminate" *ngIf="showLoader"></ion-progress-bar>
<ion-refresher-content>
</ion-refresher-content>
</ion-refresher>
<div class="main-content">
<ion-toolbar>
<ion-searchbar round (ionChange)="onChange($event)" placeholder="Pesquisar por cantacto" ></ion-searchbar>
</ion-toolbar>
<ion-list>
<ion-item *ngFor="let user of searchedItem" (click)="starConversation(user)">
{{user.name}}
</ion-item>
<ion-item>
Tiago Kayaya
</ion-item>
<ion-item>
Gilson Manuel
</ion-item>
</ion-list>
<ion-alpha-scroll
[listData]="contacts"
key="name"
[itemTemplate]="alphaScrollItemTemplateRef"
[currentPageClass]="currentPageClass"
[triggerChange]="triggerAlphaScrollChange">
<ng-template #alphaScrollItemTemplateRef let-item>
<ion-item (click)="currentPageClass.onItemClick(item)">{{item.$t}}</ion-item>
</ng-template>
</ion-alpha-scroll>
</div>
</ion-content>
@@ -1,66 +0,0 @@
ion-content{
--background:transparent;
}
.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{
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;
}
}
}
.main-content{
width: 100%; /* 400px */
height: 100%;
font-family: Roboto;
margin: 0 auto;
background-color: #fff;
overflow:auto;
padding: 15px 20px 0 20px;
}
ion-searchbar{
--border-radius: 20px;
}
@@ -1,24 +0,0 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { IonicModule } from '@ionic/angular';
import { NewchatPage } from './newchat.page';
describe('NewchatPage', () => {
let component: NewchatPage;
let fixture: ComponentFixture<NewchatPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ NewchatPage ],
imports: [IonicModule.forRoot()]
}).compileComponents();
fixture = TestBed.createComponent(NewchatPage);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -1,98 +0,0 @@
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { ModalController } from '@ionic/angular';
import { Observable } from 'rxjs';
import { ChatService } from 'src/app/services/chat.service';
import { ConversationPage } from '../conversation/conversation.page';
@Component({
selector: 'app-newchat',
templateUrl: './newchat.page.html',
styleUrls: ['./newchat.page.scss'],
})
export class NewchatPage implements OnInit {
showLoader: boolean;
userList: any[];
contacts:any;
currentPageClass = this;
triggerAlphaScrollChange: number = 0;
constructor(
private chatService: ChatService,
private modalController: ModalController,
private router:Router) {
this.contacts = [
{
'name': 'Affenpinscher'
},
{
'name': 'Afghan Hound'
},
// ...
];
}
result:any;
searchCountryString:any;
searchedItem:any;
ngOnInit() {
this.getUsers();
}
close(){
this.modalController.dismiss();
}
doRefresh(event) {
this.getUsers();
setTimeout(() => {
event.target.complete();
}, 2000);
}
getUsers(){
this.result = this.chatService.getAllUsers().subscribe((res:any)=>{
this.userList = res.users;
this.searchedItem = this.userList;
});
}
userSelected(id){
console.log(id);
this.router.navigate(['/home/chat/conversation']);
}
onChange(event){
const val = event.detail.value;
this.searchedItem = this.userList;
if(val && val.trim() != ''){
this.searchedItem = this.searchedItem.filter((item:any) =>{
return (item.name.toLowerCase().indexOf(val.toLowerCase()) > -1);
});
}
}
async starConversation(selectedUser) {
const modal = await this.modalController.create({
component: ConversationPage,
cssClass: 'conversation',
backdropDismiss: false,
componentProps: {
user: selectedUser,
}
});
await modal.present();
modal.onDidDismiss();
}
onItemClick(item) {
// This is an example of how you could manually trigger ngOnChange
// for the component. If you modify "listData" it won't perform
// an ngOnChange, you will have to trigger manually to refresh the component.
this.triggerAlphaScrollChange++;
}
}
@@ -1,17 +0,0 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { TestPage } from './test.page';
const routes: Routes = [
{
path: '',
component: TestPage
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class TestPageRoutingModule {}
-21
View File
@@ -1,21 +0,0 @@
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { TestPageRoutingModule } from './test-routing.module';
import { TestPage } from './test.page';
import { BrowserModule } from '@angular/platform-browser';
import { CommonModule } from '@angular/common';
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
TestPageRoutingModule
],
declarations: [TestPage]
})
export class TestPageModule {}
-32
View File
@@ -1,32 +0,0 @@
<ion-header>
<ion-toolbar>
<ion-title>test</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<div *ngFor="let member of members">{{member}}</div>
</ion-content>
<ion-footer>
<ion-toolbar>
<ion-row align-items-center class="row">
<ion-col size="1">
<ion-label class="ion-no-padding" lines="none">
<ion-icon (click)="openChatOptions()" class="chat-icon-options" src="assets/icon/icons-chat-options.svg"></ion-icon>
</ion-label>
</ion-col>
<ion-col size="9">
<ion-item class="ion-no-padding type-message" lines="none">
<ion-textarea placeholder="Escrever uma mensagem" auto-grow class="message-input" rows="1" [(ngModel)]="message"></ion-textarea>
<ion-icon slot="end" src="assets/icon/icons-chat-mic.svg"></ion-icon>
</ion-item>
</ion-col>
<ion-col size="2">
<!-- [disabled]="message === ''" -->
<ion-label>
<ion-icon (click)="sendMessage()" class="chat-icon-send" src="assets/icon/icons-chat-send.svg"></ion-icon>
</ion-label>
</ion-col>
</ion-row>
</ion-toolbar>
</ion-footer>
-24
View File
@@ -1,24 +0,0 @@
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { IonicModule } from '@ionic/angular';
import { TestPage } from './test.page';
describe('TestPage', () => {
let component: TestPage;
let fixture: ComponentFixture<TestPage>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ TestPage ],
imports: [IonicModule.forRoot()]
}).compileComponents();
fixture = TestBed.createComponent(TestPage);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
});
-200
View File
@@ -1,200 +0,0 @@
import { Component, OnInit } from '@angular/core';
import { ActionSheetController, MenuController, ModalController, NavParams, PopoverController } from '@ionic/angular';
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 { ChatPopoverPage } from 'src/app/shared/popover/chat-popover/chat-popover.page';
import { GroupContactsPage } from '../group-messages/group-contacts/group-contacts.page';
@Component({
selector: 'app-test',
templateUrl: './test.page.html',
styleUrls: ['./test.page.scss'],
})
export class TestPage implements OnInit {
showLoader: boolean;
isGroupCreated:boolean;
loggedUser: any;
message:any;
messages:any;
room:any;
roomName:any;
members: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,
private chatService: ChatService,
private navParams: NavParams,
private authService: AuthService,
) {
this.isGroupCreated = true;
this.room = this.navParams.get('room');
this.roomName = this.room.name.split('-').join(' ');
}
ngOnInit() {
this.authService.userData$.subscribe((res:any)=>{
this.loggedUser=res;
console.log(this.loggedUser);
});
this.load();
}
load(){
this.getGroupContacts();
this.loadGroupMessages();
}
close(){
this.modalController.dismiss();
}
doRefresh(ev:any){
this.load();
ev.target.complete();
}
getGroupContacts(){
this.showLoader = true;
//If group is private call getGroupMembers
if(this.room.t === 'p'){
this.chatService.getGroupMembers(this.room._id).subscribe(res=>{
console.log(res);
this.members = res['members'];
this.showLoader = false;
});
}
//Otherwise call getChannelMembers for públic groups
else{
this.chatService.getChannelMembers(this.room._id).subscribe(res=>{
console.log(res);
this.members = res['members'];
this.showLoader = false;
});
}
}
loadGroupMessages(){
this.showLoader = true;
//If group is private call getGroupMembers
if(this.room.t === 'p'){
this.chatService.getPrivateGroupMessages(this.room._id).subscribe(res=>{
console.log(res);
let msgOnly = res['messages'].filter(data => data.t != 'au');
this.messages = msgOnly.reverse();
this.showLoader = false;
});
}
//Otherwise call getChannelMembers for públic groups
else{
this.chatService.getPublicGroupMessages(this.room._id).subscribe(res=>{
console.log(res);
this.messages = res['messages'].reverse();
});
}
}
sendMessage(){
let body = {
"message":
{
"rid": this.room._id, "msg": this.message
}
}
this.chatService.sendMessage(body).subscribe(res=> {
this.loadGroupMessages();
});
this.message = "";
}
async openOptions(ev: any) {
const popover = await this.popoverController.create({
component: ChatPopoverPage,
cssClass: 'chat-popover',
event: ev,
componentProps: {
room: this.room,
},
translucent: true
});
await popover.present();
popover.onDidDismiss().then(res=>{
console.log(res);
if(res.data){
this.roomName = res.data.name.split('-').join(' ');
console.log(this.roomName);
this.load();
/* this.modalController.dismiss(); */
};
});
}
async openChatOptions(ev: any) {
const popover = await this.popoverController.create({
component: ChatOptionsPopoverPage,
cssClass: 'chat-options-popover',
event: ev,
componentProps: {
room: this.room,
},
translucent: true
});
return await popover.present();
}
async addContacts(){
console.log(this.members);
const modal = await this.modalController.create({
component: GroupContactsPage,
componentProps: {
isCreated: this.isGroupCreated,
room: this.room,
members: this.members,
name: this.room.name,
},
cssClass: 'contacts',
backdropDismiss: false
});
await modal.present();
modal.onDidDismiss().then(()=>{
this.load();
});
}
/* async actionSheet() {
const actionSheet = await this.actionSheetController.create({
cssClass: 'my-custom-class',
buttons: [{
text: 'Sair do grupo',
handler: () => {
console.log('Delete clicked');
}
}, {
text: 'Alterar nome do grupo1',
handler: () => {
console.log('Alterar nome do grupo');
this.openChangeGroupName()
}
}, {
text: 'Apagar o grupo',
handler: () => {
console.log('Play clicked');
}
},
]
});
await actionSheet.present();
}
*/
}
@@ -12,7 +12,6 @@ import { SharedModule } from 'src/app/shared/shared.module';
import { EventListComponent } from 'src/app/shared/agenda/event-list/event-list.component';
import { EmptyContainerPage } from 'src/app/shared/empty-container/empty-container.page';
import { EventsToApprovePage } from 'src/app/shared/gabinete-digital/events-to-approve/events-to-approve.page';
import { ExpedientePage } from 'src/app/shared/gabinete-digital/expediente/expediente.page';
import { ExpedientsPage } from 'src/app/shared/gabinete-digital/expedients/expedients.page';
import { PendentesPage } from 'src/app/shared/gabinete-digital/pendentes/pendentes.page';
import { PedidosPage } from 'src/app/shared/gabinete-digital/pedidos/pedidos.page';
@@ -24,7 +23,6 @@ import { DiplomasAssinarPage } from 'src/app/shared/gabinete-digital/diplomas-as
import { ComponentsModule } from 'src/app/components/components.module';
import { EmptyContainerPageModule } from 'src/app/shared/empty-container/empty-container.module';
import { EventsToApprovePageModule } from 'src/app/shared/gabinete-digital/events-to-approve/events-to-approve.module';
import { ExpedientePageModule } from 'src/app/shared/gabinete-digital/expediente/expediente.module';
import { ExpedientsPageModule } from 'src/app/shared/gabinete-digital/expedients/expedients.module';
import { PedidosPageModule } from 'src/app/shared/gabinete-digital/pedidos/pedidos.module';
import { DespachosPageModule } from 'src/app/shared/gabinete-digital/despachos/despachos.module';
@@ -45,7 +43,6 @@ import { HeaderPageModule } from 'src/app/shared/header/header.module';
HeaderPageModule,
EmptyContainerPageModule,
EventsToApprovePageModule,
ExpedientePageModule,
ExpedientsPageModule,
PedidosPageModule,
DespachosPageModule,
@@ -53,7 +50,8 @@ import { HeaderPageModule } from 'src/app/shared/header/header.module';
DespachosPrPageModule,
DiplomasPageModule,
ExpedientesPrPageModule,
DiplomasAssinarPageModule
DiplomasAssinarPageModule,
EmptyContainerPageModule,
],
declarations: [
@@ -15,6 +15,7 @@ import { EmptyChatPage } from './empty-chat.page';
IonicModule,
EmptyChatPageRoutingModule
],
declarations: []
exports: [EmptyChatPage],
declarations: [EmptyChatPage]
})
export class EmptyChatPageModule {}
@@ -10,6 +10,7 @@ import { ContactsPage } from './contacts.page';
import { SharedModule } from 'src/app/shared/shared.module';
import { FilterPipe } from 'src/app/pipes/filter.pipe';
import { ComponentsModule } from 'src/app/components/components.module';
import { PipesModule } from 'src/app/pipes/pipes.module';
@NgModule({
imports: [
@@ -17,9 +18,10 @@ import { ComponentsModule } from 'src/app/components/components.module';
FormsModule,
IonicModule,
ComponentsModule,
ContactsPageRoutingModule
ContactsPageRoutingModule,
PipesModule,
],
exports: [ContactsPage, FilterPipe],
declarations: [ContactsPage]
exports: [ContactsPage],
declarations: [ContactsPage, FilterPipe]
})
export class ContactsPageModule {}
@@ -1,12 +0,0 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class ExpedientePageRoutingModule {}
@@ -1,25 +0,0 @@
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { ExpedientePageRoutingModule } from './expediente-routing.module';
import { ExpedientePage } from './expediente.page';
import { SharedModule } from 'src/app/shared/shared.module';
import { ComponentsModule } from 'src/app/components/components.module';
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
ComponentsModule,
ExpedientePageRoutingModule
],
exports: [ExpedientePage],
declarations: [ExpedientePage],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class ExpedientePageModule {}
@@ -1,202 +0,0 @@
<ion-header class="ion-no-border">
<ion-toolbar class="header-toolbar">
<div class="main-header">
<div class="title-content">
<app-btn-modal-dismiss (click)="openExpedientListPage()"></app-btn-modal-dismiss>
<div class="middle">
<ion-label class="title">Detalhes do Expediente</ion-label>
</div>
<div class="div-icon">
<ion-menu-button autoHide="false">
<ion-icon name="ellipsis-vertical-outline"></ion-icon>
</ion-menu-button>
</div>
</div>
</div>
</ion-toolbar>
</ion-header>
<!-- <ion-header>
<ion-toolbar class="bg-blue">
<ion-buttons slot="start">
<ion-back-button defaultHref="/expediente"></ion-back-button>
</ion-buttons>
<ion-title>Expediente</ion-title>
<ion-buttons slot="end">
<ion-menu-button autoHide="false">
<ion-icon name="ellipsis-vertical-outline"></ion-icon>
</ion-menu-button>
</ion-buttons>
</ion-toolbar>
</ion-header> -->
<ion-content padding>
<div *ngIf="task">
<h3 class="h3-event-title">Detalhes do Expediente</h3>
<ion-item-group>
<ion-item>
<ion-label position="stacked">Assunto</ion-label>
<ion-input disabled="true">{{ task.Folio }}</ion-input>
</ion-item>
<ion-item>
<ion-label position="stacked">Remetentes</ion-label>
<ion-input disabled="true">{{task.Remetente}}</ion-input><!-- {{ task.Senders }} -->
</ion-item>
<ion-item>
<ion-label position="stacked">Data</ion-label>
<ion-input disabled="true" value=''>{{ task.CreateDate | date: 'dd-MM-yy | hh:mm'}}</ion-input>
</ion-item>
<ion-button (click)="viewDocument()" class="btn-ok-no-width" fill="clear" color="#fff" shape="round" expand="block">
<ion-icon name="attach" slot="start"></ion-icon>
Ver documento
</ion-button>
</ion-item-group>
<div *ngIf="eventsList">
<h3 class="h3-event-title">Eventos Associados</h3>
<!-- <ion-list>
<ion-item-sliding>
<ion-item lines="none"
*ngFor="let event of eventsList"
[routerLink]="['/home/gabinete-digital/expediente/events/', event.EventId, 'gabinete-digital/expediente/' + serialnumber]">
<div class="div-item-{{event.CalendarName}}">
<div class="div-up">
<div class="div-icon">
<ion-icon slot="start" name="reader"></ion-icon>
</div>
<div class="div-content-{{event.CalendarName}}">
<h3 class="capitalizeText">{{event.Subject}}</h3>
<p>{{event.StartDate | date: 'dd-MM-yy | hh:mm'}} - {{event.EndDate| date: 'hh:mm'}}</p>
</div>
</div>
<div class="div-botton">
<div class="div-botton-left">
<ion-icon class="ion-icon-location" slot="start" name="location"></ion-icon>
</div>
<div class="div-botton-middle">
<p class="item-list-small capitalizeText">{{event.Location}}</p>
</div>
<div *ngIf="event.HasAttachments" class="div-botton-right">
<ion-icon class="ion-icon-attach" slot="end" name="attach-outline"></ion-icon>
</div>
</div>
</div>
</ion-item>
</ion-item-sliding>
</ion-list> -->
<ion-list>
<div *ngIf="eventsList">
<ion-item-sliding>
<ion-item
class="Rectangle" lines="none"
*ngFor="let event of eventsList"
(click)="viewEventDetail(event.EventId)"
>
<!-- [routerLink]="['/home/events', event.EventId, 'events']" -->
<div class="content-{{profile}}-{{event.CalendarName}}">
<div class="approve-event-time">
<p>{{event.StartDate | date: 'hh:mm'}}</p>
<p>{{event.EndDate | date: 'hh:mm'}}</p>
</div>
<div class="approve-event-detail">
<p *ngIf="event.StartDate != event.EndDate">{{event.StartDate | date: 'd/M/yy' }} - {{ event.EndDate | date: 'dd/mm/yy'}} | {{event.Location}}</p>
<p *ngIf="event.StartDate == event.EndDate">{{event.StartDate | date: 'd/M/yy' }} | {{event.Location}}</p>
<h3>{{event.Subject}}</h3>
</div>
</div>
</ion-item>
</ion-item-sliding>
</div>
</ion-list>
</div>
<!-- <div *ngIf="!eventsList">
<ion-list>
<ion-list-header>
<ion-label>
<ion-skeleton-text animated style="width: 50%"></ion-skeleton-text>
</ion-label>
</ion-list-header>
<ion-item>
<ion-thumbnail slot="start">
<ion-skeleton-text animated></ion-skeleton-text>
</ion-thumbnail>
<ion-label>
<h3>
<ion-skeleton-text animated style="width: 50%"></ion-skeleton-text>
</h3>
<p>
<ion-skeleton-text animated style="width: 80%"></ion-skeleton-text>
</p>
<p>
<ion-skeleton-text animated style="width: 60%"></ion-skeleton-text>
</p>
</ion-label>
</ion-item>
<ion-item>
<ion-thumbnail slot="start">
<ion-skeleton-text animated></ion-skeleton-text>
</ion-thumbnail>
<ion-label>
<h3>
<ion-skeleton-text animated style="width: 50%"></ion-skeleton-text>
</h3>
<p>
<ion-skeleton-text animated style="width: 80%"></ion-skeleton-text>
</p>
<p>
<ion-skeleton-text animated style="width: 60%"></ion-skeleton-text>
</p>
</ion-label>
</ion-item>
</ion-list>
</div> -->
</div>
<div *ngIf="!task">
<ion-list>
<ion-list-header>
<ion-label>
<ion-skeleton-text animated style="width: 50%"></ion-skeleton-text>
</ion-label>
</ion-list-header>
<ion-item>
<ion-label>
<h3>
<ion-skeleton-text animated style="width: 50%"></ion-skeleton-text>
</h3>
<p>
<ion-skeleton-text animated style="width: 80%"></ion-skeleton-text>
</p>
</ion-label>
</ion-item>
<ion-item>
<ion-label>
<h3>
<ion-skeleton-text animated style="width: 50%"></ion-skeleton-text>
</h3>
<p><ion-skeleton-text animated style="width: 80%"></ion-skeleton-text></p>
</ion-label>
</ion-item>
<ion-item>
<ion-label>
<h3>
<ion-skeleton-text animated style="width: 50%"></ion-skeleton-text>
</h3>
<p>
<ion-skeleton-text animated style="width: 80%"></ion-skeleton-text>
</p>
</ion-label>
</ion-item>
<ion-button color="medium" shape="round" expand="block">
<!-- <ion-icon color="medium" name="attach" slot="start"></ion-icon> -->
<ion-skeleton-text animated style="width: 50%"></ion-skeleton-text>
</ion-button>
</ion-list>
</div>
</ion-content>
@@ -1,224 +0,0 @@
@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{
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;
}
}
}
ion-item-group{
margin: 15px;
}
ion-button{
display: block;
width: 80%;
margin: 20px auto;
}
.h3-event-title{
padding: 15px 0 0px 25px;
font-weight: bold;
}
//DIV
.div-item-Oficial{
width: 100%;
overflow: auto;
border-bottom: 1px solid #ccc;
margin: 10px 0 5px 0;
/* background: #cab0dc; */
/* border-radius: 20px; */
/* padding: 10px; */
/* box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); */
}
.div-item-Pessoal{
width: 100%;
overflow: auto;
border-bottom: 1px solid #ccc;
margin: 10px 0 5px 0;
/* background: #cbeecb; */
/* border-radius: 20px; */
/* padding: 10px; */
/* box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); */
}
.div-up{
width: 100%;
overflow: auto;
}
.div-up h3{
margin: 0;
padding: 0;
font-size: 17px;
width: 100%;
}
.div-icon{
width: 10%;
font-size: 22px;
float: left;
color: #808080;
}
.div-icon ion-icon{
display: block;
margin: 0 auto;
}
.div-content-Oficial{
width: 85%;
float: left;
border-left: 4px solid #cab0dc;
padding: 0 0 0 12px;
}
.div-content-Pessoal{
width: 85%;
float: left;
border-left: 4px solid #cbeecb;
padding: 0 0 0 12px;
}
.div-content-Oficial h3, .div-content-Pessoal h3{
font-size: 14pt;
/* border: 1px solid red; */
}
.div-content-Oficial p, .div-content-Pessoal p{
font-size: 12pt;
color: rgb(94, 92, 92);
padding: 0 !important;
margin: 0 !important;
}
.div-botton{
width: 100%;
overflow: auto;
margin: 10px 0 5px 0;
}
.div-botton-left{
width: 10%;
float: left;
}
.ion-icon-location{
text-align: center;
display: block;
color: #000;
font-size: 16px;
margin: 0 auto;
}
.div-botton-middle{
width: 75%;
float: left;
margin-top: 0.5px;
}
.div-botton-middle p{
padding: 0;
margin: 0;
}
.div-botton-right{
width: 10%;
float: left;
margin: 0;
padding: 0;
}
.ion-icon-attach{
color: #666666;
font-size: 20px;
}
/* TOGGLE BUTTON */
.switch {
position: relative;
display: inline-block;
width: 90px;
height: 34px;
float: right;
margin:20px 20px 0 0;
}
.div-top-header{
width: 400px;
margin: 6px auto;
background-color: #0782c9;
overflow: auto;
}
.div-search{
font-size: 45px;
float: left;
margin: 0 0 0 10px
}
.div-logo{
background: transparent;
width: 150px;
margin: 2.5px 0 2.5px 71px;
float: left;
}
.div-logo img{
width: 100%;
}
.div-profile{
font-size: 45px;
float: right;
margin-right: 10px;
}
@@ -1,24 +0,0 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { IonicModule } from '@ionic/angular';
import { ExpedientePage } from './expediente.page';
describe('ExpedientePage', () => {
let component: ExpedientePage;
let fixture: ComponentFixture<ExpedientePage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ExpedientePage ],
imports: [IonicModule.forRoot()]
}).compileComponents();
fixture = TestBed.createComponent(ExpedientePage);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -1,158 +0,0 @@
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { ProcessesService } from 'src/app/services/processes.service';
import { AttachmentsService } from 'src/app/services/attachments.service';
import { EventsService } from 'src/app/services/events.service';
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
import { DailyWorkTask } from 'src/app/models/dailyworktask.model';
import { ActivatedRoute, Router } from '@angular/router';
import { formatDate } from '@angular/common';
import { MenuController, ModalController, NavParams } from '@ionic/angular';
import { AlertService } from 'src/app/services/alert.service';
import { Event } from 'src/app/models/event.model';
import { ViewEventPage } from 'src/app/pages/agenda/view-event/view-event.page';
import { momentG } from 'src/plugin/momentG';
import { ExpedientTaskModalPage } from 'src/app/pages/gabinete-digital/expediente/expedient-task-modal/expedient-task-modal.page';
import { BookMeetingModalPage } from 'src/app/pages/gabinete-digital/expediente/book-meeting-modal/book-meeting-modal.page';
@Component({
selector: 'app-expediente',
templateUrl: './expediente.page.html',
styleUrls: ['./expediente.page.scss'],
})
export class ExpedientePage implements OnInit {
task: any;
fulltask: any;
eventsList: Event[];
//serialnumber: string;
//profile: string;
@Input() profile:string;
@Input() serialNumber:string;
@Output() openExpedientList:EventEmitter<any> = new EventEmitter<any>();
constructor(private activateRoute: ActivatedRoute,
private processes: ProcessesService,
private iab: InAppBrowser,
private attachments: AttachmentsService,
private events: EventsService,
private menu: MenuController,
private router: Router,
private modalController: ModalController,
//private navParams: NavParams,
private alertService: AlertService) {
//this.serialnumber = this.navParams.get('serialNumber');
//this.profile = this.navParams.get('profile');
}
ngOnInit() {
this.profile = "mdgpr";
// console.log(this.serialNumber);
this.activateRoute.paramMap.subscribe(paramMap => {
if (!paramMap.has('SerialNumber')) {
return;
}
/* this.serialnumber = paramMap.get('SerialNumber'); */
this.LoadTaskDetail(this.serialNumber);
this.LoadRelatedEvents(this.serialNumber);
});
this.LoadTaskDetail(this.serialNumber);
this.LoadRelatedEvents(this.serialNumber);
}
openExpedientListPage(){
this.openExpedientList.emit();
}
async LoadTaskDetail(serial: string) {
this.processes.GetTask(serial).subscribe(res => {
this.task = {
"SerialNumber": res.serialNumber,
"Folio": res.workflowInstanceFolio,
"Senders": res.originator.email,
"CreateDate": momentG(new Date(res.taskStartDate),'yyyy-MM-dd HH:mm:ss'),
"DocumentURL": res.workflowInstanceDataFields.ViewerRequest,
"Remetente": res.workflowInstanceDataFields.Sender,
}
this.fulltask = res;
console.log(res);
});
}
async LoadRelatedEvents(serial: string) {
if (this.eventsList == null) {
this.attachments.getAttachmentsBySerial(serial).subscribe(res => {
console.log(res);
res.forEach(att => {
if (this.eventsList == null) {
this.eventsList = new Array();
}
this.events.getEvent(att.ParentId).subscribe(event => {
this.eventsList.push(event);
console.log(this.eventsList);
});
});
});
}
}
viewDocument() {
const url: string = this.task.DocumentURL.replace("webTRIX.Viewer","webTRIX.Viewer.Branch1");
const browser = this.iab.create(url,"_blank");
browser.show();
}
openMenu() {
this.menu.open();
}
async openExpedientActionsModal(taskAction: any, task: any) {
const modal = await this.modalController.create({
component: ExpedientTaskModalPage,
componentProps: {
taskAction: taskAction,
task: task,
},
cssClass: 'expedient-task-modal modal-desktop',
backdropDismiss: false
});
await modal.present();
modal.onDidDismiss();
}
async openBookMeetingModal(task: any) {
const modal = await this.modalController.create({
component: BookMeetingModalPage,
componentProps: {
task: task,
},
cssClass: 'book-meeting-modal modal-desktop',
backdropDismiss: false
});
await modal.present();
modal.onDidDismiss();
}
async viewEventDetail(eventId: any) {
console.log(this.profile);
const modal = await this.modalController.create({
component: ViewEventPage,
componentProps: {
eventId: eventId,
profile: this.profile,
},
cssClass: 'modal modal-desktop',
backdropDismiss: false
});
await modal.present();
modal.onDidDismiss().then((res) => {
if (res) {
}
});
}
}
+1 -1
View File
@@ -65,7 +65,7 @@
<ion-icon class="font-40" name="restaurant-outline" src="assets/images/icons-search-close.svg"></ion-icon>
</button>
<ion-form *ngIf="showSearch">
<ion-form *ngIf="showSearch">
<div class="d-flex search-input-container ml-10 justify-between" *ngIf="showSearch" >
<div class="icon" (click)="basicSearch()">
<ion-icon class="icon-z" slot="end" name="search"></ion-icon>
@@ -1,4 +1,4 @@
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
@@ -18,7 +18,6 @@ import { ComponentsModule } from 'src/app/components/components.module';
ChatPopoverPageRoutingModule
],
exports: [ChatPopoverPage],
declarations: [ChatPopoverPage],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
declarations: [ChatPopoverPage]
})
export class ChatPopoverPageModule {}