Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion src/Umbraco.Community.BlockPreview.UI/src/api/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// This file is auto-generated by @hey-api/openapi-ts

export type * from './types.gen';
export * from './types.gen';
export * from './client.gen';
export * from './sdk.gen';
9 changes: 8 additions & 1 deletion src/Umbraco.Community.BlockPreview.UI/src/api/sdk.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import type { Client, Options as Options2, TDataShape } from './client';
import { client } from './client.gen';
import type { GetGridStylesheetData, GetGridStylesheetResponses, GetGridStylesheetsData, GetGridStylesheetsResponses, GetListStylesheetData, GetListStylesheetResponses, GetListStylesheetsData, GetListStylesheetsResponses, GetRteStylesheetData, GetRteStylesheetResponses, GetRteStylesheetsData, GetRteStylesheetsResponses, GetSettingsData, GetSettingsResponses, GetSingleBlockStylesheetsData, GetSingleBlockStylesheetsResponses, PreviewGridBlockData, PreviewGridBlockResponses, PreviewListBlockData, PreviewListBlockResponses, PreviewRichTextMarkupData, PreviewRichTextMarkupResponses, PreviewSingleBlockData, PreviewSingleBlockResponses } from './types.gen';
import type { GetGridStylesheetData, GetGridStylesheetResponses, GetGridStylesheetsData, GetGridStylesheetsResponses, GetListStylesheetData, GetListStylesheetResponses, GetListStylesheetsData, GetListStylesheetsResponses, GetRteStylesheetData, GetRteStylesheetResponses, GetRteStylesheetsData, GetRteStylesheetsResponses, GetSettingsData, GetSettingsResponses, GetSingleBlockStylesheetsData, GetSingleBlockStylesheetsResponses, GetStylesheetsData, GetStylesheetsResponses, PreviewGridBlockData, PreviewGridBlockResponses, PreviewListBlockData, PreviewListBlockResponses, PreviewRichTextMarkupData, PreviewRichTextMarkupResponses, PreviewSingleBlockData, PreviewSingleBlockResponses } from './types.gen';

export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean> = Options2<TData, ThrowOnError> & {
/**
Expand Down Expand Up @@ -121,6 +121,13 @@ export class BlockPreviewService {
});
}

public static getStylesheets<ThrowOnError extends boolean = true>(options: Options<GetStylesheetsData, ThrowOnError>) {
return (options.client ?? client).get<GetStylesheetsResponses, unknown, ThrowOnError>({
url: '/umbraco/block-preview/api/v1/preview/stylesheets',
...options
});
}

public static getSettings<ThrowOnError extends boolean = true>(options?: Options<GetSettingsData, ThrowOnError>) {
return (options?.client ?? client).get<GetSettingsResponses, unknown, ThrowOnError>({
url: '/umbraco/block-preview/api/v1/settings',
Expand Down
27 changes: 27 additions & 0 deletions src/Umbraco.Community.BlockPreview.UI/src/api/types.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ export type BlockPreviewOptions = {
singleBlock: BlockTypeSettings;
};

export enum BlockType {
BLOCK_GRID = 'BlockGrid',
BLOCK_LIST = 'BlockList',
RICH_TEXT = 'RichText',
SINGLE_BLOCK = 'SingleBlock'
}

export type BlockTypeSettings = {
enabled: boolean;
viewLocations?: Array<string> | null;
Expand Down Expand Up @@ -253,6 +260,26 @@ export type GetSingleBlockStylesheetsResponses = {

export type GetSingleBlockStylesheetsResponse = GetSingleBlockStylesheetsResponses[keyof GetSingleBlockStylesheetsResponses];

export type GetStylesheetsData = {
body?: never;
path?: never;
query: {
blockType: BlockType;
nodeKey?: string;
documentTypeUnique?: string;
};
url: '/umbraco/block-preview/api/v1/preview/stylesheets';
};

export type GetStylesheetsResponses = {
/**
* OK
*/
200: Array<string>;
};

export type GetStylesheetsResponse = GetStylesheetsResponses[keyof GetStylesheetsResponses];

export type GetSettingsData = {
body?: never;
path?: never;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { BlockPreviewBaseElement } from './block-preview-base.element';
import { BlockGridContext } from './types';
import { PreviewDataSource } from '../repository';
import { BlockType } from '../api';
import { css, customElement, property } from "@umbraco-cms/backoffice/external/lit";
import { UMB_BLOCK_GRID_ENTRY_CONTEXT, UMB_BLOCK_GRID_MANAGER_CONTEXT, UmbBlockGridLayoutModel, UmbBlockGridValueModel, UmbBlockGridLayoutAreaItemModel } from "@umbraco-cms/backoffice/block-grid";
import { UMB_CONTENT_WORKSPACE_CONTEXT } from "@umbraco-cms/backoffice/content";
Expand Down Expand Up @@ -230,7 +231,7 @@ export class BlockGridPreviewCustomView extends BlockPreviewBaseElement<BlockGri
}

