Add deepCopy utility and enforce required fields in particle forms
This commit is contained in:
parent
9b8c4891f4
commit
dc1b29e52c
|
|
@ -7,18 +7,18 @@
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<mat-form-field appearance="outline">
|
<mat-form-field appearance="outline">
|
||||||
<mat-label>Particle Name</mat-label>
|
<mat-label>Particle Name</mat-label>
|
||||||
<input matInput [(ngModel)]="particleData.particle_name" placeholder="Enter particle name">
|
<input required matInput [(ngModel)]="particleData.particle_name" placeholder="Enter particle name">
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<mat-form-field appearance="outline">
|
<mat-form-field appearance="outline">
|
||||||
<mat-label>Display Name</mat-label>
|
<mat-label>Display Name</mat-label>
|
||||||
<input matInput [(ngModel)]="particleData.display_name" placeholder="Enter display name">
|
<input required matInput [(ngModel)]="particleData.display_name" placeholder="Enter display name">
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<mat-form-field appearance="outline">
|
<mat-form-field appearance="outline">
|
||||||
<mat-label>Permission name</mat-label>
|
<mat-label>Permission name</mat-label>
|
||||||
<input matInput [(ngModel)]="particleData.permission" placeholder="Enter permission">
|
<input required matInput [(ngModel)]="particleData.permission" placeholder="Enter permission">
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<mat-form-field appearance="outline">
|
<mat-form-field appearance="outline">
|
||||||
<mat-label>Package name</mat-label>
|
<mat-label>Package name</mat-label>
|
||||||
|
|
@ -37,14 +37,14 @@
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<mat-form-field appearance="outline">
|
<mat-form-field appearance="outline">
|
||||||
<mat-label>Display Item</mat-label>
|
<mat-label>Display Item</mat-label>
|
||||||
<input matInput [(ngModel)]="particleData.display_item" placeholder="Enter display item">
|
<input required matInput [(ngModel)]="particleData.display_item" placeholder="Enter display item">
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<mat-form-field appearance="outline" class="lore-double">
|
<mat-form-field appearance="outline" class="lore-double">
|
||||||
<mat-label>Lore</mat-label>
|
<mat-label>Lore</mat-label>
|
||||||
<textarea matInput [(ngModel)]="particleData.lore" placeholder="Enter lore"></textarea>
|
<textarea required matInput [(ngModel)]="particleData.lore" placeholder="Enter lore"></textarea>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import * as THREE from 'three';
|
||||||
import {RendererService} from './renderer.service';
|
import {RendererService} from './renderer.service';
|
||||||
import {Particle, ParticleData, ParticleInfo, ParticleType} from '../models/particle.model';
|
import {Particle, ParticleData, ParticleInfo, ParticleType} from '../models/particle.model';
|
||||||
import {IntersectionPlaneService, PlaneOrientation} from './intersection-plane.service';
|
import {IntersectionPlaneService, PlaneOrientation} from './intersection-plane.service';
|
||||||
|
import {deepCopy} from '../../../util/deep-copy.util';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service responsible for managing particles in the scene
|
* Service responsible for managing particles in the scene
|
||||||
|
|
@ -281,6 +282,13 @@ export class ParticleManagerService {
|
||||||
* Generates JSON output of the particle data
|
* Generates JSON output of the particle data
|
||||||
*/
|
*/
|
||||||
generateJson(): string {
|
generateJson(): string {
|
||||||
|
const particleData = deepCopy(this.particleData)
|
||||||
|
if (this.particleData.package_permission) {
|
||||||
|
particleData.package_permission = 'apart.set.' + this.particleData.package_permission.toLowerCase().replace(' ', '-');
|
||||||
|
} else {
|
||||||
|
particleData.package_permission = 'apart.set.none';
|
||||||
|
}
|
||||||
|
particleData.permission = 'apart.particle.' + this.particleData.permission.toLowerCase().replace(' ', '-');
|
||||||
return JSON.stringify(this.particleData, null, 2);
|
return JSON.stringify(this.particleData, null, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
10
frontend/src/app/util/deep-copy.util.ts
Normal file
10
frontend/src/app/util/deep-copy.util.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
export function deepCopy<T>(obj: T): T {
|
||||||
|
// Structured cloning
|
||||||
|
if (typeof globalThis?.structuredClone === 'function') {
|
||||||
|
// @ts-ignore
|
||||||
|
return globalThis.structuredClone(obj) as T;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Normal objects
|
||||||
|
return JSON.parse(JSON.stringify(obj)) as T;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user