All files / core/view Event.ts

75.76% Statements 25/33
100% Branches 2/2
50% Functions 6/12
74.19% Lines 23/31
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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151                                12x                                                                     12x               626x           626x 626x 626x           12x 626x 626x 460x   166x             12x 626x           12x 626x           12x                 12x   12x                             12x             12x             12x             12x     12x  
/**
 * Copyright 2017 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
import { stringify } from '@firebase/util';
import { Path } from '../util/Path';
import { EventRegistration } from './EventRegistration';
import { DataSnapshot } from '../../api/DataSnapshot';
 
/**
 * Encapsulates the data needed to raise an event
 * @interface
 */
export interface Event {
  /**
   * @return {!Path}
   */
  getPath(): Path;
 
  /**
   * @return {!string}
   */
  getEventType(): string;
 
  /**
   * @return {!function()}
   */
  getEventRunner(): () => void;
 
  /**
   * @return {!string}
   */
  toString(): string;
}
 
/**
 * Encapsulates the data needed to raise an event
 * @implements {Event}
 */
export class DataEvent implements Event {
  /**
   * @param {!string} eventType One of: value, child_added, child_changed, child_moved, child_removed
   * @param {!EventRegistration} eventRegistration The function to call to with the event data. User provided
   * @param {!DataSnapshot} snapshot The data backing the event
   * @param {?string=} prevName Optional, the name of the previous child for child_* events.
   */
  constructor(
    public eventType:
      | 'value'
      | ' child_added'
      | ' child_changed'
      | ' child_moved'
      | ' child_removed',
    public eventRegistration: EventRegistration,
    public snapshot: DataSnapshot,
    public prevName?: string | null
  ) {}
 
  /**
   * @inheritDoc
   */
  getPath(): Path {
    const ref = this.snapshot.getRef();
    if (this.eventType === 'value') {
      return ref.path;
    } else {
      return ref.getParent().path;
    }
  }
 
  /**
   * @inheritDoc
   */
  getEventType(): string {
    return this.eventType;
  }
 
  /**
   * @inheritDoc
   */
  getEventRunner(): () => void {
    return this.eventRegistration.getEventRunner(this);
  }
 
  /**
   * @inheritDoc
   */
  toString(): string {
    return (
      this.getPath().toString() +
      ':' +
      this.eventType +
      ':' +
      stringify(this.snapshot.exportVal())
    );
  }
}
 
export class CancelEvent implements Event {
  /**
   * @param {EventRegistration} eventRegistration
   * @param {Error} error
   * @param {!Path} path
   */
  constructor(
    public eventRegistration: EventRegistration,
    public error: Error,
    public path: Path
  ) {}
 
  /**
   * @inheritDoc
   */
  getPath(): Path {
    return this.path;
  }
 
  /**
   * @inheritDoc
   */
  getEventType(): string {
    return 'cancel';
  }
 
  /**
   * @inheritDoc
   */
  getEventRunner(): () => void {
    return this.eventRegistration.getEventRunner(this);
  }
 
  /**
   * @inheritDoc
   */
  toString(): string {
    return this.path.toString() + ':cancel';
  }
}