win-superpower2 / state.js
Ultronprime's picture
Update state.js
e6e9d7a verified
raw
history blame
2.8 kB
// state.js - Manages Application State with Supabase
import { supabase } from './supabaseClient.js';
import { MATERIALS_CONFIG, RECIPES_CONFIG } from './config.js';
import { showToast } from './ui.js';
export let appState = {
user: null, // To store the logged-in user
materials: [],
productRecipes: RECIPES_CONFIG,
productionLog: []
};
// Helper function to convert database material format to app format
function dbMaterialToAppMaterial(dbMaterial) {
return {
id: dbMaterial.id,
name: dbMaterial.name,
unit: dbMaterial.unit,
currentStock: dbMaterial.current_stock,
reorderPoint: dbMaterial.reorder_point
};
}
// Function to load initial application state from Supabase
export async function loadInitialAppState() {
try {
const { data: { user } } = await supabase.auth.getUser();
if (!user) throw new Error("User not authenticated.");
appState.user = user;
const { data: materials, error: materialsError } = await supabase
.from('materials')
.select('*')
.order('name', { ascending: true });
if (materialsError) throw materialsError;
const { data: productionLog, error: logError } = await supabase
.from('production_log')
.select('*')
.order('produced_at', { ascending: false })
.limit(100); // Get latest 100 logs
if (logError) throw logError;
// If no materials in DB, initialize from config (first time setup)
if (materials.length === 0 && MATERIALS_CONFIG.length > 0) {
showToast('No materials found. Initializing from config...', 'info');
const { data: insertedMaterials, error: insertError } = await supabase
.from('materials')
.insert(MATERIALS_CONFIG.map(m => ({
name: m.name,
unit: m.unit,
current_stock: m.currentStock,
reorder_point: m.reorderPoint
})))
.select();
if (insertError) throw insertError;
appState.materials = insertedMaterials.map(dbMaterialToAppMaterial);
} else {
appState.materials = materials.map(dbMaterialToAppMaterial);
}
appState.productionLog = productionLog.map(log => ({
id: log.id,
productName: log.product_name,
quantity: log.quantity,
date: log.produced_at
}));
console.log('App state loaded successfully from Supabase.');
return true;
} catch (error) {
console.error('Error loading app state:', error.message);
showToast(`Failed to load data: ${error.message}`, 'error');
return false;
}
}