import _ from "lodash"; import React, { FunctionComponent } from "react"; import { QueryHookResult } from "react-apollo-hooks"; import { FindScenesQuery, FindScenesVariables, SlimSceneDataFragment } from "../../core/generated-graphql"; import { ListHook } from "../../hooks/ListHook"; import { IBaseProps } from "../../models/base-props"; import { ListFilterModel } from "../../models/list-filter/filter"; import { DisplayMode, FilterMode } from "../../models/list-filter/types"; import { WallPanel } from "../Wall/WallPanel"; import { SceneCard } from "./SceneCard"; import { SceneListTable } from "./SceneListTable"; import { SceneSelectedOptions } from "./SceneSelectedOptions"; interface ISceneListProps extends IBaseProps {} export const SceneList: FunctionComponent = (props: ISceneListProps) => { const listData = ListHook.useList({ filterMode: FilterMode.Scenes, props, zoomable: true, renderContent, renderSelectedOptions }); function renderSelectedOptions(result: QueryHookResult, selectedIds: Set) { // find the selected items from the ids if (!result.data || !result.data.findScenes) { return undefined; } var scenes = result.data.findScenes.scenes; var selectedScenes : SlimSceneDataFragment[] = []; selectedIds.forEach((id) => { var scene = scenes.find((scene) => { return scene.id === id; }); if (scene) { selectedScenes.push(scene); } }); return ( <> { return; }}/> ); } function renderSceneCard(scene : SlimSceneDataFragment, selectedIds: Set, zoomIndex: number) { return ( listData.onSelectChange(scene.id, selected, shiftKey)} /> ) } function renderContent(result: QueryHookResult, filter: ListFilterModel, selectedIds: Set, zoomIndex: number) { if (!result.data || !result.data.findScenes) { return; } if (filter.displayMode === DisplayMode.Grid) { return (
{result.data.findScenes.scenes.map((scene) => renderSceneCard(scene, selectedIds, zoomIndex))}
); } else if (filter.displayMode === DisplayMode.List) { return ; } else if (filter.displayMode === DisplayMode.Wall) { return ; } } return listData.template; };