import React, { useCallback, useState } from 'react' import { Trans, useTranslation } from 'react-i18next' import useWaitForI18n from '../../../shared/hooks/use-wait-for-i18n' import getMeta from '../../../utils/meta' import { useGroupMembersContext } from '../context/group-members-context' import ErrorAlert from './error-alert' import MembersList from './members-table/members-list' import { sendMB } from '../../../infrastructure/event-tracking' import BackButton from '@/features/group-management/components/back-button' import OLRow from '@/features/ui/components/ol/ol-row' import OLCol from '@/features/ui/components/ol/ol-col' import OLCard from '@/features/ui/components/ol/ol-card' import OLButton from '@/features/ui/components/ol/ol-button' import OLFormControl from '@/features/ui/components/ol/ol-form-control' import OLFormText from '@/features/ui/components/ol/ol-form-text' export default function GroupMembers() { const { isReady } = useWaitForI18n() const { t } = useTranslation() const { users, selectedUsers, addMembers, removeMembers, removeMemberLoading, removeMemberError, inviteMemberLoading, inviteError, paths, } = useGroupMembersContext() const [emailString, setEmailString] = useState('') const groupId = getMeta('ol-groupId') const groupName = getMeta('ol-groupName') const groupSize = getMeta('ol-groupSize') const canUseFlexibleLicensing = getMeta('ol-canUseFlexibleLicensing') const canUseAddSeatsFeature = getMeta('ol-canUseAddSeatsFeature') const handleEmailsChange = useCallback( e => { setEmailString(e.target.value) }, [setEmailString] ) if (!isReady) { return null } const onAddMembersSubmit = (e: React.FormEvent) => { e.preventDefault() addMembers(emailString) } const groupSizeDetails = () => { if (canUseFlexibleLicensing) { return ( {users.length === 1 ? t('you_have_1_license_and_your_plan_supports_up_to_y', { groupSize, }) : t('you_have_x_licenses_and_your_plan_supports_up_to_y', { addedUsersSize: users.length, groupSize, })} {canUseAddSeatsFeature && ( <> {' '} sendMB('flex-add-users')} > {t('buy_more_licenses')}. )} ) } return ( , ]} // eslint-disable-line react/jsx-key values={{ addedUsersSize: users.length, groupSize }} shouldUnescape tOptions={{ interpolation: { escapeValue: true } }} /> ) } return (

{groupName || t('group_subscription')}

{selectedUsers.length === 0 && groupSizeDetails()} {removeMemberLoading ? ( {t('removing')}… ) : ( <> {selectedUsers.length > 0 && ( {t('remove_from_group')} )} )}

{t('members_management')}


{users.length < groupSize && (

{t('invite_more_members')}

{t('invite')} {t('export_csv')} {t('add_comma_separated_emails_help')}
)} {users.length >= groupSize && users.length > 0 && ( <> {t('export_csv')} )}
) }