Mercurial > gemma
diff client/src/components/splitscreen/Splitscreen.vue @ 2566:83b938bf4da9
client: prepared store and minimized splitscreens for multiple simultaneous diagrams
author | Markus Kottlaender <markus@intevation.de> |
---|---|
date | Mon, 11 Mar 2019 11:34:54 +0100 |
parents | |
children | 1686ec185155 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/components/splitscreen/Splitscreen.vue Mon Mar 11 11:34:54 2019 +0100 @@ -0,0 +1,100 @@ +<template> + <div> + <div + :class="[ + 'splitscreen bg-white d-flex flex-column ui-element', + { show: showSplitscreen } + ]" + > + <UIBoxHeader + :icon="activeSplitscreen.icon" + :title="activeSplitscreen.title" + :closeCallback="close" + :collapseCallback="collapse" + v-if="activeSplitscreen" + /> + <div class="d-flex flex-fill"> + <transition name="fade"> + <div + class="loading d-flex justify-content-center align-items-center" + v-if="splitscreenLoading" + > + <font-awesome-icon icon="spinner" spin /> + </div> + </transition> + <component :is="activeSplitscreen.component" v-if="activeSplitscreen" /> + </div> + </div> + </div> +</template> + +<style lang="sass" scoped> +.splitscreen + position: absolute + bottom: -50vh + left: 0 + right: 0 + height: 50vh + overflow: hidden + z-index: 1 + box-shadow: 0 -.125rem .25rem rgba(0, 0, 0, 0.075) + transition: bottom 0.3s + &.show + bottom: 0 + + .loading + background: rgba(255, 255, 255, 0.96) + position: absolute + z-index: 99 + top: 34px + right: 0 + bottom: 0 + left: 0 +</style> + +<script> +/* This is Free Software under GNU Affero General Public License v >= 3.0 + * without warranty, see README.md and license for details. + * + * SPDX-License-Identifier: AGPL-3.0-or-later + * License-Filename: LICENSES/AGPL-3.0.txt + * + * Copyright (C) 2018 by via donau + * – Österreichische Wasserstraßen-Gesellschaft mbH + * Software engineering by Intevation GmbH + * + * Author(s): + * Markus Kottländer <markus.kottlaender@intevation.de> + */ + +import { mapState, mapGetters } from "vuex"; + +export default { + components: { + Fairwayprofile: () => import("@/components/fairway/Fairwayprofile") + }, + computed: { + ...mapState("application", ["showSplitscreen", "splitscreenLoading"]), + ...mapGetters("application", ["activeSplitscreen"]) + }, + methods: { + collapse() { + if (this.activeSplitscreen.collapseCallback) + this.activeSplitscreen.collapseCallback(); + this.$store.commit("application/showSplitscreen", false); + }, + close() { + if (this.activeSplitscreen.closeCallback) + this.activeSplitscreen.closeCallback(); + this.$store.commit("application/showSplitscreen", false); + setTimeout(() => { + this.$store.commit( + "application/removeSplitscreen", + this.activeSplitscreen.id + ); + this.$store.commit("application/activeSplitscreen", null); + }, 350); + } + } +}; +</script>