87 lines
2.6 KiB
TypeScript
87 lines
2.6 KiB
TypeScript
import {Component, inject} from '@angular/core';
|
|
import {FormsModule} from '@angular/forms';
|
|
import {MatInput, MatLabel} from '@angular/material/input';
|
|
import {MatFormFieldModule} from '@angular/material/form-field';
|
|
import {MatCard, MatCardContent, MatCardHeader, MatCardTitle} from '@angular/material/card';
|
|
import {MatIconModule} from '@angular/material/icon';
|
|
import {MatButtonModule} from '@angular/material/button';
|
|
import {ParticlesService} from '@api';
|
|
import {ParticleManagerService} from '@pages/particles/services/particle-manager.service';
|
|
import {FrameManagerService} from '@pages/particles/services/frame-manager.service';
|
|
|
|
@Component({
|
|
selector: 'app-particle-manager',
|
|
imports: [
|
|
FormsModule,
|
|
MatFormFieldModule,
|
|
MatInput,
|
|
MatLabel,
|
|
MatCard,
|
|
MatCardContent,
|
|
MatCardHeader,
|
|
MatCardTitle,
|
|
MatIconModule,
|
|
MatButtonModule,
|
|
],
|
|
templateUrl: './particle-manager.component.html',
|
|
styleUrl: './particle-manager.component.scss'
|
|
})
|
|
export class ParticleManagerComponent {
|
|
|
|
private readonly particlesService = inject(ParticlesService)
|
|
private readonly particleManagerService = inject(ParticleManagerService)
|
|
private readonly frameManagerService = inject(FrameManagerService)
|
|
|
|
private selectedParticleName: string = '';
|
|
|
|
set selectedParticle(particle: string) {
|
|
this.selectedParticleName = particle;
|
|
}
|
|
|
|
get selectedParticle(): string {
|
|
return this.selectedParticleName;
|
|
}
|
|
|
|
get createdParticleName(): string {
|
|
return this.particleManagerService.getParticleData().particle_name;
|
|
}
|
|
|
|
protected downloadParticle() {
|
|
if (this.selectedParticleName === '') {
|
|
return;
|
|
}
|
|
this.particlesService
|
|
.downloadFile(this.selectedParticleName)
|
|
.subscribe({
|
|
next: data => {
|
|
data.text().then(text => {
|
|
if (text.startsWith('<')) {
|
|
console.error("Failed to download particle: Invalid file format")
|
|
return;
|
|
}
|
|
this.particleManagerService.loadParticleData(text)
|
|
this.frameManagerService.switchFrame(this.particleManagerService.getCurrentFrame())
|
|
})
|
|
},
|
|
error: () => {
|
|
console.error("Failed to download particle: Invalid file name")
|
|
},
|
|
}
|
|
)
|
|
}
|
|
|
|
protected uploadParticle() {
|
|
this.particlesService
|
|
.saveFile(this.createdParticleName, new Blob([this.particleManagerService.generateJson()], {type: 'application/json'}))
|
|
.subscribe({
|
|
next: () => {
|
|
console.log("Successfully uploaded particle")
|
|
},
|
|
error: () => {
|
|
console.error("Failed to upload particle")
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|