Extract context-menu view component
[arvados-workbench2.git] / src / store / context-menu / context-menu-reducer.ts
index 9a825a5ff7626060b4372c2012f3618d080a4807..69f9c9af703d2d61a8989c59748bf006f834351f 100644 (file)
@@ -2,31 +2,33 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-// import actions, { DetailsPanelAction } from "./details-panel-action";
-// import { Resource, ResourceKind } from "../../models/resource";
+import { ResourceKind } from "../../models/resource";
+import actions, { ContextMenuAction } from "./context-menu-actions";
 
-// export interface ContextMenuState {
-//     position: {
-//         x: number;
-//         y: number;
-//     },
-//     resource: {
-//         uuid: string;
-//         kind: ResourceKind.
-//     }
-// }
+export interface ContextMenuState {
+    position: ContextMenuPosition;
+    resource?: ContextMenuResource;
+}
 
-// const initialState = {
-//     item: null,
-//     isOpened: false
-// };
+export interface ContextMenuPosition {
+    x: number;
+    y: number;
+}
 
-// const reducer = (state: DetailsPanelState = initialState, action: DetailsPanelAction) =>
-//     actions.match(action, {
-//         default: () => state,
-//         LOAD_DETAILS: () => state,
-//         LOAD_DETAILS_SUCCESS: ({ item }) => ({ ...state, item }),
-//         TOGGLE_DETAILS_PANEL: () => ({ ...state, isOpened: !state.isOpened })
-//     });
+export interface ContextMenuResource {
+    uuid: string;
+    kind: ResourceKind;
+}
 
-// export default reducer;
+const initialState = {
+    position: { x: 0, y: 0 }
+};
+
+const reducer = (state: ContextMenuState = initialState, action: ContextMenuAction) =>
+    actions.match(action, {
+        default: () => state,
+        OPEN_CONTEXT_MENU: ({resource, position}) => ({ resource, position }),
+        CLOSE_CONTEXT_MENU: () => ({ position: state.position })
+    });
+
+export default reducer;