Merge branch 'feature/viewer-attachment' of https://bitbucket.org/equilibriumito/gabinete-digital-fo into feature/viewer-attachment

This commit is contained in:
Eudes Inácio
2024-03-05 09:18:19 +01:00
10 changed files with 126 additions and 181 deletions
+2
View File
@@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.security.application-groups</key> <key>com.apple.security.application-groups</key>
<array> <array>
<string>group.gabinete</string> <string>group.gabinete</string>
+15
View File
@@ -1,6 +1,8 @@
import UIKit import UIKit
import Capacitor import Capacitor
import SendIntent import SendIntent
import FirebaseCore
import Firebase
@UIApplicationMain @UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate { class AppDelegate: UIResponder, UIApplicationDelegate {
@@ -10,8 +12,12 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch. // Override point for customization after application launch.
FirebaseApp.configure()
return true return true
} }
func applicationWillResignActive(_ application: UIApplication) { func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. // Sent when the application is about to move from active to inactive state.
@@ -42,6 +48,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
// Called when the application is about to terminate. // Called when the application is about to terminate.
// Save data if appropriate. See also applicationDidEnterBackground:. // Save data if appropriate. See also applicationDidEnterBackground:.
} }
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
NotificationCenter.default.post(name: .capacitorDidRegisterForRemoteNotifications, object: deviceToken)
Messaging.messaging().apnsToken = deviceToken
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
NotificationCenter.default.post(name: .capacitorDidFailToRegisterForRemoteNotifications, object: error)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
var success = true var success = true
+88 -161
View File
@@ -2,166 +2,93 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>en</string> <string>en</string>
<key>CFBundleDisplayName</key> <key>CFBundleDisplayName</key>
<string>Gabinete Digital</string> <string>Gabinete Digital</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string> <string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string> <string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string> <string>$(MARKETING_VERSION)</string>
<key>CFBundleURLTypes</key> <key>CFBundleURLTypes</key>
<array> <array>
<dict> <dict>
<key>CFBundleTypeRole</key> <key>CFBundleTypeRole</key>
<string>Editor</string> <string>Editor</string>
<key>CFBundleURLName</key> <key>CFBundleURLName</key>
<string>com.gpr.gabinetedigital.teste</string> <string>com.gpr.gabinetedigital.teste</string>
<key>CFBundleURLSchemes</key> <key>CFBundleURLSchemes</key>
<array> <array>
<string>gabinetedigital</string> <string>gabinetedigital</string>
</array> </array>
</dict> </dict>
</array> <dict>
<key>CFBundleVersion</key> <key>CFBundleTypeRole</key>
<string>$(CURRENT_PROJECT_VERSION)</string> <string>Editor</string>
<key>LSApplicationCategoryType</key> <key>CFBundleURLSchemes</key>
<string></string> <array>
<key>LSRequiresIPhoneOS</key> <string>com.googleusercontent.apps.800733765231-5da370m1mntjk7cg8cc2d331sp8cj91d</string>
<true/> </array>
<key>NSCameraUsageDescription</key> </dict>
<string>This app requires access to the camera.</string> </array>
<key>NSMicrophoneUsageDescription</key> <key>CFBundleVersion</key>
<string>This app does not require access to the microphone.</string> <string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPhotoLibraryAddUsageDescription</key> <key>FirebaseAppDelegateProxyEnabled</key>
<string>This app requires access to the photo library.</string> <false/>
<key>NSPhotoLibraryUsageDescription</key> <key>LSApplicationCategoryType</key>
<string>This app requires access to the photo library.</string> <string></string>
<key>UILaunchStoryboardName</key> <key>LSRequiresIPhoneOS</key>
<string>LaunchScreen</string> <true/>
<key>UIMainStoryboardFile</key> <key>NSAppTransportSecurity</key>
<string>Main</string> <dict>
<key>UIRequiredDeviceCapabilities</key> <key>NSAllowsArbitraryLoads</key>
<array> <true/>
<string>armv7</string> </dict>
</array> <key>NSCameraUsageDescription</key>
<key>UISupportedInterfaceOrientations</key> <string>This app requires access to the camera.</string>
<array> <key>NSMicrophoneUsageDescription</key>
<string>UIInterfaceOrientationPortrait</string> <string>This app does not require access to the microphone.</string>
<string>UIInterfaceOrientationLandscapeLeft</string> <key>NSPhotoLibraryAddUsageDescription</key>
<string>UIInterfaceOrientationLandscapeRight</string> <string>This app requires access to the photo library.</string>
</array> <key>NSPhotoLibraryUsageDescription</key>
<key>UISupportedInterfaceOrientations~ipad</key> <string>This app requires access to the photo library.</string>
<array> <key>UIBackgroundModes</key>
<string>UIInterfaceOrientationPortrait</string> <array>
<string>UIInterfaceOrientationPortraitUpsideDown</string> <string>processing</string>
<string>UIInterfaceOrientationLandscapeLeft</string> <string>remote-notification</string>
<string>UIInterfaceOrientationLandscapeRight</string> </array>
</array> <key>UILaunchStoryboardName</key>
<key>UIViewControllerBasedStatusBarAppearance</key> <string>LaunchScreen</string>
<true/> <key>UIMainStoryboardFile</key>
<key>NSAppTransportSecurity</key> <string>Main</string>
<dict> <key>UIRequiredDeviceCapabilities</key>
<key>NSAllowsArbitraryLoads</key> <array>
<true/> <string>armv7</string>
</dict> </array>
<key>UISupportedInterfaceOrientations</key>
<!-- Firebase Push Notification Configurations --> <array>
<key>FirebaseAppDelegateProxyEnabled</key> <string>UIInterfaceOrientationPortrait</string>
<true/> <string>UIInterfaceOrientationLandscapeLeft</string>
<key>UNUserNotificationCenterDelegate</key> <string>UIInterfaceOrientationLandscapeRight</string>
<string>YourApp.NotificationDelegate</string> </array>
<key>UIBackgroundModes</key> <key>UISupportedInterfaceOrientations~ipad</key>
<array> <array>
<string>remote-notification</string> <string>UIInterfaceOrientationPortrait</string>
</array> <string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
<key>UNUserNotificationCenterDelegate</key>
<string>YourApp.NotificationDelegate</string>
</dict> </dict>
</plist> </plist>
<!-- <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>Gabinete Digital</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>com.gpr.gabinetedigital.teste</string>
<key>CFBundleURLSchemes</key>
<array>
<string>gabinetedigital</string>
</array>
</dict>
</array>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>LSApplicationCategoryType</key>
<string></string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSCameraUsageDescription</key>
<string>This app requires access to the camera.</string>
<key>NSMicrophoneUsageDescription</key>
<string>This app does not require access to the microphone.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>This app requires access to the photo library.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>This app requires access to the photo library.</string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</dict>
</plist>
-->
@@ -68,6 +68,7 @@ iframe {
.container-img { .container-img {
background-image: url(/assets/gif/theme/gov/Blocks-loader.svg); background-image: url(/assets/gif/theme/gov/Blocks-loader.svg);
background-size: 100px;
background-repeat: no-repeat; background-repeat: no-repeat;
background-position-x: center; background-position-x: center;
background-position-y: center; background-position-y: center;
+6 -6
View File
@@ -119,16 +119,16 @@ export class SearchPage implements OnInit {
if (this.currentPath.includes('/home/agenda')) { if (this.currentPath.includes('/home/agenda')) {
this.type = "Agenda" this.type = "Agenda"
} else if (this.currentPath.includes('/home/gabinete-digital')) { } else if (this.currentPath.includes('/home/gabinete-digital')) {
this.type = "AccoesPresidenciais & ArquivoDespachoElect" this.type = "AccoesPresidenciais & ArquivoDespachoElect"
} else if (this.currentPath.includes('/home/publications')) { } else if (this.currentPath.includes('/home/publications')) {
this.type = "AccoesPresidenciais" this.type = "AccoesPresidenciais"
} else { } else {
} }
} }
} }
@@ -381,7 +381,7 @@ export class SearchPage implements OnInit {
this.showLoader = true; this.showLoader = true;
this.search.basicSearch(this.searchSubject, searchDocumentDate,searchDocumentDateEnd, this.searchSenderId this.search.basicSearch(this.searchSubject, searchDocumentDate,searchDocumentDateEnd, this.searchSenderId
, this.searchOrganicEntiryCode, this.searchDocTypeId, '0').subscribe(res => { , this.searchOrganicEntiryCode, this.searchDocTypeId, '0').subscribe(res => {
if (!res.Categories.length) { if (!res.Categories.length) {
this.searchResult = "Não encontramos o que procura"; this.searchResult = "Não encontramos o que procura";
} }
@@ -429,7 +429,7 @@ export class SearchPage implements OnInit {
console.log('enter text'); console.log('enter text');
} else { } else {
this.search.searchForDoc(this.searchSubject, searchDocumentDate, this.searchSenderId this.search.searchForDoc(this.searchSubject, searchDocumentDate, this.searchSenderId
, this.searchOrganicEntiryCode, this.searchDocTypeId, '8').subscribe(res => { , this.searchOrganicEntiryCode, this.searchDocTypeId, '8').subscribe(res => {
this.showLoader = true; this.showLoader = true;
@@ -123,12 +123,12 @@
<div [ngClass]="{'header-fix': !dropButton}" style="border-radius: 50px;position: relative;top: 3px;left: 25px;"> <div [ngClass]="{'header-fix': !dropButton}" style="border-radius: 50px;position: relative;top: 3px;left: 25px;">
<ion-row class="timeline-date align-center pr-10 visionMobile-flex" > <ion-row class="timeline-date align-center pr-10 visionMobile-flex" >
<button class="no-color" [ngClass]="{'d-item': !dropButton}" (click)="changeDropButton()" > <button style="z-index: 99;" class="no-color" [ngClass]="{'d-item': !dropButton}" (click)="changeDropButton()" >
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="collaps font-25" src="assets/images/icons-collaps-up.svg" ></ion-icon> <ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="collaps font-25" src="assets/images/icons-collaps-up.svg" ></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="collaps font-25" src="assets/images/theme/gov/icons-collaps-up.svg" ></ion-icon> <ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="collaps font-25" src="assets/images/theme/gov/icons-collaps-up.svg" ></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme == 'doneIt' " class="collaps font-25" src="assets/images/theme/{{ThemeService.currentTheme}}/icons-collaps-up.svg"></ion-icon> <ion-icon *ngIf="ThemeService.currentTheme == 'doneIt' " class="collaps font-25" src="assets/images/theme/{{ThemeService.currentTheme}}/icons-collaps-up.svg"></ion-icon>
</button> </button>
<button class="no-color visionMobile-flex" *ngIf="!dropButton" (click)="changeDropButton()"> <button style="z-index: 99;" class="no-color visionMobile-flex" *ngIf="!dropButton" (click)="changeDropButton()">
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="collaps font-25" src="assets/images/icons-collaps-down.svg" ></ion-icon> <ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="collaps font-25" src="assets/images/icons-collaps-down.svg" ></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="collaps font-25" src="assets/images/theme/gov/icons-collaps-down.svg" ></ion-icon> <ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="collaps font-25" src="assets/images/theme/gov/icons-collaps-down.svg" ></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme == 'doneIt' " class="collaps font-25" src="assets/images/theme/{{ThemeService.currentTheme}}/icons-collaps-down.svg" ></ion-icon> <ion-icon *ngIf="ThemeService.currentTheme == 'doneIt' " class="collaps font-25" src="assets/images/theme/{{ThemeService.currentTheme}}/icons-collaps-down.svg" ></ion-icon>
@@ -115,7 +115,7 @@ export class OptsExpedientePage implements OnInit {
component: SearchPage, component: SearchPage,
cssClass: 'modal-width-100-width-background modal', cssClass: 'modal-width-100-width-background modal',
componentProps: { componentProps: {
type: 'AccoesPresidenciais & ArquivoDespachoElect', type: 'Correspondencia',
showSearchInput: true, showSearchInput: true,
select: true select: true
} }
@@ -214,7 +214,7 @@ export class NewPublicationPage implements OnInit {
FileType: 'image' FileType: 'image'
} }
) )
newAttachment.needUpload(); //newAttachment.needUpload();
this.publicationFormMV.form.Files.push(newAttachment) this.publicationFormMV.form.Files.push(newAttachment)
}); });
@@ -252,7 +252,7 @@ export class NewPublicationPage implements OnInit {
} }
) )
newAttachment.needUpload() // newAttachment.needUpload()
this.publicationFormMV.form.Files.push(newAttachment) this.publicationFormMV.form.Files.push(newAttachment)
this.filecontent = true; this.filecontent = true;
@@ -368,7 +368,7 @@ export class NewPublicationPage implements OnInit {
const publication: any = Object.assign({}, this.publicationFormMV.form) const publication: any = Object.assign({}, this.publicationFormMV.form)
publication.Files = publication.Files.map( (e:PublicationAttachmentEntity) => ({ publication.Files = publication.Files.map( (e:PublicationAttachmentEntity) => ({
FileBase64: e.Base64, FileBase64: e.url,
FileExtension: e.FileExtension, FileExtension: e.FileExtension,
OriginalFileName: e.OriginalFileName || 'foto' OriginalFileName: e.OriginalFileName || 'foto'
})) }))
@@ -420,7 +420,7 @@ export class NewPublicationPage implements OnInit {
const publication: any = Object.assign({}, this.publicationFormMV.form) const publication: any = Object.assign({}, this.publicationFormMV.form)
publication.Files = publication.Files.map( (e:PublicationAttachmentEntity) => ({ publication.Files = publication.Files.map( (e:PublicationAttachmentEntity) => ({
FileBase64: e.Base64, FileBase64: e.url,
FileExtension: e.FileExtension, FileExtension: e.FileExtension,
OriginalFileName: e.OriginalFileName || 'foto' OriginalFileName: e.OriginalFileName || 'foto'
})) }))
@@ -809,13 +809,13 @@ console.log(stringGerada);
console.log('', content) console.log('', content)
let fileObject; let fileObject;
if(this.platform.is('desktop')) { if(this.platform.is('desktop')) {
fileObject = new PublicationAttachmentEntity({ fileObject = new PublicationAttachmentEntity({
base64: content.data, base64: content.data,
extension: 'mp4', extension: 'mp4',
OriginalFileName: 'record', OriginalFileName: 'record',
FileType: 'video' FileType: 'video'
}) })
} else { } else {
fileObject = new PublicationAttachmentEntity({ fileObject = new PublicationAttachmentEntity({
@@ -823,10 +823,10 @@ console.log(stringGerada);
extension: 'mp4', extension: 'mp4',
OriginalFileName: 'record', OriginalFileName: 'record',
FileType: 'video' FileType: 'video'
}) })
} }
/* fileObject.needUpload() */ /* fileObject.needUpload() */
this.publicationFormMV.form.Files.push(fileObject) this.publicationFormMV.form.Files.push(fileObject)
}) })
@@ -148,14 +148,14 @@ export class PublicationAttachmentEntity {
const sanitizer : DomSanitizer = window["sanitizer"] const sanitizer : DomSanitizer = window["sanitizer"]
if(this.FileType == 'image' ) { if(this.FileType == 'image' ) {
if(!this.Base64.startsWith('data:')) { if(!this.Base64.includes('data:')) {
this.url = 'data:image/jpg;base64,' + this.Base64 this.url = 'data:image/jpg;base64,' + this.Base64
// this.url = sanitizer.bypassSecurityTrustUrl('data:image/jpg;base64,' + this.Base64) as any // this.url = sanitizer.bypassSecurityTrustUrl('data:image/jpg;base64,' + this.Base64) as any
} else { } else {
this.url = this.Base64 this.url = this.Base64
} }
} else if (this.FileType == 'video' ) { } else if (this.FileType == 'video' ) {
if(!this.Base64.startsWith('data:') && !this.Base64.startsWith('http')) { if(!this.Base64.includes('data:') && !this.Base64.startsWith('http')) {
this.url = 'data:video/mp4;base64,' + this.Base64 this.url = 'data:video/mp4;base64,' + this.Base64
// this.url = sanitizer.bypassSecurityTrustUrl('data:video/mp4;base64,' + this.Base64) as any // this.url = sanitizer.bypassSecurityTrustUrl('data:video/mp4;base64,' + this.Base64) as any
} else { } else {
+1 -1
View File
@@ -4,4 +4,4 @@ import { environment as doneITProd } from './suport/doneIt'
import { DevDev } from './suport/dev' import { DevDev } from './suport/dev'
export const environment: Environment = oaprProd; export const environment: Environment = DevDev;