diff --git a/store/db/sqlite/seed/10002__memo.sql b/store/db/sqlite/seed/10002__memo.sql index de27dbb9..2fb84812 100644 --- a/store/db/sqlite/seed/10002__memo.sql +++ b/store/db/sqlite/seed/10002__memo.sql @@ -20,8 +20,7 @@ VALUES '#TODO - [x] Take more photos about **🌄 sunset**; - [x] Clean the room; -- [ ] Read *📖 The Little Prince*; -(👆 click to toggle status)', +- [ ] Read *📖 The Little Prince*;', 101, 'PROTECTED' ); diff --git a/web/src/components/MemoEditor/index.tsx b/web/src/components/MemoEditor/index.tsx index b6b7ff36..a6f80d08 100644 --- a/web/src/components/MemoEditor/index.tsx +++ b/web/src/components/MemoEditor/index.tsx @@ -72,7 +72,6 @@ const MemoEditor = (props: Props) => { useEffect(() => { editorRef.current?.setContent(contentCache || ""); - handleEditorFocus(); }, []); useEffect(() => { diff --git a/web/src/components/MobileHeader.tsx b/web/src/components/MobileHeader.tsx index 7c0688a3..96f64ae7 100644 --- a/web/src/components/MobileHeader.tsx +++ b/web/src/components/MobileHeader.tsx @@ -1,4 +1,6 @@ +import classNames from "classnames"; import { useState } from "react"; +import { useWindowScroll } from "react-use"; import useResponsiveWidth from "@/hooks/useResponsiveWidth"; import NavigationDrawer from "./NavigationDrawer"; @@ -10,9 +12,15 @@ const MobileHeader = (props: Props) => { const { children } = props; const { sm } = useResponsiveWidth(); const [titleText] = useState("MEMOS"); + const { y: offsetTop } = useWindowScroll(); return ( -
+
0 && "shadow-md" + )} + >
{!sm && }
)} -
+
diff --git a/web/src/pages/Archived.tsx b/web/src/pages/Archived.tsx index 2497dec9..e6b94fb1 100644 --- a/web/src/pages/Archived.tsx +++ b/web/src/pages/Archived.tsx @@ -30,24 +30,26 @@ const Archived = () => { }, [memos]); return ( -
+
- {loadingState.isLoading ? ( -
-

{t("memo.fetching-data")}

-
- ) : archivedMemos.length === 0 ? ( -
- -

{t("message.no-data")}

-
- ) : ( -
- {archivedMemos.map((memo) => ( - - ))} -
- )} +
+ {loadingState.isLoading ? ( +
+

{t("memo.fetching-data")}

+
+ ) : archivedMemos.length === 0 ? ( +
+ +

{t("message.no-data")}

+
+ ) : ( +
+ {archivedMemos.map((memo) => ( + + ))} +
+ )} +
); }; diff --git a/web/src/pages/Explore.tsx b/web/src/pages/Explore.tsx index df2cc91f..8a0d55a3 100644 --- a/web/src/pages/Explore.tsx +++ b/web/src/pages/Explore.tsx @@ -54,9 +54,9 @@ const Explore = () => { }; return ( -
+
-
+
{sortedMemos.map((memo) => ( diff --git a/web/src/pages/Home.tsx b/web/src/pages/Home.tsx index 5734a9fd..a23610ca 100644 --- a/web/src/pages/Home.tsx +++ b/web/src/pages/Home.tsx @@ -9,14 +9,16 @@ const Home = () => { const { md } = useResponsiveWidth(); return ( -
-
+
+
{!md && } - - +
+ + +
{md && ( -
+
)} diff --git a/web/src/pages/Inboxes.tsx b/web/src/pages/Inboxes.tsx index 49fb907c..dd209249 100644 --- a/web/src/pages/Inboxes.tsx +++ b/web/src/pages/Inboxes.tsx @@ -20,30 +20,32 @@ const Inboxes = () => { }, []); return ( -
+
-
-
-

- {t("common.inbox")} -

-
-
- {inboxes.length === 0 && ( -
- -

{t("message.no-data")}

+
+
+
+

+ {t("common.inbox")} +

+
+
+ {inboxes.length === 0 && ( +
+ +

{t("message.no-data")}

+
+ )} +
+ {inboxes.map((inbox) => { + if (inbox.type === Inbox_Type.TYPE_MEMO_COMMENT) { + return ; + } else if (inbox.type === Inbox_Type.TYPE_VERSION_UPDATE) { + return ; + } + return undefined; + })}
- )} -
- {inboxes.map((inbox) => { - if (inbox.type === Inbox_Type.TYPE_MEMO_COMMENT) { - return ; - } else if (inbox.type === Inbox_Type.TYPE_VERSION_UPDATE) { - return ; - } - return undefined; - })}
diff --git a/web/src/pages/MemoDetail.tsx b/web/src/pages/MemoDetail.tsx index 2e600bca..bcd1c48e 100644 --- a/web/src/pages/MemoDetail.tsx +++ b/web/src/pages/MemoDetail.tsx @@ -110,114 +110,116 @@ const MemoDetail = () => { }; return ( -
+
-
- {memo.parent && ( -
- - - #{memo.parent.id} - {memo.parent.content} - +
+
+ {memo.parent && ( +
+ + + #{memo.parent.id} + {memo.parent.content} + +
+ )} +
+ {getDateTimeString(memo.displayTs)}
- )} -
- {getDateTimeString(memo.displayTs)} -
- - - -
-
- - #{memo.id} - - - - - - - {creator?.nickname} - + + + +
+
+ + #{memo.id} - - {allowEdit && ( - <> - - - - )} -
-
- {allowEdit && ( - - - + + + + + + {creator?.nickname} + + + + {allowEdit && ( + <> + + + + )} +
+
+ {allowEdit && ( + + + + + + )} + + + - )} - - - - - - - showShareMemoDialog(memo)}> - - - + + showShareMemoDialog(memo)}> + + + +
-
-
-
- {comments.length === 0 ? ( -
- -

{t("memo.comment.no-comment")}

-
- ) : ( - <> -
- - {t("memo.comment.self")} - ({comments.length}) +
+
+ {comments.length === 0 ? ( +
+ +

{t("memo.comment.no-comment")}

- {comments.map((comment) => ( - - ))} - - )} + ) : ( + <> +
+ + {t("memo.comment.self")} + ({comments.length}) +
+ {comments.map((comment) => ( + + ))} + + )} - {/* Only show comment editor when user login */} - {currentUser && ( - - )} + {/* Only show comment editor when user login */} + {currentUser && ( + + )} +
diff --git a/web/src/pages/Resources.tsx b/web/src/pages/Resources.tsx index c9d50b36..e6226625 100644 --- a/web/src/pages/Resources.tsx +++ b/web/src/pages/Resources.tsx @@ -66,106 +66,108 @@ const Resources = () => { }; return ( -
+
-
-
-

- {t("common.resources")} -

-
- } - value={state.searchQuery} - onChange={(e) => setState({ ...state, searchQuery: e.target.value })} - /> -
-
-
- {loadingState.isLoading ? ( -
-

{t("resource.fetching-data")}

+
+
+
+

+ {t("common.resources")} +

+
+ } + value={state.searchQuery} + onChange={(e) => setState({ ...state, searchQuery: e.target.value })} + />
- ) : ( - <> - {filteredResources.length === 0 ? ( -
- -

{t("message.no-data")}

-
- ) : ( -
- {Array.from(groupedResources.entries()).map(([timestamp, resources]) => { - const date = new Date(timestamp); - return ( -
-
- {date.getFullYear()} - {date.toLocaleString(i18n.language, { month: "short" })} -
-
- {resources.map((resource) => { - return ( -
-
- -
-
-

{resource.filename}

- - #{resource.memoId} - -
-
- ); - })} -
-
- ); - })} - - {unusedResources.length > 0 && ( - <> - -
-
-
-
- Unused resources - ({unusedResources.length}) - - - - - +
+
+ {loadingState.isLoading ? ( +
+

{t("resource.fetching-data")}

+
+ ) : ( + <> + {filteredResources.length === 0 ? ( +
+ +

{t("message.no-data")}

+
+ ) : ( +
+ {Array.from(groupedResources.entries()).map(([timestamp, resources]) => { + const date = new Date(timestamp); + return ( +
+
+ {date.getFullYear()} + {date.toLocaleString(i18n.language, { month: "short" })}
- {unusedResources.map((resource) => { - return ( -
-
- +
+ {resources.map((resource) => { + return ( +
+
+ +
+
+

{resource.filename}

+ + #{resource.memoId} + +
-
-

{resource.filename}

-
-
- ); - })} + ); + })} +
-
- - )} -
- )} - - )} + ); + })} + + {unusedResources.length > 0 && ( + <> + +
+
+
+
+ Unused resources + ({unusedResources.length}) + + + + + +
+ {unusedResources.map((resource) => { + return ( +
+
+ +
+
+

{resource.filename}

+
+
+ ); + })} +
+
+ + )} +
+ )} + + )} +
diff --git a/web/src/pages/Setting.tsx b/web/src/pages/Setting.tsx index 084f4182..7401c37e 100644 --- a/web/src/pages/Setting.tsx +++ b/web/src/pages/Setting.tsx @@ -42,82 +42,84 @@ const Setting = () => { }; return ( -
+
-
-
- {t("common.basic")} -
- handleSectionSelectorItemClick("my-account")} - className={`section-item ${state.selectedSection === "my-account" ? "selected" : ""}`} - > - {t("setting.my-account")} - - handleSectionSelectorItemClick("preference")} - className={`section-item ${state.selectedSection === "preference" ? "selected" : ""}`} - > - {t("setting.preference")} - +
+
+
+ {t("common.basic")} +
+ handleSectionSelectorItemClick("my-account")} + className={`section-item ${state.selectedSection === "my-account" ? "selected" : ""}`} + > + {t("setting.my-account")} + + handleSectionSelectorItemClick("preference")} + className={`section-item ${state.selectedSection === "preference" ? "selected" : ""}`} + > + {t("setting.preference")} + +
+ {isHost ? ( + <> + {t("common.admin")} +
+ handleSectionSelectorItemClick("member")} + className={`section-item ${state.selectedSection === "member" ? "selected" : ""}`} + > + {t("setting.member")} + + handleSectionSelectorItemClick("system")} + className={`section-item ${state.selectedSection === "system" ? "selected" : ""}`} + > + {t("setting.system")} + + handleSectionSelectorItemClick("storage")} + className={`section-item ${state.selectedSection === "storage" ? "selected" : ""}`} + > + {t("setting.storage")} + + handleSectionSelectorItemClick("sso")} + className={`section-item ${state.selectedSection === "sso" ? "selected" : ""}`} + > + {t("setting.sso")} + +
+ + ) : null} +
+
+ + {state.selectedSection === "my-account" ? ( + + ) : state.selectedSection === "preference" ? ( + + ) : state.selectedSection === "member" ? ( + + ) : state.selectedSection === "system" ? ( + + ) : state.selectedSection === "storage" ? ( + + ) : state.selectedSection === "sso" ? ( + + ) : null}
- {isHost ? ( - <> - {t("common.admin")} -
- handleSectionSelectorItemClick("member")} - className={`section-item ${state.selectedSection === "member" ? "selected" : ""}`} - > - {t("setting.member")} - - handleSectionSelectorItemClick("system")} - className={`section-item ${state.selectedSection === "system" ? "selected" : ""}`} - > - {t("setting.system")} - - handleSectionSelectorItemClick("storage")} - className={`section-item ${state.selectedSection === "storage" ? "selected" : ""}`} - > - {t("setting.storage")} - - handleSectionSelectorItemClick("sso")} - className={`section-item ${state.selectedSection === "sso" ? "selected" : ""}`} - > - {t("setting.sso")} - -
- - ) : null} -
-
- - {state.selectedSection === "my-account" ? ( - - ) : state.selectedSection === "preference" ? ( - - ) : state.selectedSection === "member" ? ( - - ) : state.selectedSection === "system" ? ( - - ) : state.selectedSection === "storage" ? ( - - ) : state.selectedSection === "sso" ? ( - - ) : null}
diff --git a/web/src/pages/SignIn.tsx b/web/src/pages/SignIn.tsx index 19aaeb77..a9f411c8 100644 --- a/web/src/pages/SignIn.tsx +++ b/web/src/pages/SignIn.tsx @@ -104,7 +104,7 @@ const SignIn = () => { }; return ( -
+
diff --git a/web/src/pages/SignUp.tsx b/web/src/pages/SignUp.tsx index 13ce39b9..ec6e8a1a 100644 --- a/web/src/pages/SignUp.tsx +++ b/web/src/pages/SignUp.tsx @@ -70,7 +70,7 @@ const SignUp = () => { }; return ( -
+
diff --git a/web/src/pages/Timeline.tsx b/web/src/pages/Timeline.tsx index 2205124e..58145d05 100644 --- a/web/src/pages/Timeline.tsx +++ b/web/src/pages/Timeline.tsx @@ -64,73 +64,75 @@ const Timeline = () => { }; return ( -
+
-
-
-

toggleShowDatePicker()} - > - - {new Date(selectedDateStamp).toLocaleDateString()} -

- {selectedDateStamp !== currentDateStamp && ( - - )} - toggleShowDatePicker(false)} - /> -
-
- {dailyMemos.length === 0 && ( -
- -

{t("message.no-data")}

-
- )} -
- {dailyMemos.map((memo, index) => ( -
+ {new Date(selectedDateStamp).toLocaleDateString()} +

+ {selectedDateStamp !== currentDateStamp && ( +
- ))} - - {selectedDateStamp === currentDateStamp && ( -
- + {"Back to today"} + + )} + toggleShowDatePicker(false)} + /> +
+
+ {dailyMemos.length === 0 && ( +
+ +

{t("message.no-data")}

)} +
+ {dailyMemos.map((memo, index) => ( +
+
+ {getTimeString(memo.displayTs)} + + #{memo.id} +
+ + + relation.type === "REFERENCE")} /> +
+ {index !== dailyMemos.length - 1 && ( +
+ )} +
+ +
+
+
+ ))} + + {selectedDateStamp === currentDateStamp && ( +
+ +
+ )} +
diff --git a/web/src/pages/UserProfile.tsx b/web/src/pages/UserProfile.tsx index 3315e36b..ca99416a 100644 --- a/web/src/pages/UserProfile.tsx +++ b/web/src/pages/UserProfile.tsx @@ -35,28 +35,20 @@ const UserProfile = () => { }, [params.username]); return ( -
+
-
+
{!loadingState.isLoading && (user ? ( <> -
-
-
-
- -

{user?.nickname}

-
- -
-
+
+ +

{user?.nickname}

+ ) : ( - <> -

Not found

- +

Not found

))}