import Modal from '@app/components/Common/Modal'; import PermissionEdit from '@app/components/PermissionEdit'; import type { User } from '@app/hooks/useUser'; import { useUser } from '@app/hooks/useUser'; import globalMessages from '@app/i18n/globalMessages'; import defineMessages from '@app/utils/defineMessages'; import { useEffect, useState } from 'react'; import { useIntl } from 'react-intl'; import { useToasts } from 'react-toast-notifications'; interface BulkEditProps { selectedUserIds: number[]; users?: User[]; onCancel?: () => void; onComplete?: (updatedUsers: User[]) => void; onSaving?: (isSaving: boolean) => void; } const messages = defineMessages('components.UserList', { userssaved: 'User permissions saved successfully!', userfail: 'Something went wrong while saving user permissions.', edituser: 'Edit User Permissions', }); const BulkEditModal = ({ selectedUserIds, users, onCancel, onComplete, onSaving, }: BulkEditProps) => { const { user: currentUser } = useUser(); const intl = useIntl(); const { addToast } = useToasts(); const [currentPermission, setCurrentPermission] = useState(0); const [isSaving, setIsSaving] = useState(false); useEffect(() => { if (onSaving) { onSaving(isSaving); } }, [isSaving, onSaving]); const updateUsers = async () => { try { setIsSaving(true); const res = await fetch('/api/v1/user', { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ ids: selectedUserIds, permissions: currentPermission, }), }); if (!res.ok) throw new Error(); const updated: User[] = await res.json(); if (onComplete) { onComplete(updated); } addToast(intl.formatMessage(messages.userssaved), { appearance: 'success', autoDismiss: true, }); } catch (e) { addToast(intl.formatMessage(messages.userfail), { appearance: 'error', autoDismiss: true, }); } finally { setIsSaving(false); } }; useEffect(() => { if (users) { const selectedUsers = users.filter((u) => selectedUserIds.includes(u.id)); const { permissions: allPermissionsEqual } = selectedUsers.reduce( ({ permissions: aPerms }, { permissions: bPerms }) => { return { permissions: aPerms === bPerms ? aPerms : NaN, }; }, { permissions: selectedUsers[0].permissions } ); if (allPermissionsEqual) { setCurrentPermission(allPermissionsEqual); } } }, [users, selectedUserIds]); return ( { updateUsers(); }} okDisabled={isSaving} okText={intl.formatMessage(globalMessages.save)} onCancel={onCancel} >
setCurrentPermission(newPermission)} />
); }; export default BulkEditModal;