Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

V15: Upload folders in dropzone #2116

Open
wants to merge 32 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
5b1689d
handling of folders in dropzone
loivsen Jul 15, 2024
351b156
consolelog
loivsen Jul 15, 2024
a3b2380
load bar
loivsen Jul 16, 2024
14bf9cb
request folders, skip OS files, cleanup
loivsen Jul 16, 2024
e9aa83e
cleanup
loivsen Jul 16, 2024
f8e12c3
deprecated
loivsen Jul 16, 2024
859465f
remove comments dropzone
loivsen Jul 16, 2024
beb5913
remove unused interface
loivsen Jul 16, 2024
6dbbd26
mime util
loivsen Jul 16, 2024
ad997ec
setup mime and constructor
loivsen Jul 16, 2024
6badcbb
update
loivsen Jul 16, 2024
4efd568
Merge remote-tracking branch 'origin/main' into v14/feature/handling-…
loivsen Jul 16, 2024
a342724
setup types and saving
loivsen Jul 16, 2024
6120afe
remove observe
loivsen Jul 17, 2024
97cf555
rename method in repo
loivsen Jul 17, 2024
aba2e25
destroy first when total is completed
loivsen Jul 17, 2024
4cd7a83
ordering and cleanup
loivsen Jul 17, 2024
cf1dbba
comment
loivsen Jul 18, 2024
9a59c02
Merge branch 'main' into v14/feature/handling-of-folders-in-dropzone
iOvergaard Jul 25, 2024
53f52d8
Merge remote-tracking branch 'origin/main' into v14/feature/handling-…
loivsen Sep 18, 2024
71b6739
move logic back to dropzone manager
loivsen Sep 20, 2024
2c742ca
document and media type imports
loivsen Sep 20, 2024
e8f50d6
Merge remote-tracking branch 'origin/main' into v14/feature/handling-…
loivsen Sep 23, 2024
d9c582f
scaffold
loivsen Sep 23, 2024
e842083
update util
loivsen Sep 23, 2024
c495582
update types
loivsen Sep 23, 2024
6598af8
update progress, cleanup in dropzone manager
loivsen Sep 23, 2024
57c3566
Merge branch 'main' into v14/feature/handling-of-folders-in-dropzone
loivsen Sep 26, 2024
e5ef3a0
from switch to if statement
loivsen Sep 26, 2024
d747840
sonarcloud pratice
loivsen Sep 26, 2024
40b4e2c
Merge branch 'v14/feature/handling-of-folders-in-dropzone' of https:/…
loivsen Sep 26, 2024
d638ca9
css disabled
loivsen Sep 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,12 @@ export class UmbDocumentTypeImportModalLayout extends UmbModalBaseElement<
};
}

#onFileDropped() {
const data = this.dropzone?.getFiles()[0];
if (!data) return;
#onUploadComplete() {
const data = this.dropzone?.getItems()[0];
if (!data?.temporaryFile) return;

this.#temporaryUnique = data.temporaryUnique;
this.#fileReader.readAsText(data.file);
this.#temporaryUnique = data.temporaryFile.temporaryUnique;
this.#fileReader.readAsText(data.temporaryFile.file);
}

async #onFileImport() {
Expand Down Expand Up @@ -136,7 +136,11 @@ export class UmbDocumentTypeImportModalLayout extends UmbModalBaseElement<
html`<div id="wrapper">
Drag and drop your file here
<uui-button look="primary" label="or click here to choose a file" @click=${this.#onBrowse}></uui-button>
<umb-dropzone id="dropzone" createAsTemporary @change=${this.#onFileDropped}> </umb-dropzone>
<umb-dropzone
id="dropzone"
accept=".udt"
@complete=${this.#onUploadComplete}
createAsTemporary></umb-dropzone>
</div>`,
)}
`;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,19 @@ export class UmbMediaTypeImportModalLayout extends UmbModalBaseElement<
this.#fileReader.onload = (e) => {
if (typeof e.target?.result === 'string') {
const fileContent = e.target.result;
this.#MediaTypePreviewBuilder(fileContent);
this.#mediaTypePreviewBuilder(fileContent);
} else {
this.#requestReset();
}
};
}

#onFileDropped() {
const data = this.dropzone?.getFiles()[0];
if (!data) return;
#onUploadCompleted() {
const data = this.dropzone?.getItems()[0];
if (!data?.temporaryFile) return;

this.#temporaryUnique = data.temporaryUnique;
this.#fileReader.readAsText(data.file);
this.#temporaryUnique = data.temporaryFile.temporaryUnique;
this.#fileReader.readAsText(data.temporaryFile.file);
}

async #onFileImport() {
Expand All @@ -55,7 +55,7 @@ export class UmbMediaTypeImportModalLayout extends UmbModalBaseElement<
this._submitModal();
}

#MediaTypePreviewBuilder(htmlString: string) {
#mediaTypePreviewBuilder(htmlString: string) {
const parser = new DOMParser();
const doc = parser.parseFromString(htmlString, 'text/xml');
const childNodes = doc.childNodes;
Expand All @@ -68,10 +68,10 @@ export class UmbMediaTypeImportModalLayout extends UmbModalBaseElement<
}
});

this._fileContent = this.#MediaTypePreviewItemBuilder(elements);
this._fileContent = this.#mediaTypePreviewItemBuilder(elements);
}

#MediaTypePreviewItemBuilder(elements: Array<Element>) {
#mediaTypePreviewItemBuilder(elements: Array<Element>) {
const mediaTypes: Array<UmbMediaTypePreview> = [];
elements.forEach((MediaType) => {
const info = MediaType.getElementsByTagName('Info')[0];
Expand Down Expand Up @@ -129,7 +129,11 @@ export class UmbMediaTypeImportModalLayout extends UmbModalBaseElement<
html`<div id="wrapper">
Drag and drop your file here
<uui-button look="primary" label="or click here to choose a file" @click=${this.#onBrowse}></uui-button>
<umb-dropzone id="dropzone" createAsTemporary @change=${this.#onFileDropped}> </umb-dropzone>
<umb-dropzone
id="dropzone"
accept=".udt"
@complete=${this.#onUploadCompleted}
createAsTemporary></umb-dropzone>
</div>`,
)}
`;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ export class UmbMediaTypeStructureRepository extends UmbContentTypeStructureRepo
}) {
return this.#dataSource.getMediaTypesOfFileExtension({ fileExtension, skip, take });
}

async requestMediaTypesOfFolders({ skip = 0, take = 100 } = {}) {
return this.#dataSource.getMediaTypesOfFolders({ skip, take });
}
}

