@@ -69,6 +69,14 @@ export default {
search: { type: Boolean, default: false },
limit: { type: Number, default: 12 }
},
+ setup () {
+ const performSearch = () => {
+ this.albums.length = 0
+ this.fetchData()
+ }
+
+ return { performSearch }
+ },
data () {
return {
albums: [],
diff --git a/front/src/components/audio/artist/Widget.vue b/front/src/components/audio/artist/Widget.vue
index 03c4aec43..eade31314 100644
--- a/front/src/components/audio/artist/Widget.vue
+++ b/front/src/components/audio/artist/Widget.vue
@@ -10,7 +10,7 @@
@@ -64,6 +64,14 @@ export default {
header: { type: Boolean, default: true },
search: { type: Boolean, default: false }
},
+ setup () {
+ const performSearch = () => {
+ this.objects.length = 0
+ this.fetchData()
+ }
+
+ return { performSearch }
+ },
data () {
return {
objects: [],
diff --git a/front/src/components/audio/track/Table.vue b/front/src/components/audio/track/Table.vue
index 57de531df..06dd46c2d 100644
--- a/front/src/components/audio/track/Table.vue
+++ b/front/src/components/audio/track/Table.vue
@@ -4,11 +4,7 @@
@@ -191,6 +187,16 @@ export default {
paginateBy: { type: Number, required: false, default: 25 }
},
+ setup () {
+ const performSearch = () => {
+ this.currentPage = 1
+ this.additionalTracks.length = 0
+ this.fetchData('tracks/')
+ }
+
+ return { performSearch }
+ },
+
data () {
return {
fetchDataUrl: this.nextUrl,
diff --git a/front/src/components/channels/AlbumSelect.vue b/front/src/components/channels/AlbumSelect.vue
index f307dc864..77c242703 100644
--- a/front/src/components/channels/AlbumSelect.vue
+++ b/front/src/components/channels/AlbumSelect.vue
@@ -1,3 +1,44 @@
+
+
-
diff --git a/front/src/components/channels/LicenseSelect.vue b/front/src/components/channels/LicenseSelect.vue
index 63a598bd1..577524688 100644
--- a/front/src/components/channels/LicenseSelect.vue
+++ b/front/src/components/channels/LicenseSelect.vue
@@ -1,3 +1,49 @@
+
+
-
diff --git a/front/src/components/common/AttachmentInput.vue b/front/src/components/common/AttachmentInput.vue
index ffc1e53aa..5896f9d02 100644
--- a/front/src/components/common/AttachmentInput.vue
+++ b/front/src/components/common/AttachmentInput.vue
@@ -1,8 +1,9 @@
@@ -119,13 +124,13 @@ watch(value, (to, from) => {
v-if="value && value === initialValue"
alt=""
:class="['ui', imageClass, 'image']"
- :src="$store.getters['instance/absoluteUrl'](`api/v1/attachments/${value}/proxy?next=medium_square_crop`)"
+ :src="getAttachmentUrl(value)"
>
{
:id="attachmentId"
ref="input"
:name="name"
- :required="required || null"
+ :required="required || undefined"
class="ui input"
type="file"
accept="image/png,image/jpeg"
diff --git a/front/src/components/common/CopyInput.vue b/front/src/components/common/CopyInput.vue
index d14ca2875..a76a2fb5d 100644
--- a/front/src/components/common/CopyInput.vue
+++ b/front/src/components/common/CopyInput.vue
@@ -1,8 +1,8 @@
@@ -30,7 +28,7 @@ const { copy, isSupported: canCopy, copied } = useClipboard({ source: value, cop
+import { useVModel } from '@vueuse/core'
+import { computed } from 'vue'
+import { useGettext } from 'vue3-gettext'
+
+interface Props {
+ modelValue: string
+ placeholder?: string
+}
+
+const props = withDefaults(defineProps
(), {
+ placeholder: ''
+})
+
+const emit = defineEmits(['update:modelValue', 'search'])
+const value = useVModel(props, 'modelValue', emit)
+
+const { $pgettext } = useGettext()
+const labels = computed(() => ({
+ searchPlaceholder: $pgettext('Content/Search/Input.Placeholder', 'Search…'),
+ clear: $pgettext('Content/Library/Button.Label', 'Clear')
+}))
+
+const search = () => {
+ value.value = ''
+ emit('search', value.value)
+}
+
+