From 19988e49ed4f2ea2fa588762de86fa3fc6bff04f Mon Sep 17 00:00:00 2001 From: Max Leiter Date: Tue, 22 Mar 2022 21:18:26 -0700 Subject: [PATCH] server: store and render markdown on server --- .../index.tsx | 3 +- .../document.module.css | 0 .../formatting-icons/index.tsx | 0 .../{document => edit-document}/index.tsx | 28 +--- client/components/new-post/index.tsx | 3 +- client/components/post-list/list-item.tsx | 2 +- client/components/post-page/index.tsx | 12 +- client/components/preview/html.tsx | 20 +++ .../components/view-document-list/index.tsx | 22 +++ .../view-document/document.module.css | 41 +++++ client/components/view-document/index.tsx | 133 +++++++++++++++++ client/lib/render-markdown.tsx | 1 + client/lib/types.d.ts | 3 +- client/pages/index.tsx | 2 +- server/config/config.json | 18 +++ .../20220323033259-postAddHtmlColumn.js | 27 ++++ server/package.json | 9 +- server/src/lib/models/File.ts | 3 + server/src/lib/render-markdown.tsx | 141 ++++++++++++++++++ server/src/routes/posts.ts | 22 ++- server/src/server.ts | 2 +- server/tsconfig.json | 1 + server/yarn.lock | 80 +++++++++- 23 files changed, 536 insertions(+), 37 deletions(-) rename client/components/{document-list => edit-document-list}/index.tsx (92%) rename client/components/{document => edit-document}/document.module.css (100%) rename client/components/{document => edit-document}/formatting-icons/index.tsx (100%) rename client/components/{document => edit-document}/index.tsx (83%) create mode 100644 client/components/preview/html.tsx create mode 100644 client/components/view-document-list/index.tsx create mode 100644 client/components/view-document/document.module.css create mode 100644 client/components/view-document/index.tsx create mode 100644 server/config/config.json create mode 100644 server/migrations/20220323033259-postAddHtmlColumn.js create mode 100644 server/src/lib/render-markdown.tsx diff --git a/client/components/document-list/index.tsx b/client/components/edit-document-list/index.tsx similarity index 92% rename from client/components/document-list/index.tsx rename to client/components/edit-document-list/index.tsx index 7ad88007..49144473 100644 --- a/client/components/document-list/index.tsx +++ b/client/components/edit-document-list/index.tsx @@ -1,5 +1,5 @@ import type { Document } from "@lib/types" -import DocumentComponent from "@components/document" +import DocumentComponent from "@components/edit-document" import { ChangeEvent, memo, useCallback } from "react" const DocumentList = ({ docs, removeDoc, updateDocContent, updateDocTitle }: { @@ -18,7 +18,6 @@ const DocumentList = ({ docs, removeDoc, updateDocContent, updateDocTitle }: { void title?: string content?: string setTitle?: (title: string) => void @@ -22,7 +20,7 @@ type Props = { handleOnContentChange?: (e: ChangeEvent) => void initialTab?: "edit" | "preview" skeleton?: boolean - id?: string + remove?: () => void } const DownloadButton = ({ rawLink }: { rawLink?: string }) => { @@ -53,7 +51,7 @@ const DownloadButton = ({ rawLink }: { rawLink?: string }) => { } -const Document = ({ remove, editable, title, content, setTitle, setContent, initialTab = 'edit', skeleton, id, handleOnContentChange }: Props) => { +const Document = ({ remove, title, content, setTitle, setContent, initialTab = 'edit', skeleton, handleOnContentChange }: Props) => { const codeEditorRef = useRef(null) const [tab, setTab] = useState(initialTab) // const height = editable ? "500px" : '100%' @@ -68,8 +66,7 @@ const Document = ({ remove, editable, title, content, setTitle, setContent, init const onTitleChange = useCallback((event: ChangeEvent) => setTitle ? setTitle(event.target.value) : null, [setTitle]) - const removeFile = useCallback((remove?: () => void) => { - console.log(remove) + const removeFile = useCallback((remove?: () => void) => () => { if (remove) { if (content && content.trim().length > 0) { const confirmed = window.confirm("Are you sure you want to remove this file?") @@ -82,19 +79,13 @@ const Document = ({ remove, editable, title, content, setTitle, setContent, init } }, [content]) - const rawLink = () => { - if (id) { - return `/file/raw/${id}` - } - } - if (skeleton) { return <>
- {editable && } + {remove && }
@@ -118,17 +109,15 @@ const Document = ({ remove, editable, title, content, setTitle, setContent, init size={1.2} font={1.2} label="Filename" - disabled={!editable} width={"100%"} id={title} /> - {remove && editable &&
- {tab === 'edit' && editable && } - {rawLink && id && } + {tab === 'edit' && } - + {/* */}
*/} +
+