Unverified Commit 91a24ef9 authored by boojack's avatar boojack Committed by GitHub

chore: update memo header (#1497)

* chore: update memo header

* chore: update
parent d11083d3
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
"@emotion/react": "^11.10.5", "@emotion/react": "^11.10.5",
"@emotion/styled": "^11.10.5", "@emotion/styled": "^11.10.5",
"@mui/joy": "^5.0.0-alpha.67", "@mui/joy": "^5.0.0-alpha.67",
"@radix-ui/react-tooltip": "^1.0.5",
"@reduxjs/toolkit": "^1.8.1", "@reduxjs/toolkit": "^1.8.1",
"axios": "^0.27.2", "axios": "^0.27.2",
"copy-to-clipboard": "^3.3.2", "copy-to-clipboard": "^3.3.2",
......
...@@ -7,7 +7,7 @@ import { filterConsts, getDefaultFilter, relationConsts } from "@/helpers/filter ...@@ -7,7 +7,7 @@ import { filterConsts, getDefaultFilter, relationConsts } from "@/helpers/filter
import useLoading from "@/hooks/useLoading"; import useLoading from "@/hooks/useLoading";
import Icon from "./Icon"; import Icon from "./Icon";
import { generateDialog } from "./Dialog"; import { generateDialog } from "./Dialog";
import Selector from "./base/Selector"; import Selector from "./kit/Selector";
import "@/less/create-shortcut-dialog.less"; import "@/less/create-shortcut-dialog.less";
interface Props extends DialogProps { interface Props extends DialogProps {
......
...@@ -5,6 +5,8 @@ import { toast } from "react-hot-toast"; ...@@ -5,6 +5,8 @@ import { toast } from "react-hot-toast";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Link, useNavigate } from "react-router-dom"; import { Link, useNavigate } from "react-router-dom";
import { useEditorStore, useFilterStore, useMemoStore, useUserStore } from "@/store/module"; import { useEditorStore, useFilterStore, useMemoStore, useUserStore } from "@/store/module";
import Tooltip from "./kit/Tooltip";
import { showCommonDialog } from "./Dialog/CommonDialog";
import Icon from "./Icon"; import Icon from "./Icon";
import MemoContent from "./MemoContent"; import MemoContent from "./MemoContent";
import MemoResources from "./MemoResources"; import MemoResources from "./MemoResources";
...@@ -97,6 +99,18 @@ const Memo: React.FC<Props> = (props: Props) => { ...@@ -97,6 +99,18 @@ const Memo: React.FC<Props> = (props: Props) => {
} }
}; };
const handleDeleteMemoClick = async () => {
showCommonDialog({
title: "Delete memo",
content: "Are you sure to delete this memo?",
style: "warning",
dialogName: "delete-memo-dialog",
onConfirm: async () => {
await memoStore.deleteMemoById(memo.id);
},
});
};
const handleGenerateMemoImageBtnClick = () => { const handleGenerateMemoImageBtnClick = () => {
showShareMemo(memo); showShareMemo(memo);
}; };
...@@ -189,7 +203,6 @@ const Memo: React.FC<Props> = (props: Props) => { ...@@ -189,7 +203,6 @@ const Memo: React.FC<Props> = (props: Props) => {
return ( return (
<div className={`memo-wrapper ${"memos-" + memo.id} ${memo.pinned ? "pinned" : ""}`} ref={memoContainerRef}> <div className={`memo-wrapper ${"memos-" + memo.id} ${memo.pinned ? "pinned" : ""}`} ref={memoContainerRef}>
{memo.pinned && <div className="corner-container"></div>}
<div className="memo-top-wrapper"> <div className="memo-top-wrapper">
<div className="status-text-container"> <div className="status-text-container">
<Link className="time-text" to={`/m/${memo.id}`} onClick={handleMemoCreatedTimeClick}> <Link className="time-text" to={`/m/${memo.id}`} onClick={handleMemoCreatedTimeClick}>
...@@ -200,35 +213,45 @@ const Memo: React.FC<Props> = (props: Props) => { ...@@ -200,35 +213,45 @@ const Memo: React.FC<Props> = (props: Props) => {
@{memo.creatorName} @{memo.creatorName}
</Link> </Link>
)} )}
{memo.visibility !== "PRIVATE" && !isVisitorMode && (
<>
<span className="text-xs mx-1 font-mono text-gray-200 dark:text-gray-600">/</span>
<span className="text-sm text-gray-400 cursor-pointer" onClick={() => handleMemoVisibilityClick(memo.visibility)}>
{t(`memo.visibility.${memo.visibility.toLowerCase()}`)}
</span>
</>
)}
</div> </div>
{!isVisitorMode && ( {!isVisitorMode && (
<div className="btns-container"> <div className="btns-container space-x-2">
{memo.visibility !== "PRIVATE" && (
<Tooltip title={t(`memo.visibility.${memo.visibility.toLowerCase()}`)} side="top">
<div onClick={() => handleMemoVisibilityClick(memo.visibility)}>
{memo.visibility === "PUBLIC" ? (
<Icon.Globe2 className="w-4 h-auto cursor-pointer rounded text-green-600" />
) : (
<Icon.Users className="w-4 h-auto cursor-pointer rounded text-gray-500 dark:text-gray-400" />
)}
</div>
</Tooltip>
)}
{memo.pinned && <Icon.Bookmark className="w-4 h-auto rounded text-green-600" />}
<span className="btn more-action-btn"> <span className="btn more-action-btn">
<Icon.MoreHorizontal className="icon-img" /> <Icon.MoreHorizontal className="icon-img" />
</span> </span>
<div className="more-action-btns-wrapper"> <div className="more-action-btns-wrapper">
<div className="more-action-btns-container"> <div className="more-action-btns-container">
<div className="btns-container"> <div className="w-full flex flex-row justify-between px-3 py-2 mb-1 border-b dark:border-zinc-700">
<div className="btn" onClick={handleTogglePinMemoBtnClick}> <Tooltip title={memo.pinned ? t("common.unpin") : t("common.pin")} side="top">
<Icon.Flag className={`icon-img ${memo.pinned ? "text-green-600" : ""}`} /> <div onClick={handleTogglePinMemoBtnClick}>
<span className="tip-text">{memo.pinned ? t("common.unpin") : t("common.pin")}</span> {memo.pinned ? (
</div> <Icon.Bookmark className="w-4 h-auto cursor-pointer rounded text-green-600" />
<div className="btn" onClick={handleEditMemoClick}> ) : (
<Icon.Edit3 className="icon-img" /> <Icon.BookmarkPlus className="w-4 h-auto cursor-pointer rounded dark:text-gray-400" />
<span className="tip-text">{t("common.edit")}</span> )}
</div>
<div className="btn" onClick={handleGenerateMemoImageBtnClick}>
<Icon.Share className="icon-img" />
<span className="tip-text">{t("common.share")}</span>
</div> </div>
</Tooltip>
<Tooltip title={t("common.edit")} side="top">
<Icon.Edit3 className="w-4 h-auto cursor-pointer rounded dark:text-gray-400" onClick={handleEditMemoClick} />
</Tooltip>
<Tooltip title={t("common.share")} side="top">
<Icon.Share
className="w-4 h-auto cursor-pointer rounded dark:text-gray-400"
onClick={handleGenerateMemoImageBtnClick}
/>
</Tooltip>
</div> </div>
<span className="btn" onClick={handleCopyLink}> <span className="btn" onClick={handleCopyLink}>
{t("memo.copy-link")} {t("memo.copy-link")}
...@@ -239,9 +262,12 @@ const Memo: React.FC<Props> = (props: Props) => { ...@@ -239,9 +262,12 @@ const Memo: React.FC<Props> = (props: Props) => {
<span className="btn" onClick={handleShowEmbedMemoDialog}> <span className="btn" onClick={handleShowEmbedMemoDialog}>
{t("memo.embed")} {t("memo.embed")}
</span> </span>
<span className="btn archive-btn" onClick={handleArchiveMemoClick}> <span className="btn text-orange-500" onClick={handleArchiveMemoClick}>
{t("common.archive")} {t("common.archive")}
</span> </span>
<span className="btn text-red-600" onClick={handleDeleteMemoClick}>
{t("common.delete")}
</span>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -8,7 +8,7 @@ import { TAB_SPACE_WIDTH, UNKNOWN_ID, VISIBILITY_SELECTOR_ITEMS } from "@/helper ...@@ -8,7 +8,7 @@ import { TAB_SPACE_WIDTH, UNKNOWN_ID, VISIBILITY_SELECTOR_ITEMS } from "@/helper
import { useEditorStore, useGlobalStore, useFilterStore, useMemoStore, useResourceStore, useTagStore, useUserStore } from "@/store/module"; import { useEditorStore, useGlobalStore, useFilterStore, useMemoStore, useResourceStore, useTagStore, useUserStore } from "@/store/module";
import * as storage from "@/helpers/storage"; import * as storage from "@/helpers/storage";
import Icon from "./Icon"; import Icon from "./Icon";
import Selector from "./base/Selector"; import Selector from "./kit/Selector";
import Editor, { EditorRefActions } from "./Editor/Editor"; import Editor, { EditorRefActions } from "./Editor/Editor";
import ResourceIcon from "./ResourceIcon"; import ResourceIcon from "./ResourceIcon";
import showResourcesSelectorDialog from "./ResourcesSelectorDialog"; import showResourcesSelectorDialog from "./ResourcesSelectorDialog";
......
import { absolutifyLink } from "@/helpers/utils"; import { absolutifyLink } from "@/helpers/utils";
import { getResourceUrl } from "@/utils/resource"; import { getResourceUrl } from "@/utils/resource";
import SquareDiv from "./base/SquareDiv"; import SquareDiv from "./kit/SquareDiv";
import showPreviewImageDialog from "./PreviewImageDialog"; import showPreviewImageDialog from "./PreviewImageDialog";
import MemoResource from "./MemoResource"; import MemoResource from "./MemoResource";
import "@/less/memo-resources.less"; import "@/less/memo-resources.less";
......
...@@ -4,7 +4,7 @@ import toast from "react-hot-toast"; ...@@ -4,7 +4,7 @@ import toast from "react-hot-toast";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useResourceStore } from "@/store/module"; import { useResourceStore } from "@/store/module";
import { getResourceUrl } from "@/utils/resource"; import { getResourceUrl } from "@/utils/resource";
import Dropdown from "./base/Dropdown"; import Dropdown from "./kit/Dropdown";
import Icon from "./Icon"; import Icon from "./Icon";
import { showCommonDialog } from "./Dialog/CommonDialog"; import { showCommonDialog } from "./Dialog/CommonDialog";
import showChangeResourceFilenameDialog from "./ChangeResourceFilenameDialog"; import showChangeResourceFilenameDialog from "./ChangeResourceFilenameDialog";
......
...@@ -3,7 +3,7 @@ import { toast } from "react-hot-toast"; ...@@ -3,7 +3,7 @@ import { toast } from "react-hot-toast";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useUserStore } from "@/store/module"; import { useUserStore } from "@/store/module";
import * as api from "@/helpers/api"; import * as api from "@/helpers/api";
import Dropdown from "../base/Dropdown"; import Dropdown from "../kit/Dropdown";
import { showCommonDialog } from "../Dialog/CommonDialog"; import { showCommonDialog } from "../Dialog/CommonDialog";
import showChangeMemberPasswordDialog from "../ChangeMemberPasswordDialog"; import showChangeMemberPasswordDialog from "../ChangeMemberPasswordDialog";
import "@/less/settings/member-section.less"; import "@/less/settings/member-section.less";
......
...@@ -3,7 +3,7 @@ import { toast } from "react-hot-toast"; ...@@ -3,7 +3,7 @@ import { toast } from "react-hot-toast";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import * as api from "@/helpers/api"; import * as api from "@/helpers/api";
import showCreateIdentityProviderDialog from "../CreateIdentityProviderDialog"; import showCreateIdentityProviderDialog from "../CreateIdentityProviderDialog";
import Dropdown from "../base/Dropdown"; import Dropdown from "../kit/Dropdown";
import { showCommonDialog } from "../Dialog/CommonDialog"; import { showCommonDialog } from "../Dialog/CommonDialog";
const SSOSection = () => { const SSOSection = () => {
......
...@@ -6,7 +6,7 @@ import { useGlobalStore } from "@/store/module"; ...@@ -6,7 +6,7 @@ import { useGlobalStore } from "@/store/module";
import * as api from "@/helpers/api"; import * as api from "@/helpers/api";
import showCreateStorageServiceDialog from "../CreateStorageServiceDialog"; import showCreateStorageServiceDialog from "../CreateStorageServiceDialog";
import showUpdateLocalStorageDialog from "../UpdateLocalStorageDialog"; import showUpdateLocalStorageDialog from "../UpdateLocalStorageDialog";
import Dropdown from "../base/Dropdown"; import Dropdown from "../kit/Dropdown";
import { showCommonDialog } from "../Dialog/CommonDialog"; import { showCommonDialog } from "../Dialog/CommonDialog";
const StorageSection = () => { const StorageSection = () => {
......
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useUserStore } from "@/store/module"; import { useUserStore } from "@/store/module";
import Dropdown from "./base/Dropdown"; import Dropdown from "./kit/Dropdown";
import Icon from "./Icon"; import Icon from "./Icon";
import UserAvatar from "./UserAvatar"; import UserAvatar from "./UserAvatar";
import showAboutSiteDialog from "./AboutSiteDialog"; import showAboutSiteDialog from "./AboutSiteDialog";
......
import * as TooltipUI from "@radix-ui/react-tooltip";
type Side = "top" | "right" | "bottom" | "left";
interface Props {
title: string;
side: Side;
children: React.ReactNode;
}
const Tooltip = (props: Props) => {
const { title, side, children } = props;
return (
<TooltipUI.Provider delayDuration={0} skipDelayDuration={0}>
<TooltipUI.Root>
<TooltipUI.Trigger asChild>{children}</TooltipUI.Trigger>
<TooltipUI.Portal>
<TooltipUI.Content
className="bg-zinc-800 text-gray-300 dark:bg-black shadow text-sm p-1 rounded-md z-[99999]"
side={side}
sideOffset={6}
>
{title}
</TooltipUI.Content>
</TooltipUI.Portal>
</TooltipUI.Root>
</TooltipUI.Provider>
);
};
export default Tooltip;
...@@ -9,16 +9,6 @@ ...@@ -9,16 +9,6 @@
@apply border-gray-200 dark:border-zinc-600; @apply border-gray-200 dark:border-zinc-600;
} }
> .corner-container {
@apply absolute top-0 right-0 z-1;
&::after {
@apply absolute top-0 right-0 border-transparent border-t-green-600 border-r-green-600 rounded-tr-md;
content: "";
border-width: 6px;
}
}
> .memo-top-wrapper { > .memo-top-wrapper {
@apply flex flex-row justify-between items-center w-full h-6 mb-1; @apply flex flex-row justify-between items-center w-full h-6 mb-1;
...@@ -91,10 +81,10 @@ ...@@ -91,10 +81,10 @@
} }
.btn { .btn {
@apply flex flex-row justify-center items-center px-2 leading-6 text-sm rounded hover:bg-gray-200 dark:hover:bg-zinc-600; @apply flex flex-row justify-center items-center leading-6 text-sm rounded hover:bg-gray-200 dark:hover:bg-zinc-600;
&.more-action-btn { &.more-action-btn {
@apply w-8 -mr-2 opacity-60 cursor-default hover:bg-transparent; @apply w-auto opacity-60 cursor-default hover:bg-transparent;
> .icon-img { > .icon-img {
@apply w-4 h-auto dark:text-gray-300; @apply w-4 h-auto dark:text-gray-300;
......
...@@ -11,7 +11,7 @@ import useToggle from "@/hooks/useToggle"; ...@@ -11,7 +11,7 @@ import useToggle from "@/hooks/useToggle";
import toImage from "@/labs/html2image"; import toImage from "@/labs/html2image";
import showPreviewImageDialog from "@/components/PreviewImageDialog"; import showPreviewImageDialog from "@/components/PreviewImageDialog";
import Icon from "@/components/Icon"; import Icon from "@/components/Icon";
import DatePicker from "@/components/base/DatePicker"; import DatePicker from "@/components/kit/DatePicker";
import DailyMemo from "@/components/DailyMemo"; import DailyMemo from "@/components/DailyMemo";
const DailyReview = () => { const DailyReview = () => {
......
...@@ -9,7 +9,7 @@ import Icon from "@/components/Icon"; ...@@ -9,7 +9,7 @@ import Icon from "@/components/Icon";
import ResourceCard from "@/components/ResourceCard"; import ResourceCard from "@/components/ResourceCard";
import ResourceSearchBar from "@/components/ResourceSearchBar"; import ResourceSearchBar from "@/components/ResourceSearchBar";
import MobileHeader from "@/components/MobileHeader"; import MobileHeader from "@/components/MobileHeader";
import Dropdown from "@/components/base/Dropdown"; import Dropdown from "@/components/kit/Dropdown";
import ResourceItem from "@/components/ResourceItem"; import ResourceItem from "@/components/ResourceItem";
import { showCommonDialog } from "@/components/Dialog/CommonDialog"; import { showCommonDialog } from "@/components/Dialog/CommonDialog";
import showCreateResourceDialog from "@/components/CreateResourceDialog"; import showCreateResourceDialog from "@/components/CreateResourceDialog";
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment