Skip to content

Commit

Permalink
feat(FilesTableSort): refactor to its own component
Browse files Browse the repository at this point in the history
  • Loading branch information
MellyGray committed Jul 11, 2023
1 parent e149420 commit d706827
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 68 deletions.
Original file line number Diff line number Diff line change
@@ -1,40 +1,17 @@
import { FileCriteria, FileSortByOption } from '../../../../files/domain/models/FileCriteria'
import { Col, DropdownButton, DropdownButtonItem, Row } from 'dataverse-design-system'
import { FileCriteria } from '../../../../files/domain/models/FileCriteria'
import { Col, Row } from 'dataverse-design-system'
import styles from './FileCriteriaInputs.module.scss'
import { ArrowDownUp } from 'react-bootstrap-icons'
import { useTranslation } from 'react-i18next'
import { FileCriteriaSortBy } from './FileCriteriaSortBy'

export function FileCriteriaInputs({
onCriteriaChange
}: {
onCriteriaChange: (criteria: FileCriteria) => void
}) {
const { t } = useTranslation('files')
const handleSortChange = (eventKey: string | null) => {
onCriteriaChange({ sortBy: eventKey as FileSortByOption })
}

return (
<Row className={styles['criteria-section']}>
<Col className={styles['sort-container']}>
<DropdownButton
icon={
<ArrowDownUp
className={styles.icon}
role="img"
aria-label={t('criteria.sortBy.icon')}
/>
}
title={t('criteria.sortBy.title')}
id="files-table-sort-by"
variant="secondary"
onSelect={handleSortChange}>
{Object.values(FileSortByOption).map((sortByOption) => (
<DropdownButtonItem key={sortByOption} eventKey={sortByOption}>
{t(`criteria.sortBy.options.${sortByOption}`)}
</DropdownButtonItem>
))}
</DropdownButton>
<FileCriteriaSortBy onCriteriaChange={onCriteriaChange} />
</Col>
</Row>
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { ArrowDownUp } from 'react-bootstrap-icons'
import styles from './FileCriteriaInputs.module.scss'
import { FileCriteria, FileSortByOption } from '../../../../files/domain/models/FileCriteria'
import { DropdownButton, DropdownButtonItem } from 'dataverse-design-system'
import { useTranslation } from 'react-i18next'

export function FileCriteriaSortBy({
onCriteriaChange
}: {
onCriteriaChange: (criteria: FileCriteria) => void
}) {
const { t } = useTranslation('files')
const handleSortChange = (eventKey: string | null) => {
onCriteriaChange({ sortBy: eventKey as FileSortByOption })
}

return (
<DropdownButton
icon={
<ArrowDownUp className={styles.icon} role="img" aria-label={t('criteria.sortBy.icon')} />
}
title={t('criteria.sortBy.title')}
id="files-table-sort-by"
variant="secondary"
onSelect={handleSortChange}>
{Object.values(FileSortByOption).map((sortByOption) => (
<DropdownButtonItem key={sortByOption} eventKey={sortByOption}>
{t(`criteria.sortBy.options.${sortByOption}`)}
</DropdownButtonItem>
))}
</DropdownButton>
)
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,33 +1,11 @@
import { FileCriteriaInputs } from '../../../../../../src/sections/dataset/dataset-files/file-criteria-inputs/FileCriteriaInputs'

describe('FilesCriteriaInputs', () => {
it('calls onCriteriaChange with the selected orderBy value', () => {
describe('FileCriteriaInputs', () => {
it('renders the SortBy input', () => {
const onCriteriaChange = cy.stub().as('onCriteriaChange')

cy.customMount(<FileCriteriaInputs onCriteriaChange={onCriteriaChange} />)

cy.findByRole('button', { name: /Sort/ }).click()
cy.findByText('Name (A-Z)').should('exist').click()
cy.wrap(onCriteriaChange).should('be.calledWith', { sortBy: 'name_az' })

cy.findByRole('button', { name: /Sort/ }).click()
cy.findByText('Name (Z-A)').click()
cy.wrap(onCriteriaChange).should('be.calledWith', { sortBy: 'name_za' })

cy.findByRole('button', { name: /Sort/ }).click()
cy.findByText('Newest').click()
cy.wrap(onCriteriaChange).should('be.calledWith', { sortBy: 'newest' })

cy.findByRole('button', { name: /Sort/ }).click()
cy.findByText('Oldest').click()
cy.wrap(onCriteriaChange).should('be.calledWith', { sortBy: 'oldest' })

cy.findByRole('button', { name: /Sort/ }).click()
cy.findByText('Size').click()
cy.wrap(onCriteriaChange).should('be.calledWith', { sortBy: 'size' })

cy.findByRole('button', { name: /Sort/ }).click()
cy.findByText('Type').click()
cy.wrap(onCriteriaChange).should('be.calledWith', { sortBy: 'type' })
cy.findByRole('button', { name: /Sort/ }).should('exist')
})
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { FileCriteriaSortBy } from '../../../../../../src/sections/dataset/dataset-files/file-criteria-inputs/FileCriteriaSortBy'

describe('FilesCriteriaSortBy', () => {
it('calls onCriteriaChange with the selected orderBy value', () => {
const onCriteriaChange = cy.stub().as('onCriteriaChange')

cy.customMount(<FileCriteriaSortBy onCriteriaChange={onCriteriaChange} />)

cy.findByRole('button', { name: /Sort/ }).click()
cy.findByText('Name (A-Z)').should('exist').click()
cy.wrap(onCriteriaChange).should('be.calledWith', { sortBy: 'name_az' })

cy.findByRole('button', { name: /Sort/ }).click()
cy.findByText('Name (Z-A)').click()
cy.wrap(onCriteriaChange).should('be.calledWith', { sortBy: 'name_za' })

cy.findByRole('button', { name: /Sort/ }).click()
cy.findByText('Newest').click()
cy.wrap(onCriteriaChange).should('be.calledWith', { sortBy: 'newest' })

cy.findByRole('button', { name: /Sort/ }).click()
cy.findByText('Oldest').click()
cy.wrap(onCriteriaChange).should('be.calledWith', { sortBy: 'oldest' })

cy.findByRole('button', { name: /Sort/ }).click()
cy.findByText('Size').click()
cy.wrap(onCriteriaChange).should('be.calledWith', { sortBy: 'size' })

cy.findByRole('button', { name: /Sort/ }).click()
cy.findByText('Type').click()
cy.wrap(onCriteriaChange).should('be.calledWith', { sortBy: 'type' })
})
})

0 comments on commit d706827

Please sign in to comment.