From 69607d2ff41fc28af9c3ac6940ef02d4e7688f98 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Thu, 2 Oct 2025 09:55:12 +0100 Subject: [PATCH 01/16] Re-generate TypeScript client from Management API --- .../src/packages/core/backend-api/sdk.gen.ts | 18 ++++++- .../packages/core/backend-api/types.gen.ts | 49 ++++++++++++++++++- 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/sdk.gen.ts b/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/sdk.gen.ts index 9af56c623559..d8a4ab58d567 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/sdk.gen.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/sdk.gen.ts @@ -1,7 +1,7 @@ // This file is auto-generated by @hey-api/openapi-ts import { type Options as ClientOptions, type TDataShape, type Client, formDataBodySerializer } from './client'; -import type { GetCultureData, GetCultureResponses, GetCultureErrors, PostDataTypeData, PostDataTypeResponses, PostDataTypeErrors, DeleteDataTypeByIdData, DeleteDataTypeByIdResponses, DeleteDataTypeByIdErrors, GetDataTypeByIdData, GetDataTypeByIdResponses, GetDataTypeByIdErrors, PutDataTypeByIdData, PutDataTypeByIdResponses, PutDataTypeByIdErrors, PostDataTypeByIdCopyData, PostDataTypeByIdCopyResponses, PostDataTypeByIdCopyErrors, GetDataTypeByIdIsUsedData, GetDataTypeByIdIsUsedResponses, GetDataTypeByIdIsUsedErrors, PutDataTypeByIdMoveData, PutDataTypeByIdMoveResponses, PutDataTypeByIdMoveErrors, GetDataTypeByIdReferencedByData, GetDataTypeByIdReferencedByResponses, GetDataTypeByIdReferencedByErrors, GetDataTypeConfigurationData, GetDataTypeConfigurationResponses, GetDataTypeConfigurationErrors, PostDataTypeFolderData, PostDataTypeFolderResponses, PostDataTypeFolderErrors, DeleteDataTypeFolderByIdData, DeleteDataTypeFolderByIdResponses, DeleteDataTypeFolderByIdErrors, GetDataTypeFolderByIdData, GetDataTypeFolderByIdResponses, GetDataTypeFolderByIdErrors, PutDataTypeFolderByIdData, PutDataTypeFolderByIdResponses, PutDataTypeFolderByIdErrors, GetFilterDataTypeData, GetFilterDataTypeResponses, GetFilterDataTypeErrors, GetItemDataTypeData, GetItemDataTypeResponses, GetItemDataTypeErrors, GetItemDataTypeSearchData, GetItemDataTypeSearchResponses, GetItemDataTypeSearchErrors, GetTreeDataTypeAncestorsData, GetTreeDataTypeAncestorsResponses, GetTreeDataTypeAncestorsErrors, GetTreeDataTypeChildrenData, GetTreeDataTypeChildrenResponses, GetTreeDataTypeChildrenErrors, GetTreeDataTypeRootData, GetTreeDataTypeRootResponses, GetTreeDataTypeRootErrors, GetTreeDataTypeSiblingsData, GetTreeDataTypeSiblingsResponses, GetTreeDataTypeSiblingsErrors, GetDictionaryData, GetDictionaryResponses, GetDictionaryErrors, PostDictionaryData, PostDictionaryResponses, PostDictionaryErrors, DeleteDictionaryByIdData, DeleteDictionaryByIdResponses, DeleteDictionaryByIdErrors, GetDictionaryByIdData, GetDictionaryByIdResponses, GetDictionaryByIdErrors, PutDictionaryByIdData, PutDictionaryByIdResponses, PutDictionaryByIdErrors, GetDictionaryByIdExportData, GetDictionaryByIdExportResponses, GetDictionaryByIdExportErrors, PutDictionaryByIdMoveData, PutDictionaryByIdMoveResponses, PutDictionaryByIdMoveErrors, PostDictionaryImportData, PostDictionaryImportResponses, PostDictionaryImportErrors, GetItemDictionaryData, GetItemDictionaryResponses, GetItemDictionaryErrors, GetTreeDictionaryAncestorsData, GetTreeDictionaryAncestorsResponses, GetTreeDictionaryAncestorsErrors, GetTreeDictionaryChildrenData, GetTreeDictionaryChildrenResponses, GetTreeDictionaryChildrenErrors, GetTreeDictionaryRootData, GetTreeDictionaryRootResponses, GetTreeDictionaryRootErrors, PostDocumentBlueprintData, PostDocumentBlueprintResponses, PostDocumentBlueprintErrors, DeleteDocumentBlueprintByIdData, DeleteDocumentBlueprintByIdResponses, DeleteDocumentBlueprintByIdErrors, GetDocumentBlueprintByIdData, GetDocumentBlueprintByIdResponses, GetDocumentBlueprintByIdErrors, PutDocumentBlueprintByIdData, PutDocumentBlueprintByIdResponses, PutDocumentBlueprintByIdErrors, PutDocumentBlueprintByIdMoveData, PutDocumentBlueprintByIdMoveResponses, PutDocumentBlueprintByIdMoveErrors, GetDocumentBlueprintByIdScaffoldData, GetDocumentBlueprintByIdScaffoldResponses, GetDocumentBlueprintByIdScaffoldErrors, PostDocumentBlueprintFolderData, PostDocumentBlueprintFolderResponses, PostDocumentBlueprintFolderErrors, DeleteDocumentBlueprintFolderByIdData, DeleteDocumentBlueprintFolderByIdResponses, DeleteDocumentBlueprintFolderByIdErrors, GetDocumentBlueprintFolderByIdData, GetDocumentBlueprintFolderByIdResponses, GetDocumentBlueprintFolderByIdErrors, PutDocumentBlueprintFolderByIdData, PutDocumentBlueprintFolderByIdResponses, PutDocumentBlueprintFolderByIdErrors, PostDocumentBlueprintFromDocumentData, PostDocumentBlueprintFromDocumentResponses, PostDocumentBlueprintFromDocumentErrors, GetItemDocumentBlueprintData, GetItemDocumentBlueprintResponses, GetItemDocumentBlueprintErrors, GetTreeDocumentBlueprintAncestorsData, GetTreeDocumentBlueprintAncestorsResponses, GetTreeDocumentBlueprintAncestorsErrors, GetTreeDocumentBlueprintChildrenData, GetTreeDocumentBlueprintChildrenResponses, GetTreeDocumentBlueprintChildrenErrors, GetTreeDocumentBlueprintRootData, GetTreeDocumentBlueprintRootResponses, GetTreeDocumentBlueprintRootErrors, GetTreeDocumentBlueprintSiblingsData, GetTreeDocumentBlueprintSiblingsResponses, GetTreeDocumentBlueprintSiblingsErrors, PostDocumentTypeData, PostDocumentTypeResponses, PostDocumentTypeErrors, DeleteDocumentTypeByIdData, DeleteDocumentTypeByIdResponses, DeleteDocumentTypeByIdErrors, GetDocumentTypeByIdData, GetDocumentTypeByIdResponses, GetDocumentTypeByIdErrors, PutDocumentTypeByIdData, PutDocumentTypeByIdResponses, PutDocumentTypeByIdErrors, GetDocumentTypeByIdAllowedChildrenData, GetDocumentTypeByIdAllowedChildrenResponses, GetDocumentTypeByIdAllowedChildrenErrors, GetDocumentTypeByIdBlueprintData, GetDocumentTypeByIdBlueprintResponses, GetDocumentTypeByIdBlueprintErrors, GetDocumentTypeByIdCompositionReferencesData, GetDocumentTypeByIdCompositionReferencesResponses, GetDocumentTypeByIdCompositionReferencesErrors, PostDocumentTypeByIdCopyData, PostDocumentTypeByIdCopyResponses, PostDocumentTypeByIdCopyErrors, GetDocumentTypeByIdExportData, GetDocumentTypeByIdExportResponses, GetDocumentTypeByIdExportErrors, PutDocumentTypeByIdImportData, PutDocumentTypeByIdImportResponses, PutDocumentTypeByIdImportErrors, PutDocumentTypeByIdMoveData, PutDocumentTypeByIdMoveResponses, PutDocumentTypeByIdMoveErrors, GetDocumentTypeAllowedAtRootData, GetDocumentTypeAllowedAtRootResponses, GetDocumentTypeAllowedAtRootErrors, PostDocumentTypeAvailableCompositionsData, PostDocumentTypeAvailableCompositionsResponses, PostDocumentTypeAvailableCompositionsErrors, GetDocumentTypeConfigurationData, GetDocumentTypeConfigurationResponses, GetDocumentTypeConfigurationErrors, PostDocumentTypeFolderData, PostDocumentTypeFolderResponses, PostDocumentTypeFolderErrors, DeleteDocumentTypeFolderByIdData, DeleteDocumentTypeFolderByIdResponses, DeleteDocumentTypeFolderByIdErrors, GetDocumentTypeFolderByIdData, GetDocumentTypeFolderByIdResponses, GetDocumentTypeFolderByIdErrors, PutDocumentTypeFolderByIdData, PutDocumentTypeFolderByIdResponses, PutDocumentTypeFolderByIdErrors, PostDocumentTypeImportData, PostDocumentTypeImportResponses, PostDocumentTypeImportErrors, GetItemDocumentTypeData, GetItemDocumentTypeResponses, GetItemDocumentTypeErrors, GetItemDocumentTypeSearchData, GetItemDocumentTypeSearchResponses, GetItemDocumentTypeSearchErrors, GetTreeDocumentTypeAncestorsData, GetTreeDocumentTypeAncestorsResponses, GetTreeDocumentTypeAncestorsErrors, GetTreeDocumentTypeChildrenData, GetTreeDocumentTypeChildrenResponses, GetTreeDocumentTypeChildrenErrors, GetTreeDocumentTypeRootData, GetTreeDocumentTypeRootResponses, GetTreeDocumentTypeRootErrors, GetTreeDocumentTypeSiblingsData, GetTreeDocumentTypeSiblingsResponses, GetTreeDocumentTypeSiblingsErrors, GetDocumentVersionData, GetDocumentVersionResponses, GetDocumentVersionErrors, GetDocumentVersionByIdData, GetDocumentVersionByIdResponses, GetDocumentVersionByIdErrors, PutDocumentVersionByIdPreventCleanupData, PutDocumentVersionByIdPreventCleanupResponses, PutDocumentVersionByIdPreventCleanupErrors, PostDocumentVersionByIdRollbackData, PostDocumentVersionByIdRollbackResponses, PostDocumentVersionByIdRollbackErrors, GetCollectionDocumentByIdData, GetCollectionDocumentByIdResponses, GetCollectionDocumentByIdErrors, PostDocumentData, PostDocumentResponses, PostDocumentErrors, DeleteDocumentByIdData, DeleteDocumentByIdResponses, DeleteDocumentByIdErrors, GetDocumentByIdData, GetDocumentByIdResponses, GetDocumentByIdErrors, PutDocumentByIdData, PutDocumentByIdResponses, PutDocumentByIdErrors, GetDocumentByIdAuditLogData, GetDocumentByIdAuditLogResponses, GetDocumentByIdAuditLogErrors, GetDocumentByIdAvailableSegmentOptionsData, GetDocumentByIdAvailableSegmentOptionsResponses, GetDocumentByIdAvailableSegmentOptionsErrors, PostDocumentByIdCopyData, PostDocumentByIdCopyResponses, PostDocumentByIdCopyErrors, GetDocumentByIdDomainsData, GetDocumentByIdDomainsResponses, GetDocumentByIdDomainsErrors, PutDocumentByIdDomainsData, PutDocumentByIdDomainsResponses, PutDocumentByIdDomainsErrors, PutDocumentByIdMoveData, PutDocumentByIdMoveResponses, PutDocumentByIdMoveErrors, PutDocumentByIdMoveToRecycleBinData, PutDocumentByIdMoveToRecycleBinResponses, PutDocumentByIdMoveToRecycleBinErrors, GetDocumentByIdNotificationsData, GetDocumentByIdNotificationsResponses, GetDocumentByIdNotificationsErrors, PutDocumentByIdNotificationsData, PutDocumentByIdNotificationsResponses, PutDocumentByIdNotificationsErrors, DeleteDocumentByIdPublicAccessData, DeleteDocumentByIdPublicAccessResponses, DeleteDocumentByIdPublicAccessErrors, GetDocumentByIdPublicAccessData, GetDocumentByIdPublicAccessResponses, GetDocumentByIdPublicAccessErrors, PostDocumentByIdPublicAccessData, PostDocumentByIdPublicAccessResponses, PostDocumentByIdPublicAccessErrors, PutDocumentByIdPublicAccessData, PutDocumentByIdPublicAccessResponses, PutDocumentByIdPublicAccessErrors, PutDocumentByIdPublishData, PutDocumentByIdPublishResponses, PutDocumentByIdPublishErrors, PutDocumentByIdPublishWithDescendantsData, PutDocumentByIdPublishWithDescendantsResponses, PutDocumentByIdPublishWithDescendantsErrors, GetDocumentByIdPublishWithDescendantsResultByTaskIdData, GetDocumentByIdPublishWithDescendantsResultByTaskIdResponses, GetDocumentByIdPublishWithDescendantsResultByTaskIdErrors, GetDocumentByIdPublishedData, GetDocumentByIdPublishedResponses, GetDocumentByIdPublishedErrors, GetDocumentByIdReferencedByData, GetDocumentByIdReferencedByResponses, GetDocumentByIdReferencedByErrors, GetDocumentByIdReferencedDescendantsData, GetDocumentByIdReferencedDescendantsResponses, GetDocumentByIdReferencedDescendantsErrors, PutDocumentByIdUnpublishData, PutDocumentByIdUnpublishResponses, PutDocumentByIdUnpublishErrors, PutUmbracoManagementApiV11DocumentByIdValidate11Data, PutUmbracoManagementApiV11DocumentByIdValidate11Responses, PutUmbracoManagementApiV11DocumentByIdValidate11Errors, GetDocumentAreReferencedData, GetDocumentAreReferencedResponses, GetDocumentAreReferencedErrors, GetDocumentConfigurationData, GetDocumentConfigurationResponses, GetDocumentConfigurationErrors, PutDocumentSortData, PutDocumentSortResponses, PutDocumentSortErrors, GetDocumentUrlsData, GetDocumentUrlsResponses, GetDocumentUrlsErrors, PostDocumentValidateData, PostDocumentValidateResponses, PostDocumentValidateErrors, GetItemDocumentData, GetItemDocumentResponses, GetItemDocumentErrors, GetItemDocumentSearchData, GetItemDocumentSearchResponses, GetItemDocumentSearchErrors, DeleteRecycleBinDocumentData, DeleteRecycleBinDocumentResponses, DeleteRecycleBinDocumentErrors, DeleteRecycleBinDocumentByIdData, DeleteRecycleBinDocumentByIdResponses, DeleteRecycleBinDocumentByIdErrors, GetRecycleBinDocumentByIdOriginalParentData, GetRecycleBinDocumentByIdOriginalParentResponses, GetRecycleBinDocumentByIdOriginalParentErrors, PutRecycleBinDocumentByIdRestoreData, PutRecycleBinDocumentByIdRestoreResponses, PutRecycleBinDocumentByIdRestoreErrors, GetRecycleBinDocumentChildrenData, GetRecycleBinDocumentChildrenResponses, GetRecycleBinDocumentChildrenErrors, GetRecycleBinDocumentReferencedByData, GetRecycleBinDocumentReferencedByResponses, GetRecycleBinDocumentReferencedByErrors, GetRecycleBinDocumentRootData, GetRecycleBinDocumentRootResponses, GetRecycleBinDocumentRootErrors, GetRecycleBinDocumentSiblingsData, GetRecycleBinDocumentSiblingsResponses, GetRecycleBinDocumentSiblingsErrors, GetTreeDocumentAncestorsData, GetTreeDocumentAncestorsResponses, GetTreeDocumentAncestorsErrors, GetTreeDocumentChildrenData, GetTreeDocumentChildrenResponses, GetTreeDocumentChildrenErrors, GetTreeDocumentRootData, GetTreeDocumentRootResponses, GetTreeDocumentRootErrors, GetTreeDocumentSiblingsData, GetTreeDocumentSiblingsResponses, GetTreeDocumentSiblingsErrors, PostDynamicRootQueryData, PostDynamicRootQueryResponses, PostDynamicRootQueryErrors, GetDynamicRootStepsData, GetDynamicRootStepsResponses, GetDynamicRootStepsErrors, GetHealthCheckGroupData, GetHealthCheckGroupResponses, GetHealthCheckGroupErrors, GetHealthCheckGroupByNameData, GetHealthCheckGroupByNameResponses, GetHealthCheckGroupByNameErrors, PostHealthCheckGroupByNameCheckData, PostHealthCheckGroupByNameCheckResponses, PostHealthCheckGroupByNameCheckErrors, PostHealthCheckExecuteActionData, PostHealthCheckExecuteActionResponses, PostHealthCheckExecuteActionErrors, GetHelpData, GetHelpResponses, GetHelpErrors, GetImagingResizeUrlsData, GetImagingResizeUrlsResponses, GetImagingResizeUrlsErrors, GetImportAnalyzeData, GetImportAnalyzeResponses, GetImportAnalyzeErrors, GetIndexerData, GetIndexerResponses, GetIndexerErrors, GetIndexerByIndexNameData, GetIndexerByIndexNameResponses, GetIndexerByIndexNameErrors, PostIndexerByIndexNameRebuildData, PostIndexerByIndexNameRebuildResponses, PostIndexerByIndexNameRebuildErrors, GetInstallSettingsData, GetInstallSettingsResponses, GetInstallSettingsErrors, PostInstallSetupData, PostInstallSetupResponses, PostInstallSetupErrors, PostInstallValidateDatabaseData, PostInstallValidateDatabaseResponses, PostInstallValidateDatabaseErrors, GetItemLanguageData, GetItemLanguageResponses, GetItemLanguageErrors, GetItemLanguageDefaultData, GetItemLanguageDefaultResponses, GetItemLanguageDefaultErrors, GetLanguageData, GetLanguageResponses, GetLanguageErrors, PostLanguageData, PostLanguageResponses, PostLanguageErrors, DeleteLanguageByIsoCodeData, DeleteLanguageByIsoCodeResponses, DeleteLanguageByIsoCodeErrors, GetLanguageByIsoCodeData, GetLanguageByIsoCodeResponses, GetLanguageByIsoCodeErrors, PutLanguageByIsoCodeData, PutLanguageByIsoCodeResponses, PutLanguageByIsoCodeErrors, GetLogViewerLevelData, GetLogViewerLevelResponses, GetLogViewerLevelErrors, GetLogViewerLevelCountData, GetLogViewerLevelCountResponses, GetLogViewerLevelCountErrors, GetLogViewerLogData, GetLogViewerLogResponses, GetLogViewerLogErrors, GetLogViewerMessageTemplateData, GetLogViewerMessageTemplateResponses, GetLogViewerMessageTemplateErrors, GetLogViewerSavedSearchData, GetLogViewerSavedSearchResponses, GetLogViewerSavedSearchErrors, PostLogViewerSavedSearchData, PostLogViewerSavedSearchResponses, PostLogViewerSavedSearchErrors, DeleteLogViewerSavedSearchByNameData, DeleteLogViewerSavedSearchByNameResponses, DeleteLogViewerSavedSearchByNameErrors, GetLogViewerSavedSearchByNameData, GetLogViewerSavedSearchByNameResponses, GetLogViewerSavedSearchByNameErrors, GetLogViewerValidateLogsSizeData, GetLogViewerValidateLogsSizeResponses, GetLogViewerValidateLogsSizeErrors, GetManifestManifestData, GetManifestManifestResponses, GetManifestManifestErrors, GetManifestManifestPrivateData, GetManifestManifestPrivateResponses, GetManifestManifestPrivateErrors, GetManifestManifestPublicData, GetManifestManifestPublicResponses, GetItemMediaTypeData, GetItemMediaTypeResponses, GetItemMediaTypeErrors, GetItemMediaTypeAllowedData, GetItemMediaTypeAllowedResponses, GetItemMediaTypeAllowedErrors, GetItemMediaTypeFoldersData, GetItemMediaTypeFoldersResponses, GetItemMediaTypeFoldersErrors, GetItemMediaTypeSearchData, GetItemMediaTypeSearchResponses, GetItemMediaTypeSearchErrors, PostMediaTypeData, PostMediaTypeResponses, PostMediaTypeErrors, DeleteMediaTypeByIdData, DeleteMediaTypeByIdResponses, DeleteMediaTypeByIdErrors, GetMediaTypeByIdData, GetMediaTypeByIdResponses, GetMediaTypeByIdErrors, PutMediaTypeByIdData, PutMediaTypeByIdResponses, PutMediaTypeByIdErrors, GetMediaTypeByIdAllowedChildrenData, GetMediaTypeByIdAllowedChildrenResponses, GetMediaTypeByIdAllowedChildrenErrors, GetMediaTypeByIdCompositionReferencesData, GetMediaTypeByIdCompositionReferencesResponses, GetMediaTypeByIdCompositionReferencesErrors, PostMediaTypeByIdCopyData, PostMediaTypeByIdCopyResponses, PostMediaTypeByIdCopyErrors, GetMediaTypeByIdExportData, GetMediaTypeByIdExportResponses, GetMediaTypeByIdExportErrors, PutMediaTypeByIdImportData, PutMediaTypeByIdImportResponses, PutMediaTypeByIdImportErrors, PutMediaTypeByIdMoveData, PutMediaTypeByIdMoveResponses, PutMediaTypeByIdMoveErrors, GetMediaTypeAllowedAtRootData, GetMediaTypeAllowedAtRootResponses, GetMediaTypeAllowedAtRootErrors, PostMediaTypeAvailableCompositionsData, PostMediaTypeAvailableCompositionsResponses, PostMediaTypeAvailableCompositionsErrors, GetMediaTypeConfigurationData, GetMediaTypeConfigurationResponses, GetMediaTypeConfigurationErrors, PostMediaTypeFolderData, PostMediaTypeFolderResponses, PostMediaTypeFolderErrors, DeleteMediaTypeFolderByIdData, DeleteMediaTypeFolderByIdResponses, DeleteMediaTypeFolderByIdErrors, GetMediaTypeFolderByIdData, GetMediaTypeFolderByIdResponses, GetMediaTypeFolderByIdErrors, PutMediaTypeFolderByIdData, PutMediaTypeFolderByIdResponses, PutMediaTypeFolderByIdErrors, PostMediaTypeImportData, PostMediaTypeImportResponses, PostMediaTypeImportErrors, GetTreeMediaTypeAncestorsData, GetTreeMediaTypeAncestorsResponses, GetTreeMediaTypeAncestorsErrors, GetTreeMediaTypeChildrenData, GetTreeMediaTypeChildrenResponses, GetTreeMediaTypeChildrenErrors, GetTreeMediaTypeRootData, GetTreeMediaTypeRootResponses, GetTreeMediaTypeRootErrors, GetTreeMediaTypeSiblingsData, GetTreeMediaTypeSiblingsResponses, GetTreeMediaTypeSiblingsErrors, GetCollectionMediaData, GetCollectionMediaResponses, GetCollectionMediaErrors, GetItemMediaData, GetItemMediaResponses, GetItemMediaErrors, GetItemMediaSearchData, GetItemMediaSearchResponses, GetItemMediaSearchErrors, PostMediaData, PostMediaResponses, PostMediaErrors, DeleteMediaByIdData, DeleteMediaByIdResponses, DeleteMediaByIdErrors, GetMediaByIdData, GetMediaByIdResponses, GetMediaByIdErrors, PutMediaByIdData, PutMediaByIdResponses, PutMediaByIdErrors, GetMediaByIdAuditLogData, GetMediaByIdAuditLogResponses, GetMediaByIdAuditLogErrors, PutMediaByIdMoveData, PutMediaByIdMoveResponses, PutMediaByIdMoveErrors, PutMediaByIdMoveToRecycleBinData, PutMediaByIdMoveToRecycleBinResponses, PutMediaByIdMoveToRecycleBinErrors, GetMediaByIdReferencedByData, GetMediaByIdReferencedByResponses, GetMediaByIdReferencedByErrors, GetMediaByIdReferencedDescendantsData, GetMediaByIdReferencedDescendantsResponses, GetMediaByIdReferencedDescendantsErrors, PutMediaByIdValidateData, PutMediaByIdValidateResponses, PutMediaByIdValidateErrors, GetMediaAreReferencedData, GetMediaAreReferencedResponses, GetMediaAreReferencedErrors, GetMediaConfigurationData, GetMediaConfigurationResponses, GetMediaConfigurationErrors, PutMediaSortData, PutMediaSortResponses, PutMediaSortErrors, GetMediaUrlsData, GetMediaUrlsResponses, GetMediaUrlsErrors, PostMediaValidateData, PostMediaValidateResponses, PostMediaValidateErrors, DeleteRecycleBinMediaData, DeleteRecycleBinMediaResponses, DeleteRecycleBinMediaErrors, DeleteRecycleBinMediaByIdData, DeleteRecycleBinMediaByIdResponses, DeleteRecycleBinMediaByIdErrors, GetRecycleBinMediaByIdOriginalParentData, GetRecycleBinMediaByIdOriginalParentResponses, GetRecycleBinMediaByIdOriginalParentErrors, PutRecycleBinMediaByIdRestoreData, PutRecycleBinMediaByIdRestoreResponses, PutRecycleBinMediaByIdRestoreErrors, GetRecycleBinMediaChildrenData, GetRecycleBinMediaChildrenResponses, GetRecycleBinMediaChildrenErrors, GetRecycleBinMediaReferencedByData, GetRecycleBinMediaReferencedByResponses, GetRecycleBinMediaReferencedByErrors, GetRecycleBinMediaRootData, GetRecycleBinMediaRootResponses, GetRecycleBinMediaRootErrors, GetRecycleBinMediaSiblingsData, GetRecycleBinMediaSiblingsResponses, GetRecycleBinMediaSiblingsErrors, GetTreeMediaAncestorsData, GetTreeMediaAncestorsResponses, GetTreeMediaAncestorsErrors, GetTreeMediaChildrenData, GetTreeMediaChildrenResponses, GetTreeMediaChildrenErrors, GetTreeMediaRootData, GetTreeMediaRootResponses, GetTreeMediaRootErrors, GetTreeMediaSiblingsData, GetTreeMediaSiblingsResponses, GetTreeMediaSiblingsErrors, GetItemMemberGroupData, GetItemMemberGroupResponses, GetItemMemberGroupErrors, GetMemberGroupData, GetMemberGroupResponses, GetMemberGroupErrors, PostMemberGroupData, PostMemberGroupResponses, PostMemberGroupErrors, DeleteMemberGroupByIdData, DeleteMemberGroupByIdResponses, DeleteMemberGroupByIdErrors, GetMemberGroupByIdData, GetMemberGroupByIdResponses, GetMemberGroupByIdErrors, PutMemberGroupByIdData, PutMemberGroupByIdResponses, PutMemberGroupByIdErrors, GetTreeMemberGroupRootData, GetTreeMemberGroupRootResponses, GetTreeMemberGroupRootErrors, GetItemMemberTypeData, GetItemMemberTypeResponses, GetItemMemberTypeErrors, GetItemMemberTypeSearchData, GetItemMemberTypeSearchResponses, GetItemMemberTypeSearchErrors, PostMemberTypeData, PostMemberTypeResponses, PostMemberTypeErrors, DeleteMemberTypeByIdData, DeleteMemberTypeByIdResponses, DeleteMemberTypeByIdErrors, GetMemberTypeByIdData, GetMemberTypeByIdResponses, GetMemberTypeByIdErrors, PutMemberTypeByIdData, PutMemberTypeByIdResponses, PutMemberTypeByIdErrors, GetMemberTypeByIdCompositionReferencesData, GetMemberTypeByIdCompositionReferencesResponses, GetMemberTypeByIdCompositionReferencesErrors, PostMemberTypeByIdCopyData, PostMemberTypeByIdCopyResponses, PostMemberTypeByIdCopyErrors, PostMemberTypeAvailableCompositionsData, PostMemberTypeAvailableCompositionsResponses, PostMemberTypeAvailableCompositionsErrors, GetMemberTypeConfigurationData, GetMemberTypeConfigurationResponses, GetMemberTypeConfigurationErrors, GetTreeMemberTypeRootData, GetTreeMemberTypeRootResponses, GetTreeMemberTypeRootErrors, GetTreeMemberTypeSiblingsData, GetTreeMemberTypeSiblingsResponses, GetTreeMemberTypeSiblingsErrors, GetFilterMemberData, GetFilterMemberResponses, GetFilterMemberErrors, GetItemMemberData, GetItemMemberResponses, GetItemMemberErrors, GetItemMemberSearchData, GetItemMemberSearchResponses, GetItemMemberSearchErrors, PostMemberData, PostMemberResponses, PostMemberErrors, DeleteMemberByIdData, DeleteMemberByIdResponses, DeleteMemberByIdErrors, GetMemberByIdData, GetMemberByIdResponses, GetMemberByIdErrors, PutMemberByIdData, PutMemberByIdResponses, PutMemberByIdErrors, GetMemberByIdReferencedByData, GetMemberByIdReferencedByResponses, GetMemberByIdReferencedByErrors, GetMemberByIdReferencedDescendantsData, GetMemberByIdReferencedDescendantsResponses, GetMemberByIdReferencedDescendantsErrors, PutMemberByIdValidateData, PutMemberByIdValidateResponses, PutMemberByIdValidateErrors, GetMemberAreReferencedData, GetMemberAreReferencedResponses, GetMemberAreReferencedErrors, GetMemberConfigurationData, GetMemberConfigurationResponses, GetMemberConfigurationErrors, PostMemberValidateData, PostMemberValidateResponses, PostMemberValidateErrors, PostModelsBuilderBuildData, PostModelsBuilderBuildResponses, PostModelsBuilderBuildErrors, GetModelsBuilderDashboardData, GetModelsBuilderDashboardResponses, GetModelsBuilderDashboardErrors, GetModelsBuilderStatusData, GetModelsBuilderStatusResponses, GetModelsBuilderStatusErrors, GetObjectTypesData, GetObjectTypesResponses, GetObjectTypesErrors, GetOembedQueryData, GetOembedQueryResponses, GetOembedQueryErrors, PostPackageByNameRunMigrationData, PostPackageByNameRunMigrationResponses, PostPackageByNameRunMigrationErrors, GetPackageConfigurationData, GetPackageConfigurationResponses, GetPackageConfigurationErrors, GetPackageCreatedData, GetPackageCreatedResponses, GetPackageCreatedErrors, PostPackageCreatedData, PostPackageCreatedResponses, PostPackageCreatedErrors, DeletePackageCreatedByIdData, DeletePackageCreatedByIdResponses, DeletePackageCreatedByIdErrors, GetPackageCreatedByIdData, GetPackageCreatedByIdResponses, GetPackageCreatedByIdErrors, PutPackageCreatedByIdData, PutPackageCreatedByIdResponses, PutPackageCreatedByIdErrors, GetPackageCreatedByIdDownloadData, GetPackageCreatedByIdDownloadResponses, GetPackageCreatedByIdDownloadErrors, GetPackageMigrationStatusData, GetPackageMigrationStatusResponses, GetPackageMigrationStatusErrors, GetItemPartialViewData, GetItemPartialViewResponses, GetItemPartialViewErrors, PostPartialViewData, PostPartialViewResponses, PostPartialViewErrors, DeletePartialViewByPathData, DeletePartialViewByPathResponses, DeletePartialViewByPathErrors, GetPartialViewByPathData, GetPartialViewByPathResponses, GetPartialViewByPathErrors, PutPartialViewByPathData, PutPartialViewByPathResponses, PutPartialViewByPathErrors, PutPartialViewByPathRenameData, PutPartialViewByPathRenameResponses, PutPartialViewByPathRenameErrors, PostPartialViewFolderData, PostPartialViewFolderResponses, PostPartialViewFolderErrors, DeletePartialViewFolderByPathData, DeletePartialViewFolderByPathResponses, DeletePartialViewFolderByPathErrors, GetPartialViewFolderByPathData, GetPartialViewFolderByPathResponses, GetPartialViewFolderByPathErrors, GetPartialViewSnippetData, GetPartialViewSnippetResponses, GetPartialViewSnippetErrors, GetPartialViewSnippetByIdData, GetPartialViewSnippetByIdResponses, GetPartialViewSnippetByIdErrors, GetTreePartialViewAncestorsData, GetTreePartialViewAncestorsResponses, GetTreePartialViewAncestorsErrors, GetTreePartialViewChildrenData, GetTreePartialViewChildrenResponses, GetTreePartialViewChildrenErrors, GetTreePartialViewRootData, GetTreePartialViewRootResponses, GetTreePartialViewRootErrors, GetTreePartialViewSiblingsData, GetTreePartialViewSiblingsResponses, GetTreePartialViewSiblingsErrors, DeletePreviewData, DeletePreviewResponses, PostPreviewData, PostPreviewResponses, PostPreviewErrors, GetProfilingStatusData, GetProfilingStatusResponses, GetProfilingStatusErrors, PutProfilingStatusData, PutProfilingStatusResponses, PutProfilingStatusErrors, GetPropertyTypeIsUsedData, GetPropertyTypeIsUsedResponses, GetPropertyTypeIsUsedErrors, PostPublishedCacheRebuildData, PostPublishedCacheRebuildResponses, PostPublishedCacheRebuildErrors, GetPublishedCacheRebuildStatusData, GetPublishedCacheRebuildStatusResponses, GetPublishedCacheRebuildStatusErrors, PostPublishedCacheReloadData, PostPublishedCacheReloadResponses, PostPublishedCacheReloadErrors, GetRedirectManagementData, GetRedirectManagementResponses, GetRedirectManagementErrors, DeleteRedirectManagementByIdData, DeleteRedirectManagementByIdResponses, DeleteRedirectManagementByIdErrors, GetRedirectManagementByIdData, GetRedirectManagementByIdResponses, GetRedirectManagementByIdErrors, GetRedirectManagementStatusData, GetRedirectManagementStatusResponses, GetRedirectManagementStatusErrors, PostRedirectManagementStatusData, PostRedirectManagementStatusResponses, PostRedirectManagementStatusErrors, GetItemRelationTypeData, GetItemRelationTypeResponses, GetItemRelationTypeErrors, GetRelationTypeData, GetRelationTypeResponses, GetRelationTypeErrors, GetRelationTypeByIdData, GetRelationTypeByIdResponses, GetRelationTypeByIdErrors, GetRelationByRelationTypeIdData, GetRelationByRelationTypeIdResponses, GetRelationByRelationTypeIdErrors, GetItemScriptData, GetItemScriptResponses, GetItemScriptErrors, PostScriptData, PostScriptResponses, PostScriptErrors, DeleteScriptByPathData, DeleteScriptByPathResponses, DeleteScriptByPathErrors, GetScriptByPathData, GetScriptByPathResponses, GetScriptByPathErrors, PutScriptByPathData, PutScriptByPathResponses, PutScriptByPathErrors, PutScriptByPathRenameData, PutScriptByPathRenameResponses, PutScriptByPathRenameErrors, PostScriptFolderData, PostScriptFolderResponses, PostScriptFolderErrors, DeleteScriptFolderByPathData, DeleteScriptFolderByPathResponses, DeleteScriptFolderByPathErrors, GetScriptFolderByPathData, GetScriptFolderByPathResponses, GetScriptFolderByPathErrors, GetTreeScriptAncestorsData, GetTreeScriptAncestorsResponses, GetTreeScriptAncestorsErrors, GetTreeScriptChildrenData, GetTreeScriptChildrenResponses, GetTreeScriptChildrenErrors, GetTreeScriptRootData, GetTreeScriptRootResponses, GetTreeScriptRootErrors, GetTreeScriptSiblingsData, GetTreeScriptSiblingsResponses, GetTreeScriptSiblingsErrors, GetSearcherData, GetSearcherResponses, GetSearcherErrors, GetSearcherBySearcherNameQueryData, GetSearcherBySearcherNameQueryResponses, GetSearcherBySearcherNameQueryErrors, GetSecurityConfigurationData, GetSecurityConfigurationResponses, GetSecurityConfigurationErrors, PostSecurityForgotPasswordData, PostSecurityForgotPasswordResponses, PostSecurityForgotPasswordErrors, PostSecurityForgotPasswordResetData, PostSecurityForgotPasswordResetResponses, PostSecurityForgotPasswordResetErrors, PostSecurityForgotPasswordVerifyData, PostSecurityForgotPasswordVerifyResponses, PostSecurityForgotPasswordVerifyErrors, GetSegmentData, GetSegmentResponses, GetSegmentErrors, GetServerConfigurationData, GetServerConfigurationResponses, GetServerInformationData, GetServerInformationResponses, GetServerInformationErrors, GetServerStatusData, GetServerStatusResponses, GetServerStatusErrors, GetServerTroubleshootingData, GetServerTroubleshootingResponses, GetServerTroubleshootingErrors, GetServerUpgradeCheckData, GetServerUpgradeCheckResponses, GetServerUpgradeCheckErrors, GetItemStaticFileData, GetItemStaticFileResponses, GetItemStaticFileErrors, GetTreeStaticFileAncestorsData, GetTreeStaticFileAncestorsResponses, GetTreeStaticFileAncestorsErrors, GetTreeStaticFileChildrenData, GetTreeStaticFileChildrenResponses, GetTreeStaticFileChildrenErrors, GetTreeStaticFileRootData, GetTreeStaticFileRootResponses, GetTreeStaticFileRootErrors, GetItemStylesheetData, GetItemStylesheetResponses, GetItemStylesheetErrors, PostStylesheetData, PostStylesheetResponses, PostStylesheetErrors, DeleteStylesheetByPathData, DeleteStylesheetByPathResponses, DeleteStylesheetByPathErrors, GetStylesheetByPathData, GetStylesheetByPathResponses, GetStylesheetByPathErrors, PutStylesheetByPathData, PutStylesheetByPathResponses, PutStylesheetByPathErrors, PutStylesheetByPathRenameData, PutStylesheetByPathRenameResponses, PutStylesheetByPathRenameErrors, PostStylesheetFolderData, PostStylesheetFolderResponses, PostStylesheetFolderErrors, DeleteStylesheetFolderByPathData, DeleteStylesheetFolderByPathResponses, DeleteStylesheetFolderByPathErrors, GetStylesheetFolderByPathData, GetStylesheetFolderByPathResponses, GetStylesheetFolderByPathErrors, GetTreeStylesheetAncestorsData, GetTreeStylesheetAncestorsResponses, GetTreeStylesheetAncestorsErrors, GetTreeStylesheetChildrenData, GetTreeStylesheetChildrenResponses, GetTreeStylesheetChildrenErrors, GetTreeStylesheetRootData, GetTreeStylesheetRootResponses, GetTreeStylesheetRootErrors, GetTreeStylesheetSiblingsData, GetTreeStylesheetSiblingsResponses, GetTreeStylesheetSiblingsErrors, GetTagData, GetTagResponses, GetTagErrors, GetTelemetryData, GetTelemetryResponses, GetTelemetryErrors, GetTelemetryLevelData, GetTelemetryLevelResponses, GetTelemetryLevelErrors, PostTelemetryLevelData, PostTelemetryLevelResponses, PostTelemetryLevelErrors, GetItemTemplateData, GetItemTemplateResponses, GetItemTemplateErrors, GetItemTemplateSearchData, GetItemTemplateSearchResponses, GetItemTemplateSearchErrors, PostTemplateData, PostTemplateResponses, PostTemplateErrors, DeleteTemplateByIdData, DeleteTemplateByIdResponses, DeleteTemplateByIdErrors, GetTemplateByIdData, GetTemplateByIdResponses, GetTemplateByIdErrors, PutTemplateByIdData, PutTemplateByIdResponses, PutTemplateByIdErrors, GetTemplateConfigurationData, GetTemplateConfigurationResponses, GetTemplateConfigurationErrors, PostTemplateQueryExecuteData, PostTemplateQueryExecuteResponses, PostTemplateQueryExecuteErrors, GetTemplateQuerySettingsData, GetTemplateQuerySettingsResponses, GetTemplateQuerySettingsErrors, GetTreeTemplateAncestorsData, GetTreeTemplateAncestorsResponses, GetTreeTemplateAncestorsErrors, GetTreeTemplateChildrenData, GetTreeTemplateChildrenResponses, GetTreeTemplateChildrenErrors, GetTreeTemplateRootData, GetTreeTemplateRootResponses, GetTreeTemplateRootErrors, GetTreeTemplateSiblingsData, GetTreeTemplateSiblingsResponses, GetTreeTemplateSiblingsErrors, PostTemporaryFileData, PostTemporaryFileResponses, PostTemporaryFileErrors, DeleteTemporaryFileByIdData, DeleteTemporaryFileByIdResponses, DeleteTemporaryFileByIdErrors, GetTemporaryFileByIdData, GetTemporaryFileByIdResponses, GetTemporaryFileByIdErrors, GetTemporaryFileConfigurationData, GetTemporaryFileConfigurationResponses, GetTemporaryFileConfigurationErrors, PostUpgradeAuthorizeData, PostUpgradeAuthorizeResponses, PostUpgradeAuthorizeErrors, GetUpgradeSettingsData, GetUpgradeSettingsResponses, GetUpgradeSettingsErrors, GetUserDataData, GetUserDataResponses, GetUserDataErrors, PostUserDataData, PostUserDataResponses, PostUserDataErrors, PutUserDataData, PutUserDataResponses, PutUserDataErrors, DeleteUserDataByIdData, DeleteUserDataByIdResponses, DeleteUserDataByIdErrors, GetUserDataByIdData, GetUserDataByIdResponses, GetUserDataByIdErrors, GetFilterUserGroupData, GetFilterUserGroupResponses, GetFilterUserGroupErrors, GetItemUserGroupData, GetItemUserGroupResponses, GetItemUserGroupErrors, DeleteUserGroupData, DeleteUserGroupResponses, DeleteUserGroupErrors, GetUserGroupData, GetUserGroupResponses, GetUserGroupErrors, PostUserGroupData, PostUserGroupResponses, PostUserGroupErrors, DeleteUserGroupByIdData, DeleteUserGroupByIdResponses, DeleteUserGroupByIdErrors, GetUserGroupByIdData, GetUserGroupByIdResponses, GetUserGroupByIdErrors, PutUserGroupByIdData, PutUserGroupByIdResponses, PutUserGroupByIdErrors, DeleteUserGroupByIdUsersData, DeleteUserGroupByIdUsersResponses, DeleteUserGroupByIdUsersErrors, PostUserGroupByIdUsersData, PostUserGroupByIdUsersResponses, PostUserGroupByIdUsersErrors, GetFilterUserData, GetFilterUserResponses, GetFilterUserErrors, GetItemUserData, GetItemUserResponses, GetItemUserErrors, DeleteUserData, DeleteUserResponses, DeleteUserErrors, GetUserData, GetUserResponses, GetUserErrors, PostUserData, PostUserResponses, PostUserErrors, DeleteUserByIdData, DeleteUserByIdResponses, DeleteUserByIdErrors, GetUserByIdData, GetUserByIdResponses, GetUserByIdErrors, PutUserByIdData, PutUserByIdResponses, PutUserByIdErrors, GetUserById2FaData, GetUserById2FaResponses, GetUserById2FaErrors, DeleteUserById2FaByProviderNameData, DeleteUserById2FaByProviderNameResponses, DeleteUserById2FaByProviderNameErrors, GetUserByIdCalculateStartNodesData, GetUserByIdCalculateStartNodesResponses, GetUserByIdCalculateStartNodesErrors, PostUserByIdChangePasswordData, PostUserByIdChangePasswordResponses, PostUserByIdChangePasswordErrors, GetUserByIdClientCredentialsData, GetUserByIdClientCredentialsResponses, GetUserByIdClientCredentialsErrors, PostUserByIdClientCredentialsData, PostUserByIdClientCredentialsResponses, PostUserByIdClientCredentialsErrors, DeleteUserByIdClientCredentialsByClientIdData, DeleteUserByIdClientCredentialsByClientIdResponses, DeleteUserByIdClientCredentialsByClientIdErrors, PostUserByIdResetPasswordData, PostUserByIdResetPasswordResponses, PostUserByIdResetPasswordErrors, DeleteUserAvatarByIdData, DeleteUserAvatarByIdResponses, DeleteUserAvatarByIdErrors, PostUserAvatarByIdData, PostUserAvatarByIdResponses, PostUserAvatarByIdErrors, GetUserConfigurationData, GetUserConfigurationResponses, GetUserConfigurationErrors, GetUserCurrentData, GetUserCurrentResponses, GetUserCurrentErrors, GetUserCurrent2FaData, GetUserCurrent2FaResponses, GetUserCurrent2FaErrors, DeleteUserCurrent2FaByProviderNameData, DeleteUserCurrent2FaByProviderNameResponses, DeleteUserCurrent2FaByProviderNameErrors, GetUserCurrent2FaByProviderNameData, GetUserCurrent2FaByProviderNameResponses, GetUserCurrent2FaByProviderNameErrors, PostUserCurrent2FaByProviderNameData, PostUserCurrent2FaByProviderNameResponses, PostUserCurrent2FaByProviderNameErrors, PostUserCurrentAvatarData, PostUserCurrentAvatarResponses, PostUserCurrentAvatarErrors, PostUserCurrentChangePasswordData, PostUserCurrentChangePasswordResponses, PostUserCurrentChangePasswordErrors, GetUserCurrentConfigurationData, GetUserCurrentConfigurationResponses, GetUserCurrentConfigurationErrors, GetUserCurrentLoginProvidersData, GetUserCurrentLoginProvidersResponses, GetUserCurrentLoginProvidersErrors, GetUserCurrentPermissionsData, GetUserCurrentPermissionsResponses, GetUserCurrentPermissionsErrors, GetUserCurrentPermissionsDocumentData, GetUserCurrentPermissionsDocumentResponses, GetUserCurrentPermissionsDocumentErrors, GetUserCurrentPermissionsMediaData, GetUserCurrentPermissionsMediaResponses, GetUserCurrentPermissionsMediaErrors, PostUserDisableData, PostUserDisableResponses, PostUserDisableErrors, PostUserEnableData, PostUserEnableResponses, PostUserEnableErrors, PostUserInviteData, PostUserInviteResponses, PostUserInviteErrors, PostUserInviteCreatePasswordData, PostUserInviteCreatePasswordResponses, PostUserInviteCreatePasswordErrors, PostUserInviteResendData, PostUserInviteResendResponses, PostUserInviteResendErrors, PostUserInviteVerifyData, PostUserInviteVerifyResponses, PostUserInviteVerifyErrors, PostUserSetUserGroupsData, PostUserSetUserGroupsResponses, PostUserSetUserGroupsErrors, PostUserUnlockData, PostUserUnlockResponses, PostUserUnlockErrors, GetItemWebhookData, GetItemWebhookResponses, GetItemWebhookErrors, GetWebhookData, GetWebhookResponses, GetWebhookErrors, PostWebhookData, PostWebhookResponses, PostWebhookErrors, DeleteWebhookByIdData, DeleteWebhookByIdResponses, DeleteWebhookByIdErrors, GetWebhookByIdData, GetWebhookByIdResponses, GetWebhookByIdErrors, PutWebhookByIdData, PutWebhookByIdResponses, PutWebhookByIdErrors, GetWebhookByIdLogsData, GetWebhookByIdLogsResponses, GetWebhookByIdLogsErrors, GetWebhookEventsData, GetWebhookEventsResponses, GetWebhookEventsErrors, GetWebhookLogsData, GetWebhookLogsResponses, GetWebhookLogsErrors } from './types.gen'; +import type { GetCultureData, GetCultureResponses, GetCultureErrors, PostDataTypeData, PostDataTypeResponses, PostDataTypeErrors, DeleteDataTypeByIdData, DeleteDataTypeByIdResponses, DeleteDataTypeByIdErrors, GetDataTypeByIdData, GetDataTypeByIdResponses, GetDataTypeByIdErrors, PutDataTypeByIdData, PutDataTypeByIdResponses, PutDataTypeByIdErrors, PostDataTypeByIdCopyData, PostDataTypeByIdCopyResponses, PostDataTypeByIdCopyErrors, GetDataTypeByIdIsUsedData, GetDataTypeByIdIsUsedResponses, GetDataTypeByIdIsUsedErrors, PutDataTypeByIdMoveData, PutDataTypeByIdMoveResponses, PutDataTypeByIdMoveErrors, GetDataTypeByIdReferencedByData, GetDataTypeByIdReferencedByResponses, GetDataTypeByIdReferencedByErrors, GetDataTypeConfigurationData, GetDataTypeConfigurationResponses, GetDataTypeConfigurationErrors, PostDataTypeFolderData, PostDataTypeFolderResponses, PostDataTypeFolderErrors, DeleteDataTypeFolderByIdData, DeleteDataTypeFolderByIdResponses, DeleteDataTypeFolderByIdErrors, GetDataTypeFolderByIdData, GetDataTypeFolderByIdResponses, GetDataTypeFolderByIdErrors, PutDataTypeFolderByIdData, PutDataTypeFolderByIdResponses, PutDataTypeFolderByIdErrors, GetFilterDataTypeData, GetFilterDataTypeResponses, GetFilterDataTypeErrors, GetItemDataTypeData, GetItemDataTypeResponses, GetItemDataTypeErrors, GetItemDataTypeSearchData, GetItemDataTypeSearchResponses, GetItemDataTypeSearchErrors, GetTreeDataTypeAncestorsData, GetTreeDataTypeAncestorsResponses, GetTreeDataTypeAncestorsErrors, GetTreeDataTypeChildrenData, GetTreeDataTypeChildrenResponses, GetTreeDataTypeChildrenErrors, GetTreeDataTypeRootData, GetTreeDataTypeRootResponses, GetTreeDataTypeRootErrors, GetTreeDataTypeSiblingsData, GetTreeDataTypeSiblingsResponses, GetTreeDataTypeSiblingsErrors, GetDictionaryData, GetDictionaryResponses, GetDictionaryErrors, PostDictionaryData, PostDictionaryResponses, PostDictionaryErrors, DeleteDictionaryByIdData, DeleteDictionaryByIdResponses, DeleteDictionaryByIdErrors, GetDictionaryByIdData, GetDictionaryByIdResponses, GetDictionaryByIdErrors, PutDictionaryByIdData, PutDictionaryByIdResponses, PutDictionaryByIdErrors, GetDictionaryByIdExportData, GetDictionaryByIdExportResponses, GetDictionaryByIdExportErrors, PutDictionaryByIdMoveData, PutDictionaryByIdMoveResponses, PutDictionaryByIdMoveErrors, PostDictionaryImportData, PostDictionaryImportResponses, PostDictionaryImportErrors, GetItemDictionaryData, GetItemDictionaryResponses, GetItemDictionaryErrors, GetTreeDictionaryAncestorsData, GetTreeDictionaryAncestorsResponses, GetTreeDictionaryAncestorsErrors, GetTreeDictionaryChildrenData, GetTreeDictionaryChildrenResponses, GetTreeDictionaryChildrenErrors, GetTreeDictionaryRootData, GetTreeDictionaryRootResponses, GetTreeDictionaryRootErrors, PostDocumentBlueprintData, PostDocumentBlueprintResponses, PostDocumentBlueprintErrors, DeleteDocumentBlueprintByIdData, DeleteDocumentBlueprintByIdResponses, DeleteDocumentBlueprintByIdErrors, GetDocumentBlueprintByIdData, GetDocumentBlueprintByIdResponses, GetDocumentBlueprintByIdErrors, PutDocumentBlueprintByIdData, PutDocumentBlueprintByIdResponses, PutDocumentBlueprintByIdErrors, PutDocumentBlueprintByIdMoveData, PutDocumentBlueprintByIdMoveResponses, PutDocumentBlueprintByIdMoveErrors, GetDocumentBlueprintByIdScaffoldData, GetDocumentBlueprintByIdScaffoldResponses, GetDocumentBlueprintByIdScaffoldErrors, PostDocumentBlueprintFolderData, PostDocumentBlueprintFolderResponses, PostDocumentBlueprintFolderErrors, DeleteDocumentBlueprintFolderByIdData, DeleteDocumentBlueprintFolderByIdResponses, DeleteDocumentBlueprintFolderByIdErrors, GetDocumentBlueprintFolderByIdData, GetDocumentBlueprintFolderByIdResponses, GetDocumentBlueprintFolderByIdErrors, PutDocumentBlueprintFolderByIdData, PutDocumentBlueprintFolderByIdResponses, PutDocumentBlueprintFolderByIdErrors, PostDocumentBlueprintFromDocumentData, PostDocumentBlueprintFromDocumentResponses, PostDocumentBlueprintFromDocumentErrors, GetItemDocumentBlueprintData, GetItemDocumentBlueprintResponses, GetItemDocumentBlueprintErrors, GetTreeDocumentBlueprintAncestorsData, GetTreeDocumentBlueprintAncestorsResponses, GetTreeDocumentBlueprintAncestorsErrors, GetTreeDocumentBlueprintChildrenData, GetTreeDocumentBlueprintChildrenResponses, GetTreeDocumentBlueprintChildrenErrors, GetTreeDocumentBlueprintRootData, GetTreeDocumentBlueprintRootResponses, GetTreeDocumentBlueprintRootErrors, GetTreeDocumentBlueprintSiblingsData, GetTreeDocumentBlueprintSiblingsResponses, GetTreeDocumentBlueprintSiblingsErrors, PostDocumentTypeData, PostDocumentTypeResponses, PostDocumentTypeErrors, DeleteDocumentTypeByIdData, DeleteDocumentTypeByIdResponses, DeleteDocumentTypeByIdErrors, GetDocumentTypeByIdData, GetDocumentTypeByIdResponses, GetDocumentTypeByIdErrors, PutDocumentTypeByIdData, PutDocumentTypeByIdResponses, PutDocumentTypeByIdErrors, GetDocumentTypeByIdAllowedChildrenData, GetDocumentTypeByIdAllowedChildrenResponses, GetDocumentTypeByIdAllowedChildrenErrors, GetDocumentTypeByIdBlueprintData, GetDocumentTypeByIdBlueprintResponses, GetDocumentTypeByIdBlueprintErrors, GetDocumentTypeByIdCompositionReferencesData, GetDocumentTypeByIdCompositionReferencesResponses, GetDocumentTypeByIdCompositionReferencesErrors, PostDocumentTypeByIdCopyData, PostDocumentTypeByIdCopyResponses, PostDocumentTypeByIdCopyErrors, GetDocumentTypeByIdExportData, GetDocumentTypeByIdExportResponses, GetDocumentTypeByIdExportErrors, PutDocumentTypeByIdImportData, PutDocumentTypeByIdImportResponses, PutDocumentTypeByIdImportErrors, PutDocumentTypeByIdMoveData, PutDocumentTypeByIdMoveResponses, PutDocumentTypeByIdMoveErrors, GetDocumentTypeAllowedAtRootData, GetDocumentTypeAllowedAtRootResponses, GetDocumentTypeAllowedAtRootErrors, PostDocumentTypeAvailableCompositionsData, PostDocumentTypeAvailableCompositionsResponses, PostDocumentTypeAvailableCompositionsErrors, GetDocumentTypeConfigurationData, GetDocumentTypeConfigurationResponses, GetDocumentTypeConfigurationErrors, PostDocumentTypeFolderData, PostDocumentTypeFolderResponses, PostDocumentTypeFolderErrors, DeleteDocumentTypeFolderByIdData, DeleteDocumentTypeFolderByIdResponses, DeleteDocumentTypeFolderByIdErrors, GetDocumentTypeFolderByIdData, GetDocumentTypeFolderByIdResponses, GetDocumentTypeFolderByIdErrors, PutDocumentTypeFolderByIdData, PutDocumentTypeFolderByIdResponses, PutDocumentTypeFolderByIdErrors, PostDocumentTypeImportData, PostDocumentTypeImportResponses, PostDocumentTypeImportErrors, GetItemDocumentTypeData, GetItemDocumentTypeResponses, GetItemDocumentTypeErrors, GetItemDocumentTypeSearchData, GetItemDocumentTypeSearchResponses, GetItemDocumentTypeSearchErrors, GetTreeDocumentTypeAncestorsData, GetTreeDocumentTypeAncestorsResponses, GetTreeDocumentTypeAncestorsErrors, GetTreeDocumentTypeChildrenData, GetTreeDocumentTypeChildrenResponses, GetTreeDocumentTypeChildrenErrors, GetTreeDocumentTypeRootData, GetTreeDocumentTypeRootResponses, GetTreeDocumentTypeRootErrors, GetTreeDocumentTypeSiblingsData, GetTreeDocumentTypeSiblingsResponses, GetTreeDocumentTypeSiblingsErrors, GetDocumentVersionData, GetDocumentVersionResponses, GetDocumentVersionErrors, GetDocumentVersionByIdData, GetDocumentVersionByIdResponses, GetDocumentVersionByIdErrors, PutDocumentVersionByIdPreventCleanupData, PutDocumentVersionByIdPreventCleanupResponses, PutDocumentVersionByIdPreventCleanupErrors, PostDocumentVersionByIdRollbackData, PostDocumentVersionByIdRollbackResponses, PostDocumentVersionByIdRollbackErrors, GetCollectionDocumentByIdData, GetCollectionDocumentByIdResponses, GetCollectionDocumentByIdErrors, PostDocumentData, PostDocumentResponses, PostDocumentErrors, DeleteDocumentByIdData, DeleteDocumentByIdResponses, DeleteDocumentByIdErrors, GetDocumentByIdData, GetDocumentByIdResponses, GetDocumentByIdErrors, PutDocumentByIdData, PutDocumentByIdResponses, PutDocumentByIdErrors, GetDocumentByIdAuditLogData, GetDocumentByIdAuditLogResponses, GetDocumentByIdAuditLogErrors, GetDocumentByIdAvailableSegmentOptionsData, GetDocumentByIdAvailableSegmentOptionsResponses, GetDocumentByIdAvailableSegmentOptionsErrors, PostDocumentByIdCopyData, PostDocumentByIdCopyResponses, PostDocumentByIdCopyErrors, GetDocumentByIdDomainsData, GetDocumentByIdDomainsResponses, GetDocumentByIdDomainsErrors, PutDocumentByIdDomainsData, PutDocumentByIdDomainsResponses, PutDocumentByIdDomainsErrors, PutDocumentByIdMoveData, PutDocumentByIdMoveResponses, PutDocumentByIdMoveErrors, PutDocumentByIdMoveToRecycleBinData, PutDocumentByIdMoveToRecycleBinResponses, PutDocumentByIdMoveToRecycleBinErrors, GetDocumentByIdNotificationsData, GetDocumentByIdNotificationsResponses, GetDocumentByIdNotificationsErrors, PutDocumentByIdNotificationsData, PutDocumentByIdNotificationsResponses, PutDocumentByIdNotificationsErrors, GetDocumentByIdPreviewUrlData, GetDocumentByIdPreviewUrlResponses, GetDocumentByIdPreviewUrlErrors, DeleteDocumentByIdPublicAccessData, DeleteDocumentByIdPublicAccessResponses, DeleteDocumentByIdPublicAccessErrors, GetDocumentByIdPublicAccessData, GetDocumentByIdPublicAccessResponses, GetDocumentByIdPublicAccessErrors, PostDocumentByIdPublicAccessData, PostDocumentByIdPublicAccessResponses, PostDocumentByIdPublicAccessErrors, PutDocumentByIdPublicAccessData, PutDocumentByIdPublicAccessResponses, PutDocumentByIdPublicAccessErrors, PutDocumentByIdPublishData, PutDocumentByIdPublishResponses, PutDocumentByIdPublishErrors, PutDocumentByIdPublishWithDescendantsData, PutDocumentByIdPublishWithDescendantsResponses, PutDocumentByIdPublishWithDescendantsErrors, GetDocumentByIdPublishWithDescendantsResultByTaskIdData, GetDocumentByIdPublishWithDescendantsResultByTaskIdResponses, GetDocumentByIdPublishWithDescendantsResultByTaskIdErrors, GetDocumentByIdPublishedData, GetDocumentByIdPublishedResponses, GetDocumentByIdPublishedErrors, GetDocumentByIdReferencedByData, GetDocumentByIdReferencedByResponses, GetDocumentByIdReferencedByErrors, GetDocumentByIdReferencedDescendantsData, GetDocumentByIdReferencedDescendantsResponses, GetDocumentByIdReferencedDescendantsErrors, PutDocumentByIdUnpublishData, PutDocumentByIdUnpublishResponses, PutDocumentByIdUnpublishErrors, PutUmbracoManagementApiV11DocumentByIdValidate11Data, PutUmbracoManagementApiV11DocumentByIdValidate11Responses, PutUmbracoManagementApiV11DocumentByIdValidate11Errors, GetDocumentAreReferencedData, GetDocumentAreReferencedResponses, GetDocumentAreReferencedErrors, GetDocumentConfigurationData, GetDocumentConfigurationResponses, GetDocumentConfigurationErrors, PutDocumentSortData, PutDocumentSortResponses, PutDocumentSortErrors, GetDocumentUrlsData, GetDocumentUrlsResponses, GetDocumentUrlsErrors, PostDocumentValidateData, PostDocumentValidateResponses, PostDocumentValidateErrors, GetItemDocumentData, GetItemDocumentResponses, GetItemDocumentErrors, GetItemDocumentSearchData, GetItemDocumentSearchResponses, GetItemDocumentSearchErrors, DeleteRecycleBinDocumentData, DeleteRecycleBinDocumentResponses, DeleteRecycleBinDocumentErrors, DeleteRecycleBinDocumentByIdData, DeleteRecycleBinDocumentByIdResponses, DeleteRecycleBinDocumentByIdErrors, GetRecycleBinDocumentByIdOriginalParentData, GetRecycleBinDocumentByIdOriginalParentResponses, GetRecycleBinDocumentByIdOriginalParentErrors, PutRecycleBinDocumentByIdRestoreData, PutRecycleBinDocumentByIdRestoreResponses, PutRecycleBinDocumentByIdRestoreErrors, GetRecycleBinDocumentChildrenData, GetRecycleBinDocumentChildrenResponses, GetRecycleBinDocumentChildrenErrors, GetRecycleBinDocumentReferencedByData, GetRecycleBinDocumentReferencedByResponses, GetRecycleBinDocumentReferencedByErrors, GetRecycleBinDocumentRootData, GetRecycleBinDocumentRootResponses, GetRecycleBinDocumentRootErrors, GetRecycleBinDocumentSiblingsData, GetRecycleBinDocumentSiblingsResponses, GetRecycleBinDocumentSiblingsErrors, GetTreeDocumentAncestorsData, GetTreeDocumentAncestorsResponses, GetTreeDocumentAncestorsErrors, GetTreeDocumentChildrenData, GetTreeDocumentChildrenResponses, GetTreeDocumentChildrenErrors, GetTreeDocumentRootData, GetTreeDocumentRootResponses, GetTreeDocumentRootErrors, GetTreeDocumentSiblingsData, GetTreeDocumentSiblingsResponses, GetTreeDocumentSiblingsErrors, PostDynamicRootQueryData, PostDynamicRootQueryResponses, PostDynamicRootQueryErrors, GetDynamicRootStepsData, GetDynamicRootStepsResponses, GetDynamicRootStepsErrors, GetHealthCheckGroupData, GetHealthCheckGroupResponses, GetHealthCheckGroupErrors, GetHealthCheckGroupByNameData, GetHealthCheckGroupByNameResponses, GetHealthCheckGroupByNameErrors, PostHealthCheckGroupByNameCheckData, PostHealthCheckGroupByNameCheckResponses, PostHealthCheckGroupByNameCheckErrors, PostHealthCheckExecuteActionData, PostHealthCheckExecuteActionResponses, PostHealthCheckExecuteActionErrors, GetHelpData, GetHelpResponses, GetHelpErrors, GetImagingResizeUrlsData, GetImagingResizeUrlsResponses, GetImagingResizeUrlsErrors, GetImportAnalyzeData, GetImportAnalyzeResponses, GetImportAnalyzeErrors, GetIndexerData, GetIndexerResponses, GetIndexerErrors, GetIndexerByIndexNameData, GetIndexerByIndexNameResponses, GetIndexerByIndexNameErrors, PostIndexerByIndexNameRebuildData, PostIndexerByIndexNameRebuildResponses, PostIndexerByIndexNameRebuildErrors, GetInstallSettingsData, GetInstallSettingsResponses, GetInstallSettingsErrors, PostInstallSetupData, PostInstallSetupResponses, PostInstallSetupErrors, PostInstallValidateDatabaseData, PostInstallValidateDatabaseResponses, PostInstallValidateDatabaseErrors, GetItemLanguageData, GetItemLanguageResponses, GetItemLanguageErrors, GetItemLanguageDefaultData, GetItemLanguageDefaultResponses, GetItemLanguageDefaultErrors, GetLanguageData, GetLanguageResponses, GetLanguageErrors, PostLanguageData, PostLanguageResponses, PostLanguageErrors, DeleteLanguageByIsoCodeData, DeleteLanguageByIsoCodeResponses, DeleteLanguageByIsoCodeErrors, GetLanguageByIsoCodeData, GetLanguageByIsoCodeResponses, GetLanguageByIsoCodeErrors, PutLanguageByIsoCodeData, PutLanguageByIsoCodeResponses, PutLanguageByIsoCodeErrors, GetLogViewerLevelData, GetLogViewerLevelResponses, GetLogViewerLevelErrors, GetLogViewerLevelCountData, GetLogViewerLevelCountResponses, GetLogViewerLevelCountErrors, GetLogViewerLogData, GetLogViewerLogResponses, GetLogViewerLogErrors, GetLogViewerMessageTemplateData, GetLogViewerMessageTemplateResponses, GetLogViewerMessageTemplateErrors, GetLogViewerSavedSearchData, GetLogViewerSavedSearchResponses, GetLogViewerSavedSearchErrors, PostLogViewerSavedSearchData, PostLogViewerSavedSearchResponses, PostLogViewerSavedSearchErrors, DeleteLogViewerSavedSearchByNameData, DeleteLogViewerSavedSearchByNameResponses, DeleteLogViewerSavedSearchByNameErrors, GetLogViewerSavedSearchByNameData, GetLogViewerSavedSearchByNameResponses, GetLogViewerSavedSearchByNameErrors, GetLogViewerValidateLogsSizeData, GetLogViewerValidateLogsSizeResponses, GetLogViewerValidateLogsSizeErrors, GetManifestManifestData, GetManifestManifestResponses, GetManifestManifestErrors, GetManifestManifestPrivateData, GetManifestManifestPrivateResponses, GetManifestManifestPrivateErrors, GetManifestManifestPublicData, GetManifestManifestPublicResponses, GetItemMediaTypeData, GetItemMediaTypeResponses, GetItemMediaTypeErrors, GetItemMediaTypeAllowedData, GetItemMediaTypeAllowedResponses, GetItemMediaTypeAllowedErrors, GetItemMediaTypeFoldersData, GetItemMediaTypeFoldersResponses, GetItemMediaTypeFoldersErrors, GetItemMediaTypeSearchData, GetItemMediaTypeSearchResponses, GetItemMediaTypeSearchErrors, PostMediaTypeData, PostMediaTypeResponses, PostMediaTypeErrors, DeleteMediaTypeByIdData, DeleteMediaTypeByIdResponses, DeleteMediaTypeByIdErrors, GetMediaTypeByIdData, GetMediaTypeByIdResponses, GetMediaTypeByIdErrors, PutMediaTypeByIdData, PutMediaTypeByIdResponses, PutMediaTypeByIdErrors, GetMediaTypeByIdAllowedChildrenData, GetMediaTypeByIdAllowedChildrenResponses, GetMediaTypeByIdAllowedChildrenErrors, GetMediaTypeByIdCompositionReferencesData, GetMediaTypeByIdCompositionReferencesResponses, GetMediaTypeByIdCompositionReferencesErrors, PostMediaTypeByIdCopyData, PostMediaTypeByIdCopyResponses, PostMediaTypeByIdCopyErrors, GetMediaTypeByIdExportData, GetMediaTypeByIdExportResponses, GetMediaTypeByIdExportErrors, PutMediaTypeByIdImportData, PutMediaTypeByIdImportResponses, PutMediaTypeByIdImportErrors, PutMediaTypeByIdMoveData, PutMediaTypeByIdMoveResponses, PutMediaTypeByIdMoveErrors, GetMediaTypeAllowedAtRootData, GetMediaTypeAllowedAtRootResponses, GetMediaTypeAllowedAtRootErrors, PostMediaTypeAvailableCompositionsData, PostMediaTypeAvailableCompositionsResponses, PostMediaTypeAvailableCompositionsErrors, GetMediaTypeConfigurationData, GetMediaTypeConfigurationResponses, GetMediaTypeConfigurationErrors, PostMediaTypeFolderData, PostMediaTypeFolderResponses, PostMediaTypeFolderErrors, DeleteMediaTypeFolderByIdData, DeleteMediaTypeFolderByIdResponses, DeleteMediaTypeFolderByIdErrors, GetMediaTypeFolderByIdData, GetMediaTypeFolderByIdResponses, GetMediaTypeFolderByIdErrors, PutMediaTypeFolderByIdData, PutMediaTypeFolderByIdResponses, PutMediaTypeFolderByIdErrors, PostMediaTypeImportData, PostMediaTypeImportResponses, PostMediaTypeImportErrors, GetTreeMediaTypeAncestorsData, GetTreeMediaTypeAncestorsResponses, GetTreeMediaTypeAncestorsErrors, GetTreeMediaTypeChildrenData, GetTreeMediaTypeChildrenResponses, GetTreeMediaTypeChildrenErrors, GetTreeMediaTypeRootData, GetTreeMediaTypeRootResponses, GetTreeMediaTypeRootErrors, GetTreeMediaTypeSiblingsData, GetTreeMediaTypeSiblingsResponses, GetTreeMediaTypeSiblingsErrors, GetCollectionMediaData, GetCollectionMediaResponses, GetCollectionMediaErrors, GetItemMediaData, GetItemMediaResponses, GetItemMediaErrors, GetItemMediaSearchData, GetItemMediaSearchResponses, GetItemMediaSearchErrors, PostMediaData, PostMediaResponses, PostMediaErrors, DeleteMediaByIdData, DeleteMediaByIdResponses, DeleteMediaByIdErrors, GetMediaByIdData, GetMediaByIdResponses, GetMediaByIdErrors, PutMediaByIdData, PutMediaByIdResponses, PutMediaByIdErrors, GetMediaByIdAuditLogData, GetMediaByIdAuditLogResponses, GetMediaByIdAuditLogErrors, PutMediaByIdMoveData, PutMediaByIdMoveResponses, PutMediaByIdMoveErrors, PutMediaByIdMoveToRecycleBinData, PutMediaByIdMoveToRecycleBinResponses, PutMediaByIdMoveToRecycleBinErrors, GetMediaByIdReferencedByData, GetMediaByIdReferencedByResponses, GetMediaByIdReferencedByErrors, GetMediaByIdReferencedDescendantsData, GetMediaByIdReferencedDescendantsResponses, GetMediaByIdReferencedDescendantsErrors, PutMediaByIdValidateData, PutMediaByIdValidateResponses, PutMediaByIdValidateErrors, GetMediaAreReferencedData, GetMediaAreReferencedResponses, GetMediaAreReferencedErrors, GetMediaConfigurationData, GetMediaConfigurationResponses, GetMediaConfigurationErrors, PutMediaSortData, PutMediaSortResponses, PutMediaSortErrors, GetMediaUrlsData, GetMediaUrlsResponses, GetMediaUrlsErrors, PostMediaValidateData, PostMediaValidateResponses, PostMediaValidateErrors, DeleteRecycleBinMediaData, DeleteRecycleBinMediaResponses, DeleteRecycleBinMediaErrors, DeleteRecycleBinMediaByIdData, DeleteRecycleBinMediaByIdResponses, DeleteRecycleBinMediaByIdErrors, GetRecycleBinMediaByIdOriginalParentData, GetRecycleBinMediaByIdOriginalParentResponses, GetRecycleBinMediaByIdOriginalParentErrors, PutRecycleBinMediaByIdRestoreData, PutRecycleBinMediaByIdRestoreResponses, PutRecycleBinMediaByIdRestoreErrors, GetRecycleBinMediaChildrenData, GetRecycleBinMediaChildrenResponses, GetRecycleBinMediaChildrenErrors, GetRecycleBinMediaReferencedByData, GetRecycleBinMediaReferencedByResponses, GetRecycleBinMediaReferencedByErrors, GetRecycleBinMediaRootData, GetRecycleBinMediaRootResponses, GetRecycleBinMediaRootErrors, GetRecycleBinMediaSiblingsData, GetRecycleBinMediaSiblingsResponses, GetRecycleBinMediaSiblingsErrors, GetTreeMediaAncestorsData, GetTreeMediaAncestorsResponses, GetTreeMediaAncestorsErrors, GetTreeMediaChildrenData, GetTreeMediaChildrenResponses, GetTreeMediaChildrenErrors, GetTreeMediaRootData, GetTreeMediaRootResponses, GetTreeMediaRootErrors, GetTreeMediaSiblingsData, GetTreeMediaSiblingsResponses, GetTreeMediaSiblingsErrors, GetItemMemberGroupData, GetItemMemberGroupResponses, GetItemMemberGroupErrors, GetMemberGroupData, GetMemberGroupResponses, GetMemberGroupErrors, PostMemberGroupData, PostMemberGroupResponses, PostMemberGroupErrors, DeleteMemberGroupByIdData, DeleteMemberGroupByIdResponses, DeleteMemberGroupByIdErrors, GetMemberGroupByIdData, GetMemberGroupByIdResponses, GetMemberGroupByIdErrors, PutMemberGroupByIdData, PutMemberGroupByIdResponses, PutMemberGroupByIdErrors, GetTreeMemberGroupRootData, GetTreeMemberGroupRootResponses, GetTreeMemberGroupRootErrors, GetItemMemberTypeData, GetItemMemberTypeResponses, GetItemMemberTypeErrors, GetItemMemberTypeSearchData, GetItemMemberTypeSearchResponses, GetItemMemberTypeSearchErrors, PostMemberTypeData, PostMemberTypeResponses, PostMemberTypeErrors, DeleteMemberTypeByIdData, DeleteMemberTypeByIdResponses, DeleteMemberTypeByIdErrors, GetMemberTypeByIdData, GetMemberTypeByIdResponses, GetMemberTypeByIdErrors, PutMemberTypeByIdData, PutMemberTypeByIdResponses, PutMemberTypeByIdErrors, GetMemberTypeByIdCompositionReferencesData, GetMemberTypeByIdCompositionReferencesResponses, GetMemberTypeByIdCompositionReferencesErrors, PostMemberTypeByIdCopyData, PostMemberTypeByIdCopyResponses, PostMemberTypeByIdCopyErrors, PostMemberTypeAvailableCompositionsData, PostMemberTypeAvailableCompositionsResponses, PostMemberTypeAvailableCompositionsErrors, GetMemberTypeConfigurationData, GetMemberTypeConfigurationResponses, GetMemberTypeConfigurationErrors, GetTreeMemberTypeRootData, GetTreeMemberTypeRootResponses, GetTreeMemberTypeRootErrors, GetTreeMemberTypeSiblingsData, GetTreeMemberTypeSiblingsResponses, GetTreeMemberTypeSiblingsErrors, GetFilterMemberData, GetFilterMemberResponses, GetFilterMemberErrors, GetItemMemberData, GetItemMemberResponses, GetItemMemberErrors, GetItemMemberSearchData, GetItemMemberSearchResponses, GetItemMemberSearchErrors, PostMemberData, PostMemberResponses, PostMemberErrors, DeleteMemberByIdData, DeleteMemberByIdResponses, DeleteMemberByIdErrors, GetMemberByIdData, GetMemberByIdResponses, GetMemberByIdErrors, PutMemberByIdData, PutMemberByIdResponses, PutMemberByIdErrors, GetMemberByIdReferencedByData, GetMemberByIdReferencedByResponses, GetMemberByIdReferencedByErrors, GetMemberByIdReferencedDescendantsData, GetMemberByIdReferencedDescendantsResponses, GetMemberByIdReferencedDescendantsErrors, PutMemberByIdValidateData, PutMemberByIdValidateResponses, PutMemberByIdValidateErrors, GetMemberAreReferencedData, GetMemberAreReferencedResponses, GetMemberAreReferencedErrors, GetMemberConfigurationData, GetMemberConfigurationResponses, GetMemberConfigurationErrors, PostMemberValidateData, PostMemberValidateResponses, PostMemberValidateErrors, PostModelsBuilderBuildData, PostModelsBuilderBuildResponses, PostModelsBuilderBuildErrors, GetModelsBuilderDashboardData, GetModelsBuilderDashboardResponses, GetModelsBuilderDashboardErrors, GetModelsBuilderStatusData, GetModelsBuilderStatusResponses, GetModelsBuilderStatusErrors, GetObjectTypesData, GetObjectTypesResponses, GetObjectTypesErrors, GetOembedQueryData, GetOembedQueryResponses, GetOembedQueryErrors, PostPackageByNameRunMigrationData, PostPackageByNameRunMigrationResponses, PostPackageByNameRunMigrationErrors, GetPackageConfigurationData, GetPackageConfigurationResponses, GetPackageConfigurationErrors, GetPackageCreatedData, GetPackageCreatedResponses, GetPackageCreatedErrors, PostPackageCreatedData, PostPackageCreatedResponses, PostPackageCreatedErrors, DeletePackageCreatedByIdData, DeletePackageCreatedByIdResponses, DeletePackageCreatedByIdErrors, GetPackageCreatedByIdData, GetPackageCreatedByIdResponses, GetPackageCreatedByIdErrors, PutPackageCreatedByIdData, PutPackageCreatedByIdResponses, PutPackageCreatedByIdErrors, GetPackageCreatedByIdDownloadData, GetPackageCreatedByIdDownloadResponses, GetPackageCreatedByIdDownloadErrors, GetPackageMigrationStatusData, GetPackageMigrationStatusResponses, GetPackageMigrationStatusErrors, GetItemPartialViewData, GetItemPartialViewResponses, GetItemPartialViewErrors, PostPartialViewData, PostPartialViewResponses, PostPartialViewErrors, DeletePartialViewByPathData, DeletePartialViewByPathResponses, DeletePartialViewByPathErrors, GetPartialViewByPathData, GetPartialViewByPathResponses, GetPartialViewByPathErrors, PutPartialViewByPathData, PutPartialViewByPathResponses, PutPartialViewByPathErrors, PutPartialViewByPathRenameData, PutPartialViewByPathRenameResponses, PutPartialViewByPathRenameErrors, PostPartialViewFolderData, PostPartialViewFolderResponses, PostPartialViewFolderErrors, DeletePartialViewFolderByPathData, DeletePartialViewFolderByPathResponses, DeletePartialViewFolderByPathErrors, GetPartialViewFolderByPathData, GetPartialViewFolderByPathResponses, GetPartialViewFolderByPathErrors, GetPartialViewSnippetData, GetPartialViewSnippetResponses, GetPartialViewSnippetErrors, GetPartialViewSnippetByIdData, GetPartialViewSnippetByIdResponses, GetPartialViewSnippetByIdErrors, GetTreePartialViewAncestorsData, GetTreePartialViewAncestorsResponses, GetTreePartialViewAncestorsErrors, GetTreePartialViewChildrenData, GetTreePartialViewChildrenResponses, GetTreePartialViewChildrenErrors, GetTreePartialViewRootData, GetTreePartialViewRootResponses, GetTreePartialViewRootErrors, GetTreePartialViewSiblingsData, GetTreePartialViewSiblingsResponses, GetTreePartialViewSiblingsErrors, DeletePreviewData, DeletePreviewResponses, PostPreviewData, PostPreviewResponses, PostPreviewErrors, GetProfilingStatusData, GetProfilingStatusResponses, GetProfilingStatusErrors, PutProfilingStatusData, PutProfilingStatusResponses, PutProfilingStatusErrors, GetPropertyTypeIsUsedData, GetPropertyTypeIsUsedResponses, GetPropertyTypeIsUsedErrors, PostPublishedCacheRebuildData, PostPublishedCacheRebuildResponses, PostPublishedCacheRebuildErrors, GetPublishedCacheRebuildStatusData, GetPublishedCacheRebuildStatusResponses, GetPublishedCacheRebuildStatusErrors, PostPublishedCacheReloadData, PostPublishedCacheReloadResponses, PostPublishedCacheReloadErrors, GetRedirectManagementData, GetRedirectManagementResponses, GetRedirectManagementErrors, DeleteRedirectManagementByIdData, DeleteRedirectManagementByIdResponses, DeleteRedirectManagementByIdErrors, GetRedirectManagementByIdData, GetRedirectManagementByIdResponses, GetRedirectManagementByIdErrors, GetRedirectManagementStatusData, GetRedirectManagementStatusResponses, GetRedirectManagementStatusErrors, PostRedirectManagementStatusData, PostRedirectManagementStatusResponses, PostRedirectManagementStatusErrors, GetItemRelationTypeData, GetItemRelationTypeResponses, GetItemRelationTypeErrors, GetRelationTypeData, GetRelationTypeResponses, GetRelationTypeErrors, GetRelationTypeByIdData, GetRelationTypeByIdResponses, GetRelationTypeByIdErrors, GetRelationByRelationTypeIdData, GetRelationByRelationTypeIdResponses, GetRelationByRelationTypeIdErrors, GetItemScriptData, GetItemScriptResponses, GetItemScriptErrors, PostScriptData, PostScriptResponses, PostScriptErrors, DeleteScriptByPathData, DeleteScriptByPathResponses, DeleteScriptByPathErrors, GetScriptByPathData, GetScriptByPathResponses, GetScriptByPathErrors, PutScriptByPathData, PutScriptByPathResponses, PutScriptByPathErrors, PutScriptByPathRenameData, PutScriptByPathRenameResponses, PutScriptByPathRenameErrors, PostScriptFolderData, PostScriptFolderResponses, PostScriptFolderErrors, DeleteScriptFolderByPathData, DeleteScriptFolderByPathResponses, DeleteScriptFolderByPathErrors, GetScriptFolderByPathData, GetScriptFolderByPathResponses, GetScriptFolderByPathErrors, GetTreeScriptAncestorsData, GetTreeScriptAncestorsResponses, GetTreeScriptAncestorsErrors, GetTreeScriptChildrenData, GetTreeScriptChildrenResponses, GetTreeScriptChildrenErrors, GetTreeScriptRootData, GetTreeScriptRootResponses, GetTreeScriptRootErrors, GetTreeScriptSiblingsData, GetTreeScriptSiblingsResponses, GetTreeScriptSiblingsErrors, GetSearcherData, GetSearcherResponses, GetSearcherErrors, GetSearcherBySearcherNameQueryData, GetSearcherBySearcherNameQueryResponses, GetSearcherBySearcherNameQueryErrors, GetSecurityConfigurationData, GetSecurityConfigurationResponses, GetSecurityConfigurationErrors, PostSecurityForgotPasswordData, PostSecurityForgotPasswordResponses, PostSecurityForgotPasswordErrors, PostSecurityForgotPasswordResetData, PostSecurityForgotPasswordResetResponses, PostSecurityForgotPasswordResetErrors, PostSecurityForgotPasswordVerifyData, PostSecurityForgotPasswordVerifyResponses, PostSecurityForgotPasswordVerifyErrors, GetSegmentData, GetSegmentResponses, GetSegmentErrors, GetServerConfigurationData, GetServerConfigurationResponses, GetServerInformationData, GetServerInformationResponses, GetServerInformationErrors, GetServerStatusData, GetServerStatusResponses, GetServerStatusErrors, GetServerTroubleshootingData, GetServerTroubleshootingResponses, GetServerTroubleshootingErrors, GetServerUpgradeCheckData, GetServerUpgradeCheckResponses, GetServerUpgradeCheckErrors, GetItemStaticFileData, GetItemStaticFileResponses, GetItemStaticFileErrors, GetTreeStaticFileAncestorsData, GetTreeStaticFileAncestorsResponses, GetTreeStaticFileAncestorsErrors, GetTreeStaticFileChildrenData, GetTreeStaticFileChildrenResponses, GetTreeStaticFileChildrenErrors, GetTreeStaticFileRootData, GetTreeStaticFileRootResponses, GetTreeStaticFileRootErrors, GetItemStylesheetData, GetItemStylesheetResponses, GetItemStylesheetErrors, PostStylesheetData, PostStylesheetResponses, PostStylesheetErrors, DeleteStylesheetByPathData, DeleteStylesheetByPathResponses, DeleteStylesheetByPathErrors, GetStylesheetByPathData, GetStylesheetByPathResponses, GetStylesheetByPathErrors, PutStylesheetByPathData, PutStylesheetByPathResponses, PutStylesheetByPathErrors, PutStylesheetByPathRenameData, PutStylesheetByPathRenameResponses, PutStylesheetByPathRenameErrors, PostStylesheetFolderData, PostStylesheetFolderResponses, PostStylesheetFolderErrors, DeleteStylesheetFolderByPathData, DeleteStylesheetFolderByPathResponses, DeleteStylesheetFolderByPathErrors, GetStylesheetFolderByPathData, GetStylesheetFolderByPathResponses, GetStylesheetFolderByPathErrors, GetTreeStylesheetAncestorsData, GetTreeStylesheetAncestorsResponses, GetTreeStylesheetAncestorsErrors, GetTreeStylesheetChildrenData, GetTreeStylesheetChildrenResponses, GetTreeStylesheetChildrenErrors, GetTreeStylesheetRootData, GetTreeStylesheetRootResponses, GetTreeStylesheetRootErrors, GetTreeStylesheetSiblingsData, GetTreeStylesheetSiblingsResponses, GetTreeStylesheetSiblingsErrors, GetTagData, GetTagResponses, GetTagErrors, GetTelemetryData, GetTelemetryResponses, GetTelemetryErrors, GetTelemetryLevelData, GetTelemetryLevelResponses, GetTelemetryLevelErrors, PostTelemetryLevelData, PostTelemetryLevelResponses, PostTelemetryLevelErrors, GetItemTemplateData, GetItemTemplateResponses, GetItemTemplateErrors, GetItemTemplateSearchData, GetItemTemplateSearchResponses, GetItemTemplateSearchErrors, PostTemplateData, PostTemplateResponses, PostTemplateErrors, DeleteTemplateByIdData, DeleteTemplateByIdResponses, DeleteTemplateByIdErrors, GetTemplateByIdData, GetTemplateByIdResponses, GetTemplateByIdErrors, PutTemplateByIdData, PutTemplateByIdResponses, PutTemplateByIdErrors, GetTemplateConfigurationData, GetTemplateConfigurationResponses, GetTemplateConfigurationErrors, PostTemplateQueryExecuteData, PostTemplateQueryExecuteResponses, PostTemplateQueryExecuteErrors, GetTemplateQuerySettingsData, GetTemplateQuerySettingsResponses, GetTemplateQuerySettingsErrors, GetTreeTemplateAncestorsData, GetTreeTemplateAncestorsResponses, GetTreeTemplateAncestorsErrors, GetTreeTemplateChildrenData, GetTreeTemplateChildrenResponses, GetTreeTemplateChildrenErrors, GetTreeTemplateRootData, GetTreeTemplateRootResponses, GetTreeTemplateRootErrors, GetTreeTemplateSiblingsData, GetTreeTemplateSiblingsResponses, GetTreeTemplateSiblingsErrors, PostTemporaryFileData, PostTemporaryFileResponses, PostTemporaryFileErrors, DeleteTemporaryFileByIdData, DeleteTemporaryFileByIdResponses, DeleteTemporaryFileByIdErrors, GetTemporaryFileByIdData, GetTemporaryFileByIdResponses, GetTemporaryFileByIdErrors, GetTemporaryFileConfigurationData, GetTemporaryFileConfigurationResponses, GetTemporaryFileConfigurationErrors, PostUpgradeAuthorizeData, PostUpgradeAuthorizeResponses, PostUpgradeAuthorizeErrors, GetUpgradeSettingsData, GetUpgradeSettingsResponses, GetUpgradeSettingsErrors, GetUserDataData, GetUserDataResponses, GetUserDataErrors, PostUserDataData, PostUserDataResponses, PostUserDataErrors, PutUserDataData, PutUserDataResponses, PutUserDataErrors, DeleteUserDataByIdData, DeleteUserDataByIdResponses, DeleteUserDataByIdErrors, GetUserDataByIdData, GetUserDataByIdResponses, GetUserDataByIdErrors, GetFilterUserGroupData, GetFilterUserGroupResponses, GetFilterUserGroupErrors, GetItemUserGroupData, GetItemUserGroupResponses, GetItemUserGroupErrors, DeleteUserGroupData, DeleteUserGroupResponses, DeleteUserGroupErrors, GetUserGroupData, GetUserGroupResponses, GetUserGroupErrors, PostUserGroupData, PostUserGroupResponses, PostUserGroupErrors, DeleteUserGroupByIdData, DeleteUserGroupByIdResponses, DeleteUserGroupByIdErrors, GetUserGroupByIdData, GetUserGroupByIdResponses, GetUserGroupByIdErrors, PutUserGroupByIdData, PutUserGroupByIdResponses, PutUserGroupByIdErrors, DeleteUserGroupByIdUsersData, DeleteUserGroupByIdUsersResponses, DeleteUserGroupByIdUsersErrors, PostUserGroupByIdUsersData, PostUserGroupByIdUsersResponses, PostUserGroupByIdUsersErrors, GetFilterUserData, GetFilterUserResponses, GetFilterUserErrors, GetItemUserData, GetItemUserResponses, GetItemUserErrors, DeleteUserData, DeleteUserResponses, DeleteUserErrors, GetUserData, GetUserResponses, GetUserErrors, PostUserData, PostUserResponses, PostUserErrors, DeleteUserByIdData, DeleteUserByIdResponses, DeleteUserByIdErrors, GetUserByIdData, GetUserByIdResponses, GetUserByIdErrors, PutUserByIdData, PutUserByIdResponses, PutUserByIdErrors, GetUserById2FaData, GetUserById2FaResponses, GetUserById2FaErrors, DeleteUserById2FaByProviderNameData, DeleteUserById2FaByProviderNameResponses, DeleteUserById2FaByProviderNameErrors, GetUserByIdCalculateStartNodesData, GetUserByIdCalculateStartNodesResponses, GetUserByIdCalculateStartNodesErrors, PostUserByIdChangePasswordData, PostUserByIdChangePasswordResponses, PostUserByIdChangePasswordErrors, GetUserByIdClientCredentialsData, GetUserByIdClientCredentialsResponses, GetUserByIdClientCredentialsErrors, PostUserByIdClientCredentialsData, PostUserByIdClientCredentialsResponses, PostUserByIdClientCredentialsErrors, DeleteUserByIdClientCredentialsByClientIdData, DeleteUserByIdClientCredentialsByClientIdResponses, DeleteUserByIdClientCredentialsByClientIdErrors, PostUserByIdResetPasswordData, PostUserByIdResetPasswordResponses, PostUserByIdResetPasswordErrors, DeleteUserAvatarByIdData, DeleteUserAvatarByIdResponses, DeleteUserAvatarByIdErrors, PostUserAvatarByIdData, PostUserAvatarByIdResponses, PostUserAvatarByIdErrors, GetUserConfigurationData, GetUserConfigurationResponses, GetUserConfigurationErrors, GetUserCurrentData, GetUserCurrentResponses, GetUserCurrentErrors, GetUserCurrent2FaData, GetUserCurrent2FaResponses, GetUserCurrent2FaErrors, DeleteUserCurrent2FaByProviderNameData, DeleteUserCurrent2FaByProviderNameResponses, DeleteUserCurrent2FaByProviderNameErrors, GetUserCurrent2FaByProviderNameData, GetUserCurrent2FaByProviderNameResponses, GetUserCurrent2FaByProviderNameErrors, PostUserCurrent2FaByProviderNameData, PostUserCurrent2FaByProviderNameResponses, PostUserCurrent2FaByProviderNameErrors, PostUserCurrentAvatarData, PostUserCurrentAvatarResponses, PostUserCurrentAvatarErrors, PostUserCurrentChangePasswordData, PostUserCurrentChangePasswordResponses, PostUserCurrentChangePasswordErrors, GetUserCurrentConfigurationData, GetUserCurrentConfigurationResponses, GetUserCurrentConfigurationErrors, GetUserCurrentLoginProvidersData, GetUserCurrentLoginProvidersResponses, GetUserCurrentLoginProvidersErrors, GetUserCurrentPermissionsData, GetUserCurrentPermissionsResponses, GetUserCurrentPermissionsErrors, GetUserCurrentPermissionsDocumentData, GetUserCurrentPermissionsDocumentResponses, GetUserCurrentPermissionsDocumentErrors, GetUserCurrentPermissionsMediaData, GetUserCurrentPermissionsMediaResponses, GetUserCurrentPermissionsMediaErrors, PostUserDisableData, PostUserDisableResponses, PostUserDisableErrors, PostUserEnableData, PostUserEnableResponses, PostUserEnableErrors, PostUserInviteData, PostUserInviteResponses, PostUserInviteErrors, PostUserInviteCreatePasswordData, PostUserInviteCreatePasswordResponses, PostUserInviteCreatePasswordErrors, PostUserInviteResendData, PostUserInviteResendResponses, PostUserInviteResendErrors, PostUserInviteVerifyData, PostUserInviteVerifyResponses, PostUserInviteVerifyErrors, PostUserSetUserGroupsData, PostUserSetUserGroupsResponses, PostUserSetUserGroupsErrors, PostUserUnlockData, PostUserUnlockResponses, PostUserUnlockErrors, GetItemWebhookData, GetItemWebhookResponses, GetItemWebhookErrors, GetWebhookData, GetWebhookResponses, GetWebhookErrors, PostWebhookData, PostWebhookResponses, PostWebhookErrors, DeleteWebhookByIdData, DeleteWebhookByIdResponses, DeleteWebhookByIdErrors, GetWebhookByIdData, GetWebhookByIdResponses, GetWebhookByIdErrors, PutWebhookByIdData, PutWebhookByIdResponses, PutWebhookByIdErrors, GetWebhookByIdLogsData, GetWebhookByIdLogsResponses, GetWebhookByIdLogsErrors, GetWebhookEventsData, GetWebhookEventsResponses, GetWebhookEventsErrors, GetWebhookLogsData, GetWebhookLogsResponses, GetWebhookLogsErrors } from './types.gen'; import { client as _heyApiClient } from './client.gen'; export type Options = ClientOptions & { @@ -1377,6 +1377,19 @@ export class DocumentService { }); } + public static getDocumentByIdPreviewUrl(options: Options) { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'bearer', + type: 'http' + } + ], + url: '/umbraco/management/api/v1/document/{id}/preview-url', + ...options + }); + } + public static deleteDocumentByIdPublicAccess(options: Options) { return (options.client ?? _heyApiClient).delete({ security: [ @@ -3943,6 +3956,9 @@ export class PreviewService { }); } + /** + * @deprecated + */ public static postPreview(options?: Options) { return (options?.client ?? _heyApiClient).post({ security: [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/types.gen.ts b/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/types.gen.ts index 647018f043e4..5670ac70efd4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/types.gen.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/backend-api/types.gen.ts @@ -840,7 +840,9 @@ export type DocumentTypeTreeItemResponseModel = { export type DocumentUrlInfoModel = { culture: string | null; - url: string; + url: string | null; + message: string | null; + provider: string; }; export type DocumentUrlInfoResponseModel = { @@ -1366,7 +1368,7 @@ export type MediaTypeTreeItemResponseModel = { export type MediaUrlInfoModel = { culture: string | null; - url: string; + url: string | null; }; export type MediaUrlInfoResponseModel = { @@ -6188,6 +6190,49 @@ export type PutDocumentByIdNotificationsResponses = { 200: unknown; }; +export type GetDocumentByIdPreviewUrlData = { + body?: never; + path: { + id: string; + }; + query?: { + providerAlias?: string; + culture?: string; + segment?: string; + }; + url: '/umbraco/management/api/v1/document/{id}/preview-url'; +}; + +export type GetDocumentByIdPreviewUrlErrors = { + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user does not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; +}; + +export type GetDocumentByIdPreviewUrlError = GetDocumentByIdPreviewUrlErrors[keyof GetDocumentByIdPreviewUrlErrors]; + +export type GetDocumentByIdPreviewUrlResponses = { + /** + * OK + */ + 200: DocumentUrlInfoModel; +}; + +export type GetDocumentByIdPreviewUrlResponse = GetDocumentByIdPreviewUrlResponses[keyof GetDocumentByIdPreviewUrlResponses]; + export type DeleteDocumentByIdPublicAccessData = { body?: never; path: { From d9cab1c3a52b2450a65c14e7b730290751e5a6ff Mon Sep 17 00:00:00 2001 From: leekelleher Date: Thu, 2 Oct 2025 10:15:44 +0100 Subject: [PATCH 02/16] Deprecated `UmbDocumentPreviewRepository.enter()` (for v19) Fixed TS errors Added temp stub for `getPreviewUrl` --- .../preview/document-preview.repository.ts | 44 +++++++++++++++++-- .../document-url.server.data-source.ts | 5 ++- .../media/imaging/imaging.server.data.ts | 2 +- .../media-url.server.data-source.ts | 2 +- 4 files changed, 47 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/preview/document-preview.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/preview/document-preview.repository.ts index 3b4319e2437b..d216290d3997 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/preview/document-preview.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/preview/document-preview.repository.ts @@ -1,19 +1,57 @@ -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; -import { PreviewService } from '@umbraco-cms/backoffice/external/backend-api'; import { tryExecute } from '@umbraco-cms/backoffice/resources'; +import { DocumentService, PreviewService } from '@umbraco-cms/backoffice/external/backend-api'; +import { UmbDeprecation } from '@umbraco-cms/backoffice/utils'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; +import type { DocumentUrlInfoModel } from '@umbraco-cms/backoffice/external/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; export class UmbDocumentPreviewRepository extends UmbRepositoryBase { constructor(host: UmbControllerHost) { super(host); } + /** + * Gets the preview URL for a document. + * @param {string} unique The unique identifier of the document. + * @param {string} providerAlias The alias of the URL provider registered on the server. + * @param {string | undefined} culture The culture to preview (undefined means invariant). + * @param {string | undefined} segment The segment to preview (undefined means no specific segment). + * @returns {DocumentUrlInfoModel} The preview URLs of the document. + */ + async getPreviewUrl( + unique: string, + providerAlias: string, + culture?: string, + segment?: string, + ): Promise { + const { data, error } = await tryExecute( + this, + DocumentService.getDocumentByIdPreviewUrl({ + path: { id: unique }, + query: { providerAlias, culture, segment }, + }), + ); + + if (error) { + throw new Error(error.message); + } + + return data; + } + /** * Enters preview mode. * @returns {Promise} * @memberof UmbDocumentPreviewRepository + * @deprecated Replaced with the Document Preview URLs feature. This will be removed in v19. [LK] */ async enter(): Promise { + new UmbDeprecation({ + removeInVersion: '19.0.0', + deprecated: '`UmbDocumentPreviewRepository.enter()`', + solution: 'Use `UmbDocumentPreviewRepository.getPreviewUrl()` instead', + }).warn(); + await tryExecute(this, PreviewService.postPreview(), { disableNotifications: true }); return; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/url/repository/document-url.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/url/repository/document-url.server.data-source.ts index 8891d6b6c1f8..89df34cac81c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/url/repository/document-url.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/url/repository/document-url.server.data-source.ts @@ -38,4 +38,7 @@ export class UmbDocumentUrlServerDataSource extends UmbItemServerDataSourceBase< } } -const mapper = (item: DocumentUrlInfoResponseModel): UmbDocumentUrlsModel => ({ unique: item.id, urls: item.urlInfos }); +const mapper = (item: DocumentUrlInfoResponseModel): UmbDocumentUrlsModel => ({ + unique: item.id, + urls: item.urlInfos.map((urlInfo) => ({ culture: urlInfo.culture, url: urlInfo.url ?? undefined })), +}); diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/imaging/imaging.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/media/imaging/imaging.server.data.ts index 924ffc1a2448..90b38f3537d6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/imaging/imaging.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/imaging/imaging.server.data.ts @@ -45,7 +45,7 @@ export class UmbImagingServerDataSource { } #mapper(item: MediaUrlInfoResponseModel): UmbMediaUrlModel { - const url = item.urlInfos[0]?.url; + const url = item.urlInfos[0]?.url ?? undefined; return { unique: item.id, url: url, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/url/repository/media-url.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/url/repository/media-url.server.data-source.ts index 24571d50d344..70b3aa71f7bc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/url/repository/media-url.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/url/repository/media-url.server.data-source.ts @@ -40,7 +40,7 @@ export class UmbMediaUrlServerDataSource extends UmbItemServerDataSourceBase< } const mapper = (item: MediaUrlInfoResponseModel): UmbMediaUrlModel => { - const url = item.urlInfos.length ? item.urlInfos[0].url : undefined; + const url = item.urlInfos.length ? (item.urlInfos[0].url ?? undefined) : undefined; const extension = url ? url.slice(url.lastIndexOf('.') + 1, url.length) : undefined; return { From b18ebbac57f6633bc8c80aae67ce15aeb21e967c Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 6 Oct 2025 15:46:30 +0100 Subject: [PATCH 03/16] Adds `previewOption` extension-type --- .../packages/documents/documents/manifests.ts | 2 ++ .../documents/documents/preview/manifests.ts | 5 +++ .../documents/preview/preview-option/index.ts | 1 + .../preview/preview-option/manifests.ts | 3 ++ .../preview-option-action-base.controller.ts | 19 ++++++++++ .../preview-option.extension.ts | 35 +++++++++++++++++++ .../documents/preview/preview-option/types.ts | 1 + .../documents/documents/preview/types.ts | 1 + .../src/packages/documents/documents/types.ts | 1 + 9 files changed, 68 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option-action-base.controller.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option.extension.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/types.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/types.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts index 29ec4cf58107..ab1b483f437d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts @@ -7,6 +7,7 @@ import { manifests as itemManifests } from './item/manifests.js'; import { manifests as menuManifests } from './menu/manifests.js'; import { manifests as modalManifests } from './modals/manifests.js'; import { manifests as pickerManifests } from './picker/manifests.js'; +import { manifests as previewManifests } from './preview/manifests.js'; import { manifests as propertyEditorManifests } from './property-editors/manifests.js'; import { manifests as publishingManifests } from './publishing/manifests.js'; import { manifests as recycleBinManifests } from './recycle-bin/manifests.js'; @@ -31,6 +32,7 @@ export const manifests: Array = ...menuManifests, ...modalManifests, ...pickerManifests, + ...previewManifests, ...propertyEditorManifests, ...publishingManifests, ...recycleBinManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/manifests.ts new file mode 100644 index 000000000000..e20ed200db98 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/manifests.ts @@ -0,0 +1,5 @@ +import { manifests as previewOptionManifests } from './preview-option/manifests.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +export const manifests: Array = [ + ...previewOptionManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/index.ts new file mode 100644 index 000000000000..055d9215ba6c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/index.ts @@ -0,0 +1 @@ +export * from './preview-option-action-base.controller.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts new file mode 100644 index 000000000000..334182d7fd90 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts @@ -0,0 +1,3 @@ +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +export const manifests: Array = [ +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option-action-base.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option-action-base.controller.ts new file mode 100644 index 000000000000..fd8f9ff27a0e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option-action-base.controller.ts @@ -0,0 +1,19 @@ +import { UmbActionBase } from '@umbraco-cms/backoffice/action'; +import type { UmbAction } from '@umbraco-cms/backoffice/action'; + +/** + * Base class for a preview option action. + * @abstract + * @class UmbPreviewOptionActionBase + * @augments {UmbActionBase} + */ +export abstract class UmbPreviewOptionActionBase extends UmbActionBase> { + /** + * By specifying the `execute` method, the action will act as a button. + * @abstract + * @returns {Promise} + */ + public execute(): Promise { + return Promise.resolve(); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option.extension.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option.extension.ts new file mode 100644 index 000000000000..eefb55be9e0b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option.extension.ts @@ -0,0 +1,35 @@ +import type { UmbPreviewOptionActionBase } from './preview-option-action-base.controller.js'; +import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import type { UUIInterfaceLook, UUIInterfaceColor } from '@umbraco-cms/backoffice/external/uui'; + +export interface ManifestPreviewOption + extends ManifestElementAndApi>, + ManifestWithDynamicConditions { + type: 'previewOption'; + meta: MetaPreviewOption; +} + +export interface MetaPreviewOption { + icon?: string; + label?: string; + look?: UUIInterfaceLook; + color?: UUIInterfaceColor; +} + +export interface ManifestPreviewOptionDefaultKind extends ManifestPreviewOption { + type: 'previewOption'; + kind: 'default'; +} + +export interface ManifestPreviewOptionUrlProviderKind extends ManifestPreviewOption { + type: 'previewOption'; + kind: 'urlProvider'; + providerAlias: string; +} + +declare global { + interface UmbExtensionManifestMap { + umbPreviewOption: ManifestPreviewOption | ManifestPreviewOptionDefaultKind | ManifestPreviewOptionUrlProviderKind; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/types.ts new file mode 100644 index 000000000000..6eaa0554ba87 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/types.ts @@ -0,0 +1 @@ +export type * from './preview-option.extension.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/types.ts new file mode 100644 index 000000000000..80e59ee0b84a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/types.ts @@ -0,0 +1 @@ +export type * from './preview-option/types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/types.ts index 50f077041566..5366397175c4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/types.ts @@ -14,6 +14,7 @@ export type * from './collection/types.js'; export type * from './entity.js'; export type * from './item/types.js'; export type * from './modals/types.js'; +export type * from './preview/types.js'; export type * from './publishing/types.js'; export type * from './recycle-bin/types.js'; export type * from './tree/types.js'; From 0e51bf55f35f2d429dd72623984acb2b59da4364 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 6 Oct 2025 15:53:08 +0100 Subject: [PATCH 04/16] Adds "default" `previewOption` kind --- .../src/packages/documents/documents/index.ts | 1 + .../documents/documents/preview/index.ts | 1 + .../default.preview-option-action.ts | 11 +++++++++++ .../default.preview-option.kind.ts | 19 +++++++++++++++++++ .../preview/preview-option/manifests.ts | 2 ++ 5 files changed, 34 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option-action.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option.kind.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts index 317a4ffda72f..ee2bb88bf26b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts @@ -9,6 +9,7 @@ export * from './global-contexts/index.js'; export * from './item/index.js'; export * from './modals/index.js'; export * from './paths.js'; +export * from './preview/index.js'; export * from './publishing/index.js'; export * from './recycle-bin/index.js'; export * from './reference/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/index.ts new file mode 100644 index 000000000000..100aad04e322 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/index.ts @@ -0,0 +1 @@ +export * from './preview-option/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option-action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option-action.ts new file mode 100644 index 000000000000..f91ba285ec8e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option-action.ts @@ -0,0 +1,11 @@ +import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../../workspace/document-workspace.context-token.js'; +import { UmbPreviewOptionActionBase } from './preview-option-action-base.controller.js'; + +export class UmbDefaultPreviewOptionAction extends UmbPreviewOptionActionBase { + override async execute() { + const workspaceContext = await this.getContext(UMB_DOCUMENT_WORKSPACE_CONTEXT); + workspaceContext?.saveAndPreview(); + } +} + +export { UmbDefaultPreviewOptionAction as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option.kind.ts new file mode 100644 index 000000000000..7651b874a36a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option.kind.ts @@ -0,0 +1,19 @@ +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifest: UmbExtensionManifestKind = { + type: 'kind', + alias: 'Umb.Kind.PreviewOption.Default', + matchKind: 'default', + matchType: 'previewOption', + manifest: { + type: 'previewOption', + kind: 'default', + weight: 1000, + api: () => import('./default.preview-option-action.js'), + elementName: 'umb-workspace-action-menu-item', + meta: { + icon: '', + label: '(Missing label in manifest)', + }, + }, +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts index 334182d7fd90..773b0b1ba100 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts @@ -1,3 +1,5 @@ +import { manifest as defaultKind } from './default.preview-option.kind.js'; import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; export const manifests: Array = [ + defaultKind, ]; From b4ec2448eb778aa41e968ce87a804151559db244 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 6 Oct 2025 16:00:56 +0100 Subject: [PATCH 05/16] Relocated "Save and Preview" workspace action reworked using the "default" `previewOption` kind. --- .../documents/documents/preview/manifests.ts | 3 + .../preview/preview-option/manifests.ts | 13 ++ .../preview/workspace-action/manifests.ts | 27 +++ ...ve-and-preview-workspace-action.element.ts | 154 ++++++++++++++++++ .../save-and-preview.action.ts | 13 -- .../documents/workspace/actions/manifests.ts | 20 --- 6 files changed, 197 insertions(+), 33 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/save-and-preview-workspace-action.element.ts rename src/Umbraco.Web.UI.Client/src/packages/documents/documents/{workspace/actions => preview/workspace-action}/save-and-preview.action.ts (62%) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/manifests.ts index e20ed200db98..bde48f4a0b9a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/manifests.ts @@ -1,5 +1,8 @@ import { manifests as previewOptionManifests } from './preview-option/manifests.js'; +import { manifests as workspaceActionManifests } from './workspace-action/manifests.js'; import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + export const manifests: Array = [ ...previewOptionManifests, + ...workspaceActionManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts index 773b0b1ba100..70ed92c95253 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts @@ -1,5 +1,18 @@ import { manifest as defaultKind } from './default.preview-option.kind.js'; import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +const previewOption: UmbExtensionManifest = { + type: 'previewOption', + kind: 'default', + alias: 'Umb.PreviewOption.Document.SaveAndPreview', + name: 'Save And Preview Document Preview Option', + weight: 200, + meta: { + label: '#buttons_saveAndPreview', + }, +}; + export const manifests: Array = [ + previewOption, defaultKind, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/manifests.ts new file mode 100644 index 000000000000..93d854cb79f9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/manifests.ts @@ -0,0 +1,27 @@ +import { UMB_DOCUMENT_WORKSPACE_ALIAS } from '../../constants.js'; +import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin'; +import { UMB_WORKSPACE_CONDITION_ALIAS } from '@umbraco-cms/backoffice/workspace'; + +const workspaceAction: UmbExtensionManifest = { + type: 'workspaceAction', + kind: 'default', + alias: 'Umb.WorkspaceAction.Document.SaveAndPreview', + name: 'Save And Preview Document Workspace Action', + weight: 90, + api: () => import('./save-and-preview.action.js'), + element: () => import('./save-and-preview-workspace-action.element.js'), + meta: { + label: '#buttons_saveAndPreview', + }, + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: UMB_DOCUMENT_WORKSPACE_ALIAS, + }, + { + alias: UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS, + }, + ], +}; + +export const manifests: Array = [workspaceAction]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/save-and-preview-workspace-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/save-and-preview-workspace-action.element.ts new file mode 100644 index 000000000000..a378342f8570 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/save-and-preview-workspace-action.element.ts @@ -0,0 +1,154 @@ +import type { ManifestPreviewOption } from '../preview-option/preview-option.extension.js'; +import { customElement, html, property, state, when } from '@umbraco-cms/backoffice/external/lit'; +import { UmbActionExecutedEvent } from '@umbraco-cms/backoffice/event'; +import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; +import { UmbExtensionsElementAndApiInitializer } from '@umbraco-cms/backoffice/extension-api'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import type { UmbWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import type { UmbExtensionElementAndApiInitializer } from '@umbraco-cms/backoffice/extension-api'; +import type { UUIButtonState } from '@umbraco-cms/backoffice/external/uui'; + +@customElement('umb-save-and-preview-workspace-action') +export class UmbSaveAndPreviewWorkspaceActionElement extends UmbLitElement { + #buttonStateResetTimeoutId: number | null = null; + + #extensionsController?: UmbExtensionsElementAndApiInitializer< + ManifestPreviewOption, + 'previewOption', + ManifestPreviewOption + >; + + @property({ type: Object, attribute: false }) + public set manifest(value: ManifestPreviewOption | undefined) { + if (!value) return; + const oldValue = this.#manifest; + if (oldValue !== value) { + this.#manifest = value; + this.#observeExtensions(); + } + } + public get manifest() { + return this.#manifest; + } + #manifest?: ManifestPreviewOption; + + @property({ attribute: false }) + public set api(api: UmbWorkspaceAction | undefined) { + this.#api = api; + this.#observeIsDisabled(); + } + public get api(): UmbWorkspaceAction | undefined { + return this.#api; + } + #api?: UmbWorkspaceAction; + + @state() + private _buttonState?: UUIButtonState; + + @state() + private _isDisabled = false; + + @state() + private _actions: Array> = []; + + private _primaryAction?: UmbExtensionElementAndApiInitializer; + + async #onClick() { + this._buttonState = 'waiting'; + + try { + if (!this._primaryAction?.api) throw new Error('No api defined'); + await this._primaryAction.api.execute().catch(() => {}); + this._buttonState = 'success'; + } catch (reason) { + if (reason) { + console.warn(reason); + } + this._buttonState = 'failed'; + } + + this.#initButtonStateReset(); + this.dispatchEvent(new UmbActionExecutedEvent()); + } + + #observeIsDisabled() { + this.observe( + this.#api?.isDisabled, + (isDisabled) => { + this._isDisabled = isDisabled || false; + }, + 'isDisabledObserver', + ); + } + + #initButtonStateReset() { + this.#clearButtonStateResetTimeout(); + this.#buttonStateResetTimeoutId = window.setTimeout(() => { + this._buttonState = undefined; + }, 2000); + } + + #clearButtonStateResetTimeout() { + if (this.#buttonStateResetTimeoutId !== null) { + clearTimeout(this.#buttonStateResetTimeoutId); + this.#buttonStateResetTimeoutId = null; + } + } + + #observeExtensions(): void { + this.#extensionsController?.destroy(); + this.#extensionsController = new UmbExtensionsElementAndApiInitializer< + ManifestPreviewOption, + 'previewOption', + ManifestPreviewOption + >(this, umbExtensionsRegistry, 'previewOption', [], undefined, (extensionControllers) => { + this._primaryAction = extensionControllers.shift(); + this._actions = extensionControllers; + }); + } + + #renderButton() { + const label = this._primaryAction?.manifest?.meta.label || this.#manifest?.meta.label || this.#manifest?.name; + return html` + + `; + } + + #renderActionMenu() { + // TODO: [LK] FIXME: The `any` type casting here needs to be resolved with a proper type. + return html` + + `; + } + + override render() { + return when( + this._actions.length, + () => html`${this.#renderButton()}${this.#renderActionMenu()}`, + () => this.#renderButton(), + ); + } + + override disconnectedCallback() { + super.disconnectedCallback(); + this.#clearButtonStateResetTimeout(); + } +} + +export default UmbSaveAndPreviewWorkspaceActionElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-save-and-preview-workspace-action': UmbSaveAndPreviewWorkspaceActionElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save-and-preview.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/save-and-preview.action.ts similarity index 62% rename from src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save-and-preview.action.ts rename to src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/save-and-preview.action.ts index 6f0e3a783a04..e622c57bf675 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save-and-preview.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/save-and-preview.action.ts @@ -1,13 +1,8 @@ import { UmbDocumentUserPermissionCondition } from '../../user-permissions/document/conditions/document-user-permission.condition.js'; -import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../document-workspace.context-token.js'; import { UMB_USER_PERMISSION_DOCUMENT_UPDATE } from '../../user-permissions/document/constants.js'; import { UmbWorkspaceActionBase } from '@umbraco-cms/backoffice/workspace'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -// TODO: Investigate how additional preview environments can be supported. [LK:2024-05-16] -// https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/additional-preview-environments-support -// In v13, they are registered on the server using `SendingContentNotification`, which is no longer available in v14. - export class UmbDocumentSaveAndPreviewWorkspaceAction extends UmbWorkspaceActionBase { constructor(host: UmbControllerHost, args: any) { super(host, args); @@ -31,14 +26,6 @@ export class UmbDocumentSaveAndPreviewWorkspaceAction extends UmbWorkspaceAction }, }); } - - override async execute() { - const workspaceContext = await this.getContext(UMB_DOCUMENT_WORKSPACE_CONTEXT); - if (!workspaceContext) { - throw new Error('Document workspace context not found'); - } - workspaceContext.saveAndPreview(); - } } export { UmbDocumentSaveAndPreviewWorkspaceAction as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/manifests.ts index 291ff6174555..3112f8ad2093 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/manifests.ts @@ -25,24 +25,4 @@ export const manifests: Array = [ }, ], }, - { - type: 'workspaceAction', - kind: 'default', - alias: 'Umb.WorkspaceAction.Document.SaveAndPreview', - name: 'Save And Preview Document Workspace Action', - weight: 90, - api: () => import('./save-and-preview.action.js'), - meta: { - label: '#buttons_saveAndPreview', - }, - conditions: [ - { - alias: UMB_WORKSPACE_CONDITION_ALIAS, - match: UMB_DOCUMENT_WORKSPACE_ALIAS, - }, - { - alias: UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS, - }, - ], - }, ]; From 5e708cfab32af9bc4777c88d2dd63dc198fda75f Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 6 Oct 2025 16:01:34 +0100 Subject: [PATCH 06/16] Added stub for "urlProvider" `previewOption` kind --- .../preview/preview-option/manifests.ts | 2 ++ .../url-provider.preview-option-action.ts | 14 +++++++++++++ .../url-provider.preview-option.kind.ts | 20 +++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option-action.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option.kind.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts index 70ed92c95253..0e1256c1e8a7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts @@ -1,4 +1,5 @@ import { manifest as defaultKind } from './default.preview-option.kind.js'; +import { manifest as urlProviderKind } from './url-provider.preview-option.kind.js'; import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; const previewOption: UmbExtensionManifest = { @@ -15,4 +16,5 @@ const previewOption: UmbExtensionManifest = { export const manifests: Array = [ previewOption, defaultKind, + urlProviderKind, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option-action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option-action.ts new file mode 100644 index 000000000000..9b2b9df5a1b1 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option-action.ts @@ -0,0 +1,14 @@ +import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../../workspace/document-workspace.context-token.js'; +import { UmbPreviewOptionActionBase } from './preview-option-action-base.controller.js'; +import type { ManifestPreviewOptionUrlProviderKind } from './preview-option.extension.js'; + +export class UmbUrlProviderPreviewOptionAction extends UmbPreviewOptionActionBase { + manifest?: ManifestPreviewOptionUrlProviderKind; + + override async execute() { + const workspaceContext = await this.getContext(UMB_DOCUMENT_WORKSPACE_CONTEXT); + workspaceContext?.saveAndPreview(); + } +} + +export { UmbUrlProviderPreviewOptionAction as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option.kind.ts new file mode 100644 index 000000000000..265a47d92138 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option.kind.ts @@ -0,0 +1,20 @@ +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifest: UmbExtensionManifestKind = { + type: 'kind', + alias: 'Umb.Kind.PreviewOption.UrlProvider', + matchKind: 'urlProvider', + matchType: 'previewOption', + manifest: { + type: 'previewOption', + kind: 'urlProvider', + weight: 1000, + api: () => import('./url-provider.preview-option-action.js'), + elementName: 'umb-workspace-action-menu-item', + providerAlias: '', + meta: { + icon: '', + label: '(Missing label in manifest)', + }, + }, +}; From d5478519d2a6aaab3858a3827597e8b7dab7dc2f Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 6 Oct 2025 16:04:33 +0100 Subject: [PATCH 07/16] Renamed "workspace-action-default-kind.element.ts" to a more suitable filename. Exported element so can be reused in other packages, e.g. documents, for the new "save and preview" feature. --- .../default/index.ts | 1 + .../workspace-action-menu-item.element.ts | 14 +++---- .../workspace-action-menu-item/index.ts | 1 + .../workspace-action-menu.element.ts | 6 ++- .../workspace-action/default/index.ts | 1 + .../workspace-action/default/manifests.ts | 2 +- ...element.ts => workspace-action.element.ts} | 39 +++++++------------ .../components/workspace-action/index.ts | 1 + 8 files changed, 27 insertions(+), 38 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/index.ts rename src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/{workspace-action-default-kind.element.ts => workspace-action.element.ts} (88%) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/index.ts new file mode 100644 index 000000000000..ef6732912435 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/index.ts @@ -0,0 +1 @@ +export * from './workspace-action-menu-item.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/workspace-action-menu-item.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/workspace-action-menu-item.element.ts index f161fbe6711f..a0b3414a1084 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/workspace-action-menu-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/workspace-action-menu-item.element.ts @@ -3,8 +3,8 @@ import type { ManifestWorkspaceActionMenuItemDefaultKind, MetaWorkspaceActionMenuItemDefaultKind, } from '../../../extensions/types.js'; +import { customElement, html, ifDefined, property, state, when } from '@umbraco-cms/backoffice/external/lit'; import { UmbActionExecutedEvent } from '@umbraco-cms/backoffice/event'; -import { html, customElement, property, state, ifDefined, nothing } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UUIMenuItemEvent } from '@umbraco-cms/backoffice/external/uui'; @@ -48,15 +48,11 @@ export class UmbWorkspaceActionMenuItemElement< override render() { return html` - ${this.manifest?.meta.icon - ? html`` - : nothing} + @click=${this.#onClick} + @click-label=${this.#onClickLabel}> + ${when(this.manifest?.meta.icon, (icon) => html``)} `; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/index.ts index 3db891eb25f8..45c48d016926 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/index.ts @@ -1 +1,2 @@ +export * from './default/index.js'; export * from './workspace-action-menu-item-base.controller.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu/workspace-action-menu.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu/workspace-action-menu.element.ts index 93fd02d32609..5335a0423e02 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu/workspace-action-menu.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu/workspace-action-menu.element.ts @@ -29,7 +29,8 @@ export class UmbWorkspaceActionMenuElement extends UmbLitElement { override render() { if (!this.items?.length) return nothing; - return html` - `; + + `; } static override styles = [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/index.ts new file mode 100644 index 000000000000..24b7e3dc14be --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/index.ts @@ -0,0 +1 @@ +export * from './workspace-action.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/manifests.ts index 8b30dea13f7f..981f71c9138b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/manifests.ts @@ -9,7 +9,7 @@ export const manifest: UmbExtensionManifestKind = { type: 'workspaceAction', kind: 'default', weight: 1000, - element: () => import('./workspace-action-default-kind.element.js'), + element: () => import('./workspace-action.element.js'), meta: { label: '(Missing label in manifest)', }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action-default-kind.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action.element.ts similarity index 88% rename from src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action-default-kind.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action.element.ts index 00666645e847..5d620d518e3f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action-default-kind.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action.element.ts @@ -4,18 +4,14 @@ import type { MetaWorkspaceActionDefaultKind, UmbWorkspaceActionDefaultKind, } from '../../../types.js'; +import { customElement, html, property, state, when } from '@umbraco-cms/backoffice/external/lit'; +import { stringOrStringArrayIntersects } from '@umbraco-cms/backoffice/utils'; import { UmbActionExecutedEvent } from '@umbraco-cms/backoffice/event'; -import { html, customElement, property, state, when } from '@umbraco-cms/backoffice/external/lit'; -import type { UUIButtonState } from '@umbraco-cms/backoffice/external/uui'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; -import { - type UmbExtensionElementAndApiInitializer, - UmbExtensionsElementAndApiInitializer, -} from '@umbraco-cms/backoffice/extension-api'; -import { stringOrStringArrayIntersects } from '@umbraco-cms/backoffice/utils'; - -import '../../workspace-action-menu/index.js'; +import { UmbExtensionsElementAndApiInitializer } from '@umbraco-cms/backoffice/extension-api'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import type { UmbExtensionElementAndApiInitializer } from '@umbraco-cms/backoffice/extension-api'; +import type { UUIButtonState } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-workspace-action') export class UmbWorkspaceActionElement< @@ -167,7 +163,7 @@ export class UmbWorkspaceActionElement< this, umbExtensionsRegistry, 'workspaceActionMenuItem', - ExtensionApiArgsMethod, + (manifest) => [{ meta: manifest.meta }], (action) => stringOrStringArrayIntersects(action.forWorkspaceActions, aliases), (extensionControllers) => { this._items = extensionControllers; @@ -183,11 +179,11 @@ export class UmbWorkspaceActionElement< return html` `; @@ -196,16 +192,16 @@ export class UmbWorkspaceActionElement< #renderActionMenu() { return html` + color=${this.#manifest?.meta.color ?? 'default'} + look=${this.#manifest?.meta.look ?? 'default'} + .items=${this._items}> `; } override render() { return when( this._items.length, - () => html` ${this.#renderButton()} ${this.#renderActionMenu()} `, + () => html`${this.#renderButton()}${this.#renderActionMenu()}`, () => this.#renderButton(), ); } @@ -223,12 +219,3 @@ declare global { 'umb-workspace-action': UmbWorkspaceActionElement; } } - -/** - * - * @param manifest - * @returns An array of arguments to pass to the extension API initializer. - */ -function ExtensionApiArgsMethod(manifest: ManifestWorkspaceActionMenuItem) { - return [{ meta: manifest.meta }]; -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/index.ts index e2e16c2370ae..fb3b93710842 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/index.ts @@ -1,2 +1,3 @@ export * from './common/index.js'; +export * from './default/index.js'; export * from './workspace-action-base.controller.js'; From fde78dc5124117ed162df30cf98fe5f95497bb2b Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 6 Oct 2025 17:05:54 +0100 Subject: [PATCH 08/16] Refactored "Save and Preview" button to work with first action's manifest/API. --- ...ve-and-preview-workspace-action.element.ts | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/save-and-preview-workspace-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/save-and-preview-workspace-action.element.ts index a378342f8570..9b6fea75ade2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/save-and-preview-workspace-action.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action/save-and-preview-workspace-action.element.ts @@ -1,8 +1,9 @@ -import type { ManifestPreviewOption } from '../preview-option/preview-option.extension.js'; +import type { ManifestPreviewOption, MetaPreviewOption } from '../preview-option/preview-option.extension.js'; +import type { UmbPreviewOptionActionBase } from '../preview-option/preview-option-action-base.controller.js'; import { customElement, html, property, state, when } from '@umbraco-cms/backoffice/external/lit'; import { UmbActionExecutedEvent } from '@umbraco-cms/backoffice/event'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; -import { UmbExtensionsElementAndApiInitializer } from '@umbraco-cms/backoffice/extension-api'; +import { createExtensionApi, UmbExtensionsElementAndApiInitializer } from '@umbraco-cms/backoffice/extension-api'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { UmbExtensionElementAndApiInitializer } from '@umbraco-cms/backoffice/extension-api'; @@ -51,14 +52,18 @@ export class UmbSaveAndPreviewWorkspaceActionElement extends UmbLitElement { @state() private _actions: Array> = []; - private _primaryAction?: UmbExtensionElementAndApiInitializer; + @state() + private _firstActionManifest?: ManifestPreviewOption; + + @state() + private _firstActionApi?: UmbPreviewOptionActionBase; async #onClick() { this._buttonState = 'waiting'; try { - if (!this._primaryAction?.api) throw new Error('No api defined'); - await this._primaryAction.api.execute().catch(() => {}); + if (!this._firstActionApi) throw new Error('No api defined'); + await this._firstActionApi.execute().catch(() => {}); this._buttonState = 'success'; } catch (reason) { if (reason) { @@ -101,14 +106,23 @@ export class UmbSaveAndPreviewWorkspaceActionElement extends UmbLitElement { ManifestPreviewOption, 'previewOption', ManifestPreviewOption - >(this, umbExtensionsRegistry, 'previewOption', [], undefined, (extensionControllers) => { - this._primaryAction = extensionControllers.shift(); - this._actions = extensionControllers; + >(this, umbExtensionsRegistry, 'previewOption', [], undefined, async (actions) => { + const firstAction = actions.shift(); + + if (firstAction) { + this._firstActionManifest = firstAction.manifest; + this._firstActionApi = await createExtensionApi(this, firstAction.manifest, []); + if (this._firstActionApi) { + (this._firstActionApi as any).manifest = this._firstActionManifest; + } + } + + this._actions = actions; }); } #renderButton() { - const label = this._primaryAction?.manifest?.meta.label || this.#manifest?.meta.label || this.#manifest?.name; + const label = this._firstActionManifest?.meta.label || this.#manifest?.meta.label || this.#manifest?.name; return html` html`${this.#renderButton()}${this.#renderActionMenu()}`, From 161bdf4a2e5a9c920f093964d3e7cc6265442032 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 6 Oct 2025 21:34:10 +0100 Subject: [PATCH 09/16] Reverted `previewOption` extension-type Re-engineered to make a "urlProvider" kind for `workspaceActionMenuItem`. This is to simplify the extension point and surrounding logic. --- .../src/packages/documents/documents/index.ts | 1 - .../documents/documents/preview/index.ts | 1 - .../documents/documents/preview/manifests.ts | 2 +- .../default.preview-option-action.ts | 11 ------ .../default.preview-option.kind.ts | 19 ---------- .../documents/preview/preview-option/index.ts | 1 - .../preview/preview-option/manifests.ts | 20 ----------- .../preview-option-action-base.controller.ts | 19 ---------- .../preview-option.extension.ts | 35 ------------------- .../documents/preview/preview-option/types.ts | 1 - .../url-provider.preview-option-action.ts | 14 -------- .../documents/documents/preview/types.ts | 2 +- .../workspace-action-menu-item/manifests.ts | 20 +++++++++++ .../workspace-action-menu-item/types.ts | 1 + .../url-provider.action.ts | 17 +++++++++ ...rl-provider.workspace-action-item.kind.ts} | 11 +++--- ...er.workspace-action-menu-item.extension.ts | 18 ++++++++++ 17 files changed, 64 insertions(+), 129 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/index.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option-action.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option.kind.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/index.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option-action-base.controller.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option.extension.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/types.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option-action.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/types.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.action.ts rename src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/{preview-option/url-provider.preview-option.kind.ts => workspace-action-menu-item/url-provider.workspace-action-item.kind.ts} (55%) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.workspace-action-menu-item.extension.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts index ee2bb88bf26b..317a4ffda72f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts @@ -9,7 +9,6 @@ export * from './global-contexts/index.js'; export * from './item/index.js'; export * from './modals/index.js'; export * from './paths.js'; -export * from './preview/index.js'; export * from './publishing/index.js'; export * from './recycle-bin/index.js'; export * from './reference/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/index.ts deleted file mode 100644 index 100aad04e322..000000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './preview-option/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/manifests.ts index bde48f4a0b9a..a3765d6b90d7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/manifests.ts @@ -1,4 +1,4 @@ -import { manifests as previewOptionManifests } from './preview-option/manifests.js'; +import { manifests as previewOptionManifests } from './workspace-action-menu-item/manifests.js'; import { manifests as workspaceActionManifests } from './workspace-action/manifests.js'; import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option-action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option-action.ts deleted file mode 100644 index f91ba285ec8e..000000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option-action.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../../workspace/document-workspace.context-token.js'; -import { UmbPreviewOptionActionBase } from './preview-option-action-base.controller.js'; - -export class UmbDefaultPreviewOptionAction extends UmbPreviewOptionActionBase { - override async execute() { - const workspaceContext = await this.getContext(UMB_DOCUMENT_WORKSPACE_CONTEXT); - workspaceContext?.saveAndPreview(); - } -} - -export { UmbDefaultPreviewOptionAction as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option.kind.ts deleted file mode 100644 index 7651b874a36a..000000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/default.preview-option.kind.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: UmbExtensionManifestKind = { - type: 'kind', - alias: 'Umb.Kind.PreviewOption.Default', - matchKind: 'default', - matchType: 'previewOption', - manifest: { - type: 'previewOption', - kind: 'default', - weight: 1000, - api: () => import('./default.preview-option-action.js'), - elementName: 'umb-workspace-action-menu-item', - meta: { - icon: '', - label: '(Missing label in manifest)', - }, - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/index.ts deleted file mode 100644 index 055d9215ba6c..000000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './preview-option-action-base.controller.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts deleted file mode 100644 index 0e1256c1e8a7..000000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/manifests.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { manifest as defaultKind } from './default.preview-option.kind.js'; -import { manifest as urlProviderKind } from './url-provider.preview-option.kind.js'; -import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; - -const previewOption: UmbExtensionManifest = { - type: 'previewOption', - kind: 'default', - alias: 'Umb.PreviewOption.Document.SaveAndPreview', - name: 'Save And Preview Document Preview Option', - weight: 200, - meta: { - label: '#buttons_saveAndPreview', - }, -}; - -export const manifests: Array = [ - previewOption, - defaultKind, - urlProviderKind, -]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option-action-base.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option-action-base.controller.ts deleted file mode 100644 index fd8f9ff27a0e..000000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option-action-base.controller.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { UmbActionBase } from '@umbraco-cms/backoffice/action'; -import type { UmbAction } from '@umbraco-cms/backoffice/action'; - -/** - * Base class for a preview option action. - * @abstract - * @class UmbPreviewOptionActionBase - * @augments {UmbActionBase} - */ -export abstract class UmbPreviewOptionActionBase extends UmbActionBase> { - /** - * By specifying the `execute` method, the action will act as a button. - * @abstract - * @returns {Promise} - */ - public execute(): Promise { - return Promise.resolve(); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option.extension.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option.extension.ts deleted file mode 100644 index eefb55be9e0b..000000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/preview-option.extension.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { UmbPreviewOptionActionBase } from './preview-option-action-base.controller.js'; -import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; -import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -import type { UUIInterfaceLook, UUIInterfaceColor } from '@umbraco-cms/backoffice/external/uui'; - -export interface ManifestPreviewOption - extends ManifestElementAndApi>, - ManifestWithDynamicConditions { - type: 'previewOption'; - meta: MetaPreviewOption; -} - -export interface MetaPreviewOption { - icon?: string; - label?: string; - look?: UUIInterfaceLook; - color?: UUIInterfaceColor; -} - -export interface ManifestPreviewOptionDefaultKind extends ManifestPreviewOption { - type: 'previewOption'; - kind: 'default'; -} - -export interface ManifestPreviewOptionUrlProviderKind extends ManifestPreviewOption { - type: 'previewOption'; - kind: 'urlProvider'; - providerAlias: string; -} - -declare global { - interface UmbExtensionManifestMap { - umbPreviewOption: ManifestPreviewOption | ManifestPreviewOptionDefaultKind | ManifestPreviewOptionUrlProviderKind; - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/types.ts deleted file mode 100644 index 6eaa0554ba87..000000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/types.ts +++ /dev/null @@ -1 +0,0 @@ -export type * from './preview-option.extension.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option-action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option-action.ts deleted file mode 100644 index 9b2b9df5a1b1..000000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option-action.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../../workspace/document-workspace.context-token.js'; -import { UmbPreviewOptionActionBase } from './preview-option-action-base.controller.js'; -import type { ManifestPreviewOptionUrlProviderKind } from './preview-option.extension.js'; - -export class UmbUrlProviderPreviewOptionAction extends UmbPreviewOptionActionBase { - manifest?: ManifestPreviewOptionUrlProviderKind; - - override async execute() { - const workspaceContext = await this.getContext(UMB_DOCUMENT_WORKSPACE_CONTEXT); - workspaceContext?.saveAndPreview(); - } -} - -export { UmbUrlProviderPreviewOptionAction as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/types.ts index 80e59ee0b84a..7f71e8a9a21a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/types.ts @@ -1 +1 @@ -export type * from './preview-option/types.js'; +export type * from './workspace-action-menu-item/types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/manifests.ts new file mode 100644 index 000000000000..0433d82ab54f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/manifests.ts @@ -0,0 +1,20 @@ +import { manifest as workspaceActionItemKind } from './url-provider.workspace-action-item.kind.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +const saveAndPreview: UmbExtensionManifest = { + type: 'workspaceActionMenuItem', + kind: 'urlProvider', + alias: 'Umb.Document.WorkspaceActionMenuItem.SaveAndPreview', + name: 'Save And Preview Document URL Provider Workspace Action Menu Item', + forWorkspaceActions: 'Umb.WorkspaceAction.Document.SaveAndPreview', + urlProviderAlias: 'umbDocumentUrlProvider', + weight: 100, + meta: { + label: '#buttons_saveAndPreview', + }, +}; + +export const manifests: Array = [ + saveAndPreview, + workspaceActionItemKind, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/types.ts new file mode 100644 index 000000000000..9e345e3ceacd --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/types.ts @@ -0,0 +1 @@ +export type * from './url-provider.workspace-action-menu-item.extension.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.action.ts new file mode 100644 index 000000000000..de3b15d7395f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.action.ts @@ -0,0 +1,17 @@ +import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../../workspace/document-workspace.context-token.js'; +import type { ManifestWorkspaceActionMenuItemUrlProviderKind } from './url-provider.workspace-action-menu-item.extension.js'; +import { UmbWorkspaceActionBase } from '@umbraco-cms/backoffice/workspace'; + +export class UmbDocumentSaveAndPreviewWorkspaceAction extends UmbWorkspaceActionBase { + manifest?: ManifestWorkspaceActionMenuItemUrlProviderKind; + + override async execute() { + const workspaceContext = await this.getContext(UMB_DOCUMENT_WORKSPACE_CONTEXT); + if (!workspaceContext) { + throw new Error('The workspace context is missing'); + } + workspaceContext?.saveAndPreview(this.manifest?.urlProviderAlias); + } +} + +export { UmbDocumentSaveAndPreviewWorkspaceAction as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.workspace-action-item.kind.ts similarity index 55% rename from src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option.kind.ts rename to src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.workspace-action-item.kind.ts index 265a47d92138..29a288eec540 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/preview-option/url-provider.preview-option.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.workspace-action-item.kind.ts @@ -2,16 +2,17 @@ import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension export const manifest: UmbExtensionManifestKind = { type: 'kind', - alias: 'Umb.Kind.PreviewOption.UrlProvider', + alias: 'Umb.Kind.WorkspaceActionMenuItem.UrlProvider', + matchType: 'workspaceActionMenuItem', matchKind: 'urlProvider', - matchType: 'previewOption', manifest: { - type: 'previewOption', + type: 'workspaceActionMenuItem', kind: 'urlProvider', weight: 1000, - api: () => import('./url-provider.preview-option-action.js'), + api: () => import('./url-provider.action.js'), elementName: 'umb-workspace-action-menu-item', - providerAlias: '', + forWorkspaceActions: 'Umb.WorkspaceAction.Document.SaveAndPreview', + urlProviderAlias: 'umbDocumentUrlProvider', meta: { icon: '', label: '(Missing label in manifest)', diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.workspace-action-menu-item.extension.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.workspace-action-menu-item.extension.ts new file mode 100644 index 000000000000..bf84c8b294e7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.workspace-action-menu-item.extension.ts @@ -0,0 +1,18 @@ +import type { + ManifestWorkspaceActionMenuItem, + MetaWorkspaceActionMenuItemDefaultKind, +} from '@umbraco-cms/backoffice/workspace'; + +export interface ManifestWorkspaceActionMenuItemUrlProviderKind< + MetaType extends MetaWorkspaceActionMenuItemDefaultKind = MetaWorkspaceActionMenuItemDefaultKind, +> extends ManifestWorkspaceActionMenuItem { + type: 'workspaceActionMenuItem'; + kind: 'urlProvider'; + urlProviderAlias: string; +} + +declare global { + interface UmbExtensionManifestMap { + umbWorkspaceActionMenuItemUrlProviderKind: ManifestWorkspaceActionMenuItemUrlProviderKind; + } +} From 0e867aed7ef6396c96f42666c0c3f927fa0cd1d5 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 6 Oct 2025 21:35:08 +0100 Subject: [PATCH 10/16] Modified `saveAndPreview` Document Workspace Context to accept a URL Provider Alias. --- .../workspace/document-workspace.context.ts | 41 ++++++++----------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts index a70051db9b6c..a44b17202e0f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts @@ -19,7 +19,6 @@ import { UmbDocumentValidationRepository } from '../repository/validation/index. import { UMB_DOCUMENT_CONFIGURATION_CONTEXT } from '../index.js'; import { UMB_DOCUMENT_DETAIL_MODEL_VARIANT_SCAFFOLD, UMB_DOCUMENT_WORKSPACE_ALIAS } from './constants.js'; import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry'; -import { ensurePathEndsWithSlash } from '@umbraco-cms/backoffice/utils'; import { observeMultiple } from '@umbraco-cms/backoffice/observable-api'; import { UmbContentDetailWorkspaceContextBase } from '@umbraco-cms/backoffice/content'; import { UmbDocumentBlueprintDetailRepository } from '@umbraco-cms/backoffice/document-blueprint'; @@ -29,7 +28,6 @@ import { UmbWorkspaceIsNewRedirectController, UmbWorkspaceIsNewRedirectControllerAlias, } from '@umbraco-cms/backoffice/workspace'; -import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; import type { UmbContentWorkspaceContext } from '@umbraco-cms/backoffice/content'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbDocumentTypeDetailModel } from '@umbraco-cms/backoffice/document-type'; @@ -276,11 +274,13 @@ export class UmbDocumentWorkspaceContext await super._handleSave(); } - public async saveAndPreview(): Promise { - return await this.#handleSaveAndPreview(); + public async saveAndPreview(urlProviderAlias?: string): Promise { + return await this.#handleSaveAndPreview(urlProviderAlias ?? 'umbDocumentUrlProvider'); } - async #handleSaveAndPreview() { + async #handleSaveAndPreview(urlProviderAlias: string) { + if (!urlProviderAlias) throw new Error('Url provider alias is missing'); + const unique = this.getUnique(); if (!unique) throw new Error('Unique is missing'); @@ -296,28 +296,21 @@ export class UmbDocumentWorkspaceContext await this.performCreateOrUpdate(variantIds, saveData); } - // Tell the server that we're entering preview mode. - await new UmbDocumentPreviewRepository(this).enter(); - - const serverContext = await this.getContext(UMB_SERVER_CONTEXT); - if (!serverContext) { - throw new Error('Server context is missing'); - } - - const backofficePath = serverContext.getBackofficePath(); - const previewUrl = new URL(ensurePathEndsWithSlash(backofficePath) + 'preview', window.location.origin); - previewUrl.searchParams.set('id', unique); + // Get the preview URL from the server. + const previewRepository = new UmbDocumentPreviewRepository(this); + const previewUrlData = await previewRepository.getPreviewUrl( + unique, + urlProviderAlias, + firstVariantId.culture ?? undefined, + firstVariantId.segment ?? undefined, + ); - if (firstVariantId.culture) { - previewUrl.searchParams.set('culture', firstVariantId.culture); - } + // TODO: [LK] Interogate `previewUrlData.message` for any errors. - if (firstVariantId.segment) { - previewUrl.searchParams.set('segment', firstVariantId.segment); + if (previewUrlData.url) { + const previewWindow = window.open(previewUrlData.url, `umbpreview-${unique}`); + previewWindow?.focus(); } - - const previewWindow = window.open(previewUrl.toString(), `umbpreview-${unique}`); - previewWindow?.focus(); } public createPropertyDatasetContext( From 1df24154c3e7f44b273540780d7472ea77c51177 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 6 Oct 2025 21:39:54 +0100 Subject: [PATCH 11/16] Refactored "Save and Preview" button to extend `UmbWorkspaceActionElement`. This did mean exposing certain methods/properties to be overridable. --- .../default/workspace-action.element.ts | 31 +-- ...ve-and-preview-workspace-action.element.ts | 184 +++--------------- 2 files changed, 49 insertions(+), 166 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action.element.ts index 5d620d518e3f..3993951e6e6d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action.element.ts @@ -2,6 +2,7 @@ import type { ManifestWorkspaceAction, ManifestWorkspaceActionMenuItem, MetaWorkspaceActionDefaultKind, + UmbWorkspaceActionArgs, UmbWorkspaceActionDefaultKind, } from '../../../types.js'; import { customElement, html, property, state, when } from '@umbraco-cms/backoffice/external/lit'; @@ -10,6 +11,7 @@ import { UmbActionExecutedEvent } from '@umbraco-cms/backoffice/event'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UmbExtensionsElementAndApiInitializer } from '@umbraco-cms/backoffice/extension-api'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import type { UmbAction } from '@umbraco-cms/backoffice/action'; import type { UmbExtensionElementAndApiInitializer } from '@umbraco-cms/backoffice/extension-api'; import type { UUIButtonState } from '@umbraco-cms/backoffice/external/uui'; @@ -20,7 +22,7 @@ export class UmbWorkspaceActionElement< > extends UmbLitElement { #manifest?: ManifestWorkspaceAction; #api?: ApiType; - #extensionsController?: UmbExtensionsElementAndApiInitializer< + protected _extensionsController?: UmbExtensionsElementAndApiInitializer< ManifestWorkspaceActionMenuItem, 'workspaceActionMenuItem', ManifestWorkspaceActionMenuItem @@ -59,6 +61,10 @@ export class UmbWorkspaceActionElement< return this.#api; } + protected _actionApi?: UmbAction>; + + protected _buttonLabel?: string; + @state() private _buttonState?: UUIButtonState; @@ -72,7 +78,7 @@ export class UmbWorkspaceActionElement< private _isDisabled = false; @state() - private _items: Array> = []; + protected _items: Array> = []; #buttonStateResetTimeoutId: number | null = null; @@ -97,7 +103,7 @@ export class UmbWorkspaceActionElement< } } - this.#observeExtensions(Array.from(aliases)); + this.observeExtensions(Array.from(aliases)); } async #onClick(event: MouseEvent) { @@ -111,8 +117,9 @@ export class UmbWorkspaceActionElement< } try { - if (!this.#api) throw new Error('No api defined'); - await this.#api.execute(); + const api = this._actionApi ?? this.#api; + if (!api) throw new Error('No api defined'); + await api.execute(); this._buttonState = 'success'; this.#initButtonStateReset(); } catch (reason) { @@ -153,9 +160,9 @@ export class UmbWorkspaceActionElement< } } - #observeExtensions(aliases: string[]): void { - this.#extensionsController?.destroy(); - this.#extensionsController = new UmbExtensionsElementAndApiInitializer< + protected observeExtensions(aliases: string[]): void { + this._extensionsController?.destroy(); + this._extensionsController = new UmbExtensionsElementAndApiInitializer< ManifestWorkspaceActionMenuItem, 'workspaceActionMenuItem', ManifestWorkspaceActionMenuItem @@ -165,17 +172,15 @@ export class UmbWorkspaceActionElement< 'workspaceActionMenuItem', (manifest) => [{ meta: manifest.meta }], (action) => stringOrStringArrayIntersects(action.forWorkspaceActions, aliases), - (extensionControllers) => { - this._items = extensionControllers; + (actions) => { + this._items = actions; }, undefined, // We can leave the alias to undefined, as we destroy this our selfs. ); } #renderButton() { - const label = this.#manifest?.meta.label - ? this.localize.string(this.#manifest.meta.label) - : (this.#manifest?.name ?? ''); + const label = this.localize.string(this._buttonLabel || this.#manifest?.meta.label || this.#manifest?.name || ''); return html` ; - - @property({ type: Object, attribute: false }) - public set manifest(value: ManifestPreviewOption | undefined) { - if (!value) return; - const oldValue = this.#manifest; - if (oldValue !== value) { - this.#manifest = value; - this.#observeExtensions(); - } - } - public get manifest() { - return this.#manifest; - } - #manifest?: ManifestPreviewOption; - - @property({ attribute: false }) - public set api(api: UmbWorkspaceAction | undefined) { - this.#api = api; - this.#observeIsDisabled(); - } - public get api(): UmbWorkspaceAction | undefined { - return this.#api; - } - #api?: UmbWorkspaceAction; - - @state() - private _buttonState?: UUIButtonState; - - @state() - private _isDisabled = false; - - @state() - private _actions: Array> = []; - - @state() - private _firstActionManifest?: ManifestPreviewOption; - - @state() - private _firstActionApi?: UmbPreviewOptionActionBase; - - async #onClick() { - this._buttonState = 'waiting'; - - try { - if (!this._firstActionApi) throw new Error('No api defined'); - await this._firstActionApi.execute().catch(() => {}); - this._buttonState = 'success'; - } catch (reason) { - if (reason) { - console.warn(reason); - } - this._buttonState = 'failed'; - } - - this.#initButtonStateReset(); - this.dispatchEvent(new UmbActionExecutedEvent()); - } - - #observeIsDisabled() { - this.observe( - this.#api?.isDisabled, - (isDisabled) => { - this._isDisabled = isDisabled || false; - }, - 'isDisabledObserver', - ); - } - - #initButtonStateReset() { - this.#clearButtonStateResetTimeout(); - this.#buttonStateResetTimeoutId = window.setTimeout(() => { - this._buttonState = undefined; - }, 2000); - } - - #clearButtonStateResetTimeout() { - if (this.#buttonStateResetTimeoutId !== null) { - clearTimeout(this.#buttonStateResetTimeoutId); - this.#buttonStateResetTimeoutId = null; - } - } - - #observeExtensions(): void { - this.#extensionsController?.destroy(); - this.#extensionsController = new UmbExtensionsElementAndApiInitializer< - ManifestPreviewOption, - 'previewOption', - ManifestPreviewOption - >(this, umbExtensionsRegistry, 'previewOption', [], undefined, async (actions) => { - const firstAction = actions.shift(); - - if (firstAction) { - this._firstActionManifest = firstAction.manifest; - this._firstActionApi = await createExtensionApi(this, firstAction.manifest, []); - if (this._firstActionApi) { - (this._firstActionApi as any).manifest = this._firstActionManifest; +export class UmbSaveAndPreviewWorkspaceActionElement extends UmbWorkspaceActionElement { + override observeExtensions(aliases: string[]) { + this._extensionsController?.destroy(); + this._extensionsController = new UmbExtensionsElementAndApiInitializer< + ManifestWorkspaceActionMenuItem, + 'workspaceActionMenuItem', + ManifestWorkspaceActionMenuItem + >( + this, + umbExtensionsRegistry, + 'workspaceActionMenuItem', + (manifest) => [{ meta: manifest.meta }], + (action) => stringOrStringArrayIntersects(action.forWorkspaceActions, aliases), + async (actions) => { + const firstAction = actions.shift(); + + if (firstAction) { + this._buttonLabel = (firstAction.manifest.meta as any).label; + const api = await createExtensionApi(this, firstAction.manifest, []); + if (api) { + (api as any).manifest = firstAction.manifest; + this._actionApi = api; + } } - } - this._actions = actions; - }); - } - - #renderButton() { - const label = this._firstActionManifest?.meta.label || this.#manifest?.meta.label || this.#manifest?.name; - return html` - - `; - } - - #renderActionMenu() { - // TODO: [LK] FIXME: The `any` type casting here needs to be resolved with a proper type. - return html` - - `; - } - - override render() { - if (!this._firstActionManifest || !this._actions.length) return; - return when( - this._actions.length, - () => html`${this.#renderButton()}${this.#renderActionMenu()}`, - () => this.#renderButton(), + this._items = actions; + }, + undefined, // We can leave the alias to undefined, as we destroy this our selfs. ); } - - override disconnectedCallback() { - super.disconnectedCallback(); - this.#clearButtonStateResetTimeout(); - } } export default UmbSaveAndPreviewWorkspaceActionElement; From 66f108e265286da26af30f3690beb9bb21cc1840 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 6 Oct 2025 21:56:00 +0100 Subject: [PATCH 12/16] Used `umbPeekError` to surface any errors to the user --- .../documents/workspace/document-workspace.context.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts index a44b17202e0f..f2b59f1d4eda 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts @@ -20,6 +20,7 @@ import { UMB_DOCUMENT_CONFIGURATION_CONTEXT } from '../index.js'; import { UMB_DOCUMENT_DETAIL_MODEL_VARIANT_SCAFFOLD, UMB_DOCUMENT_WORKSPACE_ALIAS } from './constants.js'; import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry'; import { observeMultiple } from '@umbraco-cms/backoffice/observable-api'; +import { umbPeekError } from '@umbraco-cms/backoffice/notification'; import { UmbContentDetailWorkspaceContextBase } from '@umbraco-cms/backoffice/content'; import { UmbDocumentBlueprintDetailRepository } from '@umbraco-cms/backoffice/document-blueprint'; import { UmbIsTrashedEntityContext } from '@umbraco-cms/backoffice/recycle-bin'; @@ -305,11 +306,14 @@ export class UmbDocumentWorkspaceContext firstVariantId.segment ?? undefined, ); - // TODO: [LK] Interogate `previewUrlData.message` for any errors. - if (previewUrlData.url) { const previewWindow = window.open(previewUrlData.url, `umbpreview-${unique}`); previewWindow?.focus(); + return; + } + + if (previewUrlData.message) { + umbPeekError(this._host, { color: 'danger', headline: 'Preview error', message: previewUrlData.message }); } } From c79859c43666c9abb95495a97b83f05d66b68de8 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 7 Oct 2025 07:42:14 +0100 Subject: [PATCH 13/16] Renamed `urlProvider` kind to `previewOption` --- .../preview/workspace-action-menu-item/manifests.ts | 6 +++--- .../{url-provider.action.ts => preview-option.action.ts} | 4 ++-- ...nd.ts => preview-option.workspace-action-item.kind.ts} | 8 ++++---- ...review-option.workspace-action-menu-item.extension.ts} | 6 +++--- .../documents/preview/workspace-action-menu-item/types.ts | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) rename src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/{url-provider.action.ts => preview-option.action.ts} (75%) rename src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/{url-provider.workspace-action-item.kind.ts => preview-option.workspace-action-item.kind.ts} (75%) rename src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/{url-provider.workspace-action-menu-item.extension.ts => preview-option.workspace-action-menu-item.extension.ts} (68%) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/manifests.ts index 0433d82ab54f..56565c3bb8fb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/manifests.ts @@ -1,11 +1,11 @@ -import { manifest as workspaceActionItemKind } from './url-provider.workspace-action-item.kind.js'; +import { manifest as workspaceActionItemKind } from './preview-option.workspace-action-item.kind.js'; import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; const saveAndPreview: UmbExtensionManifest = { type: 'workspaceActionMenuItem', - kind: 'urlProvider', + kind: 'previewOption', alias: 'Umb.Document.WorkspaceActionMenuItem.SaveAndPreview', - name: 'Save And Preview Document URL Provider Workspace Action Menu Item', + name: 'Save And Preview Document Preview Option', forWorkspaceActions: 'Umb.WorkspaceAction.Document.SaveAndPreview', urlProviderAlias: 'umbDocumentUrlProvider', weight: 100, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.action.ts similarity index 75% rename from src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.action.ts rename to src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.action.ts index de3b15d7395f..1c342337970e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.action.ts @@ -1,9 +1,9 @@ import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../../workspace/document-workspace.context-token.js'; -import type { ManifestWorkspaceActionMenuItemUrlProviderKind } from './url-provider.workspace-action-menu-item.extension.js'; +import type { ManifestWorkspaceActionMenuItemPreviewOptionKind } from './preview-option.workspace-action-menu-item.extension.js'; import { UmbWorkspaceActionBase } from '@umbraco-cms/backoffice/workspace'; export class UmbDocumentSaveAndPreviewWorkspaceAction extends UmbWorkspaceActionBase { - manifest?: ManifestWorkspaceActionMenuItemUrlProviderKind; + manifest?: ManifestWorkspaceActionMenuItemPreviewOptionKind; override async execute() { const workspaceContext = await this.getContext(UMB_DOCUMENT_WORKSPACE_CONTEXT); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.workspace-action-item.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-item.kind.ts similarity index 75% rename from src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.workspace-action-item.kind.ts rename to src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-item.kind.ts index 29a288eec540..f984b6a9f92a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.workspace-action-item.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-item.kind.ts @@ -2,14 +2,14 @@ import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension export const manifest: UmbExtensionManifestKind = { type: 'kind', - alias: 'Umb.Kind.WorkspaceActionMenuItem.UrlProvider', + alias: 'Umb.Kind.WorkspaceActionMenuItem.PreviewOption', matchType: 'workspaceActionMenuItem', - matchKind: 'urlProvider', + matchKind: 'previewOption', manifest: { type: 'workspaceActionMenuItem', - kind: 'urlProvider', + kind: 'previewOption', weight: 1000, - api: () => import('./url-provider.action.js'), + api: () => import('./preview-option.action.js'), elementName: 'umb-workspace-action-menu-item', forWorkspaceActions: 'Umb.WorkspaceAction.Document.SaveAndPreview', urlProviderAlias: 'umbDocumentUrlProvider', diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.workspace-action-menu-item.extension.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-menu-item.extension.ts similarity index 68% rename from src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.workspace-action-menu-item.extension.ts rename to src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-menu-item.extension.ts index bf84c8b294e7..f05918e988a8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/url-provider.workspace-action-menu-item.extension.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-menu-item.extension.ts @@ -3,16 +3,16 @@ import type { MetaWorkspaceActionMenuItemDefaultKind, } from '@umbraco-cms/backoffice/workspace'; -export interface ManifestWorkspaceActionMenuItemUrlProviderKind< +export interface ManifestWorkspaceActionMenuItemPreviewOptionKind< MetaType extends MetaWorkspaceActionMenuItemDefaultKind = MetaWorkspaceActionMenuItemDefaultKind, > extends ManifestWorkspaceActionMenuItem { type: 'workspaceActionMenuItem'; - kind: 'urlProvider'; + kind: 'previewOption'; urlProviderAlias: string; } declare global { interface UmbExtensionManifestMap { - umbWorkspaceActionMenuItemUrlProviderKind: ManifestWorkspaceActionMenuItemUrlProviderKind; + umbWorkspaceActionMenuItemPreviewOptionKind: ManifestWorkspaceActionMenuItemPreviewOptionKind; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/types.ts index 9e345e3ceacd..219d8c6bbc0c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/types.ts @@ -1 +1 @@ -export type * from './url-provider.workspace-action-menu-item.extension.js'; +export type * from './preview-option.workspace-action-menu-item.extension.js'; From 2dd6cc44885b663f126e792cb2dd52f160ce6456 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 7 Oct 2025 07:49:01 +0100 Subject: [PATCH 14/16] Relocated `urlProviderAlias` inside the `meta` property --- .../preview/workspace-action-menu-item/manifests.ts | 2 +- .../workspace-action-menu-item/preview-option.action.ts | 2 +- .../preview-option.workspace-action-item.kind.ts | 2 +- ...preview-option.workspace-action-menu-item.extension.ts | 8 +++++--- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/manifests.ts index 56565c3bb8fb..86ae748f5a97 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/manifests.ts @@ -7,10 +7,10 @@ const saveAndPreview: UmbExtensionManifest = { alias: 'Umb.Document.WorkspaceActionMenuItem.SaveAndPreview', name: 'Save And Preview Document Preview Option', forWorkspaceActions: 'Umb.WorkspaceAction.Document.SaveAndPreview', - urlProviderAlias: 'umbDocumentUrlProvider', weight: 100, meta: { label: '#buttons_saveAndPreview', + urlProviderAlias: 'umbDocumentUrlProvider', }, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.action.ts index 1c342337970e..11f3e02f4ae1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.action.ts @@ -10,7 +10,7 @@ export class UmbDocumentSaveAndPreviewWorkspaceAction extends UmbWorkspaceAction if (!workspaceContext) { throw new Error('The workspace context is missing'); } - workspaceContext?.saveAndPreview(this.manifest?.urlProviderAlias); + workspaceContext?.saveAndPreview(this.manifest?.meta.urlProviderAlias); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-item.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-item.kind.ts index f984b6a9f92a..627d24e2c2f0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-item.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-item.kind.ts @@ -12,10 +12,10 @@ export const manifest: UmbExtensionManifestKind = { api: () => import('./preview-option.action.js'), elementName: 'umb-workspace-action-menu-item', forWorkspaceActions: 'Umb.WorkspaceAction.Document.SaveAndPreview', - urlProviderAlias: 'umbDocumentUrlProvider', meta: { icon: '', label: '(Missing label in manifest)', + urlProviderAlias: 'umbDocumentUrlProvider', }, }, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-menu-item.extension.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-menu-item.extension.ts index f05918e988a8..07b0add676c4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-menu-item.extension.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.workspace-action-menu-item.extension.ts @@ -3,11 +3,13 @@ import type { MetaWorkspaceActionMenuItemDefaultKind, } from '@umbraco-cms/backoffice/workspace'; -export interface ManifestWorkspaceActionMenuItemPreviewOptionKind< - MetaType extends MetaWorkspaceActionMenuItemDefaultKind = MetaWorkspaceActionMenuItemDefaultKind, -> extends ManifestWorkspaceActionMenuItem { +export interface ManifestWorkspaceActionMenuItemPreviewOptionKind + extends ManifestWorkspaceActionMenuItem { type: 'workspaceActionMenuItem'; kind: 'previewOption'; +} + +export interface MetaWorkspaceActionMenuItemPreviewOptionKind extends MetaWorkspaceActionMenuItemDefaultKind { urlProviderAlias: string; } From 4f9ca5b83f538a426736ca595a8e45e9f45bbf2e Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 7 Oct 2025 07:57:03 +0100 Subject: [PATCH 15/16] also throw an error --- .../documents/documents/workspace/document-workspace.context.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts index f2b59f1d4eda..de6078cd9b8d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts @@ -314,6 +314,7 @@ export class UmbDocumentWorkspaceContext if (previewUrlData.message) { umbPeekError(this._host, { color: 'danger', headline: 'Preview error', message: previewUrlData.message }); + throw new Error(previewUrlData.message); } } From 422f3cb5c1aa75e1543470900a522326187faaad Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 7 Oct 2025 08:01:15 +0100 Subject: [PATCH 16/16] Added missing `await` --- .../preview/workspace-action-menu-item/preview-option.action.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.action.ts index 11f3e02f4ae1..6cd3ac352a05 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/preview/workspace-action-menu-item/preview-option.action.ts @@ -10,7 +10,7 @@ export class UmbDocumentSaveAndPreviewWorkspaceAction extends UmbWorkspaceAction if (!workspaceContext) { throw new Error('The workspace context is missing'); } - workspaceContext?.saveAndPreview(this.manifest?.meta.urlProviderAlias); + await workspaceContext?.saveAndPreview(this.manifest?.meta.urlProviderAlias); } }