Fix NetUP settings not loading: snake_case → camelCase (transformKeys)

req() auto-converts server_url→serverUrl, default_language→defaultLanguage,
netup_room_number→netupRoomNumber. Fixed both type declarations and component reads.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-18 18:39:01 +03:00
parent cc5f9c18d3
commit 05d0c94a9a
2 changed files with 8 additions and 8 deletions

View File

@@ -269,7 +269,7 @@ export const api = {
// ── NetUP IPTV ──────────────────────────────────────────────────────────── // ── NetUP IPTV ────────────────────────────────────────────────────────────
netup: { netup: {
getSettings: (slug: string) => getSettings: (slug: string) =>
req<{ server_url: string; username: string; password: string; default_language: string; enabled: boolean }>( req<{ serverUrl: string; username: string; password: string; defaultLanguage: string; enabled: boolean }>(
'GET', `/api/hotels/${slug}/netup/settings`), 'GET', `/api/hotels/${slug}/netup/settings`),
saveSettings: (slug: string, data: { server_url: string; username: string; password?: string; default_language: string; enabled: boolean }) => saveSettings: (slug: string, data: { server_url: string; username: string; password?: string; default_language: string; enabled: boolean }) =>
@@ -279,7 +279,7 @@ export const api = {
req<{ ok: boolean; message: string }>('POST', `/api/hotels/${slug}/netup/test`), req<{ ok: boolean; message: string }>('POST', `/api/hotels/${slug}/netup/test`),
getRoomMappings: (slug: string) => getRoomMappings: (slug: string) =>
req<{ id: string; number: string; type: string; netup_room_number: string }[]>( req<{ id: string; number: string; type: string; netupRoomNumber: string }[]>(
'GET', `/api/hotels/${slug}/netup/rooms`), 'GET', `/api/hotels/${slug}/netup/rooms`),
saveRoomMappings: (slug: string, mappings: { pms_room_id: string; netup_room_number: string }[]) => saveRoomMappings: (slug: string, mappings: { pms_room_id: string; netup_room_number: string }[]) =>

View File

@@ -33,7 +33,7 @@ export function TvWelcomePage() {
const [settingsLoaded, setSettingsLoaded] = useState(false) const [settingsLoaded, setSettingsLoaded] = useState(false)
// Room mappings // Room mappings
const [rooms, setRooms] = useState<{ id: string; number: string; type: string; netup_room_number: string }[]>([]) const [rooms, setRooms] = useState<{ id: string; number: string; type: string; netupRoomNumber: string }[]>([])
const [roomsSaving, setRoomsSaving] = useState(false) const [roomsSaving, setRoomsSaving] = useState(false)
const [roomsSaved, setRoomsSaved] = useState(false) const [roomsSaved, setRoomsSaved] = useState(false)
@@ -42,9 +42,9 @@ export function TvWelcomePage() {
if (!slug) return if (!slug) return
api.netup.getSettings(slug) api.netup.getSettings(slug)
.then(s => { .then(s => {
setServerUrl(s.server_url) setServerUrl(s.serverUrl)
setUsername(s.username) setUsername(s.username)
setLanguage(s.default_language) setLanguage(s.defaultLanguage)
setEnabled(s.enabled) setEnabled(s.enabled)
setSettingsLoaded(true) setSettingsLoaded(true)
}) })
@@ -103,7 +103,7 @@ export function TvWelcomePage() {
try { try {
await api.netup.saveRoomMappings(slug, rooms.map(r => ({ await api.netup.saveRoomMappings(slug, rooms.map(r => ({
pms_room_id: r.id, pms_room_id: r.id,
netup_room_number: r.netup_room_number, netup_room_number: r.netupRoomNumber,
}))) })))
setRoomsSaved(true) setRoomsSaved(true)
setTimeout(() => setRoomsSaved(false), 2500) setTimeout(() => setRoomsSaved(false), 2500)
@@ -113,7 +113,7 @@ export function TvWelcomePage() {
} }
const updateRoomNetup = (id: string, val: string) => const updateRoomNetup = (id: string, val: string) =>
setRooms(prev => prev.map(r => r.id === id ? { ...r, netup_room_number: val } : r)) setRooms(prev => prev.map(r => r.id === id ? { ...r, netupRoomNumber: val } : r))
return ( return (
<div className="p-6 max-w-3xl mx-auto space-y-6"> <div className="p-6 max-w-3xl mx-auto space-y-6">
@@ -328,7 +328,7 @@ export function TvWelcomePage() {
<td className="px-5 py-3"> <td className="px-5 py-3">
<input <input
type="text" type="text"
value={room.netup_room_number} value={room.netupRoomNumber}
onChange={e => updateRoomNetup(room.id, e.target.value)} onChange={e => updateRoomNetup(room.id, e.target.value)}
placeholder="Не задан" placeholder="Не задан"
className="input py-1.5 w-36 text-sm" className="input py-1.5 w-36 text-sm"