refresh spotify api token; auto reload currentlyPlaying
This commit is contained in:
		
							parent
							
								
									a86bd04da2
								
							
						
					
					
						commit
						e4de1997a3
					
				@ -10,8 +10,10 @@ defineProps({
 | 
				
			|||||||
  <div class="currentlyPlaying card">
 | 
					  <div class="currentlyPlaying card">
 | 
				
			||||||
    <div class="card-header">
 | 
					    <div class="card-header">
 | 
				
			||||||
      <b>{{ currentlyPlaying.item.name }}</b>
 | 
					      <b>{{ currentlyPlaying.item.name }}</b>
 | 
				
			||||||
 | 
					      <div>
 | 
				
			||||||
        {{ currentlyPlaying.item.artists.map(artist => artist.name).join(', ') }}
 | 
					        {{ currentlyPlaying.item.artists.map(artist => artist.name).join(', ') }}
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
    <div class="card-body">
 | 
					    <div class="card-body">
 | 
				
			||||||
      <div class="row">
 | 
					      <div class="row">
 | 
				
			||||||
        <div class="col-md">
 | 
					        <div class="col-md">
 | 
				
			||||||
@ -36,7 +38,7 @@ defineProps({
 | 
				
			|||||||
              rel="noopener norefferrer"
 | 
					              rel="noopener norefferrer"
 | 
				
			||||||
              class="btn btn-outline-dark m-1"
 | 
					              class="btn btn-outline-dark m-1"
 | 
				
			||||||
            >
 | 
					            >
 | 
				
			||||||
              view playlist on Spotify
 | 
					              view {{ currentlyPlaying.context.type }} on Spotify
 | 
				
			||||||
            </a>
 | 
					            </a>
 | 
				
			||||||
          </p>
 | 
					          </p>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -24,7 +24,7 @@
 | 
				
			|||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script setup lang="ts">
 | 
					<script setup lang="ts">
 | 
				
			||||||
import { ref, defineProps } from "vue";
 | 
					import { ref, defineProps, watch } from "vue";
 | 
				
			||||||
import ThrobberLoading from "@/components/ThrobberLoading.vue";
 | 
					import ThrobberLoading from "@/components/ThrobberLoading.vue";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const props = defineProps({
 | 
					const props = defineProps({
 | 
				
			||||||
@ -37,6 +37,10 @@ const props = defineProps({
 | 
				
			|||||||
    type: Boolean,
 | 
					    type: Boolean,
 | 
				
			||||||
    default: true,
 | 
					    default: true,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					  throbber: {
 | 
				
			||||||
 | 
					    type: Boolean,
 | 
				
			||||||
 | 
					    default: true,
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const loading = ref(true);
 | 
					const loading = ref(true);
 | 
				
			||||||
@ -46,9 +50,9 @@ const data = ref(null);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const update = async (promise: Promise | unknown) => {
 | 
					const update = async (promise: Promise | unknown) => {
 | 
				
			||||||
  loading.value = true;
 | 
					  loading.value = true;
 | 
				
			||||||
  setTimeout(() => {
 | 
					  if (props.throbber) setTimeout(() => {
 | 
				
			||||||
    if (loading.value) showThrobber.value = true;
 | 
					    if (loading.value) showThrobber.value = true;
 | 
				
			||||||
  }, 100);
 | 
					  }, 250);
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
    data.value = await (promise.isPromiseList
 | 
					    data.value = await (promise.isPromiseList
 | 
				
			||||||
      ? Promise.all(promise.promises)
 | 
					      ? Promise.all(promise.promises)
 | 
				
			||||||
@ -57,9 +61,14 @@ const update = async (promise: Promise | unknown) => {
 | 
				
			|||||||
    error.value = e;
 | 
					    error.value = e;
 | 
				
			||||||
  } finally {
 | 
					  } finally {
 | 
				
			||||||
    loading.value = false;
 | 
					    loading.value = false;
 | 
				
			||||||
 | 
					    showThrobber.value = false;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
update(props.promise);
 | 
					update(props.promise);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					watch(() => props.promise, (to) => {
 | 
				
			||||||
 | 
					  update(to);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style scoped lang="scss">
 | 
					<style scoped lang="scss">
 | 
				
			||||||
 | 
				
			|||||||
@ -2,14 +2,27 @@
 | 
				
			|||||||
import PromiseResolver from "@/components/PromiseResolver.vue";
 | 
					import PromiseResolver from "@/components/PromiseResolver.vue";
 | 
				
			||||||
import CurrentlyPlaying from "@/components/CurrentlyPlaying.vue";
 | 
					import CurrentlyPlaying from "@/components/CurrentlyPlaying.vue";
 | 
				
			||||||
import { useRoute } from "vue-router";
 | 
					import { useRoute } from "vue-router";
 | 
				
			||||||
 | 
					import { onBeforeUnmount, ref } from "vue";
 | 
				
			||||||
 | 
					import { useApi } from "@/Api";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const route = useRoute();
 | 
					const route = useRoute();
 | 
				
			||||||
 | 
					const api = useApi();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const userInfo = ref(api?.getUserInfo(route.params.id as string));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let refreshUserInfo = setInterval(() => {
 | 
				
			||||||
 | 
					  userInfo.value = api?.getUserInfo(route.params.id as string);
 | 
				
			||||||
 | 
					}, 20000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					onBeforeUnmount(() => {
 | 
				
			||||||
 | 
					  clearInterval(refreshUserInfo);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <h1>User</h1>
 | 
					  <h1>User</h1>
 | 
				
			||||||
  <PromiseResolver
 | 
					  <PromiseResolver
 | 
				
			||||||
    :promise="$api.getUserInfo($route.params.id)"
 | 
					    :promise="userInfo"
 | 
				
			||||||
    v-slot="{ data: { user, currentlyPlaying } }"
 | 
					    v-slot="{ data: { user, currentlyPlaying } }"
 | 
				
			||||||
    class="row"
 | 
					    class="row"
 | 
				
			||||||
  >
 | 
					  >
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user