From 40350f05558fca740463b083dca2611ec8f29e8e Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Thu, 1 Mar 2018 23:46:32 +0100
Subject: [PATCH] Redraw ago datetime every minute

---
 front/src/App.vue                         |  4 ++++
 front/src/components/common/HumanDate.vue | 16 ++++++++++++++--
 front/src/store/index.js                  |  2 ++
 front/src/store/ui.js                     | 12 ++++++++++++
 4 files changed, 32 insertions(+), 2 deletions(-)
 create mode 100644 front/src/store/ui.js

diff --git a/front/src/App.vue b/front/src/App.vue
index 3e39d726..d60f82fe 100644
--- a/front/src/App.vue
+++ b/front/src/App.vue
@@ -44,6 +44,10 @@ export default {
   },
   created () {
     this.$store.dispatch('instance/fetchSettings')
+    setInterval(() => {
+      // used to redraw ago dates every minute
+      self.$store.commit('ui/computeLastDate')
+    }, 1000 * 60)
   }
 }
 </script>
diff --git a/front/src/components/common/HumanDate.vue b/front/src/components/common/HumanDate.vue
index ff6ff5c7..9ff8e48b 100644
--- a/front/src/components/common/HumanDate.vue
+++ b/front/src/components/common/HumanDate.vue
@@ -1,8 +1,20 @@
 <template>
-  <time :datetime="date" :title="date | moment">{{ date | ago }}</time>
+  <time :datetime="date" :title="date | moment">{{ realDate | ago }}</time>
 </template>
 <script>
+import {mapState} from 'vuex'
 export default {
-  props: ['date']
+  props: ['date'],
+  computed: {
+    ...mapState({
+      lastDate: state => state.ui.lastDate
+    }),
+    realDate () {
+      if (this.lastDate) {
+        // dummy code to trigger a recompute to update the ago render
+      }
+      return this.date
+    }
+  }
 }
 </script>
diff --git a/front/src/store/index.js b/front/src/store/index.js
index 74f9d42b..e111966a 100644
--- a/front/src/store/index.js
+++ b/front/src/store/index.js
@@ -8,11 +8,13 @@ import instance from './instance'
 import queue from './queue'
 import radios from './radios'
 import player from './player'
+import ui from './ui'
 
 Vue.use(Vuex)
 
 export default new Vuex.Store({
   modules: {
+    ui,
     auth,
     favorites,
     instance,
diff --git a/front/src/store/ui.js b/front/src/store/ui.js
new file mode 100644
index 00000000..f0935e49
--- /dev/null
+++ b/front/src/store/ui.js
@@ -0,0 +1,12 @@
+
+export default {
+  namespaced: true,
+  state: {
+    lastDate: new Date()
+  },
+  mutations: {
+    computeLastDate: (state) => {
+      state.lastDate = new Date()
+    }
+  }
+}
-- 
GitLab