From 8ab8b4ed7fb4db22238e087a40f995390c06b822 Mon Sep 17 00:00:00 2001
From: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
Date: Thu, 14 Nov 2024 19:28:38 -0500
Subject: [PATCH] Migrate Popular view to composition API (#6129)
* Migrate Popular to composition API
* remove comment, use shallowRef for shownResults
Co-Authored-By: absidue <48293849+absidue@users.noreply.github.com>
* Optimize setting shownResults
Co-Authored-By: absidue <48293849+absidue@users.noreply.github.com>
* Fix typo
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
---------
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
---
src/renderer/views/Popular/Popular.js | 108 -------------------------
src/renderer/views/Popular/Popular.vue | 98 +++++++++++++++++++++-
2 files changed, 97 insertions(+), 109 deletions(-)
delete mode 100644 src/renderer/views/Popular/Popular.js
diff --git a/src/renderer/views/Popular/Popular.js b/src/renderer/views/Popular/Popular.js
deleted file mode 100644
index 2a35f9d8c..000000000
--- a/src/renderer/views/Popular/Popular.js
+++ /dev/null
@@ -1,108 +0,0 @@
-import { defineComponent } from 'vue'
-import { mapMutations } from 'vuex'
-import FtLoader from '../../components/ft-loader/ft-loader.vue'
-import FtCard from '../../components/ft-card/ft-card.vue'
-import FtElementList from '../../components/FtElementList/FtElementList.vue'
-import FtIconButton from '../../components/ft-icon-button/ft-icon-button.vue'
-import FtRefreshWidget from '../../components/ft-refresh-widget/ft-refresh-widget.vue'
-
-import { invidiousAPICall } from '../../helpers/api/invidious'
-import { copyToClipboard, getRelativeTimeFromDate, setPublishedTimestampsInvidious, showToast } from '../../helpers/utils'
-
-export default defineComponent({
- name: 'Popular',
- components: {
- 'ft-loader': FtLoader,
- 'ft-card': FtCard,
- 'ft-element-list': FtElementList,
- 'ft-icon-button': FtIconButton,
- 'ft-refresh-widget': FtRefreshWidget,
- },
- data: function () {
- return {
- isLoading: false,
- shownResults: []
- }
- },
- computed: {
- lastPopularRefreshTimestamp: function () {
- return getRelativeTimeFromDate(this.$store.getters.getLastPopularRefreshTimestamp, true)
- },
- popularCache: function () {
- return this.$store.getters.getPopularCache
- }
- },
- mounted: function () {
- document.addEventListener('keydown', this.keyboardShortcutHandler)
-
- this.shownResults = this.popularCache || []
- if (!this.shownResults || this.shownResults.length < 1) {
- this.fetchPopularInfo()
- }
- },
- beforeDestroy: function () {
- document.removeEventListener('keydown', this.keyboardShortcutHandler)
- },
- methods: {
- fetchPopularInfo: async function () {
- const searchPayload = {
- resource: 'popular',
- id: '',
- params: {}
- }
-
- this.isLoading = true
- const result = await invidiousAPICall(searchPayload)
- .catch((err) => {
- const errorMessage = this.$t('Invidious API Error (Click to copy)')
- showToast(`${errorMessage}: ${err}`, 10000, () => {
- copyToClipboard(err)
- })
- return undefined
- })
-
- if (!result) {
- this.isLoading = false
- return
- }
-
- const items = result.filter((item) => {
- return item.type === 'video' || item.type === 'shortVideo' || item.type === 'channel' || item.type === 'playlist'
- })
- setPublishedTimestampsInvidious(items.filter(item => item.type === 'video' || item.type === 'shortVideo'))
- this.setLastPopularRefreshTimestamp(new Date())
-
- this.shownResults = items
-
- this.isLoading = false
- this.$store.commit('setPopularCache', items)
- },
-
- /**
- * This function `keyboardShortcutHandler` should always be at the bottom of this file
- * @param {KeyboardEvent} event the keyboard event
- */
- keyboardShortcutHandler: function (event) {
- if (event.ctrlKey || document.activeElement.classList.contains('ft-input')) {
- return
- }
- // Avoid handling events due to user holding a key (not released)
- // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat
- if (event.repeat) { return }
-
- switch (event.key) {
- case 'r':
- case 'R':
- case 'F5':
- if (!this.isLoading) {
- this.fetchPopularInfo()
- }
- break
- }
- },
-
- ...mapMutations([
- 'setLastPopularRefreshTimestamp'
- ])
- }
-})
diff --git a/src/renderer/views/Popular/Popular.vue b/src/renderer/views/Popular/Popular.vue
index c3f001f34..66cdecfaf 100644
--- a/src/renderer/views/Popular/Popular.vue
+++ b/src/renderer/views/Popular/Popular.vue
@@ -22,5 +22,101 @@
-
+