media
This commit is contained in:
@@ -5,6 +5,7 @@ import { manifests as menuManifests } from './menu/manifests.js';
|
||||
import { manifests as propertyEditorsManifests } from './property-editors/manifests.js';
|
||||
import { manifests as recycleBinManifests } from './recycle-bin/manifests.js';
|
||||
import { manifests as repositoryManifests } from './repository/manifests.js';
|
||||
import { manifests as searchManifests } from './search/manifests.js';
|
||||
import { manifests as sectionViewManifests } from './section-view/manifests.js';
|
||||
import { manifests as treeManifests } from './tree/manifests.js';
|
||||
import { manifests as workspaceManifests } from './workspace/manifests.js';
|
||||
@@ -17,6 +18,7 @@ export const manifests = [
|
||||
...propertyEditorsManifests,
|
||||
...recycleBinManifests,
|
||||
...repositoryManifests,
|
||||
...searchManifests,
|
||||
...sectionViewManifests,
|
||||
...treeManifests,
|
||||
...workspaceManifests,
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { UMB_MEDIA_ENTITY_TYPE, UmbMediaEntityType } from '../../entity.js';
|
||||
import type { UmbMediaItemModel } from './types.js';
|
||||
import type { MediaItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';
|
||||
import { MediaService } from '@umbraco-cms/backoffice/external/backend-api';
|
||||
@@ -32,6 +33,7 @@ const getItems = (uniques: Array<string>) => MediaService.getItemMedia({ id: uni
|
||||
|
||||
const mapper = (item: MediaItemResponseModel): UmbMediaItemModel => {
|
||||
return {
|
||||
entityType: UMB_MEDIA_ENTITY_TYPE,
|
||||
unique: item.id,
|
||||
isTrashed: item.isTrashed,
|
||||
mediaType: {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import type { UmbMediaEntityType } from '../../entity.js';
|
||||
import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models';
|
||||
|
||||
export interface UmbMediaItemModel {
|
||||
entityType: UmbMediaEntityType;
|
||||
unique: string;
|
||||
isTrashed: boolean;
|
||||
mediaType: {
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js';
|
||||
import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
export const manifests: Array<ManifestTypes> = [
|
||||
{
|
||||
name: 'Media Search Provider',
|
||||
alias: 'Umb.SearchProvider.Media',
|
||||
type: 'searchProvider',
|
||||
api: () => import('./media.search-provider.js'),
|
||||
weight: 1000,
|
||||
meta: {
|
||||
label: 'Media',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Media Search Result Item ',
|
||||
alias: 'Umb.SearchResultItem.Media',
|
||||
type: 'searchResultItem',
|
||||
forEntityTypes: [UMB_MEDIA_ENTITY_TYPE],
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,23 @@
|
||||
import type { UmbSearchRepository, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search';
|
||||
import { UmbMediaSearchServerDataSource } from './media-search.server.data-source.js';
|
||||
import type { UmbMediaSearchItemModel } from './media.search-provider.js';
|
||||
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import type { UmbApi } from '@umbraco-cms/backoffice/extension-api';
|
||||
|
||||
export class UmbMediaSearchRepository
|
||||
extends UmbControllerBase
|
||||
implements UmbSearchRepository<UmbMediaSearchItemModel>, UmbApi
|
||||
{
|
||||
#dataSource: UmbMediaSearchServerDataSource;
|
||||
|
||||
constructor(host: UmbControllerHost) {
|
||||
super(host);
|
||||
|
||||
this.#dataSource = new UmbMediaSearchServerDataSource(this);
|
||||
}
|
||||
|
||||
search(args: UmbSearchRequestArgs) {
|
||||
return this.#dataSource.search(args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
import type { UmbSearchDataSource, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search';
|
||||
import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js';
|
||||
import type { UmbMediaSearchItemModel } from './media.search-provider.js';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { MediaService } from '@umbraco-cms/backoffice/external/backend-api';
|
||||
import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';
|
||||
|
||||
/**
|
||||
* A data source for the Rollback that fetches data from the server
|
||||
* @export
|
||||
* @class UmbMediaSearchServerDataSource
|
||||
* @implements {RepositoryDetailDataSource}
|
||||
*/
|
||||
export class UmbMediaSearchServerDataSource implements UmbSearchDataSource<UmbMediaSearchItemModel> {
|
||||
#host: UmbControllerHost;
|
||||
|
||||
/**
|
||||
* Creates an instance of UmbMediaSearchServerDataSource.
|
||||
* @param {UmbControllerHost} host
|
||||
* @memberof UmbMediaSearchServerDataSource
|
||||
*/
|
||||
constructor(host: UmbControllerHost) {
|
||||
this.#host = host;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of versions for a data
|
||||
* @return {*}
|
||||
* @memberof UmbMediaSearchServerDataSource
|
||||
*/
|
||||
async search(args: UmbSearchRequestArgs) {
|
||||
const { data, error } = await tryExecuteAndNotify(
|
||||
this.#host,
|
||||
MediaService.getItemMediaSearch({
|
||||
query: args.query,
|
||||
}),
|
||||
);
|
||||
|
||||
if (data) {
|
||||
const mappedItems: Array<UmbMediaSearchItemModel> = data.items.map((item) => {
|
||||
return {
|
||||
entityType: UMB_MEDIA_ENTITY_TYPE,
|
||||
unique: item.id,
|
||||
isTrashed: item.isTrashed,
|
||||
mediaType: {
|
||||
unique: item.mediaType.id,
|
||||
icon: item.mediaType.icon,
|
||||
collection: item.mediaType.collection ? { unique: item.mediaType.collection.id } : null,
|
||||
},
|
||||
variants: item.variants.map((variant) => {
|
||||
return {
|
||||
culture: variant.culture || null,
|
||||
name: variant.name,
|
||||
};
|
||||
}),
|
||||
name: item.variants[0]?.name, // TODO: get correct variant name
|
||||
};
|
||||
});
|
||||
|
||||
return { data: { items: mappedItems, total: data.total } };
|
||||
}
|
||||
|
||||
return { error };
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
import type { UmbSearchProvider, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search';
|
||||
import type { UmbMediaItemModel } from '../index.js';
|
||||
import { UmbMediaSearchRepository } from './media-search.repository.js';
|
||||
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
|
||||
|
||||
export interface UmbMediaSearchItemModel extends UmbMediaItemModel {}
|
||||
|
||||
export class UmbMediaSearchProvider extends UmbControllerBase implements UmbSearchProvider<UmbMediaSearchItemModel> {
|
||||
#repository = new UmbMediaSearchRepository(this);
|
||||
|
||||
async search(args: UmbSearchRequestArgs) {
|
||||
return this.#repository.search(args);
|
||||
}
|
||||
|
||||
destroy(): void {
|
||||
this.#repository.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
export { UmbMediaSearchProvider as api };
|
||||
Reference in New Issue
Block a user