Implement base distinction between context menu kind
[arvados-workbench2.git] / src / store / context-menu / context-menu-reducer.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { ResourceKind } from "../../models/resource";
6 import actions, { ContextMenuAction } from "./context-menu-actions";
7
8 export interface ContextMenuState {
9     position: ContextMenuPosition;
10     resource?: ContextMenuResource;
11 }
12
13 export interface ContextMenuPosition {
14     x: number;
15     y: number;
16 }
17
18 export interface ContextMenuResource {
19     uuid: string;
20     kind: ContextMenuKind;
21 }
22
23 export enum ContextMenuKind {
24     RootProject = "RootProject",
25     Project = "Project",
26     Collection = "Collection"
27 }
28
29 const initialState = {
30     position: { x: 0, y: 0 }
31 };
32
33 const reducer = (state: ContextMenuState = initialState, action: ContextMenuAction) =>
34     actions.match(action, {
35         default: () => state,
36         OPEN_CONTEXT_MENU: ({resource, position}) => ({ resource, position }),
37         CLOSE_CONTEXT_MENU: () => ({ position: state.position })
38     });
39
40 export default reducer;