f7cloud_client/apps/photos/js/UnassignedFaces-BGIdLg8P.chunk.mjs.map
root 8b6a0139db f7cloud_client
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 22:59:26 +00:00

1 line
9.6 KiB
Plaintext

{"version":3,"file":"UnassignedFaces-BGIdLg8P.chunk.mjs","sources":["../src/views/UnassignedFaces.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<!-- Errors handlers-->\n\t<NcEmptyContent v-if=\"errorFetchingFiles\">\n\t\t<template #icon>\n\t\t\t<AlertCircleOutline />\n\t\t</template>\n\t\t{{ t('photos', 'An error occurred') }}\n\t</NcEmptyContent>\n\n\t<div v-else class=\"face\">\n\t\t<div class=\"face__header\">\n\t\t\t<div class=\"face__header__left\">\n\t\t\t\t<NcActions>\n\t\t\t\t\t<NcActionButton @click=\"$router.push('/faces/')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<ArrowLeft />\n\t\t\t\t\t\t</template>{{ t('photos', 'Back') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\t\t\t\t<div class=\"face__header__title\">\n\t\t\t\t\t<h2 :class=\"{ 'face-name': true }\">\n\t\t\t\t\t\t{{ t('photos', 'Unassigned faces') }}\n\t\t\t\t\t</h2>\n\t\t\t\t</div>\n\n\t\t\t\t<NcLoadingIcon v-if=\"loadingCount > 0 || loadingFaces\" />\n\t\t\t</div>\n\t\t\t<div class=\"face__header__actions\">\n\t\t\t\t<NcActions :force-menu=\"true\">\n\t\t\t\t\t<template v-if=\"selectedFileIds.length\">\n\t\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t\t:aria-label=\"t('photos', 'Download selected files')\"\n\t\t\t\t\t\t\t@click=\"downloadSelection\">\n\t\t\t\t\t\t\t<DownloadOutline slot=\"icon\" />\n\t\t\t\t\t\t\t{{ t('photos', 'Download selected photos') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\t\tv-if=\"shouldFavoriteSelection\"\n\t\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t\t:aria-label=\"t('photos', 'Mark selection as favorite')\"\n\t\t\t\t\t\t\t@click=\"favoriteSelection\">\n\t\t\t\t\t\t\t<StarOutline slot=\"icon\" />\n\t\t\t\t\t\t\t{{ t('photos', 'Favorite') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t\t:aria-label=\"t('photos', 'Remove selection from favorites')\"\n\t\t\t\t\t\t\t@click=\"unFavoriteSelection\">\n\t\t\t\t\t\t\t<Star slot=\"icon\" />\n\t\t\t\t\t\t\t{{ t('photos', 'Remove from favorites') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t\t@click=\"showMoveModal = true\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<AccountSwitchOutline />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ n('photos', 'Move photo to a different person', 'Move photos to a different person', selectedFileIds.length) }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\t\t\t\t</NcActions>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<FilesListViewer\n\t\t\tclass=\"face__photos\"\n\t\t\t:container-element=\"appContent\"\n\t\t\t:file-ids=\"faceFileIds\"\n\t\t\t:loading=\"loadingFiles || loadingFaces\">\n\t\t\t<FileComponent\n\t\t\t\tslot-scope=\"{ file, distance }\"\n\t\t\t\t:file=\"files[file.id]\"\n\t\t\t\t:allow-selection=\"true\"\n\t\t\t\t:selected=\"selection[file.id] === true\"\n\t\t\t\t:distance=\"distance\"\n\t\t\t\t@click=\"openViewer\"\n\t\t\t\t@select-toggled=\"onFileSelectToggle\" />\n\t\t</FilesListViewer>\n\n\t\t<NcDialog\n\t\t\tv-if=\"showMoveModal\"\n\t\t\t:name=\"t('photos', 'Move to different person')\"\n\t\t\tclose-on-click-outside\n\t\t\tsize=\"normal\"\n\t\t\t@closing=\"showMoveModal = false\">\n\t\t\t<FaceMergeForm :first-face=\"'-1'\" @select=\"handleMove($event, selectedFileIds)\" />\n\t\t</NcDialog>\n\t</div>\n</template>\n\n<script lang='ts'>\nimport { t } from '@nextcloud/l10n'\nimport Vue from 'vue'\nimport NcActionButton from '@nextcloud/vue/components/NcActionButton'\nimport NcActions from '@nextcloud/vue/components/NcActions'\nimport NcDialog from '@nextcloud/vue/components/NcDialog'\nimport NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport AccountSwitchOutline from 'vue-material-design-icons/AccountSwitchOutline.vue'\nimport AlertCircleOutline from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport ArrowLeft from 'vue-material-design-icons/ArrowLeft.vue'\nimport Star from 'vue-material-design-icons/Star.vue'\nimport StarOutline from 'vue-material-design-icons/StarOutline.vue'\nimport DownloadOutline from 'vue-material-design-icons/TrayArrowDown.vue'\nimport FaceMergeForm from '../components/Faces/FaceMergeForm.vue'\nimport FileComponent from '../components/FileComponent.vue'\nimport FilesListViewer from '../components/FilesListViewer.vue'\nimport FetchFacesMixin from '../mixins/FetchFacesMixin.js'\nimport FetchFilesMixin from '../mixins/FetchFilesMixin.js'\nimport FilesSelectionMixin from '../mixins/FilesSelectionMixin.js'\nimport logger from '../services/logger.js'\nimport { toViewerFileInfo } from '../utils/fileUtils.js'\n\nexport default {\n\tname: 'UnassignedFaces',\n\tcomponents: {\n\t\tStar,\n\t\tStarOutline,\n\t\tDownloadOutline,\n\t\tAlertCircleOutline,\n\t\tArrowLeft,\n\t\tFaceMergeForm,\n\t\tFilesListViewer,\n\t\tFileComponent,\n\t\tNcLoadingIcon,\n\t\tNcEmptyContent,\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcDialog,\n\t\tAccountSwitchOutline,\n\t},\n\n\tdirectives: {\n\t\tfocus(el) {\n\t\t\tVue.nextTick(() => el.focus())\n\t\t},\n\t},\n\n\tmixins: [\n\t\tFetchFacesMixin,\n\t\tFetchFilesMixin,\n\t\tFilesSelectionMixin,\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowMoveModal: false,\n\t\t\tloadingCount: 0,\n\t\t\tappContent: document.getElementById('app-content-vue'),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tfiles() {\n\t\t\treturn this.$store.state.files.files\n\t\t},\n\n\t\tunassignedFiles() {\n\t\t\treturn this.$store.state.faces.unassignedFiles\n\t\t},\n\n\t\tfaceFileIds(): string[] {\n\t\t\treturn this.unassignedFiles || []\n\t\t},\n\n\t\tshouldFavoriteSelection(): boolean {\n\t\t\t// Favorite all selection if at least one file is not on the favorites.\n\t\t\treturn this.selectedFileIds.some((fileId) => this.$store.state.files.files[fileId].attributes.favorite === 0)\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.fetchUnassignedFaces()\n\t},\n\n\tmethods: {\n\t\topenViewer(fileId) {\n\t\t\twindow.OCA.Viewer.open({\n\t\t\t\tfileInfo: toViewerFileInfo(this.files[fileId]),\n\t\t\t\tlist: this.faceFileIds.map((fileId) => toViewerFileInfo(this.files[fileId])),\n\t\t\t})\n\t\t},\n\n\t\tasync handleMove(faceName, fileIds) {\n\t\t\ttry {\n\t\t\t\tthis.loadingCount++\n\t\t\t\tawait this.$store.dispatch('moveFilesToFace', { oldFace: null, faceName, fileIdsToMove: fileIds })\n\t\t\t\tthis.showMoveModal = false\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Failed to move selection', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loadingCount--\n\t\t\t}\n\t\t},\n\n\t\tasync favoriteSelection() {\n\t\t\ttry {\n\t\t\t\tthis.loadingCount++\n\t\t\t\tawait this.$store.dispatch('toggleFavoriteForFiles', { fileIds: this.selectedFileIds, favoriteState: true })\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Failed to favorite selection', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loadingCount--\n\t\t\t}\n\t\t},\n\n\t\tasync unFavoriteSelection() {\n\t\t\ttry {\n\t\t\t\tthis.loadingCount++\n\t\t\t\tawait this.$store.dispatch('toggleFavoriteForFiles', { fileIds: this.selectedFileIds, favoriteState: false })\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Failed to unfavorite selection', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loadingCount--\n\t\t\t}\n\t\t},\n\n\t\tasync downloadSelection() {\n\t\t\ttry {\n\t\t\t\tthis.loadingCount++\n\t\t\t\tawait this.$store.dispatch('downloadFiles', this.selectedFileIds)\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Faile to download selection', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loadingCount--\n\t\t\t}\n\t\t},\n\n\t\tt,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../mixins/FaceContent';\n</style>\n"],"names":["_sfc_main","Star","StarOutline","DownloadOutline","AlertCircleOutline","ArrowLeft","FaceMergeForm","FilesListViewer","FileComponent","NcLoadingIcon","NcEmptyContent","NcActions","NcActionButton","NcDialog","AccountSwitchOutline","el","Vue","FetchFacesMixin","FetchFilesMixin","FilesSelectionMixin","fileId","toViewerFileInfo","faceName","fileIds","error","logger","t"],"mappings":"28BAuHA,MAAAA,EAAA,CACA,KAAA,kBACA,WAAA,CACA,KAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,mBAAAC,EACA,UAAAC,EACA,cAAAC,EACA,gBAAAC,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,UAAAC,EACA,eAAAC,EACA,SAAAC,EACA,qBAAAC,CACA,EAEA,WAAA,CACA,MAAAC,EAAA,CACAC,EAAA,SAAA,IAAAD,EAAA,MAAA,CAAA,CAAA,CAEA,EAEA,OAAA,CACAE,EACAC,EACAC,CACA,EAEA,MAAA,CACA,MAAA,CACA,cAAA,GACA,aAAA,EACA,WAAA,SAAA,eAAA,iBAAA,CACA,CACA,EAEA,SAAA,CACA,OAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,KACA,EAEA,iBAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,eACA,EAEA,aAAA,CACA,OAAA,KAAA,iBAAA,CAAA,CACA,EAEA,yBAAA,CAEA,OAAA,KAAA,gBAAA,KAAAC,GAAA,KAAA,OAAA,MAAA,MAAA,MAAAA,CAAA,EAAA,WAAA,WAAA,CAAA,CAAA,CAEA,EAEA,SAAA,CACA,KAAA,qBAAA,CACA,EAEA,QAAA,CACA,WAAAA,EAAA,CACA,OAAA,IAAA,OAAA,KAAA,CACA,SAAAC,EAAA,KAAA,MAAAD,CAAA,CAAA,EACA,KAAA,KAAA,YAAA,IAAAA,GAAAC,EAAA,KAAA,MAAAD,CAAA,CAAA,CAAA,CAAA,CACA,CACA,EAEA,MAAA,WAAAE,EAAAC,EAAA,CACA,GAAA,CACA,KAAA,eACA,MAAA,KAAA,OAAA,SAAA,kBAAA,CAAA,QAAA,KAAA,SAAAD,EAAA,cAAAC,EAAA,EACA,KAAA,cAAA,SACAC,EAAA,CACAC,EAAA,MAAA,2BAAA,CAAA,MAAAD,CAAA,CAAA,CAAA,QACA,CACA,KAAA,cAAA,CAEA,EAEA,MAAA,mBAAA,CACA,GAAA,CACA,KAAA,eACA,MAAA,KAAA,OAAA,SAAA,yBAAA,CAAA,QAAA,KAAA,gBAAA,cAAA,GAAA,QACAA,EAAA,CACAC,EAAA,MAAA,+BAAA,CAAA,MAAAD,CAAA,CAAA,CAAA,QAAA,CAEA,KAAA,cAAA,CAEA,EAEA,MAAA,qBAAA,CACA,GAAA,CACA,KAAA,eACA,MAAA,KAAA,OAAA,SAAA,yBAAA,CAAA,QAAA,KAAA,gBAAA,cAAA,GAAA,QACAA,EAAA,CACAC,EAAA,MAAA,iCAAA,CAAA,MAAAD,CAAA,CAAA,CAAA,QAAA,CAEA,KAAA,cAAA,CAEA,EAEA,MAAA,mBAAA,CACA,GAAA,CACA,KAAA,eACA,MAAA,KAAA,OAAA,SAAA,gBAAA,KAAA,eAAA,QACAA,EAAA,CACAC,EAAA,MAAA,8BAAA,CAAA,MAAAD,CAAA,CAAA,CAAA,QACA,CACA,KAAA,cAAA,CAEA,EAEAE,EAAAA,CAAA,CAEA"}