@mytec: iter7 ready for test
This commit is contained in:
@@ -9,11 +9,15 @@ interface SettingsState {
|
||||
terrainOpacity: number;
|
||||
showGrid: boolean;
|
||||
measurementMode: boolean;
|
||||
showElevationInfo: boolean;
|
||||
showElevationOverlay: boolean;
|
||||
setTheme: (theme: Theme) => void;
|
||||
setShowTerrain: (show: boolean) => void;
|
||||
setTerrainOpacity: (opacity: number) => void;
|
||||
setShowGrid: (show: boolean) => void;
|
||||
setMeasurementMode: (mode: boolean) => void;
|
||||
setShowElevationInfo: (show: boolean) => void;
|
||||
setShowElevationOverlay: (show: boolean) => void;
|
||||
}
|
||||
|
||||
function applyTheme(theme: Theme) {
|
||||
@@ -35,6 +39,8 @@ export const useSettingsStore = create<SettingsState>()(
|
||||
terrainOpacity: 0.5,
|
||||
showGrid: false,
|
||||
measurementMode: false,
|
||||
showElevationInfo: false,
|
||||
showElevationOverlay: false,
|
||||
setTheme: (theme: Theme) => {
|
||||
set({ theme });
|
||||
applyTheme(theme);
|
||||
@@ -43,6 +49,8 @@ export const useSettingsStore = create<SettingsState>()(
|
||||
setTerrainOpacity: (opacity: number) => set({ terrainOpacity: opacity }),
|
||||
setShowGrid: (show: boolean) => set({ showGrid: show }),
|
||||
setMeasurementMode: (mode: boolean) => set({ measurementMode: mode }),
|
||||
setShowElevationInfo: (show: boolean) => set({ showElevationInfo: show }),
|
||||
setShowElevationOverlay: (show: boolean) => set({ showElevationOverlay: show }),
|
||||
}),
|
||||
{
|
||||
name: 'rfcp-settings',
|
||||
|
||||
@@ -26,6 +26,10 @@ interface SitesState {
|
||||
|
||||
// Multi-sector
|
||||
cloneSiteAsSectors: (siteId: string, sectorCount: 2 | 3) => Promise<void>;
|
||||
cloneSector: (siteId: string) => Promise<void>;
|
||||
|
||||
// Import/export
|
||||
importSites: (sitesData: SiteFormData[]) => Promise<number>;
|
||||
|
||||
// Batch operations
|
||||
toggleSiteSelection: (siteId: string) => void;
|
||||
@@ -141,6 +145,42 @@ export const useSitesStore = create<SitesState>((set, get) => ({
|
||||
}
|
||||
},
|
||||
|
||||
// Clone a single sector: duplicate site with 30° azimuth offset
|
||||
cloneSector: async (siteId: string) => {
|
||||
const source = get().sites.find((s) => s.id === siteId);
|
||||
if (!source) return;
|
||||
|
||||
const addSite = get().addSite;
|
||||
const newAzimuth = ((source.azimuth ?? 0) + 30) % 360;
|
||||
|
||||
await addSite({
|
||||
name: `${source.name}-clone`,
|
||||
lat: source.lat,
|
||||
lon: source.lon,
|
||||
height: source.height,
|
||||
power: source.power,
|
||||
gain: source.gain,
|
||||
frequency: source.frequency,
|
||||
antennaType: source.antennaType,
|
||||
azimuth: newAzimuth,
|
||||
beamwidth: source.beamwidth,
|
||||
color: '',
|
||||
visible: true,
|
||||
notes: source.notes ? `Clone of: ${source.notes}` : `Clone of ${source.name}`,
|
||||
});
|
||||
},
|
||||
|
||||
// Import sites from parsed data
|
||||
importSites: async (sitesData: SiteFormData[]) => {
|
||||
const addSite = get().addSite;
|
||||
let count = 0;
|
||||
for (const data of sitesData) {
|
||||
await addSite(data);
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
},
|
||||
|
||||
// Batch operations
|
||||
toggleSiteSelection: (siteId: string) => {
|
||||
set((state) => {
|
||||
|
||||
Reference in New Issue
Block a user