Skip to content

Commit

Permalink
MMT-3907: Now passes providerId via AppContext
Browse files Browse the repository at this point in the history
  • Loading branch information
Christopher D. Gokey committed Sep 30, 2024
1 parent 77c975b commit 8a7fb76
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 538 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import { useLazyQuery, useSuspenseQuery } from '@apollo/client'

import { GET_PERMISSION_COLLECTIONS } from '@/js/operations/queries/getPermissionCollections'

import useAppContext from '@/js/hooks/useAppContext'
import Button from '../Button/Button'
import For from '../For/For'

Expand All @@ -47,14 +48,15 @@ import './CollectionSelector.scss'
* <CollectionSelectorComponent />
* )
*/
const CollectionSelector = ({ onChange, formData, providerId }) => {
const CollectionSelector = ({ onChange, formData }) => {
const [searchAvailable, setSearchAvailable] = useState('')
const [searchSelected, setSearchSelected] = useState('')

const [highlightedAvailable, setHighlightedAvailable] = useState({})
const [highlightedSelected, setHighlightedSelected] = useState({})

const [loading, setLoading] = useState(false)
const { providerId } = useAppContext()

const { data: collectionList } = useSuspenseQuery(GET_PERMISSION_COLLECTIONS, {
variables: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import userEvent from '@testing-library/user-event'

import { GET_PERMISSION_COLLECTIONS } from '@/js/operations/queries/getPermissionCollections'

import Providers from '@/js/providers/Providers/Providers'
import CollectionSelector from '../CollectionSelector'

const setup = ({
Expand All @@ -25,59 +26,60 @@ const setup = ({
}

render(
<MockedProvider mocks={
[{
request: {
query: GET_PERMISSION_COLLECTIONS,
variables: {
params: {
limit: 100,
provider: null
<Providers>
<MockedProvider mocks={
[{
request: {
query: GET_PERMISSION_COLLECTIONS,
variables: {
params: {
provider: undefined,
limit: 100
}
}
}
},
result: {
data: {
collections: {
items: [
{
conceptId: 'C1200444618-MMT_2',
directDistributionInformation: {
region: 'us-east-2',
s3BucketAndObjectPrefixNames: [
's3://example1',
's3://example2',
'prefix_bucket/*'
],
s3CredentialsApiEndpoint: 'https://example.org',
s3CredentialsApiDocumentationUrl: 'https://example.org'
},
result: {
data: {
collections: {
items: [
{
conceptId: 'C1200444618-MMT_2',
directDistributionInformation: {
region: 'us-east-2',
s3BucketAndObjectPrefixNames: [
's3://example1',
's3://example2',
'prefix_bucket/*'
],
s3CredentialsApiEndpoint: 'https://example.org',
s3CredentialsApiDocumentationUrl: 'https://example.org'
},
shortName: 'Collection 1',
provider: 'MMT_2',
entryTitle: 'Mock title of collection 1',
__typename: 'Collection'
},
shortName: 'Collection 1',
provider: 'MMT_2',
entryTitle: 'Mock title of collection 1',
__typename: 'Collection'
},
{
conceptId: 'C1200482349-MMT_2',
directDistributionInformation: null,
shortName: 'Collection 2',
provider: 'MMT_2',
entryTitle: 'Mock title of collection 2',
__typename: 'Collection'
}
],
__typename: 'CollectionList'
{
conceptId: 'C1200482349-MMT_2',
directDistributionInformation: null,
shortName: 'Collection 2',
provider: 'MMT_2',
entryTitle: 'Mock title of collection 2',
__typename: 'Collection'
}
],
__typename: 'CollectionList'
}
}
}
}
}, ...additionalMocks]
}
>
<Suspense>
<CollectionSelector {...props} />
</Suspense>
</MockedProvider>

}, ...additionalMocks]
}
>
<Suspense>
<CollectionSelector {...props} />
</Suspense>
</MockedProvider>
</Providers>
)

return {
Expand Down Expand Up @@ -225,15 +227,15 @@ describe('CollectionSelector', () => {
})

describe('when searching for available collection', () => {
test('should call cmr with filtered data', async () => {
test.only('should call cmr with filtered data', async () => {
const { user } = setup({
additionalMocks: [{
request: {
query: GET_PERMISSION_COLLECTIONS,
variables: {
params: {
options: { shortName: { pattern: true } },
provider: null,
provider: undefined,
shortName: 'C*',
limit: 100
}
Expand Down
62 changes: 15 additions & 47 deletions static/src/js/components/PermissionForm/PermissionForm.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -182,9 +182,18 @@ const PermissionForm = ({ selectedCollectionsPageSize }) => {

const [focusField, setFocusField] = useState(null)
const [uiSchema, setUiSchema] = useState(collectionPermissionUiSchema)
const [schema, setSchema] = useState(collectionPermission)

const { providerIds } = useAvailableProviders()

useEffect(() => {
if (providerIds.length > 0) {
const clonedSchema = cloneDeep(schema)
clonedSchema.properties.providers.items.enum = providerIds
setSchema(clonedSchema)
}
}, [providerIds])

const [createAclMutation] = useMutation(CREATE_ACL)
const [updateAclMutation] = useMutation(UPDATE_ACL, {
update: (cache) => {
Expand All @@ -197,31 +206,6 @@ 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])

const fields = {
keywordPicker: KeywordPicker,
TitleField: CustomTitleField,
Expand Down Expand Up @@ -491,6 +475,8 @@ const PermissionForm = ({ selectedCollectionsPageSize }) => {
// Call the function to show/hide granule fields based on formData
showGranuleFields(formData)

formData.providers = savedProviderId

// Update the draft with formData by removing empty fields
setDraft({ formData: removeEmpty(formData) })
}
Expand All @@ -501,18 +487,14 @@ const PermissionForm = ({ selectedCollectionsPageSize }) => {

showGranuleFields(formData)

setProviderId(formData.providers)

setDraft({
...draft,
formData: removeEmpty(formData)
})
}

const providerIdCheckFails = (aclProviderId, conceptIds) => conceptIds.some((identifier) => {
const conceptProviderId = identifier.split('-')[1]

return conceptProviderId !== aclProviderId
})

const { formData } = draft || {}

/**
Expand Down Expand Up @@ -576,16 +558,6 @@ const PermissionForm = ({ selectedCollectionsPageSize }) => {
)
}

if (providerIdCheckFails(providerId, conceptIds)) {
errorLogger('Error multiple providers in collections', 'PermissionForm: providerIdCheck')
addNotification({
message: 'Error multiple providers in collections',
variant: 'danger'
})

return
}

// Extract permissions from groupPermissions
const { searchGroup, searchAndOrderGroup } = groupPermissions

Expand Down Expand Up @@ -746,10 +718,6 @@ const PermissionForm = ({ selectedCollectionsPageSize }) => {
})
}

const handleSetProviderOrSubmit = () => {
handleSubmit()
}

return (
<Container className="permission-form__container mx-0" fluid>
<Row>
Expand All @@ -764,13 +732,13 @@ const PermissionForm = ({ selectedCollectionsPageSize }) => {
}
liveValidate
widgets={widgets}
schema={collectionPermission}
schema={schema}
validator={validator}
templates={templates}
uiSchema={uiSchema}
onChange={handleChange}
formData={removeEmpty(formData)}
onSubmit={handleSetProviderOrSubmit}
onSubmit={handleSubmit}
showErrorList="false"
customValidate={validate}
>
Expand Down
Loading

0 comments on commit 8a7fb76

Please sign in to comment.