import * as React from 'react'; import * as ReactDOM from 'react-dom'; import { observable, action, configure, reaction, computed, ObservableMap, runInAction } from 'mobx'; import { observer } from "mobx-react"; import * as request from 'request' import './WorkspacesMenu.css' export interface WorkspaceMenuProps { active: string; load: (workspaceId: string) => void; new: () => string; } @observer export class WorkspacesMenu extends React.Component { static Instance: WorkspacesMenu; @observable private workspacesExposed: boolean = false; @observable private workspaceIds: Array = []; @observable private selectedWorkspaceId: string = ""; constructor(props: WorkspaceMenuProps) { super(props); WorkspacesMenu.Instance = this; this.loadExistingWorkspace = this.loadExistingWorkspace.bind(this); this.addNewWorkspace = this.addNewWorkspace.bind(this); this.selectedWorkspaceId = this.props.active; } @action addNewWorkspace() { let newId = this.props.new(); this.selectedWorkspaceId = newId; this.props.load(newId); this.toggle(); // setTimeout(action(() => { // }), 100); } @action loadExistingWorkspace = (e: React.MouseEvent) => { let id = e.currentTarget.innerHTML; this.props.load(id); this.selectedWorkspaceId = id; } @action toggle() { if (this.workspacesExposed) { this.workspacesExposed = !this.workspacesExposed; } else { request.get(window.location.origin + "/getAllWorkspaceIds", this.idCallback) } } @action.bound idCallback: request.RequestCallback = (error, response, body) => { this.workspaceIds = []; let ids: Array = JSON.parse(body) as Array; if (ids) { for (let i = 0; i < ids.length; i++) { this.workspaceIds.push(ids[i]); } this.workspacesExposed = !this.workspacesExposed; } } render() { let p = this.props; return (
{this.workspaceIds.map(s =>
  • {s}
  • )}
    ); } }