Skip to content

Commit

Permalink
MMT-3907: Added provider selector to the form.
Browse files Browse the repository at this point in the history
  • Loading branch information
Christopher D. Gokey committed Sep 27, 2024
1 parent bed1349 commit 8f22fdd
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 76 deletions.
142 changes: 67 additions & 75 deletions static/src/js/components/PermissionForm/PermissionForm.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import { cloneDeep } from '@apollo/client/utilities'
import {
GET_COLLECTION_FOR_PERMISSION_FORM
} from '@/js/operations/queries/getCollectionForPermissionForm'
import useAvailableProviders from '@/js/hooks/useAvailableProviders'
import CustomArrayFieldTemplate from '../CustomArrayFieldTemplate/CustomArrayFieldTemplate'
import CustomDateTimeWidget from '../CustomDateTimeWidget/CustomDateTimeWidget'
import CustomFieldTemplate from '../CustomFieldTemplate/CustomFieldTemplate'
Expand All @@ -48,8 +49,6 @@ import GridLayout from '../GridLayout/GridLayout'
import GroupPermissionSelect from '../GroupPermissionSelect/GroupPermissionSelect'
import KeywordPicker from '../KeywordPicker/KeywordPicker'

import ChooseProviderModal from '../ChooseProviderModal/ChooseProviderModal'

