Merge pull request #40372 from nextcloud/40172-polish-sharing-flow-bugs

40172 polish sharing flow bugs
This commit is contained in:
F. E Noel Nfebe 2023-09-12 22:53:18 +01:00 committed by GitHub
commit e94a83addb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 52 additions and 32 deletions

View file

@ -23,6 +23,7 @@ declare(strict_types=1);
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Files_Sharing\Listener;
use OCA\Files_Sharing\AppInfo\Application;
@ -30,13 +31,31 @@ use OCA\Files\Event\LoadSidebar;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use OCP\Util;
use OCP\AppFramework\Services\IInitialState;
use OCP\Share\IManager;
class LoadSidebarListener implements IEventListener {
public function handle(Event $event): void {
/**
* @template-implements IEventListener<Event>
*/
class LoadSidebarListener implements IEventListener
{
public function __construct(private IInitialState $initialState, private IManager $shareManager)
{
}
public function handle(Event $event): void
{
if (!($event instanceof LoadSidebar)) {
return;
}
Util::addScript(Application::APP_ID, 'files_sharing_tab', 'files');
$shareConfig = [
'allowPublicUploads' => $this->shareManager->shareApiLinkAllowPublicUpload(),
];
$this->initialState->provideInitialState('shareConfig', $shareConfig);
}
}

View file

@ -100,7 +100,7 @@ export default {
return options
},
supportsFileDrop() {
if (this.isFolder) {
if (this.isFolder && this.config.isPublicUploadEnabled) {
const shareType = this.share.type ?? this.share.shareType
return [this.SHARE_TYPES.SHARE_TYPE_LINK, this.SHARE_TYPES.SHARE_TYPE_EMAIL].includes(shareType)
}

View file

@ -22,8 +22,14 @@
*
*/
import { loadState } from '@nextcloud/initial-state'
export default class Config {
constructor() {
this._shareConfig = loadState('files_sharing', 'shareConfig', {})
}
/**
* Is public upload allowed on link shares ?
*
@ -32,8 +38,7 @@ export default class Config {
* @memberof Config
*/
get isPublicUploadEnabled() {
return document.getElementsByClassName('files-filestable')[0]
&& document.getElementsByClassName('files-filestable')[0].dataset.allowPublicUpload === 'yes'
return this._shareConfig.allowPublicUploads
}
/**

View file

@ -453,7 +453,7 @@ export default {
return this.share.id === null || this.share.id === undefined
},
allowsFileDrop() {
if (this.isFolder) {
if (this.isFolder && this.config.isPublicUploadEnabled) {
if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_LINK || this.share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {
return true
}
@ -784,7 +784,7 @@ export default {
incomingShare.password = this.share.password
}
const share = await this.addShare(incomingShare, this.fileInfo, this.config)
const share = await this.addShare(incomingShare, this.fileInfo)
this.share = share
this.$emit('add:share', this.share)
} else {
@ -796,36 +796,33 @@ export default {
/**
* Process the new share request
*
* @param {object} value the multiselect option
* @param {Share} share incoming share object
* @param {object} fileInfo file data
* @param {Config} config instance configs
*/
async addShare(value, fileInfo, config) {
// Clear the displayed selection
this.value = null
async addShare(share, fileInfo) {
// handle externalResults from OCA.Sharing.ShareSearch
if (value.handler) {
const share = await value.handler(this)
this.$emit('add:share', new Share(share))
if (share.handler) {
const shareFromHandler = await share.handler(this)
this.$emit('add:share', new Share(shareFromHandler))
return true
}
// this.loading = true // Are we adding loaders the new share flow?
console.debug('Adding a new share from the input for', value)
console.debug('Adding a new share from the input for', share)
try {
const path = (fileInfo.path + '/' + fileInfo.name).replace('//', '/')
const share = await this.createShare({
const resultingShare = await this.createShare({
path,
shareType: value.shareType,
shareWith: value.shareWith,
permissions: value.permissions,
shareType: share.shareType,
shareWith: share.shareWith,
permissions: share.permissions,
attributes: JSON.stringify(fileInfo.shareAttributes),
...(value.note ? { note: value.note } : {}),
...(value.password ? { password: value.password } : {}),
...(value.expireDate ? { expireDate: value.expireDate } : {}),
...(share.note ? { note: share.note } : {}),
...(share.password ? { password: share.password } : {}),
...(share.expireDate ? { expireDate: share.expireDate } : {}),
})
return share
return resultingShare
} catch (error) {
console.error('Error while adding new share', error)
} finally {
@ -1021,7 +1018,6 @@ export default {
align-items: flex-start;
>button:first-child {
font-size: 12px;
color: rgb(223, 7, 7);
background-color: #f5f5f5;
}

3
dist/2079-2079.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

3
dist/2785-2785.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/2785-2785.js.map vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long