Files
Jobhero_front/src/app/pages/contracts/nohome/nohome.page.ts
Carlos aa8b0061c9 feat: Actualización general de la aplicación
- Contratos, tarjetas, postulaciones, categorías y reportes
- Servicios: auth, ichamba, env, language, firebase, interceptor
- Guards, modelos, componentes y páginas de verificación
- Configuración: angular.json, tsconfig, polyfills, environments
- Capacitor: capacitor.config.json y android settings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 08:18:40 -06:00

124 lines
3.8 KiB
TypeScript
Executable File

import { Component, OnInit } from '@angular/core';
import { NavController, LoadingController } from '@ionic/angular';
import { ActivatedRoute } from '@angular/router';
import { Geolocation } from '@capacitor/geolocation';
import { Camera, CameraResultType, CameraSource } from '@capacitor/camera';
import { Filesystem, Directory } from '@capacitor/filesystem';
import { IchambaService } from 'src/app/services/ichamba.service';
import { AlertService } from 'src/app/services/alert.service';
import { DomSanitizer } from '@angular/platform-browser';
@Component({
selector: 'app-nohome',
templateUrl: './nohome.page.html',
styleUrls: ['./nohome.page.scss'],
standalone: false
})
export class NohomePage implements OnInit {
private loading: any;
storedPhoto: any;
resolvedImage: any = null;
safeImage: any = null;
contract_id: any = null;
description: string = '';
myPosition: any = {};
constructor(
private alertService: AlertService,
private ichambaService: IchambaService,
private navCtrl: NavController,
private loadingCtrl: LoadingController,
private activatedRoute: ActivatedRoute,
private sanitizer: DomSanitizer
) { }
ngOnInit() {
this.contract_id = this.activatedRoute.snapshot.paramMap.get('contract_id');
this.getCurrentLocation();
}
async getCurrentLocation() {
try {
// Request permissions first
const permissionStatus = await Geolocation.checkPermissions();
if (permissionStatus.location !== 'granted') {
await Geolocation.requestPermissions();
}
const position = await Geolocation.getCurrentPosition({
enableHighAccuracy: true,
timeout: 30000
});
console.log(position);
this.myPosition = {
latitude: position.coords.latitude,
longitude: position.coords.longitude
};
} catch (error) {
console.log('Error al obtener localización: ' + error);
}
}
async openCamera() {
try {
const image = await Camera.getPhoto({
quality: 100,
resultType: CameraResultType.Uri,
source: CameraSource.Camera
});
// image.webPath will contain a path that can be set as an image src
this.resolvedImage = image.webPath;
this.safeImage = this.sanitizer.bypassSecurityTrustUrl(this.resolvedImage || '');
this.storedPhoto = image.path;
this.alertService.presentToast(this.resolvedImage || 'Image captured');
} catch (err) {
this.alertService.presentToast("error: " + err);
}
}
send() {
this.ichambaService.noHomeConfirm(this.contract_id, this.myPosition.latitude, this.myPosition.longitude, this.description).subscribe(
(data: any) => {
this.alertService.presentToast(data['message']);
this.navCtrl.navigateRoot('/dashboard');
}, error => {
this.alertService.presentToast("Por favor contacte a soporte técnico, Estatus:" + error['status']);
});
}
async startUpload() {
try {
if (!this.storedPhoto) {
this.alertService.presentToast("No hay foto para subir");
return;
}
// Read the file as base64
const contents = await Filesystem.readFile({
path: this.storedPhoto
});
// Convert base64 to Blob
const byteCharacters = atob(contents.data as string);
const byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
const blob = new Blob([byteArray], { type: 'image/jpeg' });
const formData = new FormData();
formData.append('file', blob, 'photo.jpg');
// this.uploadImageData(formData);
this.alertService.presentToast("Todo bien hasta ahora");
} catch (err) {
this.alertService.presentToast("error: " + err);
}
}
}