|
|
|
@ -59,22 +59,16 @@ import NcSelectTags from '@nextcloud/vue/dist/Components/NcSelectTags.js' |
|
|
|
|
import { translate as t } from '@nextcloud/l10n' |
|
|
|
|
import { showError } from '@nextcloud/dialogs' |
|
|
|
|
|
|
|
|
|
import { defaultBaseTag } from '../utils.js' |
|
|
|
|
import { fetchLastUsedTagIds, fetchTags } from '../services/api.js' |
|
|
|
|
import { |
|
|
|
|
createTag, |
|
|
|
|
deleteTag, |
|
|
|
|
fetchLastUsedTagIds, |
|
|
|
|
fetchSelectedTags, |
|
|
|
|
fetchTags, |
|
|
|
|
selectTag, |
|
|
|
|
} from '../services/api.js' |
|
|
|
|
|
|
|
|
|
import type { BaseTag, Tag, TagWithId } from '../types.js' |
|
|
|
|
|
|
|
|
|
const defaultBaseTag: BaseTag = { |
|
|
|
|
userVisible: true, |
|
|
|
|
userAssignable: true, |
|
|
|
|
canAssign: true, |
|
|
|
|
} |
|
|
|
|
createTagForFile, |
|
|
|
|
deleteTagForFile, |
|
|
|
|
fetchTagsForFile, |
|
|
|
|
setTagForFile, |
|
|
|
|
} from '../services/files.js' |
|
|
|
|
|
|
|
|
|
import type { Tag, TagWithId } from '../types.js' |
|
|
|
|
|
|
|
|
|
export default Vue.extend({ |
|
|
|
|
name: 'SystemTags', |
|
|
|
@ -133,7 +127,7 @@ export default Vue.extend({ |
|
|
|
|
async handler() { |
|
|
|
|
this.loadingTags = true |
|
|
|
|
try { |
|
|
|
|
this.selectedTags = await fetchSelectedTags(this.fileId) |
|
|
|
|
this.selectedTags = await fetchTagsForFile(this.fileId) |
|
|
|
|
this.$emit('has-tags', this.selectedTags.length > 0) |
|
|
|
|
} catch (error) { |
|
|
|
|
showError(t('systemtags', 'Failed to load selected tags')) |
|
|
|
@ -175,14 +169,15 @@ export default Vue.extend({ |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
async handleSelect(tags: Tag[]) { |
|
|
|
|
const selectedTag = tags[tags.length - 1] |
|
|
|
|
if (!selectedTag.id) { |
|
|
|
|
const lastTag = tags[tags.length - 1] |
|
|
|
|
if (!lastTag.id) { |
|
|
|
|
// Ignore created tags handled by `handleCreate()` |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
const selectedTag = lastTag as TagWithId |
|
|
|
|
this.loading = true |
|
|
|
|
try { |
|
|
|
|
await selectTag(this.fileId, selectedTag) |
|
|
|
|
await setTagForFile(selectedTag, this.fileId) |
|
|
|
|
const sortToFront = (a: TagWithId, b: TagWithId) => { |
|
|
|
|
if (a.id === selectedTag.id) { |
|
|
|
|
return -1 |
|
|
|
@ -201,7 +196,7 @@ export default Vue.extend({ |
|
|
|
|
async handleCreate(tag: Tag) { |
|
|
|
|
this.loading = true |
|
|
|
|
try { |
|
|
|
|
const id = await createTag(this.fileId, tag) |
|
|
|
|
const id = await createTagForFile(tag, this.fileId) |
|
|
|
|
const createdTag = { ...tag, id } |
|
|
|
|
this.sortedTags.unshift(createdTag) |
|
|
|
|
this.selectedTags.push(createdTag) |
|
|
|
@ -211,10 +206,10 @@ export default Vue.extend({ |
|
|
|
|
this.loading = false |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
async handleDeselect(tag: Tag) { |
|
|
|
|
async handleDeselect(tag: TagWithId) { |
|
|
|
|
this.loading = true |
|
|
|
|
try { |
|
|
|
|
await deleteTag(this.fileId, tag) |
|
|
|
|
await deleteTagForFile(tag, this.fileId) |
|
|
|
|
} catch (error) { |
|
|
|
|
showError(t('systemtags', 'Failed to delete tag')) |
|
|
|
|
} |
|
|
|
|