You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.0 KiB
60 lines
2.0 KiB
import { Component, OnInit, Inject, ElementRef, Renderer2 } from '@angular/core';
|
|
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
import { HttpService } from '@app/core/services/http.service';
|
|
import Cropper from 'cropperjs';
|
|
|
|
@Component({
|
|
selector: 'app-profile',
|
|
templateUrl: './profile.component.html',
|
|
styleUrls: ['./profile.component.scss']
|
|
})
|
|
export class ProfileComponent implements OnInit {
|
|
|
|
constructor(
|
|
@Inject(MAT_DIALOG_DATA)
|
|
private _data: any,
|
|
private _renderer: Renderer2,
|
|
private _element: ElementRef,
|
|
private _dialog: MatDialogRef<ProfileComponent>,
|
|
private _httpService: HttpService
|
|
) { }
|
|
|
|
ngOnInit() {
|
|
const img = this._element.nativeElement.querySelector('img');
|
|
this._renderer.setAttribute(img, 'src', this._data);
|
|
this._renderer.setStyle(this._element.nativeElement.parentElement, 'background-color', 'transparent');
|
|
this._renderer.setStyle(this._element.nativeElement.parentElement, 'box-shadow', 'none');
|
|
this._renderer.setStyle(this._element.nativeElement.parentElement, 'padding', '0');
|
|
new Cropper(img, {
|
|
aspectRatio: 1,
|
|
dragMode: 'move',
|
|
minContainerWidth: document.body.clientWidth,
|
|
minContainerHeight: document.body.clientHeight,
|
|
background: false,
|
|
center: false,
|
|
cropBoxMovable: false,
|
|
cropBoxResizable: false,
|
|
guides: false,
|
|
highlight: false,
|
|
toggleDragModeOnDblclick: false,
|
|
ready: () => {
|
|
const button = this._element.nativeElement.querySelector('.crop');
|
|
this._renderer.setStyle(button, 'margin-top', '10px');
|
|
this._renderer.appendChild(this._element.nativeElement.querySelector('.cropper-crop-box'), button);
|
|
}
|
|
});
|
|
}
|
|
|
|
public crop(): void {
|
|
const base64 = this._element.nativeElement.querySelector('img')
|
|
.cropper['getCroppedCanvas']('', {
|
|
width: 128,
|
|
height: 128
|
|
})
|
|
.toDataURL('image/jpeg');
|
|
this._httpService.put('users/current/profile', {
|
|
avatar: base64
|
|
})
|
|
this._dialog.close(base64);
|
|
}
|
|
}
|