protected async fetchStylesheets() {
const { data } = await this.#previewDataSource.getGridStylesheets({
const { data } = await this.#previewDataSource.getStylesheets(BlockType.BLOCK_GRID, {
documentTypeUnique: this._blockContext.documentTypeUnique,
nodeKey: this._blockContext.unique
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { BlockPreviewBaseElement } from './block-preview-base.element';
import { BlockListContext } from './types';
import { PreviewDataSource } from '../repository';
import { BlockType } from '../api';
import { css, customElement, property, state } from "@umbraco-cms/backoffice/external/lit";
import { UMB_BLOCK_LIST_ENTRY_CONTEXT, UMB_BLOCK_LIST_MANAGER_CONTEXT, UmbBlockListValueModel } from "@umbraco-cms/backoffice/block-list";
import { UMB_CONTENT_WORKSPACE_CONTEXT } from "@umbraco-cms/backoffice/content";
Expand Down Expand Up @@ -175,7 +176,7 @@ export class BlockListPreviewCustomView extends BlockPreviewBaseElement<BlockLis
}

protected async fetchStylesheets() {
const { data } = await this.#previewDataSource.getListStylesheets({
const { data } = await this.#previewDataSource.getStylesheets(BlockType.BLOCK_LIST, {
documentTypeUnique: this._blockContext.documentTypeUnique,
nodeKey: this._blockContext.unique
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { BlockPreviewBaseElement } from './block-preview-base.element';
import { BlockContext } from './types';
import { PreviewDataSource } from '../repository';
import { BlockType } from '../api';
import { css, customElement, property, state } from "@umbraco-cms/backoffice/external/lit";
import { UMB_BLOCK_SINGLE_ENTRY_CONTEXT, UMB_BLOCK_SINGLE_MANAGER_CONTEXT, UmbBlockSingleValueModel } from "@umbraco-cms/backoffice/block-single";
import { UMB_CONTENT_WORKSPACE_CONTEXT } from "@umbraco-cms/backoffice/content";
Expand Down Expand Up @@ -172,7 +173,7 @@ export class BlockSinglePreviewCustomView extends BlockPreviewBaseElement<BlockC
}

protected async fetchStylesheets() {
const { data } = await this.#previewDataSource.getSingleBlockStylesheets({
const { data } = await this.#previewDataSource.getStylesheets(BlockType.SINGLE_BLOCK, {
documentTypeUnique: this._blockContext.documentTypeUnique,
nodeKey: this._blockContext.unique
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { BlockPreviewBaseElement } from './block-preview-base.element';
import { BlockContext } from './types';
import { PreviewDataSource } from '../repository';
import { BlockType } from '../api';
import { customElement, property, state } from "@umbraco-cms/backoffice/external/lit";
import { UMB_BLOCK_RTE_ENTRY_CONTEXT, UMB_BLOCK_RTE_MANAGER_CONTEXT, UmbBlockRteValueModel } from "@umbraco-cms/backoffice/block-rte";
import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/document';
Expand Down Expand Up @@ -178,7 +179,7 @@ export class RichTextPreviewCustomView extends BlockPreviewBaseElement<BlockCont
}