/**
* Validates the form data for the access constraints and temporal constraints.
*
Expand Down Expand Up @@ -184,7 +183,7 @@ const PermissionForm = ({ selectedCollectionsPageSize }) => {
const [focusField, setFocusField] = useState(null)
const [uiSchema, setUiSchema] = useState(collectionPermissionUiSchema)

const [chooseProviderModalOpen, setChooseProviderModalOpen] = useState(false)
const { providerIds } = useAvailableProviders()

const [createAclMutation] = useMutation(CREATE_ACL)
const [updateAclMutation] = useMutation(UPDATE_ACL, {
Expand All @@ -198,11 +197,28 @@ const PermissionForm = ({ selectedCollectionsPageSize }) => {
}
})

useEffect(() => {
setProviderId(draft?.formData?.providerId)
}, [draft])

useEffect(() => {
const newUiSchema = cloneDeep(uiSchema)
newUiSchema.providerId['ui:options'].enumOptions = providerIds
setUiSchema(newUiSchema)
}, [providerIds])

useEffect(() => {
if (providerId) {
const newUiSchema = cloneDeep(uiSchema)
newUiSchema.collectionSelection.selectedCollections['ui:providerId'] = providerId
setUiSchema(newUiSchema)
setDraft({
...draft,
formData: {
...draft.formData,
providerId
}
})
}
}, [providerId])

Expand Down Expand Up @@ -302,30 +318,30 @@ const PermissionForm = ({ selectedCollectionsPageSize }) => {
const showGranuleFields = (formData) => {
if (formData.accessPermission?.granule) {
const newUiSchema = {
...collectionPermissionUiSchema,
...uiSchema,
accessConstraintFilter: {
...collectionPermissionUiSchema.accessConstraintFilter,
...uiSchema.accessConstraintFilter,
granuleAccessConstraint: {
...collectionPermissionUiSchema.accessConstraintFilter.granuleAccessConstraint,
...uiSchema.accessConstraintFilter.granuleAccessConstraint,
'ui:disabled': false
}
},
temporalConstraintFilter: {
...collectionPermissionUiSchema.temporalConstraintFilter,
...uiSchema.temporalConstraintFilter,
granuleTemporalConstraint: {
...collectionPermissionUiSchema.temporalConstraintFilter.granuleTemporalConstraint,
...uiSchema.temporalConstraintFilter.granuleTemporalConstraint,
'ui:disabled': false
}
}
}
setUiSchema(newUiSchema)
} else {
const newUiSchema = {
...collectionPermissionUiSchema,
...uiSchema,
accessConstraintFilter: {
...collectionPermissionUiSchema.accessConstraintFilter,
...uiSchema.accessConstraintFilter,
granuleAccessConstraint: {
...collectionPermissionUiSchema.accessConstraintFilter.granuleAccessConstraint,
...uiSchema.accessConstraintFilter.granuleAccessConstraint,
'ui:disabled': true
}
}
Expand Down Expand Up @@ -731,75 +747,51 @@ const PermissionForm = ({ selectedCollectionsPageSize }) => {
}

const handleSetProviderOrSubmit = () => {
if (conceptId === 'new') {
setChooseProviderModalOpen(true)

return
}

handleSubmit()
}

return (
<>
<Container className="permission-form__container mx-0" fluid>
<Row>
<Col>
<Form
fields={fields}
formContext={
{
focusField,
setFocusField
}
<Container className="permission-form__container mx-0" fluid>
<Row>
<Col>
<Form
fields={fields}
formContext={
{
focusField,
setFocusField
}
liveValidate
widgets={widgets}
schema={collectionPermission}
validator={validator}
templates={templates}
uiSchema={uiSchema}
onChange={handleChange}
formData={removeEmpty(formData)}
onSubmit={handleSetProviderOrSubmit}
showErrorList="false"
customValidate={validate}
>
<div className="d-flex gap-2">
<Button
type="submit"
variant="primary"
>
{saveTypesToHumanizedStringMap[saveTypes.submit]}
</Button>
<Button
onClick={handleClear}
variant="secondary"
>
Clear
</Button>
</div>
</Form>
</Col>
</Row>
</Container>
<ChooseProviderModal
show={chooseProviderModalOpen}
primaryActionType={saveTypes.submit}
toggleModal={
() => {
setChooseProviderModalOpen(false)
}
}
type="collectionPermission"
onSubmit={
() => {
handleSubmit()
setChooseProviderModalOpen(false)
}
}
/>
</>
}
liveValidate
widgets={widgets}
schema={collectionPermission}
validator={validator}
templates={templates}
uiSchema={uiSchema}
onChange={handleChange}
formData={removeEmpty(formData)}
onSubmit={handleSetProviderOrSubmit}
showErrorList="false"
customValidate={validate}
>
<div className="d-flex gap-2">
<Button
type="submit"
variant="primary"
>
{saveTypesToHumanizedStringMap[saveTypes.submit]}
</Button>
<Button
onClick={handleClear}
variant="secondary"
>
Clear
</Button>
</div>
</Form>
</Col>
</Row>
</Container>
)
}

Expand Down
6 changes: 5 additions & 1 deletion static/src/js/schemas/collectionPermission.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ const collectionPermission = {
minLength: 1,
maxLength: 85
},
providerId: {
description: 'The provider id of the collection permission.',
type: 'string'
},
accessPermission: {
$ref: '#/definitions/accessPermissionType'
},
Expand All @@ -26,7 +30,7 @@ const collectionPermission = {
type: 'object'
}
},
required: ['name', 'collectionSelection', 'accessPermission', 'groupPermissions'],
required: ['name', 'providerId', 'collectionSelection', 'accessPermission', 'groupPermissions'],

definitions: {
collectionSelectionType: {
Expand Down
14 changes: 14 additions & 0 deletions static/src/js/schemas/uiSchemas/collectionPermission.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import CustomCheckboxWidget from '@/js/components/CustomCheckboxWidget/CustomCheckboxWidget'
import CustomSelectWidget from '@/js/components/CustomSelectWidget/CustomSelectWidget'

const collectionPermissionUiSchema = {
'ui:submitButtonOptions': {
Expand All @@ -19,6 +20,12 @@ const collectionPermissionUiSchema = {
children: ['name']
}
},
{
'ui:col': {
md: 2,
children: ['providerId']
}
},
{
'ui:col': {
style: {
Expand Down Expand Up @@ -78,6 +85,13 @@ const collectionPermissionUiSchema = {
}
]
},
providerId: {
'ui:required': true,
'ui:widget': CustomSelectWidget,
'ui:options': {
enumOptions: []
}
},
collectionSelection: {
'ui:required': true,
'ui:field': 'layout',
Expand Down

0 comments on commit 8f22fdd

Please sign in to comment.