From 35b6c05aae6391b1773ad0bff2bcea814a4f4c26 Mon Sep 17 00:00:00 2001 From: "swapnil.verma" Date: Thu, 4 Apr 2024 12:47:50 +0530 Subject: [PATCH] [ACS-6630] Added models, APIs and docs to js-api for extension-manager feature --- .../src/lib/config/action.extensions.ts | 6 - .../src/lib/config/extension.config.ts | 4 +- .../src/lib/config/rule.extensions.ts | 12 -- .../src/lib/evaluators/core.evaluators.ts | 3 +- .../lib/services/extension-loader.service.ts | 5 +- .../lib/services/extension.service.spec.ts | 4 +- .../src/lib/services/extension.service.ts | 5 +- .../src/lib/services/rule.service.ts | 3 +- lib/extensions/src/public-api.ts | 1 - lib/js-api/src/api/content-rest-api/README.md | 3 +- .../src/api/content-rest-api/api/index.ts | 1 + .../api/content-rest-api/api/settings.api.ts | 67 +++++++++ .../api/content-rest-api/docs/SettingsApi.md | 129 ++++++++++++++++++ .../api/content-rest-api/model/actionRef.ts | 22 +++ .../model/appConfigPluginRef.ts | 22 +++ .../content-rest-api/model/extensionConfig.ts | 31 +++++ .../model/extensionConfigEntry.ts | 22 +++ .../src/api/content-rest-api/model/index.ts | 6 + .../api/content-rest-api/model/routeRef.ts} | 0 .../src/api/content-rest-api/model/ruleRef.ts | 28 ++++ 20 files changed, 340 insertions(+), 34 deletions(-) create mode 100644 lib/js-api/src/api/content-rest-api/api/settings.api.ts create mode 100644 lib/js-api/src/api/content-rest-api/docs/SettingsApi.md create mode 100644 lib/js-api/src/api/content-rest-api/model/actionRef.ts create mode 100644 lib/js-api/src/api/content-rest-api/model/appConfigPluginRef.ts create mode 100644 lib/js-api/src/api/content-rest-api/model/extensionConfig.ts create mode 100644 lib/js-api/src/api/content-rest-api/model/extensionConfigEntry.ts rename lib/{extensions/src/lib/config/routing.extensions.ts => js-api/src/api/content-rest-api/model/routeRef.ts} (100%) create mode 100644 lib/js-api/src/api/content-rest-api/model/ruleRef.ts diff --git a/lib/extensions/src/lib/config/action.extensions.ts b/lib/extensions/src/lib/config/action.extensions.ts index a1b697b63b..6ffe0dd3cd 100644 --- a/lib/extensions/src/lib/config/action.extensions.ts +++ b/lib/extensions/src/lib/config/action.extensions.ts @@ -47,9 +47,3 @@ export interface ContentActionRef extends ExtensionElement { visible?: string; }; } - -export interface ActionRef { - id: string; - type: string; - payload?: any; -} diff --git a/lib/extensions/src/lib/config/extension.config.ts b/lib/extensions/src/lib/config/extension.config.ts index 591ed470c2..ba8d0513ba 100644 --- a/lib/extensions/src/lib/config/extension.config.ts +++ b/lib/extensions/src/lib/config/extension.config.ts @@ -15,9 +15,7 @@ * limitations under the License. */ -import { RouteRef } from './routing.extensions'; -import { RuleRef } from './rule.extensions'; -import { ActionRef } from './action.extensions'; +import { ActionRef, RouteRef, RuleRef } from '@alfresco/js-api'; export interface ExtensionRef { $id: string; diff --git a/lib/extensions/src/lib/config/rule.extensions.ts b/lib/extensions/src/lib/config/rule.extensions.ts index 3f9483371c..f504f6eeb8 100644 --- a/lib/extensions/src/lib/config/rule.extensions.ts +++ b/lib/extensions/src/lib/config/rule.extensions.ts @@ -33,15 +33,3 @@ export interface RuleContext { getEvaluator(key: string): RuleEvaluator; } - -export class RuleRef { - type: string; - id?: string; - parameters?: Array; -} - -export interface RuleParameter { - type: string; - value: any; - parameters?: Array; -} diff --git a/lib/extensions/src/lib/evaluators/core.evaluators.ts b/lib/extensions/src/lib/evaluators/core.evaluators.ts index bbf591c93e..60988d9b6e 100644 --- a/lib/extensions/src/lib/evaluators/core.evaluators.ts +++ b/lib/extensions/src/lib/evaluators/core.evaluators.ts @@ -15,7 +15,8 @@ * limitations under the License. */ -import { RuleContext, RuleParameter } from '../config/rule.extensions'; +import { RuleContext } from '../config/rule.extensions'; +import { RuleParameter } from '@alfresco/js-api'; export const not = (context: RuleContext, ...args: RuleParameter[]): boolean => { if (!args || args.length === 0) { diff --git a/lib/extensions/src/lib/services/extension-loader.service.ts b/lib/extensions/src/lib/services/extension-loader.service.ts index 6a8c1f6dfd..89e5c38e2e 100644 --- a/lib/extensions/src/lib/services/extension-loader.service.ts +++ b/lib/extensions/src/lib/services/extension-loader.service.ts @@ -17,12 +17,11 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { ActionRef, ContentActionRef, ContentActionType } from '../config/action.extensions'; +import { ContentActionRef, ContentActionType } from '../config/action.extensions'; import { ExtensionElement } from '../config/extension-element'; import { filterEnabled, getValue, mergeObjects, sortByOrder } from '../config/extension-utils'; import { ExtensionConfig, ExtensionRef } from '../config/extension.config'; -import { RouteRef } from '../config/routing.extensions'; -import { RuleRef } from '../config/rule.extensions'; +import { ActionRef, RouteRef, RuleRef } from '@alfresco/js-api'; @Injectable({ providedIn: 'root' diff --git a/lib/extensions/src/lib/services/extension.service.spec.ts b/lib/extensions/src/lib/services/extension.service.spec.ts index 30d792b96a..d79d1d43f6 100644 --- a/lib/extensions/src/lib/services/extension.service.spec.ts +++ b/lib/extensions/src/lib/services/extension.service.spec.ts @@ -18,9 +18,7 @@ import { ExtensionService } from './extension.service'; import { ExtensionLoaderService } from './extension-loader.service'; import { ExtensionConfig } from '../config/extension.config'; -import { RuleRef } from '../config/rule.extensions'; -import { RouteRef } from '../config/routing.extensions'; -import { ActionRef } from '../config/action.extensions'; +import { ActionRef, RouteRef, RuleRef } from '@alfresco/js-api'; import { ComponentRegisterService } from './component-register.service'; import { RuleService } from './rule.service'; diff --git a/lib/extensions/src/lib/services/extension.service.ts b/lib/extensions/src/lib/services/extension.service.ts index 58e9cc91b8..990893284e 100644 --- a/lib/extensions/src/lib/services/extension.service.ts +++ b/lib/extensions/src/lib/services/extension.service.ts @@ -16,17 +16,16 @@ */ import { Injectable, Type, InjectionToken, Inject } from '@angular/core'; -import { RuleEvaluator, RuleRef, RuleContext } from '../config/rule.extensions'; +import { RuleEvaluator, RuleContext } from '../config/rule.extensions'; import { ExtensionConfig } from '../config/extension.config'; import { ExtensionLoaderService } from './extension-loader.service'; -import { RouteRef } from '../config/routing.extensions'; -import { ActionRef } from '../config/action.extensions'; import * as core from '../evaluators/core.evaluators'; import { ComponentRegisterService } from './component-register.service'; import { RuleService } from './rule.service'; import { ExtensionElement } from '../config/extension-element'; import { BehaviorSubject, Observable } from 'rxjs'; import { mergeArrays, mergeObjects } from '../config/extension-utils'; +import { ActionRef, RouteRef, RuleRef } from '@alfresco/js-api'; /** * The default extensions factory diff --git a/lib/extensions/src/lib/services/rule.service.ts b/lib/extensions/src/lib/services/rule.service.ts index bf9e8f9864..8d46148568 100644 --- a/lib/extensions/src/lib/services/rule.service.ts +++ b/lib/extensions/src/lib/services/rule.service.ts @@ -16,9 +16,10 @@ */ import { Injectable } from '@angular/core'; -import { RuleRef, RuleContext, RuleEvaluator, RuleParameter } from '../config/rule.extensions'; +import { RuleContext, RuleEvaluator } from '../config/rule.extensions'; import { ExtensionConfig } from '../config/extension.config'; import { ExtensionLoaderService } from './extension-loader.service'; +import { RuleParameter, RuleRef } from '@alfresco/js-api'; @Injectable({ providedIn: 'root' diff --git a/lib/extensions/src/public-api.ts b/lib/extensions/src/public-api.ts index 9d5e2bdfc7..d3fdc1cceb 100644 --- a/lib/extensions/src/public-api.ts +++ b/lib/extensions/src/public-api.ts @@ -23,7 +23,6 @@ export * from './lib/config/extension.config'; export * from './lib/config/icon.extensions'; export * from './lib/config/navbar.extensions'; export * from './lib/config/permission.extensions'; -export * from './lib/config/routing.extensions'; export * from './lib/config/rule.extensions'; export * from './lib/config/sidebar.extensions'; export * from './lib/config/viewer.extensions'; diff --git a/lib/js-api/src/api/content-rest-api/README.md b/lib/js-api/src/api/content-rest-api/README.md index 30e58672a0..be7032725c 100644 --- a/lib/js-api/src/api/content-rest-api/README.md +++ b/lib/js-api/src/api/content-rest-api/README.md @@ -26,7 +26,8 @@ https://localhost/alfresco/api/-default-/public/alfresco/versions/1 - [RatingsApi](docs/RatingsApi.md) - [RenditionsApi](docs/RenditionsApi.md) - [SharedlinksApi](docs/SharedlinksApi.md) +- [SettingsApi](docs/SettingsApi.md) - [SitesApi](docs/SitesApi.md) - [TagsApi](docs/TagsApi.md) - [TrashcanApi](docs/TrashcanApi.md) -- [VersionsApi](docs/VersionsApi.md) \ No newline at end of file +- [VersionsApi](docs/VersionsApi.md) diff --git a/lib/js-api/src/api/content-rest-api/api/index.ts b/lib/js-api/src/api/content-rest-api/api/index.ts index 899efe5d3b..669ce5b69e 100644 --- a/lib/js-api/src/api/content-rest-api/api/index.ts +++ b/lib/js-api/src/api/content-rest-api/api/index.ts @@ -34,6 +34,7 @@ export * from './queries.api'; export * from './ratings.api'; export * from './renditions.api'; export * from './search-ai.api'; +export * from './settings.api'; export * from './sharedlinks.api'; export * from './sites.api'; export * from './tags.api'; diff --git a/lib/js-api/src/api/content-rest-api/api/settings.api.ts b/lib/js-api/src/api/content-rest-api/api/settings.api.ts new file mode 100644 index 0000000000..32c82b9a4d --- /dev/null +++ b/lib/js-api/src/api/content-rest-api/api/settings.api.ts @@ -0,0 +1,67 @@ +/*! + * @license + * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { BaseApi } from './base.api'; +import { throwIfNotDefined } from '../../../assert'; +import { ExtensionConfig } from '../model/extensionConfig'; +import { ExtensionConfigEntry } from '../model/extensionConfigEntry'; +export class SettingsApi extends BaseApi { + + /** + * Gets the published extension configuration from + * the database + * + * @param instanceId Unique ID for a running instance of ADW + * for which configuration is to be fetched + */ + getSavedExtensionState(instanceId: string): Promise { + throwIfNotDefined(instanceId, 'instanceId'); + + const pathParams = { + instanceId + }; + + return this.get({ + path: '/settings/{instanceId}', + pathParams + }); + } + + /** + * Publish the extension configuration for an ADW instance + * in the database + * + * @param instanceId Unique ID for a running instance of ADW + * for which configuration is to be published + * @param extensionConfig Extension configuration that is to + * be saved + */ + publishExtensionConfig(instanceId: string, extensionConfig: ExtensionConfig): Promise { + throwIfNotDefined(instanceId, 'instanceId'); + throwIfNotDefined(extensionConfig, 'extensionConfig'); + + const pathParams = { + instanceId + }; + + return this.put({ + path: '/settings/{instanceId}', + pathParams, + bodyParam: extensionConfig + }); + } +} diff --git a/lib/js-api/src/api/content-rest-api/docs/SettingsApi.md b/lib/js-api/src/api/content-rest-api/docs/SettingsApi.md new file mode 100644 index 0000000000..60a2f12066 --- /dev/null +++ b/lib/js-api/src/api/content-rest-api/docs/SettingsApi.md @@ -0,0 +1,129 @@ +# SitesApi + +All URIs are relative to *https://localhost/alfresco/api/-default-/public/alfresco/versions/1/* + +| Method | HTTP request | Description | +|---------------------------------------------------|--------------------------------|-------------------------------------------------------------------------------------| +| [getSavedExtensionState](#getSavedExtensionState) | **GET** /settings/{instanceId} | Gets the extension configuration saved for a running instance of ADW on the backend | +| [publishExtensionConfig](#publishExtensionConfig) | **PUT** /settings/{instanceId} | Saves an extension configuration for a running instance of ADW on the backend | + +## getSavedExtensionState + +Gets the extension configuration saved on the backend + +> this endpoint is available in **Alfresco 7.0.0** and newer versions. + +**Parameters** + +| Name | Type | Description | Notes | +|----------------|--------|----------------------------------------------|-------| +| **instanceId** | string | The identifier of a running instance of ADW. | | + +**Return type**: [ExtensionConfigEntry](#ExtensionConfigEntry) + +## publishExtensionConfig + +Saves an extension configuration on the backend + +**Parameters** + +| Name | Type | Description | +|---------------------|-------------------------------------|----------------------------------------------| +| **instanceId** | string | The identifier of a running instance of ADW. | +| **extensionConfig** | [ExtensionConfig](#ExtensionConfig) | The extension configuration to be saved. | + +**Example** + +```javascript +import {AlfrescoApi, SitesApi} from '@alfresco/js-api'; + +const alfrescoApi = new AlfrescoApi(/*..*/); +const settingsApi = new SettingsApi(alfrescoApi); + +const extensionConfig = new ExtensionConfig(); +extensionConfig = { + appConfig: {}, + features: {}, + actions: [], + rules: [], + routes: [] +} + +settingsApi.publishExtensionConfig(``, extensionConfig).then(() => { + console.log('API called successfully.'); +}); +``` + +# Models + +## ExtensionConfigEntry + +**Properties** + +| Name | Type | +|-----------|-------------------------------------| +| **entry** | [ExtensionConfig](#ExtensionConfig) | + +## ExtensionConfig + +**Properties** + +| Name | Type | +|---------------|-------------------------------------------| +| **appConfig** | [AppConfigPluginRef](#AppConfigPluginRef) | +| **rules** | [RuleRef[]](#RuleRef) | +| **routes** | [RouteRef[]](#RouteRef) | +| **actions** | [ActionRef[]](#ActionRef) | +| **features** | [key: string]: any | + +## AppConfigPluginRef + +**Properties** + +| Name | Type | +|-------------|----------------------------| +| **plugins** | { [key: string]: boolean } | + +## RouteRef + +**Properties** + +| Name | Type | +|---------------|---------------------------| +| **id** | string | +| **path** | string | +| **component** | string | +| parentRoute | string | +| layout | string | +| auth | string[] | +| data | { [key: string]: string } | + +## RuleRef + +**Properties** + +| Name | Type | +|------------|-----------------------------------| +| **type** | string | +| id | string | +| parameters | [RuleParameter[]](#RuleParameter) | + +## RuleParameter + +**Properties** + +| Name | Type | +|------------|-----------------------------------| +| **type** | string | +| **value** | any | +| parameters | [RuleParameter[]](#RuleParameter) | + +## ActionRef + +**Properties** + +| Name | Type | +|-------------|--------| +| **id** | string | +| **type** | string | +| **payload** | any | diff --git a/lib/js-api/src/api/content-rest-api/model/actionRef.ts b/lib/js-api/src/api/content-rest-api/model/actionRef.ts new file mode 100644 index 0000000000..53806dbaef --- /dev/null +++ b/lib/js-api/src/api/content-rest-api/model/actionRef.ts @@ -0,0 +1,22 @@ +/*! + * @license + * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface ActionRef { + id: string; + type: string; + payload?: any; +} diff --git a/lib/js-api/src/api/content-rest-api/model/appConfigPluginRef.ts b/lib/js-api/src/api/content-rest-api/model/appConfigPluginRef.ts new file mode 100644 index 0000000000..e08d12938a --- /dev/null +++ b/lib/js-api/src/api/content-rest-api/model/appConfigPluginRef.ts @@ -0,0 +1,22 @@ +/*! + * @license + * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface AppConfigPluginRef { + plugins: { + [key: string]: boolean; + }; +} diff --git a/lib/js-api/src/api/content-rest-api/model/extensionConfig.ts b/lib/js-api/src/api/content-rest-api/model/extensionConfig.ts new file mode 100644 index 0000000000..5d751e98c2 --- /dev/null +++ b/lib/js-api/src/api/content-rest-api/model/extensionConfig.ts @@ -0,0 +1,31 @@ +/*! + * @license + * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { AppConfigPluginRef } from './appConfigPluginRef'; +import { RuleRef } from './ruleRef'; +import { RouteRef } from './routeRef'; +import { ActionRef } from './actionRef'; + +export class ExtensionConfig { + appConfig: AppConfigPluginRef; + rules?: Array; + routes?: Array; + actions?: Array; + features?: { + [key: string]: any; + }; +} diff --git a/lib/js-api/src/api/content-rest-api/model/extensionConfigEntry.ts b/lib/js-api/src/api/content-rest-api/model/extensionConfigEntry.ts new file mode 100644 index 0000000000..95ede4c782 --- /dev/null +++ b/lib/js-api/src/api/content-rest-api/model/extensionConfigEntry.ts @@ -0,0 +1,22 @@ +/*! + * @license + * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ExtensionConfig } from './extensionConfig'; + +export class ExtensionConfigEntry { + entry: ExtensionConfig; +} diff --git a/lib/js-api/src/api/content-rest-api/model/index.ts b/lib/js-api/src/api/content-rest-api/model/index.ts index 6ad8a2239f..8144e8bcae 100644 --- a/lib/js-api/src/api/content-rest-api/model/index.ts +++ b/lib/js-api/src/api/content-rest-api/model/index.ts @@ -23,10 +23,12 @@ export * from './actionDefinitionListList'; export * from './actionExecResult'; export * from './actionExecResultEntry'; export * from './actionParameterDefinition'; +export * from './actionRef'; export * from './activity'; export * from './activityEntry'; export * from './activityPaging'; export * from './activityPagingList'; +export * from './appConfigPluginRef'; export * from './agent'; export * from './agentEntry'; export * from './agentPaging'; @@ -79,6 +81,8 @@ export * from './download-status'; export * from './downloadBodyCreate'; export * from './downloadEntry'; export * from './errorError'; +export * from './extensionConfig'; +export * from './extensionConfigEntry'; export * from './favorite'; export * from './favoriteBodyCreate'; export * from './favoriteEntry'; @@ -156,6 +160,8 @@ export * from './renditionEntry'; export * from './renditionPaging'; export * from './renditionPagingList'; export * from './revertBody'; +export * from './routeRef'; +export * from './ruleRef'; export * from './sharedLink'; export * from './sharedLinkBodyCreate'; export * from './sharedLinkBodyEmail'; diff --git a/lib/extensions/src/lib/config/routing.extensions.ts b/lib/js-api/src/api/content-rest-api/model/routeRef.ts similarity index 100% rename from lib/extensions/src/lib/config/routing.extensions.ts rename to lib/js-api/src/api/content-rest-api/model/routeRef.ts diff --git a/lib/js-api/src/api/content-rest-api/model/ruleRef.ts b/lib/js-api/src/api/content-rest-api/model/ruleRef.ts new file mode 100644 index 0000000000..df31d399e3 --- /dev/null +++ b/lib/js-api/src/api/content-rest-api/model/ruleRef.ts @@ -0,0 +1,28 @@ +/*! + * @license + * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface RuleParameter { + type: string; + value: any; + parameters?: Array; +} + +export class RuleRef { + type: string; + id?: string; + parameters?: Array; +}