diff --git a/src/lib/api.ts b/src/lib/api.ts index 37d507f..576dbc2 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -1655,6 +1655,17 @@ export interface WidgetConfig { currency: string rooms: WidgetRoom[] categories: WidgetCategory[] + widgetSettings?: { + primaryColor: string + language: string + roomDisplayMode: string + minNights: number + showRental: boolean + showPromo: boolean + allowExtraBeds: boolean + allowChildren: boolean + hotelName: string + } } export interface WidgetBookingPayload { diff --git a/src/pages/BookingWidgetStandalonePage.tsx b/src/pages/BookingWidgetStandalonePage.tsx index 26fea2b..9e8d9c7 100644 --- a/src/pages/BookingWidgetStandalonePage.tsx +++ b/src/pages/BookingWidgetStandalonePage.tsx @@ -8,19 +8,24 @@ export function BookingWidgetStandalonePage() { const { slug } = useParams<{ slug: string }>() const [searchParams] = useSearchParams() - const color = searchParams.get('color') ?? '#4F46E5' - const lang = (searchParams.get('lang') ?? 'ru') as 'ru' | 'en' - const mode = (searchParams.get('mode') ?? 'rooms') as 'rooms' | 'categories' - const minNights = parseInt(searchParams.get('min-nights') ?? '1') || 1 - const showRental = searchParams.get('rental') === 'true' - const showPromo = searchParams.get('promo') !== 'false' - const extraBeds = searchParams.get('extra-beds') !== 'false' - const children = searchParams.get('children') !== 'false' - const [realRooms, setRealRooms] = useState([]) const [realCategories, setRealCategories] = useState([]) - const [hotelName, setHotelName] = useState('') const [paymentEnabled, setPaymentEnabled] = useState(undefined) + const [settings, setSettings] = useState({ + hotelName: '', + primaryColor: searchParams.get('color') ?? '#4F46E5', + language: (searchParams.get('lang') ?? 'ru') as 'ru' | 'en', + showRooms: true, + showRental: searchParams.get('rental') === 'true', + roomDisplayMode: (searchParams.get('mode') ?? 'rooms') as 'rooms' | 'categories', + minNights: parseInt(searchParams.get('min-nights') ?? '1') || 1, + paymentProvider: 'yukassa', + showPromo: searchParams.get('promo') !== 'false', + allowExtraBeds: searchParams.get('extra-beds') !== 'false', + allowChildren: searchParams.get('children') !== 'false', + formFields: DEFAULT_FORM_FIELDS, + additionalServices: DEFAULT_SERVICES, + }) useEffect(() => { if (!slug) return @@ -28,28 +33,28 @@ export function BookingWidgetStandalonePage() { .then(config => { setRealRooms(config.rooms ?? []) setRealCategories(config.categories ?? []) - setHotelName(config.hotelName ?? '') setPaymentEnabled(config.paymentEnabled) + if (config.widgetSettings) { + const ws = config.widgetSettings + setSettings(prev => ({ + ...prev, + hotelName: ws.hotelName ?? config.hotelName ?? prev.hotelName, + primaryColor: ws.primaryColor ?? prev.primaryColor, + language: (ws.language ?? prev.language) as 'ru' | 'en', + roomDisplayMode: (ws.roomDisplayMode ?? prev.roomDisplayMode) as 'rooms' | 'categories', + minNights: ws.minNights ?? prev.minNights, + showRental: ws.showRental ?? prev.showRental, + showPromo: ws.showPromo ?? prev.showPromo, + allowExtraBeds: ws.allowExtraBeds ?? prev.allowExtraBeds, + allowChildren: ws.allowChildren ?? prev.allowChildren, + })) + } else { + setSettings(prev => ({ ...prev, hotelName: config.hotelName ?? prev.hotelName })) + } }) .catch(() => {}) }, [slug]) - const settings: WidgetSettings = { - hotelName, - primaryColor: color, - language: lang, - showRooms: true, - showRental, - roomDisplayMode: mode, - minNights, - paymentProvider: 'yukassa', - showPromo, - allowExtraBeds: extraBeds, - allowChildren: children, - formFields: DEFAULT_FORM_FIELDS, - additionalServices: DEFAULT_SERVICES, - } - return (