diff --git a/README.md b/README.md index 1170cf3dc..f70dbef16 100644 --- a/README.md +++ b/README.md @@ -215,6 +215,11 @@ The environment is accessible through the following URLs: > We have implemented infinite scrolling in this list, replacing the normal paging buttons, but the goal would be to be > able to toggle between normal paging and infinite scrolling via a toggle setting or button. > +> #### Collection Items Count +> +> To avoid potential performance issues we agree on hiding the counts of collections, datasets and files in the +> Collection Page Items List. +> > #### Create/Edit Collection Page Identifier Field > > A feature has been added to suggest an identifier to the user based on the collection name entered. diff --git a/package-lock.json b/package-lock.json index 7f57aad70..0f4a1ba52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@dnd-kit/sortable": "8.0.0", "@dnd-kit/utilities": "3.2.2", "@faker-js/faker": "7.6.0", - "@iqss/dataverse-client-javascript": "2.0.0-alpha.49", + "@iqss/dataverse-client-javascript": "2.0.0-alpha.50", "@iqss/dataverse-design-system": "*", "@istanbuljs/nyc-config-typescript": "1.0.2", "@tanstack/react-table": "8.9.2", @@ -3561,9 +3561,9 @@ }, "node_modules/@iqss/dataverse-client-javascript": { "name": "@IQSS/dataverse-client-javascript", - "version": "2.0.0-alpha.49", - "resolved": "https://npm.pkg.github.com/download/@IQSS/dataverse-client-javascript/2.0.0-alpha.49/e408c52852e582909468df9978cd759e757f6785", - "integrity": "sha512-pX0GmwHz+VEsMorLwkcC42hFf8UlSzQ30W6T5qUq4aVSLHiMdQV98kjeXN//qsMe9OCpsb8KhGFAcGobvzGhSw==", + "version": "2.0.0-alpha.50", + "resolved": "https://npm.pkg.github.com/download/@IQSS/dataverse-client-javascript/2.0.0-alpha.50/a0c9ee35c7fb60187f1f3b856d9bd6e5f748f7ac", + "integrity": "sha512-7L61E8UEJb6y8+wBMobJWpkQ2RrQ0fbwQinIwHR02qjnfzd2v6O3VyiS1+vCl3UcOs+5dqYZKDPib3Md2Lx/wA==", "license": "MIT", "dependencies": { "@types/node": "^18.15.11", diff --git a/package.json b/package.json index d203c8a7a..ff2e51629 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@dnd-kit/sortable": "8.0.0", "@dnd-kit/utilities": "3.2.2", "@faker-js/faker": "7.6.0", - "@iqss/dataverse-client-javascript": "2.0.0-alpha.49", + "@iqss/dataverse-client-javascript": "2.0.0-alpha.50", "@iqss/dataverse-design-system": "*", "@istanbuljs/nyc-config-typescript": "1.0.2", "@tanstack/react-table": "8.9.2", diff --git a/src/collection/domain/models/CollectionItemSubset.ts b/src/collection/domain/models/CollectionItemSubset.ts index 208eea841..16b68d7a9 100644 --- a/src/collection/domain/models/CollectionItemSubset.ts +++ b/src/collection/domain/models/CollectionItemSubset.ts @@ -6,7 +6,6 @@ export interface CollectionItemSubset { items: CollectionItem[] facets: CollectionItemsFacet[] totalItemCount: number - countPerObjectType: CountPerObjectType } export type CollectionItem = diff --git a/src/collection/domain/models/MyDataCollectionItemSubset.ts b/src/collection/domain/models/MyDataCollectionItemSubset.ts new file mode 100644 index 000000000..8217c9aa5 --- /dev/null +++ b/src/collection/domain/models/MyDataCollectionItemSubset.ts @@ -0,0 +1,14 @@ +import { CollectionItem, CountPerObjectType } from '@/collection/domain/models/CollectionItemSubset' +import { PublicationStatus } from '@/shared/core/domain/models/PublicationStatus' + +export interface MyDataCollectionItemSubset { + items: CollectionItem[] + publicationStatusCounts: PublicationStatusCount[] + totalItemCount: number + countPerObjectType: CountPerObjectType +} + +export interface PublicationStatusCount { + publicationStatus: PublicationStatus + count: number +} diff --git a/src/collection/domain/repositories/CollectionRepository.ts b/src/collection/domain/repositories/CollectionRepository.ts index 176f0e701..1d2b9b17c 100644 --- a/src/collection/domain/repositories/CollectionRepository.ts +++ b/src/collection/domain/repositories/CollectionRepository.ts @@ -3,6 +3,7 @@ import { CollectionFacet } from '../models/CollectionFacet' import { CollectionFeaturedItem } from '../models/CollectionFeaturedItem' import { CollectionItemsPaginationInfo } from '../models/CollectionItemsPaginationInfo' import { CollectionItemSubset } from '../models/CollectionItemSubset' +import { MyDataCollectionItemSubset } from '../models/MyDataCollectionItemSubset' import { CollectionSearchCriteria } from '../models/CollectionSearchCriteria' import { CollectionUserPermissions } from '../models/CollectionUserPermissions' import { CollectionDTO } from '../useCases/DTOs/CollectionDTO' @@ -28,7 +29,7 @@ export interface CollectionRepository { selectedPage?: number, searchText?: string, otherUserName?: string - ): Promise + ): Promise edit(collectionIdOrAlias: string, updatedCollection: CollectionDTO): Promise getFeaturedItems(collectionIdOrAlias?: number | string): Promise updateFeaturedItems( diff --git a/src/collection/domain/useCases/getMyDataCollectionItems.ts b/src/collection/domain/useCases/getMyDataCollectionItems.ts index 911bc0e86..3087f163a 100644 --- a/src/collection/domain/useCases/getMyDataCollectionItems.ts +++ b/src/collection/domain/useCases/getMyDataCollectionItems.ts @@ -1,5 +1,6 @@ import { CollectionRepository } from '../repositories/CollectionRepository' -import { CollectionItemSubset } from '../models/CollectionItemSubset' +import { MyDataCollectionItemSubset } from '../models/MyDataCollectionItemSubset' +import { PublicationStatus } from '../../../shared/core/domain/models/PublicationStatus' export async function getMyDataCollectionItems( collectionRepository: CollectionRepository, @@ -10,7 +11,7 @@ export async function getMyDataCollectionItems( selectedPage?: number, searchText?: string, otherUserName?: string -): Promise { +): Promise { return collectionRepository .getMyDataItems( roleIds, @@ -30,7 +31,28 @@ export async function getMyDataCollectionItems( ) { return { items: [], - facets: [], + publicationStatusCounts: [ + { + publicationStatus: PublicationStatus.Unpublished, + count: 0 + }, + { + publicationStatus: PublicationStatus.Published, + count: 0 + }, + { + publicationStatus: PublicationStatus.Draft, + count: 0 + }, + { + publicationStatus: PublicationStatus.InReview, + count: 0 + }, + { + publicationStatus: PublicationStatus.Deaccessioned, + count: 0 + } + ], totalItemCount: 0, countPerObjectType: { collections: 0, diff --git a/src/collection/infrastructure/repositories/CollectionJSDataverseRepository.ts b/src/collection/infrastructure/repositories/CollectionJSDataverseRepository.ts index e3fddf863..5e449a6a1 100644 --- a/src/collection/infrastructure/repositories/CollectionJSDataverseRepository.ts +++ b/src/collection/infrastructure/repositories/CollectionJSDataverseRepository.ts @@ -24,6 +24,9 @@ import { CollectionSearchCriteria } from '../../domain/models/CollectionSearchCr import { JSCollectionItemsMapper } from '../mappers/JSCollectionItemsMapper' import { CollectionFeaturedItem } from '@/collection/domain/models/CollectionFeaturedItem' import { CollectionFeaturedItemsDTO } from '@/collection/domain/useCases/DTOs/CollectionFeaturedItemsDTO' +import { MyDataCollectionItemSubset } from '@/collection/domain/models/MyDataCollectionItemSubset' +import { CollectionItemType } from '@/collection/domain/models/CollectionItemType' +import { PublicationStatus } from '@/shared/core/domain/models/PublicationStatus' export class CollectionJSDataverseRepository implements CollectionRepository { getById(id?: string): Promise { @@ -67,21 +70,20 @@ export class CollectionJSDataverseRepository implements CollectionRepository { return { items: collectionItemsPreviewsMapped, facets: jsCollectionItemSubset.facets, - totalItemCount: jsCollectionItemSubset.totalItemCount, - countPerObjectType: jsCollectionItemSubset.countPerObjectType + totalItemCount: jsCollectionItemSubset.totalItemCount } }) } getMyDataItems( roleIds: number[], - collectionItemTypes: string[], - publicationStatuses: string[], + collectionItemTypes: CollectionItemType[], + publicationStatuses: PublicationStatus[], limit?: number, selectedPage?: number, searchText?: string, otherUserName?: string - ): Promise { + ): Promise { return getMyDataCollectionItems .execute( roleIds, @@ -99,7 +101,7 @@ export class CollectionJSDataverseRepository implements CollectionRepository { return { items: collectionItemsPreviewsMapped, - facets: jsCollectionItemSubset.facets, + publicationStatusCounts: jsCollectionItemSubset.publicationStatusCounts, totalItemCount: jsCollectionItemSubset.totalItemCount, countPerObjectType: jsCollectionItemSubset.countPerObjectType } diff --git a/src/sections/account/my-data-section/MyDataItemsPanel.tsx b/src/sections/account/my-data-section/MyDataItemsPanel.tsx index fe46f3717..c1a9fb45f 100644 --- a/src/sections/account/my-data-section/MyDataItemsPanel.tsx +++ b/src/sections/account/my-data-section/MyDataItemsPanel.tsx @@ -254,6 +254,7 @@ export const MyDataItemsPanel = ({ collectionRepository }: MyDataItemsPanelProps )} diff --git a/src/sections/account/my-data-section/my-data-filter-panel/MyDataFilterPanel.tsx b/src/sections/account/my-data-section/my-data-filter-panel/MyDataFilterPanel.tsx index 5a18dd715..1dd528d55 100644 --- a/src/sections/account/my-data-section/my-data-filter-panel/MyDataFilterPanel.tsx +++ b/src/sections/account/my-data-section/my-data-filter-panel/MyDataFilterPanel.tsx @@ -9,10 +9,8 @@ import { PublicationStatusChange } from '@/sections/account/my-data-section/my-d import { RoleChange } from '@/sections/account/my-data-section/my-data-filter-panel/role-filters/RoleFilters' import { TypeFilters } from '@/sections/collection/collection-items-panel/filter-panel/type-filters/TypeFilters' import { RoleFilters } from '@/sections/account/my-data-section/my-data-filter-panel/role-filters/RoleFilters' -import { - PublicationStatusCount, - PublicationStatusFilters -} from '@/sections/account/my-data-section/my-data-filter-panel/publication-status-filters/PublicationStatusFilters' +import { PublicationStatusFilters } from '@/sections/account/my-data-section/my-data-filter-panel/publication-status-filters/PublicationStatusFilters' +import { PublicationStatusCount } from '@/collection/domain/models/MyDataCollectionItemSubset' import { PublicationStatus } from '@/shared/core/domain/models/PublicationStatus' import { SeparationLine } from '@/sections/shared/layout/SeparationLine/SeparationLine' import { CountPerObjectType } from '@/collection/domain/models/CollectionItemSubset' diff --git a/src/sections/account/my-data-section/my-data-filter-panel/publication-status-filters/PublicationStatusFilters.tsx b/src/sections/account/my-data-section/my-data-filter-panel/publication-status-filters/PublicationStatusFilters.tsx index aae867b17..1e6e5335e 100644 --- a/src/sections/account/my-data-section/my-data-filter-panel/publication-status-filters/PublicationStatusFilters.tsx +++ b/src/sections/account/my-data-section/my-data-filter-panel/publication-status-filters/PublicationStatusFilters.tsx @@ -2,13 +2,9 @@ import { ChangeEvent } from 'react' import { useTranslation } from 'react-i18next' import { Form, Stack } from '@iqss/dataverse-design-system' import { PublicationStatus } from '@/shared/core/domain/models/PublicationStatus' +import { PublicationStatusCount } from '@/collection/domain/models/MyDataCollectionItemSubset' import styles from './PublicationStatusFilters.module.scss' -export interface PublicationStatusCount { - status: PublicationStatus - count: number -} - interface PublicationStatusFiltersProps { currentPublicationStatuses: PublicationStatus[] publicationStatusCounts?: PublicationStatusCount[] @@ -28,7 +24,6 @@ export const PublicationStatusFilters = ({ isLoadingCollectionItems }: PublicationStatusFiltersProps) => { const { t } = useTranslation('account') - const handlePublicationStatusChange = ( publicationStatus: PublicationStatus, checked: boolean @@ -39,24 +34,25 @@ export const PublicationStatusFilters = ({ return (
{t('myData.publicationStatusFilterTitle')}
- {publicationStatusCounts?.map(({ status, count }) => { + {publicationStatusCounts?.map(({ publicationStatus, count }) => { const statusCheckDisabled = isLoadingCollectionItems || - (currentPublicationStatuses?.length === 1 && currentPublicationStatuses.includes(status)) + (currentPublicationStatuses?.length === 1 && + currentPublicationStatuses.includes(publicationStatus)) return ( ) => - handlePublicationStatusChange(status, e.target.checked) + handlePublicationStatusChange(publicationStatus, e.target.checked) } label={ <> - {t(`${status}`)} ({count}) + {t(`${publicationStatus}`)} ({count}) } - checked={currentPublicationStatuses?.includes(status) ?? false} + checked={currentPublicationStatuses?.includes(publicationStatus) ?? false} disabled={statusCheckDisabled} /> ) diff --git a/src/sections/account/my-data-section/useGetMyDataAccumulatedItems.tsx b/src/sections/account/my-data-section/useGetMyDataAccumulatedItems.tsx index 76f96628e..76c532925 100644 --- a/src/sections/account/my-data-section/useGetMyDataAccumulatedItems.tsx +++ b/src/sections/account/my-data-section/useGetMyDataAccumulatedItems.tsx @@ -1,19 +1,13 @@ import { useMemo, useState } from 'react' import { getMyDataCollectionItems } from '@/collection/domain/useCases/getMyDataCollectionItems' import { CollectionRepository } from '@/collection/domain/repositories/CollectionRepository' -import { - CollectionItem, - CollectionItemsFacet, - CollectionItemSubset, - CountPerObjectType -} from '@/collection/domain/models/CollectionItemSubset' -import { - AllPublicationStatuses, - PublicationStatus -} from '@/shared/core/domain/models/PublicationStatus' +import { CollectionItem, CountPerObjectType } from '@/collection/domain/models/CollectionItemSubset' import { CollectionItemsPaginationInfo } from '@/collection/domain/models/CollectionItemsPaginationInfo' import { MyDataSearchCriteria } from '@/sections/account/my-data-section/MyDataSearchCriteria' -import { PublicationStatusCount } from '@/sections/account/my-data-section/my-data-filter-panel/publication-status-filters/PublicationStatusFilters' +import { + MyDataCollectionItemSubset, + PublicationStatusCount +} from '@/collection/domain/models/MyDataCollectionItemSubset' export const NO_COLLECTION_ITEMS = 0 @@ -70,17 +64,14 @@ export const useGetMyDataAccumulatedItems = ({ setIsLoadingItems(true) try { - const { items, facets, totalItemCount, countPerObjectType } = await loadNextItems( - collectionRepository, - pagination, - searchCriteria - ) + const { items, publicationStatusCounts, totalItemCount, countPerObjectType } = + await loadNextItems(collectionRepository, pagination, searchCriteria) const newAccumulatedItems = !resetAccumulated ? [...accumulatedItems, ...items] : items setAccumulatedItems(newAccumulatedItems) - setPublicationStatusCounts(convertFacetsToPublicationStatusCounts(facets)) + setPublicationStatusCounts(publicationStatusCounts) setCountPerObjectType(countPerObjectType) @@ -122,27 +113,12 @@ export const useGetMyDataAccumulatedItems = ({ accumulatedCount } } -const convertFacetsToPublicationStatusCounts = ( - facets: CollectionItemsFacet[] -): PublicationStatusCount[] => { - if (!facets[0]) { - // Create a list of PublicationStatusCount with 0 counts - return AllPublicationStatuses.map((status) => ({ - status: status, - count: 0 - })) - } else - return facets[0].labels.map((facetLabel) => ({ - status: facetLabel.name as PublicationStatus, - count: facetLabel.count - })) -} async function loadNextItems( collectionRepository: CollectionRepository, paginationInfo: CollectionItemsPaginationInfo, searchCriteria: MyDataSearchCriteria -): Promise { +): Promise { const publicationStatuses = (searchCriteria.publicationStatuses as string[]) ?? [] return await getMyDataCollectionItems( collectionRepository, diff --git a/src/sections/collection/collection-items-panel/CollectionItemsPanel.tsx b/src/sections/collection/collection-items-panel/CollectionItemsPanel.tsx index bea12d618..39397f69b 100644 --- a/src/sections/collection/collection-items-panel/CollectionItemsPanel.tsx +++ b/src/sections/collection/collection-items-panel/CollectionItemsPanel.tsx @@ -80,7 +80,6 @@ export const CollectionItemsPanel = ({ isLoadingItems, accumulatedItems, facets, - countPerObjectType, totalAvailable, hasNextPage, error, @@ -326,7 +325,6 @@ export const CollectionItemsPanel = ({ facets={facets} onFacetChange={handleFacetChange} isLoadingCollectionItems={isLoadingItems} - countPerObjectType={countPerObjectType} /> diff --git a/src/sections/collection/collection-items-panel/filter-panel/FilterPanel.tsx b/src/sections/collection/collection-items-panel/filter-panel/FilterPanel.tsx index 0e5cb5257..75c23e13a 100644 --- a/src/sections/collection/collection-items-panel/filter-panel/FilterPanel.tsx +++ b/src/sections/collection/collection-items-panel/filter-panel/FilterPanel.tsx @@ -4,10 +4,7 @@ import { Button, Offcanvas } from '@iqss/dataverse-design-system' import { FunnelFill } from 'react-bootstrap-icons' import { CollectionItemType } from '@/collection/domain/models/CollectionItemType' import { ItemTypeChange, TypeFilters } from './type-filters/TypeFilters' -import { - CollectionItemsFacet, - CountPerObjectType -} from '@/collection/domain/models/CollectionItemSubset' +import { CollectionItemsFacet } from '@/collection/domain/models/CollectionItemSubset' import { FilterQuery } from '@/collection/domain/models/CollectionSearchCriteria' import { FacetsFilters } from './facets-filters/FacetsFilters' import { RemoveAddFacetFilter } from './facets-filters/FacetFilterGroup' @@ -20,7 +17,6 @@ interface FilterPanelProps { currentFilterQueries?: FilterQuery[] onFacetChange: (filterQuery: FilterQuery, removeOrAdd: RemoveAddFacetFilter) => void isLoadingCollectionItems: boolean - countPerObjectType: CountPerObjectType } export const FilterPanel = ({ @@ -29,8 +25,7 @@ export const FilterPanel = ({ facets, currentFilterQueries, onFacetChange, - isLoadingCollectionItems, - countPerObjectType + isLoadingCollectionItems }: FilterPanelProps) => { const { t } = useTranslation('collection') @@ -59,7 +54,6 @@ export const FilterPanel = ({ onItemTypesChange={onItemTypesChange} currentItemTypes={currentItemTypes} isLoadingCollectionItems={isLoadingCollectionItems} - countPerObjectType={countPerObjectType} /> void isLoadingCollectionItems: boolean - countPerObjectType: CountPerObjectType + countPerObjectType?: CountPerObjectType } export interface ItemTypeChange { @@ -51,10 +51,12 @@ export const TypeFilters = ({ label={ <> - {t('collectionFilterTypeLabel')}{' '} - {`(${Intl.NumberFormat().format(countPerObjectType.collections)})`} + {countPerObjectType?.collections !== undefined && + currentItemTypes?.includes(CollectionItemType.COLLECTION) && ( + {`(${Intl.NumberFormat().format(countPerObjectType.collections)})`} + )} } @@ -71,7 +73,10 @@ export const TypeFilters = ({ {t('datasetFilterTypeLabel')}{' '} - {`(${Intl.NumberFormat().format(countPerObjectType.datasets)})`} + {countPerObjectType?.datasets !== undefined && + currentItemTypes?.includes(CollectionItemType.DATASET) && ( + {`(${Intl.NumberFormat().format(countPerObjectType.datasets)})`} + )} } @@ -88,7 +93,10 @@ export const TypeFilters = ({ {t('fileFilterTypeLabel')}{' '} - {`(${Intl.NumberFormat().format(countPerObjectType.files)})`} + {countPerObjectType?.files !== undefined && + currentItemTypes?.includes(CollectionItemType.FILE) && ( + {`(${Intl.NumberFormat().format(countPerObjectType.files)})`} + )} } diff --git a/src/sections/collection/collection-items-panel/useGetAccumulatedItems.tsx b/src/sections/collection/collection-items-panel/useGetAccumulatedItems.tsx index 3b1e1d75c..fa262478f 100644 --- a/src/sections/collection/collection-items-panel/useGetAccumulatedItems.tsx +++ b/src/sections/collection/collection-items-panel/useGetAccumulatedItems.tsx @@ -4,8 +4,7 @@ import { CollectionRepository } from '@/collection/domain/repositories/Collectio import { CollectionItem, CollectionItemsFacet, - CollectionItemSubset, - CountPerObjectType + CollectionItemSubset } from '@/collection/domain/models/CollectionItemSubset' import { CollectionItemsPaginationInfo } from '@/collection/domain/models/CollectionItemsPaginationInfo' import { CollectionSearchCriteria } from '@/collection/domain/models/CollectionSearchCriteria' @@ -16,7 +15,6 @@ type UseGetAccumulatedItemsReturnType = { isLoadingItems: boolean accumulatedItems: CollectionItem[] facets: CollectionItemsFacet[] - countPerObjectType: CountPerObjectType totalAvailable: number | undefined hasNextPage: boolean error: string | null @@ -42,11 +40,7 @@ export const useGetAccumulatedItems = ({ const [isLoadingItems, setIsLoadingItems] = useState(false) const [accumulatedItems, setAccumulatedItems] = useState([]) const [facets, setFacets] = useState([]) - const [countPerObjectType, setCountPerObjectType] = useState({ - collections: 0, - datasets: 0, - files: 0 - }) + const [hasNextPage, setHasNextPage] = useState(true) const [totalAvailable, setTotalAvailable] = useState(undefined) const [error, setError] = useState(null) @@ -65,7 +59,7 @@ export const useGetAccumulatedItems = ({ setIsLoadingItems(true) try { - const { items, facets, totalItemCount, countPerObjectType } = await loadNextItems( + const { items, facets, totalItemCount } = await loadNextItems( collectionRepository, collectionId, pagination, @@ -78,8 +72,6 @@ export const useGetAccumulatedItems = ({ setFacets(facets) - setCountPerObjectType(countPerObjectType) - setTotalAvailable(totalItemCount) const isNextPage = !resetAccumulated @@ -108,7 +100,6 @@ export const useGetAccumulatedItems = ({ isLoadingItems, accumulatedItems, facets, - countPerObjectType, totalAvailable, hasNextPage, error, diff --git a/src/stories/collection/CollectionMockRepository.ts b/src/stories/collection/CollectionMockRepository.ts index 021a6ba24..a39d02067 100644 --- a/src/stories/collection/CollectionMockRepository.ts +++ b/src/stories/collection/CollectionMockRepository.ts @@ -14,6 +14,7 @@ import { CollectionItemType } from '@/collection/domain/models/CollectionItemTyp import { CollectionFeaturedItem } from '@/collection/domain/models/CollectionFeaturedItem' import { CollectionFeaturedItemsDTO } from '@/collection/domain/useCases/DTOs/CollectionFeaturedItemsDTO' import { CollectionFeaturedItemMother } from '@tests/component/collection/domain/models/CollectionFeaturedItemMother' +import { MyDataCollectionItemSubset } from '@/collection/domain/models/MyDataCollectionItemSubset' export class CollectionMockRepository implements CollectionRepository { getById(_id?: string): Promise { @@ -87,12 +88,7 @@ export class CollectionMockRepository implements CollectionRepository { resolve({ items: filteredByTypeItems, facets: facets, - totalItemCount: isDefaultSelected ? 6 : 200, // This is a fake number, its big so we can always scroll to load more items for the story - countPerObjectType: { - collections: numberOfCollections, - datasets: numberOfDatasets, - files: numberOfFiles - } + totalItemCount: isDefaultSelected ? 6 : 200 // This is a fake number, its big so we can always scroll to load more items for the story }) }, FakerHelper.loadingTimout()) }) @@ -105,7 +101,7 @@ export class CollectionMockRepository implements CollectionRepository { _selectedPage?: number, _searchText?: string, _otherUserName?: string - ): Promise { + ): Promise { if (!limit) { limit = 10 } @@ -120,7 +116,7 @@ export class CollectionMockRepository implements CollectionRepository { includeUserRoles: true }) - const facets = CollectionItemsMother.createMyDataItemsFacets() + const publicationStatusCounts = CollectionItemsMother.createMyDataPublicationCounts() const isDefaultSelected = collectionItemTypes?.length === 2 && @@ -133,7 +129,7 @@ export class CollectionMockRepository implements CollectionRepository { setTimeout(() => { resolve({ items: filteredByTypeItems, - facets: facets, + publicationStatusCounts: publicationStatusCounts, totalItemCount: isDefaultSelected ? 6 : 200, // This is a fake number, its big so we can always scroll to load more items for the story countPerObjectType: { collections: numberOfCollections, diff --git a/src/stories/collection/NoCollectionMockRepository.ts b/src/stories/collection/NoCollectionMockRepository.ts index 7733454db..1239b2878 100644 --- a/src/stories/collection/NoCollectionMockRepository.ts +++ b/src/stories/collection/NoCollectionMockRepository.ts @@ -34,12 +34,7 @@ export class NoCollectionMockRepository extends CollectionMockRepository { resolve({ items: [], facets: [], - totalItemCount: 0, - countPerObjectType: { - collections: 0, - datasets: 0, - files: 0 - } + totalItemCount: 0 }) }, FakerHelper.loadingTimout()) }) diff --git a/tests/component/collection/domain/models/CollectionItemsMother.ts b/tests/component/collection/domain/models/CollectionItemsMother.ts index 960268df5..2603c727d 100644 --- a/tests/component/collection/domain/models/CollectionItemsMother.ts +++ b/tests/component/collection/domain/models/CollectionItemsMother.ts @@ -5,6 +5,8 @@ import { import { FileItemTypePreviewMother } from '../../../files/domain/models/FileItemTypePreviewMother' import { CollectionItemTypePreviewMother } from './CollectionItemTypePreviewMother' import { DatasetItemTypePreviewMother } from '../../../dataset/domain/models/DatasetItemTypePreviewMother' +import { PublicationStatusCount } from '@/collection/domain/models/MyDataCollectionItemSubset' +import { PublicationStatus } from '@/shared/core/domain/models/PublicationStatus' interface CreateItemsProps { numberOfCollections?: number @@ -29,19 +31,13 @@ export class CollectionItemsMother { return [...collections, ...datasets, ...files] } - static createMyDataItemsFacets(): CollectionItemsFacet[] { + static createMyDataPublicationCounts(): PublicationStatusCount[] { return [ - { - name: 'PublicationStatus', - friendlyName: 'Publication Status', - labels: [ - { name: 'Published', count: 1 }, - { name: 'Unpublished', count: 1 }, - { name: 'Draft', count: 0 }, - { name: 'In Review', count: 1 }, - { name: 'Deaccessioned', count: 1 } - ] - } + { publicationStatus: PublicationStatus.Published, count: 1 }, + { publicationStatus: PublicationStatus.Unpublished, count: 1 }, + { publicationStatus: PublicationStatus.Draft, count: 0 }, + { publicationStatus: PublicationStatus.InReview, count: 1 }, + { publicationStatus: PublicationStatus.Deaccessioned, count: 1 } ] } static createItemsFacets(): CollectionItemsFacet[] { diff --git a/tests/component/sections/account/Account.spec.tsx b/tests/component/sections/account/Account.spec.tsx index fec637daa..0b3b6f972 100644 --- a/tests/component/sections/account/Account.spec.tsx +++ b/tests/component/sections/account/Account.spec.tsx @@ -23,6 +23,7 @@ describe('Account', () => { it('clicks on the Account Information tab', () => { cy.mountAuthenticated( diff --git a/tests/component/sections/account/MyDataFilterPanel.spec.tsx b/tests/component/sections/account/MyDataFilterPanel.spec.tsx index fca1ec08b..7eb575b2a 100644 --- a/tests/component/sections/account/MyDataFilterPanel.spec.tsx +++ b/tests/component/sections/account/MyDataFilterPanel.spec.tsx @@ -17,9 +17,9 @@ describe('MyDataFilterPanel', () => { currentRoleIds={[1, 6, 7]} onRolesChange={onRolesChange} publicationStatusCounts={[ - { status: PublicationStatus.Unpublished, count: 10 }, - { status: PublicationStatus.Published, count: 5 }, - { status: PublicationStatus.Draft, count: 2 } + { publicationStatus: PublicationStatus.Unpublished, count: 10 }, + { publicationStatus: PublicationStatus.Published, count: 5 }, + { publicationStatus: PublicationStatus.Draft, count: 2 } ]} onPublicationStatusesChange={cy.stub().as('onPublicationStatusesChange')} currentPublicationStatuses={[ diff --git a/tests/component/sections/account/MyDataItemsPanel.spec.tsx b/tests/component/sections/account/MyDataItemsPanel.spec.tsx index 685a1a64d..21787f964 100644 --- a/tests/component/sections/account/MyDataItemsPanel.spec.tsx +++ b/tests/component/sections/account/MyDataItemsPanel.spec.tsx @@ -1,10 +1,9 @@ -import { - CollectionItemSubset, - CountPerObjectType -} from '@/collection/domain/models/CollectionItemSubset' +import { CountPerObjectType } from '@/collection/domain/models/CollectionItemSubset' import { CollectionRepository } from '@/collection/domain/repositories/CollectionRepository' import { CollectionItemsMother } from '@tests/component/collection/domain/models/CollectionItemsMother' import { MyDataItemsPanel } from '@/sections/account/my-data-section/MyDataItemsPanel' +import { MyDataCollectionItemSubset } from '@/collection/domain/models/MyDataCollectionItemSubset' +import { PublicationStatus } from '@/shared/core/domain/models/PublicationStatus' const collectionRepository: CollectionRepository = {} as CollectionRepository @@ -22,13 +21,39 @@ const countPerObjectType: CountPerObjectType = { files: 140 } -const facets = CollectionItemsMother.createMyDataItemsFacets() +const publicationStatusCounts = CollectionItemsMother.createMyDataPublicationCounts() -const itemsWithCount: CollectionItemSubset = { items, facets, totalItemCount, countPerObjectType } +const itemsWithCount: MyDataCollectionItemSubset = { + items, + publicationStatusCounts, + totalItemCount, + countPerObjectType +} -const emptyItemsWithCount: CollectionItemSubset = { +const emptyItemsWithCount: MyDataCollectionItemSubset = { items: [], - facets: [], + publicationStatusCounts: [ + { + publicationStatus: PublicationStatus.Unpublished, + count: 0 + }, + { + publicationStatus: PublicationStatus.Published, + count: 0 + }, + { + publicationStatus: PublicationStatus.Draft, + count: 0 + }, + { + publicationStatus: PublicationStatus.InReview, + count: 0 + }, + { + publicationStatus: PublicationStatus.Deaccessioned, + count: 0 + } + ], totalItemCount: 0, countPerObjectType: { collections: 0, @@ -59,14 +84,17 @@ describe('MyDataItemsPanel', () => { it('renders the search input for superusers', () => { cy.mountSuperuser() - cy.findByPlaceholderText('Search by username...').should('exist') + cy.findByPlaceholderText('Search by username...') + .should('exist') + .invoke('val') + .should('equal', 'jamespotts') }) it('shows the correct message when there are no results for user', () => { collectionRepository.getMyDataItems = cy.stub().resolves(emptyItemsWithCount) cy.mountSuperuser() - cy.findByPlaceholderText('Search by username...').type('testUserName{enter}') + cy.findByPlaceholderText('Search by username...').clear().type('testUserName{enter}') cy.findByText(/No results found for user testUserName./).should('exist') }) @@ -224,9 +252,9 @@ describe('MyDataItemsPanel', () => { it('renders 4 items with no more to load, correct results in header, and no bottom skeleton loader', () => { const first4Elements = items.slice(0, 4) - const first4ElementsWithCount: CollectionItemSubset = { + const first4ElementsWithCount: MyDataCollectionItemSubset = { items: first4Elements, - facets, + publicationStatusCounts, totalItemCount: 4, countPerObjectType: { collections: 4, diff --git a/tests/component/sections/account/PublicationStatusFilters.spec.tsx b/tests/component/sections/account/PublicationStatusFilters.spec.tsx index 12cb323c4..97dbbf182 100644 --- a/tests/component/sections/account/PublicationStatusFilters.spec.tsx +++ b/tests/component/sections/account/PublicationStatusFilters.spec.tsx @@ -3,9 +3,9 @@ import { PublicationStatus } from '@/shared/core/domain/models/PublicationStatus describe('PublicationStatusFilters', () => { const publicationStatusCounts = [ - { status: PublicationStatus.Published, count: 5 }, - { status: PublicationStatus.Unpublished, count: 10 }, - { status: PublicationStatus.Draft, count: 2 } + { publicationStatus: PublicationStatus.Published, count: 5 }, + { publicationStatus: PublicationStatus.Unpublished, count: 10 }, + { publicationStatus: PublicationStatus.Draft, count: 2 } ] const currentPublicationStatuses = [PublicationStatus.Unpublished, PublicationStatus.Draft] @@ -20,8 +20,8 @@ describe('PublicationStatusFilters', () => { /> ) - publicationStatusCounts.forEach(({ status, count }) => { - cy.findByLabelText(`${status} (${count})`).should('exist') + publicationStatusCounts.forEach(({ publicationStatus, count }) => { + cy.findByLabelText(`${publicationStatus} (${count})`).should('exist') }) }) @@ -60,8 +60,8 @@ describe('PublicationStatusFilters', () => { /> ) - publicationStatusCounts.forEach(({ status }) => { - cy.findByLabelText(new RegExp(`${status}`)).should('be.disabled') + publicationStatusCounts.forEach(({ publicationStatus }) => { + cy.findByLabelText(new RegExp(`${publicationStatus}`)).should('be.disabled') }) cy.customMount(