Skip to content
Snippets Groups Projects
Home.vue 6.91 KiB
<template>
  <div>
    <div class="offline" v-if="clientset && offline">
      <div ref="container" class="wrapper" v-bind:style="modeContainerStyle">
        <h2>Offline</h2>
        <p>
          nodenogg.in appears to be offline, which means you cant see other data
          at this stage, as it maybe out of date. Once you reconnect. Your data
          will sync and the main views will reappear. This maybe down to you or
          maybe us. If you think it's us let us know.
        </p>
        <OffLine
          v-for="value in myNodes"
          v-bind:key="value.node_id"
          v-bind:nodeid="value.node_id"
          v-bind:nodetext="value.node_text"
          @editTrue="(e) => editTrue(e)"
        />
        <ModeToolbar
          @offlineTriggered="offlineTriggered()"
          @onlineTriggered="onlineTriggered()"
        />
        <ViewToolbar />

        <!-- <OnBoard v-else @clientAdded="clientAdded()" /> -->
      </div>
    </div>

    <div class="online" v-else>
      <div ref="container" class="wrapper" v-bind:style="modeContainerStyle">
        <!-- <PanzoomLayer> -->
        <PanZoomContainer
          v-bind:width="width"
          v-bind:height="height"
          v-bind:scale="scale"
          v-bind:translation="translation"
        >
          <div v-if="clientset">
            <OtherNodeslayer
              v-for="value in otherNodes"
              v-bind:key="value.node_id"
              v-bind:nodeid="value.node_id"
              v-bind:nodetext="value.node_text"
              v-bind:deleted="value.deleted"
            />
            <NodesLayer
              @editTrue="(e) => editTrue(e)"
              v-for="value in myNodes"
              v-bind:key="value.node_id"
              v-bind:nodeid="value.node_id"
              v-bind:nodetext="value.node_text"
              v-bind:deleted="value.deleted"
            />
            <TipsLayer />
            <ConnectionsLayer />
          </div>

          <div v-else>
            <OtherNodeslayer
              v-for="value in otherNodes"
              v-bind:key="value.node_id"
              v-bind:nodeid="value.node_id"
              v-bind:nodetext="value.node_text"
              v-bind:deleted="value.deleted"
            />
            <NodesLayer
              @editTrue="(e) => editTrue(e)"
              v-for="value in myNodes"
              v-bind:key="value.node_id"
              v-bind:nodeid="value.node_id"
              v-bind:nodetext="value.node_text"
              v-bind:deleted="value.deleted"
            />
            <OnBoard
              @clientAdded="clientAdded()"
              @editTrue="(e) => editTrue(e)"
            />
            <ConnectionsLayer />
          </div>
          <ScribbleLayer v-bind:drawready="drawready"></ScribbleLayer>
          <!-- </PanzoomLayer> -->
        </PanZoomContainer>
        <!-- <ToolBar /> -->
        <ModeToolbar
          @offlineTriggered="offlineTriggered()"
          @onlineTriggered="onlineTriggered()"
          @uploadAdded="uploadAdded()"
          @copyDone="copyDone()"
          @drawOn="drawOn()"
          @drawOff="drawOff()"
        />
        <ViewToolbar />
        <UploadLayer
          v-bind:uploadready="uploadready"
          v-bind:copyready="copyready"
          @uploadAdded="uploadAdded()"
          @copyDone="copyDone()"
        />
      </div>
    </div>
  </div>
</template>

<script>
import PanZoomContainer from '@/experimental/PanZoomContainer'
import ConnectionsLayer from '@/components/ConnectionsLayer'
import NodesLayer from '@/components/NodesLayer'
import OffLine from '@/components/OffLine'
// import PanzoomLayer from '@/components/PanzoomLayer'
// import ToolBar from '@/components/ToolBar'
import ScribbleLayer from '@/components/ScribbleLayer'
import UploadLayer from '@/components/UploadLayer'
import OtherNodeslayer from '@/components/OtherNodeslayer.vue'
import OnBoard from '@/components/OnBoard.vue'
import TipsLayer from '@/components/TipsLayer.vue'
import ModeToolbar from '@/experimental/ModeToolbar'
import ViewToolbar from '@/experimental/ViewToolbar'
// import SelectionLayer from '@/experimental/layers/SelectionLayer'
import { shortcutsMixin } from '@/components/mixins/shortcutsMixin.js'
import { mapGetters, mapState } from 'vuex'

export default {
  name: 'Home',
  mixins: [shortcutsMixin],
  data: function () {
    return {
      elementWidth: undefined,
      elementHeight: undefined,
      width: 2000,
      height: 2000,
      clientset: false,
      listview: false,
      offline: false,
      uploadready: false,
      copyready: false,
      drawready: false,
      // shortcutstate: false,
    }
  },
  computed: {
    domContainerReady() {
      return !!this.elementWidth && !!this.elementHeight
    },
    ...mapState({
      interaction: (state) => state.ui.interaction,
      scale: (state) => state.ui.scale,
      translation: (state) => state.ui.translation,
      myNodes: (state) => state.myNodes,
      otherNodes: (state) => state.otherNodes,
      shortcutstate: (state) => state.shortcutstate,
      toolmode: (state) => state.ui.mode,
      connections: (state) => state.configConnections,
    }),
    ...mapGetters({
      activeMode: 'ui/activeMode',
      modeContainerStyle: 'ui/modeContainerStyle',
    }),
  },
  mounted() {
    window.addEventListener('resize', this.handleResize)
    this.handleResize()
  },

  created() {
    if (typeof window !== 'undefined') {
      document.addEventListener('keydown', this.handleKeyPress)
    }
  },

  beforeDestroy() {
    if (typeof window !== 'undefined') {
      document.removeEventListener('keydown', this.handleKeyPress)
    }
  },

  destroyed() {
    window.removeEventListener('resize', this.handleResize)
  },
  methods: {
    handleResize() {
      const { offsetWidth, offsetHeight } = this.$refs.container
      this.elementWidth = offsetWidth
      this.elementHeight = offsetHeight
    },

    uploadAdded() {
      this.uploadready = !this.uploadready
    },

    copyDone() {
      this.copyready = !this.copyready
    },

    clientAdded() {
      this.clientset = !this.clientset
    },

    editTrue(e) {
      this.$store.dispatch('shortcutState', e)
    },

    drawOn() {
      this.drawready = !this.drawready
      //console.log(this.drawready)
    },

    drawOff() {
      this.drawready = false
    },

    // This is here to support the shortcuts
    addNode() {
      this.$store.dispatch('addNode')
    },
    selectMode(mode) {
      this.$store.commit('ui/setMode', mode)
    },

    offlineTriggered() {
      this.offline = true
    },
    onlineTriggered() {
      this.offline = false
    },
  },
  components: {
    ModeToolbar,
    ViewToolbar,
    //PanzoomLayer,
    PanZoomContainer,
    // SelectionLayer,
    NodesLayer,
    OtherNodeslayer,
    ConnectionsLayer,
    OnBoard,
    // ToolBar,
    OffLine,
    UploadLayer,
    ScribbleLayer,
    TipsLayer,
  },
}
</script>

<style scoped>
.wrapper {
  height: calc(100vh - 40px);
  width: calc(100%);
  margin: 0px;
  position: relative;
}
</style>