From 62d20fde56e2cef9e9f0ff74dfda068afc9d4d2d Mon Sep 17 00:00:00 2001 From: Olga Bulat Date: Fri, 8 Oct 2021 18:00:00 +0300 Subject: [PATCH] Add ImageGrid component and use it for RelatedImages (#281) * Extract ImageGrid component from SearchGridManualLoad * Use ImageGrid for RelatedImages * Remove RelatedImages fetching from PhotoDetailPage * Replace Vuex related store with a composable and use in audio * Replace related store with useRelated in images * Apply changes from code review * Add type annotations to RelatedImages * Apply suggestions from code review Co-authored-by: Krystle Salazar Co-authored-by: Zack Krida * Update i18n files * Use testing-library in ImageGrid and RelatedImages tests * Use static props for testing * Add comment about using testing-library with Nuxt Co-authored-by: Krystle Salazar Co-authored-by: Zack Krida --- nuxt.config.js | 1 + src/components/AudioDetails/Related.vue | 52 +++- src/components/ImageDetails/RelatedImages.vue | 57 +++++ src/components/ImageGrid/ImageCell.vue | 223 ++++++++++++++++++ src/components/ImageGrid/ImageGrid.vue | 95 ++++++++ src/components/ImageGrid/LoadMoreButton.vue | 82 +++++++ src/components/RelatedImages.vue | 33 --- src/composables/use-related.js | 26 ++ src/locales/en.json | 3 +- src/locales/po-files/openverse.pot | 9 +- src/locales/scripts/valid-locales.json | 7 + src/pages/audio/_id.vue | 36 +-- src/pages/photos/_id.vue | 70 ++---- src/store/related.js | 82 ------- test/unit/specs/components/image-grid.spec.js | 46 ++++ .../specs/components/related-audios.spec.js | 46 ++++ .../specs/components/related-images.spec.js | 66 +++++- .../specs/store/related-media-store.spec.js | 95 -------- 18 files changed, 715 insertions(+), 314 deletions(-) create mode 100644 src/components/ImageDetails/RelatedImages.vue create mode 100644 src/components/ImageGrid/ImageCell.vue create mode 100644 src/components/ImageGrid/ImageGrid.vue create mode 100644 src/components/ImageGrid/LoadMoreButton.vue delete mode 100644 src/components/RelatedImages.vue create mode 100644 src/composables/use-related.js delete mode 100644 src/store/related.js create mode 100644 test/unit/specs/components/image-grid.spec.js create mode 100644 test/unit/specs/components/related-audios.spec.js delete mode 100644 test/unit/specs/store/related-media-store.spec.js diff --git a/nuxt.config.js b/nuxt.config.js index 2181ccbdb9..88e79130c3 100644 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -130,6 +130,7 @@ export default { '~/components/ContentReport', '~/components/Filters', '~/components/ImageDetails', + '~/components/ImageGrid', '~/components/MediaInfo', '~/components/MetaSearch', '~/components/MediaTag', diff --git a/src/components/AudioDetails/Related.vue b/src/components/AudioDetails/Related.vue index b3c10dfdfb..b72d77ac82 100644 --- a/src/components/AudioDetails/Related.vue +++ b/src/components/AudioDetails/Related.vue @@ -3,22 +3,56 @@

{{ $t('audio-details.related-audios') }}

- + +

+ {{ $t('media-details.related-error') }} +

diff --git a/src/components/ImageDetails/RelatedImages.vue b/src/components/ImageDetails/RelatedImages.vue new file mode 100644 index 0000000000..b3daaaaf7e --- /dev/null +++ b/src/components/ImageDetails/RelatedImages.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/components/ImageGrid/ImageCell.vue b/src/components/ImageGrid/ImageCell.vue new file mode 100644 index 0000000000..635eda8748 --- /dev/null +++ b/src/components/ImageGrid/ImageCell.vue @@ -0,0 +1,223 @@ + + + + + + diff --git a/src/components/ImageGrid/ImageGrid.vue b/src/components/ImageGrid/ImageGrid.vue new file mode 100644 index 0000000000..f2dbd62482 --- /dev/null +++ b/src/components/ImageGrid/ImageGrid.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/components/ImageGrid/LoadMoreButton.vue b/src/components/ImageGrid/LoadMoreButton.vue new file mode 100644 index 0000000000..ee1bd7f120 --- /dev/null +++ b/src/components/ImageGrid/LoadMoreButton.vue @@ -0,0 +1,82 @@ + + + diff --git a/src/components/RelatedImages.vue b/src/components/RelatedImages.vue deleted file mode 100644 index ec27036d8d..0000000000 --- a/src/components/RelatedImages.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - diff --git a/src/composables/use-related.js b/src/composables/use-related.js new file mode 100644 index 0000000000..73e126d77e --- /dev/null +++ b/src/composables/use-related.js @@ -0,0 +1,26 @@ +import AudioService from '~/data/audio-service' +import ImageService from '~/data/image-service' +import { ref, useFetch } from '@nuxtjs/composition-api' +import { AUDIO, IMAGE } from '~/constants/media' + +const services = { [AUDIO]: AudioService, [IMAGE]: ImageService } + +export default function useRelated({ + mediaType, + mediaId, + service = services[mediaType], +}) { + const media = ref([]) + // fetch and fetchState are available as this.$fetch and this.$fetchState + // in components, so there's no need to export them, + // see https://composition-api.nuxtjs.org/lifecycle/usefetch/ + // eslint-disable-next-line no-unused-vars + const { fetch } = useFetch(async () => { + const response = await service.getRelatedMedia({ + id: mediaId.value, + }) + media.value = response.data.results + }) + fetch() + return { media } +} diff --git a/src/locales/en.json b/src/locales/en.json index 3a7d066367..6ca154124a 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -488,7 +488,8 @@ }, "provider-label": "Provider", "source-label": "Source", - "loading": "Loading..." + "loading": "Loading...", + "related-error": "Error fetching related media" }, "photo-details": { "back": "Back to search results", diff --git a/src/locales/po-files/openverse.pot b/src/locales/po-files/openverse.pot index cf5265ffa6..48d19784a7 100644 --- a/src/locales/po-files/openverse.pot +++ b/src/locales/po-files/openverse.pot @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: Openverse \n" "Report-Msgid-Bugs-To: https://github.com/wordpress/openverse/issues \n" -"POT-Creation-Date: 2021-10-05T11:03:37+00:00\n" +"POT-Creation-Date: 2021-10-06T12:05:17+00:00\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -948,7 +948,7 @@ msgid "An error occurred" msgstr "" #. Do not translate words between ### ###. -#: src/pages/photos/_id.vue:100 +#: src/pages/photos/_id.vue:66 msgctxt "error.image-not-found" msgid "Couldn't find image with id ###id###" msgstr "" @@ -1580,6 +1580,11 @@ msgctxt "feedback.loading" msgid "Loading..." msgstr "" +#: src/components/AudioDetails/Related.vue:51 +msgctxt "media-details.related-error" +msgid "Error fetching related media" +msgstr "" + #: src/components/ImageDetails/PhotoDetails.vue:12 msgctxt "photo-details.back" msgid "Back to search results" diff --git a/src/locales/scripts/valid-locales.json b/src/locales/scripts/valid-locales.json index 6b22b52005..d808b5ff43 100644 --- a/src/locales/scripts/valid-locales.json +++ b/src/locales/scripts/valid-locales.json @@ -20,6 +20,13 @@ "wpLocale": "en_AU", "file": "en-au.json" }, + { + "code": "en-ca", + "name": "English (Canada)", + "iso": "en", + "wpLocale": "en_CA", + "file": "en-ca.json" + }, { "code": "en-gb", "name": "English (UK)", diff --git a/src/pages/audio/_id.vue b/src/pages/audio/_id.vue index 7620b00d52..48055bd803 100644 --- a/src/pages/audio/_id.vue +++ b/src/pages/audio/_id.vue @@ -15,21 +15,16 @@ class="my-16 px-4 desk:px-0" /> -

{{ $t('media-details.loading') }}