mirror of
https://github.com/nextcloud/server.git
synced 2026-10-29 16:15:46 +01:00
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
1 line
32 KiB
Plaintext
1 line
32 KiB
Plaintext
{"version":3,"mappings":"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","names":["queue","PQueue","props","__props","isError","ref","isLoading","watchEffect","image","promise","resolve","_createElementBlock","_normalizeClass","$style","_createBlock","_unref","NcIconSvgWrapper","mdiCogOutline","NcLoadingIcon","userSettingsStore","useUserSettingsStore","route","useRoute","routeToDetails","computed","_createVNode","_component_RouterLink","AppImage","_createElementVNode","_toDisplayString","BadgeAppScore","BadgeAppLevel","BadgeAppDaemon","userSettings","gridSize","_Fragment","_renderList","app","AppGridItem","router","useRouter","watch","enabled","newSize","showIncompatible","NcActions","t","mdiFilterVariant","NcActionButtonGroup","NcActionButton","_cache","$event","mdiSizeS","mdiSizeM","mdiSizeL","NcActionCheckbox","NcButton","mdiViewGrid","useFilteredApps","apps","store","query","toValue","needle","UpdateAllDialog","defineAsyncComponent","__vitePreload","UpdateAllDialog$1","useAppsStore","updatesStore","useUpdatesStore","currentCategory","visibleApps","onUpdateAll","spawnDialog","AppToolbar","mdiUpdate","_createTextVNode","NcEmptyContent","_openBlock","_resolveDynamicComponent","AppGrid","AppTable","$router","$route","search","newQuery","watchDebounced","newValue","NcInputField","emit","__emit","showDetails","isUpdating","changelogText","release","getLanguage","onUpdate","error","logger","showError","NcDialog","mdiCheck","mdiWeb","mdiInformationOutline","NcNoteCard","MarkdownPreview"],"ignoreList":[],"sources":["../build/frontend/apps/appstore/src/components/AppImage.vue","../build/frontend/apps/appstore/src/components/AppGrid/AppGridItem.vue","../build/frontend/apps/appstore/src/components/AppGrid/AppGrid.vue","../build/frontend/apps/appstore/src/components/AppToolbar.vue","../build/frontend/apps/appstore/src/composables/useFilteredApps.ts","../build/frontend/apps/appstore/src/views/AppstoreManage.vue","../build/frontend/apps/appstore/src/views/AppstoreSearch.vue","../build/frontend/apps/appstore/src/components/UpdateAllDialog.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport type { IAppstoreApp, IAppstoreExApp } from '../apps.d.ts'\n\nimport { mdiCogOutline } from '@mdi/js'\nimport { NcLoadingIcon } from '@nextcloud/vue'\nimport PQueue from 'p-queue'\nimport { ref, watchEffect } from 'vue'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\n\nconst props = defineProps<{\n\tapp: IAppstoreApp | IAppstoreExApp\n}>()\n\nconst isError = ref(false)\nconst isLoading = ref(true)\nwatchEffect(() => {\n\tif (props.app.screenshot) {\n\t\tisError.value = false\n\t\tisLoading.value = true\n\t\tqueue.add(() => {\n\t\t\tconst image = new Image()\n\t\t\tconst { promise, resolve } = Promise.withResolvers<void>()\n\t\t\timage.onload = () => {\n\t\t\t\tisLoading.value = false\n\t\t\t\tresolve()\n\t\t\t}\n\t\t\timage.onerror = () => {\n\t\t\t\tisError.value = true\n\t\t\t\tisLoading.value = false\n\t\t\t\tresolve()\n\t\t\t}\n\t\t\timage.src = props.app.screenshot!\n\t\t\treturn promise\n\t\t})\n\t} else {\n\t\tisLoading.value = false\n\t\tisError.value = false\n\t}\n})\n</script>\n\n<script lang=\"ts\">\nconst queue = new PQueue({ concurrency: 4 })\n</script>\n\n<template>\n\t<div :class=\"$style.appImage\">\n\t\t<NcIconSvgWrapper\n\t\t\tv-if=\"isError || !props.app.screenshot\"\n\t\t\t:size=\"80\"\n\t\t\t:path=\"mdiCogOutline\" />\n\n\t\t<NcLoadingIcon v-else-if=\"isLoading\" :size=\"80\" />\n\n\t\t<img\n\t\t\tv-else\n\t\t\t:class=\"$style.appImage__image\"\n\t\t\t:src=\"props.app.screenshot\"\n\t\t\talt=\"\">\n\t</div>\n</template>\n\n<style module>\n.appImage {\n\tdisplay: flex;\n\tjustify-content: center;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.appImage__image {\n\tobject-fit: cover;\n\theight: 100%;\n\twidth: 100%;\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport type { IAppstoreApp, IAppstoreExApp } from '../../apps.d.ts'\n\nimport { computed } from 'vue'\nimport { useRoute } from 'vue-router'\nimport AppImage from '../AppImage.vue'\nimport BadgeAppDaemon from '../BadgeAppDaemon.vue'\nimport BadgeAppLevel from '../BadgeAppLevel.vue'\nimport BadgeAppScore from '../BadgeAppScore.vue'\nimport { useUserSettingsStore } from '../../store/userSettings.ts'\n\nconst { app } = defineProps<{\n\tapp: IAppstoreApp | IAppstoreExApp\n}>()\n\nconst userSettingsStore = useUserSettingsStore()\nconst route = useRoute()\nconst routeToDetails = computed(() => ({\n\t...route,\n\tparams: {\n\t\t...route.params,\n\t\tid: app.id,\n\t},\n\tquery: userSettingsStore.getQuery(),\n}))\n</script>\n\n<template>\n\t<li :class=\"$style.appGridItem\">\n\t\t<RouterLink :to=\"routeToDetails\">\n\t\t\t<AppImage :app :class=\"$style.appGridItem__image\" />\n\t\t\t<div :class=\"$style.appGridItem__content\">\n\t\t\t\t<h3 :class=\"$style.appGridItem__name\">\n\t\t\t\t\t{{ app.name }}\n\t\t\t\t</h3>\n\t\t\t\t<p>{{ app.summary }}</p>\n\t\t\t</div>\n\t\t</RouterLink>\n\t\t<div :class=\"$style.appGridItem__badges\">\n\t\t\t<BadgeAppScore :app />\n\t\t\t<BadgeAppLevel :level=\"app.level\" />\n\t\t\t<BadgeAppDaemon v-if=\"app.app_api && app.daemon\" :daemon=\"app.daemon\" />\n\t\t</div>\n\t</li>\n</template>\n\n<style module>\n.appGridItem {\n\tbackground-color: var(--color-primary-element-light);\n\tcolor: var(--color-primary-element-light-text);\n\tborder-radius: var(--border-radius-element);\n\tpadding-block-end: var(--border-radius-element);;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: space-between;\n\tgap: var(--default-grid-baseline);\n\n\t&:hover {\n\t\tbackground-color: var(--color-primary-element-light-hover);\n\t}\n}\n\n.appGridItem__content {\n\tpadding-inline: var(--border-radius-element);\n}\n\n.appGridItem__image {\n\taspect-ratio: 16 / 9;\n\theight: min-content;\n\tborder-start-start-radius: var(--border-radius-element);\n\tborder-start-end-radius: var(--border-radius-element);\n\toverflow: hidden;\n}\n\n.appGridItem__name {\n\tfont-size: 1.2em;\n\tfont-weight: var(--font-weight-heading, bold);\n\tmargin-block: var(--default-grid-baseline) calc(2 * var(--default-grid-baseline));\n}\n\n.appGridItem__badges {\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: var(--default-grid-baseline);\n\tpadding-inline: var(--border-radius-element);\n\twidth: 100%;\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport type { IAppstoreApp, IAppstoreExApp } from '../../apps.d.ts'\n\nimport { computed } from 'vue'\nimport AppGridItem from './AppGridItem.vue'\nimport { useUserSettingsStore } from '../../store/userSettings.ts'\n\ndefineProps<{\n\tapps: (IAppstoreApp | IAppstoreExApp)[]\n}>()\n\nconst userSettings = useUserSettingsStore()\nconst gridSize = computed(() => userSettings.gridSizePx)\n</script>\n\n<template>\n\t<ul :class=\"$style.appGrid\">\n\t\t<AppGridItem\n\t\t\tv-for=\"app in apps\"\n\t\t\t:key=\"app.id\"\n\t\t\t:app />\n\t</ul>\n</template>\n\n<style module>\n.appGrid {\n\twidth: 100%;\n\tdisplay: grid;\n\tgap: calc(4 * var(--default-grid-baseline));\n\tgrid-template-columns: repeat(auto-fit, minmax(v-bind(gridSize), 1fr));\n\tpadding-inline-start: var(--app-navigation-padding);\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport { mdiFilterVariant, mdiSizeL, mdiSizeM, mdiSizeS, mdiViewGrid } from '@mdi/js'\nimport { t } from '@nextcloud/l10n'\nimport { watch } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport NcActionButton from '@nextcloud/vue/components/NcActionButton'\nimport NcActionButtonGroup from '@nextcloud/vue/components/NcActionButtonGroup'\nimport NcActionCheckbox from '@nextcloud/vue/components/NcActionCheckbox'\nimport NcActions from '@nextcloud/vue/components/NcActions'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport { useUserSettingsStore } from '../store/userSettings.ts'\n\nconst route = useRoute()\nconst router = useRouter()\nconst userSettingsStore = useUserSettingsStore()\n\nwatch(() => userSettingsStore.isGridView, (enabled: boolean) => {\n\trouter.replace({\n\t\t...route,\n\t\tquery: {\n\t\t\t...route.query,\n\t\t\tgrid: enabled ? null : undefined,\n\t\t},\n\t})\n})\n\nwatch(() => userSettingsStore.defaultGridSize, (newSize) => {\n\tif (userSettingsStore.isGridView) {\n\t\trouter.replace({\n\t\t\t...route,\n\t\t\tquery: {\n\t\t\t\t...route.query,\n\t\t\t\tgrid: newSize || null,\n\t\t\t},\n\t\t})\n\t}\n})\n\nwatch(() => userSettingsStore.showIncompatible, (showIncompatible) => {\n\tif (showIncompatible) {\n\t\trouter.replace({\n\t\t\t...route,\n\t\t\tquery: {\n\t\t\t\t...route.query,\n\t\t\t\tcompatible: undefined,\n\t\t\t},\n\t\t})\n\t} else {\n\t\trouter.replace({\n\t\t\t...route,\n\t\t\tquery: {\n\t\t\t\t...route.query,\n\t\t\t\tcompatible: null,\n\t\t\t},\n\t\t})\n\t}\n})\n</script>\n\n<template>\n\t<div :class=\"$style.appToolbar\">\n\t\t<NcActions :class=\"$style.appToolbar__filterButton\" :aria-label=\"t('appstore', 'Filter view')\" forceMenu>\n\t\t\t<template #icon>\n\t\t\t\t<NcIconSvgWrapper :path=\"mdiFilterVariant\" />\n\t\t\t</template>\n\t\t\t<NcActionButtonGroup v-if=\"userSettingsStore.isGridView\" :name=\"t('appstore', 'Grid size')\">\n\t\t\t\t<NcActionButton\n\t\t\t\t\t:aria-label=\"t('appstore', 'Small grid size')\"\n\t\t\t\t\t:modelValue=\"userSettingsStore.defaultGridSize === ''\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tvalue=\"\"\n\t\t\t\t\t@update:modelValue=\"userSettingsStore.defaultGridSize = ''\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiSizeS\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcActionButton>\n\t\t\t\t<NcActionButton\n\t\t\t\t\t:aria-label=\"t('appstore', 'Medium grid size')\"\n\t\t\t\t\t:modelValue=\"userSettingsStore.defaultGridSize === 'm'\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tvalue=\"m\"\n\t\t\t\t\t@update:modelValue=\"userSettingsStore.defaultGridSize = 'm'\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiSizeM\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcActionButton>\n\t\t\t\t<NcActionButton\n\t\t\t\t\t:aria-label=\"t('appstore', 'Large grid size')\"\n\t\t\t\t\t:modelValue=\"userSettingsStore.defaultGridSize === 'l'\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tvalue=\"l\"\n\t\t\t\t\t@update:modelValue=\"userSettingsStore.defaultGridSize = 'l'\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiSizeL\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcActionButton>\n\t\t\t</NcActionButtonGroup>\n\n\t\t\t<NcActionCheckbox v-model=\"userSettingsStore.showIncompatible\">\n\t\t\t\t{{ t('appstore', 'Show incompatible') }}\n\t\t\t</NcActionCheckbox>\n\t\t</NcActions>\n\n\t\t<NcButton\n\t\t\tv-model:pressed=\"userSettingsStore.isGridView\"\n\t\t\t:aria-label=\"t('appstore', 'Grid view')\"\n\t\t\tvariant=\"tertiary\">\n\t\t\t<template #icon>\n\t\t\t\t<NcIconSvgWrapper :path=\"mdiViewGrid\" />\n\t\t\t</template>\n\t\t</NcButton>\n\t</div>\n</template>\n\n<style module>\n.appToolbar {\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: calc(2 * var(--default-grid-baseline));\n\tposition: absolute;\n\tinset-block-start: var(--app-navigation-padding);\n\tinset-inline-end: var(--app-sidebar-padding);\n\n\tz-index: 999;\n\n\tbutton:not([aria-pressed=\"true\"]):not(:hover) {\n\t\tbackground-color: var(--color-main-background) !important;\n\t}\n}\n</style>\n","/*!\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n */\n\nimport type { MaybeRefOrGetter } from 'vue'\nimport type { IAppstoreApp, IAppstoreExApp } from '../apps.d.ts'\n\nimport { computed, toValue } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { useUserSettingsStore } from '../store/userSettings.ts'\n\n/**\n * Get the filtered list of apps based on the user settings\n *\n * @param apps - The apps to filter\n */\nexport function useFilteredApps(apps: MaybeRefOrGetter<(IAppstoreApp | IAppstoreExApp)[]>) {\n\tconst store = useUserSettingsStore()\n\tconst route = useRoute()\n\treturn computed(() => {\n\t\tconst query = [route.query.q || ''].flat()[0]!\n\t\treturn toValue(apps)\n\t\t\t.filter((app) => {\n\t\t\t\tif (!store.showIncompatible && app.isCompatible === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (query) {\n\t\t\t\t\tconst needle = query.trim().toLocaleLowerCase()\n\t\t\t\t\treturn app.name.toLocaleLowerCase().includes(needle)\n\t\t\t\t\t\t|| app.id.toLocaleLowerCase().includes(needle)\n\t\t\t\t\t\t|| app.summary.toLocaleLowerCase().includes(needle)\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t})\n}\n","<!--\n - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport { mdiUpdate } from '@mdi/js'\nimport { t } from '@nextcloud/l10n'\nimport { NcIconSvgWrapper, spawnDialog } from '@nextcloud/vue'\nimport { computed, defineAsyncComponent } from 'vue'\nimport { useRoute } from 'vue-router'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport AppGrid from '../components/AppGrid/AppGrid.vue'\nimport AppTable from '../components/AppTable/AppTable.vue'\nimport AppToolbar from '../components/AppToolbar.vue'\nimport { useFilteredApps } from '../composables/useFilteredApps.ts'\nimport { useAppsStore } from '../store/apps.ts'\nimport { useUpdatesStore } from '../store/updates.ts'\nimport { useUserSettingsStore } from '../store/userSettings.ts'\n\nconst UpdateAllDialog = defineAsyncComponent(() => import('../components/UpdateAllDialog.vue'))\n\nconst route = useRoute()\nconst store = useAppsStore()\nconst updatesStore = useUpdatesStore()\nconst userSettings = useUserSettingsStore()\n\nconst currentCategory = computed(() => route.params!.category as 'enabled' | 'installed' | 'disabled' | 'updates')\nconst apps = computed(() => {\n\tif (currentCategory.value === 'installed') {\n\t\treturn store.apps.filter((app) => app.installed)\n\t} else if (currentCategory.value === 'enabled') {\n\t\treturn store.apps.filter((app) => app.active)\n\t} else if (currentCategory.value === 'disabled') {\n\t\treturn store.apps.filter((app) => app.installed && !app.active)\n\t} else if (currentCategory.value === 'updates') {\n\t\treturn store.apps.filter((app) => app.active && app.update)\n\t}\n\treturn []\n})\nconst visibleApps = useFilteredApps(apps)\n\n/**\n * Handle update all apps\n */\nasync function onUpdateAll() {\n\tawait spawnDialog(UpdateAllDialog, {\n\t\tapps: visibleApps.value,\n\t})\n}\n</script>\n\n<template>\n\t<AppToolbar />\n\n\t<NcButton\n\t\tv-if=\"currentCategory === 'updates' && updatesStore.updateCount > 0\"\n\t\t:class=\"$style.appstoreManage__updateAllButton\"\n\t\tvariant=\"primary\"\n\t\t@click=\"onUpdateAll\">\n\t\t<template #icon>\n\t\t\t<NcIconSvgWrapper :path=\"mdiUpdate\" />\n\t\t</template>\n\t\t{{ t('appstore', 'Update all applications') }}\n\t</NcButton>\n\n\t<!-- Apps list -->\n\t<NcEmptyContent\n\t\tv-if=\"store.isLoadingApps\"\n\t\t:name=\"t('appstore', 'Loading app list')\">\n\t\t<template #icon>\n\t\t\t<NcLoadingIcon :size=\"64\" />\n\t\t</template>\n\t</NcEmptyContent>\n\n\t<component\n\t\t:is=\"userSettings.isGridView ? AppGrid : AppTable\"\n\t\tv-else-if=\"visibleApps.length\"\n\t\t:class=\"$style.appstoreManage\"\n\t\t:apps=\"visibleApps\" />\n\t<NcEmptyContent\n\t\tv-else\n\t\t:name=\"t('appstore', 'No matching apps found')\">\n\t\t<template #action>\n\t\t\t<NcButton variant=\"primary\" @click=\"$router.push({ query: $route.query, name: 'apps-search' })\">\n\t\t\t\t{{ t('appstore', 'Search everywhere') }}\n\t\t\t</NcButton>\n\t\t</template>\n\t</NcEmptyContent>\n</template>\n\n<style module>\n.appstoreManage {\n\tmargin-bottom: var(--body-container-margin);\n}\n\n.appstoreManage__updateAllButton {\n\tmargin-inline: var(--app-navigation-padding);\n\tmargin-block: calc(3 * var(--default-grid-baseline));\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport { t } from '@nextcloud/l10n'\nimport { watchDebounced } from '@vueuse/core'\nimport { ref, watch } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'\nimport NcInputField from '@nextcloud/vue/components/NcInputField'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport AppGrid from '../components/AppGrid/AppGrid.vue'\nimport AppTable from '../components/AppTable/AppTable.vue'\nimport AppToolbar from '../components/AppToolbar.vue'\nimport { useFilteredApps } from '../composables/useFilteredApps.ts'\nimport { useAppsStore } from '../store/apps.ts'\nimport { useUserSettingsStore } from '../store/userSettings.ts'\n\nconst route = useRoute()\nconst router = useRouter()\nconst store = useAppsStore()\nconst userSettings = useUserSettingsStore()\n\nconst visibleApps = useFilteredApps(() => store.apps)\nconst search = ref('')\n\nwatch(() => route.query.q, (newQuery) => {\n\tsearch.value = [newQuery || ''].flat()[0]!\n}, { immediate: true })\n\nwatchDebounced(search, (newValue) => {\n\trouter.replace({\n\t\t...route,\n\t\tquery: {\n\t\t\t...route.query,\n\t\t\tq: newValue.trim(),\n\t\t},\n\t})\n}, { debounce: 500 })\n</script>\n\n<template>\n\t<AppToolbar />\n\n\t<!-- Apps list -->\n\t<NcEmptyContent\n\t\tv-if=\"store.isLoadingApps\"\n\t\t:name=\"t('appstore', 'Loading app list')\">\n\t\t<template #icon>\n\t\t\t<NcLoadingIcon :size=\"64\" />\n\t\t</template>\n\t</NcEmptyContent>\n\n\t<component\n\t\t:is=\"userSettings.isGridView ? AppGrid : AppTable\"\n\t\tv-else-if=\"visibleApps.length && search.trim().length > 2\"\n\t\t:class=\"$style.appstoreSearch\"\n\t\t:apps=\"visibleApps\" />\n\t<NcEmptyContent\n\t\tv-else\n\t\t:name=\"t('appstore', 'No matching apps found')\"\n\t\t:description=\"search.trim().length <= 2 ? t('appstore', 'Please enter more characters to search.') : undefined\">\n\t\t<template #action>\n\t\t\t<NcInputField v-model=\"search\" type=\"search\" :label=\"t('appstore', 'Search apps')\" />\n\t\t</template>\n\t</NcEmptyContent>\n</template>\n\n<style module>\n.appstoreSearch {\n\tmargin-bottom: var(--body-container-margin);\n}\n</style>\n","<!--\n SPDX-License-Identifier: AGPL-3.0-or-later\n SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n-->\n\n<script setup lang=\"ts\">\nimport type { IAppstoreApp, IAppstoreExApp } from '../apps.d.ts'\n\nimport { mdiCheck, mdiInformationOutline, mdiUpdate, mdiWeb } from '@mdi/js'\nimport { showError } from '@nextcloud/dialogs'\nimport { getLanguage, t } from '@nextcloud/l10n'\nimport { NcButton, NcDialog, NcIconSvgWrapper, NcLoadingIcon, NcNoteCard } from '@nextcloud/vue'\nimport { computed, ref } from 'vue'\nimport MarkdownPreview from './MarkdownPreview.vue'\nimport { useUpdatesStore } from '../store/updates.ts'\nimport logger from '../utils/logger.ts'\n\nconst props = defineProps<{\n\tapps: (IAppstoreApp | IAppstoreExApp)[]\n}>()\n\nconst emit = defineEmits<{\n\tclose: []\n}>()\n\nconst store = useUpdatesStore()\nconst showDetails = ref('')\nconst isUpdating = ref(false)\n\nconst changelogText = computed(() => {\n\tif (!showDetails.value) {\n\t\treturn ''\n\t}\n\n\tconst app = props.apps.find((app) => app.id === showDetails.value)\n\tif (!app || !app.releases || app.releases.length === 0) {\n\t\treturn ''\n\t}\n\n\tconst [release] = app.releases\n\tconst localizedEntry = release.translations[getLanguage()]\n\treturn localizedEntry?.changelog ?? release.translations.en?.changelog ?? ''\n})\n\n/**\n * Handle update all apps\n */\nasync function onUpdate() {\n\tisUpdating.value = true\n\tfor (const app of props.apps) {\n\t\ttry {\n\t\t\tawait store.updateApp(app.id)\n\t\t} catch (error) {\n\t\t\tlogger.error(`Failed to update app ${app.id}`, { error })\n\t\t\tshowError(t('appstore', 'Failed to update app {appName}', { appName: app.name }))\n\t\t}\n\t}\n\tisUpdating.value = false\n\temit('close')\n}\n</script>\n\n<template>\n\t<NcDialog :contentClasses=\"$style.updateAllDialog\" size=\"normal\" :name=\"t('appstore', 'Update all apps')\">\n\t\t<p>{{ t('appstore', 'Are you sure you want to update all apps?') }}</p>\n\t\t<ul>\n\t\t\t<li v-for=\"app in apps\" :key=\"app.id\" :class=\"$style.updateAllDialog__listEntry\">\n\t\t\t\t<div :class=\"$style.updateAllDialog__listEntryContent\">\n\t\t\t\t\t<div :class=\"$style.updateAllDialog__listEntryHeading\">\n\t\t\t\t\t\t<NcIconSvgWrapper\n\t\t\t\t\t\t\t:path=\"app.update ? mdiUpdate : mdiCheck\"\n\t\t\t\t\t\t\t:name=\"app.update ? undefined : t('appstore', 'Update done')\" />\n\t\t\t\t\t\t<span :class=\"$style.updateAllDialog__listEntryName\">{{ app.name }} ({{ app.version }} → {{ app.update }})</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div :class=\"$style.updateAllDialog__listEntryActions\">\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\tv-if=\"app.website\"\n\t\t\t\t\t\t\t:aria-label=\"t('appstore', 'View website')\"\n\t\t\t\t\t\t\t:title=\"t('appstore', 'View website')\"\n\t\t\t\t\t\t\t:href=\"app.website\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\tvariant=\"tertiary\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiWeb\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\tv-if=\"app.releases\"\n\t\t\t\t\t\t\t:aria-label=\"t('appstore', 'Show details')\"\n\t\t\t\t\t\t\t:title=\"t('appstore', 'Show details')\"\n\t\t\t\t\t\t\t:pressed=\"showDetails === app.id\"\n\t\t\t\t\t\t\t@update:pressed=\"showDetails = $event ? app.id : ''\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiInformationOutline\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<NcNoteCard\n\t\t\t:class=\"$style.updateAllDialog__listEntryDetails\"\n\t\t\t:heading=\"t('appstore', 'Details')\"\n\t\t\ttype=\"info\">\n\t\t\t<MarkdownPreview\n\t\t\t\t:minHeadingLevel=\"3\"\n\t\t\t\t:text=\"changelogText\" />\n\t\t</NcNoteCard>\n\n\t\t<template #actions>\n\t\t\t<NcButton variant=\"tertiary\" @click=\"emit('close')\">\n\t\t\t\t{{ t('appstore', 'Cancel') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton variant=\"primary\" @click=\"onUpdate\">\n\t\t\t\t<template v-if=\"isUpdating\" #icon>\n\t\t\t\t\t<NcLoadingIcon />\n\t\t\t\t</template>\n\t\t\t\t{{ t('appstore', 'Update all') }}\n\t\t\t</NcButton>\n\t\t</template>\n\t</NcDialog>\n</template>\n\n<style module>\n.updateAllDialog {\n\tmin-height: 50vh !important;\n}\n\n.updateAllDialog__list {\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: calc(3 * var(--default-grid-baseline));\n}\n\n.updateAllDialog__listEntry {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: calc(2 * var(--default-grid-baseline));\n\tpadding: calc(2 * var(--default-grid-baseline));\n}\n\n.updateAllDialog__listEntryHeading {\n\tdisplay: flex;\n}\n\n.updateAllDialog__listEntryName {\n\tfont-weight: 500;\n\tline-height: var(--default-clickable-area);\n}\n\n.updateAllDialog__listEntryActions {\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: var(--default-grid-baseline);\n}\n\n.updateAllDialog__listEntryContent {\n\tdisplay: flex;\n\tjustify-content: space-between;\n}\n\n.updateAllDialog__listEntryDetails {\n\tmargin: 0;\n}\n</style>\n"],"file":"UpdateAllDialog-DdB4mxR2.chunk.mjs"} |