import { useState } from "react"; import type { Entity } from "@/types/entities"; import type { FeatureId } from "@/types/geo"; import { DEFAULT_ENTITY_TYPE_ID } from "@/lib/entityTypeOptions"; import type { CreatedEntitySummary, EntityFormState, GeometryMetaFormState, PendingEntityCreate, } from "@/lib/editor/session/sessionTypes"; export function useEntitySessionState() { // Entities đã persisted từ backend (dùng cho search/binding). const [persistedEntities, setPersistedEntities] = useState([]); // Entities tạo mới trong phiên nhưng chưa commit lên backend. const [pendingEntityCreates, setPendingEntityCreates] = useState([]); // Tóm tắt entities đã tạo (để hiển thị nhanh ở sidebar). const [createdEntities, setCreatedEntities] = useState([]); // Thông báo trạng thái/lỗi liên quan entity/session. const [entityStatus, setEntityStatus] = useState(null); // Feature đang được chọn để thao tác bind entities/metadata. const [selectedFeatureId, setSelectedFeatureId] = useState(null); // Form tạo entity mới (độc lập). const [entityForm, setEntityForm] = useState({ name: "", slug: "", type_id: DEFAULT_ENTITY_TYPE_ID, }); // Danh sách entity IDs đang chọn để bind vào geometry hiện tại. const [selectedGeometryEntityIds, setSelectedGeometryEntityIds] = useState([]); // Form metadata geometry (time range + binding ids). const [geometryMetaForm, setGeometryMetaForm] = useState({ time_start: "", time_end: "", binding: "", }); // Cờ loading khi apply entity/metadata (local submit). const [isEntitySubmitting, setIsEntitySubmitting] = useState(false); // Thông báo trạng thái/lỗi cho form entity/metadata. const [entityFormStatus, setEntityFormStatus] = useState(null); // Keyword search entity theo name. const [entitySearchQuery, setEntitySearchQuery] = useState(""); // Kết quả search entity để user chọn. const [entitySearchResults, setEntitySearchResults] = useState([]); // Entity ID đang được chọn trong dropdown kết quả search. const [selectedSearchEntityId, setSelectedSearchEntityId] = useState(null); // Cờ loading khi search entity. const [isEntitySearchLoading, setIsEntitySearchLoading] = useState(false); return { persistedEntities, setPersistedEntities, pendingEntityCreates, setPendingEntityCreates, createdEntities, setCreatedEntities, entityStatus, setEntityStatus, selectedFeatureId, setSelectedFeatureId, entityForm, setEntityForm, selectedGeometryEntityIds, setSelectedGeometryEntityIds, geometryMetaForm, setGeometryMetaForm, isEntitySubmitting, setIsEntitySubmitting, entityFormStatus, setEntityFormStatus, entitySearchQuery, setEntitySearchQuery, entitySearchResults, setEntitySearchResults, selectedSearchEntityId, setSelectedSearchEntityId, isEntitySearchLoading, setIsEntitySearchLoading, }; }