Add user input for link share labels
Signed-off-by: Gary Kim <gary@garykim.dev>
This commit is contained in:
parent
8f78205be0
commit
a2cedcefee
File diff suppressed because one or more lines are too long
|
@ -1079,6 +1079,9 @@ class ShareAPIController extends OCSController {
|
||||||
|
|
||||||
// only link shares have labels
|
// only link shares have labels
|
||||||
if ($share->getShareType() === IShare::TYPE_LINK && $label !== null) {
|
if ($share->getShareType() === IShare::TYPE_LINK && $label !== null) {
|
||||||
|
if (strlen($label) > 255) {
|
||||||
|
throw new OCSBadRequestException("Maxmimum label length is 255");
|
||||||
|
}
|
||||||
$share->setLabel($label);
|
$share->setLabel($label);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
:class="isEmailShareType ? 'icon-mail-white' : 'icon-public-white'"
|
:class="isEmailShareType ? 'icon-mail-white' : 'icon-public-white'"
|
||||||
class="sharing-entry__avatar" />
|
class="sharing-entry__avatar" />
|
||||||
<div class="sharing-entry__desc">
|
<div class="sharing-entry__desc">
|
||||||
<h5>{{ title }}</h5>
|
<h5 :title="title">{{ title }}</h5>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- clipboard -->
|
<!-- clipboard -->
|
||||||
|
@ -124,6 +124,24 @@
|
||||||
@close="onMenuClose">
|
@close="onMenuClose">
|
||||||
<template v-if="share">
|
<template v-if="share">
|
||||||
<template v-if="share.canEdit">
|
<template v-if="share.canEdit">
|
||||||
|
<!-- Custom Label -->
|
||||||
|
<ActionInput
|
||||||
|
ref="label"
|
||||||
|
v-tooltip.auto="{
|
||||||
|
content: errors.label,
|
||||||
|
show: errors.label,
|
||||||
|
trigger: 'manual',
|
||||||
|
defaultContainer: '.app-sidebar'
|
||||||
|
}"
|
||||||
|
:class="{ error: errors.label }"
|
||||||
|
:disabled="saving"
|
||||||
|
:placeholder="t('files_sharing', 'Share label')"
|
||||||
|
:aria-label="t('files_sharing', 'Share label')"
|
||||||
|
:value="share.newLabel || share.label"
|
||||||
|
icon="icon-edit"
|
||||||
|
maxlength="255"
|
||||||
|
@update:value="onLabelChange"
|
||||||
|
@submit="onLabelSubmit" />
|
||||||
<!-- folder -->
|
<!-- folder -->
|
||||||
<template v-if="isFolder && fileHasCreatePermission && config.isPublicUploadEnabled">
|
<template v-if="isFolder && fileHasCreatePermission && config.isPublicUploadEnabled">
|
||||||
<ActionRadio :checked="sharePermissions === publicUploadRValue"
|
<ActionRadio :checked="sharePermissions === publicUploadRValue"
|
||||||
|
@ -391,7 +409,9 @@ export default {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if (this.share.label && this.share.label.trim() !== '') {
|
if (this.share.label && this.share.label.trim() !== '') {
|
||||||
return this.share.label
|
return t('files_sharing', 'Share link ({label})', {
|
||||||
|
label: this.share.label.trim()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
if (this.isEmailShareType) {
|
if (this.isEmailShareType) {
|
||||||
return this.share.shareWith
|
return this.share.shareWith
|
||||||
|
@ -712,6 +732,25 @@ export default {
|
||||||
this.queueUpdate('permissions')
|
this.queueUpdate('permissions')
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Label changed, let's save it to a different key
|
||||||
|
* @param {String} label the share label
|
||||||
|
*/
|
||||||
|
onLabelChange(label) {
|
||||||
|
this.$set(this.share, 'newLabel', label.trim())
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When the note change, we trim, save and dispatch
|
||||||
|
*/
|
||||||
|
onLabelSubmit() {
|
||||||
|
if (typeof this.share.newLabel === 'string') {
|
||||||
|
this.share.label = this.share.newLabel
|
||||||
|
this.$delete(this.share, 'newLabel')
|
||||||
|
this.queueUpdate('label')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate a valid policy password or
|
* Generate a valid policy password or
|
||||||
* request a valid password if password_policy
|
* request a valid password if password_policy
|
||||||
|
@ -856,6 +895,13 @@ export default {
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
line-height: 1.2em;
|
line-height: 1.2em;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&:not(.sharing-entry--share) &__actions {
|
&:not(.sharing-entry--share) &__actions {
|
||||||
|
|
|
@ -274,6 +274,7 @@ export default {
|
||||||
case 'password':
|
case 'password':
|
||||||
case 'pending':
|
case 'pending':
|
||||||
case 'expireDate':
|
case 'expireDate':
|
||||||
|
case 'label':
|
||||||
case 'note': {
|
case 'note': {
|
||||||
// show error
|
// show error
|
||||||
this.$set(this.errors, property, message)
|
this.$set(this.errors, property, message)
|
||||||
|
|
|
@ -253,6 +253,29 @@ export default class Share {
|
||||||
this.#share.note = note
|
this.#share.note = note
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the share label if any
|
||||||
|
* Should only exist on link shares
|
||||||
|
*
|
||||||
|
* @returns {string}
|
||||||
|
* @readonly
|
||||||
|
* @memberof Share
|
||||||
|
*/
|
||||||
|
get label() {
|
||||||
|
return this.#share.label
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the share label if any
|
||||||
|
* Should only be set on link shares
|
||||||
|
*
|
||||||
|
* @param {string} label the label
|
||||||
|
* @memberof Share
|
||||||
|
*/
|
||||||
|
set label(label) {
|
||||||
|
this.#share.label = label
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Have a mail been sent
|
* Have a mail been sent
|
||||||
*
|
*
|
||||||
|
@ -488,9 +511,6 @@ export default class Share {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: SORT THOSE PROPERTIES
|
// TODO: SORT THOSE PROPERTIES
|
||||||
get label() {
|
|
||||||
return this.#share.label
|
|
||||||
}
|
|
||||||
|
|
||||||
get parent() {
|
get parent() {
|
||||||
return this.#share.parent
|
return this.#share.parent
|
||||||
|
|
Loading…
Reference in New Issue