11import { IconButton } from "@mui/joy" ;
2- import { useEffect } from "react" ;
3- import { useTagStore } from "@/store/v1" ;
2+ import clsx from "clsx" ;
3+ import { useEffect , useRef , useState } from "react" ;
4+ import { useMemoStore , useTagStore } from "@/store/v1" ;
5+ import { Memo } from "@/types/proto/api/v1/memo_service" ;
46import MemoEditor , { Props as MemoEditorProps } from "." ;
57import { generateDialog } from "../Dialog" ;
68import Icon from "../Icon" ;
79
810interface Props extends DialogProps , MemoEditorProps { }
911
1012const MemoEditorDialog : React . FC < Props > = ( {
11- memoName : memo ,
13+ memoName,
1214 parentMemoName,
1315 placeholder,
1416 cacheKey,
@@ -17,11 +19,21 @@ const MemoEditorDialog: React.FC<Props> = ({
1719 destroy,
1820} : Props ) => {
1921 const tagStore = useTagStore ( ) ;
22+ const memoStore = useMemoStore ( ) ;
23+ const [ displayTime , setDisplayTime ] = useState < string | undefined > ( memoStore . getMemoByName ( memoName || "" ) ?. displayTime ?. toISOString ( ) ) ;
24+ const memoPatchRef = useRef < Partial < Memo > > ( {
25+ displayTime : memoStore . getMemoByName ( memoName || "" ) ?. displayTime ,
26+ } ) ;
2027
2128 useEffect ( ( ) => {
2229 tagStore . fetchTags ( undefined , { skipCache : false } ) ;
2330 } , [ ] ) ;
2431
32+ const updateDisplayTime = ( displayTime : string ) => {
33+ setDisplayTime ( displayTime ) ;
34+ memoPatchRef . current . displayTime = new Date ( displayTime ) ;
35+ } ;
36+
2537 const handleCloseBtnClick = ( ) => {
2638 destroy ( ) ;
2739 } ;
@@ -35,10 +47,25 @@ const MemoEditorDialog: React.FC<Props> = ({
3547
3648 return (
3749 < >
38- < div className = "w-full flex flex-row justify-between items-center mb-2" >
39- < div className = "flex flex-row justify-start items-center" >
40- < img className = "w-6 h-auto rounded-full shadow" src = { "/full-logo.webp" } alt = "" />
41- < p className = "ml-1 text-lg opacity-80 dark:text-gray-300" > Memos</ p >
50+ < div className = "w-full flex flex-row justify-between items-center" >
51+ < div className = { clsx ( "flex flex-row justify-start items-center" , ! displayTime && "mb-2" ) } >
52+ { displayTime ? (
53+ < div className = "relative" >
54+ < span className = "cursor-pointer text-gray-500 dark:text-gray-400" > { new Date ( displayTime ) . toLocaleString ( ) } </ span >
55+ < input
56+ className = "inset-0 absolute z-1 opacity-0"
57+ type = "datetime-local"
58+ value = { displayTime }
59+ onFocus = { ( e : any ) => e . target . showPicker ( ) }
60+ onChange = { ( e ) => updateDisplayTime ( e . target . value ) }
61+ />
62+ </ div >
63+ ) : (
64+ < >
65+ < img className = "w-6 h-auto rounded-full shadow" src = { "/full-logo.webp" } alt = "" />
66+ < p className = "ml-1 text-lg opacity-80 dark:text-gray-300" > Memos</ p >
67+ </ >
68+ ) }
4269 </ div >
4370 < IconButton size = "sm" onClick = { handleCloseBtnClick } >
4471 < Icon . X className = "w-5 h-auto" />
@@ -47,11 +74,12 @@ const MemoEditorDialog: React.FC<Props> = ({
4774 < div className = "flex flex-col justify-start items-start max-w-full w-[36rem]" >
4875 < MemoEditor
4976 className = "border-none !p-0 -mb-2"
50- cacheKey = { `memo-editor-${ cacheKey || memo } ` }
51- memoName = { memo }
77+ cacheKey = { `memo-editor-${ cacheKey || memoName } ` }
78+ memoName = { memoName }
5279 parentMemoName = { parentMemoName }
5380 placeholder = { placeholder }
5481 relationList = { relationList }
82+ memoPatchRef = { memoPatchRef }
5583 onConfirm = { handleConfirm }
5684 autoFocus
5785 />
0 commit comments