|
1 | 1 | <template> |
2 | | - <DropdownButton> |
| 2 | + <DropdownButton v-if="filesizes"> |
3 | 3 | <template #default="{ buttonProps }"> |
4 | 4 | <a |
5 | 5 | v-bind="buttonProps" |
|
12 | 12 | {{ selectedFormat.extension_name }} |
13 | 13 | </span> |
14 | 14 | <span class="ml-1 font-thin">{{ |
15 | | - getFormatSize(selectedFormat.filesize) |
| 15 | + getFormatSize(selectedFormat.extension_name) |
16 | 16 | }}</span> |
17 | 17 | </a> |
18 | 18 | </template> |
|
45 | 45 | @keydown="onItemKeydown" |
46 | 46 | > |
47 | 47 | <span class="font-bold mr-2">{{ format.extension_name }}</span> |
48 | | - <span>{{ getFormatSize(format.filesize) }}</span> |
| 48 | + <span>{{ getFormatSize(format.extension_name) }}</span> |
49 | 49 | </button> |
50 | 50 | </li> |
51 | 51 | </ul> |
|
55 | 55 |
|
56 | 56 | <script> |
57 | 57 | import filesize from 'filesize' |
| 58 | +import axios from 'axios' |
58 | 59 |
|
59 | 60 | const LS_DOWNLOAD_FORMAT_EXTENSION_KEY = 'openverse:download-format-extension' |
60 | 61 |
|
@@ -83,10 +84,33 @@ export default { |
83 | 84 | } |
84 | 85 | } |
85 | 86 |
|
86 | | - return { selectedFormat: format } |
| 87 | + return { selectedFormat: format, filesizes: null } |
| 88 | + }, |
| 89 | + async fetch() { |
| 90 | + const extensionsToFilesizes = await Promise.all( |
| 91 | + this.formats.map(async (format) => { |
| 92 | + try { |
| 93 | + const response = await axios.head(format.download_url) |
| 94 | + return [format.extension_name, response.headers['content-length']] |
| 95 | + } catch (e) { |
| 96 | + return [format.extension_name, undefined] |
| 97 | + } |
| 98 | + }) |
| 99 | + ) |
| 100 | +
|
| 101 | + this.filesizes = extensionsToFilesizes.reduce( |
| 102 | + (acc, [extensionName, filesize]) => ({ |
| 103 | + ...acc, |
| 104 | + [extensionName]: filesize, |
| 105 | + }), |
| 106 | + {} |
| 107 | + ) |
87 | 108 | }, |
88 | 109 | methods: { |
89 | | - getFormatSize(size) { |
| 110 | + getFormatSize(extensionName) { |
| 111 | + const size = this.filesizes?.[extensionName] ?? undefined |
| 112 | + if (typeof size === 'undefined') return '' |
| 113 | +
|
90 | 114 | return filesize(size, { locale: this.$i18n.locale }) |
91 | 115 | }, |
92 | 116 | setSelectedFormat(format) { |
|
0 commit comments