Files
dspace-angular/src/app/core/cache/object-cache.actions.ts
Yura Bondarenko 245977a432 87968: Automatic migration from TSLint to ESLint
Via `ng g @angular-eslint/schematics:convert-tslint-to-eslint`
2022-04-08 17:57:16 +02:00

140 lines
3.7 KiB
TypeScript

import { Action } from '@ngrx/store';
import { type } from '../../shared/ngrx/type';
import { CacheableObject } from './object-cache.reducer';
import { Operation } from 'fast-json-patch';
/**
* The list of ObjectCacheAction type definitions
*/
export const ObjectCacheActionTypes = {
ADD: type('dspace/core/cache/object/ADD'),
REMOVE: type('dspace/core/cache/object/REMOVE'),
RESET_TIMESTAMPS: type('dspace/core/cache/object/RESET_TIMESTAMPS'),
ADD_PATCH: type('dspace/core/cache/object/ADD_PATCH'),
APPLY_PATCH: type('dspace/core/cache/object/APPLY_PATCH')
};
/* eslint-disable max-classes-per-file */
/**
* An ngrx action to add an object to the cache
*/
export class AddToObjectCacheAction implements Action {
type = ObjectCacheActionTypes.ADD;
payload: {
objectToCache: CacheableObject;
timeCompleted: number;
msToLive: number;
requestUUID: string;
alternativeLink?: string;
};
/**
* Create a new AddToObjectCacheAction
*
* @param objectToCache
* the object to add
* @param timeCompleted
* the time it was added
* @param msToLive
* the amount of milliseconds before it should expire
* @param requestUUID
* The uuid of the request that resulted in this object
* This isn't necessarily the same as the object's self
* link, it could have been part of a list for example
* @param alternativeLink An optional alternative link to this object
*/
constructor(objectToCache: CacheableObject, timeCompleted: number, msToLive: number, requestUUID: string, alternativeLink?: string) {
this.payload = { objectToCache, timeCompleted, msToLive, requestUUID, alternativeLink };
}
}
/**
* An ngrx action to remove an object from the cache
*/
export class RemoveFromObjectCacheAction implements Action {
type = ObjectCacheActionTypes.REMOVE;
payload: string;
/**
* Create a new RemoveFromObjectCacheAction
*
* @param href
* the unique href of the object to remove
*/
constructor(href: string) {
this.payload = href;
}
}
/**
* An ngrx action to reset the timeCompleted property of all cached objects
*/
export class ResetObjectCacheTimestampsAction implements Action {
type = ObjectCacheActionTypes.RESET_TIMESTAMPS;
payload: number;
/**
* Create a new ResetObjectCacheTimestampsAction
*
* @param newTimestamp
* the new timeCompleted all objects should get
*/
constructor(newTimestamp: number) {
this.payload = newTimestamp;
}
}
/**
* An ngrx action to add new operations to a specified cached object
*/
export class AddPatchObjectCacheAction implements Action {
type = ObjectCacheActionTypes.ADD_PATCH;
payload: {
href: string,
operations: Operation[]
};
/**
* Create a new AddPatchObjectCacheAction
*
* @param href
* the unique href of the object that should be updated
* @param operations
* the list of operations to add
*/
constructor(href: string, operations: Operation[]) {
this.payload = { href, operations };
}
}
/**
* An ngrx action to apply all existing operations to a specified cached object
*/
export class ApplyPatchObjectCacheAction implements Action {
type = ObjectCacheActionTypes.APPLY_PATCH;
payload: string;
/**
* Create a new ApplyPatchObjectCacheAction
*
* @param href
* the unique href of the object that should be updated
*/
constructor(href: string) {
this.payload = href;
}
}
/* eslint-enable max-classes-per-file */
/**
* A type to encompass all ObjectCacheActions
*/
export type ObjectCacheAction
= AddToObjectCacheAction
| RemoveFromObjectCacheAction
| ResetObjectCacheTimestampsAction
| AddPatchObjectCacheAction
| ApplyPatchObjectCacheAction;