← Back
Editing: PhotosFiltersInput-B33sPvuK.chunk.mjs.map
{"version":3,"file":"PhotosFiltersInput-B33sPvuK.chunk.mjs","sources":["../node_modules/@mdi/svg/svg/calendar-month.svg?raw","../src/components/PhotosFilters/CustomDateRangePickerDialog.vue","../node_modules/@nextcloud/vue/dist/Components/NcChip.mjs","../src/services/PhotosFilters/dateRangeFilter.ts","../node_modules/@mdi/svg/svg/map-marker.svg?raw","../src/mixins/useAbortController.ts","../src/mixins/useFetchCollections.ts","../src/components/PhotosFilters/PlaceOption.vue","../src/services/PhotosFilters/placesFilter.ts","../src/services/PhotosFilters/index.ts","../src/components/PhotosFilters/PhotosFiltersDisplay.vue","../src/components/PhotosFilters/PhotosFiltersInput.vue"],"sourcesContent":["export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" id=\\\"mdi-calendar-month\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M9,10V12H7V10H9M13,10V12H11V10H13M17,10V12H15V10H17M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5C3.89,21 3,20.1 3,19V5A2,2 0 0,1 5,3H6V1H8V3H16V1H18V3H19M19,19V8H5V19H19M9,14V16H7V14H9M13,14V16H11V14H13M17,14V16H15V14H17Z\\\" /></svg>\"","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<NcDialog\n\t\t:name=\"t('photos', 'Select a custom date range')\"\n\t\tsize=\"normal\"\n\t\t@closing=\"emit('close', undefined)\">\n\t\t<div\n\t\t\tclass=\"date-range-picker-dialog\"\n\t\t\tdata-cy-photos-filters-input=\"custom-date-range\">\n\t\t\t<NcDateTimePicker\n\t\t\t\tv-model=\"dateRange\"\n\t\t\t\tclass=\"date-range-picker-dialog__picker\"\n\t\t\t\t:clearable=\"true\"\n\t\t\t\ttype=\"date-range\"\n\t\t\t\t:placeholder=\"t('photos', 'Select a date range')\">\n\t\t\t\t<template #default>\n\t\t\t\t\t{{ t('photos', 'Date range') }}\n\t\t\t\t</template>\n\t\t\t</NcDateTimePicker>\n\t\t</div>\n\t</NcDialog>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { DateRangeValueType } from '../../services/PhotosFilters/dateRangeFilter.ts'\n\nimport { t } from '@nextcloud/l10n'\nimport { ref, watch } from 'vue'\nimport NcDateTimePicker from '@nextcloud/vue/components/NcDateTimePicker'\nimport NcDialog from '@nextcloud/vue/components/NcDialog'\n\nconst emit = defineEmits<{\n\t(event: 'close', value: DateRangeValueType | undefined): void\n}>()\n\nconst dateRange = ref<[Date, Date] | [null, null]>([null, null])\n\nwatch(dateRange, (newDateRangeValue) => {\n\tif (newDateRangeValue[0] !== null || newDateRangeValue[1] !== null) {\n\t\temit('close', {\n\t\t\tstart: newDateRangeValue[0].getTime(),\n\t\t\tend: newDateRangeValue[1].getTime(),\n\t\t})\n\t}\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.date-range-picker-dialog {\n\theight: 400px;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: flex-start;\n\n\t&__picker {\n\t\tflex-grow: 1;\n\t}\n}\n</style>\n","import '../assets/NcChip-ByvuZS2-.css';\nimport { c as mdiClose } from \"../chunks/mdi-C_j0YT8c.mjs\";\nimport { useSlots, computed } from \"vue\";\nimport { N as NcActionButton } from \"../chunks/NcActionButton-DykQxmXJ.mjs\";\nimport { N as NcActions } from \"../chunks/NcActions-CpdT2y6O.mjs\";\nimport { N as NcIconSvgWrapper } from \"../chunks/NcIconSvgWrapper-BreCg8pX.mjs\";\nimport { r as register, m as t18, a as t } from \"../chunks/_l10n-BmKQgz1z.mjs\";\nimport { n as normalizeComponent } from \"../chunks/_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t18);\nconst _sfc_main = {\n __name: \"NcChip\",\n props: {\n /**\n * aria label to set on the close button\n *\n * @default 'Close'\n */\n ariaLabelClose: {\n type: String,\n default: t(\"Close\")\n },\n /**\n * Container for the actions\n */\n actionsContainer: {\n type: String,\n default: \"body\"\n },\n /**\n * Main text of the chip.\n */\n text: {\n type: String,\n default: \"\"\n },\n /**\n * Set the chips design variant-\n *\n * This sets the background style of the chip, similar to NcButton's `variant`.\n *\n * @deprecated will be removed with v9 - use `variant` instead.\n */\n type: {\n type: String,\n default: \"secondary\",\n validator: (value) => [\"primary\", \"secondary\", \"tertiary\", \"error\", \"warning\", \"success\"].includes(value)\n },\n /**\n * SVG path of the icon to use, this takes precedence over `iconSVG`.\n * For example icon paths from `@mdi/js` can be used.\n */\n iconPath: {\n type: String,\n default: null\n },\n /**\n * Inline SVG to use as the icon\n */\n iconSvg: {\n type: String,\n default: null\n },\n /**\n * Set to true to prevent the close button to be shown\n */\n noClose: {\n type: Boolean,\n default: false\n },\n /**\n * Set the chips design variant-\n *\n * This sets the background style of the chip, similar to NcButton's `variant`.\n *\n * @since 8.24.0\n */\n variant: {\n type: String,\n default: \"secondary\",\n validator: (value) => [\"primary\", \"secondary\", \"tertiary\", \"error\", \"warning\", \"success\"].includes(value)\n }\n },\n emits: [\"close\"],\n setup(__props, { emit }) {\n const props = __props;\n const slots = useSlots();\n const realVariant = computed(() => props.type !== \"secondary\" ? props.type : props.variant);\n const canClose = computed(() => !props.noClose);\n const hasActions = () => Boolean(slots.actions?.());\n const hasIcon = () => Boolean(props.iconPath || props.iconSvg || !!slots.icon?.());\n return { __sfc: true, props, emit, slots, realVariant, canClose, hasActions, hasIcon, mdiClose, NcActionButton, NcActions, NcIconSvgWrapper };\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(\"div\", { staticClass: \"nc-chip\", class: {\n [`nc-chip--${_setup.realVariant}`]: true,\n \"nc-chip--no-actions\": _vm.noClose && !_setup.hasActions(),\n \"nc-chip--no-icon\": !_setup.hasIcon()\n } }, [_setup.hasIcon() ? _c(\"span\", { staticClass: \"nc-chip__icon\" }, [_vm._t(\"icon\", function() {\n return [_vm.iconPath || _vm.iconSvg ? _c(_setup.NcIconSvgWrapper, { attrs: { \"inline\": \"\", \"path\": _vm.iconPath, \"svg\": _vm.iconPath ? void 0 : _vm.iconSvg, \"size\": 18 } }) : _vm._e()];\n })], 2) : _vm._e(), _c(\"span\", { staticClass: \"nc-chip__text\" }, [_vm._t(\"default\", function() {\n return [_vm._v(_vm._s(_vm.text))];\n })], 2), _setup.canClose || _setup.hasActions() ? _c(_setup.NcActions, { staticClass: \"nc-chip__actions\", attrs: { \"container\": _vm.actionsContainer, \"force-menu\": !_setup.canClose, \"variant\": \"tertiary-no-background\" } }, [_setup.canClose ? _c(_setup.NcActionButton, { attrs: { \"close-after-click\": \"\" }, on: { \"click\": function($event) {\n return _setup.emit(\"close\");\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.NcIconSvgWrapper, { attrs: { \"path\": _setup.mdiClose, \"size\": 20 } })];\n }, proxy: true }], null, false, 2547223506) }, [_vm._v(\" \" + _vm._s(_vm.ariaLabelClose) + \" \")]) : _vm._e(), _vm._t(\"actions\")], 2) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"88e86387\"\n);\nconst NcChip = __component__.exports;\nexport {\n NcChip as default\n};\n//# sourceMappingURL=NcChip.mjs.map\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { PhotosFilter } from './PhotosFilter.ts'\n\nimport calendarMonthSvg from '@mdi/svg/svg/calendar-month.svg?raw'\nimport { t } from '@nextcloud/l10n'\nimport { spawnDialog } from '@nextcloud/vue/functions/dialog'\nimport CustomDateRangePickerDialog from '../../components/PhotosFilters/CustomDateRangePickerDialog.vue'\nimport DateRangeOption from '../../components/PhotosFilters/DateRangeOption.vue'\n\nexport type DateRangeValueType = { start: number, end: number }\n\nexport const dateRangeFilterId = 'date-range'\n\nexport const dateRangeFilter: PhotosFilter<DateRangeValueType> = {\n\tid: dateRangeFilterId,\n\ticon: calendarMonthSvg,\n\trenderOptionComponent: DateRangeOption,\n\tasync getOptions() {\n\t\tconst now = new Date()\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tfilterId: dateRangeFilterId,\n\t\t\t\tlabel: t('photos', 'Last week'),\n\t\t\t\tvalue: {\n\t\t\t\t\tstart: new Date(now.getFullYear(), now.getMonth(), now.getDate() - now.getDay() - 7).getTime(),\n\t\t\t\t\tend: new Date(now.getFullYear(), now.getMonth(), now.getDate() - now.getDay() - 1).getTime(),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfilterId: dateRangeFilterId,\n\t\t\t\tlabel: t('photos', 'Last Month'),\n\t\t\t\tvalue: {\n\t\t\t\t\tstart: new Date(now.getFullYear(), now.getMonth() - 1, 1).getTime(),\n\t\t\t\t\tend: new Date(now.getFullYear(), now.getMonth(), 0).getTime(),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfilterId: dateRangeFilterId,\n\t\t\t\tlabel: t('photos', 'Custom…'),\n\t\t\t\tvalue: undefined,\n\t\t\t\tasync getValue() {\n\t\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\t\tspawnDialog(CustomDateRangePickerDialog, undefined, resolve)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t]\n\t},\n\tgetQuery(dateRangeOptions: DateRangeValueType[]): string {\n\t\t// Add one day to the end date to include the whole day.\n\t\tconst dav = dateRangeOptions.map((option) => `\n\t\t\t<d:and>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop><nc:metadata-photos-original_date_time/></d:prop>\n\t\t\t\t\t<d:literal>${option.start / 1000}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t\t<d:lt>\n\t\t\t\t\t<d:prop><nc:metadata-photos-original_date_time/></d:prop>\n\t\t\t\t\t<d:literal>${option.end / 1000 + 24 * 60 * 60}</d:literal>\n\t\t\t\t</d:lt>\n\t\t\t</d:and>`)\n\n\t\treturn `<d:or>${dav.join('')}</d:or>`\n\t},\n}\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" id=\\\"mdi-map-marker\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z\\\" /></svg>\"","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { computed, onUnmounted, ref } from 'vue'\nimport router from '../router/index.ts'\n\n/**\n *\n */\nexport default function() {\n\tconst abortController = ref(new AbortController())\n\n\tconst abortSignal = computed(() => abortController.value.signal)\n\n\t/**\n\t *\n\t */\n\tfunction abortPendingRequest() {\n\t\tabortController.value.abort()\n\t\tabortController.value = new AbortController()\n\t}\n\n\tonUnmounted(() => {\n\t\tabortController.value.abort()\n\t})\n\n\trouter.beforeEach((from, to, next) => {\n\t\tabortPendingRequest()\n\t\tnext()\n\t})\n\n\treturn {\n\t\tabortSignal,\n\t\tabortPendingRequest,\n\t}\n}\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { WebDAVClient } from 'webdav'\n\nimport { ref } from 'vue'\nimport {\n\ttype Collection,\n\n\tfetchCollections,\n} from '../services/collectionFetcher.js'\nimport { davClient } from '../services/DavClient.ts'\nimport logger from '../services/logger.js'\nimport store from '../store/index.ts'\nimport useAbortController from './useAbortController.ts'\n\nexport default function() {\n\tconst errorFetchingCollections = ref(null as null | number | Error | unknown)\n\tconst loadingCollections = ref(false)\n\tconst { abortSignal } = useAbortController()\n\n\t/**\n\t *\n\t * @param collectionHome\n\t * @param extraProps\n\t * @param client\n\t */\n\tasync function _fetchCollections(collectionHome: string, extraProps: string[] = [], client: WebDAVClient = davClient): Promise<Collection[]> {\n\t\tif (loadingCollections.value) {\n\t\t\treturn []\n\t\t}\n\n\t\ttry {\n\t\t\tloadingCollections.value = true\n\t\t\terrorFetchingCollections.value = null\n\n\t\t\tconst collections = await fetchCollections(collectionHome, { signal: abortSignal.value }, extraProps, client)\n\n\t\t\tstore.dispatch('addCollections', { collections })\n\n\t\t\treturn collections\n\t\t} catch (error) {\n\t\t\tif (error.response?.status === 404) {\n\t\t\t\terrorFetchingCollections.value = 404\n\t\t\t} else {\n\t\t\t\terrorFetchingCollections.value = error\n\t\t\t}\n\t\t\tlogger.error('Error fetching collections:', { error })\n\t\t} finally {\n\t\t\tloadingCollections.value = false\n\t\t}\n\n\t\treturn []\n\t}\n\n\treturn { fetchCollections: _fetchCollections, errorFetchingCollections, loadingCollections }\n}\n","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<NcChip\n\t\tdata-cy-photos-filters-option=\"place\"\n\t\t@close=\"emit('deselect')\">\n\t\t<template v-if=\"value !== undefined\" #icon>\n\t\t\t<img :src=\"placeImageSource\" class=\"place__preview\">\n\t\t</template>\n\t\t<template #default>\n\t\t\t{{ value }}\n\t\t</template>\n\t</NcChip>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { PlacesValueType } from '../../services/PhotosFilters/placesFilter.ts'\n\nimport { generateUrl } from '@nextcloud/router'\nimport { computed } from 'vue'\nimport NcChip from '@nextcloud/vue/components/NcChip'\nimport useFetchCollections from '../../mixins/useFetchCollections.ts'\nimport store from '../../store/index.ts'\nimport { placesPrefix } from '../../store/places.ts'\n\nconst props = defineProps<{\n\tvalue: PlacesValueType\n}>()\n\nconst emit = defineEmits(['deselect'])\n\nconst { fetchCollections } = useFetchCollections()\n\nconst placeImageSource = computed<string>(() => {\n\tconst place = store.getters.getPlace(props.value)\n\n\tif (!place) {\n\t\treturn ''\n\t}\n\n\treturn generateUrl(`/apps/photos/api/v1/preview/${place.attributes['last-photo']}?x=${64}&y=${64}`)\n})\n\nif (Object.values(store.getters.places).length === 0) {\n\tfetchCollections(placesPrefix)\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n.place__preview {\n\twidth: 20px;\n\theight: 20px;\n\tborder-radius: 100%;\n}\n</style>\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { PhotosFilter } from './PhotosFilter.ts'\n\nimport mapMarkerSvg from '@mdi/svg/svg/map-marker.svg?raw'\nimport { generateUrl } from '@nextcloud/router'\nimport PlacesOption from '../../components/PhotosFilters/PlaceOption.vue'\nimport store from '../../store/index.ts'\nimport { placesPrefix } from '../../store/places.ts'\nimport { fetchCollections } from '../collectionFetcher.ts'\n\nexport type PlacesValueType = string\n\nexport const placesFilterId = 'places'\n\nexport const placesFilter: PhotosFilter<PlacesValueType> = {\n\tid: placesFilterId,\n\ticon: mapMarkerSvg,\n\trenderOptionComponent: PlacesOption,\n\tasync getOptions() {\n\t\tif (Object.values(store.getters.places).length === 0) {\n\t\t\tconst collections = await fetchCollections(placesPrefix)\n\t\t\tstore.dispatch('addCollections', { collections })\n\t\t}\n\n\t\treturn Object.values(Object.values(store.getters.places)).map((place) => {\n\t\t\treturn {\n\t\t\t\tfilterId: placesFilterId,\n\t\t\t\tlabel: place.displayname,\n\t\t\t\tvalue: place.displayname,\n\t\t\t\timgSrc: generateUrl(`/apps/photos/api/v1/preview/${place.attributes['last-photo']}?x=${64}&y=${64}`),\n\t\t\t}\n\t\t})\n\t},\n\tgetQuery(placesId: PlacesValueType[]): string {\n\t\tconst dav = placesId.map((placeId) => `\n\t\t\t<d:eq>\n\t\t\t\t<d:prop><nc:metadata-photos-place/></d:prop>\n\t\t\t\t<d:literal>${placeId}</d:literal>\n\t\t\t</d:eq>\n\t\t`)\n\n\t\treturn `<d:or>${dav.join('')}</d:or>`\n\t},\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { dateRangeFilter } from './dateRangeFilter.ts'\nimport { placesFilter } from './placesFilter.ts'\n\nexport default [\n\tdateRangeFilter,\n\tplacesFilter,\n]\n","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<div class=\"photos-filters-display\">\n\t\t<div\n\t\t\tv-for=\"filter in availableFilters\"\n\t\t\t:key=\"filter.id\"\n\t\t\tclass=\"photos-filters-display__filter\">\n\t\t\t<NcIconSvgWrapper :svg=\"filter.icon\" />\n\n\t\t\t<div class=\"photos-filters-display__filter__options-container\">\n\t\t\t\t<component\n\t\t\t\t\t:is=\"filter.renderOptionComponent\"\n\t\t\t\t\tv-for=\"(value, i) in selectedFilters[filter.id]\"\n\t\t\t\t\t:key=\"`${filter.id}_${i}`\"\n\t\t\t\t\tclass=\"photos-filters-display__filter__options-container__option\"\n\t\t\t\t\t:value=\"value\"\n\t\t\t\t\t@deselect=\"emit('deselect-filter', { filterId: filter.id, value })\" />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport filters from '../../services/PhotosFilters/index.ts'\n\nconst props = defineProps<{\n\tselectedFilters: Record<string, unknown[]>\n}>()\n\nconst emit = defineEmits<{\n\t(e: 'deselect-filter', option: { filterId: string, value: unknown }): void\n}>()\n\nconst availableFilters = computed(() => {\n\treturn filters.filter((filter) => {\n\t\tconst filterOptions = props.selectedFilters[filter.id]\n\t\treturn filterOptions !== undefined && filterOptions.length !== 0\n\t})\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.photos-filters-display {\n\t&__filter {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\n\t\t&__options-container {\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\t\t\tgap: 4px;\n\n\t\t\t&__option {\n\t\t\t\tmargin: calc((32px - 24px) / 2) 0; // 32 is the size of the icon, 24 is the size of the option. We want to match the size of the icon.\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<div\n\t\tclass=\"photos-filters-input\"\n\t\tdata-cy-photos-filters-input>\n\t\t<NcSelect\n\t\t\tclass=\"places-select\"\n\t\t\t:options=\"availableOptionsWithSelection\"\n\t\t\t:aria-label-combobox=\"t('photos', 'Select filters')\"\n\t\t\t:placeholder=\"t('photos', 'Select filters')\"\n\t\t\t:loading=\"loading\"\n\t\t\t:multiple=\"true\"\n\t\t\t@option:selected=\"handleSelectOptions\">\n\t\t\t<template #option=\"option\">\n\t\t\t\t<NcListItemIcon\n\t\t\t\t\t:name=\"option.label\"\n\t\t\t\t\t:is-no-user=\"true\"\n\t\t\t\t\t:url=\"option.imgSrc\" />\n\t\t\t</template>\n\t\t</NcSelect>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { FilterOption } from '../../services/PhotosFilters/PhotosFilter.ts'\n\nimport { t } from '@nextcloud/l10n'\nimport { computed, ref } from 'vue'\nimport NcListItemIcon from '@nextcloud/vue/components/NcListItemIcon'\nimport NcSelect from '@nextcloud/vue/components/NcSelect'\nimport filters from '../../services/PhotosFilters/index.ts'\n\nconst props = defineProps<{\n\tselectedFilters: Record<string, unknown[]>\n}>()\n\nconst emit = defineEmits<{\n\t(e: 'select-filter', option: FilterOption<unknown>): void\n}>()\n\nconst availableOptions = ref<FilterOption<unknown>[]>([])\nconst availableOptionsWithSelection = computed(() => availableOptions.value.filter((option) => !optionIsSelected(option)))\nconst loading = ref<boolean>(true)\n\nconst getOptionsPromises = filters.map(async (filter) => {\n\tconst options = await filter.getOptions()\n\tavailableOptions.value.push(...options)\n})\n\nPromise.all(getOptionsPromises).then(() => {\n\tloading.value = false\n})\n\nfunction handleSelectOptions(options: FilterOption<unknown>[]): void {\n\toptions.forEach(async (option) => {\n\t\tif (option.getValue !== undefined) {\n\t\t\toption.value = await option.getValue()\n\t\t}\n\n\t\tif (option.value === undefined) {\n\t\t\treturn\n\t\t}\n\n\t\temit('select-filter', option)\n\t})\n}\n\nfunction optionIsSelected(option: FilterOption<unknown>): boolean {\n\treturn props.selectedFilters[option.filterId]?.includes(option.value)\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.photos-filters-input {\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: center;\n\tpadding: 8px 8px 0 8px;\n}\n\n:deep(.vs__dropdown-toggle) {\n\tbackground-color: var(--color-main-background);\n}\n</style>\n"],"names":["calendarMonthSvg","dateRange","ref","watch","newDateRangeValue","emit","register","t18","_sfc_main","t","value","__props","props","slots","useSlots","realVariant","computed","canClose","mdiClose","NcActionButton","NcActions","NcIconSvgWrapper","_sfc_render","_vm","_c","_setup","$event","_sfc_staticRenderFns","__component__","normalizeComponent","NcChip","dateRangeFilterId","dateRangeFilter","DateRangeOption","now","resolve","spawnDialog","CustomDateRangePickerDialog","dateRangeOptions","option","mapMarkerSvg","useAbortController","abortController","abortSignal","abortPendingRequest","onUnmounted","router","from","to","next","useFetchCollections","errorFetchingCollections","loadingCollections","_fetchCollections","collectionHome","extraProps","client","davClient","collections","fetchCollections","store","error","logger","placeImageSource","place","generateUrl","placesPrefix","placesFilterId","placesFilter","PlacesOption","placesId","placeId","filters","availableFilters","filter","filterOptions","availableOptions","availableOptionsWithSelection","optionIsSelected","loading","getOptionsPromises","options","handleSelectOptions"],"mappings":"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","x_google_ignoreList":[0,2,4]}
Save File
Cancel