Adds searchResultItem element for Media items (#19058)

* Adds `searchResultItem` for Media

Includes "trashed" state tag

* Removes trailing whitespace from manifest name

---------

Co-authored-by: Andy Butland <abutland73@gmail.com>
This commit is contained in:
Lee Kelleher
2025-04-17 08:57:19 +01:00
committed by GitHub
parent 38af101605
commit b1795da0ee
2 changed files with 67 additions and 0 deletions

View File

@@ -16,6 +16,7 @@ export const manifests: Array<UmbExtensionManifest> = [
name: 'Media Search Result Item',
alias: 'Umb.SearchResultItem.Media',
type: 'searchResultItem',
element: () => import('./media-search-result-item.element.js'),
forEntityTypes: [UMB_MEDIA_ENTITY_TYPE],
},
];

View File

@@ -0,0 +1,66 @@
import type { UmbMediaItemModel } from '../repository/types.js';
import { classMap, css, customElement, html, nothing, property, when } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import type { UmbSearchResultItemModel } from '@umbraco-cms/backoffice/search';
@customElement('umb-media-search-result-item')
export class UmbMediaSearchResultItemElement extends UmbLitElement {
@property({ type: Object })
item?: UmbSearchResultItemModel & UmbMediaItemModel;
override render() {
if (!this.item) return nothing;
const classes = { trashed: this.item.isTrashed };
return html`
${when(
this.item.mediaType.icon ?? this.item.icon,
(icon) => html`<umb-icon name=${icon}></umb-icon>`,
() => html`<uui-icon name="icon-picture"></uui-icon>`,
)}
<span class=${classMap(classes)}>${this.item.name}</span>
<div class="extra">
${when(
this.item.isTrashed,
() => html`
<uui-tag look="secondary">
<umb-localize key="mediaPicker_trashed">Trashed</umb-localize>
</uui-tag>
`,
)}
</div>
`;
}
static override styles = [
css`
:host {
border-radius: var(--uui-border-radius);
outline-offset: -3px;
padding: var(--uui-size-space-3) var(--uui-size-space-5);
display: flex;
gap: var(--uui-size-space-3);
align-items: center;
width: 100%;
> span {
flex: 1;
&.trashed {
text-decoration: line-through;
opacity: 0.6;
}
}
}
`,
];
}
export { UmbMediaSearchResultItemElement as element };
declare global {
interface HTMLElementTagNameMap {
'umb-media-search-result-item': UmbMediaSearchResultItemElement;
}
}