1// SPDX-License-Identifier: GPL-2.0-only
2// Copyright (c) 2025-present FERS Contributors (see AUTHORS.md).
4import { StateCreator } from 'zustand';
5import { v4 as uuidv4 } from 'uuid';
6import { ScenarioStore, AssetActions, Antenna } from '../types';
7import { defaultWaveform, defaultTiming, defaultAntenna } from '../defaults';
9export const createAssetSlice: StateCreator<
11 [['zustand/immer', never]],
18 state.waveforms.push({
21 name: `Waveform ${state.waveforms.length + 1}`,
31 name: `Timing ${state.timings.length + 1}`,
41 name: `Antenna ${state.antennas.length + 1}`,
45 addNoiseEntry: (timingId) =>
47 const timing = state.timings.find((t) => t.id === timingId);
49 timing.noiseEntries.push({
57 removeNoiseEntry: (timingId, entryId) =>
59 const timing = state.timings.find((t) => t.id === timingId);
61 const index = timing.noiseEntries.findIndex(
62 (e) => e.id === entryId
65 timing.noiseEntries.splice(index, 1);
70 setAntennaPattern: (antennaId, newPattern) =>
72 const index = state.antennas.findIndex((a) => a.id === antennaId);
73 if (index === -1) return;
75 const oldAntenna = state.antennas[index];
78 type: oldAntenna.type,
79 name: oldAntenna.name,
80 efficiency: oldAntenna.efficiency,
81 meshScale: oldAntenna.meshScale,
82 design_frequency: oldAntenna.design_frequency,
85 let newAntennaState: Antenna;
128 state.antennas[index] = newAntennaState;
129 state.isDirty = true;