Sha256: 0d40087431d604a0cbfde343e91da096a747154edafc3b8c12ea094bc405323a

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

import { Views } from "loco-js";

import Room from "models/User";

class List extends Views.Base {
  constructor(opts = {}) {
    super(opts);
  }

  render() {
    this.connectWith(Room);
  }

  receivedSignal(signal, data) {
    switch (signal) {
      case "Room member_joined":
        this._memberJoined(data.room_id);
        break;
      case "Room member_left":
        this._memberLeft(data.room_id);
        break;
      case "Room created": {
        const renderedRoom = this._renderRoom(data.room);
        document
          .getElementById("rooms_list")
          .insertAdjacentHTML("beforeend", renderedRoom);
        break;
      }
      case "Room destroyed": {
        const roomNode = document.getElementById(`room_${data.room_id}`);
        roomNode.parentNode.removeChild(roomNode);
      }
    }
  }

  _memberJoined(roomId) {
    const node = this._membersNode(roomId);
    node.textContent = parseInt(node.text()) + 1;
  }

  _memberLeft(roomId) {
    const node = this._membersNode(roomId);
    node.textContent = parseInt(node.text()) - 1;
  }

  _membersNode(roomId) {
    document.querySelector(`#room_${roomId} td.members`);
  }

  _renderRoom(room) {
    `
    <tr id='room_${room.id}'>
      <td>${room.name}</td>
      <td class='members'>0</td>
      <td>
        <a rel='nofollow' data-method='patch' href='/user/rooms/${
          room.id
        }/join'>Join</a> |
        <a data-confirm='R U sure?' rel='nofollow' data-method='delete'
          href='/user/rooms/${room.id}'>Destroy</a>
      </td>
    </tr>
    `;
  }
}

export default List;

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
loco-rails-3.0.4 test/dummy/frontend/js/views/user/rooms/List.js