Changeset View
Changeset View
Standalone View
Standalone View
web/utils/tooltip-action-utils.js
Show All 22 Lines | |||||
import { | import { | ||||
type MessageTooltipAction, | type MessageTooltipAction, | ||||
findTooltipPosition, | findTooltipPosition, | ||||
getMessageActionTooltipStyle, | getMessageActionTooltipStyle, | ||||
calculateTooltipSize, | calculateTooltipSize, | ||||
type TooltipSize, | type TooltipSize, | ||||
type TooltipPosition, | type TooltipPosition, | ||||
} from './tooltip-utils.js'; | } from './tooltip-utils.js'; | ||||
import { useEditModalContext } from '../chat/edit-message-provider.js'; | |||||
import MessageTooltip from '../chat/message-tooltip.react.js'; | import MessageTooltip from '../chat/message-tooltip.react.js'; | ||||
import type { PositionInfo } from '../chat/position-types.js'; | import type { PositionInfo } from '../chat/position-types.js'; | ||||
import { useTooltipContext } from '../chat/tooltip-provider.js'; | import { useTooltipContext } from '../chat/tooltip-provider.js'; | ||||
import CommIcon from '../CommIcon.react.js'; | import CommIcon from '../CommIcon.react.js'; | ||||
import { InputStateContext } from '../input/input-state.js'; | import { InputStateContext } from '../input/input-state.js'; | ||||
import TogglePinModal from '../modals/chat/toggle-pin-modal.react.js'; | import TogglePinModal from '../modals/chat/toggle-pin-modal.react.js'; | ||||
import { | import { | ||||
useOnClickPendingSidebar, | useOnClickPendingSidebar, | ||||
▲ Show 20 Lines • Show All 187 Lines • ▼ Show 20 Lines | ): ?MessageTooltipAction { | ||||
}, [canTogglePin, inputState, isPinned, pushModal, item, threadInfo]); | }, [canTogglePin, inputState, isPinned, pushModal, item, threadInfo]); | ||||
} | } | ||||
function useMessageEditAction( | function useMessageEditAction( | ||||
item: ChatMessageInfoItem, | item: ChatMessageInfoItem, | ||||
threadInfo: ThreadInfo, | threadInfo: ThreadInfo, | ||||
): ?MessageTooltipAction { | ): ?MessageTooltipAction { | ||||
const { messageInfo } = item; | const { messageInfo } = item; | ||||
const canEditMessage = useCanEditMessage(threadInfo, messageInfo); | const canEditMessage = useCanEditMessage(threadInfo, messageInfo); | ||||
const { renderEditModal } = useEditModalContext(); | |||||
const { clearTooltip } = useTooltipContext(); | |||||
return React.useMemo(() => { | return React.useMemo(() => { | ||||
if (!canEditMessage) { | if (!canEditMessage) { | ||||
return null; | return null; | ||||
} | } | ||||
const buttonContent = ( | const buttonContent = ( | ||||
<SWMansionIcon icon="edit-1" size={18} disableFill={false} /> | <SWMansionIcon icon="edit-1" size={18} disableFill={false} /> | ||||
); | ); | ||||
const onClickEdit = () => { | const onClickEdit = () => { | ||||
// TODO: Enter edit mode | clearTooltip(); | ||||
renderEditModal({ | |||||
messageInfo: item, | |||||
threadInfo, | |||||
isError: false, | |||||
editedMessageDraft: messageInfo.text, | |||||
}); | |||||
}; | }; | ||||
return { | return { | ||||
actionButtonContent: buttonContent, | actionButtonContent: buttonContent, | ||||
onClick: onClickEdit, | onClick: onClickEdit, | ||||
label: 'Edit', | label: 'Edit', | ||||
}; | }; | ||||
}, [canEditMessage]); | }, [ | ||||
canEditMessage, | |||||
clearTooltip, | |||||
item, | |||||
messageInfo.text, | |||||
renderEditModal, | |||||
threadInfo, | |||||
]); | |||||
} | } | ||||
function useMessageTooltipActions( | function useMessageTooltipActions( | ||||
item: ChatMessageInfoItem, | item: ChatMessageInfoItem, | ||||
threadInfo: ThreadInfo, | threadInfo: ThreadInfo, | ||||
): $ReadOnlyArray<MessageTooltipAction> { | ): $ReadOnlyArray<MessageTooltipAction> { | ||||
const sidebarAction = useMessageTooltipSidebarAction(item, threadInfo); | const sidebarAction = useMessageTooltipSidebarAction(item, threadInfo); | ||||
const replyAction = useMessageTooltipReplyAction(item, threadInfo); | const replyAction = useMessageTooltipReplyAction(item, threadInfo); | ||||
▲ Show 20 Lines • Show All 217 Lines • Show Last 20 Lines |