mirror of
https://github.com/harness/drone.git
synced 2025-05-17 09:30:00 +08:00
feat: [CODE-649]: Users Dropdown in Add New Member Dialog (#248)
This commit is contained in:
parent
43c8ee125d
commit
25031d113a
@ -11,10 +11,11 @@ import {
|
|||||||
MembershipAddRequestBody,
|
MembershipAddRequestBody,
|
||||||
TypesMembership,
|
TypesMembership,
|
||||||
TypesPrincipalInfo,
|
TypesPrincipalInfo,
|
||||||
|
useListPrincipals,
|
||||||
useMembershipAdd,
|
useMembershipAdd,
|
||||||
useMembershipUpdate
|
useMembershipUpdate
|
||||||
} from 'services/code'
|
} from 'services/code'
|
||||||
import { getErrorMessage } from 'utils/Utils'
|
import { getErrorMessage, LIST_FETCHING_LIMIT } from 'utils/Utils'
|
||||||
|
|
||||||
import { roleStringKeyMap } from '../SpaceAccessControl'
|
import { roleStringKeyMap } from '../SpaceAccessControl'
|
||||||
|
|
||||||
@ -23,6 +24,7 @@ const roles = ['reader', 'executor', 'contributor', 'space_owner'] as const
|
|||||||
const useAddNewMember = ({ onClose }: { onClose: () => void }) => {
|
const useAddNewMember = ({ onClose }: { onClose: () => void }) => {
|
||||||
const [isEditFlow, setIsEditFlow] = useState(false)
|
const [isEditFlow, setIsEditFlow] = useState(false)
|
||||||
const [membershipDetails, setMembershipDetails] = useState<TypesMembership>()
|
const [membershipDetails, setMembershipDetails] = useState<TypesMembership>()
|
||||||
|
const [searchTerm, setSearchTerm] = useState('')
|
||||||
|
|
||||||
const space = useGetSpaceParam()
|
const space = useGetSpaceParam()
|
||||||
const { getString } = useStrings()
|
const { getString } = useStrings()
|
||||||
@ -34,6 +36,16 @@ const useAddNewMember = ({ onClose }: { onClose: () => void }) => {
|
|||||||
user_uid: membershipDetails?.principal?.uid || ''
|
user_uid: membershipDetails?.principal?.uid || ''
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const { data: users, loading: fetchingUsers } = useListPrincipals({
|
||||||
|
queryParams: {
|
||||||
|
query: searchTerm,
|
||||||
|
page: 1,
|
||||||
|
limit: LIST_FETCHING_LIMIT,
|
||||||
|
type: ['user']
|
||||||
|
},
|
||||||
|
debounce: 500
|
||||||
|
})
|
||||||
|
|
||||||
const roleOptions: SelectOption[] = useMemo(
|
const roleOptions: SelectOption[] = useMemo(
|
||||||
() =>
|
() =>
|
||||||
roles.map(role => ({
|
roles.map(role => ({
|
||||||
@ -43,12 +55,26 @@ const useAddNewMember = ({ onClose }: { onClose: () => void }) => {
|
|||||||
[]
|
[]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const userOptions: SelectOption[] = useMemo(
|
||||||
|
() =>
|
||||||
|
users?.map(user => ({
|
||||||
|
value: user.uid as string,
|
||||||
|
label: (user.display_name || user.email) as string
|
||||||
|
})) || [],
|
||||||
|
[users]
|
||||||
|
)
|
||||||
|
|
||||||
|
const handleClose = () => {
|
||||||
|
setSearchTerm('')
|
||||||
|
hideModal()
|
||||||
|
}
|
||||||
|
|
||||||
const [openModal, hideModal] = useModalHook(() => {
|
const [openModal, hideModal] = useModalHook(() => {
|
||||||
return (
|
return (
|
||||||
<Dialog
|
<Dialog
|
||||||
isOpen
|
isOpen
|
||||||
enforceFocus={false}
|
enforceFocus={false}
|
||||||
onClose={hideModal}
|
onClose={handleClose}
|
||||||
title={isEditFlow ? getString('changeRole') : getString('spaceMemberships.addMember')}>
|
title={isEditFlow ? getString('changeRole') : getString('spaceMemberships.addMember')}>
|
||||||
<Formik<MembershipAddRequestBody>
|
<Formik<MembershipAddRequestBody>
|
||||||
initialValues={{
|
initialValues={{
|
||||||
@ -68,18 +94,29 @@ const useAddNewMember = ({ onClose }: { onClose: () => void }) => {
|
|||||||
showSuccess(getString('spaceMemberships.memberAdded'))
|
showSuccess(getString('spaceMemberships.memberAdded'))
|
||||||
}
|
}
|
||||||
|
|
||||||
hideModal()
|
handleClose()
|
||||||
onClose()
|
onClose()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
showError(getErrorMessage(error))
|
showError(getErrorMessage(error))
|
||||||
}
|
}
|
||||||
}}>
|
}}>
|
||||||
<FormikForm>
|
<FormikForm>
|
||||||
<FormInput.Text
|
<FormInput.Select
|
||||||
|
usePortal
|
||||||
name="user_uid"
|
name="user_uid"
|
||||||
label={getString('userId')}
|
label={getString('user')}
|
||||||
placeholder={getString('newUserModal.uidPlaceholder')}
|
items={userOptions}
|
||||||
|
value={
|
||||||
|
isEditFlow
|
||||||
|
? {
|
||||||
|
label: membershipDetails?.principal?.display_name as string,
|
||||||
|
value: membershipDetails?.principal?.uid as string
|
||||||
|
}
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
disabled={isEditFlow}
|
disabled={isEditFlow}
|
||||||
|
onQueryChange={setSearchTerm}
|
||||||
|
selectProps={{ loadingItems: fetchingUsers }}
|
||||||
/>
|
/>
|
||||||
<FormInput.Select name="role" label={getString('role')} items={roleOptions} usePortal />
|
<FormInput.Select name="role" label={getString('role')} items={roleOptions} usePortal />
|
||||||
<Button
|
<Button
|
||||||
@ -92,7 +129,7 @@ const useAddNewMember = ({ onClose }: { onClose: () => void }) => {
|
|||||||
</Formik>
|
</Formik>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
)
|
)
|
||||||
}, [isEditFlow, membershipDetails])
|
}, [isEditFlow, membershipDetails, userOptions])
|
||||||
|
|
||||||
return {
|
return {
|
||||||
openModal: (isEditing?: boolean, memberInfo?: TypesPrincipalInfo) => {
|
openModal: (isEditing?: boolean, memberInfo?: TypesPrincipalInfo) => {
|
||||||
|
Loading…
Reference in New Issue
Block a user