@mytec: iter1.1.1 ready for testing
This commit is contained in:
@@ -3,6 +3,21 @@ import { v4 as uuidv4 } from 'uuid';
|
||||
import type { Site, SiteFormData } from '@/types/index.ts';
|
||||
import { db } from '@/db/schema.ts';
|
||||
import { useCoverageStore } from '@/store/coverage.ts';
|
||||
import { useHistoryStore } from '@/store/history.ts';
|
||||
|
||||
/**
|
||||
* Capture a snapshot of current state and push it to the undo stack.
|
||||
* Call this BEFORE mutating state.
|
||||
*/
|
||||
function pushSnapshot(action: string, sites: Site[]) {
|
||||
const settings = useCoverageStore.getState().settings;
|
||||
useHistoryStore.getState().push({
|
||||
sites: structuredClone(sites),
|
||||
settings: { ...settings },
|
||||
timestamp: Date.now(),
|
||||
action,
|
||||
});
|
||||
}
|
||||
|
||||
const SITE_COLORS = [
|
||||
'#ef4444', '#3b82f6', '#22c55e', '#f59e0b', '#8b5cf6',
|
||||
@@ -65,6 +80,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
},
|
||||
|
||||
addSite: async (data: SiteFormData) => {
|
||||
pushSnapshot('add site', get().sites);
|
||||
const id = uuidv4();
|
||||
const now = new Date();
|
||||
const colorIndex = get().sites.length % SITE_COLORS.length;
|
||||
@@ -90,6 +106,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
const sites = get().sites;
|
||||
const existing = sites.find((s) => s.id === id);
|
||||
if (!existing) return;
|
||||
pushSnapshot('update site', sites);
|
||||
|
||||
const updated: Site = {
|
||||
...existing,
|
||||
@@ -108,6 +125,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
},
|
||||
|
||||
deleteSite: async (id: string) => {
|
||||
pushSnapshot('delete site', get().sites);
|
||||
await db.sites.delete(id);
|
||||
set((state) => ({
|
||||
sites: state.sites.filter((s) => s.id !== id),
|
||||
@@ -127,6 +145,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
cloneSiteAsSectors: async (siteId: string, sectorCount: 2 | 3) => {
|
||||
const source = get().sites.find((s) => s.id === siteId);
|
||||
if (!source) return;
|
||||
pushSnapshot('clone as sectors', get().sites);
|
||||
|
||||
const spacing = 360 / sectorCount;
|
||||
const addSite = get().addSite;
|
||||
@@ -159,6 +178,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
cloneSector: async (siteId: string) => {
|
||||
const source = get().sites.find((s) => s.id === siteId);
|
||||
if (!source) return;
|
||||
pushSnapshot('clone sector', get().sites);
|
||||
|
||||
// Count existing sectors at this location to determine naming
|
||||
const colocated = get().sites.filter(
|
||||
@@ -196,6 +216,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
|
||||
// Import sites from parsed data
|
||||
importSites: async (sitesData: SiteFormData[]) => {
|
||||
pushSnapshot('import sites', get().sites);
|
||||
const addSite = get().addSite;
|
||||
let count = 0;
|
||||
for (const data of sitesData) {
|
||||
@@ -229,6 +250,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
|
||||
batchUpdateHeight: async (adjustment: number) => {
|
||||
const { sites, selectedSiteIds } = get();
|
||||
pushSnapshot('batch update height', sites);
|
||||
const selectedSet = new Set(selectedSiteIds);
|
||||
const now = new Date();
|
||||
|
||||
@@ -257,6 +279,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
|
||||
batchSetHeight: async (height: number) => {
|
||||
const { sites, selectedSiteIds } = get();
|
||||
pushSnapshot('batch set height', sites);
|
||||
const selectedSet = new Set(selectedSiteIds);
|
||||
const clampedHeight = Math.max(1, Math.min(100, height));
|
||||
const now = new Date();
|
||||
@@ -286,6 +309,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
|
||||
batchAdjustAzimuth: async (delta: number) => {
|
||||
const { sites, selectedSiteIds } = get();
|
||||
pushSnapshot('batch adjust azimuth', sites);
|
||||
const selectedSet = new Set(selectedSiteIds);
|
||||
const now = new Date();
|
||||
|
||||
@@ -315,6 +339,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
|
||||
batchSetAzimuth: async (azimuth: number) => {
|
||||
const { sites, selectedSiteIds } = get();
|
||||
pushSnapshot('batch set azimuth', sites);
|
||||
const selectedSet = new Set(selectedSiteIds);
|
||||
const clamped = ((azimuth % 360) + 360) % 360;
|
||||
const now = new Date();
|
||||
@@ -344,6 +369,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
|
||||
batchAdjustPower: async (delta: number) => {
|
||||
const { sites, selectedSiteIds } = get();
|
||||
pushSnapshot('batch adjust power', sites);
|
||||
const selectedSet = new Set(selectedSiteIds);
|
||||
const now = new Date();
|
||||
|
||||
@@ -372,6 +398,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
|
||||
batchSetPower: async (power: number) => {
|
||||
const { sites, selectedSiteIds } = get();
|
||||
pushSnapshot('batch set power', sites);
|
||||
const selectedSet = new Set(selectedSiteIds);
|
||||
const clamped = Math.max(10, Math.min(50, power));
|
||||
const now = new Date();
|
||||
@@ -401,6 +428,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
|
||||
batchAdjustTilt: async (delta: number) => {
|
||||
const { sites, selectedSiteIds } = get();
|
||||
pushSnapshot('batch adjust tilt', sites);
|
||||
const selectedSet = new Set(selectedSiteIds);
|
||||
const now = new Date();
|
||||
|
||||
@@ -430,6 +458,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
|
||||
batchSetTilt: async (tilt: number) => {
|
||||
const { sites, selectedSiteIds } = get();
|
||||
pushSnapshot('batch set tilt', sites);
|
||||
const selectedSet = new Set(selectedSiteIds);
|
||||
const clamped = Math.max(-90, Math.min(90, tilt));
|
||||
const now = new Date();
|
||||
@@ -459,6 +488,7 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
|
||||
batchSetFrequency: async (frequency: number) => {
|
||||
const { sites, selectedSiteIds } = get();
|
||||
pushSnapshot('batch set frequency', sites);
|
||||
const selectedSet = new Set(selectedSiteIds);
|
||||
const clamped = Math.max(100, Math.min(6000, frequency));
|
||||
const now = new Date();
|
||||
|
||||
Reference in New Issue
Block a user