File

projects/common/lib/models/images.model.ts

Description

Image as uploaded by user

Index

Properties
Methods

Constructor

constructor(fileContent?: string)
Parameters :
Name Type Optional Description
fileContent string Yes

(optional) The base64 of an image. See fileContent property.

Properties

attachmentOrder
Type : number
Default value : 0
contentType
Type : string

ContentType should generally match the MIME type, but can be set as needed by application. https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types

documentType
Type : T
Optional error
Type : CommonImageError
fileContent
Type : string

The base64 content of an image. Must already be base64 or some other stringable data-type.

You should be able to do to render the image.

id
Type : string
name
Type : string
naturalHeight
Type : number
naturalWidth
Type : number
size
Type : number
sizeTxt
Type : string
sizeUnit
Type : string
uuid
Type : string

Methods

calculateSize
calculateSize()
Returns : void
clone
clone()
Returns : CommonImage
toJSON
toJSON()

Returns the JSON of an image ready to be submitted to the API. You may have to set attachmentOrder before calling this.

import { UUID } from 'angular2-uuid';

// NOTE: If you change anything in this enum, check image-error-modal.component.html for tests and file-uploader.component.ts:
export enum CommonImageError {
  WrongType,
  TooSmall,
  TooBig,
  AlreadyExists,
  Unknown,
  CannotOpen,
  PDFnotSupported,
  CannotOpenPDF,
}

export class CommonImageProcessingError {
  commonImage?: CommonImage;
  rawImageFile?: File;
  maxSizeAllowed?: number;
  // added errorDescription.PDF.JS gives proper error messages as invalid pdf structure or password protected pdf.Good for splunk tracking
  constructor(public errorCode: CommonImageError, public errorDescription?: string) {

  }
}

/**
 * Image as uploaded by user
 */
export class CommonImage<T = any> {

  uuid: string;

  /**
   * @param fileContent (optional) The base64 of an image. See `fileContent` property.
   */
  constructor(fileContent?: string) {
    this.uuid = UUID.UUID();
    if (fileContent) {
      this.fileContent = fileContent;
    }
  }

  /**
   * The base64 content of an image.  Must already be base64 or some other stringable data-type.
   * 
   * You should be able to do <img src='myCommonImage.fileContent'> to render the image.
   */
  fileContent: string;
  documentType: T;

  /**
   * ContentType should generally match the MIME type, but can be set as needed by application.
   * https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
   */
  contentType: string;
  // number of bytes.
  size: number;
  sizeUnit: string;
  sizeTxt: string;
  naturalHeight: number;
  naturalWidth: number;
  name: string;

  // file uniqness checksum
  id: string;

  error?: CommonImageError;
  attachmentOrder: number = 0;

  /**
   * Returns the JSON of an image ready to be submitted to the API.  You may
   * have to set attachmentOrder before calling this.
   */
  toJSON(): CommonAttachmentJson<T> {
    return {
      attachmentOrder: this.attachmentOrder, // will be 0 - should it be 1?
      attachmentUuid: this.uuid,
      attachmentDocumentType: this.documentType
    };
  }

  clone(): CommonImage {
    const newImage = new CommonImage();

    newImage.uuid = this.uuid;
    newImage.fileContent = this.fileContent;
    newImage.documentType = this.documentType;
    newImage.contentType = this.contentType;
    newImage.size = this.size; // number of bytes.
    newImage.sizeUnit = this.sizeUnit;
    newImage.sizeTxt = this.sizeTxt;
    newImage.naturalHeight = this.naturalHeight;
    newImage.naturalWidth = this.naturalWidth;
    newImage.name = this.name;
    newImage.id = this.id;
    newImage.error = this.error;
    newImage.attachmentOrder = this.attachmentOrder;

    return newImage;
  }

  calculateSize() {
    const aMultiples = ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];
    const nBytes: number = this.size;
    let sOutput: string = nBytes + ' bytes';
    
    for (let nMultiple = 0, nApprox = nBytes / 1024; nApprox > 1; nApprox /= 1024, nMultiple++) {
      sOutput = `${nApprox.toFixed(3)} ${aMultiples[nMultiple]} (${nBytes} bytes)`;
      this.sizeUnit = aMultiples[nMultiple];
    }

    this.sizeTxt = sOutput;
  }
}

export interface CommonAttachmentJson<T> {
  attachmentOrder: number;
  attachmentUuid: string;
  attachmentDocumentType: T;
}

export interface CommonImageScaleFactors {
  widthFactor: number;
  heightFactor: number;

  scaleDown(scale: number): CommonImageScaleFactors;
}

export class CommonImageScaleFactorsImpl implements CommonImageScaleFactors {
  widthFactor: number;
  heightFactor: number;

  constructor(wFactor: number, hFactor: number) {
    this.widthFactor = wFactor;
    this.heightFactor = hFactor;
  }

  scaleDown(scale: number): CommonImageScaleFactors {
    return new CommonImageScaleFactorsImpl(
      this.widthFactor * scale,
      this.heightFactor * scale);
  }
}

result-matching ""

    No results matching ""