Changeset View
Changeset View
Standalone View
Standalone View
web/utils/tooltip-action-utils.js
Show All 21 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 { getComposedMessageID } from '../chat/chat-constants.js'; | |||||
import { useEditModalContext } from '../chat/edit-message-provider.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 { | ||||
▲ Show 20 Lines • Show All 183 Lines • ▼ Show 20 Lines | |||||
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 { renderEditModal, scrollToMessage } = useEditModalContext(); | ||||
const { clearTooltip } = useTooltipContext(); | const { clearTooltip } = useTooltipContext(); | ||||
return React.useMemo(() => { | return React.useMemo(() => { | ||||
if (!canEditMessage) { | if (!canEditMessage) { | ||||
return null; | return null; | ||||
} | } | ||||
const buttonContent = <CommIcon icon="edit-filled" size={18} />; | const buttonContent = <CommIcon icon="edit-filled" size={18} />; | ||||
const onClickEdit = () => { | const onClickEdit = () => { | ||||
clearTooltip(); | const callback = (maxHeight: number) => | ||||
renderEditModal({ | renderEditModal({ | ||||
messageInfo: item, | messageInfo: item, | ||||
threadInfo, | threadInfo, | ||||
isError: false, | isError: false, | ||||
editedMessageDraft: messageInfo.text, | editedMessageDraft: messageInfo.text, | ||||
maxHeight: maxHeight, | |||||
}); | }); | ||||
clearTooltip(); | |||||
scrollToMessage(getComposedMessageID(messageInfo), callback); | |||||
}; | }; | ||||
return { | return { | ||||
actionButtonContent: buttonContent, | actionButtonContent: buttonContent, | ||||
onClick: onClickEdit, | onClick: onClickEdit, | ||||
label: 'Edit', | label: 'Edit', | ||||
}; | }; | ||||
}, [ | }, [ | ||||
canEditMessage, | canEditMessage, | ||||
clearTooltip, | clearTooltip, | ||||
item, | item, | ||||
messageInfo.text, | messageInfo, | ||||
renderEditModal, | renderEditModal, | ||||
scrollToMessage, | |||||
threadInfo, | threadInfo, | ||||
]); | ]); | ||||
} | } | ||||
function useMessageTooltipActions( | function useMessageTooltipActions( | ||||
item: ChatMessageInfoItem, | item: ChatMessageInfoItem, | ||||
threadInfo: ThreadInfo, | threadInfo: ThreadInfo, | ||||
): $ReadOnlyArray<MessageTooltipAction> { | ): $ReadOnlyArray<MessageTooltipAction> { | ||||
▲ Show 20 Lines • Show All 219 Lines • Show Last 20 Lines |