TelegramPWA/src/components/main/premium/StarsGiftingPickerModal.tsx
Alexander Zinchuk 1dc29627bd Gifts Modal: Implement extended gift options (#5017)
Co-authored-by: Alexander Zinchuk <alx.zinchuk@gmail.com>
Co-authored-by: zubiden <19638254+zubiden@users.noreply.github.com>
2024-11-02 21:11:10 +04:00

119 lines
3.1 KiB
TypeScript

import type { FC } from '../../../lib/teact/teact';
import React, {
memo, useMemo,
useState,
} from '../../../lib/teact/teact';
import { getActions, getGlobal, withGlobal } from '../../../global';
import { SERVICE_NOTIFICATIONS_USER_ID } from '../../../config';
import {
filterUsersByName, isDeletedUser, isUserBot,
} from '../../../global/helpers';
import { unique } from '../../../util/iteratees';
import sortChatIds from '../../common/helpers/sortChatIds';
import useLastCallback from '../../../hooks/useLastCallback';
import useOldLang from '../../../hooks/useOldLang';
import PeerPicker from '../../common/pickers/PeerPicker';
import PickerModal from '../../common/pickers/PickerModal';
import styles from './StarsGiftingPickerModal.module.scss';
export type OwnProps = {
isOpen?: boolean;
};
interface StateProps {
currentUserId?: string;
userIds?: string[];
activeListIds?: string[];
archivedListIds?: string[];
}
const StarsGiftingPickerModal: FC<OwnProps & StateProps> = ({
isOpen,
currentUserId,
activeListIds,
archivedListIds,
userIds,
}) => {
const { closeStarsGiftingPickerModal, openStarsGiftModal } = getActions();
const oldLang = useOldLang();
const [searchQuery, setSearchQuery] = useState<string>('');
const displayedUserIds = useMemo(() => {
const usersById = getGlobal().users.byId;
const combinedIds = [
...(userIds || []),
...(activeListIds || []),
...(archivedListIds || []),
];
const filteredContactIds = filterUsersByName(combinedIds, usersById, searchQuery);
return sortChatIds(unique(filteredContactIds).filter((id) => {
const user = usersById[id];
if (!user) {
return false;
}
return !user.isSupport
&& !isUserBot(user) && !isDeletedUser(user)
&& id !== currentUserId && id !== SERVICE_NOTIFICATIONS_USER_ID;
}));
}, [currentUserId, searchQuery, userIds, activeListIds, archivedListIds]);
const handleSelectedUserIdsChange = useLastCallback((newSelectedId?: string) => {
if (newSelectedId?.length) {
openStarsGiftModal({ forUserId: newSelectedId });
closeStarsGiftingPickerModal();
}
});
return (
<PickerModal
className={styles.root}
isOpen={isOpen}
onClose={closeStarsGiftingPickerModal}
title={oldLang('GiftStarsTitle')}
hasCloseButton
shouldAdaptToSearch
withFixedHeight
confirmButtonText={oldLang('Continue')}
onEnter={closeStarsGiftingPickerModal}
>
<PeerPicker
className={styles.picker}
itemIds={displayedUserIds}
filterValue={searchQuery}
filterPlaceholder={oldLang('Search')}
onFilterChange={setSearchQuery}
isSearchable
withDefaultPadding
withStatus
onSelectedIdChange={handleSelectedUserIdsChange}
/>
</PickerModal>
);
};
export default memo(withGlobal<OwnProps>((global): StateProps => {
const {
chats: {
listIds,
},
currentUserId,
} = global;
return {
userIds: global.contactList?.userIds,
activeListIds: listIds.active,
archivedListIds: listIds.archived,
currentUserId,
};
})(StarsGiftingPickerModal));