BuildingDetails
Renders a tabbed detail view for a building record. Supports viewing, editing, and creating buildings with fields organized into sections like general info, units, energy, environmental, and attached files. Exposes a saveChanges method via forwardRef for parent-controlled saves.
Usage
import BuildingDetails, { BuildingDetailsRef } from '@collabdt/core/components/viewers/Data/buildingDetails/BuildingDetails';
const detailsRef = React.useRef<BuildingDetailsRef>(null);
<BuildingDetails
ref={detailsRef}
selectedItem={building}
setSelectedItem={setBuilding}
editing={isEditing}
setEditing={setIsEditing}
setActiveChanges={setHasChanges}
activeTab="general"
setActiveTab={setActiveTab}
/>
// Trigger save from parent
await detailsRef.current?.saveChanges();
Props
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
selectedItem | Building | No | — | The building record to display or edit. |
setSelectedItem | (building: Building) => void | No | — | Callback to update the selected building in parent state. |
editing | boolean | No | false | Whether the component is in edit mode. |
setEditing | (editing: boolean) => void | No | — | Callback to toggle edit mode. |
setActiveChanges | (editing: boolean) => void | No | — | Callback to signal unsaved changes exist. |
buildings | Building[] | No | — | |
activeTab | string | No | — | The currently active tab key. |
setActiveTab | (tab: string) => void | No | () => {} | Callback when tab selection changes. |
Ref Methods
| Method | Signature | Description |
|---|---|---|
saveChanges | () => Promise<void> | Persists edits—creates new buildings (ID < 0) or updates existing ones. |
Behaviour
- Tab navigation: Sections are derived from
useBuildingHeaders(). Clicking a tab updatesactiveTaband renders the corresponding fields. - Edit mode: When
editingis true, fields render as inputs viaFieldRenderer. Changes are tracked in localeditingValuesstate and surfaced to the parent viasetActiveChanges. - New building flow: If
selectedItem.id < 0, the component auto-enables edit mode and callscreateBuildingon save. - File handling: Attached files are fetched via
useFilesByBuildingIdand organized by tag into relational properties (e.g.buildingMaintenanceRecords). File uploads trigger SWR revalidation. - Loading/error states: Uses
handleApiErrorto surface hook errors as toasts. Shows a loading spinner inTabSidebarwhen files are loading. - Optimistic updates: After save,
selectedItemis updated locally with the API response before SWR revalidates.
Permissions
Editing controls are gated by CASL. The FieldRenderer disables inputs when the user lacks update permission.
{ability.can("update", "Building") && <input ... />}
Related
- AddBuilding — Dialog for initiating new building creation
- FieldRenderer — Renders individual form fields based on type
- useBuilding / useCreateBuilding — Data fetching and mutation hooks
- Building data model — Prisma schema and type definitions