Skip to content

Commit ee81de6

Browse files
committed
Add support for editing a subuser
1 parent 1270e51 commit ee81de6

File tree

3 files changed

+29
-8
lines changed

3 files changed

+29
-8
lines changed

resources/scripts/components/server/users/EditSubuserModal.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { forwardRef, MutableRefObject, useRef } from 'react';
1+
import React, { forwardRef, useRef } from 'react';
22
import { Subuser } from '@/state/server/subusers';
33
import { Form, Formik, FormikHelpers, useFormikContext } from 'formik';
44
import { array, object, string } from 'yup';
@@ -39,15 +39,17 @@ const EditSubuserModal = forwardRef<HTMLHeadingElement, Props>(({ subuser, ...pr
3939

4040
return (
4141
<Modal {...props} showSpinnerOverlay={isSubmitting}>
42-
<h3 ref={ref}>{subuser ? 'Edit subuser' : 'Create new subuser'}</h3>
42+
<h3 ref={ref}>{subuser ? `Modify permissions for ${subuser.email}` : 'Create new subuser'}</h3>
4343
<FlashMessageRender byKey={'user:edit'} className={'mt-4'}/>
44+
{!subuser &&
4445
<div className={'mt-6'}>
4546
<Field
4647
name={'email'}
4748
label={'User Email'}
4849
description={'Enter the email address of the user you wish to invite as a subuser for this server.'}
4950
/>
5051
</div>
52+
}
5153
<div className={'mt-6'}>
5254
{Object.keys(permissions).filter(key => key !== 'websocket').map((key, index) => (
5355
<TitledGreyBox

resources/scripts/components/server/users/UserRow.tsx

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
11
import React, { useState } from 'react';
22
import { Subuser } from '@/state/server/subusers';
3-
import { ServerContext } from '@/state/server';
43
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
54
import { faPencilAlt } from '@fortawesome/free-solid-svg-icons/faPencilAlt';
6-
import { faTrashAlt } from '@fortawesome/free-solid-svg-icons/faTrashAlt';
7-
import ConfirmationModal from '@/components/elements/ConfirmationModal';
85
import RemoveSubuserButton from '@/components/server/users/RemoveSubuserButton';
6+
import EditSubuserModal from '@/components/server/users/EditSubuserModal';
97

108
interface Props {
119
subuser: Subuser;
1210
}
1311

1412
export default ({ subuser }: Props) => {
15-
const appendSubuser = ServerContext.useStoreActions(actions => actions.subusers.appendSubuser);
13+
const [ visible, setVisible ] = useState(false);
1614

1715
return (
1816
<div className={'grey-row-box mb-2'}>
17+
{visible &&
18+
<EditSubuserModal
19+
appear={true}
20+
visible={true}
21+
subuser={subuser}
22+
onDismissed={() => setVisible(false)}
23+
/>
24+
}
1925
<div className={'w-10 h-10 rounded-full bg-white border-2 border-inset border-neutral-800 overflow-hidden'}>
2026
<img className={'f-full h-full'} src={`${subuser.image}?s=400`}/>
2127
</div>
@@ -26,7 +32,7 @@ export default ({ subuser }: Props) => {
2632
type={'button'}
2733
aria-label={'Edit subuser'}
2834
className={'block text-sm p-2 text-neutral-500 hover:text-neutral-100 transition-colors duration-150 mr-4'}
29-
onClick={() => null}
35+
onClick={() => setVisible(true)}
3036
>
3137
<FontAwesomeIcon icon={faPencilAlt}/>
3238
</button>

resources/scripts/state/server/subusers.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,20 @@ const subusers: ServerSubuserStore = {
3838
}),
3939

4040
appendSubuser: action((state, payload) => {
41-
state.data = [ ...state.data.filter(user => user.uuid !== payload.uuid), payload ];
41+
let matched = false;
42+
state.data = [
43+
...state.data
44+
.map(user => {
45+
if (user.uuid === payload.uuid) {
46+
matched = true;
47+
48+
return payload;
49+
}
50+
51+
return user;
52+
})
53+
.concat(matched ? [] : [ payload ]),
54+
];
4255
}),
4356

4457
removeSubuser: action((state, payload) => {

0 commit comments

Comments
 (0)