diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-layout-stylesheet/property-editor-ui-block-grid-layout-stylesheet.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-layout-stylesheet/property-editor-ui-block-grid-layout-stylesheet.element.ts
index 0b3351a30e..d93dcc568c 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-layout-stylesheet/property-editor-ui-block-grid-layout-stylesheet.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-layout-stylesheet/property-editor-ui-block-grid-layout-stylesheet.element.ts
@@ -27,6 +27,8 @@ export class UmbPropertyEditorUIBlockGridLayoutStylesheetElement
return this._value;
}
+ private _pickableFilter = (item: any) => item.unique.endsWith('css');
+
@property({ attribute: false })
public config?: UmbPropertyEditorConfigCollection;
@@ -40,6 +42,7 @@ export class UmbPropertyEditorUIBlockGridLayoutStylesheetElement
return html`
diff --git a/src/Umbraco.Web.UI.Client/src/packages/static-file/components/input-static-file/input-static-file.context.ts b/src/Umbraco.Web.UI.Client/src/packages/static-file/components/input-static-file/input-static-file.context.ts
index 95e4f9c262..0e29d38c6c 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/static-file/components/input-static-file/input-static-file.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/static-file/components/input-static-file/input-static-file.context.ts
@@ -1,13 +1,17 @@
-import { UMB_STATIC_FILE_TREE_REPOSITORY_ALIAS } from '../../tree/index.js';
+import { UMB_STATIC_FILE_ITEM_REPOSITORY_ALIAS } from '../../repository/item/manifests.js';
import { UMB_STATIC_FILE_PICKER_MODAL } from '../../modals/index.js';
import type { UmbStaticFileItemModel } from '../../repository/item/types.js';
+import type { UmbStaticFilePickerModalData, UmbStaticFilePickerModalValue } from '../../modals/index.js';
import { UmbPickerInputContext } from '@umbraco-cms/backoffice/picker-input';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
-export class UmbStaticFilePickerContext extends UmbPickerInputContext {
+export class UmbStaticFilePickerContext extends UmbPickerInputContext<
+ UmbStaticFileItemModel,
+ any,
+ UmbStaticFilePickerModalData,
+ UmbStaticFilePickerModalValue
+> {
constructor(host: UmbControllerHost) {
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore
- super(host, UMB_STATIC_FILE_TREE_REPOSITORY_ALIAS, UMB_STATIC_FILE_PICKER_MODAL);
+ super(host, UMB_STATIC_FILE_ITEM_REPOSITORY_ALIAS, UMB_STATIC_FILE_PICKER_MODAL);
}
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/static-file/components/input-static-file/input-static-file.element.ts b/src/Umbraco.Web.UI.Client/src/packages/static-file/components/input-static-file/input-static-file.element.ts
index 6cbe38de74..0b0d4c5ec2 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/static-file/components/input-static-file/input-static-file.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/static-file/components/input-static-file/input-static-file.element.ts
@@ -4,9 +4,12 @@ import { css, customElement, html, nothing, property, repeat, state } from '@umb
import { splitStringToArray } from '@umbraco-cms/backoffice/utils';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui';
+import { UmbServerFilePathUniqueSerializer } from '@umbraco-cms/backoffice/server-file-system';
@customElement('umb-input-static-file')
export class UmbInputStaticFileElement extends UUIFormControlMixin(UmbLitElement, '') {
+ #serializer = new UmbServerFilePathUniqueSerializer();
+
/**
* This is a minimum amount of selected files in this input.
* @type {number}
@@ -70,6 +73,9 @@ export class UmbInputStaticFileElement extends UUIFormControlMixin(UmbLitElement
return this.selection.join(',');
}
+ @property()
+ public pickableFilter?: (item: UmbStaticFileItemModel) => boolean;
+
@state()
private _items?: Array;
@@ -112,13 +118,21 @@ export class UmbInputStaticFileElement extends UUIFormControlMixin(UmbLitElement
`;
}
+ #openPicker() {
+ this.#pickerContext.openPicker({
+ pickableFilter: this.pickableFilter,
+ multiple: this.max === 1 ? false : true,
+ hideTreeRoot: true,
+ });
+ }
+
#renderAddButton() {
if (this.max === 1 && this.selection.length >= this.max) return;
return html`
this.#pickerContext.openPicker()}
+ @click=${this.#openPicker}
label=${this.localize.term('general_choose')}>
`;
}
@@ -126,7 +140,7 @@ export class UmbInputStaticFileElement extends UUIFormControlMixin(UmbLitElement
private _renderItem(item: UmbStaticFileItemModel) {
if (!item.unique) return;
return html`
-
+
;
+export type UmbStaticFilePickerModalData = UmbTreePickerModalData;
export type UmbStaticFilePickerModalValue = UmbTreePickerModalValue;
export const UMB_STATIC_FILE_PICKER_MODAL = new UmbModalToken<
diff --git a/src/Umbraco.Web.UI.Client/src/packages/static-file/repository/item/static-file-item.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/static-file/repository/item/static-file-item.server.data-source.ts
index 0bd42e077f..89b6e0ddac 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/static-file/repository/item/static-file-item.server.data-source.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/static-file/repository/item/static-file-item.server.data-source.ts
@@ -3,6 +3,7 @@ import { UmbItemServerDataSourceBase } from '@umbraco-cms/backoffice/repository'
import type { StaticFileItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';
import { StaticFileService } from '@umbraco-cms/backoffice/external/backend-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
+import { UmbServerFilePathUniqueSerializer } from '@umbraco-cms/backoffice/server-file-system';
/**
* A server data source for Static File items
@@ -27,14 +28,20 @@ export class UmbStaticFileItemServerDataSource extends UmbItemServerDataSourceBa
}
}
-/* eslint-disable local-rules/no-direct-api-import */
-const getItems = (uniques: Array) => StaticFileService.getItemStaticFile({ path: uniques });
+const getItems = (uniques: Array) => {
+ const serializer = new UmbServerFilePathUniqueSerializer();
+ const path = uniques.map((unique) => serializer.toServerPath(unique)!);
+
+ /* eslint-disable local-rules/no-direct-api-import */
+ return StaticFileService.getItemStaticFile({ path });
+};
const mapper = (item: StaticFileItemResponseModel): UmbStaticFileItemModel => {
+ const serializer = new UmbServerFilePathUniqueSerializer();
return {
isFolder: item.isFolder,
name: item.name,
- parentUnique: item.parent ? item.parent.path : null,
- unique: item.path,
+ parentUnique: item.parent ? serializer.toUnique(item.parent.path) : null,
+ unique: serializer.toUnique(item.path),
};
};