Skip to content
This repository was archived by the owner on Aug 21, 2024. It is now read-only.

Commit ddd3425

Browse files
authored
feat: ban user functionality (#7975)
1 parent bd77d02 commit ddd3425

3 files changed

Lines changed: 39 additions & 14 deletions

File tree

β€Žpackages/client-core/i18n/en/admin.jsonβ€Ž

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
"delete": "Delete",
6464
"view": "View",
6565
"kick": "Kick",
66+
"ban": "Ban",
6667
"yes": "Yes",
6768
"no": "No",
6869
"refresh": "Refresh",
@@ -205,7 +206,8 @@
205206
"confirmInstanceDelete": "Do you want to delete instance",
206207
"location": "Location",
207208
"count": "Count",
208-
"kickDuration": "Kick Duration"
209+
"kickDuration": "Kick Duration",
210+
"confirmUserBan": "Are you sure you want to ban this user?"
209211
},
210212
"resources": {
211213
"resources": "resources",

β€Žpackages/client-core/src/admin/components/Instance/InstanceDrawer.tsxβ€Ž

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ interface Props {
2828
onClose: () => void
2929
}
3030

31+
const INFINITY = 'INFINITY'
32+
3133
const InstanceDrawer = ({ open, selectedInstance, onClose }: Props) => {
3234
const page = useHookstate(0)
3335
const rowsPerPage = useHookstate(INSTANCE_USERS_PAGE_LIMIT)
@@ -64,16 +66,29 @@ const InstanceDrawer = ({ open, selectedInstance, onClose }: Props) => {
6466
>
6567
<span className={styles.spanWhite}>{t('admin:components.common.kick')}</span>
6668
</Button>
69+
<Button
70+
className={styles.actionStyle}
71+
onClick={() => {
72+
kickData.merge({ userId: id, instanceId: selectedInstance!.id, duration: INFINITY })
73+
openKickDialog.set(true)
74+
}}
75+
>
76+
<span className={styles.spanWhite}>{t('admin:components.common.ban')}</span>
77+
</Button>
6778
</>
6879
)
6980
})
7081

71-
const handleSubmitKickUser = () => {
72-
if (!kickData.value.duration) {
82+
const handleSubmitKickUser = async () => {
83+
if (!kickData.value.duration || !selectedInstance) {
7384
return
7485
}
75-
AdminInstanceUserService.kickUser({ ...kickData.value })
86+
await AdminInstanceUserService.kickUser({ ...kickData.value })
87+
await AdminInstanceUserService.fetchUsersInInstance(selectedInstance.id)
7688
openKickDialog.set(false)
89+
if (kickData.value.duration === INFINITY) {
90+
kickData.merge({ duration: '8' })
91+
}
7792
}
7893

7994
const rows = adminInstanceUserState.value.users.map((el) => createData(el.id, el.name))
@@ -104,12 +119,16 @@ const InstanceDrawer = ({ open, selectedInstance, onClose }: Props) => {
104119
onClose={() => openKickDialog.set(false)}
105120
description={
106121
<Box>
107-
<InputText
108-
name="kickDuration"
109-
label={t('admin:components.instance.kickDuration')}
110-
value={kickData.value.duration}
111-
onChange={(event) => kickData.merge({ duration: event.target.value })}
112-
/>
122+
{kickData.value.duration === INFINITY ? (
123+
<span>{t('admin:components.instance.confirmUserBan')}</span>
124+
) : (
125+
<InputText
126+
name="kickDuration"
127+
label={t('admin:components.instance.kickDuration')}
128+
value={kickData.value.duration}
129+
onChange={(event) => kickData.merge({ duration: event.target.value })}
130+
/>
131+
)}
113132
</Box>
114133
}
115134
/>

β€Žpackages/client-core/src/admin/services/InstanceService.tsβ€Ž

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,14 +166,18 @@ export const AdminInstanceUserService = {
166166
dispatchAction(AdminInstanceUserActions.instanceUsersRetrieved({ users }))
167167
},
168168
kickUser: async (kickData: { userId: UserInterface['id']; instanceId: Instance['id']; duration: string }) => {
169-
console.log('kicking user', kickData)
170-
171169
const duration = new Date()
172-
duration.setHours(duration.getHours() + parseInt(kickData.duration, 10))
170+
if (kickData.duration === 'INFINITY') {
171+
duration.setFullYear(duration.getFullYear() + 10) // ban for 10 years
172+
} else {
173+
duration.setHours(duration.getHours() + parseInt(kickData.duration, 10))
174+
}
173175

174176
const userKick = await API.instance.client.service('user-kick').create({ ...kickData, duration })
175177

176-
console.log('kicked user', userKick)
178+
console.log('user kicked ->', userKick)
179+
180+
NotificationService.dispatchNotify(`user was kicked`, { variant: 'default' })
177181
}
178182
}
179183

0 commit comments

Comments
Β (0)