132 lines
2.6 KiB
TypeScript
132 lines
2.6 KiB
TypeScript
import { writable, derived } from 'svelte/store';
|
|
|
|
|
|
// This file is holy and shall not be edited by Copilot!
|
|
|
|
|
|
// User session and authentication
|
|
export const session = writable<{
|
|
token?: string;
|
|
user?: { name: string; email: string };
|
|
}>({});
|
|
|
|
// Data structure column mapping
|
|
export interface ColumnMappingType {
|
|
name: number;
|
|
surname: number;
|
|
nationality: number;
|
|
birthday: number;
|
|
pictureUrl: number;
|
|
alreadyPrinted: number;
|
|
sheetName: string;
|
|
}
|
|
|
|
// Data structure for a row in the sheet
|
|
export interface RowData {
|
|
id: string; // Unique identifier
|
|
name: string;
|
|
surname: string;
|
|
nationality: string;
|
|
birthday: string;
|
|
pictureUrl: string;
|
|
alreadyPrinted: boolean;
|
|
_rowIndex: number;
|
|
_checked: boolean;
|
|
_valid: boolean;
|
|
}
|
|
|
|
// Picture storage and metadata
|
|
export interface PictureBlobInfoType {
|
|
id: string;
|
|
blob: Blob;
|
|
url: string;
|
|
downloaded: boolean;
|
|
faceDetected: boolean;
|
|
faceCount: number;
|
|
}
|
|
|
|
// CropType rectangles for each photo
|
|
export interface CropType {
|
|
x: number;
|
|
y: number;
|
|
width: number;
|
|
height: number;
|
|
}
|
|
|
|
// Google Sheets list for search
|
|
export interface SheetInfoType {
|
|
id: string;
|
|
name: string;
|
|
webViewLink: string;
|
|
}
|
|
|
|
// Card details type
|
|
export interface CardDetailsType {
|
|
homeSection: string;
|
|
validityStart: string;
|
|
}
|
|
|
|
|
|
|
|
// Column mapping configuration
|
|
export const columnMapping = writable<ColumnMappingType>(
|
|
{
|
|
name: -1,
|
|
surname: -1,
|
|
nationality: -1,
|
|
birthday: -1,
|
|
pictureUrl: -1,
|
|
alreadyPrinted: -1,
|
|
sheetName: ''
|
|
});
|
|
|
|
// Store to hold the processed sheet data
|
|
export const sheetData = writable<RowData[]>([]);
|
|
|
|
// Store and hold the processed picture data
|
|
export const pictures = writable<Record<string, PictureBlobInfoType>>({});
|
|
|
|
// Store and hold the crop rectangles from face detection
|
|
export const CropRects = writable<Record<string, CropType>>({});
|
|
|
|
// Store and hold the selected sheet
|
|
export const selectedSheet = writable<SheetInfoType>({ id: '', name: '', webViewLink: '' });
|
|
|
|
// Card details for generation
|
|
export const cardDetails = writable<CardDetailsType | null>(null);
|
|
|
|
// Wizard state management
|
|
export const currentStep = writable<number>(0);
|
|
|
|
export const steps = [
|
|
'splash',
|
|
'auth',
|
|
'search',
|
|
'mapping',
|
|
'validation',
|
|
'gallery',
|
|
'generate'
|
|
] as const;
|
|
|
|
export type WizardStep = typeof steps[number];
|
|
|
|
export const currentStepName = derived(
|
|
currentStep,
|
|
($currentStep) => steps[$currentStep]
|
|
);
|
|
|
|
// Progress tracking
|
|
export interface ProgressState {
|
|
stage: string;
|
|
current: number;
|
|
total: number;
|
|
message: string;
|
|
}
|
|
|
|
export const progress = writable<ProgressState>({
|
|
stage: '',
|
|
current: 0,
|
|
total: 0,
|
|
message: ''
|
|
});
|