export default UmbMediaTypeStructureRepository;
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ export class UmbMediaTypeStructureServerDataSource extends UmbContentTypeStructu
getMediaTypesOfFileExtension({ fileExtension, skip, take }: { fileExtension: string; skip: number; take: number }) {
return getAllowedMediaTypesOfExtension({ fileExtension, skip, take });
}
getMediaTypesOfFolders({ skip, take }: { skip: number; take: number }) {
return getAllowedMediaTypesOfFolders({ skip, take });
}
}

const getAllowedChildrenOf = (unique: string | null) => {
Expand All @@ -42,6 +45,12 @@ const mapper = (item: AllowedMediaTypeModel): UmbAllowedMediaTypeModel => {
};
};

const getAllowedMediaTypesOfFolders = async ({ skip, take }: { skip: number; take: number }) => {
// eslint-disable-next-line local-rules/no-direct-api-import
const { items } = await MediaTypeService.getItemMediaTypeFolders({ skip, take });
return items.map((item) => mapper(item));
};

const getAllowedMediaTypesOfExtension = async ({
fileExtension,
skip,
Expand Down
13 changes: 7 additions & 6 deletions src/packages/media/media/collection/media-collection.element.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import type { UmbMediaCollectionContext } from './media-collection.context.js';
import { UMB_MEDIA_COLLECTION_CONTEXT } from './media-collection.context-token.js';
import { customElement, html, state, when } from '@umbraco-cms/backoffice/external/lit';
import { UmbCollectionDefaultElement } from '@umbraco-cms/backoffice/collection';
import type { UmbProgressEvent } from '@umbraco-cms/backoffice/event';

import './media-collection-toolbar.element.js';
import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';
import { UmbRequestReloadChildrenOfEntityEvent } from '@umbraco-cms/backoffice/entity-action';
Expand All @@ -32,7 +30,7 @@ export class UmbMediaCollectionElement extends UmbCollectionDefaultElement {
});
}

async #onChange() {
async #onComplete() {
this._progress = -1;
this.#mediaCollection?.requestCollection();

Expand All @@ -44,8 +42,11 @@ export class UmbMediaCollectionElement extends UmbCollectionDefaultElement {
eventContext.dispatchEvent(event);
}

#onProgress(event: UmbProgressEvent) {
this._progress = event.progress;
#onProgress(event: ProgressEvent) {
this._progress = (event.loaded / event.total) * 100;
if (this._progress >= 100) {
this._progress = -1;
}
}

protected override renderToolbar() {
Expand All @@ -54,7 +55,7 @@ export class UmbMediaCollectionElement extends UmbCollectionDefaultElement {
${when(this._progress >= 0, () => html`<uui-loader-bar progress=${this._progress}></uui-loader-bar>`)}
<umb-dropzone
.parentUnique=${this._unique}
@change=${this.#onChange}
@complete=${this.#onComplete}
@progress=${this.#onProgress}></umb-dropzone>
`;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { UmbMediaItemRepository } from '../../repository/index.js';
import { UMB_IMAGE_CROPPER_EDITOR_MODAL, UMB_MEDIA_PICKER_MODAL } from '../../modals/index.js';
import type { UmbCropModel, UmbMediaPickerPropertyValue } from '../../types.js';
import type { UmbMediaItemModel } from '../../repository/index.js';
import type { UmbUploadableFileModel } from '../../dropzone/index.js';
import type { UmbUploadableItem } from '../../dropzone/types.js';
import { customElement, html, nothing, property, repeat, state } from '@umbraco-cms/backoffice/external/lit';
import { umbConfirmModal, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal';
import { UmbChangeEvent } from '@umbraco-cms/backoffice/event';
Expand Down Expand Up @@ -331,7 +331,7 @@ export class UmbInputRichMediaElement extends UUIFormControlMixin(UmbLitElement,
}

async #onUploadCompleted(e: CustomEvent) {
const completed = e.detail?.completed as Array<UmbUploadableFileModel>;
const completed = e.detail as Array<UmbUploadableItem>;
const uploaded = completed.map((file) => file.unique);
this.#addItems(uploaded);
}
Expand All @@ -346,7 +346,7 @@ export class UmbInputRichMediaElement extends UUIFormControlMixin(UmbLitElement,
#renderDropzone() {
if (this.readonly) return nothing;
if (this._cards && this._cards.length >= this.max) return;
return html`<umb-dropzone @change=${this.#onUploadCompleted}></umb-dropzone>`;
return html`<umb-dropzone @complete=${this.#onUploadCompleted}></umb-dropzone>`;
}

#renderItems() {
Expand Down
Loading
Loading