Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added default current suer to entiy list for access requests #990

Merged
merged 2 commits into from
Jan 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ describe('Make and approve an access request', () => {
})

cy.log('Creating the access request')
cy.get('body').contains('Select a different schema')
cy.get('[data-test=entitySelector]').contains('user')
cy.get('#root_name-label').contains('What is the name of the access request?')
cy.get('#root_name').type('Test access request')
cy.get('[data-test=entitySelector').type('user')
cy.get('li[data-option-index="0"]').click()
cy.get('[data-test=createAccessRequestButton]', { timeout: 15000 }).click()

cy.url().should('contain', `/beta/model/${modelUuid}/access-request`)
Expand Down
23 changes: 19 additions & 4 deletions frontend/pages/beta/model/[modelId]/access-request/new.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import ArrowBack from '@mui/icons-material/ArrowBack'
import { LoadingButton } from '@mui/lab'
import { Button, Card, Stack, Typography } from '@mui/material'
import { useGetCurrentUser } from 'actions/user'
import dayjs from 'dayjs'
import { useRouter } from 'next/router'
import { useEffect, useMemo, useState } from 'react'
import MultipleErrorWrapper from 'src/errors/MultipleErrorWrapper'
Expand All @@ -23,22 +25,33 @@ export default function NewAccessRequest() {
const { modelId, schemaId }: { modelId?: string; schemaId?: string } = router.query
const { model, isModelLoading, isModelError } = useGetModel(modelId)
const { schema, isSchemaLoading, isSchemaError } = useGetSchema(schemaId || '')
const { currentUser, isCurrentUserLoading, isCurrentUserError } = useGetCurrentUser()

const [splitSchema, setSplitSchema] = useState<SplitSchemaNoRender>({ reference: '', steps: [] })
const [submissionErrorText, setSubmissionErrorText] = useState('')
const [submitButtonLoading, setSubmitButtonLoading] = useState(false)

const isLoading = useMemo(() => isSchemaLoading || isModelLoading, [isModelLoading, isSchemaLoading])
const isLoading = useMemo(
() => isSchemaLoading || isModelLoading || isCurrentUserLoading,
[isModelLoading, isSchemaLoading, isCurrentUserLoading],
)

useEffect(() => {
if (!model || !schema) return
const steps = getStepsFromSchema(schema, {}, [], {})
if (!model || !schema || !currentUser) return

const defaultState = {
overview: {
entities: [`user:${currentUser.dn}`],
endDate: dayjs(new Date()).format('YYYY-MM-DD').toString(),
},
}
const steps = getStepsFromSchema(schema, {}, [], defaultState)
for (const step of steps) {
step.steps = steps
}

setSplitSchema({ reference: schema.id, steps })
}, [schema, model])
}, [schema, model, currentUser])

async function onSubmit() {
setSubmissionErrorText('')
Expand Down Expand Up @@ -89,6 +102,7 @@ export default function NewAccessRequest() {
const error = MultipleErrorWrapper(`Unable to load access request page`, {
isModelError,
isSchemaError,
isCurrentUserError,
})
if (error) return error

Expand All @@ -112,6 +126,7 @@ export default function NewAccessRequest() {
setSplitSchema={setSplitSchema}
canEdit
displayLabelValidation
defaultCurrentUserInEntityList
/>
<Stack alignItems='flex-end'>
<LoadingButton
Expand Down
8 changes: 7 additions & 1 deletion frontend/src/Form/beta/JsonSchemaForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,13 @@ export default function JsonSchemaForm({
setSplitSchema,
canEdit = false,
displayLabelValidation = false,
defaultCurrentUserInEntityList = false,
}: {
splitSchema: SplitSchemaNoRender
setSplitSchema: Dispatch<SetStateAction<SplitSchemaNoRender>>
canEdit?: boolean
displayLabelValidation?: boolean
defaultCurrentUserInEntityList?: boolean
}) {
const [activeStep, setActiveStep] = useState(0)

Expand Down Expand Up @@ -130,7 +132,11 @@ export default function JsonSchemaForm({
omitExtraData
disabled={!canEdit}
liveOmit
formContext={{ editMode: canEdit, formSchema: currentStep.schema }}
formContext={{
editMode: canEdit,
formSchema: currentStep.schema,
defaultCurrentUser: defaultCurrentUserInEntityList,
}}
templates={
!canEdit
? {
Expand Down
10 changes: 9 additions & 1 deletion frontend/src/MuiForms/EntitySelectorBeta.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { useTheme } from '@mui/material/styles'
import TextField from '@mui/material/TextField'
import { FormContextType } from '@rjsf/utils'
import { debounce } from 'lodash'
import { KeyboardEvent, SyntheticEvent, useCallback, useState } from 'react'
import { KeyboardEvent, SyntheticEvent, useCallback, useEffect, useMemo, useState } from 'react'
import { EntityObject } from 'types/v2/types'

import { useGetCurrentUser, useListUsers } from '../../actions/user'
Expand All @@ -30,6 +30,13 @@ export default function EntitySelectorBeta(props: EntitySelectorBetaProps) {
const { currentUser, isCurrentUserLoading, isCurrentUserError } = useGetCurrentUser()

const theme = useTheme()
const currentUserId = useMemo(() => (currentUser ? currentUser?.dn : ''), [currentUser])

useEffect(() => {
if (formContext && formContext.defaultCurrentUser) {
setSelectedEntities([{ id: currentUserId, kind: 'user' }])
}
}, [currentUserId, formContext])

const handleUserChange = useCallback(
(_event: SyntheticEvent<Element, Event>, newValues: EntityObject[]) => {
Expand Down Expand Up @@ -88,6 +95,7 @@ export default function EntitySelectorBeta(props: EntitySelectorBetaProps) {
renderInput={(params) => (
<TextField
{...params}
placeholder='Username or group name'
label={label + (required ? ' *' : '')}
onKeyDown={(event: KeyboardEvent) => {
if (event.key === 'Backspace') {
Expand Down