From 3d0ce6ea277da858a6bd2015d33a679bde688287 Mon Sep 17 00:00:00 2001 From: sawka Date: Thu, 23 Feb 2023 09:21:37 -0800 Subject: [PATCH] add close button, refactor bookmarksview to new file --- src/bookmarks.tsx | 207 ++++++++++++++++++++++++++++++++++++++++++++++ src/main.tsx | 187 +---------------------------------------- src/sh2.less | 14 ++++ 3 files changed, 222 insertions(+), 186 deletions(-) create mode 100644 src/bookmarks.tsx diff --git a/src/bookmarks.tsx b/src/bookmarks.tsx new file mode 100644 index 00000000..075df0a4 --- /dev/null +++ b/src/bookmarks.tsx @@ -0,0 +1,207 @@ +import * as React from "react"; +import * as mobxReact from "mobx-react"; +import * as mobx from "mobx"; +import {sprintf} from "sprintf-js"; +import {boundMethod} from "autobind-decorator"; +import {v4 as uuidv4} from "uuid"; +import dayjs from "dayjs"; +import {If, For, When, Otherwise, Choose} from "tsx-control-statements/components"; +import cn from "classnames"; +import type {BookmarkType} from "./types"; +import {GlobalModel, GlobalCommandRunner} from "./model"; +import ReactMarkdown from 'react-markdown' +import remarkGfm from 'remark-gfm' + +function LinkRenderer(props : any) : any { + let newUrl = "https://extern?" + encodeURIComponent(props.href); + return {props.children} +} + +function HeaderRenderer(props : any, hnum : number) : any { + return ( +
{props.children}
+ ); +} + +function CodeRenderer(props : any) : any { + return ( + {props.children} + ); +} + +@mobxReact.observer +class Bookmark extends React.Component<{bookmark : BookmarkType}, {}> { + @boundMethod + handleDeleteClick() : void { + let {bookmark} = this.props; + let model = GlobalModel.bookmarksModel; + model.handleDeleteBookmark(bookmark.bookmarkid); + } + + @boundMethod + handleEditClick() : void { + let {bookmark} = this.props; + let model = GlobalModel.bookmarksModel; + model.handleEditBookmark(bookmark.bookmarkid); + } + + @boundMethod + handleEditCancel() : void { + let model = GlobalModel.bookmarksModel; + model.cancelEdit(); + return; + } + + @boundMethod + handleEditUpdate() : void { + let model = GlobalModel.bookmarksModel; + model.confirmEdit(); + return; + } + + @boundMethod + handleDescChange(e : any) : void { + let model = GlobalModel.bookmarksModel; + mobx.action(() => { + model.tempDesc.set(e.target.value); + })(); + } + + @boundMethod + handleCmdChange(e : any) : void { + let model = GlobalModel.bookmarksModel; + mobx.action(() => { + model.tempCmd.set(e.target.value); + })(); + } + + @boundMethod + handleClick() : void { + let {bookmark} = this.props; + let model = GlobalModel.bookmarksModel; + model.selectBookmark(bookmark.bookmarkid); + } + + @boundMethod + handleUse() : void { + let {bookmark} = this.props; + let model = GlobalModel.bookmarksModel; + model.useBookmark(bookmark.bookmarkid); + } + + render() { + let bm = this.props.bookmark; + let model = GlobalModel.bookmarksModel; + let isSelected = (model.activeBookmark.get() == bm.bookmarkid); + let markdown = bm.description ?? ""; + let markdownComponents = { + a: LinkRenderer, + h1: (props) => HeaderRenderer(props, 1), + h2: (props) => HeaderRenderer(props, 2), + h3: (props) => HeaderRenderer(props, 3), + h4: (props) => HeaderRenderer(props, 4), + h5: (props) => HeaderRenderer(props, 5), + h6: (props) => HeaderRenderer(props, 6), + code: CodeRenderer, + }; + let hasDesc = markdown != ""; + let isEditing = (model.editingBookmark.get() == bm.bookmarkid); + if (isEditing) { + return ( +
+
+
+
+ +
+