Files
glass/src/admin/settings/useSettings.js
T
houseassassin d4030d9c88 fix: integration fixes from final review
- useSettings: upsert instead of update (safe if migration rows missing)
- invite-admin-user: return created_at and last_sign_in_at in response
- UserManagementPage: clear deleteError when opening new confirmation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 13:14:59 +03:00

46 lines
1.3 KiB
JavaScript

import { useState, useEffect, useCallback } from 'react';
import { supabase } from '../../lib/supabase';
export function useSettings() {
const [prices, setPrices] = useState({ 200: 2000, 300: 3000 });
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
const fetchPrices = useCallback(async () => {
const { data, error } = await supabase
.from('settings')
.select('key, value')
.in('key', ['price_200', 'price_300']);
if (error) {
setError(error.message);
} else if (data) {
const map = {};
data.forEach(({ key, value }) => {
const thickness = parseInt(key.replace('price_', ''), 10);
map[thickness] = Number(value);
});
setPrices((prev) => ({ ...prev, ...map }));
}
setLoading(false);
}, []);
useEffect(() => {
fetchPrices();
}, [fetchPrices]);
const updatePrice = async (key, value) => {
const { error } = await supabase
.from('settings')
.upsert({ key, value: String(value), updated_at: new Date().toISOString() }, { onConflict: 'key' });
if (!error) {
const thickness = parseInt(key.replace('price_', ''), 10);
setPrices((prev) => ({ ...prev, [thickness]: Number(value) }));
}
return { error };
};
return { prices, loading, error, updatePrice };
}