← Back
Editing: ActivityTab-BMQubd_h.chunk.mjs.map
{"version":3,"file":"ActivityTab-BMQubd_h.chunk.mjs","sources":["../src/components/ActivitySidebarPlugin.vue","../src/views/ActivityTab.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div ref=\"attachTarget\" />\n</template>\n\n<script setup lang=\"ts\">\nimport type { INode } from '@nextcloud/files'\nimport type { IActivitySidebarAction } from '../models/ActivityAPI.ts'\n\nimport { getCurrentInstance, onBeforeUnmount, onMounted, ref } from 'vue'\n\nconst props = defineProps<{\n\t/** The sidebar plugin */\n\tplugin: IActivitySidebarAction\n\t/**\n\t * The current node (file or folder)\n\t */\n\tnode: INode\n}>()\n\nconst emit = defineEmits<{\n\t(e: 'reload-activities'): void\n}>()\n\nconst attachTarget = ref<HTMLDivElement>()\n\nonMounted(() => props.plugin.mount(attachTarget.value as HTMLDivElement, {\n\tnode: props.node,\n\tcontext: getCurrentInstance()?.proxy ?? undefined,\n\treload: () => emit('reload-activities'),\n}))\nonBeforeUnmount(() => props.plugin.unmount())\n</script>\n","<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div\n\t\t:class=\"{ 'icon-loading': loading }\"\n\t\tclass=\"activity\">\n\t\t<!-- error message -->\n\t\t<NcEmptyContent v-if=\"error || !node\" :name=\"error\">\n\t\t\t<template #icon>\n\t\t\t\t<NcIconSvgWrapper :svg=\"lightningBoltSVG\" />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t\t<template v-else>\n\t\t\t<!-- activities actions -->\n\t\t\t<div v-if=\"sidebarPlugins.length > 0\" class=\"activity__actions\">\n\t\t\t\t<ActivitySidebarPlugin\n\t\t\t\t\tv-for=\"(plugin, index) of sidebarPlugins\"\n\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t:plugin=\"plugin\"\n\t\t\t\t\t:node=\"node\"\n\t\t\t\t\t@reload-activities=\"getActivities()\" />\n\t\t\t</div>\n\n\t\t\t<!-- activities content -->\n\t\t\t<NcEmptyContent\n\t\t\t\tv-if=\"loading\"\n\t\t\t\tclass=\"activity__empty-content\"\n\t\t\t\t:name=\"t('activity', 'Loading activities')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcLoadingIcon />\n\t\t\t\t</template>\n\t\t\t</NcEmptyContent>\n\t\t\t<NcEmptyContent\n\t\t\t\tv-else-if=\"activities.length === 0\"\n\t\t\t\tclass=\"activity__empty-content\"\n\t\t\t\t:name=\"t('activity', 'No activity yet')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"lightningBoltSVG\" />\n\t\t\t\t</template>\n\t\t\t</NcEmptyContent>\n\t\t\t<ul v-else class=\"activity__list\">\n\t\t\t\t<ActivityComponent\n\t\t\t\t\tv-for=\"activity in activities\"\n\t\t\t\t\t:key=\"activity.id\"\n\t\t\t\t\t:activity=\"activity\"\n\t\t\t\t\t:show-previews=\"false\"\n\t\t\t\t\t@reload=\"getActivities()\" />\n\t\t\t</ul>\n\t\t</template>\n\t</div>\n</template>\n\n<script lang='ts'>\nimport type { IFolder, INode, IView } from '@nextcloud/files'\nimport type { PropType } from 'vue'\nimport type { IActivitySidebarAction, IActivitySidebarEntry } from '../models/ActivityAPI.ts'\n\nimport lightningBoltSVG from '@mdi/svg/svg/lightning-bolt.svg?raw'\nimport axios from '@nextcloud/axios'\nimport { translate as t } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { defineComponent, nextTick } from 'vue'\nimport NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport ActivityComponent from '../components/ActivityComponent.vue'\nimport ActivitySidebarPlugin from '../components/ActivitySidebarPlugin.vue'\nimport ActivityModel from '../models/ActivityModel.ts'\nimport { getActivityFilters, getAdditionalEntries, getSidebarActions } from '../utils/api.ts'\nimport logger from '../utils/logger.ts'\n\nconst ActivityTab = defineComponent({\n\tname: 'ActivityTab',\n\n\tcomponents: {\n\t\tActivityComponent,\n\t\tNcEmptyContent,\n\t\tNcIconSvgWrapper,\n\t\tNcLoadingIcon,\n\t\tActivitySidebarPlugin,\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The node currently displayed in the sidebar\n\t\t */\n\t\tnode: {\n\t\t\ttype: Object as PropType<INode>,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * The folder shown in the files app\n\t\t */\n\t\t// eslint-disable-next-line vue/no-unused-properties\n\t\tfolder: {\n\t\t\ttype: Object as PropType<IFolder | undefined>,\n\t\t\trequired: false,\n\t\t\tdefault: undefined,\n\t\t},\n\n\t\t/**\n\t\t * The view shown in the files app\n\t\t */\n\t\t// eslint-disable-next-line vue/no-unused-properties\n\t\tview: {\n\t\t\ttype: Object as PropType<IView | undefined>,\n\t\t\trequired: false,\n\t\t\tdefault: undefined,\n\t\t},\n\t},\n\n\texpose: ['update'],\n\n\tdata() {\n\t\treturn {\n\t\t\terror: '',\n\t\t\tloading: true,\n\t\t\tactivities: [] as (IActivitySidebarEntry | ActivityModel)[],\n\t\t\tlightningBoltSVG,\n\t\t\tsidebarPlugins: [] as IActivitySidebarAction[],\n\t\t}\n\t},\n\n\twatch: {\n\t\tnode: {\n\t\t\timmediate: true,\n\t\t\tasync handler() {\n\t\t\t\tawait this.update()\n\t\t\t},\n\t\t},\n\t},\n\n\tasync mounted() {\n\t\tif (this.node) {\n\t\t\tawait this.update()\n\t\t}\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Update current view and fetch new activities\n\t\t */\n\t\tasync update() {\n\t\t\tthis.sidebarPlugins = []\n\t\t\tconst sidebarPlugins = getSidebarActions()\n\t\t\tif (sidebarPlugins.length > 0) {\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tthis.sidebarPlugins = sidebarPlugins\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tthis.resetState()\n\t\t\tawait this.getActivities()\n\t\t},\n\n\t\t/**\n\t\t * Get the existing activities\n\t\t */\n\t\tasync getActivities() {\n\t\t\ttry {\n\t\t\t\tthis.loading = true\n\n\t\t\t\tconst activities = await this.processActivities(await this.loadRealActivities())\n\t\t\t\tconst otherEntries = await getAdditionalEntries({ node: this.node })\n\t\t\t\tthis.activities = [...activities, ...otherEntries].sort((a, b) => b.timestamp - a.timestamp)\n\t\t\t} catch (error) {\n\t\t\t\tthis.error = t('activity', 'Unable to load the activity list')\n\t\t\t\tlogger.error('Error loading the activity list', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset the current view to its default state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = ''\n\t\t\tthis.activities = []\n\t\t},\n\n\t\t/**\n\t\t * Load activites from API\n\t\t */\n\t\tasync loadRealActivities() {\n\t\t\ttry {\n\t\t\t\tconst { data } = await axios.get(\n\t\t\t\t\tgenerateOcsUrl('apps/activity/api/v2/activity/filter'),\n\t\t\t\t\t{\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tformat: 'json',\n\t\t\t\t\t\t\tobject_type: 'files',\n\t\t\t\t\t\t\tobject_id: this.node.fileid,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\treturn data.ocs.data\n\t\t\t} catch (error) {\n\t\t\t\t// Status 304 is not an error.\n\t\t\t\tif (error.response !== undefined && error.response.status === 304) {\n\t\t\t\t\treturn []\n\t\t\t\t}\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process the API response activities and apply filter\n\t\t *\n\t\t * @param activities the activites\n\t\t */\n\t\tprocessActivities(activities): ActivityModel[] {\n\t\t\tactivities = activities.map((activity) => new ActivityModel(activity))\n\n\t\t\tlogger.debug(`Processed ${activities.length} activity(ies)`, {\n\t\t\t\tactivities, node: this.node,\n\t\t\t})\n\n\t\t\tconst filters = getActivityFilters()\n\t\t\treturn activities.filter((activity) => !filters || filters.every((filter) => filter(activity)))\n\t\t},\n\n\t\tt,\n\t},\n})\n\nexport default ActivityTab\nexport type ActivityTabType = typeof ActivityTab\n</script>\n\n<style scoped lang=\"scss\">\n.activity {\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n\theight: 100%;\n\n\t&__actions {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\twidth: 100%;\n\t}\n\n\t&__list {\n\t\tflex-grow: 1;\n\t\toverflow: scroll;\n\t}\n\n\t&__empty-content {\n\t\theight: 100%;\n\t}\n}\n\n:deep(.empty-content__icon span) {\n\tbackground-size: 64px;\n\twidth: 64px;\n\theight: 64px;\n}\n</style>\n"],"names":["props","__props","emit","__emit","attachTarget","ref","onMounted","getCurrentInstance","onBeforeUnmount","_createElementBlock","ActivityTab","defineComponent","ActivityComponent","NcEmptyContent","NcIconSvgWrapper","NcLoadingIcon","ActivitySidebarPlugin","lightningBoltSVG","sidebarPlugins","getSidebarActions","nextTick","activities","otherEntries","getAdditionalEntries","a","b","error","t","logger","data","axios","generateOcsUrl","activity","ActivityModel","filters","getActivityFilters","filter","_normalizeClass","_ctx","_createBlock","_component_NcEmptyContent","_withCtx","_createVNode","_component_NcIconSvgWrapper","_Fragment","_openBlock","_hoisted_1","_renderList","plugin","index","_component_ActivitySidebarPlugin","_cache","_component_NcLoadingIcon","_hoisted_2","_component_ActivityComponent"],"mappings":"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"}
Save File
Cancel