All files / src/entities theme.ts

69.04% Statements 29/42
23.07% Branches 3/13
33.33% Functions 1/3
66.66% Lines 26/39

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83  1x 1x 1x   1x 1x 1x 1x   1x     1x     1x     1x     1x     1x     1x     1x     1x     1x     1x     1x     1x     1x     1x     1x     1x                 1x                           1x  
import { Domain } from './domain.js';
import { Entity } from '../entity.js';
import { User } from './user.js';
import { ThemeStatus } from '../constants/theme_status.js';
 
export class Theme extends Entity {
  protected static resourceName = 'themes';
  protected static singularName = 'theme';
  protected static pluralName = 'themes';
 
  @Theme.property({type: Date})
  public archived?: Date | null;
 
  @Theme.property()
  public id?: number;
 
  @Theme.property()
  public mainCssStatus?: number;
 
  @Theme.property({type: String})
  public mainCssErrorMessage?: string | null;
 
  @Theme.property()
  public emailCssStatus?: number;
 
  @Theme.property({type: String})
  public emailCssErrorMessage?: string | null;
 
  @Theme.property()
  public lastUpdated?: Date;
 
  @Theme.property({embeddedByDefault: false, type: String})
  public mainCss?: string | null;
 
  @Theme.property({embeddedByDefault: false, type: String})
  public mainCssTemplateUsing?: string | null;
 
  @Theme.property({embeddedByDefault: false, type: String})
  public mainCssTemplateEditing?: string | null;
 
  @Theme.property({embeddedByDefault: false, type: String})
  public emailCss?: string | null;
 
  @Theme.property({embeddedByDefault: false, type: String})
  public emailCssTemplateUsing?: string | null;
 
  @Theme.property({embeddedByDefault: false, type: String})
  public emailCssTemplateEditing?: string | null;
 
  @Theme.property({type: 'Domain'})
  public domain?: Domain | null;
 
  @Theme.property({type: User})
  public author?: User | null;
 
  @Theme.property({arrayType: 'Domain'})
  public domains?: Domain[];
 
  public canBeActivated = () => {
    const validStatus = ThemeStatus.VALID_BUT_NOT_UPDATED;
    Iif (this.mainCssStatus === undefined || this.emailCssStatus === undefined) {
      throw new Error('status is unknown');
    }
    return this.mainCssStatus >= validStatus &&
      this.emailCssStatus >= validStatus;
  };
 
  public isActiveOnDomain = (domainId: number) => {
    const domain = this.domain;
    Iif (domain === undefined) {
      throw new Error('domain is unknown');
    }
    Iif (domain === null) {
      return false;
    }
    const activeTheme = domain.activeTheme;
    Iif (activeTheme === undefined) {
      throw new Error('activeTheme is unknown');
    }
    return domain.id == domainId && activeTheme.id === this.id;
  };
}