86 lines
2.5 KiB
TypeScript
86 lines
2.5 KiB
TypeScript
import React, { memo, useState } from '../../../../lib/teact/teact';
|
|
import { getActions, withGlobal } from '../../../../global';
|
|
|
|
import type { ApiUser } from '../../../../api/types';
|
|
import type { TabState } from '../../../../global/types';
|
|
|
|
import { getPeerTitle } from '../../../../global/helpers/peers';
|
|
import { selectUser } from '../../../../global/selectors';
|
|
import { formatStarsAsText } from '../../../../util/localization/format';
|
|
|
|
import useCurrentOrPrev from '../../../../hooks/useCurrentOrPrev';
|
|
import useLang from '../../../../hooks/useLang';
|
|
import useLastCallback from '../../../../hooks/useLastCallback';
|
|
|
|
import Checkbox from '../../../ui/Checkbox';
|
|
import ConfirmDialog from '../../../ui/ConfirmDialog';
|
|
|
|
export type OwnProps = {
|
|
modal: TabState['chatRefundModal'];
|
|
};
|
|
|
|
type StateProps = {
|
|
user?: ApiUser;
|
|
};
|
|
|
|
const ChatRefundModal = ({ modal, user }: OwnProps & StateProps) => {
|
|
const { closeChatRefundModal, addNoPaidMessagesException } = getActions();
|
|
|
|
const [shouldRefundStars, setShouldRefundStars] = useState(false);
|
|
|
|
const renderingModal = useCurrentOrPrev(modal);
|
|
const renderingUser = useCurrentOrPrev(user);
|
|
|
|
const { starsToRefund, userId } = renderingModal || {};
|
|
|
|
const lang = useLang();
|
|
|
|
const isOpen = Boolean(modal);
|
|
|
|
const handleConfirmRemoveFee = useLastCallback(() => {
|
|
closeChatRefundModal();
|
|
if (!userId) return;
|
|
addNoPaidMessagesException({ userId, shouldRefundCharged: shouldRefundStars });
|
|
});
|
|
|
|
return (
|
|
<ConfirmDialog
|
|
isOpen={isOpen}
|
|
onClose={closeChatRefundModal}
|
|
title={lang('RemoveFeeTitle')}
|
|
confirmLabel={lang('ConfirmRemoveMessageFee')}
|
|
confirmHandler={handleConfirmRemoveFee}
|
|
>
|
|
{lang('ConfirmDialogMessageRemoveFee', {
|
|
peer: renderingUser && getPeerTitle(lang, renderingUser),
|
|
}, {
|
|
withMarkdown: true,
|
|
withNodes: true,
|
|
})}
|
|
{
|
|
Boolean(starsToRefund) && (
|
|
<Checkbox
|
|
className="dialog-checkbox"
|
|
label={lang('ConfirmDialogRemoveFeeRefundStars', {
|
|
amount: formatStarsAsText(lang, starsToRefund),
|
|
}, {
|
|
withMarkdown: true,
|
|
withNodes: true,
|
|
})}
|
|
checked={shouldRefundStars}
|
|
onCheck={setShouldRefundStars}
|
|
/>
|
|
)
|
|
}
|
|
</ConfirmDialog>
|
|
);
|
|
};
|
|
|
|
export default memo(withGlobal<OwnProps>((global, { modal }): StateProps => {
|
|
const user = modal?.userId ? selectUser(global, modal.userId) : undefined;
|
|
|
|
return {
|
|
user,
|
|
};
|
|
})(ChatRefundModal));
|