Add map empty-state dataset actions
This commit is contained in:
@@ -154,6 +154,10 @@ function App(): JSX.Element {
|
||||
[datasets, selectedDatasetId],
|
||||
)
|
||||
const availableVectorDatasets = useMemo(() => datasets.filter((item) => isVectorDatasetType(item.dataset_type)), [datasets])
|
||||
const availableMapDatasets = useMemo(
|
||||
() => datasets.filter((dataset) => isVectorDatasetType(dataset.dataset_type) && dataset.status === 'ready'),
|
||||
[datasets],
|
||||
)
|
||||
const referenceDatasets = useMemo(
|
||||
() => availableVectorDatasets.filter((item) => item.dataset_role === 'reference'),
|
||||
[availableVectorDatasets],
|
||||
@@ -614,7 +618,9 @@ function App(): JSX.Element {
|
||||
mapFeatureCount={mapFeatureCount}
|
||||
areaFeatureCount={areaFeatureCount}
|
||||
selectedMapFeature={selectedMapFeature}
|
||||
availableMapDatasets={availableMapDatasets}
|
||||
onSelectMapArea={setSelectedMapAreaId}
|
||||
onOpenDatasetInMap={openDatasetInMap}
|
||||
onSetAreaLayerVisible={setAreaLayerVisible}
|
||||
onSetAreaLayerOpacity={setAreaLayerOpacity}
|
||||
onSetMapLayerVisible={setMapLayerVisible}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import GeoMap from '../GeoMap'
|
||||
import type { AreaRead } from '../../types'
|
||||
import type { AreaRead, DatasetCreateResponse } from '../../types'
|
||||
|
||||
interface MapWorkspaceProps {
|
||||
areas: AreaRead[]
|
||||
@@ -16,7 +16,9 @@ interface MapWorkspaceProps {
|
||||
mapFeatureCount: number
|
||||
areaFeatureCount: number
|
||||
selectedMapFeature: GeoJSON.Feature | null
|
||||
availableMapDatasets: DatasetCreateResponse[]
|
||||
onSelectMapArea: (areaId: string) => void
|
||||
onOpenDatasetInMap: (dataset: DatasetCreateResponse) => void
|
||||
onSetAreaLayerVisible: (visible: boolean) => void
|
||||
onSetAreaLayerOpacity: (opacity: number) => void
|
||||
onSetMapLayerVisible: (visible: boolean) => void
|
||||
@@ -39,7 +41,9 @@ export function MapWorkspace({
|
||||
mapFeatureCount,
|
||||
areaFeatureCount,
|
||||
selectedMapFeature,
|
||||
availableMapDatasets,
|
||||
onSelectMapArea,
|
||||
onOpenDatasetInMap,
|
||||
onSetAreaLayerVisible,
|
||||
onSetAreaLayerOpacity,
|
||||
onSetMapLayerVisible,
|
||||
@@ -150,6 +154,21 @@ export function MapWorkspace({
|
||||
<div className="empty-state map-empty-state">
|
||||
<strong>No active vector or result layer</strong>
|
||||
<p>Open a dataset, detection run, segmentation run or change result to draw it here.</p>
|
||||
{availableMapDatasets.length > 0 ? (
|
||||
<>
|
||||
<p className="eyebrow">Open a ready vector dataset</p>
|
||||
<div className="map-empty-action-grid">
|
||||
{availableMapDatasets.map((dataset) => (
|
||||
<button className="secondary-action" key={dataset.id} type="button" onClick={() => onOpenDatasetInMap(dataset)}>
|
||||
<span>{dataset.name}</span>
|
||||
<strong>Open in map</strong>
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</>
|
||||
) : (
|
||||
<p className="muted">No ready vector datasets available yet. Upload or seed a vector dataset first.</p>
|
||||
)}
|
||||
</div>
|
||||
) : null}
|
||||
<GeoMap
|
||||
|
||||
@@ -1190,6 +1190,34 @@ button.entity-card {
|
||||
margin-bottom: 0.85rem;
|
||||
}
|
||||
|
||||
.map-empty-action-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
|
||||
gap: 0.55rem;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
.map-empty-action-grid button {
|
||||
display: grid;
|
||||
min-height: 4.2rem;
|
||||
gap: 0.18rem;
|
||||
margin-top: 0;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.map-empty-action-grid span,
|
||||
.map-empty-action-grid strong {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.map-empty-action-grid span {
|
||||
color: var(--muted);
|
||||
font-size: 0.78rem;
|
||||
font-weight: 650;
|
||||
}
|
||||
|
||||
.export-action-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
|
||||
Reference in New Issue
Block a user