dressed_for_succes_store/frontend/lib/settings.ts

140 lines
4.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import api from './api';
// Интерфейсы для настроек
export interface SiteSetting {
key: string;
value: any;
description?: string;
}
export interface StoreSetting {
site_name: string;
site_description: string;
contact_email: string;
contact_phone?: string;
address?: string;
social_links?: {
facebook?: string;
instagram?: string;
twitter?: string;
youtube?: string;
};
currency: string;
currency_symbol: string;
default_language: string;
available_languages: string[];
logo_url?: string;
favicon_url?: string;
primary_color?: string;
secondary_color?: string;
shipping_methods: Array<{
id: string;
name: string;
description?: string;
price: number;
is_default?: boolean;
}>;
payment_methods: Array<{
id: string;
name: string;
description?: string;
is_default?: boolean;
}>;
}
export interface LocaleData {
[key: string]: string | LocaleData;
}
// Сервис для работы с настройками магазина
const settingsService = {
// Получить настройки магазина
getStoreSettings: async (): Promise<StoreSetting | null> => {
try {
const response = await api.get<StoreSetting>('/settings/store');
return response as StoreSetting;
} catch (error) {
console.error('Ошибка при получении настроек магазина:', error);
return null;
}
},
// Обновить настройки магазина (только для админов)
updateStoreSettings: async (settings: Partial<StoreSetting>): Promise<StoreSetting | null> => {
try {
const response = await api.put<StoreSetting>('/settings/store', settings);
return response as StoreSetting;
} catch (error) {
console.error('Ошибка при обновлении настроек магазина:', error);
return null;
}
},
// Получить все настройки по группе
getSettingsByGroup: async (group: string): Promise<SiteSetting[] | null> => {
try {
const response = await api.get<SiteSetting[]>(`/settings/${group}`);
return response as SiteSetting[];
} catch (error) {
console.error(`Ошибка при получении настроек группы ${group}:`, error);
return null;
}
},
// Получить настройку по ключу
getSettingByKey: async (key: string): Promise<SiteSetting | null> => {
try {
const response = await api.get<SiteSetting>(`/settings/key/${key}`);
return response as SiteSetting;
} catch (error) {
console.error(`Ошибка при получении настройки ${key}:`, error);
return null;
}
},
// Обновить настройку (только для админов)
updateSetting: async (key: string, value: any): Promise<SiteSetting | null> => {
try {
const response = await api.put<SiteSetting>(`/settings/key/${key}`, { value });
return response as SiteSetting;
} catch (error) {
console.error(`Ошибка при обновлении настройки ${key}:`, error);
return null;
}
},
// Получить данные локализации для указанного языка
getLocale: async (lang: string): Promise<LocaleData | null> => {
try {
const response = await api.get<LocaleData>(`/settings/locales/${lang}`);
return response as LocaleData;
} catch (error) {
console.error(`Ошибка при получении локализации для языка ${lang}:`, error);
return null;
}
},
// Получить список доступных языков
getAvailableLanguages: async (): Promise<string[] | null> => {
try {
const response = await api.get<string[]>('/settings/languages');
return response as string[];
} catch (error) {
console.error('Ошибка при получении списка доступных языков:', error);
return null;
}
},
// Форматирование цены с использованием правильной валюты
formatPrice: (price: number, settings?: StoreSetting): string => {
const defaultCurrency = settings?.currency_symbol || '₽';
// Форматируем число с двумя десятичными знаками
const formattedPrice = price.toFixed(2).replace(/\.00$/, '');
// Возвращаем форматированную цену с символом валюты
return `${formattedPrice} ${defaultCurrency}`;
}
};
export default settingsService;