mirror of
https://github.com/nextcloud/server.git
synced 2026-04-22 06:37:56 -04:00
1 line
No EOL
11 KiB
Text
1 line
No EOL
11 KiB
Text
{"version":3,"file":"ProfilesCustomPicker-eX7yk2bS.chunk.mjs","sources":["../node_modules/vue-material-design-icons/ArrowRight.vue","../build/frontend/apps/profile/src/components/ProfilesCustomPicker.vue"],"sourcesContent":["<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon arrow-right-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ArrowRightIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"profile-picker\">\n\t\t<div class=\"profile-picker__heading\">\n\t\t\t<h2>\n\t\t\t\t{{ t('profile', 'Profile picker') }}\n\t\t\t</h2>\n\t\t\t<div class=\"input-wrapper\">\n\t\t\t\t<NcSelect\n\t\t\t\t\tref=\"profiles-search-input\"\n\t\t\t\t\tv-model=\"selectedProfile\"\n\t\t\t\t\tinputId=\"profiles-search\"\n\t\t\t\t\t:loading=\"loading\"\n\t\t\t\t\t:filterable=\"false\"\n\t\t\t\t\t:placeholder=\"t('profile', 'Search for a user profile')\"\n\t\t\t\t\t:clearSearchOnBlur=\"() => false\"\n\t\t\t\t\t:multiple=\"false\"\n\t\t\t\t\t:options=\"options\"\n\t\t\t\t\tlabel=\"displayName\"\n\t\t\t\t\t@search=\"searchForProfile\"\n\t\t\t\t\t@option:selecting=\"resolveResult\">\n\t\t\t\t\t<template #no-options=\"{ search }\">\n\t\t\t\t\t\t{{ search ? noResultText : t('profile', 'Search for a user profile. Start typing') }}\n\t\t\t\t\t</template>\n\t\t\t\t</NcSelect>\n\t\t\t</div>\n\t\t\t<NcEmptyContent class=\"empty-content\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<AccountOutline :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcEmptyContent>\n\t\t</div>\n\t\t<div class=\"profile-picker__footer\">\n\t\t\t<NcButton\n\t\t\t\tv-if=\"selectedProfile !== null\"\n\t\t\t\tvariant=\"primary\"\n\t\t\t\t:aria-label=\"t('profile', 'Insert selected user profile link')\"\n\t\t\t\t:disabled=\"loading || selectedProfile === null\"\n\t\t\t\t@click=\"submit\">\n\t\t\t\t{{ t('profile', 'Insert') }}\n\t\t\t\t<template #icon>\n\t\t\t\t\t<ArrowRightIcon />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl, generateUrl } from '@nextcloud/router'\nimport debounce from 'debounce'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'\nimport NcSelect from '@nextcloud/vue/components/NcSelect'\nimport AccountOutline from 'vue-material-design-icons/AccountOutline.vue'\nimport ArrowRightIcon from 'vue-material-design-icons/ArrowRight.vue'\nimport { logger } from '../services/logger.ts'\n\nexport default {\n\tname: 'ProfilesCustomPicker',\n\n\tcomponents: {\n\t\tNcSelect,\n\t\tNcButton,\n\t\tNcEmptyContent,\n\t\tAccountOutline,\n\t\tArrowRightIcon,\n\t},\n\n\tprops: {\n\t\tproviderId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\taccessible: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\temits: ['submit'],\n\n\tdata() {\n\t\treturn {\n\t\t\tsearchQuery: '',\n\t\t\tloading: false,\n\t\t\tresultUrl: null,\n\t\t\treference: null,\n\t\t\tprofiles: [],\n\t\t\tselectedProfile: null,\n\t\t\tabortController: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\toptions() {\n\t\t\tif (this.searchQuery !== '') {\n\t\t\t\treturn this.profiles\n\t\t\t}\n\t\t\treturn []\n\t\t},\n\n\t\tnoResultText() {\n\t\t\treturn this.loading ? t('profile', 'Searching …') : t('profile', 'Not found')\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.focusOnInput()\n\t},\n\n\tmethods: {\n\t\tfocusOnInput() {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs['profiles-search-input'].$el.getElementsByTagName('input')[0]?.focus()\n\t\t\t})\n\t\t},\n\n\t\tasync searchForProfile(query) {\n\t\t\tif (query.trim() === '' || query.trim().length < 3) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.searchQuery = query.trim()\n\t\t\tthis.loading = true\n\t\t\tawait this.debounceFindProfiles(query)\n\t\t},\n\n\t\tdebounceFindProfiles: debounce(function(...args) {\n\t\t\tthis.findProfiles(...args)\n\t\t}, 300),\n\n\t\tasync findProfiles(query) {\n\t\t\tconst url = generateOcsUrl('core/autocomplete/get?search={searchQuery}&itemType=%20&itemId=%20&shareTypes[]=0&limit=20', { searchQuery: query })\n\t\t\ttry {\n\t\t\t\tconst res = await axios.get(url)\n\t\t\t\tthis.profiles = res.data.ocs.data.map((userAutocomplete) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tuser: userAutocomplete.id,\n\t\t\t\t\t\tdisplayName: userAutocomplete.label,\n\t\t\t\t\t\ticon: userAutocomplete.icon,\n\t\t\t\t\t\tsubtitle: userAutocomplete.subline,\n\t\t\t\t\t\tisNoUser: userAutocomplete.source.startsWith('users'),\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('profile_picker: error while searching for users', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\tsubmit() {\n\t\t\tthis.resultUrl = window.location.origin + generateUrl(`/u/${this.selectedProfile.user.trim().toLowerCase()}`, null, { noRewrite: true })\n\t\t\tthis.$emit('submit', this.resultUrl)\n\t\t\tthis.$el.dispatchEvent(new CustomEvent('submit', { detail: this.resultUrl, bubbles: true }))\n\t\t},\n\n\t\tasync resolveResult(selectedItem) {\n\t\t\tthis.loading = true\n\t\t\tthis.abortController = new AbortController()\n\t\t\tthis.selectedProfile = selectedItem\n\t\t\tthis.resultUrl = window.location.origin + generateUrl(`/u/${this.selectedProfile.user.trim().toLowerCase()}`, null, { noRewrite: true })\n\t\t\ttry {\n\t\t\t\tconst res = await axios.get(generateOcsUrl('references/resolve', 2) + '?reference=' + encodeURIComponent(this.resultUrl), {\n\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t})\n\t\t\t\tthis.reference = res.data.ocs.data.references[this.resultUrl]\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('profile_picker: error resolving the user profile link', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\tclearSelection() {\n\t\t\tthis.selectedProfile = null\n\t\t\tthis.resultUrl = null\n\t\t\tthis.reference = null\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.profile-picker {\n\twidth: 100%;\n\tmin-height: 450px;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 12px 16px 16px 16px;\n\n\t&__heading, .select {\n\t\twidth: 100%;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t}\n\t}\n\n\t&__footer {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: end;\n\t\tmargin-top: 12px;\n\n\t\t> * {\n\t\t\tmargin-left: 4px;\n\t\t}\n\t}\n}\n</style>\n"],"names":["_sfc_main","_hoisted_3","_createElementBlock","_mergeProps","_ctx","$props","_cache","$event","_createElementVNode","_openBlock","NcSelect","NcButton","NcEmptyContent","AccountOutline","ArrowRightIcon","query","debounce","args","url","generateOcsUrl","res","axios","userAutocomplete","error","logger","generateUrl","selectedItem","_hoisted_1","_hoisted_2","_hoisted_4","_createVNode","_component_NcSelect","$data","$options","_withCtx","search","_component_NcEmptyContent","_component_AccountOutline","_createBlock","_component_NcButton","_component_ArrowRightIcon","_createTextVNode","_toDisplayString"],"mappings":"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","x_google_ignoreList":[0]} |