mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2026-02-15 07:28:59 +00:00
65 lines
2.3 KiB
TypeScript
65 lines
2.3 KiB
TypeScript
// Copyright 2026 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
import React, { memo, useCallback } from 'react';
|
|
import { useSelector } from 'react-redux';
|
|
import { getIntl } from '../selectors/user.std.js';
|
|
import { useConversationsActions } from '../ducks/conversations.preload.js';
|
|
import { PinMessageDialog } from '../../components/conversation/pinned-messages/PinMessageDialog.dom.js';
|
|
import { useItemsActions } from '../ducks/items.preload.js';
|
|
import { getSeenPinMessageDisappearingMessagesWarningCount } from '../selectors/items.dom.js';
|
|
import { getPinMessageDialogData } from '../selectors/globalModals.std.js';
|
|
import { useGlobalModalActions } from '../ducks/globalModals.preload.js';
|
|
|
|
export type PinMessageDialogData = Readonly<{
|
|
messageId: string;
|
|
hasMaxPinnedMessages: boolean;
|
|
isPinningDisappearingMessage: boolean;
|
|
}>;
|
|
|
|
export const SmartPinMessageDialog = memo(function SmartPinMessageDialog() {
|
|
const i18n = useSelector(getIntl);
|
|
const pinMessageDialogData = useSelector(getPinMessageDialogData);
|
|
const { hidePinMessageDialog } = useGlobalModalActions();
|
|
const { onPinnedMessageAdd } = useConversationsActions();
|
|
|
|
const seenPinMessageDisappearingMessagesWarningCount = useSelector(
|
|
getSeenPinMessageDisappearingMessagesWarningCount
|
|
);
|
|
const { putItem } = useItemsActions();
|
|
|
|
const handleClose = useCallback(() => {
|
|
hidePinMessageDialog();
|
|
}, [hidePinMessageDialog]);
|
|
|
|
const handleSeenPinMessageDisappearingMessagesWarning = useCallback(() => {
|
|
putItem(
|
|
'seenPinMessageDisappearingMessagesWarningCount',
|
|
seenPinMessageDisappearingMessagesWarningCount + 1
|
|
);
|
|
}, [putItem, seenPinMessageDisappearingMessagesWarningCount]);
|
|
|
|
if (pinMessageDialogData == null) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<PinMessageDialog
|
|
i18n={i18n}
|
|
open
|
|
onOpenChange={handleClose}
|
|
messageId={pinMessageDialogData.messageId}
|
|
hasMaxPinnedMessages={pinMessageDialogData.hasMaxPinnedMessages}
|
|
isPinningDisappearingMessage={
|
|
pinMessageDialogData.isPinningDisappearingMessage
|
|
}
|
|
seenPinMessageDisappearingMessagesWarningCount={
|
|
seenPinMessageDisappearingMessagesWarningCount
|
|
}
|
|
onSeenPinMessageDisappearingMessagesWarning={
|
|
handleSeenPinMessageDisappearingMessagesWarning
|
|
}
|
|
onPinnedMessageAdd={onPinnedMessageAdd}
|
|
/>
|
|
);
|
|
});
|