@mytec: iter10.6 ready for testing

This commit is contained in:
2026-01-30 20:11:48 +02:00
parent d8256288b0
commit 625cce31e4
7 changed files with 1066 additions and 68 deletions

View File

@@ -40,6 +40,11 @@ interface SitesState {
batchSetHeight: (height: number) => Promise<void>;
batchAdjustAzimuth: (delta: number) => Promise<void>;
batchSetAzimuth: (azimuth: number) => Promise<void>;
batchAdjustPower: (delta: number) => Promise<void>;
batchSetPower: (power: number) => Promise<void>;
batchAdjustTilt: (delta: number) => Promise<void>;
batchSetTilt: (tilt: number) => Promise<void>;
batchSetFrequency: (frequency: number) => Promise<void>;
}
export const useSitesStore = create<SitesState>((set, get) => ({
@@ -336,4 +341,148 @@ export const useSitesStore = create<SitesState>((set, get) => ({
set({ sites: updatedSites });
useCoverageStore.getState().clearCoverage();
},
batchAdjustPower: async (delta: number) => {
const { sites, selectedSiteIds } = get();
const selectedSet = new Set(selectedSiteIds);
const now = new Date();
const updatedSites = sites.map((site) => {
if (!selectedSet.has(site.id)) return site;
return {
...site,
power: Math.max(10, Math.min(50, site.power + delta)),
updatedAt: now,
};
});
const toUpdate = updatedSites.filter((s) => selectedSet.has(s.id));
for (const site of toUpdate) {
await db.sites.put({
id: site.id,
data: JSON.stringify(site),
createdAt: site.createdAt.getTime(),
updatedAt: now.getTime(),
});
}
set({ sites: updatedSites });
useCoverageStore.getState().clearCoverage();
},
batchSetPower: async (power: number) => {
const { sites, selectedSiteIds } = get();
const selectedSet = new Set(selectedSiteIds);
const clamped = Math.max(10, Math.min(50, power));
const now = new Date();
const updatedSites = sites.map((site) => {
if (!selectedSet.has(site.id)) return site;
return {
...site,
power: clamped,
updatedAt: now,
};
});
const toUpdate = updatedSites.filter((s) => selectedSet.has(s.id));
for (const site of toUpdate) {
await db.sites.put({
id: site.id,
data: JSON.stringify(site),
createdAt: site.createdAt.getTime(),
updatedAt: now.getTime(),
});
}
set({ sites: updatedSites });
useCoverageStore.getState().clearCoverage();
},
batchAdjustTilt: async (delta: number) => {
const { sites, selectedSiteIds } = get();
const selectedSet = new Set(selectedSiteIds);
const now = new Date();
const updatedSites = sites.map((site) => {
if (!selectedSet.has(site.id)) return site;
const current = site.tilt ?? 0;
return {
...site,
tilt: Math.max(-90, Math.min(90, current + delta)),
updatedAt: now,
};
});
const toUpdate = updatedSites.filter((s) => selectedSet.has(s.id));
for (const site of toUpdate) {
await db.sites.put({
id: site.id,
data: JSON.stringify(site),
createdAt: site.createdAt.getTime(),
updatedAt: now.getTime(),
});
}
set({ sites: updatedSites });
useCoverageStore.getState().clearCoverage();
},
batchSetTilt: async (tilt: number) => {
const { sites, selectedSiteIds } = get();
const selectedSet = new Set(selectedSiteIds);
const clamped = Math.max(-90, Math.min(90, tilt));
const now = new Date();
const updatedSites = sites.map((site) => {
if (!selectedSet.has(site.id)) return site;
return {
...site,
tilt: clamped,
updatedAt: now,
};
});
const toUpdate = updatedSites.filter((s) => selectedSet.has(s.id));
for (const site of toUpdate) {
await db.sites.put({
id: site.id,
data: JSON.stringify(site),
createdAt: site.createdAt.getTime(),
updatedAt: now.getTime(),
});
}
set({ sites: updatedSites });
useCoverageStore.getState().clearCoverage();
},
batchSetFrequency: async (frequency: number) => {
const { sites, selectedSiteIds } = get();
const selectedSet = new Set(selectedSiteIds);
const clamped = Math.max(100, Math.min(6000, frequency));
const now = new Date();
const updatedSites = sites.map((site) => {
if (!selectedSet.has(site.id)) return site;
return {
...site,
frequency: clamped,
updatedAt: now,
};
});
const toUpdate = updatedSites.filter((s) => selectedSet.has(s.id));
for (const site of toUpdate) {
await db.sites.put({
id: site.id,
data: JSON.stringify(site),
createdAt: site.createdAt.getTime(),
updatedAt: now.getTime(),
});
}
set({ sites: updatedSites });
useCoverageStore.getState().clearCoverage();
},
}));