import { action, computed, observable } from "mobx"; import { extname } from 'path'; import { observer } from "mobx-react"; import * as React from 'react'; import { Doc, DocListCast } from "../../fields/Doc"; import { Id } from "../../fields/FieldSymbols"; import { Cast, ImageCast, StrCast } from "../../fields/Types"; import { CurrentUserUtils } from "../util/CurrentUserUtils"; import { UndoManager } from "../util/UndoManager"; import "./DashboardView.scss" import { MainViewModal } from "./MainViewModal"; import { ContextMenu } from "./ContextMenu"; import { DocumentManager } from "../util/DocumentManager"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { ContextMenuProps } from "./ContextMenuItem"; import { simulateMouseClick } from "../../Utils"; enum DashboardGroup { MyDashboards, SharedDashboards } // DashboardView is the view with the dashboard previews, rendered when the app first loads @observer export class DashboardView extends React.Component { //TODO: delete dashboard, share dashboard, etc. @observable private selectedDashboardGroup = DashboardGroup.MyDashboards; @observable private newDashboardName: string | undefined = undefined; @action abortCreateNewDashboard = () => { this.newDashboardName = undefined } @action setNewDashboardName(name: string) { this.newDashboardName = name } @action selectDashboardGroup = (group: DashboardGroup) => { this.selectedDashboardGroup = group } clickDashboard = async (e: React.MouseEvent, dashboard: Doc) => { if (e.detail === 2) { Doc.UserDoc().activeDashboard = dashboard; Doc.UserDoc().activePage = "dashboard"; } } getDashboards = () => { const allDashboards = DocListCast(CurrentUserUtils.MyDashboards.data); if (this.selectedDashboardGroup === DashboardGroup.MyDashboards) { return allDashboards.filter((dashboard) => Doc.GetProto(dashboard).author === Doc.CurrentUserEmail) } else { return allDashboards.filter((dashboard) => Doc.GetProto(dashboard).author !== Doc.CurrentUserEmail) } } createNewDashboard = async (name: string) => { const batch = UndoManager.StartBatch("new dash"); await CurrentUserUtils.createNewDashboard(Doc.UserDoc(), undefined, name); batch.end(); this.abortCreateNewDashboard(); } onContextMenu = (e: React.MouseEvent): void => { ContextMenu.Instance.addItem({ description: "Share Dashboard", event: async () => { // ... }, icon: "edit" }); ContextMenu.Instance.addItem({ description: "Delete Dashboard", event: async () => { // ... }, icon: "trash" }); } showContextMenu = (e: React.MouseEvent) => { // DocumentViewInternal.SelectAfterContextMenu = false; // simulateMouseClick(this._docRef?.ContentDiv, e.clientX, e.clientY + 30, e.screenX, e.screenY + 30); // DocumentViewInternal.SelectAfterContextMenu = true; } @computed get namingInterface() { return
this.setNewDashboardName((e.target as any).value)} />
; } render() { return <>
{ this.setNewDashboardName("") }}>New
this.selectDashboardGroup(DashboardGroup.MyDashboards)}>My Dashboards
this.selectDashboardGroup(DashboardGroup.SharedDashboards)}>Shared Dashboards
{this.getDashboards().map((dashboard) => { const href = ImageCast((dashboard.thumb as Doc)?.data)?.url.href; return
this.clickDashboard(e, dashboard)}>
{StrCast(dashboard.title)}
})}
; } }