Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/99 alert mechanism #190

Merged
merged 10 commits into from
Oct 18, 2023
15 changes: 14 additions & 1 deletion package-lock.json

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

18 changes: 9 additions & 9 deletions packages/design-system/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,25 +32,25 @@
},
"dependencies": {
"@types/react": "18.0.27",
"typescript": "4.9.5",
"vite-plugin-istanbul": "4.0.1",
"bootstrap": "5.2.3",
"react-bootstrap": "2.7.2",
"react-bootstrap-icons": "1.10.3",
"sass": "1.58.1"
"sass": "1.58.1",
"vite-plugin-istanbul": "4.0.1"
},
"devDependencies": {
"@vitejs/plugin-react": "3.1.0",
"@testing-library/cypress": "9.0.0",
"@storybook/react": "7.0.2",
"@storybook/test-runner": "0.10.0",
"@testing-library/cypress": "9.0.0",
"@vitejs/plugin-react": "3.1.0",
"axe-playwright": "1.2.3",
"chromatic": "6.17.4",
"cypress": "12.5.1",
"react": "18.2.0",
"typescript": "^5.2.2",
"vite": "4.1.5",
"vite-plugin-dts": "2.3.0",
"vite-plugin-libcss": "1.0.6",
"react": "18.2.0",
"axe-playwright": "1.2.3",
"chromatic": "6.17.4"
"vite-plugin-libcss": "1.0.6"
},
"files": [
"dist",
Expand Down
6 changes: 5 additions & 1 deletion public/locales/en/dataset.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,12 @@
"learnAbout": "Learn About",
"standards": "Data Citation Standards"
},

"actions": {
"uploadFiles": "Upload Files"
},
"alerts": {
"draftVersion": "<b>This draft version needs to be published</b>. When ready for sharing, please <b>publish</b> it so that others can see these changes",
"requestedVersionNotFound": "Info – Version {0} was not found. This is version {1}",
"unpublishedDataset": "Privately share this dataset before it is published: {0}"
}
}
59 changes: 57 additions & 2 deletions src/dataset/domain/models/Dataset.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { AlertVariant } from '@iqss/dataverse-design-system/dist/components/alert/AlertVariant'

export enum DatasetLabelSemanticMeaning {
DATASET = 'dataset',
FILE = 'file',
Expand All @@ -22,6 +24,21 @@ export class DatasetLabel {
) {}
}

export enum DatasetAlertMessageKey {
DRAFT_VERSION = 'draftVersion',
REQUESTED_VERSION_NOT_FOUND = 'requestedVersionNotFound',
UNPUBLISHED_DATASET = 'unpublishedDataset'
}

export class DatasetAlert {
constructor(
public readonly variant: AlertVariant,
public readonly message: DatasetAlertMessageKey,
public readonly dynamicFields?: string[],
public readonly customHeading?: string
) {}
}

