Skip to content
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
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
1 change: 0 additions & 1 deletion src/collection/domain/models/CollectionItemSubset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ export interface CollectionItemSubset {
items: CollectionItem[]
facets: CollectionItemsFacet[]
totalItemCount: number
countPerObjectType: CountPerObjectType
}

export type CollectionItem =
Expand Down
14 changes: 14 additions & 0 deletions src/collection/domain/models/MyDataCollectionItemSubset.ts
Original file line number Diff line number Diff line change
@@ -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
}
3 changes: 2 additions & 1 deletion src/collection/domain/repositories/CollectionRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -28,7 +29,7 @@ export interface CollectionRepository {
selectedPage?: number,
searchText?: string,
otherUserName?: string
): Promise<CollectionItemSubset>
): Promise<MyDataCollectionItemSubset>
edit(collectionIdOrAlias: string, updatedCollection: CollectionDTO): Promise<void>
getFeaturedItems(collectionIdOrAlias?: number | string): Promise<CollectionFeaturedItem[]>
updateFeaturedItems(
Expand Down
28 changes: 25 additions & 3 deletions src/collection/domain/useCases/getMyDataCollectionItems.ts
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -10,7 +11,7 @@ export async function getMyDataCollectionItems(
selectedPage?: number,
searchText?: string,
otherUserName?: string
): Promise<CollectionItemSubset> {
): Promise<MyDataCollectionItemSubset> {
return collectionRepository
.getMyDataItems(
roleIds,
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Collection> {
Expand Down Expand Up @@ -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<CollectionItemSubset> {
): Promise<MyDataCollectionItemSubset> {
return getMyDataCollectionItems
.execute(
roleIds,
Expand All @@ -99,7 +101,7 @@ export class CollectionJSDataverseRepository implements CollectionRepository {

return {
items: collectionItemsPreviewsMapped,
facets: jsCollectionItemSubset.facets,
publicationStatusCounts: jsCollectionItemSubset.publicationStatusCounts,
totalItemCount: jsCollectionItemSubset.totalItemCount,
countPerObjectType: jsCollectionItemSubset.countPerObjectType
}
Expand Down
1 change: 1 addition & 0 deletions src/sections/account/my-data-section/MyDataItemsPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,7 @@ export const MyDataItemsPanel = ({ collectionRepository }: MyDataItemsPanelProps
<UserNameSearch
isLoadingCollectionItems={isLoadingItems}
onSubmitSearch={handleUserNameSearchSubmit}
currentSearchValue={user.identifier}
/>
)}
</header>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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[]
Expand All @@ -28,7 +24,6 @@ export const PublicationStatusFilters = ({
isLoadingCollectionItems
}: PublicationStatusFiltersProps) => {
const { t } = useTranslation('account')

const handlePublicationStatusChange = (
publicationStatus: PublicationStatus,
checked: boolean
Expand All @@ -39,24 +34,25 @@ export const PublicationStatusFilters = ({
return (
<Stack gap={1} className={styles['publication-status-filters']}>
<div className={styles['title']}>{t('myData.publicationStatusFilterTitle')}</div>
{publicationStatusCounts?.map(({ status, count }) => {
{publicationStatusCounts?.map(({ publicationStatus, count }) => {
const statusCheckDisabled =
isLoadingCollectionItems ||
(currentPublicationStatuses?.length === 1 && currentPublicationStatuses.includes(status))
(currentPublicationStatuses?.length === 1 &&
currentPublicationStatuses.includes(publicationStatus))

return (
<Form.Group.Checkbox
key={status}
id={`${status}-check`}
key={publicationStatus}
id={`${publicationStatus}-check`}
onChange={(e: ChangeEvent<HTMLInputElement>) =>
handlePublicationStatusChange(status, e.target.checked)
handlePublicationStatusChange(publicationStatus, e.target.checked)
}
label={
<>
<span>{t(`${status}`)}</span> <span>({count})</span>
<span>{t(`${publicationStatus}`)}</span> <span>({count})</span>
</>
}
checked={currentPublicationStatuses?.includes(status) ?? false}
checked={currentPublicationStatuses?.includes(publicationStatus) ?? false}
disabled={statusCheckDisabled}
/>
)
Expand Down
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -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<CollectionItemSubset> {
): Promise<MyDataCollectionItemSubset> {
const publicationStatuses = (searchCriteria.publicationStatuses as string[]) ?? []
return await getMyDataCollectionItems(
collectionRepository,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ export const CollectionItemsPanel = ({
isLoadingItems,
accumulatedItems,
facets,
countPerObjectType,
totalAvailable,
hasNextPage,
error,
Expand Down Expand Up @@ -326,7 +325,6 @@ export const CollectionItemsPanel = ({
facets={facets}
onFacetChange={handleFacetChange}
isLoadingCollectionItems={isLoadingItems}
countPerObjectType={countPerObjectType}
/>

<Stack direction="vertical" gap={2}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -20,7 +17,6 @@ interface FilterPanelProps {
currentFilterQueries?: FilterQuery[]
onFacetChange: (filterQuery: FilterQuery, removeOrAdd: RemoveAddFacetFilter) => void
isLoadingCollectionItems: boolean
countPerObjectType: CountPerObjectType
}

export const FilterPanel = ({
Expand All @@ -29,8 +25,7 @@ export const FilterPanel = ({
facets,
currentFilterQueries,
onFacetChange,
isLoadingCollectionItems,
countPerObjectType
isLoadingCollectionItems
}: FilterPanelProps) => {
const { t } = useTranslation('collection')

Expand Down Expand Up @@ -59,7 +54,6 @@ export const FilterPanel = ({
onItemTypesChange={onItemTypesChange}
currentItemTypes={currentItemTypes}
isLoadingCollectionItems={isLoadingCollectionItems}
countPerObjectType={countPerObjectType}
/>

<FacetsFilters
Expand Down
Loading
Loading