respira/src/stores/usePatternStore.ts
Jan-Henrik Bruhn a253901fb4
Some checks are pending
Build, Test, and Lint / Build, Test, and Lint (push) Waiting to run
Draft Release / Draft Release (push) Waiting to run
Draft Release / Build Web App (push) Blocked by required conditions
Draft Release / Build Release - macos-latest (push) Blocked by required conditions
Draft Release / Build Release - ubuntu-latest (push) Blocked by required conditions
Draft Release / Build Release - windows-latest (push) Blocked by required conditions
Draft Release / Upload to GitHub Release (push) Blocked by required conditions
fix: run linter
2025-12-18 11:39:22 +01:00

69 lines
2.1 KiB
TypeScript

import { create } from "zustand";
import type { PesPatternData } from "../formats/import/pesImporter";
interface PatternState {
// Pattern data
pesData: PesPatternData | null;
currentFileName: string;
patternOffset: { x: number; y: number };
patternUploaded: boolean;
// Actions
setPattern: (data: PesPatternData, fileName: string) => void;
setPatternOffset: (x: number, y: number) => void;
setPatternUploaded: (uploaded: boolean) => void;
clearPattern: () => void;
resetPatternOffset: () => void;
}
export const usePatternStore = create<PatternState>((set) => ({
// Initial state
pesData: null,
currentFileName: "",
patternOffset: { x: 0, y: 0 },
patternUploaded: false,
// Set pattern data and filename
setPattern: (data: PesPatternData, fileName: string) => {
set({
pesData: data,
currentFileName: fileName,
patternOffset: { x: 0, y: 0 }, // Reset offset when new pattern is loaded
patternUploaded: false,
});
},
// Update pattern offset
setPatternOffset: (x: number, y: number) => {
set({ patternOffset: { x, y } });
console.log("[PatternStore] Pattern offset changed:", { x, y });
},
// Mark pattern as uploaded/not uploaded
setPatternUploaded: (uploaded: boolean) => {
set({ patternUploaded: uploaded });
},
// Clear pattern (but keep data visible for re-editing)
clearPattern: () => {
set({
patternUploaded: false,
// Note: We intentionally DON'T clear pesData or currentFileName
// so the pattern remains visible in the canvas for re-editing
});
},
// Reset pattern offset to default
resetPatternOffset: () => {
set({ patternOffset: { x: 0, y: 0 } });
},
}));
// Selector hooks for common use cases
export const usePesData = () => usePatternStore((state) => state.pesData);
export const usePatternFileName = () =>
usePatternStore((state) => state.currentFileName);
export const usePatternOffset = () =>
usePatternStore((state) => state.patternOffset);
export const usePatternUploaded = () =>
usePatternStore((state) => state.patternUploaded);