UNPKG

@sassoftware/vi-api

Version:
565 lines (564 loc) 20.2 kB
import { Comment, Relationship, StoredObjectFieldDTO } from "../svi-datahub"; import { FileOperation } from "../file/file-api"; import { PageModel } from "../page-model/page-model-api"; import { ClientSheet, Sheet } from "../sheet/sheet-api"; export interface ObjectIdentifier { id: string; type: string; } export interface ObjectAccessRules { canReadObject: Promise<boolean>; canUpdateObject: Promise<boolean>; canDeleteObject: Promise<boolean>; } export interface FormatObjectFieldsOptions { skipFormatReferenceData?: boolean; skipFormatUserGroups?: boolean; skipFormatBooleans?: boolean; /** * A function that will be the last thing called in order to format the object's field values. * @param fieldValue the current value of the field being formatted. * @param fieldName the name of the field currently being formatted. * @param objectFields all of the available fields in the object. * @param fieldMetadata the current field's metadata. */ formatCallback?: (fieldValue: string | number | Date | PageData[], fieldName: string, objectFields: FieldValues, fieldMetadata: StoredObjectFieldDTO) => void; } export interface UpdateObjectOptions { fileOperations?: FileOperation[]; isExternalObject?: boolean; sheets?: ClientSheet[]; } export interface CreateObjectOptions { comments?: Comment[]; fileOperations?: FileOperation[]; sheets?: ClientSheet[]; } /** * This API provides the functionality related to objects within SAS Visual Investigator. * * Accessed from the window at `window.sas.vi.object`. * * @example window.sas.vi.object.getObjectAccessRules(objectType, objectId); * @category API */ export interface ObjectApi { /** * @method * @description Gets the object access rules for an object: * The three methods that return booleans based on specified object are: * * canReadObject, * canUpdateObject, * and canDeleteObject. * * @param objectType {string} Object type. * @param objectId {string} Object ID. * @return Object with three boolean methods which provide boolean data on a specified object. */ getObjectAccessRules(objectType: string, objectId: string): ObjectAccessRules; /** * @method * @description Gets the specified object. * @param objectType {string} Object type. * @param objectId {string} Object ID. * @param [includeDisplayLabel = true] {boolean} Checks whether or not to return the object with a display label. * @param [includeChildObjects = false] {boolean} Checks whether or not to return the child objects associated with this object. * @return The specified object. */ getObject(objectType: string, objectId: string, includeDisplayLabel?: boolean, includeChildObjects?: boolean): Promise<VIObject>; /** * @method * @description Gets the child objects of an object. * @param objectType {string} Object type. * @param objectId {string} Gets the child objects relating to the object ID. * @param childObjectType {string} Child object type. * @param [limit = 25] {number} Maximum number of child objects to be returned. * @return A Promise that resolves to an array of objects, that are child objects of the specified object. */ getChildObjects(objectType: string, objectId: string, childObjectType: string, limit?: number): Promise<VIObject[]>; /** * @method * @description Updates an existing object with the provided data. * @param objectType {string} Object type. * @param objectId {string} Object ID. * @param objectTypeId {number} Object type ID. * @param objectTypeVersion {number} Object type version. * @param fieldValues {FieldValues} Field values of the object. * @param [options] {UpdateObjectOptions} Optional extra parameters. * @return A Promise that resolves to the updated object when the object has successfully been updated. */ updateObject(objectType: string, objectId: string, objectTypeId: number, objectTypeVersion: number, fieldValues: FieldValues, options?: UpdateObjectOptions): Promise<VIObject>; /** * @method * @description Updates an existing object with the provided data. * @param objectType {string} Object type. * @param objectId {string} Object ID. * @param objectTypeId {number} Object type ID. * @param objectTypeVersion {number} Object type version. * @param originalFieldValues {FieldValues} Field values before the object was edited * @param newFieldValues {FieldValues} Field values after the object was edited * @param objectVersion {number} Object Version * @param [options] {UpdateObjectOptions} Optional extra parameters. * @return A Promise that resolves to the updated object when the object has successfully been updated. */ patchObject(objectType: string, objectId: string, objectTypeId: number, objectTypeVersion: number, originalFieldValues: FieldValues, newFieldValues: FieldValues, objectVersion: number, options?: UpdateObjectOptions): Promise<VIObject>; /** * @method * @description Deletes an object. * @param objectType {string} Object type. * @param objectId {string} Object ID. * @return A Promise that resolves to void when the specified object is successfully deleted. */ deleteObject(objectType: string, objectId: string): Promise<void>; /** * @method * @description Creates an object. * @param objectType {string} Object type. * @param objectTypeId {number} Object type ID. * @param fieldValues {FieldValues} Field values of the object. * @param [options] {CreateObjectOptions} Optional extra parameters. * @return A Promise that resolves to the created object when the object has successfully been created. */ createObject(objectType: string, objectTypeId: number, fieldValues: FieldValues, options?: CreateObjectOptions): Promise<VIObject>; /** * @method * @description Gets relationship via the relationship ID. * @param relationshipId {string} Relationship ID. * @return A Promise that resolves to a relationship. */ getObjectRelationship(relationshipId: string): Promise<ObjectRelationship>; /** * @method * @description Updates an existing relationship in SAS Visual Investigator. * @param relationshipId {string} Relationship ID. * @param payload {any} HTTP request content. * @return A Promise that resolves to a relationship. */ updateObjectRelationship(relationshipId: string, payload: any): Promise<ObjectRelationship>; /** * @method * @description Updates an existing relationship in SAS Visual Investigator. * @param relationshipId {string} Relationship ID. * @param originalFieldValues {FieldValues} Field values before the relationship was edited * @param newFieldValues {FieldValues} Field values after the relationship was edited * @return A Promise that resolves to a relationship. */ patchObjectRelationship(relationshipId: string, originalFieldValues: FieldValues, newFieldValues: FieldValues): Promise<ObjectRelationship>; /** * @method * @description Deletes relationship with the specified ID. * @param relationshipId {string} Relationship ID. * @return A Promise that resolves to void when the object is successfully deleted. */ deleteObjectRelationship(relationshipId: string): Promise<void>; /** * @method * @description Creates a relationship between two objects. * @param from {LinkObject} Object that relationship is from. * @param to {LinkObject} Object that relationship is to. * @param relationship {ObjectRelationship} The relationship. * @return A Promise that resolves to an object. */ relateObject(from: LinkObject, to: LinkObject, relationship: ObjectRelationship): Promise<ObjectRelationship>; /** * @method * @description Gets object summary label. * @param objectType {string} Object type. * @param objectId {string} Object ID. * @return Summary label as a String. */ getObjectSummaryLabel(objectType: string, objectId: string): Promise<string>; /** * @method * @description Creates a new object and relates it with an existing one. * @param from {LinkObject} Existing Object that the relationship is from. * @param to {NewLinkObject} New Object to be created and related to. * @param relationship {ObjectRelationship} The relationship. * @return A Promise that resolves to a newly created relationship. */ createAndRelateObject(from: LinkObject, to: NewLinkObject, relationship: ObjectRelationship): Promise<ObjectRelationship>; /** * @method * @description Processes an array of objects and formats them for display. * @param objects {VIObject[]} Array of objects. * @param objectType {string} Type of the objects in the array. * @param [options] {FormatObjectFieldsOptions} Optional parameters to control the formatting. By default, nothing is skipped and there is no formatCallback. * @return A Promise that resolves to the formatted array of objects. */ formatObjectFieldsForDisplay(objects: VIObject[], objectType: string, options?: FormatObjectFieldsOptions): Promise<VIObject[]>; /** * @method * @description Uploads an attachment. * @param attachmentModel {AttachmentModel} Attachment model. * @param objectType {string} Object type. * @param objectId {string} Object ID. * @return A Promise that resolves to a HttpResponse with a FileAssociationResponse as the data. */ uploadAttachment(attachmentModel: AttachmentModel, objectType: string, objectId: string): Promise<FileAssociationResponse>; /** * @method * @description Deletes the specified attachment of the associated object. * @param objectType {string} Object type. * @param objectId {string} Object ID. * @param attachmentId {string} Attachment ID. * @return A Promise that resolves to an empty HttpResponse when the attachment is successfully deleted. */ deleteAttachment(objectType: string, objectId: string, attachmentId: string): Promise<void>; /** * @method * @description Gets an attachment of the associated object. * @param objectId {string} Object ID. * @param objectType {string} Object type. * @param attachmentId {string} Attachment ID. * @return A Promise that resolves to a HttpResponse with a FileAssociationResponse as the data. */ getAttachment(objectType: string, objectId: string, attachmentId: string): Promise<FileAssociationResponse>; /** * @method * @description Validates the fields, controls, and file categories of a child object. * @param {PageModel} model Page model. * @param {StoredObjectMetadata} childObject Child object metadata. * @return An observable that resolves to an array of validation results. */ validate(model: PageModel, childObject: StoredObjectMetadata): Promise<ValidationResult[]>; /** * @method * @description Launches a wizard allowing users to create an object/relationship. * The relationship wizard is determined by the relateToParentLabel or relateToParentName defined in the wizardValues parameter. * @param wizardValues {CreateDialogModel} Object containing entity and relationship data. * @returns A Promise which resolves when the dialog box is closed. */ openCreateAndLinkDialog(wizardValues: CreateDialogModel): Promise<CreateDialogModel>; } export interface PageData { fieldValues: FieldValues; id: string; displayLabel?: string; } export interface FieldValues { [property: string]: string | number | Date | PageData[]; } export interface ObjectSheetSettings { id: string; type: string; title: string; allowWorksheets: boolean; allowWorksheetCreation: boolean; allowNotesheets: boolean; allowNotesheetCreation: boolean; } export interface VIObject { fieldValues: FieldValues; comments?: Comment[]; fileOperations?: FileOperation[]; createdAt: string; displayLabel?: string; lastUpdatedAt: string; objectTypeId: number; objectTypeName: string; sheets?: Sheet[]; id: string; title?: string; } export type LinkObject = Pick<VIObject, "id" | "objectTypeName">; export type NewLinkObject = Pick<VIObject, "objectTypeName" | "fieldValues" | "fileOperations">; export interface ValidationResult { isValid: boolean; message?: string; } export interface PageAction { attrs: { actionId: number; actionName: string; attributes: { [property: string]: any; displayName: string; disabled: boolean; }; controlId?: number; displayName: string; }; } export interface PageActions { items?: PageAction[]; } export interface ControlContainer { childNodes?: ChildNode[]; } export interface PageTemplateScreen extends ControlContainer { id: string; name: string; locked?: boolean; } export interface PageTemplate { errors?: boolean; errorDetails?: Error; showTabs: boolean; id?: number; screens: PageTemplateScreen[]; } export interface FieldRestriction { maxLength?: number; required?: boolean; fieldDataType?: string; allowMultipleFiles?: boolean; constrainingListName?: string; cascadingReferenceDataFilterByCode?: string; cascadingReferenceDataFilterByField?: string; } export interface FieldRestrictions { [property: string]: FieldRestriction; } export interface ObjectFieldRestrictions { [property: string]: FieldRestrictions; } export interface TypeAttributes { [property: string]: any; } export interface NodeStates { readOnly?: boolean; required?: boolean; hidden?: boolean; } interface GlobalNodeStates extends NodeStates { conditions?: any[]; } export interface NodeAttributes extends TypeAttributes { global?: { state?: GlobalNodeStates; groupRestrictions?: Array<{ id: string; name: string; }>; }; } export declare enum ActionState { Disabled = "disabled", Hidden = "hidden" } export interface ChildNodeAttrs { attributes?: { disabled: boolean; state?: ActionState; }; id: string; category: string; type: string; states?: NodeStates; } export interface ChildNode extends ControlContainer { id: string; _fullScreen?: boolean; attributes?: NodeAttributes; typeAttributes: TypeAttributes; inheritedAttributes?: TypeAttributes; attrs: ChildNodeAttrs; } export declare enum ConditionReferenceType { TemplateControl = "TEMPLATE_CONTROL", Condition = "CONDITION", RequiredField = "REQUIRED_FIELD", ReadOnlyField = "READ_ONLY_FIELD", NldStyling = "NLD_STYLING" } export interface ConditionReference { association: string; type: ConditionReferenceType; } export declare enum ConditionFactType { Field = "FIELD", Condition = "CONDITION_REFERENCE" } export interface ConditionFact { factType: ConditionFactType; factPlaceholder: string; factValue: string; } export interface Condition { type: string; parameters: Array<string | number | boolean | Condition>; isComplete?: boolean; } export interface StoredObjectField { id: number; label: string; name: string; columnName: string; dataType: string; length?: number; required: boolean; primaryKeyField: boolean; unique: boolean; autoGenerated: boolean; systemReserved: boolean; displayIndex: number; version: number; primaryKeySeqNo?: number; readOnly: boolean; indexedForSearch: boolean; showTimeZone: boolean; ownerName: string; constrainingListName?: string; cascadingReferenceDataFilterByCode?: string; cascadingReferenceDataFilterByField?: string; } export interface FieldOperand { type: string; fieldName: string; objectName: string; } export interface BooleanExpression { type: string; leftOperand?: {}; operator: string; rightOperand: any; } export interface ConditionalExpression extends BooleanExpression { type: string; leftOperand: {}; operator: string; rightOperands: Array<{}>; } export interface ObjectIcon { id: number; name: string; imageType: string; imageLocation: string; version: number; } export interface StoredObjectFileCategory { name: string; displayName: string; allowMultiple?: boolean; required?: boolean; documentLockRequired?: boolean; } export interface StoredObjectMetadata { id: number; label: string; description: string; name: string; tableName: string; historyEnabled: boolean; version: number; lastUpdatedAtTimeFieldName: string; createdAtTimeFieldName: string; displayTextFields?: DisplayTextFields[]; dataStoreAssignedTimeZone: string; type: string; markerColor: string; nodeShape: string; nodeColor: string; borderColor: string; borderWidth: number; indexedForSearch: boolean; attachmentsIndexedForSearch: boolean; fields?: StoredObjectField[]; relationshipsFrom?: Relationship[]; defaultRegularIcon: ObjectIcon; requireSearchBeforeCreate: boolean; fileCategories?: StoredObjectFileCategory[]; } export interface ObjectRelationship { relationshipTypeName?: string; relationshipTypeLabel?: string; id?: string; createdAt?: Date; lastUpdatedAt?: Date; validFrom?: Date; validTo?: Date; displayLabel?: string; fromObjectTypeName?: string; fromObjectTypeVersion?: number; fromObjectId?: string; fromObjectDisplayLabel?: string; toObjectTypeName?: string; toObjectTypeVersion?: number; toObjectId?: string; toObjectDisplayLabel?: string; fieldValues?: { [index: string]: any; }; qualifiedTypeName?: string; } export interface AttachmentRow { description?: string; location: string; id: string; uploadedBy?: string; name: string; size: number; type: string; } export interface AttachmentModel { id: string; name: string; type?: string; description?: string; location: string; uploadedBy?: string; size?: number; selectedFile: AttachmentRow; } export interface RestRepresentationsLink { method?: string; rel?: string; href?: string; uri?: string; type?: string; responseType?: string; itemType?: string; responseItemType?: string; title?: string; } export interface FileAssociationResponse { version?: number; id?: string; name?: string; category?: string; location?: string; type?: string; size?: number; description?: string; properties?: { [index: string]: any; }; uploadedAt?: Date; uploadedBy?: string; extractedContent?: string; displayOrder?: number; links?: RestRepresentationsLink[]; } export interface DisplayTextFields { name: string; displayIndex: number; } export interface SearchOrCreateAndLinkDialogBase<T> { entityName: string; entityLabel: string; onClose?: (result?: T) => Promise<boolean>; /** * Values returned on the close of the dialog box. May be undefined when dialog box is cancelled. */ result?: T; } export interface CreateRelationshipDialogModel<T> extends SearchOrCreateAndLinkDialogBase<T> { relateToParentName: string; relateToParentLabel: string; linkReasons?: Relationship[]; } export interface CreateDialogModel extends CreateRelationshipDialogModel<CreateDialogResponse> { } export interface CreateDialogResponse { relateToModel?: CreateRelateToModel; } export interface CreateRelationshipDialogResultModel { linkReason?: Relationship; } export interface CreateRelateToModel extends CreateRelationshipDialogResultModel { newPageModel?: { model: PageModel; }; } export {};