mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
543 lines
15 KiB
TypeScript
543 lines
15 KiB
TypeScript
import { Component, OnInit } from '@angular/core';
|
|
import { Router, NavigationEnd } from '@angular/router';
|
|
import { ModalController, Platform } 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 { SqliteService } from 'src/app/services/sqlite.service';
|
|
import { BackgroundService } from 'src/app/services/background.service';
|
|
import { ThemeService } from 'src/app/services/theme.service'
|
|
import { Storage } from '@ionic/storage';
|
|
import { PermissionService } from 'src/app/services/permission.service';
|
|
|
|
|
|
@Component({
|
|
selector: 'app-publications',
|
|
templateUrl: './publications.page.html',
|
|
styleUrls: ['./publications.page.scss'],
|
|
})
|
|
export class PublicationsPage implements OnInit {
|
|
showLoader: boolean;
|
|
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;
|
|
// data set from child component
|
|
publicationType: any;
|
|
publicationId: string;
|
|
|
|
// from publication details
|
|
//publication: object;
|
|
hideRefreshBtn = true;
|
|
showSlidingOptions = true;
|
|
idSelected: string;
|
|
skeletonLoader: boolean;
|
|
|
|
constructor(
|
|
private router: Router,
|
|
private modalController: ModalController,
|
|
private animationController: AnimationController,
|
|
private publications: PublicationsService,
|
|
private toastService: ToastService,
|
|
private sqliteservice: SqliteService,
|
|
private backgroundservice: BackgroundService,
|
|
private platform: Platform,
|
|
public ThemeService: ThemeService,
|
|
private storage: Storage,
|
|
public p: PermissionService,
|
|
|
|
) {
|
|
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"];
|
|
this.skeletonLoader = true;
|
|
}
|
|
|
|
ngOnInit() {
|
|
|
|
const pathname = window.location.pathname
|
|
|
|
this.router.events.forEach((event) => {
|
|
if (event instanceof NavigationEnd && event.url == pathname) {
|
|
this.getActions();
|
|
|
|
|
|
}
|
|
});
|
|
this.hideRefreshButton();
|
|
|
|
/* this.backgroundservice.registerBackService('Online', () => {
|
|
this.getActions();
|
|
}) */
|
|
|
|
}
|
|
|
|
|
|
|
|
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(() => {
|
|
event.target.complete();
|
|
}, 250);
|
|
}
|
|
|
|
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.skeletonLoader = true;
|
|
this.getFromDB()
|
|
this.publications.GetPublicationFolderList().subscribe(async res => {
|
|
|
|
|
|
|
|
let publicationsEventFolderList = new Array();
|
|
let publicationsTravelFolderList = new Array();
|
|
|
|
res.forEach(data => {
|
|
let folder: PublicationFolder = {
|
|
ProcessId: data.ProcessId,
|
|
Description: data.Description,
|
|
Detail: data.Detail,
|
|
DateBegin: data.DateBegin,
|
|
DateEnd: data.DateEnd,
|
|
ActionType: data.ActionType,
|
|
}
|
|
|
|
this.addActionToDB(folder)
|
|
|
|
if (data.ActionType == "Evento") {
|
|
|
|
publicationsEventFolderList.push(folder);
|
|
}
|
|
else {
|
|
|
|
publicationsTravelFolderList.push(folder);
|
|
}
|
|
|
|
|
|
});
|
|
|
|
if (this.platform.is('desktop') || this.platform.is('mobileweb')) {
|
|
await this.storage.set('actionsEvents', publicationsEventFolderList);
|
|
await this.storage.set('actionsViagens', publicationsTravelFolderList);
|
|
this.getFromDB()
|
|
} else {
|
|
this.getFromDB()
|
|
}
|
|
|
|
this.showLoader = false;
|
|
|
|
}/* , (error) => {
|
|
this.getFromDB();
|
|
} */);
|
|
this.skeletonLoader = false;
|
|
}
|
|
|
|
addActionToStorage(events, viagens) {
|
|
|
|
if (this.platform.is('desktop') || this.platform.is('mobileweb')) {
|
|
this.storage.set('actionsEvents', events);
|
|
this.storage.set('actionsViagens', viagens);
|
|
}
|
|
}
|
|
|
|
|
|
addActionToDB(folder) {
|
|
if (this.platform.is('desktop') || this.platform.is('mobileweb')) {
|
|
} else {
|
|
this.sqliteservice.addactions(folder);
|
|
}
|
|
}
|
|
|
|
getFromDB() {
|
|
|
|
if (this.platform.is('desktop') || this.platform.is('mobileweb')) {
|
|
this.publicationsEventFolderList = new Array();
|
|
this.publicationsTravelFolderList = new Array();
|
|
this.storage.get('actionsEvents').then((events = []) => {
|
|
|
|
if(Array.isArray(events)) {
|
|
events.forEach(data => {
|
|
let folder: PublicationFolder = {
|
|
ProcessId: data.ProcessId,
|
|
Description: data.Description,
|
|
Detail: data.Detail,
|
|
DateBegin: data.DateBegin,
|
|
DateEnd: data.DateEnd,
|
|
ActionType: data.ActionType,
|
|
}
|
|
|
|
this.publicationsEventFolderList.push(folder);
|
|
this.showLoader = false;
|
|
});
|
|
}
|
|
|
|
});
|
|
this.storage.get('actionsViagens').then((viagens = []) => {
|
|
|
|
if(Array.isArray(viagens)) {
|
|
viagens.forEach(data => {
|
|
let folder: PublicationFolder = {
|
|
ProcessId: data.ProcessId,
|
|
Description: data.Description,
|
|
Detail: data.Detail,
|
|
DateBegin: data.DateBegin,
|
|
DateEnd: data.DateEnd,
|
|
ActionType: data.ActionType,
|
|
}
|
|
|
|
this.publicationsTravelFolderList.push(folder);
|
|
this.showLoader = false;
|
|
});
|
|
}
|
|
|
|
});
|
|
} else {
|
|
this.sqliteservice.getAllActions().then((actions: any[]) => {
|
|
|
|
|
|
|
|
this.publicationsEventFolderList = new Array();
|
|
this.publicationsTravelFolderList = new Array();
|
|
|
|
actions.forEach(data => {
|
|
let folder: PublicationFolder = {
|
|
ProcessId: data.ProcessId,
|
|
Description: data.Description,
|
|
Detail: data.Detail,
|
|
DateBegin: data.DateBegin,
|
|
DateEnd: data.DateEnd,
|
|
ActionType: data.ActionType,
|
|
}
|
|
|
|
if (data.ActionType == "Evento") {
|
|
this.publicationsEventFolderList.push(folder);
|
|
}
|
|
else {
|
|
this.publicationsTravelFolderList.push(folder);
|
|
}
|
|
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
|
|
});
|
|
await modal.present();
|
|
modal.onDidDismiss().then(() => {
|
|
this.getActions();
|
|
});
|
|
//this.refreshing()
|
|
}
|
|
|
|
async deleteAction(id?: string) {
|
|
const loader = this.toastService.loading();
|
|
try {
|
|
await this.publications.DeletePresidentialAction(id).toPromise();
|
|
this.toastService._successMessage()
|
|
} catch (e) {
|
|
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
|
|
});
|
|
await modal.present();
|
|
modal.onDidDismiss().then(() => {
|
|
this.getActions();
|
|
});
|
|
} else {
|
|
this.desktopComponent.showAddActions = true;
|
|
}
|
|
|
|
}
|
|
|
|
goToPublicationsList(folderId: string) {
|
|
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
|
|
});
|
|
await modal.present();
|
|
modal.onDidDismiss();
|
|
|
|
} 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.desktopComponent.showAddNewPublication = true;
|
|
}
|
|
|
|
async editPublication(foolderId: string) {
|
|
this.closeDesktopComponent();
|
|
this.idSelected = this.folderId;
|
|
this.desktopComponent.showEditActions = true;
|
|
}
|
|
|
|
async openPublicationDetails(publicationId: string) {
|
|
|
|
this.publicationId = publicationId;
|
|
|
|
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
|
|
});
|
|
await modal.present();
|
|
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()
|
|
}
|
|
});
|
|
}
|
|
|
|
}
|