-
Adam Procter authoredAdam Procter authored
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>