ResourceDisplays.BaseDisplay = class BaseDisplay {
  static htmlClass;

  constructor(displayElement) {
    this.displayElement = displayElement;
    this.userId = this.displayElement.dataset.userId;
    this.isInitialized = false;
    if (this.userId) {
      app.subscribeUser(this.userId)
        .then((response) => {
          app.socket.on('PATCH', (patch) => {
            if (this.isInitialized) {this.onPatch(patch);}
          });
        });
      app.getUser(this.userId)
        .then((user) => {
          this.init(user);
          this.isInitialized = true;
        });
    }
  }

  init(user) {throw 'Not implemented';}

  onPatch(patch) {throw 'Not implemented';}

  setElement(element, value) {
    switch (element.tagName) {
      case 'INPUT': {
        element.value = value;
        M.updateTextFields();
        break;
      }
      default: {
        element.innerText = value;
        break;
      }
    }
  }

  setElements(elements, value) {
    for (let element of elements) {
      this.setElement(element, value);
    }
  }
};