From 89e15b6d424ed98d31ebabf1b3149c300d758916 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20G=C3=B6bel?= <dgoebel@techfak.uni-bielefeld.de> Date: Mon, 6 Mar 2023 14:20:10 +0100 Subject: [PATCH] Add small animation for workflow cards #37 --- .../transitions/CardTransitionGroup.vue | 31 +++++++++++++++++++ .../transitions/ListTransitionGroup.vue | 31 +++++++++++++++++++ src/views/object-storage/S3KeysView.vue | 2 +- src/views/workflows/ListWorkflowsView.vue | 5 +-- 4 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 src/components/transitions/CardTransitionGroup.vue create mode 100644 src/components/transitions/ListTransitionGroup.vue diff --git a/src/components/transitions/CardTransitionGroup.vue b/src/components/transitions/CardTransitionGroup.vue new file mode 100644 index 0000000..677b5fa --- /dev/null +++ b/src/components/transitions/CardTransitionGroup.vue @@ -0,0 +1,31 @@ +<script setup lang="ts"> +defineProps({ + tag: { type: String, required: false, default: "div" }, +}); +</script> + +<template> + <transition-group name="card" :tag="tag"> + <slot></slot> + </transition-group> +</template> + +<style> +.card-move, /* apply transition to moving elements */ +.card-enter-active, +.card-leave-active { + transition: all 0.5s ease; +} + +.card-enter-from, +.card-leave-to { + opacity: 0; + transform: scale(0); +} + +/* ensure leaving items are taken out of layout flow so that moving + animations can be calculated correctly. */ +.card-leave-active { + position: absolute; +} +</style> diff --git a/src/components/transitions/ListTransitionGroup.vue b/src/components/transitions/ListTransitionGroup.vue new file mode 100644 index 0000000..59f342d --- /dev/null +++ b/src/components/transitions/ListTransitionGroup.vue @@ -0,0 +1,31 @@ +<script setup lang="ts"> +defineProps({ + tag: { type: String, required: false, default: "div" }, +}); +</script> + +<template> + <transition-group name="list" :tag="tag"> + <slot></slot> + </transition-group> +</template> + +<style> +.list-move, /* apply transition to moving elements */ +.list-enter-active, +.list-leave-active { + transition: all 0.3s ease; +} + +.list-enter-from, +.list-leave-to { + transform: rotateX(90deg); + transform-origin: center top; +} + +/* ensure leaving items are taken out of layout flow so that moving + animations can be calculated correctly. */ +.list-leave-active { + position: absolute; +} +</style> diff --git a/src/views/object-storage/S3KeysView.vue b/src/views/object-storage/S3KeysView.vue index 42766a2..4c09afb 100644 --- a/src/views/object-storage/S3KeysView.vue +++ b/src/views/object-storage/S3KeysView.vue @@ -139,7 +139,7 @@ onMounted(() => { <button v-for="(s3key, index) in keyState.keys" :key="s3key.access_key" - class="btn w-100 fs-5 mb-3" + class="btn w-100 fs-5 mb-3 text-truncate" type="button" @click="keyState.activeKey = index" :class="{ diff --git a/src/views/workflows/ListWorkflowsView.vue b/src/views/workflows/ListWorkflowsView.vue index f840a23..8a35758 100644 --- a/src/views/workflows/ListWorkflowsView.vue +++ b/src/views/workflows/ListWorkflowsView.vue @@ -4,6 +4,7 @@ import type { ComputedRef } from "vue"; import { useWorkflowStore } from "@/stores/workflows"; import type { WorkflowOut } from "@/client/workflow"; import WorkflowCard from "@/components/workflows/WorkflowCard.vue"; +import CardTransitionGroup from "@/components/transitions/CardTransitionGroup.vue"; import dayjs from "dayjs"; import BootstrapIcon from "@/components/BootstrapIcon.vue"; @@ -155,7 +156,7 @@ onMounted(() => { workflowsState.filterString }}' </div> - <div + <CardTransitionGroup v-else class="d-flex flex-wrap align-items-center justify-content-between" > @@ -165,7 +166,7 @@ onMounted(() => { :workflow="workflow" :loading="false" /> - </div> + </CardTransitionGroup> </div> <div v-else -- GitLab