import { Component, OnInit } from '@angular/core'; import { Router, NavigationEnd } from '@angular/router'; import { ModalController, NavParams } from '@ionic/angular'; import { PublicationFolder } from 'src/app/models/publicationfolder'; import { PublicationsService } from 'src/app/services/publications.service'; import { NewActionPage } from './new-action/new-action.page'; import { ViewPublicationsPage } from './view-publications/view-publications.page'; import { AnimationController } from '@ionic/angular'; import { Publication } from 'src/app/models/publication'; import { ActionsOptionsPage } from 'src/app/shared/popover/actions-options/actions-options.page'; import { EditActionPage } from './edit-action/edit-action.page'; import { ToastService } from 'src/app/services/toast.service'; import { ThemeService } from 'src/app/services/theme.service' import { PermissionService } from 'src/app/services/permission.service'; import { Storage } from '@ionic/storage'; import { NewPublicationPage } from './new-publication/new-publication.page'; // import { ActionModel } from 'src/app/models/beast-orm'; @Component({ selector: 'app-publications', templateUrl: './publications.page.html', styleUrls: ['./publications.page.scss'], }) export class PublicationsPage implements OnInit { showLoader: boolean = false publicationFolder: PublicationFolder; publication: Publication; publicationsEventFolderList: PublicationFolder[] = []; actionsListStorage: PublicationFolder[] = new Array(); publicationsTravelFolderList: PublicationFolder[] = []; theDate: any; theEndDate: any; customDate: any; months: string[]; days: string[]; desktopComponent: any = { showViewPublication: false, showAddNewPublication: false, showPublicationDetail: false, showAddActions: false, showEditActions: false } folderId: string; documentId: any // data set from child component publicationType: any; publicationId: string; // from publication details //publication: object; hideRefreshBtn = true; showSlidingOptions = true; idSelected: string; intent: any; constructor( private router: Router, private modalController: ModalController, private animationController: AnimationController, private publications: PublicationsService, private toastService: ToastService, public ThemeService: ThemeService, public p: PermissionService, private storage: Storage, ) { this.months = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"]; this.days = ["Domingo", "Segunda-feira", "Terça-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "Sábado"]; } ngOnInit() { const pathname = window.location.pathname this.getActions(); this.router.events.forEach((event) => { if (event instanceof NavigationEnd && event.url == pathname) { this.getActions(); } }); this.hideRefreshButton(); this.intent = window["sharedContent"] } hideRefreshButton() { window.onresize = (event) => { if (window.innerWidth < 701) { this.hideRefreshBtn = false; this.showSlidingOptions = false; } else { this.hideRefreshBtn = true; this.showSlidingOptions = true; } } if (window.innerWidth < 701) { this.hideRefreshBtn = false; this.showSlidingOptions = false; } else { this.hideRefreshBtn = true; this.showSlidingOptions = true; } } refreshing() { setTimeout(() => { this.getActions(); }, 1500); } doRefresh(event) { this.getActions(); setTimeout(() => { try { event?.target?.complete(); } catch(error) {} }, 250); } close() { this.modalController.dismiss(); } get windowInnerWidth(): number { return window.innerWidth } getDate(date) { this.theDate = new Date(date); return this.theDate.getDate() + " de " + (this.months[this.theDate.getMonth()]) + " de " + this.theDate.getFullYear() } getActions() { this.showLoader = true this.publications.GetPublicationFolderList().subscribe(async res => { this.showLoader = false; const folders: PublicationFolder[] = this.getPublicationFolderMap(res) this.publicationsEventFolderList = folders.filter((e)=>e.ActionType == 'Evento') await this.storage.set('actionsEvents', this.publicationsEventFolderList); this.showLoader = false; // (async ()=> { // const created = await ActionModel.create(folders) // const stored = await ActionModel.all() // const notPresentOnTheRequest: ActionModel[] = stored.filter(e => { // return !folders.find(b => e.ProcessId == b.ProcessId) // }) // for (let ActionModelToDelete of notPresentOnTheRequest) { // ActionModelToDelete.delete() // } // // console.log({created, stored, folders, toDeletes}) // })() }, (error) => { this.showLoader = false; this.getFromDB() }); } getPublicationFolderMap(events: any):PublicationFolder[] { return events.map((data) : PublicationFolder => { return { ProcessId: data.ProcessId, Description: data.Description, Detail: data.Detail, DateBegin: data.DateBegin, DateEnd: data.DateEnd, ActionType: data.ActionType, } }); } async getFromDB() { //const folders: PublicationFolder[] = await ActionModel.all() //this.showLoader = false; // this.publicationsEventFolderList = folders this.storage.get('actionsEvents').then((events = []) => { if(Array.isArray(events)) { const folders: PublicationFolder[] = this.getPublicationFolderMap(events) this.showLoader = false; this.publicationsEventFolderList = folders } }); this.storage.get('actionsViagens').then((viagens = []) => { if(Array.isArray(viagens)) { const folders: PublicationFolder[] = this.getPublicationFolderMap(viagens) this.publicationsTravelFolderList = folders this.showLoader = false; } }); } async editAction(folderId?: string) { const modal = await this.modalController.create({ component: EditActionPage, componentProps: { folderId: folderId, }, cssClass: 'new-action modal modal-desktop', backdropDismiss: true }); modal.onDidDismiss().then(() => { this.getActions(); }); await modal.present(); //this.refreshing() } async deleteAction(id?: string) { const loader = this.toastService.loading(); try { await this.publications.DeletePresidentialAction(id).toPromise(); this.toastService._successMessage() } catch (error) { if(error.status == 0) { this.toastService._badRequest('Sem acesso à internet. Por favor verifique sua conexão') } else { this.toastService._badRequest() } } finally { loader.remove() this.refreshing() } } async AddPublicationFolder(item?: any) { this.closeDesktopComponent(); this.idSelected = ''; if (window.innerWidth < 701) { const modal = await this.modalController.create({ component: NewActionPage, componentProps: { item: item, }, cssClass: 'new-action modal modal-desktop', backdropDismiss: false }); modal.onDidDismiss().then(() => { this.getActions(); }); await modal.present(); } else { this.desktopComponent.showAddActions = true; } } async AddPublication(publicationType: any, folderId: any,intent: any) { const modal = await this.modalController.create({ component: NewPublicationPage, componentProps: { publicationType: publicationType, folderId: folderId, intent: intent }, cssClass: 'new-publication modal modal-desktop', backdropDismiss: false }); modal.onDidDismiss().then(() => { this.doRefresh(event); }); await modal.present(); } goToPublicationsList(folderId: string) { if(this.intent){ this.AddPublication('2',folderId,this.intent) return } if (window.innerWidth < 701) { this.router.navigate(['/home/publications', folderId]); this.idSelected = ""; } else { this.closeDesktopComponent(); this.idSelected = folderId; this.folderId = folderId this.desktopComponent.showViewPublication = true; } } async viewPublications(folderId: string) { this.folderId = folderId const enterAnimation = (baseEl: any) => { const backdropAnimation = this.animationController.create() .addElement(baseEl.querySelector('ion-backdrop')!) .fromTo('opacity', '0.01', 'var(--backdrop-opacity)'); const wrapperAnimation = this.animationController.create() .addElement(baseEl.querySelector('.modal-wrapper')!) .keyframes([ { offset: 0, opacity: '0', transform: 'scale(0)' }, { offset: 1, opacity: '0.99', transform: 'scale(1)' } ]); return this.animationController.create() .addElement(baseEl) .easing('ease-out') .duration(500) .addAnimation([backdropAnimation, wrapperAnimation]); } const leaveAnimation = (baseEl: any) => { return enterAnimation(baseEl).direction('reverse'); } this.closeDesktopComponent(); // OpenModal if (window.innerWidth < 701) { /* let item = this.publicationFolderList; */ const modal = await this.modalController.create({ component: ViewPublicationsPage, //enterAnimation, //leaveAnimation, componentProps: { folderId: folderId, }, cssClass: 'new-action modal modal-desktop', backdropDismiss: false }); modal.onDidDismiss(); await modal.present(); } else { // open angular component this.folderId = folderId this.desktopComponent.showViewPublication = true; } } // called from publications details // Emittter goBackToViewPublications() { this.closeDesktopComponent(); this.idSelected = this.folderId; this.desktopComponent.showViewPublication = true; } // called from publications details // Emitters goBackToPubications() { this.closeDesktopComponent(); this.idSelected = this.folderId; this.desktopComponent.showViewPublication = true; } // called from edit publication (Emitters only) // Emitters async goBacktoPublicationDetails() { this.closeDesktopComponent(); this.desktopComponent.showPublicationDetail = true; } // add new publication or edit publicaton async addNewPublication({ publicationType, folderId, publication }) { this.closeDesktopComponent(); // propr to add new publication this.publicationType = publicationType; // edit publication will send null if (folderId != undefined) { this.folderId = folderId; this.idSelected = this.folderId; } this.publication = publication; this.documentId = publication?.DocumentId this.desktopComponent.showAddNewPublication = true; } async editPublication(foolderId: string) { this.closeDesktopComponent(); this.idSelected = this.folderId; this.desktopComponent.showEditActions = true; } async openPublicationDetails({DocumentId, ProcessId}) { this.publicationId = DocumentId; this.closeDesktopComponent(); this.idSelected = this.folderId; this.desktopComponent.showPublicationDetail = true; } async updateDesktopComponent(e?: any) { this.getActions(); } async closeDesktopComponent(xx?: any) { this.desktopComponent = { showViewPublication: false, showAddNewPublication: false, showPublicationDetail: false, showAddActions: false, showEditActions: false, } setTimeout(()=>{ if(this.desktopComponent.showViewPublication == false && this.desktopComponent.showAddNewPublication == false && this.desktopComponent.showPublicationDetail == false && this.desktopComponent.showAddActions == false && this.desktopComponent.showEditActions == false) { this.idSelected = ""; } }, 10) } async openOptions(id?: string) { this.folderId = id; const enterAnimation = (baseEl: any) => { const backdropAnimation = this.animationController.create() .addElement(baseEl.querySelector('ion-backdrop')!) .fromTo('opacity', '0.01', 'var(--backdrop-opacity)'); const wrapperAnimation = this.animationController.create() .addElement(baseEl.querySelector('.modal-wrapper')!) .keyframes([ { offset: 0, opacity: '1', right: '-100%' }, { offset: 1, opacity: '1', right: '0px' } ]); return this.animationController.create() .addElement(baseEl) .easing('ease-out') .duration(500) .addAnimation([backdropAnimation, wrapperAnimation]); } const leaveAnimation = (baseEl: any) => { return enterAnimation(baseEl).direction('reverse'); } const modal = await this.modalController.create({ enterAnimation, leaveAnimation, component: ActionsOptionsPage, cssClass: 'model profile-modal search-submodal', componentProps: { id: id, }, //translucent: true }); modal.onDidDismiss().then(res => { if (res['data'] == 'edit') { this.closeDesktopComponent(); this.desktopComponent.showEditActions = true; } else if (res['data'] == 'delete') { setTimeout(() => { this.getActions(); }, 1000) this.closeDesktopComponent() } }); await modal.present(); } }