mirror of
https://github.com/usememos/memos.git
synced 2024-12-21 10:11:42 +03:00
chore: add visibility selector
This commit is contained in:
parent
b7339e00ba
commit
07d9649b22
@ -175,8 +175,8 @@ const Memo: React.FC<Props> = (props: Props) => {
|
|||||||
<Only when={memo.pinned}>
|
<Only when={memo.pinned}>
|
||||||
<span className="status-text">PINNED</span>
|
<span className="status-text">PINNED</span>
|
||||||
</Only>
|
</Only>
|
||||||
<Only when={memo.visibility === "PUBLIC" && !isVisitorMode}>
|
<Only when={memo.visibility !== "PRIVATE" && !isVisitorMode}>
|
||||||
<span className="status-text">PUBLIC</span>
|
<span className="status-text">{memo.visibility}</span>
|
||||||
</Only>
|
</Only>
|
||||||
</div>
|
</div>
|
||||||
<div className={`btns-container ${userService.isVisitorMode() ? "!hidden" : ""}`}>
|
<div className={`btns-container ${userService.isVisitorMode() ? "!hidden" : ""}`}>
|
||||||
|
@ -9,6 +9,7 @@ import { showDialog } from "./Dialog";
|
|||||||
import Image from "./Image";
|
import Image from "./Image";
|
||||||
import { formatMemoContent } from "./Memo";
|
import { formatMemoContent } from "./Memo";
|
||||||
import "../less/memo-card-dialog.less";
|
import "../less/memo-card-dialog.less";
|
||||||
|
import Selector from "./common/Selector";
|
||||||
|
|
||||||
interface LinkedMemo extends Memo {
|
interface LinkedMemo extends Memo {
|
||||||
createdAtStr: string;
|
createdAtStr: string;
|
||||||
@ -26,6 +27,11 @@ const MemoCardDialog: React.FC<Props> = (props: Props) => {
|
|||||||
const [linkMemos, setLinkMemos] = useState<LinkedMemo[]>([]);
|
const [linkMemos, setLinkMemos] = useState<LinkedMemo[]>([]);
|
||||||
const [linkedMemos, setLinkedMemos] = useState<LinkedMemo[]>([]);
|
const [linkedMemos, setLinkedMemos] = useState<LinkedMemo[]>([]);
|
||||||
const imageUrls = Array.from(memo.content.match(IMAGE_URL_REG) ?? []).map((s) => s.replace(IMAGE_URL_REG, "$1"));
|
const imageUrls = Array.from(memo.content.match(IMAGE_URL_REG) ?? []).map((s) => s.replace(IMAGE_URL_REG, "$1"));
|
||||||
|
const visibilityList = [
|
||||||
|
{ text: "PUBLIC", value: "PUBLIC" },
|
||||||
|
{ text: "PROTECTED", value: "PROTECTED" },
|
||||||
|
{ text: "PRIVATE", value: "PRIVATE" },
|
||||||
|
];
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchLinkedMemos = async () => {
|
const fetchLinkedMemos = async () => {
|
||||||
@ -98,25 +104,16 @@ const MemoCardDialog: React.FC<Props> = (props: Props) => {
|
|||||||
setMemo(memo);
|
setMemo(memo);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleEditMemoBtnClick = useCallback(() => {
|
const handleEditMemoBtnClick = () => {
|
||||||
props.destroy();
|
props.destroy();
|
||||||
editorStateService.setEditMemoWithId(memo.id);
|
editorStateService.setEditMemoWithId(memo.id);
|
||||||
}, [memo.id]);
|
|
||||||
|
|
||||||
const handlePinClick = async () => {
|
|
||||||
if (memo.pinned) {
|
|
||||||
await memoService.unpinMemo(memo.id);
|
|
||||||
} else {
|
|
||||||
await memoService.pinMemo(memo.id);
|
|
||||||
}
|
|
||||||
setMemo({
|
|
||||||
...memo,
|
|
||||||
pinned: !memo.pinned,
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleVisibilityClick = async () => {
|
const handleVisibilitySelectorChange = async (visibility: Visibility) => {
|
||||||
const visibility = memo.visibility === "PRIVATE" ? "PUBLIC" : "PRIVATE";
|
if (memo.visibility === visibility) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
await memoService.patchMemo({
|
await memoService.patchMemo({
|
||||||
id: memo.id,
|
id: memo.id,
|
||||||
visibility: visibility,
|
visibility: visibility,
|
||||||
@ -135,12 +132,12 @@ const MemoCardDialog: React.FC<Props> = (props: Props) => {
|
|||||||
<div className="btns-container">
|
<div className="btns-container">
|
||||||
<Only when={!userService.isVisitorMode()}>
|
<Only when={!userService.isVisitorMode()}>
|
||||||
<>
|
<>
|
||||||
<button className="btn" onClick={handlePinClick}>
|
<Selector
|
||||||
<i className={`fa-solid fa-thumbtack icon-img ${memo.pinned ? "" : "opacity-20"}`}></i>
|
className="w-24"
|
||||||
</button>
|
dataSource={visibilityList}
|
||||||
<button className="btn" onClick={handleVisibilityClick}>
|
value={memo.visibility}
|
||||||
<i className={`fa-solid fa-eye icon-img ${memo.visibility === "PUBLIC" ? "" : "opacity-20"}`}></i>
|
handleValueChanged={(value) => handleVisibilitySelectorChange(value as Visibility)}
|
||||||
</button>
|
/>
|
||||||
<button className="btn edit-btn" onClick={handleEditMemoBtnClick}>
|
<button className="btn edit-btn" onClick={handleEditMemoBtnClick}>
|
||||||
<i className="fa-solid fa-pen-to-square icon-img"></i>
|
<i className="fa-solid fa-pen-to-square icon-img"></i>
|
||||||
</button>
|
</button>
|
||||||
|
@ -15,8 +15,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
> .header-container {
|
> .header-container {
|
||||||
.flex(row, space-between, center);
|
@apply flex flex-row justify-between items-center w-full h-auto z-10 pb-0 my-0;
|
||||||
@apply w-full h-auto pb-0 my-0;
|
|
||||||
|
|
||||||
> .time-text {
|
> .time-text {
|
||||||
@apply text-sm text-gray-500 font-mono;
|
@apply text-sm text-gray-500 font-mono;
|
||||||
|
2
web/src/types/modules/memo.d.ts
vendored
2
web/src/types/modules/memo.d.ts
vendored
@ -1,6 +1,6 @@
|
|||||||
type MemoId = number;
|
type MemoId = number;
|
||||||
|
|
||||||
type Visibility = "PUBLIC" | "PRIVATE";
|
type Visibility = "PUBLIC" | "PROTECTED" | "PRIVATE";
|
||||||
|
|
||||||
interface Memo {
|
interface Memo {
|
||||||
id: MemoId;
|
id: MemoId;
|
||||||
|
Loading…
Reference in New Issue
Block a user