Skip to content

Commit 8ea9c62

Browse files
committed
Add Edit Collection options and show Not Implemented modal
1 parent e0ddce8 commit 8ea9c62

4 files changed

Lines changed: 117 additions & 36 deletions

File tree

public/locales/en/collection.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@
5252
"editCollection": {
5353
"edit": "Edit",
5454
"generalInfo": "General Information",
55+
"themeAndWidgets": "Theme + Widgets",
56+
"permissions": "Permissions",
57+
"groups": "Groups",
58+
"datasetTemplates": "Dataset Templates",
59+
"datasetGuestbooks": "Dataset Guestbooks",
60+
"featuredDataverses": "Featured Dataverses",
5561
"deleteCollection": "Delete Collection"
5662
},
5763
"featuredItems": {

public/locales/es/collection.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@
5252
"editCollection": {
5353
"edit": "Editar",
5454
"generalInfo": "Información general",
55+
"themeAndWidgets": "Tema + Widgets",
56+
"permissions": "Permisos",
57+
"groups": "Grupos",
58+
"datasetTemplates": "Plantillas de dataset",
59+
"datasetGuestbooks": "Libros de visitas de dataset",
60+
"featuredDataverses": "Dataverses destacados",
5561
"deleteCollection": "Eliminar colección"
5662
},
5763
"featuredItems": {
Lines changed: 69 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useState } from 'react'
12
import { Link } from 'react-router-dom'
23
import { useTranslation } from 'react-i18next'
34
import {
@@ -14,6 +15,7 @@ import { RouteWithParams } from '@/sections/Route.enum'
1415
import { CollectionRepository } from '@/collection/domain/repositories/CollectionRepository'
1516
import { CollectionHelper } from '../CollectionHelper'
1617
import { DeleteCollectionButton } from './delete-collection-button/DeleteCollectionButton'
18+
import { NotImplementedModal } from '@/sections/not-implemented/NotImplementedModal'
1719
import styles from './EditCollectionDropdown.module.scss'
1820

1921
interface EditCollectionDropdownProps {
@@ -28,49 +30,80 @@ export const EditCollectionDropdown = ({
2830
canUserDeleteCollection
2931
}: EditCollectionDropdownProps) => {
3032
const { t } = useTranslation('collection')
33+
const [showNotImplementedModal, setShowNotImplementedModal] = useState(false)
3134

3235
const canCollectionBeDeleted =
3336
canUserDeleteCollection &&
3437
!CollectionHelper.isRootCollection(collection.hierarchy) &&
3538
collection.childCount === 0
3639

40+
const handleNotImplementedClick = (event: React.MouseEvent<HTMLElement>) => {
41+
event.stopPropagation()
42+
setShowNotImplementedModal(true)
43+
}
44+
3745
return (
38-
<DropdownButton
39-
id="edit-collection-dropdown"
40-
title={t('editCollection.edit')}
41-
asButtonGroup
42-
variant="secondary"
43-
icon={<PencilFill className={styles['dropdown-icon']} />}>
44-
<DropdownHeader className={styles['dropdown-header']}>
45-
<div className={styles['collection-icon']}>
46-
<Icon name={IconName.COLLECTION} />
47-
</div>
48-
<div>
49-
<p className={styles['collection-name']}>
50-
{collection.name}{' '}
51-
{collection.affiliation ? <span>({collection.affiliation})</span> : null}
52-
</p>
53-
<p className={styles['collection-alias']}>{collection.id}</p>
54-
</div>
55-
</DropdownHeader>
56-
<DropdownSeparator />
57-
<DropdownButtonItem as={Link} to={RouteWithParams.EDIT_COLLECTION(collection.id)}>
58-
{t('editCollection.generalInfo')}
59-
</DropdownButtonItem>
60-
<DropdownButtonItem as={Link} to={RouteWithParams.EDIT_FEATURED_ITEMS(collection.id)}>
61-
{t('featuredItems.title')}
62-
</DropdownButtonItem>
46+
<>
47+
<DropdownButton
48+
id="edit-collection-dropdown"
49+
title={t('editCollection.edit')}
50+
asButtonGroup
51+
variant="secondary"
52+
icon={<PencilFill className={styles['dropdown-icon']} />}>
53+
<DropdownHeader className={styles['dropdown-header']}>
54+
<div className={styles['collection-icon']}>
55+
<Icon name={IconName.COLLECTION} />
56+
</div>
57+
<div>
58+
<p className={styles['collection-name']}>
59+
{collection.name}{' '}
60+
{collection.affiliation ? <span>({collection.affiliation})</span> : null}
61+
</p>
62+
<p className={styles['collection-alias']}>{collection.id}</p>
63+
</div>
64+
</DropdownHeader>
65+
<DropdownSeparator />
66+
<DropdownButtonItem as={Link} to={RouteWithParams.EDIT_COLLECTION(collection.id)}>
67+
{t('editCollection.generalInfo')}
68+
</DropdownButtonItem>
69+
<DropdownButtonItem as={Link} to={RouteWithParams.EDIT_FEATURED_ITEMS(collection.id)}>
70+
{t('featuredItems.title')}
71+
</DropdownButtonItem>
72+
<DropdownButtonItem onClick={handleNotImplementedClick}>
73+
{t('editCollection.themeAndWidgets')}
74+
</DropdownButtonItem>
75+
<DropdownButtonItem onClick={handleNotImplementedClick}>
76+
{t('editCollection.permissions')}
77+
</DropdownButtonItem>
78+
<DropdownButtonItem onClick={handleNotImplementedClick}>
79+
{t('editCollection.groups')}
80+
</DropdownButtonItem>
81+
<DropdownButtonItem onClick={handleNotImplementedClick}>
82+
{t('editCollection.datasetTemplates')}
83+
</DropdownButtonItem>
84+
<DropdownButtonItem onClick={handleNotImplementedClick}>
85+
{t('editCollection.datasetGuestbooks')}
86+
</DropdownButtonItem>
87+
<DropdownButtonItem onClick={handleNotImplementedClick}>
88+
{t('editCollection.featuredDataverses')}
89+
</DropdownButtonItem>
90+
91+
{canCollectionBeDeleted && (
92+
<>
93+
<DropdownSeparator />
94+
<DeleteCollectionButton
95+
collectionId={collection.id}
96+
parentCollection={CollectionHelper.getParentCollection(collection.hierarchy)}
97+
collectionRepository={collectionRepository}
98+
/>
99+
</>
100+
)}
101+
</DropdownButton>
63102

64-
{canCollectionBeDeleted && (
65-
<>
66-
<DropdownSeparator />
67-
<DeleteCollectionButton
68-
collectionId={collection.id}
69-
parentCollection={CollectionHelper.getParentCollection(collection.hierarchy)}
70-
collectionRepository={collectionRepository}
71-
/>
72-
</>
73-
)}
74-
</DropdownButton>
103+
<NotImplementedModal
104+
show={showNotImplementedModal}
105+
handleClose={() => setShowNotImplementedModal(false)}
106+
/>
107+
</>
75108
)
76109
}

tests/component/sections/collection/edit-collection-dropdown/EditCollectionDropdown.spec.tsx

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,42 @@ describe('EditCollectionDropdown', () => {
111111
)
112112
})
113113

114+
it('shows the not implemented collection edit options', () => {
115+
cy.mountAuthenticated(
116+
<EditCollectionDropdown
117+
collection={rootCollection}
118+
collectionRepository={collectionRepository}
119+
canUserDeleteCollection={false}
120+
/>
121+
)
122+
123+
openDropdown()
124+
125+
cy.findByRole('button', { name: 'Theme + Widgets' }).should('exist')
126+
cy.findByRole('button', { name: 'Permissions' }).should('exist')
127+
cy.findByRole('button', { name: 'Groups' }).should('exist')
128+
cy.findByRole('button', { name: 'Dataset Templates' }).should('exist')
129+
cy.findByRole('button', { name: 'Dataset Guestbooks' }).should('exist')
130+
cy.findByRole('button', { name: 'Featured Dataverses' }).should('exist')
131+
})
132+
133+
it('shows the not implemented modal when a new edit option is clicked', () => {
134+
cy.mountAuthenticated(
135+
<EditCollectionDropdown
136+
collection={rootCollection}
137+
collectionRepository={collectionRepository}
138+
canUserDeleteCollection={false}
139+
/>
140+
)
141+
142+
openDropdown()
143+
144+
cy.findByRole('button', { name: 'Permissions' }).click()
145+
146+
cy.findByText('Not Implemented').should('exist')
147+
cy.findByText('This feature is not implemented yet in SPA.').should('exist')
148+
})
149+
114150
describe('delete button', () => {
115151
it('shows the delete button if user can delete collection, collection is not root and collection has no data', () => {
116152
cy.mountAuthenticated(

0 commit comments

Comments
 (0)