🚀 Initial commit: Versão atual do TrackSteel APP
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
|
||||
import { useState, useEffect } from 'react';
|
||||
import { supabase } from '@/integrations/supabase/client';
|
||||
import { toast } from 'sonner';
|
||||
|
||||
interface BrandSettings {
|
||||
company_name: string;
|
||||
logo_url: string | null;
|
||||
font_family: string;
|
||||
}
|
||||
|
||||
export const useBrandSettings = () => {
|
||||
const [brandSettings, setBrandSettings] = useState<BrandSettings>({
|
||||
company_name: 'TrackSteel',
|
||||
logo_url: null,
|
||||
font_family: 'Arial'
|
||||
});
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
|
||||
const loadBrandSettings = async () => {
|
||||
try {
|
||||
console.log('Loading brand settings...');
|
||||
const { data, error } = await supabase
|
||||
.from('brand_settings')
|
||||
.select('*')
|
||||
.limit(1)
|
||||
.maybeSingle();
|
||||
|
||||
if (error) {
|
||||
console.error('Error loading brand settings:', error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (data) {
|
||||
console.log('Brand settings loaded:', data);
|
||||
setBrandSettings({
|
||||
company_name: data.company_name || 'TrackSteel',
|
||||
logo_url: data.logo_url,
|
||||
font_family: data.font_family || 'Arial'
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error loading brand settings:', error);
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
const saveBrandSettings = async (settings: BrandSettings) => {
|
||||
try {
|
||||
console.log('Saving brand settings:', settings);
|
||||
|
||||
// First, check if there's already a record
|
||||
const { data: existingData } = await supabase
|
||||
.from('brand_settings')
|
||||
.select('id')
|
||||
.limit(1)
|
||||
.maybeSingle();
|
||||
|
||||
let result;
|
||||
if (existingData) {
|
||||
// Update existing record
|
||||
result = await supabase
|
||||
.from('brand_settings')
|
||||
.update({
|
||||
company_name: settings.company_name,
|
||||
logo_url: settings.logo_url,
|
||||
font_family: settings.font_family,
|
||||
updated_at: new Date().toISOString()
|
||||
})
|
||||
.eq('id', existingData.id)
|
||||
.select()
|
||||
.single();
|
||||
} else {
|
||||
// Insert new record
|
||||
result = await supabase
|
||||
.from('brand_settings')
|
||||
.insert({
|
||||
company_name: settings.company_name,
|
||||
logo_url: settings.logo_url,
|
||||
font_family: settings.font_family
|
||||
})
|
||||
.select()
|
||||
.single();
|
||||
}
|
||||
|
||||
if (result.error) {
|
||||
console.error('Error saving brand settings:', result.error);
|
||||
toast.error('Erro ao salvar configurações: ' + result.error.message);
|
||||
return { error: result.error };
|
||||
}
|
||||
|
||||
console.log('Brand settings saved successfully:', result.data);
|
||||
setBrandSettings(settings);
|
||||
toast.success('Configurações salvas com sucesso!');
|
||||
return { data: result.data };
|
||||
} catch (error) {
|
||||
console.error('Error saving brand settings:', error);
|
||||
toast.error('Erro ao salvar configurações');
|
||||
return { error };
|
||||
}
|
||||
};
|
||||
|
||||
const uploadLogo = async (file: File) => {
|
||||
try {
|
||||
console.log('Uploading logo file:', file.name);
|
||||
|
||||
// Generate unique filename
|
||||
const fileExt = file.name.split('.').pop();
|
||||
const fileName = `logo-${Date.now()}.${fileExt}`;
|
||||
|
||||
const { data, error } = await supabase.storage
|
||||
.from('brand-assets')
|
||||
.upload(fileName, file, {
|
||||
cacheControl: '3600',
|
||||
upsert: true
|
||||
});
|
||||
|
||||
if (error) {
|
||||
console.error('Error uploading logo:', error);
|
||||
toast.error('Erro ao fazer upload do logo: ' + error.message);
|
||||
return { error };
|
||||
}
|
||||
|
||||
// Get public URL
|
||||
const { data: { publicUrl } } = supabase.storage
|
||||
.from('brand-assets')
|
||||
.getPublicUrl(fileName);
|
||||
|
||||
console.log('Logo uploaded successfully. Public URL:', publicUrl);
|
||||
return { data: { publicUrl, path: data.path } };
|
||||
} catch (error) {
|
||||
console.error('Error uploading logo:', error);
|
||||
toast.error('Erro ao fazer upload do logo');
|
||||
return { error };
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
loadBrandSettings();
|
||||
}, []);
|
||||
|
||||
return {
|
||||
brandSettings,
|
||||
setBrandSettings,
|
||||
loadBrandSettings,
|
||||
saveBrandSettings,
|
||||
uploadLogo,
|
||||
isLoading
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user