import classNames from 'classnames'; import styled from 'styled-components'; import { useMemo } from 'react'; import { acceptOpenGroupInvitation } from '../../../../interactions/messageInteractions'; import { SessionIconButton } from '../../../icon'; import { ExpirableReadableMessage } from './ExpirableReadableMessage'; import { useMessageCommunityInvitationFullUrl, useMessageCommunityInvitationCommunityName, useMessageDirection, } from '../../../../state/selectors'; import type { WithMessageId } from '../../../../session/types/with'; const StyledCommunityInvitation = styled.div` background-color: var(--message-bubbles-received-background-color); &.invitation-outgoing { background-color: var(--message-bubbles-sent-background-color); align-self: flex-end; .contents { .group-details { color: var(--message-bubbles-sent-text-color); } .session-icon-button { background-color: var(--transparent-color); } } } display: inline-block; padding: 4px; margin: var(--margins-xs) calc(var(--margins-lg) + var(--margins-md)) 0 var(--margins-lg); border-radius: var(--border-radius-message-box); align-self: flex-start; box-shadow: none; .contents { display: flex; align-items: center; margin: 6px; .invite-group-avatar { height: 48px; width: 48px; } .group-details { display: inline-flex; flex-direction: column; color: var(--message-bubbles-received-text-color); padding: 0px 12px; .group-name { font-weight: bold; font-size: 18px; } } .session-icon-button { background-color: var(--primary-color); } } `; const StyledIconContainer = styled.div` background-color: var(--message-link-preview-background-color); border-radius: 100%; `; export const CommunityInvitation = ({ messageId }: WithMessageId) => { const messageDirection = useMessageDirection(messageId); const classes = ['group-invitation']; const fullUrl = useMessageCommunityInvitationFullUrl(messageId); const communityName = useMessageCommunityInvitationCommunityName(messageId); const hostname = useMemo(() => { try { const url = new URL(fullUrl || ''); return url.origin; } catch (e) { window?.log?.warn('failed to get hostname from open groupv2 invitation', fullUrl); return ''; } }, [fullUrl]); if (messageDirection === 'outgoing') { classes.push('invitation-outgoing'); } if (!fullUrl || !hostname) { return null; } return (
{ acceptOpenGroupInvitation(fullUrl, communityName); }} /> {communityName} {window.i18n('communityInvitation')} {hostname}
); };