mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
Last git pull made
This commit is contained in:
+1
-7
@@ -186,13 +186,7 @@
|
||||
"cordova-plugin-ionic-webview": {},
|
||||
"cordova-plugin-screen-orientation": {},
|
||||
"cordova-plugin-network-information": {},
|
||||
"cordova-plugin-camera": {
|
||||
"ANDROID_SUPPORT_V4_VERSION": "27.+"
|
||||
},
|
||||
"cordova-plugin-media": {
|
||||
"KEEP_AVAUDIOSESSION_ALWAYS_ACTIVE": "NO"
|
||||
},
|
||||
"uk.co.workingedge.cordova.plugin.sqliteporter": {}
|
||||
"cordova-plugin-camera": {}
|
||||
},
|
||||
"platforms": [
|
||||
"browser",
|
||||
|
||||
@@ -195,6 +195,10 @@ const routes = [
|
||||
{
|
||||
path: 'document-viewer',
|
||||
loadChildren: () => import('./modals/document-viewer/document-viewer.module').then( m => m.DocumentViewerPageModule)
|
||||
},
|
||||
{
|
||||
path: 'view-document',
|
||||
loadChildren: () => import('./modals/view-document/view-document.module').then( m => m.ViewDocumentPageModule)
|
||||
},
|
||||
|
||||
|
||||
|
||||
@@ -193,8 +193,8 @@ export class HomePage implements OnInit {
|
||||
})
|
||||
|
||||
|
||||
synchro.registerCallback('Offline', () => {
|
||||
console.log('Offlineee')
|
||||
synchro.registerCallback('Offline',()=>{
|
||||
|
||||
})
|
||||
|
||||
synchro.conected
|
||||
@@ -203,7 +203,7 @@ export class HomePage implements OnInit {
|
||||
|
||||
this.webNotificationPopupService.sendNotification(DataArray)
|
||||
|
||||
this.storageService.get('Notifications').then((data: any) => {
|
||||
this.storageService.get('Notifications').then((data:any)=>{
|
||||
data.push(DataArray)
|
||||
this.storageService.store("Notifications", data)
|
||||
}).catch(() => {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="buttons">
|
||||
<button (click)="takePicture()" full class="btn-cancel hide-desktop" shape="round" >Tirar Fotografia</button>
|
||||
<button (click)="addPicture()" full class="btn-cancel" shape="round" >Anexar Fotografia</button>
|
||||
<button hidden (click)="addDocument()" class="btn-cancel" shape="round" >Documento</button>
|
||||
<button (click)="addDocument()" class="btn-cancel" shape="round" >Documento</button>
|
||||
<button (click)="addDocGestaoDocumental()" class="btn-cancel" shape="round" >Anexar Documento (G.D.)</button>
|
||||
<div class="solid"></div>
|
||||
<button (click)="bookMeeting()" class="btn-cancel" shape="round" >Novo Evento</button>
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
<ion-content class="pt-10 height-100">
|
||||
|
||||
<div *ngIf="pdfSrc" class="height-100">
|
||||
<iframe id="iframe" src="https://equilibrium.dyndns.info/FileShare/pdfjs/web/viewer.html?file=https://equilibrium.dyndns.info/FileShare/merged_fastview.pdf" height="100%" width="100%" title="Iframe Example"></iframe>
|
||||
<iframe id="iframe" src="https://equilibrium.dyndns.info/FileShare/pdfjs/web/viewer.html?file=https://equilibrium.dyndns.info/FileShare/merged_fastview.pdf&caches=12321231231f23123" height="100%" width="100%" title="Iframe Example"></iframe>
|
||||
</div>
|
||||
|
||||
</ion-content>
|
||||
|
||||
@@ -1,14 +1,3 @@
|
||||
ion-content {
|
||||
background-color: #ececec;
|
||||
}
|
||||
|
||||
.ng2-pdf-viewer-container {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
#pdf-container {
|
||||
canvas {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import { ProcessesService } from 'src/app/services/processes.service';
|
||||
})
|
||||
export class DocumentViewerPage implements OnInit {
|
||||
|
||||
pdfSrc = 'http://laptop-46/FileShare/Test_25MB.pdf';
|
||||
pdfSrc = null;
|
||||
task = null
|
||||
DocId = null
|
||||
fileName = ''
|
||||
@@ -24,10 +24,7 @@ export class DocumentViewerPage implements OnInit {
|
||||
this.task = this.navParams.get('task') || null;
|
||||
this.DocId = this.navParams.get('DocId');
|
||||
|
||||
if(this.navParams.get('pdfSrc')) {
|
||||
this.pdfSrc = this.navParams.get('pdfSrc') || null;
|
||||
}
|
||||
|
||||
this.pdfSrc = 'https://equilibrium.dyndns.info/FileShare/pdfjs/web/viewer.html?file='
|
||||
|
||||
}
|
||||
|
||||
@@ -41,169 +38,6 @@ export class DocumentViewerPage implements OnInit {
|
||||
|
||||
})
|
||||
|
||||
// this.setPdfViewer()
|
||||
|
||||
|
||||
// setTimeout(() => {
|
||||
|
||||
// document.getElementById('iframe')['contentWindow'].postMessage(
|
||||
// {
|
||||
// sender: "get_page_button1",
|
||||
// message: 'url'
|
||||
// }, "*")
|
||||
|
||||
// }, 3000)
|
||||
|
||||
}
|
||||
|
||||
|
||||
setPdfViewer() {
|
||||
setTimeout( async () => {
|
||||
|
||||
// If absolute URL from the remote server is provided, configure the CORS
|
||||
// header on that server.
|
||||
var url = 'http://192.168.0.87:3000/000634977.pdf';
|
||||
|
||||
const pdfjsWorker = await import('pdfjs-dist/build/pdf.worker.entry');
|
||||
// Loaded via <script> tag, create shortcut to access PDF.js exports.
|
||||
var pdfjsLib = await import('pdfjs-dist/build/pdf');
|
||||
|
||||
// The workerSrc property shall be specified.
|
||||
// pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorker;
|
||||
|
||||
var pdfDoc = null,
|
||||
pageNum = 1,
|
||||
pageRendering = false,
|
||||
pageNumPending = null,
|
||||
scale = 0.8,
|
||||
canvas: any = document.getElementById('the-canvas'),
|
||||
ctx = canvas.getContext('2d');
|
||||
|
||||
/**
|
||||
* Get page info from document, resize canvas accordingly, and render page.
|
||||
* @param num Page number.
|
||||
*/
|
||||
function renderPage(num) {
|
||||
pageRendering = true;
|
||||
// Using promise to fetch the page
|
||||
pdfDoc.getPage(num).then(function(page) {
|
||||
var viewport = page.getViewport({scale: scale});
|
||||
canvas.height = viewport.height;
|
||||
canvas.width = viewport.width;
|
||||
|
||||
// Render PDF page into canvas context
|
||||
var renderContext = {
|
||||
canvasContext: ctx,
|
||||
viewport: viewport
|
||||
};
|
||||
var renderTask = page.render(renderContext);
|
||||
|
||||
// Wait for rendering to finish
|
||||
renderTask.promise.then(function() {
|
||||
pageRendering = false;
|
||||
if (pageNumPending !== null) {
|
||||
// New page rendering is pending
|
||||
renderPage(pageNumPending);
|
||||
pageNumPending = null;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Update page counters
|
||||
// document.getElementById('page_num').textContent = num;
|
||||
}
|
||||
|
||||
/**
|
||||
* If another page rendering in progress, waits until the rendering is
|
||||
* finised. Otherwise, executes rendering immediately.
|
||||
*/
|
||||
function queueRenderPage(num) {
|
||||
if (pageRendering) {
|
||||
pageNumPending = num;
|
||||
} else {
|
||||
renderPage(num);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays previous page.
|
||||
*/
|
||||
function onPrevPage() {
|
||||
if (pageNum <= 1) {
|
||||
return;
|
||||
}
|
||||
pageNum--;
|
||||
queueRenderPage(pageNum);
|
||||
}
|
||||
|
||||
document.getElementById('prev').addEventListener('click', onPrevPage);
|
||||
|
||||
/**
|
||||
* Displays next page.
|
||||
*/
|
||||
function onNextPage() {
|
||||
if (pageNum >= pdfDoc.numPages) {
|
||||
return;
|
||||
}
|
||||
pageNum++;
|
||||
queueRenderPage(pageNum);
|
||||
}
|
||||
|
||||
document.getElementById('next').addEventListener('click', onNextPage);
|
||||
|
||||
var currPage = 1; //Pages are 1-based not 0-based
|
||||
var numPages = 0;
|
||||
var thePDF = null;
|
||||
|
||||
|
||||
function handlePages(page)
|
||||
{
|
||||
//This gives us the page's dimensions at full scale
|
||||
var viewport = page.getViewport( 1 );
|
||||
|
||||
//We'll create a canvas for each page to draw it on
|
||||
var canvas = document.createElement( "canvas" );
|
||||
canvas.style.display = "block";
|
||||
var context = canvas.getContext('2d');
|
||||
canvas.height = viewport.height;
|
||||
canvas.width = viewport.width;
|
||||
|
||||
//Draw it on the canvas
|
||||
page.render({canvasContext: context, viewport: viewport});
|
||||
|
||||
//Add it to the web page
|
||||
document.querySelector('#pdf-container').appendChild( canvas );
|
||||
|
||||
//Move to next page
|
||||
currPage++;
|
||||
if ( thePDF !== null && currPage <= numPages )
|
||||
{
|
||||
thePDF.getPage( currPage ).then( handlePages );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Asynchronously downloads PDF.
|
||||
*/
|
||||
pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
|
||||
|
||||
pdfDoc = pdfDoc_;
|
||||
thePDF = pdfDoc_
|
||||
|
||||
pdfDoc.getPage(1).then(function(page) {
|
||||
// you can now use *page* here
|
||||
// alert('first page')
|
||||
});
|
||||
|
||||
// Initial/first page rendering
|
||||
renderPage(pageNum);
|
||||
|
||||
numPages = pdfDoc.numPages;
|
||||
pdfDoc.getPage( 1 ).then( handlePages );
|
||||
});
|
||||
|
||||
}, 100)
|
||||
}
|
||||
|
||||
close() {
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
</div>
|
||||
|
||||
</ion-col>
|
||||
<ion-col class="align-center d-flex">
|
||||
<ion-col hidden class="align-center d-flex">
|
||||
<div (click)="addFingerprint()" class="d-flex align-center">
|
||||
<ion-checkbox class="checkBox" [checked]="false"></ion-checkbox>
|
||||
Impressão Digital
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { Routes, RouterModule } from '@angular/router';
|
||||
|
||||
import { ViewDocumentPage } from './view-document.page';
|
||||
|
||||
const routes: Routes = [
|
||||
{
|
||||
path: '',
|
||||
component: ViewDocumentPage
|
||||
}
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forChild(routes)],
|
||||
exports: [RouterModule],
|
||||
})
|
||||
export class ViewDocumentPageRoutingModule {}
|
||||
@@ -0,0 +1,22 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
|
||||
import { IonicModule } from '@ionic/angular';
|
||||
|
||||
import { ViewDocumentPageRoutingModule } from './view-document-routing.module';
|
||||
|
||||
import { ViewDocumentPage } from './view-document.page';
|
||||
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule,
|
||||
FormsModule,
|
||||
IonicModule,
|
||||
FontAwesomeModule,
|
||||
ViewDocumentPageRoutingModule
|
||||
],
|
||||
declarations: [ViewDocumentPage]
|
||||
})
|
||||
export class ViewDocumentPageModule {}
|
||||
@@ -0,0 +1,25 @@
|
||||
<ion-header class="ion-no-border">
|
||||
<ion-toolbar class="d-flex">
|
||||
<div class="d-flex align-items-center px-20 pt-20 font-25">
|
||||
<div class="left cursor-pointer" (click)="close()">
|
||||
<!-- <ion-icon class="font-35" src="assets/images/icons-arrow-arrow-left.svg"></ion-icon> -->
|
||||
<fa-icon icon="chevron-left" class="menu-icon"></fa-icon>
|
||||
</div>
|
||||
|
||||
<div class="middle">
|
||||
{{file.title}}
|
||||
</div>
|
||||
|
||||
<div class="right cursor-pointer">
|
||||
<fa-icon icon="ellipsis-v" class="menu-icon"></fa-icon>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</ion-toolbar>
|
||||
</ion-header>
|
||||
|
||||
<ion-content class="pt-10 height-100">
|
||||
<div class="height-100">
|
||||
<iframe id="iframe" [src]="trustedUrl" height="100%" width="100%" title="Iframe Example"></iframe>
|
||||
</div>
|
||||
</ion-content>
|
||||
@@ -0,0 +1,11 @@
|
||||
.left{
|
||||
float: left;
|
||||
}
|
||||
.middle{
|
||||
float: left;
|
||||
padding-left: 5px !important;
|
||||
}
|
||||
.right{
|
||||
float: right;
|
||||
margin-left: auto;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
||||
import { IonicModule } from '@ionic/angular';
|
||||
|
||||
import { ViewDocumentPage } from './view-document.page';
|
||||
|
||||
describe('ViewDocumentPage', () => {
|
||||
let component: ViewDocumentPage;
|
||||
let fixture: ComponentFixture<ViewDocumentPage>;
|
||||
|
||||
beforeEach(waitForAsync(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ ViewDocumentPage ],
|
||||
imports: [IonicModule.forRoot()]
|
||||
}).compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(ViewDocumentPage);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
}));
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,40 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { DomSanitizer } from '@angular/platform-browser';
|
||||
import { ModalController, NavParams } from '@ionic/angular';
|
||||
|
||||
@Component({
|
||||
selector: 'app-view-document',
|
||||
templateUrl: './view-document.page.html',
|
||||
styleUrls: ['./view-document.page.scss'],
|
||||
})
|
||||
export class ViewDocumentPage implements OnInit {
|
||||
|
||||
url: string;
|
||||
a:string = "https://equilibrium.dyndns.info/FileShare/pdfjs/web/viewer.html?file=";
|
||||
viewerUrl: string;
|
||||
trustedUrl: any;
|
||||
file:any;
|
||||
|
||||
constructor(
|
||||
private modalController: ModalController,
|
||||
private navParams: NavParams,
|
||||
private sanitazer: DomSanitizer,
|
||||
) {
|
||||
|
||||
this.file = this.navParams.get('file');
|
||||
this.url = this.file.title_link;
|
||||
console.log(this.url);
|
||||
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.viewerUrl = this.url.replace("webTRIX.Viewer.Branch1/pdfjs/web/viewpdf.aspx?file=/webTRIX.Viewer.Branch1/arq/637690403731947760.pdf&i", "FileShare/pdfjs/web/viewer.html?file");
|
||||
this.trustedUrl = this.sanitazer.bypassSecurityTrustResourceUrl(this.viewerUrl);
|
||||
console.log(this.trustedUrl);
|
||||
}
|
||||
|
||||
close() {
|
||||
this.modalController.dismiss();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,7 +8,7 @@ import { AlertService } from 'src/app/services/alert.service';
|
||||
import { momentG } from 'src/plugin/momentG';
|
||||
import { DomSanitizer } from "@angular/platform-browser";
|
||||
import { EventPerson } from 'src/app/models/eventperson.model';
|
||||
import { removeDuplicate } from 'src/plugin/removeDuplicate.js'
|
||||
import { removeDuplicate } from 'src/plugin/removeDuplicate.js';
|
||||
|
||||
// showTimeline
|
||||
import { setHours, setMinutes } from 'date-fns';
|
||||
@@ -547,9 +547,6 @@ export class AgendaPage implements OnInit {
|
||||
this.eventService.getAllPrEvents(momentG(new Date(startTime),'yyyy-MM-dd HH:mm:ss'), momentG(new Date(endTime),'yyyy-MM-dd 23:59:59')).then(
|
||||
(response:any) => {
|
||||
|
||||
// calendar
|
||||
// this.eventSource=[];
|
||||
|
||||
// clear the current month only
|
||||
this.CalendarStore.removeRange(startTime, endTime, 'pr')
|
||||
|
||||
@@ -605,6 +602,8 @@ export class AgendaPage implements OnInit {
|
||||
this.CalendarStore.pushEvent(eventsList, 'pr');
|
||||
|
||||
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
this.TimelinePRList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
|
||||
|
||||
this.myCal.update();
|
||||
this.myCal.loadEvents();
|
||||
@@ -656,6 +655,8 @@ export class AgendaPage implements OnInit {
|
||||
|
||||
|
||||
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
this.TimelinePRList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
|
||||
|
||||
this.myCal.update();
|
||||
this.myCal.loadEvents();
|
||||
@@ -780,8 +781,56 @@ export class AgendaPage implements OnInit {
|
||||
|
||||
updateEventListBox() {
|
||||
|
||||
this.TimelinePRList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'md', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
|
||||
if(window.innerWidth < 800){
|
||||
|
||||
switch (this.segment) {
|
||||
case "Combinado":
|
||||
|
||||
if(this.profile == "mdgpr" && this.loggeduser.Profile == 'MDGPR' ) {
|
||||
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'md', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
|
||||
}
|
||||
else if(this.profile == "pr" && this.loggeduser.Profile == 'MDGPR') {
|
||||
|
||||
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
|
||||
}
|
||||
else if(this.loggeduser.Profile == 'PR') {
|
||||
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
}
|
||||
break;
|
||||
|
||||
case "Pessoal":
|
||||
//Inicializa o array eventSource
|
||||
if(this.profile == "mdgpr" && this.loggeduser.Profile == 'MDGPR') {
|
||||
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'md', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
|
||||
}
|
||||
else{
|
||||
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
this.TimelinePRList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
}
|
||||
break;
|
||||
|
||||
case "Oficial":
|
||||
|
||||
if(this.profile == "mdgpr" && this.loggeduser.Profile == 'MDGPR') {
|
||||
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'md', this.rangeStartDate, this.rangeEndDate, {})
|
||||
|
||||
} else {
|
||||
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
this.TimelinePRList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
} else {
|
||||
this.TimelinePRList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'md', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -172,6 +172,9 @@ export class ViewEventPage implements OnInit {
|
||||
}
|
||||
|
||||
deleteEvent(){
|
||||
|
||||
const loader = this.toastService.loading()
|
||||
|
||||
this.eventsService.deleteEvent(this.loadedEvent.EventId, 0, this.loadedEvent.CalendarName).subscribe(async () =>
|
||||
{
|
||||
const alert = await this.alertController.create({
|
||||
@@ -185,6 +188,9 @@ export class ViewEventPage implements OnInit {
|
||||
}, 1500);
|
||||
this.goBack();
|
||||
this.toastService.successMessage('Evento apagado');
|
||||
}, ()=>{},
|
||||
()=>{
|
||||
loader.remove();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@ ion-content{
|
||||
|
||||
.aside-wrapper{
|
||||
margin: 0 !important;
|
||||
overflow: auto;
|
||||
|
||||
.title-content{
|
||||
padding: 30px 20px 0 20px !important;
|
||||
@@ -52,6 +53,7 @@ ion-content{
|
||||
|
||||
.aside{
|
||||
padding: 0 !important;
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -66,10 +66,11 @@
|
||||
<div>
|
||||
<div class="file">
|
||||
<!-- <canvas id="pdf_canvas"></canvas> -->
|
||||
<div class="file-details add-ellipsis" *ngIf="msg.file">
|
||||
<span (click)="viewDocument(file.title_link)" class="cursor-pointer">
|
||||
<div (click)="viewDocument(file)" class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
|
||||
<span *ngIf="msg.file.type">
|
||||
<fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon>
|
||||
<fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon>
|
||||
<fa-icon *ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" icon="file-word" class="excel-icon"></fa-icon>
|
||||
<ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg"></ion-icon>
|
||||
</span>
|
||||
<ion-label class="file-title">{{file.title}}</ion-label>
|
||||
@@ -118,29 +119,6 @@
|
||||
</ion-fab>
|
||||
|
||||
</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">
|
||||
<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> -->
|
||||
|
||||
<ion-footer>
|
||||
<div class="container width-100 d-flex">
|
||||
|
||||
@@ -18,6 +18,7 @@ import { ToastService } from 'src/app/services/toast.service';
|
||||
import { environment } from 'src/environments/environment';
|
||||
import { NewEventPage } from '../../agenda/new-event/new-event.page';
|
||||
import { EventPerson } from 'src/app/models/eventperson.model';
|
||||
import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page';
|
||||
|
||||
@Component({
|
||||
selector: 'app-group-messages',
|
||||
@@ -364,8 +365,28 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
||||
};
|
||||
}
|
||||
|
||||
viewDocument(url:string){
|
||||
this.fileService.viewDocumentByUrl(url);
|
||||
viewDocument(file:any){
|
||||
if(file.type == "file"){
|
||||
let fullUrl = "https://www.tabularium.pt" + file.title_link;
|
||||
this.fileService.viewDocumentByUrl(fullUrl);
|
||||
}
|
||||
else{
|
||||
this.fileService.viewDocumentByUrl(file.title_link);
|
||||
//this.openViewDocumentModal(file);
|
||||
}
|
||||
}
|
||||
|
||||
async openViewDocumentModal(file:any){
|
||||
const modal = await this.modalController.create({
|
||||
component: ViewDocumentPage,
|
||||
componentProps: {
|
||||
file: file,
|
||||
},
|
||||
cssClass: 'modal modal-desktop',
|
||||
backdropDismiss: false
|
||||
});
|
||||
await modal.present();
|
||||
modal.onDidDismiss();
|
||||
}
|
||||
|
||||
async bookMeeting() {
|
||||
|
||||
@@ -64,10 +64,11 @@
|
||||
<div>
|
||||
<div class="file">
|
||||
<!-- <canvas id="pdf_canvas"></canvas> -->
|
||||
<div class="file-details add-ellipsis" *ngIf="msg.file">
|
||||
<span (click)="viewDocument(file.title_link)" class="cursor-pointer">
|
||||
<div (click)="viewDocument(file)" class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
|
||||
<span *ngIf="msg.file.type">
|
||||
<fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon>
|
||||
<fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon>
|
||||
<fa-icon *ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" icon="file-word" class="excel-icon"></fa-icon>
|
||||
<ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg"></ion-icon>
|
||||
</span>
|
||||
<ion-label class="file-title">{{file.title}}</ion-label>
|
||||
|
||||
@@ -2,6 +2,7 @@ import { AfterViewChecked, AfterViewInit, Component, ElementRef, OnDestroy, OnIn
|
||||
import {ActivatedRoute, Router} from '@angular/router'
|
||||
import { GestureController, Gesture, ModalController, NavParams, PopoverController } from '@ionic/angular';
|
||||
import { map } from 'rxjs/operators';
|
||||
import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page';
|
||||
import { EventPerson } from 'src/app/models/eventperson.model';
|
||||
import { ContactsPage } from 'src/app/pages/chat/messages/contacts/contacts.page';
|
||||
import { AlertService } from 'src/app/services/alert.service';
|
||||
@@ -273,8 +274,28 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
||||
})
|
||||
}
|
||||
|
||||
viewDocument(url:string){
|
||||
this.fileService.viewDocumentByUrl(url);
|
||||
viewDocument(file:any){
|
||||
if(file.type == "file"){
|
||||
let fullUrl = "https://www.tabularium.pt" + file.title_link;
|
||||
this.fileService.viewDocumentByUrl(fullUrl);
|
||||
}
|
||||
else{
|
||||
this.fileService.viewDocumentByUrl(file.title_link);
|
||||
//this.openViewDocumentModal(file);
|
||||
}
|
||||
}
|
||||
|
||||
async openViewDocumentModal(file:any){
|
||||
const modal = await this.modalController.create({
|
||||
component: ViewDocumentPage,
|
||||
componentProps: {
|
||||
file: file,
|
||||
},
|
||||
cssClass: 'modal modal-desktop',
|
||||
backdropDismiss: false
|
||||
});
|
||||
await modal.present();
|
||||
modal.onDidDismiss();
|
||||
}
|
||||
|
||||
getChatMembers() {
|
||||
|
||||
+1
-13
@@ -359,19 +359,7 @@ export class ExpedienteDetailPage implements OnInit {
|
||||
|
||||
async viewDocument(DocId:string) {
|
||||
|
||||
const modal = await this.modalController.create({
|
||||
component: DocumentViewerPage,
|
||||
cssClass: 'modal-desktop modal',
|
||||
componentProps: {
|
||||
DocId: DocId
|
||||
}
|
||||
});
|
||||
await modal.present();
|
||||
modal.onDidDismiss().then( async (res)=> {
|
||||
});
|
||||
|
||||
|
||||
|
||||
this.expedienteService.viewDocument({ApplicationId:'361', DocId})
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -102,6 +102,8 @@ export class AuthService {
|
||||
console.log('Login to Rocket chat OK');
|
||||
this.ValidatedUserChat = responseChat;
|
||||
localStorage.setItem('userChat', JSON.stringify(responseChat));
|
||||
localStorage.setItem('Meteor.loginToken', JSON.stringify(responseChat['data'].userId));
|
||||
localStorage.setItem('Meteor.userId', JSON.stringify(responseChat['data'].authToken));
|
||||
this.storageService.store(AuthConnstants.AUTH, responseChat);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -49,6 +49,22 @@ export class ChatService {
|
||||
}); */
|
||||
}
|
||||
|
||||
getDocumentDetails(url:string){
|
||||
let headersc = new HttpHeaders();
|
||||
headersc = headersc.set('X-User-Id', this.loggedUserChat['data'].userId);
|
||||
headersc = headersc.set('X-Auth-Token', this.loggedUserChat['data'].authToken);
|
||||
// headersc = headersc.set("Host", "www.tabularium.pt");
|
||||
// headersc = headersc.set("Origin", "http://localhost:8100");
|
||||
// headersc = headersc.set("Referer", "http://localhost:8100/");
|
||||
let optionsc = {
|
||||
headers: headersc,
|
||||
};
|
||||
let fullUrl = "https://www.tabularium.pt/" + url;
|
||||
return this.http.get(fullUrl, optionsc).subscribe(()=>{
|
||||
//this.fileService.viewDocumentByUrl(url)
|
||||
});
|
||||
}
|
||||
|
||||
getAllChannels(){
|
||||
return this.http.get(environment.apiChatUrl+'channels.list', this.options);
|
||||
}
|
||||
@@ -113,6 +129,14 @@ export class ChatService {
|
||||
return this.http.post(environment.apiChatUrl+'chat.sendMessage', body, opts);
|
||||
}
|
||||
|
||||
uploadFile(formData:any, rid:string){
|
||||
let url = environment.apiChatUrl+'rooms.upload/'+rid;
|
||||
let opts = {
|
||||
headers: this.headers,
|
||||
}
|
||||
return this.http.post(url, formData, opts);
|
||||
}
|
||||
|
||||
deleteMessage(body:any){
|
||||
let opts = {
|
||||
headers: this.headers,
|
||||
|
||||
@@ -21,6 +21,8 @@ export class FileService {
|
||||
documents:SearchList[] = [];
|
||||
showLoader: boolean;
|
||||
|
||||
files: Set<File>;
|
||||
|
||||
constructor(
|
||||
private camera: Camera,
|
||||
private fileLoaderService: FileLoaderService,
|
||||
@@ -160,33 +162,12 @@ export class FileService {
|
||||
|
||||
console.log(file);
|
||||
|
||||
const imageData = await this.fileToBase64Service.convert(file)
|
||||
this.capturedImage = imageData;
|
||||
this.capturedImageTitle = file.name;
|
||||
const formData = new FormData();
|
||||
formData.append('file', file, file.name);
|
||||
|
||||
let body = {
|
||||
"message":
|
||||
{
|
||||
"rid": roomId,
|
||||
"msg": "",
|
||||
"attachments": [{
|
||||
"title": this.capturedImageTitle,
|
||||
"text": "",
|
||||
"title_link": this.capturedImage,
|
||||
"title_link_download": true,
|
||||
"thumb_url": "https://static.ichimura.ed.jp/uploads/2017/10/pdf-icon.png",
|
||||
"message_link": this.capturedImage,
|
||||
}],
|
||||
"file":{
|
||||
"name": this.capturedImageTitle,
|
||||
"type": "application/pdf",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.chatService.sendMessage(body).subscribe(res=> {
|
||||
this.chatService.uploadFile(formData, roomId).subscribe(res=> {
|
||||
console.log(res);
|
||||
loader.remove();
|
||||
//console.log(res);
|
||||
},(error) => {
|
||||
loader.remove();
|
||||
});
|
||||
@@ -233,6 +214,7 @@ export class FileService {
|
||||
"title_link_download": true,
|
||||
//"thumb_url": "assets/images/webtrix-logo.png",
|
||||
"message_link": url_no_options,
|
||||
"type": "webtrix"
|
||||
}],
|
||||
"file":{
|
||||
"name": res.data.selected.Assunto,
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
///<reference path="../../../plugins/cordova-plugin-mfp-push/typings/mfppush.d.ts" />
|
||||
import { Injectable, NgZone } from '@angular/core';
|
||||
import { ActivatedRoute } from '@angular/router'
|
||||
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { environment } from 'src/environments/environment';
|
||||
import { StorageService } from 'src/app/services/storage.service';
|
||||
import { AuthConnstants } from 'src/app/config/auth-constants';
|
||||
@@ -11,7 +11,6 @@ import { Token } from '../models/token.model';
|
||||
import { ModalController, AlertController, AnimationController, Platform } from '@ionic/angular';
|
||||
import { NavigationExtras,Router } from '@angular/router';
|
||||
import { ToastService } from '../services/toast.service';
|
||||
import { Optional } from '@angular/core';
|
||||
import { JsonStore } from './jsonStore.service';
|
||||
import { synchro } from './socket/synchro.service';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
@@ -50,7 +50,8 @@ export class SqliteService {
|
||||
Category varchar(255),
|
||||
EventRecurrence Text,
|
||||
Attachments Text,
|
||||
Body Text
|
||||
Body Text,
|
||||
Profile varchar(255)
|
||||
)`, [])
|
||||
.then((res) => {
|
||||
console.log("Sucess Events Table created: ", res)
|
||||
@@ -109,9 +110,9 @@ export class SqliteService {
|
||||
//addEvent
|
||||
public addEvent(data) {
|
||||
this.dbInstance.executeSql(`
|
||||
INSERT OR REPLACE INTO ${this.events} (EventId,Subject,HasAttachments,Location,CalendarId,CalendarName,StartDate,EndDate,EventType,Attendees,IsMeeting,IsRecurring,IsAllDayEvent,AppointmentState,TimeZone,Organizer,Category,EventRecurrence,Attachments,Body )
|
||||
INSERT OR IGNORE INTO ${this.events} (EventId,Subject,HasAttachments,Location,CalendarId,CalendarName,StartDate,EndDate,EventType,Attendees,IsMeeting,IsRecurring,IsAllDayEvent,AppointmentState,TimeZone,Organizer,Category,EventRecurrence,Attachments,Body,Profile )
|
||||
VALUES ('${data.EventId}','${data.Subject}', '${data.HasAttachments}','${data.Location}','${data.CalendarId}','${data.CalendarName}','${data.StartDate}','${data.EndDate}','${data.EventType}','${data.Attendees}','${data.IsMeeting}','${data.IsRecurring}',
|
||||
'${data.IsAllDayEvent}','${data.AppointmentState}','${data.TimeZone}','${data.Organizer}','${data.Category}','${data.EventRecurrence}','${data.Attachments}','${data.Body}')`, [])
|
||||
'${data.IsAllDayEvent}','${data.AppointmentState}','${data.TimeZone}','${data.Organizer}','${data.Category}','${data.EventRecurrence}','${data.Attachments}','${data.Body}','${data.Profile}')`, [])
|
||||
.then(() => {
|
||||
console.log("event add with Success");
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="main-header">
|
||||
<div class="title-content">
|
||||
<div class="middle">
|
||||
<ion-label class="title">Editar Evento</ion-label>
|
||||
<ion-label class="title">Editar Evento aganda</ion-label>
|
||||
</div>
|
||||
</div>
|
||||
<ion-progress-bar class="calendar-progress-bar" type="indeterminate" *ngIf="showLoader"></ion-progress-bar>
|
||||
@@ -13,8 +13,6 @@
|
||||
|
||||
<ion-content>
|
||||
<div class="main-content">
|
||||
|
||||
|
||||
<div class="ion-item-container" [class.input-error]="Form?.get('Subject')?.invalid && validateFrom ">
|
||||
<ion-input placeholder="Assunto*" [(ngModel)]="postEvent.Subject"></ion-input>
|
||||
</div>
|
||||
@@ -284,7 +282,7 @@
|
||||
</ion-label>
|
||||
</div>
|
||||
|
||||
<div class="d-flex container-div width-100" *ngFor="let document of postEvent.Attachments; let i = index" >
|
||||
<div class="d-flex container-div width-100" *ngFor="let document of loadedEventAttachments; let i = index" >
|
||||
<ion-list class="width-100 list" *ngIf="!document.remove">
|
||||
<ion-item class="width-100">
|
||||
<ion-label class="width-100">
|
||||
@@ -296,7 +294,6 @@
|
||||
<span class="close-button text-black cursor-pointer" (click)="deleteAttachment(document.Id, i)" >
|
||||
<ion-icon class="font-20" src="assets/images/icons-delete-25.svg"></ion-icon>
|
||||
</span>
|
||||
|
||||
</p>
|
||||
<p><span class="span-left">{{document.Stakeholders}}</span><span class="span-right"> {{document.CreateDate | date: 'dd-MM-yyyy HH:mm'}} </span></p>
|
||||
</ion-label>
|
||||
|
||||
@@ -125,6 +125,8 @@ export class EditEventPage implements OnInit {
|
||||
}
|
||||
|
||||
|
||||
this.loadedEventAttachments = this.loadedEventAttachments.concat(this.postEvent.Attachments)
|
||||
|
||||
this.getRecurrenceTypes();
|
||||
|
||||
this.postEvent.EventRecurrence.Type = this.postEvent.EventRecurrence.Type.toString();
|
||||
@@ -268,15 +270,18 @@ export class EditEventPage implements OnInit {
|
||||
|
||||
this.clearPostEvent.emit();
|
||||
this.deleteTemporaryData();
|
||||
this.close();
|
||||
|
||||
this.saveDocument()
|
||||
await this.saveDocument()
|
||||
|
||||
this.close();
|
||||
}
|
||||
|
||||
|
||||
saveDocument() {
|
||||
async saveDocument() {
|
||||
|
||||
this.loadedEventAttachments.forEach((e)=>{
|
||||
console.log(this.loadedEventAttachments)
|
||||
|
||||
await this.loadedEventAttachments.forEach( async (e)=>{
|
||||
|
||||
const id: any = e.Id
|
||||
const remove = e['remove']
|
||||
@@ -329,8 +334,6 @@ export class EditEventPage implements OnInit {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
saveTemporaryData() {
|
||||
|
||||
window['temp.path:/home/agenda/edit-event.component.ts'] = {
|
||||
@@ -413,7 +416,6 @@ export class EditEventPage implements OnInit {
|
||||
console.log( this.loadedEventAttachments)
|
||||
this.loadedEventAttachments.push(ApplicationIdDocumentToSave)
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
<span class="span-right">{{ attach.CreateDate | date: 'dd-MM-yyyy HH:mm' }}</span>
|
||||
</div>
|
||||
|
||||
<div (click)="docIndex(i);openTaskOptions()" class="doc-options">
|
||||
<div (click)="docIndex(i);LoadDocumentDetails()" class="doc-options">
|
||||
<ion-icon src="assets/images/icons-menu.svg" ></ion-icon>
|
||||
</div>
|
||||
|
||||
@@ -100,8 +100,7 @@
|
||||
</li>
|
||||
</ion-list>
|
||||
</div>
|
||||
<!-- <div class="line"></div> -->
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</ion-content>
|
||||
|
||||
@@ -6,9 +6,13 @@ import { EventsService } from 'src/app/services/events.service';
|
||||
import { Event } from 'src/app/models/event.model';
|
||||
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
|
||||
import { ProcessesService } from 'src/app/services/processes.service';
|
||||
import { OptsExpedientePage } from '../../popover/opts-expediente/opts-expediente.page';
|
||||
import { ToastService } from 'src/app/services/toast.service';
|
||||
import { EliminateEventPage } from 'src/app/modals/eliminate-event/eliminate-event.page';
|
||||
import { SearchDocumentDetails, SearchFolderDetails } from 'src/app/models/search-document';
|
||||
import { ExpedientTaskModalPageNavParamsTask } from 'src/app/models/ExpedientTaskModalPage';
|
||||
import { DocumentSetUpMeetingPage } from 'src/app/modals/document-set-up-meeting/document-set-up-meeting.page';
|
||||
import { ExpedientTaskModalPage } from 'src/app/pages/gabinete-digital/expediente/expedient-task-modal/expedient-task-modal.page';
|
||||
import { SearchedDocumentOptionsPage } from '../../popover/searched-document-options/searched-document-options.page';
|
||||
|
||||
@Component({
|
||||
selector: 'app-view-event',
|
||||
@@ -17,14 +21,15 @@ import { EliminateEventPage } from 'src/app/modals/eliminate-event/eliminate-eve
|
||||
})
|
||||
export class ViewEventPage implements OnInit {
|
||||
|
||||
loadedEvent: Event;
|
||||
loadedEvent: any;
|
||||
isEventEdited: boolean;
|
||||
eventBody: EventBody;
|
||||
loadedAttachments:any;
|
||||
pageId: string;
|
||||
showLoader: boolean;
|
||||
|
||||
task: ExpedientTaskModalPageNavParamsTask;
|
||||
minDate: Date;
|
||||
LoadedDocument:any = null;
|
||||
|
||||
customDate:any;
|
||||
today:any;
|
||||
@@ -47,9 +52,8 @@ export class ViewEventPage implements OnInit {
|
||||
private processes: ProcessesService,
|
||||
private modalController: ModalController,
|
||||
public popoverController: PopoverController,
|
||||
private toastService: ToastService,
|
||||
)
|
||||
{
|
||||
private toastService: ToastService
|
||||
) {
|
||||
this.isEventEdited = false;
|
||||
this.loadedEvent = new Event();
|
||||
this.eventBody = { BodyType : "1", Text : ""};
|
||||
@@ -57,19 +61,16 @@ export class ViewEventPage implements OnInit {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
|
||||
/* console.log(this.eventId); */
|
||||
this.loadEvent();
|
||||
//this.getAttachments();
|
||||
}
|
||||
|
||||
doRefresh(ev){
|
||||
doRefresh(ev) {
|
||||
this.loadEvent();
|
||||
ev.target.complete();
|
||||
}
|
||||
|
||||
ngOnChanges(changes: any): void {
|
||||
this.loadedAttachments = null;
|
||||
this.loadedEvent.Attachments = null;
|
||||
this.loadEvent();
|
||||
}
|
||||
|
||||
@@ -100,7 +101,7 @@ export class ViewEventPage implements OnInit {
|
||||
this.customDate = this.days[this.today.getDay()]+ ", " + this.today.getDate() +" de " + ( this.months[this.today.getMonth()]);
|
||||
}, (error)=> {
|
||||
|
||||
console.log('errer', )
|
||||
// console.log('errer', )
|
||||
|
||||
this.viewEventDetailDismiss.emit({
|
||||
type: 'close'
|
||||
@@ -118,12 +119,27 @@ export class ViewEventPage implements OnInit {
|
||||
async deleteEvent() {
|
||||
|
||||
if (this.loadedEvent.IsRecurring) {
|
||||
const loader = this.toastService.loading()
|
||||
|
||||
} else {
|
||||
this.eventsService.deleteEvent(this.loadedEvent.EventId, 0, this.loadedEvent.CalendarName).subscribe(async () => {
|
||||
this.toastService.successMessage('Evento apagado');
|
||||
this.close();
|
||||
},()=>{},
|
||||
()=>{
|
||||
loader.remove();
|
||||
});
|
||||
} else {
|
||||
|
||||
const loader = this.toastService.loading()
|
||||
|
||||
this.eventsService.deleteEvent(this.loadedEvent.EventId, 0, this.loadedEvent.CalendarName).subscribe(async () => {
|
||||
this.toastService.successMessage('Evento apagado');
|
||||
this.close();
|
||||
},()=>{},
|
||||
()=>{
|
||||
loader.remove();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -143,7 +159,6 @@ export class ViewEventPage implements OnInit {
|
||||
|
||||
}
|
||||
|
||||
|
||||
async editEvent() {
|
||||
this.viewEventDetailDismiss.emit({
|
||||
type: 'edit',
|
||||
@@ -161,51 +176,195 @@ export class ViewEventPage implements OnInit {
|
||||
});
|
||||
}
|
||||
|
||||
async LoadDocumentDetails() {
|
||||
|
||||
const docId = this.loadedEvent.Attachments[ this.dicIndex].SourceId
|
||||
const applicationId = this.loadedEvent.Attachments[ this.dicIndex].ApplicationId
|
||||
|
||||
console.log(this.loadedEvent.Attachments[ this.dicIndex])
|
||||
|
||||
this.processes.GetDocumentDetails(docId, applicationId).subscribe( async(res)=> {
|
||||
|
||||
this.LoadedDocument = res;
|
||||
this.LoadedDocument.Subject = this.LoadedDocument.Assunto
|
||||
|
||||
let thedate = new Date(this.LoadedDocument.DateDispatch || this.LoadedDocument.DocDate);
|
||||
|
||||
this.customDate = this.days[thedate.getDay()]+ ", " + thedate.getDate() +" de " + ( this.months[thedate.getMonth()]);
|
||||
|
||||
let task: ExpedientTaskModalPageNavParamsTask
|
||||
let document: SearchDocumentDetails = this.LoadedDocument
|
||||
let folder: SearchFolderDetails = this.LoadedDocument
|
||||
|
||||
if(this.LoadedDocument.ApplicationID == 361 || this.LoadedDocument.ApplicationId == 361) {
|
||||
task = {
|
||||
serialNumber: folder.DispatchNumber,
|
||||
taskStartDate: folder.DateDispatch,
|
||||
isEvent: true,
|
||||
workflowInstanceDataFields: {
|
||||
FolderID: folder['FolderId'] || folder['FolderID'] || folder.folderId,
|
||||
Subject: folder.Assunto,
|
||||
SourceSecFsID: folder.ApplicationID || folder['ApplicationId'],
|
||||
SourceType: 'FOLDER',
|
||||
SourceID: folder.folderId,
|
||||
DispatchNumber: folder.DispatchNumber
|
||||
},
|
||||
}
|
||||
} else if (document.ApplicationID == 8 || document.ApplicationId == 8) {
|
||||
task = {
|
||||
serialNumber: document.DocId,
|
||||
taskStartDate: document.DocDate,
|
||||
isEvent: true,
|
||||
workflowInstanceDataFields: {
|
||||
FolderID: null,
|
||||
Subject: document.Assunto,
|
||||
DispatchNumber: null,
|
||||
SourceSecFsID: document.ApplicationID || document.ApplicationId,
|
||||
SourceType: 'DOC',
|
||||
SourceID: document.DocId,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.log('unexpected ApplicationID')
|
||||
}
|
||||
|
||||
this.task = task
|
||||
console.log('this.task = task', this.task)
|
||||
|
||||
this.task = task
|
||||
|
||||
const popover = await this.popoverController.create({
|
||||
component: SearchedDocumentOptionsPage,
|
||||
cssClass: 'exp-options',
|
||||
componentProps: {
|
||||
task: this.task,
|
||||
LoadedDocument: this.LoadedDocument
|
||||
},
|
||||
translucent: true
|
||||
});
|
||||
await popover.present()
|
||||
|
||||
popover.onDidDismiss().then((res:any) => {
|
||||
if(res.data.component == 'openBookMeetingModal') {
|
||||
this.openBookMeetingModal()
|
||||
} else if(res.data.component == 'openExpedientActionsModal') {
|
||||
this.openExpedientActionsModal(res.data.taskAction)
|
||||
} else {
|
||||
console.log(res.data)
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
async openTaskOptions() {
|
||||
|
||||
const doc = this.loadedAttachments[ this.dicIndex];
|
||||
let task: ExpedientTaskModalPageNavParamsTask
|
||||
let document: SearchDocumentDetails = this.loadedEvent.Attachments[ this.dicIndex];
|
||||
let folder: SearchFolderDetails = this.loadedEvent.Attachments[ this.dicIndex];
|
||||
|
||||
let customTask;
|
||||
|
||||
if(doc.ApplicationID == 361 || doc.ApplicationId == 361) {
|
||||
customTask = {
|
||||
serialNumber: doc.DispatchNumber,
|
||||
taskStartDate: doc.DateDispatch,
|
||||
if(this.loadedEvent.Attachments[this.dicIndex].ApplicationID == 361 || this.loadedEvent.Attachments[this.dicIndex].ApplicationId == 361) {
|
||||
task = {
|
||||
serialNumber: folder.DispatchNumber,
|
||||
taskStartDate: folder.DateDispatch,
|
||||
isEvent: true,
|
||||
workflowInstanceDataFields: {
|
||||
FsId: doc.ApplicationID,
|
||||
FolderID: null,
|
||||
DocId: doc.DispatchNumber,
|
||||
Subject: doc.Assunto
|
||||
FolderID: folder['FolderId'] || folder['FolderID'] || folder.folderId,
|
||||
Subject: folder.Assunto,
|
||||
SourceSecFsID: folder.ApplicationID || folder['ApplicationId'],
|
||||
SourceType: 'FOLDER',
|
||||
SourceID: folder.folderId,
|
||||
DispatchNumber: folder.DispatchNumber
|
||||
},
|
||||
}
|
||||
} else if (doc.ApplicationID == 8 || doc.ApplicationId == 8) {
|
||||
customTask = {
|
||||
serialNumber: doc.DocId,
|
||||
taskStartDate: doc.DocDate,
|
||||
} else if (document.ApplicationID == 8 || document.ApplicationId == 8) {
|
||||
task = {
|
||||
serialNumber: document.DocId,
|
||||
taskStartDate: document.DocDate,
|
||||
isEvent: true,
|
||||
workflowInstanceDataFields: {
|
||||
FsId: doc.ApplicationID || doc.ApplicationId,
|
||||
FolderID: null,
|
||||
DocId: doc.DocId,
|
||||
Subject: doc.Assunto
|
||||
Subject: document.Assunto,
|
||||
DispatchNumber: null,
|
||||
SourceSecFsID: document.ApplicationID || document.ApplicationId,
|
||||
SourceType: 'DOC',
|
||||
SourceID: document.DocId,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(doc)
|
||||
customTask.Status = ''
|
||||
this.task = task
|
||||
|
||||
const popover = await this.modalController.create({
|
||||
component: OptsExpedientePage,
|
||||
cssClass: 'model aside-modal search-submodal',
|
||||
const popover = await this.popoverController.create({
|
||||
component: SearchedDocumentOptionsPage,
|
||||
cssClass: 'exp-options',
|
||||
componentProps: {
|
||||
fulltask: customTask,
|
||||
task: customTask
|
||||
task: this.task,
|
||||
LoadedDocument: this.LoadedDocument
|
||||
},
|
||||
//translucent: true
|
||||
translucent: true
|
||||
});
|
||||
return await popover.present();
|
||||
await popover.present()
|
||||
|
||||
popover.onDidDismiss().then((res:any) => {
|
||||
if(res.data.component == 'openBookMeetingModal') {
|
||||
this.openBookMeetingModal()
|
||||
} else if(res.data.component == 'openExpedientActionsModal') {
|
||||
this.openExpedientActionsModal(res.data.taskAction)
|
||||
} else {
|
||||
console.log(res.data)
|
||||
console.log('component not found')
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
async openBookMeetingModal() {
|
||||
|
||||
let classs;
|
||||
if( window.innerWidth < 701) {
|
||||
classs = 'book-meeting-modal modal modal-desktop'
|
||||
} else {
|
||||
classs = 'modal modal-desktop showAsideOptions'
|
||||
}
|
||||
const modal = await this.modalController.create({
|
||||
component: DocumentSetUpMeetingPage,
|
||||
componentProps: {
|
||||
subject: this.task.workflowInstanceDataFields.Subject,
|
||||
document: this.loadedEvent,
|
||||
},
|
||||
cssClass: classs,
|
||||
backdropDismiss: false
|
||||
});
|
||||
await modal.present();
|
||||
modal.onDidDismiss().then(res=>{
|
||||
//this.location.back();
|
||||
});
|
||||
}
|
||||
|
||||
// efetuar despacho
|
||||
async openExpedientActionsModal( taskAction: any) {
|
||||
|
||||
let classs;
|
||||
if( window.innerWidth < 701) {
|
||||
classs = 'modal modal-desktop'
|
||||
} else {
|
||||
classs = 'modal modal-desktop showAsideOptions'
|
||||
}
|
||||
const modal = await this.modalController.create({
|
||||
component: ExpedientTaskModalPage,
|
||||
componentProps: {
|
||||
taskAction: taskAction,
|
||||
task: this.task,
|
||||
seachDocuments: this.loadedEvent,
|
||||
aplicationId: this.loadedEvent.ApplicationId || this.loadedEvent.ApplicationID
|
||||
},
|
||||
cssClass: classs,
|
||||
});
|
||||
await modal.present();
|
||||
modal.onDidDismiss().then( async(res)=>{});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -59,10 +59,11 @@
|
||||
<div>
|
||||
<div class="file">
|
||||
<!-- <canvas id="pdf_canvas"></canvas> -->
|
||||
<div class="file-details add-ellipsis" *ngIf="msg.file">
|
||||
<span (click)="viewDocument(file.title_link)" class="cursor-pointer">
|
||||
<div (click)="viewDocument(file)" class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
|
||||
<span *ngIf="msg.file.type">
|
||||
<fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon>
|
||||
<fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon>
|
||||
<fa-icon *ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" icon="file-word" class="excel-icon"></fa-icon>
|
||||
<ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg"></ion-icon>
|
||||
</span>
|
||||
<ion-label class="file-title">{{file.title}}</ion-label>
|
||||
@@ -126,9 +127,31 @@
|
||||
<ion-footer>
|
||||
<div class="container width-100 d-flex">
|
||||
<div>
|
||||
<button class="btn-no-color" (click)="openSendGroupMessageOptions()">
|
||||
<!-- <button class="btn-no-color" (click)="openSendGroupMessageOptions()">
|
||||
<ion-icon class="chat-icon-options" src="assets/images/icons-add-new-event.svg"></ion-icon>
|
||||
</button>
|
||||
</button> -->
|
||||
<ion-fab horizontal="start" vertical="bottom" slot="fixed">
|
||||
<ion-fab-button color="light" size="small">
|
||||
<ion-icon name="add"></ion-icon>
|
||||
</ion-fab-button>
|
||||
<ion-fab-list side="top">
|
||||
<ion-fab-button (click)="bookMeeting()" color="light">
|
||||
<ion-icon name="calendar"></ion-icon>
|
||||
</ion-fab-button>
|
||||
<ion-fab-button (click)="addFileWebtrix()" color="light">
|
||||
<ion-icon src="assets/icon/webtrix.svg"></ion-icon>
|
||||
</ion-fab-button>
|
||||
<ion-fab-button (click)="addFile()" color="light">
|
||||
<ion-icon name="document"></ion-icon>
|
||||
</ion-fab-button>
|
||||
<ion-fab-button (click)="addImage()" color="light">
|
||||
<ion-icon name="image"></ion-icon>
|
||||
</ion-fab-button>
|
||||
<ion-fab-button class="hide-desktop" (click)="takePicture()" color="light">
|
||||
<ion-icon name="camera"></ion-icon>
|
||||
</ion-fab-button>
|
||||
</ion-fab-list>
|
||||
</ion-fab>
|
||||
</div>
|
||||
<div class="width-80">
|
||||
<ion-item class="ion-no-padding type-message" lines="none">
|
||||
|
||||
@@ -17,6 +17,7 @@ import { SearchPage } from 'src/app/pages/search/search.page';
|
||||
import { SearchList } from 'src/app/models/search-document';
|
||||
import { ProcessesService } from 'src/app/services/processes.service';
|
||||
import { FileService } from 'src/app/services/functions/file.service';
|
||||
import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page';
|
||||
|
||||
|
||||
/*
|
||||
@@ -89,7 +90,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
||||
|
||||
}
|
||||
ngOnChanges(changes: SimpleChanges): void {
|
||||
//this.getRoomInfo();
|
||||
this.getRoomInfo();
|
||||
//this.scrollToBottom();
|
||||
}
|
||||
|
||||
@@ -607,8 +608,48 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
||||
});
|
||||
}
|
||||
|
||||
viewDocument(url:string){
|
||||
this.fileService.viewDocumentByUrl(url);
|
||||
viewDocument(file:any){
|
||||
if(file.type == "file"){
|
||||
let fullUrl = "https://www.tabularium.pt" + file.title_link;
|
||||
this.fileService.viewDocumentByUrl(fullUrl);
|
||||
}
|
||||
else{
|
||||
this.fileService.viewDocumentByUrl(file.title_link);
|
||||
//this.openViewDocumentModal(file);
|
||||
}
|
||||
}
|
||||
|
||||
async openViewDocumentModal(file:any){
|
||||
const modal = await this.modalController.create({
|
||||
component: ViewDocumentPage,
|
||||
componentProps: {
|
||||
file: file,
|
||||
},
|
||||
cssClass: 'modal modal-desktop',
|
||||
backdropDismiss: false
|
||||
});
|
||||
await modal.present();
|
||||
modal.onDidDismiss();
|
||||
}
|
||||
|
||||
takePicture(){
|
||||
this.fileService.addCameraPictureToChat(this.roomId);
|
||||
}
|
||||
addImage(){
|
||||
this.fileService.addPictureToChat(this.roomId);
|
||||
}
|
||||
addFile(){
|
||||
this.fileService.addDocumentToChat(this.roomId);
|
||||
}
|
||||
addFileWebtrix(){
|
||||
this.fileService.addDocGestaoDocumentalToChat(this.roomId);
|
||||
}
|
||||
bookMeeting(){
|
||||
let data = {
|
||||
roomId: this.roomId,
|
||||
members: this.members
|
||||
}
|
||||
this.openNewEventPage.emit(data);
|
||||
}
|
||||
|
||||
async _openChatOptions() {
|
||||
|
||||
@@ -51,8 +51,8 @@
|
||||
<div>
|
||||
<div class="file">
|
||||
<!-- <canvas id="pdf_canvas"></canvas> -->
|
||||
<div class="file-details add-ellipsis" *ngIf="msg.file">
|
||||
<span *ngIf="msg.file.type" (click)="viewDocument(file.title_link)" class="cursor-pointer">
|
||||
<div (click)="viewDocument(file)" class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
|
||||
<span *ngIf="msg.file.type">
|
||||
<fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon>
|
||||
<fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon>
|
||||
<fa-icon *ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" icon="file-word" class="excel-icon"></fa-icon>
|
||||
@@ -99,9 +99,33 @@
|
||||
<ion-footer>
|
||||
<div class="container width-100 d-flex">
|
||||
<div>
|
||||
<button class="btn-no-color" (click)="openSendMessageOptions()">
|
||||
<!-- <button class="btn-no-color" (click)="openSendMessageOptions()">
|
||||
<ion-icon class="chat-icon-options" src="assets/images/icons-add-new-event.svg"></ion-icon>
|
||||
</button>
|
||||
</button> -->
|
||||
|
||||
<ion-fab horizontal="start" vertical="bottom" slot="fixed">
|
||||
<ion-fab-button color="light" size="small">
|
||||
<ion-icon name="add"></ion-icon>
|
||||
</ion-fab-button>
|
||||
<ion-fab-list side="top">
|
||||
<ion-fab-button (click)="bookMeeting()" color="light">
|
||||
<ion-icon name="calendar"></ion-icon>
|
||||
</ion-fab-button>
|
||||
<ion-fab-button (click)="addFileWebtrix()" color="light">
|
||||
<ion-icon src="assets/icon/webtrix.svg"></ion-icon>
|
||||
</ion-fab-button>
|
||||
<ion-fab-button (click)="addFile()" color="light">
|
||||
<ion-icon name="document"></ion-icon>
|
||||
</ion-fab-button>
|
||||
<ion-fab-button (click)="addImage()" color="light">
|
||||
<ion-icon name="image"></ion-icon>
|
||||
</ion-fab-button>
|
||||
<ion-fab-button class="hide-desktop" (click)="takePicture()" color="light">
|
||||
<ion-icon name="camera"></ion-icon>
|
||||
</ion-fab-button>
|
||||
</ion-fab-list>
|
||||
</ion-fab>
|
||||
|
||||
</div>
|
||||
<div class="width-80">
|
||||
<ion-item class="ion-no-padding type-message" lines="none">
|
||||
|
||||
@@ -14,6 +14,8 @@ import { ChatMessageStore } from 'src/app/store/chat/chat-message.service';
|
||||
import { ChatUserStorage } from 'src/app/store/chat/chat-user.service';
|
||||
import { TimeService } from 'src/app/services/functions/time.service';
|
||||
import { FileService } from 'src/app/services/functions/file.service';
|
||||
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
||||
import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page';
|
||||
|
||||
@Component({
|
||||
selector: 'app-messages',
|
||||
@@ -68,13 +70,14 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
||||
private timeService: TimeService,
|
||||
private fileService: FileService,
|
||||
private gestureController: GestureController,
|
||||
private http:HttpClient,
|
||||
) {
|
||||
this.loggedUser = authService.ValidatedUserChat['data'];
|
||||
|
||||
/* this.dm = this.navParams.get('dm'); */
|
||||
}
|
||||
ngOnChanges(changes: SimpleChanges): void {
|
||||
this.load();
|
||||
//this.load();
|
||||
|
||||
//throw new Error('Method not implemented.');
|
||||
}
|
||||
@@ -239,8 +242,28 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
||||
})
|
||||
}
|
||||
|
||||
viewDocument(url:string){
|
||||
this.fileService.viewDocumentByUrl(url);
|
||||
viewDocument(file:any){
|
||||
if(file.type == "file"){
|
||||
let fullUrl = "https://www.tabularium.pt" + file.title_link;
|
||||
this.fileService.viewDocumentByUrl(fullUrl);
|
||||
}
|
||||
else{
|
||||
this.fileService.viewDocumentByUrl(file.title_link);
|
||||
//this.openViewDocumentModal(file);
|
||||
}
|
||||
}
|
||||
|
||||
async openViewDocumentModal(file:any){
|
||||
const modal = await this.modalController.create({
|
||||
component: ViewDocumentPage,
|
||||
componentProps: {
|
||||
file: file,
|
||||
},
|
||||
cssClass: 'modal modal-desktop',
|
||||
backdropDismiss: false
|
||||
});
|
||||
await modal.present();
|
||||
modal.onDidDismiss();
|
||||
}
|
||||
|
||||
getChatMembers() {
|
||||
@@ -356,6 +379,28 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
||||
|
||||
|
||||
|
||||
takePicture(){
|
||||
this.fileService.addCameraPictureToChat(this.roomId);
|
||||
}
|
||||
addImage(){
|
||||
this.fileService.addPictureToChat(this.roomId);
|
||||
}
|
||||
addFile(){
|
||||
this.fileService.addDocumentToChat(this.roomId);
|
||||
}
|
||||
addFileWebtrix(){
|
||||
this.fileService.addDocGestaoDocumentalToChat(this.roomId);
|
||||
}
|
||||
bookMeeting(){
|
||||
let data = {
|
||||
roomId: this.roomId,
|
||||
members: this.members
|
||||
}
|
||||
this.openNewEventPage.emit(data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
async _openChatOptions() {
|
||||
|
||||
const enterAnimation = (baseEl: any) => {
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<ion-header>
|
||||
<div class="title-content">
|
||||
<div class="middle">
|
||||
<ion-label class="title">Editar evento por aprovar::.</ion-label>
|
||||
<ion-label class="title">Editar evento por aprovar</ion-label>
|
||||
</div>
|
||||
</div>
|
||||
</ion-header>
|
||||
|
||||
@@ -10016,6 +10016,8 @@ function getDocument(src) {
|
||||
|
||||
var docId = task.docId;
|
||||
worker.promise.then(function () {
|
||||
|
||||
|
||||
if (task.destroyed) {
|
||||
throw new Error('Loading aborted');
|
||||
}
|
||||
|
||||
@@ -1175,6 +1175,23 @@ ngx-mat-datetime-content{
|
||||
.powerpoint-icon{
|
||||
color: #d24726;
|
||||
}
|
||||
.menu-icon{
|
||||
color: #42b9fe;
|
||||
padding: 0 5px 0 5px;
|
||||
}
|
||||
|
||||
.fab-list{
|
||||
overflow: auto;
|
||||
|
||||
.fab-list-btn{
|
||||
position: relative;
|
||||
float: left;
|
||||
border: 1px solid blue;
|
||||
}
|
||||
.fab-list-text{
|
||||
border-radius: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 665px) {
|
||||
.loading-blocker {
|
||||
|
||||
+4
-2
@@ -7,6 +7,8 @@
|
||||
|
||||
<base href="/" />
|
||||
|
||||
<!-- <script type="text/javascript" src="node_modules/ibm-mfp-web-sdk/ibmmfpfanalytics.js"></script>
|
||||
<script type="text/javascript" src="node_modules/ibm-mfp-web-sdk/ibmmfpf.js"></script> -->
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.9.359/pdf.min.js" integrity="sha512-U5C477Z8VvmbYAoV4HDq17tf4wG6HXPC6/KM9+0/wEXQQ13gmKY2Zb0Z2vu0VNUWch4GlJ+Tl/dfoLOH4i2msw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
|
||||
<!-- <script src="node_modules/ibm-mfp-web-sdk/ibmmfpf.js"></script>
|
||||
@@ -15,7 +17,7 @@
|
||||
<link rel="manifest" href="assets/manifest.json">
|
||||
<!-- <script src="assets/js/wldirectudpate.js"></script> -->
|
||||
|
||||
<script>
|
||||
<!-- <script>
|
||||
if (navigator.serviceWorker) {
|
||||
navigator.serviceWorker.register("assets/MFPPushServiceWorker.js").then(function(reg) {
|
||||
window.pushReg = reg;
|
||||
@@ -43,7 +45,7 @@
|
||||
} else {
|
||||
console.info("Service workers aren't supported in this browser.");
|
||||
}
|
||||
</script>
|
||||
</script> -->
|
||||
|
||||
<meta name="color-scheme" content="light dark" />
|
||||
<meta name="viewport" content="viewport-fit=cover, width=device-width, height=device-hight, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
|
||||
Reference in New Issue
Block a user