export enum MetadataBlockName {
CITATION = 'citation',
GEOSPATIAL = 'geospatial',
Expand Down Expand Up @@ -191,6 +208,7 @@ export interface DatasetLicense {
uri: string
iconUri?: string
}

const defaultLicense: DatasetLicense = {
name: 'CC0 1.0',
uri: 'https://creativecommons.org/publicdomain/zero/1.0',
Expand All @@ -215,7 +233,9 @@ export class DatasetVersion {
public readonly id: number,
public readonly publishingStatus: DatasetPublishingStatus,
public readonly majorNumber?: number,
public readonly minorNumber?: number
public readonly minorNumber?: number,
// requestedVersion will be set if the user requested a version that did not exist.
public readonly requestedVersion?: string
) {}

toString(): string | DatasetNonNumericVersion {
Expand All @@ -232,6 +252,7 @@ export class Dataset {
public readonly version: DatasetVersion,
public readonly citation: string,
public readonly labels: DatasetLabel[],
public readonly alerts: DatasetAlert[],
public readonly summaryFields: DatasetMetadataBlock[],
public readonly license: DatasetLicense,
public readonly metadataBlocks: DatasetMetadataBlocks
Expand All @@ -243,16 +264,19 @@ export class Dataset {

static Builder = class {
public readonly labels: DatasetLabel[] = []
public readonly alerts: DatasetAlert[] = []

constructor(
public readonly persistentId: string,
public readonly version: DatasetVersion,
public readonly citation: string,
public readonly summaryFields: DatasetMetadataBlock[],
public readonly license: DatasetLicense = defaultLicense,
public readonly metadataBlocks: DatasetMetadataBlocks
public readonly metadataBlocks: DatasetMetadataBlocks,
public readonly privateUrl?: string
) {
this.withLabels()
this.withAlerts()
}

withLabels() {
Expand Down Expand Up @@ -300,12 +324,43 @@ export class Dataset {
}
}

private withAlerts(): void {
if (this.version.publishingStatus === DatasetPublishingStatus.DRAFT) {
this.alerts.push(
new DatasetAlert('warning', DatasetAlertMessageKey.DRAFT_VERSION, undefined, 'Info')
)
}
if (this.version.requestedVersion) {
const dynamicFields = [this.version.requestedVersion, `${this.version.toString()}`]

this.alerts.push(
new DatasetAlert(
'info',
DatasetAlertMessageKey.REQUESTED_VERSION_NOT_FOUND,
dynamicFields
)
)
}
if (this.privateUrl) {
const dynamicFields = [this.privateUrl]
this.alerts.push(
new DatasetAlert(
'info',
DatasetAlertMessageKey.UNPUBLISHED_DATASET,
dynamicFields,
'Unpublished Dataset Private URL'
)
)
}
}

build(): Dataset {
return new Dataset(
this.persistentId,
this.version,
this.citation,
this.labels,
this.alerts,
this.summaryFields,
this.license,
this.metadataBlocks
Expand Down
19 changes: 14 additions & 5 deletions src/dataset/infrastructure/mappers/JSDatasetMapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,16 @@ import {
} from '../../domain/models/Dataset'

export class JSDatasetMapper {
static toDataset(jsDataset: JSDataset, citation: string, summaryFieldsNames: string[]): Dataset {
static toDataset(
jsDataset: JSDataset,
citation: string,
summaryFieldsNames: string[],
requestedVersion?: string,
privateUrl?: string
): Dataset {
return new Dataset.Builder(
jsDataset.persistentId,
JSDatasetMapper.toVersion(jsDataset.versionId, jsDataset.versionInfo),
JSDatasetMapper.toVersion(jsDataset.versionId, jsDataset.versionInfo, requestedVersion),
citation,
JSDatasetMapper.toSummaryFields(jsDataset.metadataBlocks, summaryFieldsNames),
jsDataset.license,
Expand All @@ -29,19 +35,22 @@ export class JSDatasetMapper {
jsDataset.alternativePersistentId,
jsDataset.publicationDate,
jsDataset.citationDate
)
),
privateUrl
).build()
}

static toVersion(
jDatasetVersionId: number,
jsDatasetVersionInfo: JSDatasetVersionInfo
jsDatasetVersionInfo: JSDatasetVersionInfo,
requestedVersion?: string
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are some e2e tests that are checking the DatasetVersion that need to be fixed because of the added requestedVersion property

): DatasetVersion {
return new DatasetVersion(
jDatasetVersionId,
JSDatasetMapper.toStatus(jsDatasetVersionInfo.state),
jsDatasetVersionInfo.majorNumber,
jsDatasetVersionInfo.minorNumber
jsDatasetVersionInfo.minorNumber,
requestedVersion
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ import {
import { JSDatasetMapper } from '../mappers/JSDatasetMapper'

export class DatasetJSDataverseRepository implements DatasetRepository {
getByPersistentId(persistentId: string, version?: string): Promise<Dataset | undefined> {
getByPersistentId(
persistentId: string,
version?: string,
requestedVersion?: string
): Promise<Dataset | undefined> {
return getDataset
.execute(persistentId, this.versionToVersionId(version))
.then((jsDataset) =>
Expand All @@ -23,13 +27,13 @@ export class DatasetJSDataverseRepository implements DatasetRepository {
])
)
.then(([jsDataset, summaryFieldsNames, citation]: [JSDataset, string[], string]) =>
JSDatasetMapper.toDataset(jsDataset, citation, summaryFieldsNames)
JSDatasetMapper.toDataset(jsDataset, citation, summaryFieldsNames, requestedVersion)
)
.catch((error: WriteError) => {
if (!version) {
throw new Error(error.message)
}
return this.getByPersistentId(persistentId)
return this.getByPersistentId(persistentId, undefined, (requestedVersion = version))
})
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export function FileDate({ date }: { date: FileDateModel }) {
<div>
<span>
{t(`table.date.${date.type}`)}{' '}
{date.date.toLocaleDateString('en-US', {
{date.date.toLocaleDateString(Intl.DateTimeFormat().resolvedOptions().locale, {
year: 'numeric',
month: 'short',
day: 'numeric'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export function FileEmbargoDate({ embargo, publishingStatus }: FileEmbargoDatePr
<div>
<span>
{t(embargoTypeOfDate(embargo.isActive, publishingStatus))}{' '}
{embargo.dateAvailable.toLocaleDateString('en-US', {
{embargo.dateAvailable.toLocaleDateString(Intl.DateTimeFormat().resolvedOptions().locale, {
year: 'numeric',
month: 'short',
day: 'numeric'
Expand Down
Loading
Loading