mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 01:54:15 +00:00
301 lines
8.1 KiB
TypeScript
301 lines
8.1 KiB
TypeScript
/* eslint-disable max-classes-per-file */
|
|
import {type} from '../../../shared/ngrx/type';
|
|
import {Action} from '@ngrx/store';
|
|
import {Identifiable} from './object-updates.reducer';
|
|
import {INotification} from '../../../shared/notifications/models/notification.model';
|
|
import { PatchOperationService } from './patch-operation-service/patch-operation.service';
|
|
import { GenericConstructor } from '../../shared/generic-constructor';
|
|
|
|
/**
|
|
* The list of ObjectUpdatesAction type definitions
|
|
*/
|
|
export const ObjectUpdatesActionTypes = {
|
|
INITIALIZE_FIELDS: type('dspace/core/cache/object-updates/INITIALIZE_FIELDS'),
|
|
SET_EDITABLE_FIELD: type('dspace/core/cache/object-updates/SET_EDITABLE_FIELD'),
|
|
SET_VALID_FIELD: type('dspace/core/cache/object-updates/SET_VALID_FIELD'),
|
|
ADD_FIELD: type('dspace/core/cache/object-updates/ADD_FIELD'),
|
|
SELECT_VIRTUAL_METADATA: type('dspace/core/cache/object-updates/SELECT_VIRTUAL_METADATA'),
|
|
DISCARD: type('dspace/core/cache/object-updates/DISCARD'),
|
|
REINSTATE: type('dspace/core/cache/object-updates/REINSTATE'),
|
|
REMOVE: type('dspace/core/cache/object-updates/REMOVE'),
|
|
REMOVE_ALL: type('dspace/core/cache/object-updates/REMOVE_ALL'),
|
|
REMOVE_FIELD: type('dspace/core/cache/object-updates/REMOVE_FIELD')
|
|
};
|
|
|
|
|
|
/**
|
|
* Enum that represents the different types of updates that can be performed on a field in the ObjectUpdates store
|
|
*/
|
|
export enum FieldChangeType {
|
|
UPDATE = 0,
|
|
ADD = 1,
|
|
REMOVE = 2
|
|
}
|
|
|
|
/**
|
|
* An ngrx action to initialize a new page's fields in the ObjectUpdates state
|
|
*/
|
|
export class InitializeFieldsAction implements Action {
|
|
type = ObjectUpdatesActionTypes.INITIALIZE_FIELDS;
|
|
payload: {
|
|
url: string,
|
|
fields: Identifiable[],
|
|
lastModified: Date,
|
|
patchOperationService?: GenericConstructor<PatchOperationService>
|
|
};
|
|
|
|
/**
|
|
* Create a new InitializeFieldsAction
|
|
*
|
|
* @param url
|
|
* the unique url of the page for which the fields are being initialized
|
|
* @param fields The identifiable fields of which the updates are kept track of
|
|
* @param lastModified The last modified date of the object that belongs to the page
|
|
* @param patchOperationService A {@link PatchOperationService} used for creating a patch
|
|
*/
|
|
constructor(
|
|
url: string,
|
|
fields: Identifiable[],
|
|
lastModified: Date,
|
|
patchOperationService?: GenericConstructor<PatchOperationService>
|
|
) {
|
|
this.payload = { url, fields, lastModified, patchOperationService };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* An ngrx action to add a new field update in the ObjectUpdates state for a certain page url
|
|
*/
|
|
export class AddFieldUpdateAction implements Action {
|
|
type = ObjectUpdatesActionTypes.ADD_FIELD;
|
|
payload: {
|
|
url: string,
|
|
field: Identifiable,
|
|
changeType: FieldChangeType,
|
|
};
|
|
|
|
/**
|
|
* Create a new AddFieldUpdateAction
|
|
*
|
|
* @param url
|
|
* the unique url of the page for which a field update is added
|
|
* @param field The identifiable field of which a new update is added
|
|
* @param changeType The update's change type
|
|
*/
|
|
constructor(
|
|
url: string,
|
|
field: Identifiable,
|
|
changeType: FieldChangeType) {
|
|
this.payload = { url, field, changeType };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* An ngrx action to select/deselect virtual metadata in the ObjectUpdates state for a certain page url
|
|
*/
|
|
export class SelectVirtualMetadataAction implements Action {
|
|
|
|
type = ObjectUpdatesActionTypes.SELECT_VIRTUAL_METADATA;
|
|
payload: {
|
|
url: string,
|
|
source: string,
|
|
uuid: string,
|
|
select: boolean;
|
|
};
|
|
|
|
/**
|
|
* Create a new SelectVirtualMetadataAction
|
|
*
|
|
* @param url
|
|
* the unique url of the page for which a field update is added
|
|
* @param source
|
|
* the id of the relationship which adds the virtual metadata
|
|
* @param uuid
|
|
* the id of the item which has the virtual metadata
|
|
* @param select
|
|
* whether to select or deselect the virtual metadata to be saved as real metadata
|
|
*/
|
|
constructor(
|
|
url: string,
|
|
source: string,
|
|
uuid: string,
|
|
select: boolean,
|
|
) {
|
|
this.payload = { url, source, uuid, select: select};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* An ngrx action to set the editable state of an existing field in the ObjectUpdates state for a certain page url
|
|
*/
|
|
export class SetEditableFieldUpdateAction implements Action {
|
|
type = ObjectUpdatesActionTypes.SET_EDITABLE_FIELD;
|
|
payload: {
|
|
url: string,
|
|
uuid: string,
|
|
editable: boolean,
|
|
};
|
|
|
|
/**
|
|
* Create a new SetEditableFieldUpdateAction
|
|
*
|
|
* @param url
|
|
* the unique url of the page
|
|
* @param fieldUUID The UUID of the field of which
|
|
* @param editable The new editable value for the field
|
|
*/
|
|
constructor(
|
|
url: string,
|
|
fieldUUID: string,
|
|
editable: boolean) {
|
|
this.payload = { url, uuid: fieldUUID, editable };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* An ngrx action to set the isValid state of an existing field in the ObjectUpdates state for a certain page url
|
|
*/
|
|
export class SetValidFieldUpdateAction implements Action {
|
|
type = ObjectUpdatesActionTypes.SET_VALID_FIELD;
|
|
payload: {
|
|
url: string,
|
|
uuid: string,
|
|
isValid: boolean,
|
|
};
|
|
|
|
/**
|
|
* Create a new SetValidFieldUpdateAction
|
|
*
|
|
* @param url
|
|
* the unique url of the page
|
|
* @param fieldUUID The UUID of the field of which
|
|
* @param isValid The new isValid value for the field
|
|
*/
|
|
constructor(
|
|
url: string,
|
|
fieldUUID: string,
|
|
isValid: boolean) {
|
|
this.payload = { url, uuid: fieldUUID, isValid };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* An ngrx action to discard all existing updates in the ObjectUpdates state for a certain page url
|
|
*/
|
|
export class DiscardObjectUpdatesAction implements Action {
|
|
type = ObjectUpdatesActionTypes.DISCARD;
|
|
payload: {
|
|
url: string,
|
|
notification: INotification,
|
|
discardAll: boolean;
|
|
};
|
|
|
|
/**
|
|
* Create a new DiscardObjectUpdatesAction
|
|
*
|
|
* @param url
|
|
* the unique url of the page for which the changes should be discarded
|
|
* @param notification The notification that is raised when changes are discarded
|
|
* @param discardAll discard all
|
|
*/
|
|
constructor(
|
|
url: string,
|
|
notification: INotification,
|
|
discardAll = false
|
|
) {
|
|
this.payload = { url, notification, discardAll };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* An ngrx action to reinstate all previously discarded updates in the ObjectUpdates state for a certain page url
|
|
*/
|
|
export class ReinstateObjectUpdatesAction implements Action {
|
|
type = ObjectUpdatesActionTypes.REINSTATE;
|
|
payload: {
|
|
url: string
|
|
};
|
|
|
|
/**
|
|
* Create a new ReinstateObjectUpdatesAction
|
|
*
|
|
* @param url
|
|
* the unique url of the page for which the changes should be reinstated
|
|
*/
|
|
constructor(
|
|
url: string
|
|
) {
|
|
this.payload = { url };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* An ngrx action to remove all previously discarded updates in the ObjectUpdates state for a certain page url
|
|
*/
|
|
export class RemoveObjectUpdatesAction implements Action {
|
|
type = ObjectUpdatesActionTypes.REMOVE;
|
|
payload: {
|
|
url: string
|
|
};
|
|
|
|
/**
|
|
* Create a new RemoveObjectUpdatesAction
|
|
*
|
|
* @param url
|
|
* the unique url of the page for which the changes should be removed
|
|
*/
|
|
constructor(
|
|
url: string
|
|
) {
|
|
this.payload = { url };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* An ngrx action to remove all previously discarded updates in the ObjectUpdates state
|
|
*/
|
|
export class RemoveAllObjectUpdatesAction implements Action {
|
|
type = ObjectUpdatesActionTypes.REMOVE_ALL;
|
|
}
|
|
|
|
/**
|
|
* An ngrx action to remove a single field update in the ObjectUpdates state for a certain page url and field uuid
|
|
*/
|
|
export class RemoveFieldUpdateAction implements Action {
|
|
type = ObjectUpdatesActionTypes.REMOVE_FIELD;
|
|
payload: {
|
|
url: string,
|
|
uuid: string
|
|
};
|
|
|
|
/**
|
|
* Create a new RemoveObjectUpdatesAction
|
|
*
|
|
* @param url
|
|
* the unique url of the page for which a field's change should be removed
|
|
* @param uuid The UUID of the field for which the change should be removed
|
|
*/
|
|
constructor(
|
|
url: string,
|
|
uuid: string
|
|
) {
|
|
this.payload = { url, uuid };
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* A type to encompass all ObjectUpdatesActions
|
|
*/
|
|
export type ObjectUpdatesAction
|
|
= AddFieldUpdateAction
|
|
| InitializeFieldsAction
|
|
| DiscardObjectUpdatesAction
|
|
| ReinstateObjectUpdatesAction
|
|
| RemoveObjectUpdatesAction
|
|
| RemoveFieldUpdateAction
|
|
| RemoveAllObjectUpdatesAction
|
|
| SelectVirtualMetadataAction
|
|
| SetEditableFieldUpdateAction
|
|
| SetValidFieldUpdateAction;
|