protected async fetchStylesheets() {
const { data } = await this.#previewDataSource.getRteStylesheets({
const { data } = await this.#previewDataSource.getStylesheets(BlockType.RICH_TEXT, {
documentTypeUnique: this._blockContext.documentTypeUnique,
nodeKey: this._blockContext.unique
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { UmbDataSourceResponse } from "@umbraco-cms/backoffice/repository";
import { BlockPreviewService } from "../api";
import { BlockPreviewService, BlockType } from "../api";
import { UmbControllerHost } from "@umbraco-cms/backoffice/controller-api";
import { tryExecute } from "@umbraco-cms/backoffice/resources";

Expand Down Expand Up @@ -37,6 +37,7 @@ export interface IPreviewDataSource {
getListStylesheets(query: StylesheetQuery): Promise<UmbDataSourceResponse<string[]>>;
getSingleBlockStylesheets(query: StylesheetQuery): Promise<UmbDataSourceResponse<string[]>>;
getRteStylesheets(query: StylesheetQuery): Promise<UmbDataSourceResponse<string[]>>;
getStylesheets(blockType: BlockType, query: StylesheetQuery): Promise<UmbDataSourceResponse<string[]>>;
}

export class PreviewDataSource implements IPreviewDataSource {
Expand Down Expand Up @@ -77,4 +78,8 @@ export class PreviewDataSource implements IPreviewDataSource {
async getRteStylesheets(query: StylesheetQuery): Promise<UmbDataSourceResponse<string[]>> {
return await tryExecute(this.#host, BlockPreviewService.getRteStylesheets({ query }));
}

async getStylesheets(blockType: BlockType, query: StylesheetQuery): Promise<UmbDataSourceResponse<string[]>> {
return await tryExecute(this.#host, BlockPreviewService.getStylesheets({ query: { ...query, blockType } }));
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Umbraco.Cms.Core.Cache;
Expand Down Expand Up @@ -194,18 +195,10 @@ private async Task<IActionResult> RunPreviewAsync(
/// <returns>A list of stylesheet paths if configured; otherwise, an empty list.</returns>
[HttpGet("preview/single/stylesheets")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable<string>))]
public async Task<IActionResult> GetSingleBlockStylesheets(
public Task<IActionResult> GetSingleBlockStylesheets(
[FromQuery] Guid nodeKey = default,
[FromQuery] Guid documentTypeUnique = default)
{
IPublishedContent? content = GetPublishedContent(nodeKey, documentTypeUnique);

await _requestEnricher.EnrichAsync(HttpContext, content);

var stylesheetPaths = await _blockPreviewService.GetStylesheetPaths(BlockType.SingleBlock, content!, ControllerContext);

return Ok(stylesheetPaths);
}
=> GetStylesheets(BlockType.SingleBlock, nodeKey, documentTypeUnique);

/// <summary>
/// Loads the in-memory settings from appsettings.json
Expand Down Expand Up @@ -272,6 +265,34 @@ private static BlockTypeSettings ApplyIgnoredContentTypes(BlockTypeSettings orig
}


/// <summary>
/// Retrieves the stylesheet paths for a block preview of the given type.
/// </summary>
/// <param name="blockType">The block editor type.</param>
/// <param name="nodeKey">The key of the node.</param>
/// <param name="documentTypeUnique">The unique identifier for the document type.</param>
/// <returns>A list of stylesheet paths if configured; otherwise, an empty list.</returns>
[HttpGet("preview/stylesheets")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable<string>))]
public async Task<IActionResult> GetStylesheets(
[FromQuery][BindRequired] BlockType blockType,
[FromQuery] Guid nodeKey = default,
[FromQuery] Guid documentTypeUnique = default)
{
if (!Enum.IsDefined(typeof(BlockType), blockType))
{
return BadRequest("Invalid blockType.");
}

IPublishedContent? content = GetPublishedContent(nodeKey, documentTypeUnique);

await _requestEnricher.EnrichAsync(HttpContext, content);

var stylesheetPaths = await _blockPreviewService.GetStylesheetPaths(blockType, content!, ControllerContext);

return Ok(stylesheetPaths);
}

/// <summary>
/// Retrieves the stylesheet path for a grid block preview.
/// </summary>
Expand Down Expand Up @@ -308,18 +329,10 @@ public async Task<IActionResult> GetGridStylesheet(
/// <returns>A list of stylesheet paths if configured; otherwise, a 404 response.</returns>
[HttpGet("preview/grid/stylesheets")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable<string>))]
public async Task<IActionResult> GetGridStylesheets(
public Task<IActionResult> GetGridStylesheets(
[FromQuery] Guid nodeKey = default,
[FromQuery] Guid documentTypeUnique = default)
{
IPublishedContent? content = GetPublishedContent(nodeKey, documentTypeUnique);

await _requestEnricher.EnrichAsync(HttpContext, content);

var stylesheetPaths = await _blockPreviewService.GetStylesheetPaths(BlockType.BlockGrid, content!, ControllerContext);

return Ok(stylesheetPaths);
}
=> GetStylesheets(BlockType.BlockGrid, nodeKey, documentTypeUnique);

/// <summary>
/// Retrieves the stylesheet path for a list block preview.
Expand Down Expand Up @@ -357,18 +370,10 @@ public async Task<IActionResult> GetListStylesheet(
/// <returns>A list of stylesheet paths if configured; otherwise, a 404 response.</returns>
[HttpGet("preview/list/stylesheets")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable<string>))]
public async Task<IActionResult> GetListStylesheets(
public Task<IActionResult> GetListStylesheets(
[FromQuery] Guid nodeKey = default,
[FromQuery] Guid documentTypeUnique = default)
{
IPublishedContent? content = GetPublishedContent(nodeKey, documentTypeUnique);

await _requestEnricher.EnrichAsync(HttpContext, content);

var stylesheetPaths = await _blockPreviewService.GetStylesheetPaths(BlockType.BlockList, content!, ControllerContext);

return Ok(stylesheetPaths);
}
=> GetStylesheets(BlockType.BlockList, nodeKey, documentTypeUnique);

/// <summary>
/// Retrieves the stylesheet path for a rich text block preview.
Expand Down Expand Up @@ -406,18 +411,10 @@ public async Task<IActionResult> GetRteStylesheet(
/// <returns>A list of stylesheet paths if configured; otherwise, a 404 response.</returns>
[HttpGet("preview/rte/stylesheets")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable<string>))]
public async Task<IActionResult> GetRteStylesheets(
public Task<IActionResult> GetRteStylesheets(
[FromQuery] Guid nodeKey = default,
[FromQuery] Guid documentTypeUnique = default)
{
IPublishedContent? content = GetPublishedContent(nodeKey, documentTypeUnique);

await _requestEnricher.EnrichAsync(HttpContext, content);

var stylesheetPaths = await _blockPreviewService.GetStylesheetPaths(BlockType.RichText, content!, ControllerContext);

return Ok(stylesheetPaths);
}
=> GetStylesheets(BlockType.RichText, nodeKey, documentTypeUnique);
#endregion

#region Private
Expand Down
Loading