Linking backend data to frontend
This commit is contained in:
@@ -4,39 +4,21 @@ import React, { useState, useEffect } from 'react'
|
||||
import ObjectGallery from '../../../components/objects/ObjectGallery'
|
||||
import { ObjectData } from '../../../components/objects/ObjectCard'
|
||||
import Sidebar from '../../../components/ui/Sidebar'
|
||||
import detectorsData from '../../../data/detectors.json'
|
||||
|
||||
// Интерфейс для данных объекта из JSON
|
||||
interface RawObjectData {
|
||||
name: string
|
||||
title: string
|
||||
description: string
|
||||
image?: string
|
||||
location: string
|
||||
address: string
|
||||
floors: number
|
||||
area: number
|
||||
type?: string
|
||||
status?: string
|
||||
zones: Array<{
|
||||
zone_id: string
|
||||
name: string
|
||||
detectors: number[]
|
||||
}>
|
||||
}
|
||||
|
||||
// Функция для преобразования данных объекта из JSON
|
||||
const transformObjectToObjectData = (objectId: string, objectData: RawObjectData): ObjectData => {
|
||||
// Универсальная функция для преобразования объекта из бэкенда в ObjectData
|
||||
const transformRawToObjectData = (raw: any): ObjectData => {
|
||||
const rawId = raw?.id ?? raw?.object_id ?? raw?.uuid ?? raw?.name
|
||||
const object_id = typeof rawId === 'number' ? `object_${rawId}` : String(rawId ?? '')
|
||||
return {
|
||||
object_id: objectId,
|
||||
title: objectData.title || `Объект ${objectId}`,
|
||||
description: objectData.description || `Описание объекта ${objectData.title || objectId}`,
|
||||
image: objectData.image || '/images/default-object.jpg',
|
||||
location: objectData.location || 'Не указано',
|
||||
floors: objectData.floors,
|
||||
area: objectData.area.toString(),
|
||||
type: objectData.type || 'object',
|
||||
status: objectData.status || 'active'
|
||||
object_id,
|
||||
title: raw?.title ?? `Объект ${object_id}`,
|
||||
description: raw?.description ?? `Описание объекта ${raw?.title ?? object_id}`,
|
||||
image: raw?.image ?? '/images/test_image.png',
|
||||
location: raw?.location ?? raw?.address ?? 'Не указано',
|
||||
floors: Number(raw?.floors ?? 0),
|
||||
area: String(raw?.area ?? ''),
|
||||
type: raw?.type ?? 'object',
|
||||
status: raw?.status ?? 'active',
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,21 +29,37 @@ const ObjectsPage: React.FC = () => {
|
||||
const [selectedObjectId, setSelectedObjectId] = useState<string | null>(null)
|
||||
|
||||
useEffect(() => {
|
||||
const loadData = () => {
|
||||
const loadData = async () => {
|
||||
setLoading(true)
|
||||
setError(null)
|
||||
try {
|
||||
setLoading(true)
|
||||
|
||||
if (detectorsData.objects) {
|
||||
const transformedObjects = Object.entries(detectorsData.objects).map(
|
||||
([objectId, objectData]) => transformObjectToObjectData(objectId, objectData)
|
||||
)
|
||||
setObjects(transformedObjects)
|
||||
} else {
|
||||
throw new Error('Не удалось получить данные объектов')
|
||||
const url = '/api/get-objects'
|
||||
const res = await fetch(url, { cache: 'no-store' })
|
||||
const payloadText = await res.text()
|
||||
let payload: any
|
||||
try { payload = JSON.parse(payloadText) } catch { payload = payloadText }
|
||||
console.log('[ObjectsPage] GET /api/get-objects', { status: res.status, payload })
|
||||
|
||||
if (!res.ok) {
|
||||
throw new Error(typeof payload === 'string' ? payload : (payload?.error || 'Не удалось получить данные объектов'))
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Ошибка при загрузке данных:', err)
|
||||
setError(err instanceof Error ? err.message : 'Произошла неизвестная ошибка')
|
||||
|
||||
const data = (payload?.data ?? payload) as any
|
||||
let rawObjectsArray: any[] = []
|
||||
if (Array.isArray(data)) {
|
||||
rawObjectsArray = data
|
||||
} else if (Array.isArray(data?.objects)) {
|
||||
rawObjectsArray = data.objects
|
||||
} else if (data && typeof data === 'object') {
|
||||
// если приходит как map { id: obj }
|
||||
rawObjectsArray = Object.values(data)
|
||||
}
|
||||
|
||||
const transformedObjects = rawObjectsArray.map(transformRawToObjectData)
|
||||
setObjects(transformedObjects)
|
||||
} catch (err: any) {
|
||||
console.error('Ошибка при загрузке данных объектов:', err)
|
||||
setError(err?.message || 'Произошла неизвестная ошибка')
|
||||
} finally {
|
||||
setLoading(false)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user