mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2026-09-09 18:03:21 +00:00
[ACS-10117] Deprecate ADF Storybook and custom Docker builds (#11207)
This commit is contained in:
+7
-2
@@ -90,7 +90,9 @@ adf-cloud-app-details {
|
||||
}
|
||||
|
||||
outline: none;
|
||||
transition: transform 280ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition:
|
||||
transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
|
||||
box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
|
||||
min-height: 200px;
|
||||
flex-direction: column;
|
||||
box-sizing: border-box;
|
||||
@@ -99,7 +101,10 @@ adf-cloud-app-details {
|
||||
max-width: unset;
|
||||
|
||||
&:hover {
|
||||
box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2);
|
||||
box-shadow:
|
||||
0 8px 10px 1px rgba(0, 0, 0, 0.14),
|
||||
0 3px 14px 2px rgba(0, 0, 0, 0.12),
|
||||
0 5px 5px -3px rgba(0, 0, 0, 0.2);
|
||||
cursor: pointer;
|
||||
transform: scale(1.015);
|
||||
}
|
||||
|
||||
-57
@@ -1,57 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { applicationConfig, Meta, moduleMetadata, StoryFn } from '@storybook/angular';
|
||||
import { AppDetailsCloudComponent } from './app-details-cloud.component';
|
||||
import { ProcessServicesCloudStoryModule } from '../../../testing/process-services-cloud-story.module';
|
||||
import { fakeApplicationInstance } from '../../mock/app-model.mock';
|
||||
import { importProvidersFrom } from '@angular/core';
|
||||
|
||||
export default {
|
||||
component: AppDetailsCloudComponent,
|
||||
title: 'Process Services Cloud/App List Cloud/App Details Cloud',
|
||||
decorators: [
|
||||
moduleMetadata({
|
||||
imports: [AppDetailsCloudComponent]
|
||||
}),
|
||||
applicationConfig({
|
||||
providers: [importProvidersFrom(ProcessServicesCloudStoryModule)]
|
||||
})
|
||||
],
|
||||
argTypes: {
|
||||
applicationInstance: {
|
||||
control: 'object',
|
||||
table: {
|
||||
type: { summary: 'ApplicationInstanceModel' }
|
||||
}
|
||||
},
|
||||
selectedApp: {
|
||||
action: 'selectedApp',
|
||||
description: 'Emitted when an app entry is clicked.',
|
||||
table: { category: 'Actions' }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
applicationInstance: fakeApplicationInstance[0]
|
||||
}
|
||||
} as Meta<AppDetailsCloudComponent>;
|
||||
|
||||
const template: StoryFn<AppDetailsCloudComponent> = (args) => ({
|
||||
props: args
|
||||
});
|
||||
|
||||
export const AppDetailsCloud = template.bind({});
|
||||
+1
@@ -21,6 +21,7 @@ import { CommonModule } from '@angular/common';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { MatCardModule } from '@angular/material/card';
|
||||
|
||||
/** @deprecated this component will be removed because it's unused https://hyland.atlassian.net/browse/ACS-10178 */
|
||||
@Component({
|
||||
selector: 'adf-cloud-app-details',
|
||||
imports: [CommonModule, MatIconModule, MatCardModule],
|
||||
|
||||
-59
@@ -1,59 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { applicationConfig, Meta, moduleMetadata, StoryFn } from '@storybook/angular';
|
||||
import { ProcessServicesCloudStoryModule } from '../../../testing/process-services-cloud-story.module';
|
||||
import { AppListCloudComponent } from './app-list-cloud.component';
|
||||
import { importProvidersFrom } from '@angular/core';
|
||||
|
||||
export default {
|
||||
component: AppListCloudComponent,
|
||||
title: 'Process Services Cloud/App List Cloud/App List Cloud',
|
||||
decorators: [
|
||||
moduleMetadata({
|
||||
imports: [AppListCloudComponent]
|
||||
}),
|
||||
applicationConfig({
|
||||
providers: [importProvidersFrom(ProcessServicesCloudStoryModule)]
|
||||
})
|
||||
],
|
||||
argTypes: {
|
||||
layoutType: {
|
||||
control: 'radio',
|
||||
options: ['GRID', 'LIST'],
|
||||
description: 'Defines the layout of the apps.',
|
||||
table: {
|
||||
type: { summary: 'string' },
|
||||
defaultValue: { summary: 'GRID' }
|
||||
}
|
||||
},
|
||||
appClick: {
|
||||
action: 'appClick',
|
||||
description: 'Emitted when an app entry is clicked.',
|
||||
table: { category: 'Actions' }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
layoutType: 'GRID'
|
||||
}
|
||||
} as Meta<AppListCloudComponent>;
|
||||
|
||||
const template: StoryFn<AppListCloudComponent> = (args) => ({
|
||||
props: args
|
||||
});
|
||||
|
||||
export const AppListCloud = template.bind({});
|
||||
+1
@@ -33,6 +33,7 @@ export const LAYOUT_LIST: string = 'LIST';
|
||||
export const LAYOUT_GRID: string = 'GRID';
|
||||
export const DEPLOYED_STATUS: string = 'DEPLOYED';
|
||||
|
||||
/** @deprecated this component will be removed because it's unused https://hyland.atlassian.net/browse/ACS-10178 */
|
||||
@Component({
|
||||
selector: 'adf-cloud-app-list',
|
||||
imports: [
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './components/app-list-cloud/app-list-cloud.component';
|
||||
export * from './components/app-details-cloud/app-details-cloud.component';
|
||||
export * from './services/apps-process-cloud.service';
|
||||
export * from './models/application-instance.model';
|
||||
export * from './app-list-cloud.module';
|
||||
export * from './components/app-list-cloud/app-list-cloud.component';
|
||||
export * from './components/app-details-cloud/app-details-cloud.component';
|
||||
|
||||
-66
@@ -1,66 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { applicationConfig, Meta, moduleMetadata, StoryFn } from '@storybook/angular';
|
||||
import { ProcessServicesCloudStoryModule } from '../../testing/process-services-cloud-story.module';
|
||||
import { mockFilterProperty } from '../mock/date-range-filter.mock';
|
||||
import { DateRangeFilterComponent } from './date-range-filter.component';
|
||||
import { importProvidersFrom } from '@angular/core';
|
||||
|
||||
export default {
|
||||
component: DateRangeFilterComponent,
|
||||
title: 'Process Services Cloud/Process Common/Date Range Filter',
|
||||
decorators: [
|
||||
moduleMetadata({
|
||||
imports: [DateRangeFilterComponent]
|
||||
}),
|
||||
applicationConfig({
|
||||
providers: [importProvidersFrom(ProcessServicesCloudStoryModule)]
|
||||
})
|
||||
],
|
||||
argTypes: {
|
||||
processFilterProperty: {
|
||||
control: 'object',
|
||||
table: {
|
||||
type: { summary: 'ApplicationInstanceModel' }
|
||||
}
|
||||
},
|
||||
options: {
|
||||
control: 'object',
|
||||
table: {
|
||||
type: { summary: 'DateCloudFilterType[]' }
|
||||
}
|
||||
},
|
||||
dateChanged: {
|
||||
action: 'dateChanged',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
dateTypeChange: {
|
||||
action: 'dateTypeChange',
|
||||
table: { category: 'Actions' }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
processFilterProperty: mockFilterProperty
|
||||
}
|
||||
} as Meta<DateRangeFilterComponent>;
|
||||
|
||||
const template: StoryFn<DateRangeFilterComponent> = (args) => ({
|
||||
props: args
|
||||
});
|
||||
|
||||
export const DateRangeFilter = template.bind({});
|
||||
-61
@@ -1,61 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { applicationConfig, Meta, moduleMetadata, StoryFn } from '@storybook/angular';
|
||||
import { FormDefinitionSelectorCloudComponent } from './form-definition-selector-cloud.component';
|
||||
import { ProcessServicesCloudStoryModule } from '../../testing/process-services-cloud-story.module';
|
||||
import { FormDefinitionSelectorCloudService } from '../services/form-definition-selector-cloud.service';
|
||||
import { FormDefinitionSelectorCloudServiceMock } from '../mocks/form-definition-selector-cloud.service.mock';
|
||||
import { importProvidersFrom } from '@angular/core';
|
||||
|
||||
export default {
|
||||
component: FormDefinitionSelectorCloudComponent,
|
||||
title: 'Process Services Cloud/Form Cloud/Form Definition Selector Cloud',
|
||||
decorators: [
|
||||
moduleMetadata({
|
||||
imports: [FormDefinitionSelectorCloudComponent],
|
||||
providers: [{ provide: FormDefinitionSelectorCloudService, useClass: FormDefinitionSelectorCloudServiceMock }]
|
||||
}),
|
||||
applicationConfig({
|
||||
providers: [importProvidersFrom(ProcessServicesCloudStoryModule)]
|
||||
})
|
||||
],
|
||||
argTypes: {
|
||||
appName: {
|
||||
control: 'text',
|
||||
description: 'Name of the application. If specified, this shows the users who have access to the app.',
|
||||
table: {
|
||||
type: { summary: 'string' },
|
||||
defaultValue: { summary: '' }
|
||||
}
|
||||
},
|
||||
selectForm: {
|
||||
action: 'selectForm',
|
||||
description: 'Emitted when a form is selected.',
|
||||
table: { category: 'Actions' }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
appName: ''
|
||||
}
|
||||
} as Meta<FormDefinitionSelectorCloudComponent>;
|
||||
|
||||
const template: StoryFn<FormDefinitionSelectorCloudComponent> = (args) => ({
|
||||
props: args
|
||||
});
|
||||
|
||||
export const FormDefinitionSelectorCloud = template.bind({});
|
||||
+1
@@ -23,6 +23,7 @@ import { FormRepresentation } from '../../services/form-fields.interfaces';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { TranslatePipe } from '@ngx-translate/core';
|
||||
|
||||
/** @deprecated this component will be removed because it's unused https://hyland.atlassian.net/browse/ACS-10178 */
|
||||
@Component({
|
||||
selector: 'adf-cloud-form-definition-selector',
|
||||
imports: [CommonModule, TranslatePipe, MatSelectModule],
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { FormFieldOption, FormModel, FormValues } from '@alfresco/adf-core';
|
||||
import { UploadApi } from '@alfresco/js-api';
|
||||
import { Observable, of } from 'rxjs';
|
||||
import { map, switchMap } from 'rxjs/operators';
|
||||
import { FormContent } from '../../services/form-fields.interfaces';
|
||||
import { TaskDetailsCloudModel } from '../../task/public-api';
|
||||
import { taskDetailsContainer } from '../../task/task-header/mocks/task-details-cloud.mock';
|
||||
import { fakeCloudForm } from '../mocks/cloud-form.mock';
|
||||
import { TaskVariableCloud } from '../models/task-variable-cloud.model';
|
||||
import { FormCloudServiceInterface } from '../services/form-cloud.service.interface';
|
||||
|
||||
export class FormCloudServiceMock implements FormCloudServiceInterface {
|
||||
|
||||
uploadApi: UploadApi;
|
||||
|
||||
getTaskForm(appName: string, taskId: string, version?: number): Observable<any> {
|
||||
return this.getTask(appName, taskId).pipe(
|
||||
switchMap((task) => this.getForm(appName, task.formKey, version).pipe(
|
||||
map((form: FormContent) => {
|
||||
const flattenForm = {
|
||||
...form.formRepresentation,
|
||||
...form.formRepresentation.formDefinition,
|
||||
taskId: task.id,
|
||||
taskName: task.name,
|
||||
processDefinitionId: task.processDefinitionId,
|
||||
processInstanceId: task.processInstanceId
|
||||
};
|
||||
delete flattenForm.formDefinition;
|
||||
return flattenForm;
|
||||
})
|
||||
))
|
||||
);
|
||||
}
|
||||
|
||||
getTask(_appName: string, taskId: string): Observable<TaskDetailsCloudModel> {
|
||||
return of(taskDetailsContainer[taskId]);
|
||||
}
|
||||
|
||||
getForm(_appName: string, _formKey: string, _version?: number): Observable<FormContent> {
|
||||
return of(fakeCloudForm);
|
||||
}
|
||||
|
||||
getTaskVariables(_appName: string, _taskId: string): Observable<TaskVariableCloud[]> {
|
||||
return of([new TaskVariableCloud({ name: 'name1', value: 5, type: 'text', id: '52' })]);
|
||||
}
|
||||
|
||||
saveTaskForm(
|
||||
_appName: string,
|
||||
taskId: string,
|
||||
_processInstanceId: string,
|
||||
_formId: string,
|
||||
_values: FormValues
|
||||
): Observable<TaskDetailsCloudModel> {
|
||||
return of(taskDetailsContainer[taskId]);
|
||||
}
|
||||
|
||||
completeTaskForm(
|
||||
_appName: string,
|
||||
taskId: string,
|
||||
_processInstanceId: string,
|
||||
_formId: string,
|
||||
_formValues: FormValues,
|
||||
_outcome: string,
|
||||
_version: number
|
||||
): Observable<TaskDetailsCloudModel> {
|
||||
return of(taskDetailsContainer[taskId]);
|
||||
}
|
||||
|
||||
createTemporaryRawRelatedContent(_file: any, _nodeId: string, _contentHost: string): Observable<any> {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
|
||||
getDropDownJsonData(_url: string): Observable<any> {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
|
||||
parseForm(_json: any, _data?: TaskVariableCloud[], _readOnly: boolean = false): FormModel {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
|
||||
getRestWidgetData(_formName: string, _widgetId: string, _body: Map<string, string>): Observable<FormFieldOption[]> {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
}
|
||||
-36
@@ -1,36 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { Injectable } from '@angular/core';
|
||||
import { Observable, of } from 'rxjs';
|
||||
import { FormRepresentation } from '../../services/form-fields.interfaces';
|
||||
import { FormDefinitionSelectorCloudServiceInterface } from '../services/form-definition-selector-cloud.service.interface';
|
||||
import { mockFormRepresentations } from './form-representation.mock';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class FormDefinitionSelectorCloudServiceMock implements FormDefinitionSelectorCloudServiceInterface {
|
||||
|
||||
getForms(_appName: string): Observable<FormRepresentation[]> {
|
||||
return of(mockFormRepresentations.map(response => response.formRepresentation));
|
||||
}
|
||||
|
||||
getStandAloneTaskForms(_appName: string): Observable<FormRepresentation[]> {
|
||||
return of(mockFormRepresentations.map(response => response.formRepresentation).filter((form: any) => form.standalone ? form : undefined));
|
||||
}
|
||||
}
|
||||
-1
@@ -19,7 +19,6 @@ import { Observable } from 'rxjs';
|
||||
import { FormRepresentation } from '../../services/form-fields.interfaces';
|
||||
|
||||
export interface FormDefinitionSelectorCloudServiceInterface {
|
||||
|
||||
getForms(appName: string): Observable<FormRepresentation[]>;
|
||||
getStandAloneTaskForms(appName: string): Observable<FormRepresentation[]>;
|
||||
}
|
||||
|
||||
+2
@@ -22,6 +22,8 @@ import { BaseCloudService } from '../../services/base-cloud.service';
|
||||
import { FormRepresentation } from '../../services/form-fields.interfaces';
|
||||
import { FormDefinitionSelectorCloudServiceInterface } from './form-definition-selector-cloud.service.interface';
|
||||
|
||||
/** @deprecated this service will be removed because it's component is unused https://hyland.atlassian.net/browse/ACS-10178 */
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
|
||||
@@ -1,180 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { applicationConfig, Meta, moduleMetadata, StoryFn } from '@storybook/angular';
|
||||
import { GroupCloudComponent } from './group-cloud.component';
|
||||
import { ProcessServicesCloudStoryModule } from '../../testing/process-services-cloud-story.module';
|
||||
import { IdentityGroupService } from '../services/identity-group.service';
|
||||
import { IdentityGroupServiceMock, mockFoodGroups, mockMeatChicken, mockVegetableAubergine } from '../mock/group-cloud.mock';
|
||||
import { importProvidersFrom } from '@angular/core';
|
||||
|
||||
export default {
|
||||
component: GroupCloudComponent,
|
||||
title: 'Process Services Cloud/Group Cloud/Group Cloud',
|
||||
decorators: [
|
||||
moduleMetadata({
|
||||
imports: [GroupCloudComponent]
|
||||
}),
|
||||
applicationConfig({
|
||||
providers: [{ provide: IdentityGroupService, useClass: IdentityGroupServiceMock }, importProvidersFrom(ProcessServicesCloudStoryModule)]
|
||||
})
|
||||
],
|
||||
argTypes: {
|
||||
appName: {
|
||||
control: 'text',
|
||||
description: 'Name of the application. If specified this shows the groups who have access to the app.',
|
||||
table: {
|
||||
type: { summary: 'string' }
|
||||
}
|
||||
},
|
||||
title: {
|
||||
control: 'text',
|
||||
description: 'Title of the field.',
|
||||
table: {
|
||||
type: { summary: 'string' }
|
||||
}
|
||||
},
|
||||
mode: {
|
||||
control: 'radio',
|
||||
options: ['single', 'multiple'],
|
||||
description: 'Group selection mode.',
|
||||
table: {
|
||||
type: { summary: 'ComponentSelectionMode' },
|
||||
defaultValue: { summary: 'single' }
|
||||
}
|
||||
},
|
||||
preSelectGroups: {
|
||||
control: 'object',
|
||||
description:
|
||||
'Array of groups to be pre-selected. This pre-selects all groups in multi selection mode and only the first group of the array in single selection mode.',
|
||||
table: {
|
||||
type: { summary: 'IdentityGroupModel[]' },
|
||||
defaultValue: { summary: '[]' }
|
||||
}
|
||||
},
|
||||
validate: {
|
||||
control: 'boolean',
|
||||
description:
|
||||
'This flag enables the validation on the preSelectGroups passed as input.\n\n' +
|
||||
'In case the flag is true the components call the identity service to verify the validity of the information passed as input.\n\n' +
|
||||
'Otherwise, no check will be done.',
|
||||
table: {
|
||||
type: { summary: 'boolean' },
|
||||
defaultValue: { summary: 'false' }
|
||||
}
|
||||
},
|
||||
readOnly: {
|
||||
control: 'boolean',
|
||||
description: 'Show the info in readonly mode.',
|
||||
table: {
|
||||
type: { summary: 'boolean' },
|
||||
defaultValue: { summary: 'false' }
|
||||
}
|
||||
},
|
||||
required: {
|
||||
control: 'boolean',
|
||||
description: 'Mark this field as required.',
|
||||
table: {
|
||||
type: { summary: 'boolean' },
|
||||
defaultValue: { summary: 'false' }
|
||||
}
|
||||
},
|
||||
groupChipsCtrl: {
|
||||
control: 'object',
|
||||
description: 'FormControl to list of group.',
|
||||
table: {
|
||||
type: { summary: 'FormControl' },
|
||||
defaultValue: { summary: "new FormControl({ value: '', disabled: false })" },
|
||||
category: 'Form Controls'
|
||||
}
|
||||
},
|
||||
searchGroupsControl: {
|
||||
control: 'object',
|
||||
description: 'FormControl to search the group.',
|
||||
table: {
|
||||
type: { summary: 'FormControl' },
|
||||
defaultValue: { summary: "new FormControl({ value: '', disabled: false })" },
|
||||
category: 'Form Controls'
|
||||
}
|
||||
},
|
||||
roles: {
|
||||
control: 'object',
|
||||
description: 'Role names of the groups to be listed.',
|
||||
table: {
|
||||
type: { summary: 'string[]' },
|
||||
defaultValue: { summary: '[]' }
|
||||
}
|
||||
},
|
||||
selectGroup: {
|
||||
action: 'selectGroup',
|
||||
description: 'Emitted when a group is selected.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
removeGroup: {
|
||||
action: 'removeGroup',
|
||||
description: 'Emitted when a group is removed.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
changedGroups: {
|
||||
action: 'changedGroups',
|
||||
description: 'Emitted when a group selection changes.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
warning: {
|
||||
action: 'warning',
|
||||
description: 'Emitted when an warning occurs.',
|
||||
table: { category: 'Actions' }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
appName: 'app',
|
||||
title: 'Groups',
|
||||
mode: 'single',
|
||||
preSelectGroups: [],
|
||||
validate: false,
|
||||
readOnly: false,
|
||||
required: false,
|
||||
roles: []
|
||||
}
|
||||
} as Meta<GroupCloudComponent>;
|
||||
|
||||
const template: StoryFn<GroupCloudComponent> = (args) => ({
|
||||
props: args
|
||||
});
|
||||
|
||||
export const DefaultGroupCloud = template.bind({});
|
||||
|
||||
export const ValidPreselectedGroups = template.bind({});
|
||||
ValidPreselectedGroups.args = {
|
||||
validate: true,
|
||||
mode: 'multiple',
|
||||
preSelectGroups: mockFoodGroups
|
||||
};
|
||||
|
||||
export const MandatoryPreselectedGroups = template.bind({});
|
||||
MandatoryPreselectedGroups.args = {
|
||||
validate: true,
|
||||
mode: 'multiple',
|
||||
preSelectGroups: [mockVegetableAubergine, { ...mockMeatChicken, readonly: true }]
|
||||
};
|
||||
|
||||
export const InvalidPreselectedGroups = template.bind({});
|
||||
InvalidPreselectedGroups.args = {
|
||||
validate: true,
|
||||
mode: 'multiple',
|
||||
preSelectGroups: [{ id: 'invalid-group', name: 'Invalid Group' }]
|
||||
};
|
||||
@@ -15,23 +15,9 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable, EMPTY, of } from 'rxjs';
|
||||
import { IdentityGroupModel } from '../models/identity-group.model';
|
||||
import { IdentityGroupService } from '@alfresco/adf-process-services-cloud';
|
||||
|
||||
export const mockVegetableAubergine: IdentityGroupModel = { id: 'aubergine', name: 'Vegetable Aubergine' };
|
||||
export const mockMeatChicken: IdentityGroupModel = { id: 'chicken', name: 'Meat Chicken' };
|
||||
|
||||
export const mockFoodGroups = [mockVegetableAubergine, mockMeatChicken];
|
||||
|
||||
@Injectable()
|
||||
export class IdentityGroupServiceMock extends IdentityGroupService {
|
||||
search(name: string): Observable<IdentityGroupModel[]> {
|
||||
if (name.trim() === '') {
|
||||
return EMPTY;
|
||||
}
|
||||
|
||||
return of(mockFoodGroups.filter((group) => group.name.toUpperCase().includes(name.toUpperCase())));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,4 +392,4 @@
|
||||
"ASSIGNEE": "معين له",
|
||||
"ASSIGNMENT_TYPE": "نوع التعيين"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,4 +392,4 @@
|
||||
"ASSIGNEE": "Pověřená osoba",
|
||||
"ASSIGNMENT_TYPE": "Typ přidělení"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,4 +392,4 @@
|
||||
"ASSIGNEE": "Modtager",
|
||||
"ASSIGNMENT_TYPE": "Tildelingstype"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,4 +392,4 @@
|
||||
"ASSIGNEE": "Vastuuhenkilö",
|
||||
"ASSIGNMENT_TYPE": "Määrityksen tyyppi"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,4 +392,4 @@
|
||||
"ASSIGNEE": "担当者",
|
||||
"ASSIGNMENT_TYPE": "割り当てタイプ"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,4 +392,4 @@
|
||||
"ASSIGNEE": "Tilordnet",
|
||||
"ASSIGNMENT_TYPE": "Tilordningstype"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,4 +392,4 @@
|
||||
"ASSIGNEE": "Toegewezen persoon",
|
||||
"ASSIGNMENT_TYPE": "Toewijzingstype"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,4 +392,4 @@
|
||||
"ASSIGNEE": "Destinatário",
|
||||
"ASSIGNMENT_TYPE": "Tipo de atribuição"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,4 +392,4 @@
|
||||
"ASSIGNEE": "Исполнитель",
|
||||
"ASSIGNMENT_TYPE": "Тип задания"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,4 +392,4 @@
|
||||
"ASSIGNEE": "Tilldelad användare",
|
||||
"ASSIGNMENT_TYPE": "Uppgiftstyp"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,4 +392,4 @@
|
||||
"ASSIGNEE": "被指派者",
|
||||
"ASSIGNMENT_TYPE": "指派类型"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-212
@@ -1,212 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { applicationConfig, Meta, moduleMetadata, StoryFn } from '@storybook/angular';
|
||||
import { PeopleCloudComponent } from './people-cloud.component';
|
||||
import { ProcessServicesCloudStoryModule } from '../../testing/process-services-cloud-story.module';
|
||||
import { IdentityUserService } from '../services/identity-user.service';
|
||||
import { IdentityUserServiceMock, mockFoodUsers, mockKielbasaSausage, mockShepherdsPie, mockYorkshirePudding } from '../mock/people-cloud.mock';
|
||||
import { importProvidersFrom } from '@angular/core';
|
||||
|
||||
export default {
|
||||
component: PeopleCloudComponent,
|
||||
title: 'Process Services Cloud/People Cloud/People Cloud',
|
||||
decorators: [
|
||||
moduleMetadata({
|
||||
imports: [PeopleCloudComponent]
|
||||
}),
|
||||
applicationConfig({
|
||||
providers: [{ provide: IdentityUserService, useClass: IdentityUserServiceMock }, importProvidersFrom(ProcessServicesCloudStoryModule)]
|
||||
})
|
||||
],
|
||||
argTypes: {
|
||||
appName: {
|
||||
control: 'text',
|
||||
description: 'Name of the application. If specified, this shows the users who have access to the app.',
|
||||
table: {
|
||||
type: { summary: 'string' }
|
||||
}
|
||||
},
|
||||
mode: {
|
||||
control: 'radio',
|
||||
options: ['single', 'multiple'],
|
||||
description: 'User selection mode.',
|
||||
table: {
|
||||
type: { summary: 'ComponentSelectionMode' },
|
||||
defaultValue: { summary: 'single' }
|
||||
}
|
||||
},
|
||||
roles: {
|
||||
control: 'object',
|
||||
description: 'Role names of the users to be listed.',
|
||||
table: {
|
||||
type: { summary: 'string[]' },
|
||||
defaultValue: { summary: '[]' }
|
||||
}
|
||||
},
|
||||
validate: {
|
||||
control: 'boolean',
|
||||
description:
|
||||
'This flag enables the validation on the preSelectUsers passed as input.\n\n' +
|
||||
'In case the flag is true the components call the identity service to verify the validity of the information passed as input.\n\n' +
|
||||
'Otherwise, no check will be done.',
|
||||
table: {
|
||||
type: { summary: 'boolean' },
|
||||
defaultValue: { summary: 'false' }
|
||||
}
|
||||
},
|
||||
readOnly: {
|
||||
control: 'boolean',
|
||||
description: 'Show the info in readonly mode.',
|
||||
table: {
|
||||
type: { summary: 'boolean' },
|
||||
defaultValue: { summary: 'false' }
|
||||
}
|
||||
},
|
||||
required: {
|
||||
control: 'boolean',
|
||||
description: 'Mark this field as required.',
|
||||
table: {
|
||||
type: { summary: 'boolean' },
|
||||
defaultValue: { summary: 'false' }
|
||||
}
|
||||
},
|
||||
preSelectUsers: {
|
||||
control: 'object',
|
||||
description:
|
||||
'Array of users to be pre-selected. All users in the array are pre-selected in multi selection mode, but only the first user is pre-selected in single selection mode. Mandatory properties are: id, email, username',
|
||||
table: {
|
||||
type: { summary: 'IdentityUserModel[]' },
|
||||
defaultValue: { summary: '[]' }
|
||||
}
|
||||
},
|
||||
excludedUsers: {
|
||||
control: 'object',
|
||||
description: 'Array of users to be excluded. Mandatory properties are: id, email, username',
|
||||
table: {
|
||||
type: { summary: 'IdentityUserModel[]' },
|
||||
defaultValue: { summary: '[]' }
|
||||
}
|
||||
},
|
||||
groupsRestriction: {
|
||||
control: 'object',
|
||||
description: 'Array of groups to restrict user searches. Mandatory property is group name',
|
||||
table: {
|
||||
type: { summary: 'string[]' },
|
||||
defaultValue: { summary: '[]' }
|
||||
}
|
||||
},
|
||||
userChipsCtrl: {
|
||||
control: 'object',
|
||||
description: 'FormControl to list of users.',
|
||||
table: {
|
||||
type: { summary: 'FormControl' },
|
||||
defaultValue: { summary: "new FormControl({ value: '', disabled: false })" },
|
||||
category: 'Form Controls'
|
||||
}
|
||||
},
|
||||
searchUserCtrl: {
|
||||
control: 'object',
|
||||
description: 'FormControl to search the user.',
|
||||
table: {
|
||||
type: { summary: 'FormControl' },
|
||||
defaultValue: { summary: "new FormControl({ value: '', disabled: false })" },
|
||||
category: 'Form Controls'
|
||||
}
|
||||
},
|
||||
title: {
|
||||
control: 'text',
|
||||
description: 'Title of the field.',
|
||||
table: {
|
||||
type: { summary: 'string' }
|
||||
}
|
||||
},
|
||||
selectUser: {
|
||||
action: 'selectUser',
|
||||
description: 'Emitted when a user is selected.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
removeUser: {
|
||||
action: 'removeUser',
|
||||
description: 'Emitted when a selected user is removed in multi selection mode.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
changedUsers: {
|
||||
action: 'changedUsers',
|
||||
description: 'Emitted when a user selection changes.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
warning: {
|
||||
action: 'warning',
|
||||
description: 'Emitted when an warning occurs.',
|
||||
table: { category: 'Actions' }
|
||||
}
|
||||
},
|
||||
args: {
|
||||
appName: 'app',
|
||||
mode: 'single',
|
||||
roles: [],
|
||||
validate: false,
|
||||
readOnly: false,
|
||||
required: false,
|
||||
preSelectUsers: [],
|
||||
excludedUsers: [],
|
||||
groupsRestriction: []
|
||||
}
|
||||
} as Meta<PeopleCloudComponent>;
|
||||
|
||||
const template: StoryFn<PeopleCloudComponent> = (args) => ({
|
||||
props: args
|
||||
});
|
||||
|
||||
export const DefaultPeopleCloud = template.bind({});
|
||||
|
||||
export const ValidPreselectedUsers = template.bind({});
|
||||
ValidPreselectedUsers.args = {
|
||||
validate: true,
|
||||
mode: 'multiple',
|
||||
preSelectUsers: mockFoodUsers
|
||||
};
|
||||
|
||||
export const MandatoryPreselectedUsers = template.bind({});
|
||||
MandatoryPreselectedUsers.args = {
|
||||
validate: true,
|
||||
mode: 'multiple',
|
||||
preSelectUsers: [{ ...mockKielbasaSausage, readonly: true }, mockShepherdsPie]
|
||||
};
|
||||
|
||||
export const InvalidPreselectedUsers = template.bind({});
|
||||
InvalidPreselectedUsers.args = {
|
||||
validate: true,
|
||||
mode: 'multiple',
|
||||
preSelectUsers: [{ id: 'invalid-user', username: 'Invalid User', firstName: 'Invalid', lastName: 'User', email: 'invalid@xyz.com' }]
|
||||
};
|
||||
|
||||
export const ExcludedUsers = template.bind({});
|
||||
ExcludedUsers.args = {
|
||||
excludedUsers: [mockKielbasaSausage, mockYorkshirePudding]
|
||||
};
|
||||
|
||||
export const NoUsers = template.bind({});
|
||||
NoUsers.args = {
|
||||
excludedUsers: mockFoodUsers
|
||||
};
|
||||
|
||||
export const InvalidOrEmptyAppName = template.bind({});
|
||||
InvalidOrEmptyAppName.args = {
|
||||
appName: null
|
||||
};
|
||||
@@ -1,67 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { Injectable } from '@angular/core';
|
||||
import { Observable, of, Subject, throwError } from 'rxjs';
|
||||
import { ProcessInstanceCloud } from '../start-process/models/process-instance-cloud.model';
|
||||
import { ProcessDefinitionCloud } from '../../models/process-definition-cloud.model';
|
||||
import { ApplicationVersionModel } from '../../models/application-version.model';
|
||||
import { processInstancePlaceholdersCloudMock, processInstanceDetailsCloudMock } from './process-instance-details-cloud.mock';
|
||||
import { fakeProcessDefinitions } from '../start-process/mock/start-process.component.mock';
|
||||
import { mockAppVersions } from '../process-filters/mock/process-filters-cloud.mock';
|
||||
import { ProcessCloudService } from '@alfresco/adf-process-services-cloud';
|
||||
|
||||
@Injectable()
|
||||
export class ProcessCloudServiceMock extends ProcessCloudService {
|
||||
dataChangesDetected = new Subject<ProcessInstanceCloud>();
|
||||
|
||||
getProcessInstanceById(appName: string, processInstanceId: string): Observable<ProcessInstanceCloud> {
|
||||
if (appName === 'app-placeholders' && processInstanceId) {
|
||||
return of(processInstancePlaceholdersCloudMock);
|
||||
}
|
||||
|
||||
if (appName && processInstanceId) {
|
||||
return of(processInstanceDetailsCloudMock);
|
||||
} else {
|
||||
return throwError('AppName/ProcessInstanceId not configured');
|
||||
}
|
||||
}
|
||||
|
||||
getProcessDefinitions(appName: string): Observable<ProcessDefinitionCloud[]> {
|
||||
if (appName || appName === '') {
|
||||
return of(fakeProcessDefinitions);
|
||||
} else {
|
||||
return throwError('AppName not configured');
|
||||
}
|
||||
}
|
||||
|
||||
getApplicationVersions(appName: string): Observable<ApplicationVersionModel[]> {
|
||||
if (appName) {
|
||||
return of(mockAppVersions);
|
||||
} else {
|
||||
return throwError('AppName not configured');
|
||||
}
|
||||
}
|
||||
|
||||
cancelProcess(appName: string, processInstanceId: string): Observable<ProcessInstanceCloud> {
|
||||
if (appName && processInstanceId) {
|
||||
return of();
|
||||
} else {
|
||||
return throwError('App name and process id not configured');
|
||||
}
|
||||
}
|
||||
}
|
||||
-12
@@ -28,15 +28,3 @@ export const processInstanceDetailsCloudMock: ProcessInstanceCloud = {
|
||||
startDate: new Date(1552152187080),
|
||||
status: 'RUNNING'
|
||||
};
|
||||
|
||||
export const processInstancePlaceholdersCloudMock: ProcessInstanceCloud = {
|
||||
appName: 'app-placeholders',
|
||||
businessKey: '',
|
||||
id: '00fcc4ab-4290-11e9-b133-0a586460016a',
|
||||
initiator: 'devopsuser',
|
||||
lastModified: new Date(2022, 1, 1, 1, 30, 40),
|
||||
name: '',
|
||||
parentId: '',
|
||||
startDate: new Date(1552152187080),
|
||||
status: 'RUNNING'
|
||||
};
|
||||
|
||||
-82
@@ -1,82 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { applicationConfig, Meta, moduleMetadata, StoryFn } from '@storybook/angular';
|
||||
import { ProcessServicesCloudStoryModule } from '../../../testing/process-services-cloud-story.module';
|
||||
import { ProcessHeaderCloudComponent } from './process-header-cloud.component';
|
||||
import { ProcessCloudServiceMock } from '../../mock/process-cloud.service.mock';
|
||||
import { ProcessCloudService } from '../../services/process-cloud.service';
|
||||
import { importProvidersFrom } from '@angular/core';
|
||||
|
||||
export default {
|
||||
component: ProcessHeaderCloudComponent,
|
||||
title: 'Process Services Cloud/Process Cloud/Process Header Cloud/Process Header Cloud',
|
||||
decorators: [
|
||||
moduleMetadata({
|
||||
imports: [ProcessHeaderCloudComponent]
|
||||
}),
|
||||
applicationConfig({
|
||||
providers: [{ provide: ProcessCloudService, useClass: ProcessCloudServiceMock }, importProvidersFrom(ProcessServicesCloudStoryModule)]
|
||||
})
|
||||
],
|
||||
argTypes: {
|
||||
appName: {
|
||||
control: 'text',
|
||||
description: '(Required) The name of the application.',
|
||||
defaultValue: '',
|
||||
table: {
|
||||
type: { summary: 'string' },
|
||||
defaultValue: { summary: '' }
|
||||
}
|
||||
},
|
||||
processInstanceId: {
|
||||
control: 'text',
|
||||
description: '(Required) The id of the process instance.',
|
||||
table: {
|
||||
type: { summary: 'string' }
|
||||
}
|
||||
}
|
||||
}
|
||||
} as Meta<ProcessHeaderCloudComponent>;
|
||||
|
||||
const template: StoryFn<ProcessHeaderCloudComponent> = (args) => ({
|
||||
props: args
|
||||
});
|
||||
|
||||
export const DefaultProcessHeaderCloud = template.bind({});
|
||||
DefaultProcessHeaderCloud.args = {
|
||||
appName: 'app',
|
||||
processInstanceId: 'mock-process-id'
|
||||
};
|
||||
|
||||
export const NoParentAndBusinessAndName = template.bind({});
|
||||
NoParentAndBusinessAndName.args = {
|
||||
appName: 'app-placeholders',
|
||||
processInstanceId: 'mock-process-id'
|
||||
};
|
||||
|
||||
export const InvalidOrMissingAppName = template.bind({});
|
||||
InvalidOrMissingAppName.args = {
|
||||
appName: undefined,
|
||||
processInstanceId: 'mock-process-id'
|
||||
};
|
||||
|
||||
export const InvalidOrMissingProcessInstanceID = template.bind({});
|
||||
InvalidOrMissingProcessInstanceID.args = {
|
||||
appName: 'app',
|
||||
processInstanceId: undefined
|
||||
};
|
||||
@@ -1,159 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { Injectable } from '@angular/core';
|
||||
import { CardViewArrayItem } from '@alfresco/adf-core';
|
||||
import { from, Observable, of, Subject, throwError } from 'rxjs';
|
||||
import { DEFAULT_TASK_PRIORITIES, TaskPriorityOption } from '../models/task.model';
|
||||
import { TaskDetailsCloudModel, TASK_ASSIGNED_STATE, TASK_CREATED_STATE } from '../models/task-details-cloud.model';
|
||||
import { taskDetailsContainer } from '../task-header/mocks/task-details-cloud.mock';
|
||||
import { ProcessDefinitionCloud } from '../../models/process-definition-cloud.model';
|
||||
import { TaskCloudService } from '@alfresco/adf-process-services-cloud';
|
||||
import { AdfHttpClient } from '@alfresco/adf-core/api';
|
||||
|
||||
@Injectable()
|
||||
export class TaskCloudServiceMock extends TaskCloudService {
|
||||
currentUserMock = 'AssignedTaskUser';
|
||||
dataChangesDetected$ = new Subject();
|
||||
|
||||
constructor(adfHttpClient: AdfHttpClient) {
|
||||
super(adfHttpClient);
|
||||
}
|
||||
|
||||
getTaskById(_appName: string, taskId: string): Observable<TaskDetailsCloudModel> {
|
||||
return of(taskDetailsContainer[taskId]);
|
||||
}
|
||||
|
||||
getCandidateUsers(_appName: string, taskId: string): Observable<string[]> {
|
||||
if (taskId === 'mock-no-candidate-users') {
|
||||
return of([]);
|
||||
}
|
||||
|
||||
return of(['user1', 'user2']);
|
||||
}
|
||||
|
||||
getCandidateGroups(_appName: string, taskId: string): Observable<string[]> {
|
||||
if (taskId === 'mock-no-candidate-groups') {
|
||||
return of([]);
|
||||
}
|
||||
|
||||
return of(['group1', 'group2']);
|
||||
}
|
||||
|
||||
getPriorityLabel(priority: number): string {
|
||||
const priorityItem = this.priorities.find((item) => item.value === priority.toString()) || this.priorities[0];
|
||||
return priorityItem.label;
|
||||
}
|
||||
|
||||
get priorities(): TaskPriorityOption[] {
|
||||
return this.appConfigService.get('adf-cloud-priority-values') || DEFAULT_TASK_PRIORITIES;
|
||||
}
|
||||
|
||||
isTaskEditable(taskDetails: TaskDetailsCloudModel) {
|
||||
return taskDetails.status === TASK_ASSIGNED_STATE && this.isAssignedToMe(taskDetails.assignee);
|
||||
}
|
||||
|
||||
isAssigneePropertyClickable(
|
||||
taskDetails: TaskDetailsCloudModel,
|
||||
candidateUsers: CardViewArrayItem[],
|
||||
candidateGroups: CardViewArrayItem[]
|
||||
): boolean {
|
||||
let isClickable = false;
|
||||
const states = [TASK_ASSIGNED_STATE];
|
||||
if (candidateUsers?.length || candidateGroups?.length) {
|
||||
isClickable = states.includes(taskDetails.status);
|
||||
}
|
||||
return isClickable;
|
||||
}
|
||||
|
||||
updateTask(_appName: string, taskId: string): Observable<TaskDetailsCloudModel> {
|
||||
return of(taskDetailsContainer[taskId]);
|
||||
}
|
||||
|
||||
canCompleteTask(taskDetails: TaskDetailsCloudModel): boolean {
|
||||
return taskDetails && taskDetails.status === TASK_ASSIGNED_STATE && this.isAssignedToMe(taskDetails.assignee);
|
||||
}
|
||||
|
||||
canClaimTask(taskDetails: TaskDetailsCloudModel): boolean {
|
||||
return taskDetails && taskDetails.status === TASK_CREATED_STATE;
|
||||
}
|
||||
|
||||
protected isAssignedToMe(assignee: string): boolean {
|
||||
return assignee === this.currentUserMock;
|
||||
}
|
||||
|
||||
completeTask(appName: string, taskId: string): Observable<TaskDetailsCloudModel> {
|
||||
if ((appName || appName === '') && taskId) {
|
||||
window.alert('Complete task mock');
|
||||
|
||||
return from([]);
|
||||
} else {
|
||||
return throwError(() => new Error('AppName/TaskId not configured'));
|
||||
}
|
||||
}
|
||||
|
||||
canUnclaimTask(taskDetails: TaskDetailsCloudModel): boolean {
|
||||
const currentUser = this.currentUserMock;
|
||||
return taskDetails && taskDetails.status === TASK_ASSIGNED_STATE && taskDetails.assignee === currentUser;
|
||||
}
|
||||
|
||||
claimTask(appName: string, taskId: string): Observable<TaskDetailsCloudModel> {
|
||||
if ((appName || appName === '') && taskId) {
|
||||
window.alert('Claim task mock');
|
||||
|
||||
return from([]);
|
||||
} else {
|
||||
return throwError(() => new Error('AppName/TaskId not configured'));
|
||||
}
|
||||
}
|
||||
|
||||
unclaimTask(appName: string, taskId: string): Observable<TaskDetailsCloudModel> {
|
||||
if ((appName || appName === '') && taskId) {
|
||||
window.alert('Unclaim task mock');
|
||||
|
||||
return from([]);
|
||||
} else {
|
||||
return throwError(() => new Error('AppName/TaskId not configured'));
|
||||
}
|
||||
}
|
||||
|
||||
createNewTask(): Observable<TaskDetailsCloudModel> {
|
||||
window.alert('Create new task mock');
|
||||
|
||||
return from([]);
|
||||
}
|
||||
|
||||
getProcessDefinitions(appName: string): Observable<ProcessDefinitionCloud[]> {
|
||||
if (appName || appName === '') {
|
||||
window.alert('Get process definitions mock');
|
||||
|
||||
return from([]);
|
||||
} else {
|
||||
return throwError(() => new Error('AppName not configured'));
|
||||
}
|
||||
}
|
||||
|
||||
assign(appName: string, taskId: string): Observable<TaskDetailsCloudModel> {
|
||||
if (appName && taskId) {
|
||||
window.alert('Assign mock');
|
||||
|
||||
return from([]);
|
||||
} else {
|
||||
return throwError(() => new Error('AppName/TaskId not configured'));
|
||||
}
|
||||
}
|
||||
}
|
||||
-176
@@ -1,176 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { applicationConfig, Meta, moduleMetadata, StoryFn } from '@storybook/angular';
|
||||
import { FormCloudService } from '../../../../form/public-api';
|
||||
import { TaskCloudService } from '../../../services/task-cloud.service';
|
||||
import { TaskFormCloudComponent } from './task-form-cloud.component';
|
||||
import { TaskCloudServiceMock } from '../../../mock/task-cloud.service.mock';
|
||||
import { FormCloudServiceMock } from '../../../../form/mocks/form-cloud.service.mock';
|
||||
import { ProcessServicesCloudStoryModule } from '../../../../testing/process-services-cloud-story.module';
|
||||
import { importProvidersFrom } from '@angular/core';
|
||||
|
||||
export default {
|
||||
component: TaskFormCloudComponent,
|
||||
title: 'Process Services Cloud/Task Cloud/Task Form/Task Form Cloud',
|
||||
decorators: [
|
||||
moduleMetadata({
|
||||
imports: [TaskFormCloudComponent],
|
||||
providers: [
|
||||
{ provide: TaskCloudService, useClass: TaskCloudServiceMock },
|
||||
{ provide: FormCloudService, useClass: FormCloudServiceMock }
|
||||
]
|
||||
}),
|
||||
applicationConfig({
|
||||
providers: [importProvidersFrom(ProcessServicesCloudStoryModule)]
|
||||
})
|
||||
],
|
||||
argTypes: {
|
||||
appName: {
|
||||
control: 'text',
|
||||
description: 'App id to fetch corresponding form and values.',
|
||||
defaultValue: '',
|
||||
table: {
|
||||
type: { summary: 'string' },
|
||||
defaultValue: { summary: '' }
|
||||
}
|
||||
},
|
||||
taskId: {
|
||||
control: 'text',
|
||||
description: 'Task id to fetch corresponding form and values.',
|
||||
table: {
|
||||
type: { summary: 'string' }
|
||||
}
|
||||
},
|
||||
showTitle: {
|
||||
control: 'boolean',
|
||||
description: 'Toggle rendering of the form title.',
|
||||
defaultValue: true,
|
||||
table: {
|
||||
type: { summary: 'boolean' },
|
||||
defaultValue: { summary: 'true' }
|
||||
}
|
||||
},
|
||||
showRefreshButton: {
|
||||
control: 'boolean',
|
||||
description: 'Toggle rendering of the `Refresh` button.',
|
||||
defaultValue: false,
|
||||
table: {
|
||||
type: { summary: 'boolean' },
|
||||
defaultValue: { summary: 'false' }
|
||||
}
|
||||
},
|
||||
showValidationIcon: {
|
||||
control: 'boolean',
|
||||
description: 'Toggle rendering of the `Validation` icon.',
|
||||
defaultValue: true,
|
||||
table: {
|
||||
type: { summary: 'boolean' },
|
||||
defaultValue: { summary: 'true' }
|
||||
}
|
||||
},
|
||||
showCancelButton: {
|
||||
control: 'boolean',
|
||||
description: 'Toggle rendering of the `Cancel` button.',
|
||||
defaultValue: true,
|
||||
table: {
|
||||
type: { summary: 'boolean' },
|
||||
defaultValue: { summary: 'true' }
|
||||
}
|
||||
},
|
||||
showCompleteButton: {
|
||||
control: 'boolean',
|
||||
description: 'Toggle rendering of the `Complete` button.',
|
||||
defaultValue: true,
|
||||
table: {
|
||||
type: { summary: 'boolean' },
|
||||
defaultValue: { summary: 'true' }
|
||||
}
|
||||
},
|
||||
readOnly: {
|
||||
control: 'boolean',
|
||||
description: 'Toggle readonly state of the task.',
|
||||
defaultValue: false,
|
||||
table: {
|
||||
type: { summary: 'boolean' },
|
||||
defaultValue: { summary: 'false' }
|
||||
}
|
||||
},
|
||||
formSaved: {
|
||||
action: 'formSaved',
|
||||
description: 'Emitted when the form is saved.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
formCompleted: {
|
||||
action: 'formCompleted',
|
||||
description: 'Emitted when the form is submitted with the `Complete` outcome.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
taskCompleted: {
|
||||
action: 'taskCompleted',
|
||||
description: 'Emitted when the task is completed.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
taskClaimed: {
|
||||
action: 'taskClaimed',
|
||||
description: 'Emitted when the task is claimed.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
taskUnclaimed: {
|
||||
action: 'taskUnclaimed',
|
||||
description: 'mitted when the task is unclaimed.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
cancelClick: {
|
||||
action: 'cancelClick',
|
||||
description: 'Emitted when the cancel button is clicked.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
formContentClicked: {
|
||||
action: 'formContentClicked',
|
||||
description: 'Emitted when form content is clicked.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
error: {
|
||||
action: 'error',
|
||||
description: 'Emitted when any error occurs.',
|
||||
table: { category: 'Actions' }
|
||||
}
|
||||
}
|
||||
} as Meta<TaskFormCloudComponent>;
|
||||
|
||||
const template: StoryFn<TaskFormCloudComponent> = (args) => ({
|
||||
props: args
|
||||
});
|
||||
|
||||
export const DefaultTaskFormCloud = template.bind({});
|
||||
DefaultTaskFormCloud.args = {
|
||||
appName: 'app',
|
||||
taskId: 'mock-task-with-form'
|
||||
};
|
||||
|
||||
export const InvalidOrMissingApp = template.bind({});
|
||||
InvalidOrMissingApp.args = {
|
||||
...DefaultTaskFormCloud.args,
|
||||
appName: undefined
|
||||
};
|
||||
|
||||
export const InvalidOrMissingTaskId = template.bind({});
|
||||
InvalidOrMissingTaskId.args = {
|
||||
...DefaultTaskFormCloud.args,
|
||||
taskId: undefined
|
||||
};
|
||||
-137
@@ -1,137 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { applicationConfig, Meta, moduleMetadata, StoryFn } from '@storybook/angular';
|
||||
import { TaskHeaderCloudComponent } from './task-header-cloud.component';
|
||||
import { TaskCloudService } from '../../services/task-cloud.service';
|
||||
import { TaskCloudServiceMock } from '../../mock/task-cloud.service.mock';
|
||||
import { ProcessServicesCloudStoryModule } from '../../../testing/process-services-cloud-story.module';
|
||||
import { importProvidersFrom } from '@angular/core';
|
||||
|
||||
export default {
|
||||
component: TaskHeaderCloudComponent,
|
||||
title: 'Process Services Cloud/Task Cloud/Task Header Cloud/Task Header Cloud',
|
||||
decorators: [
|
||||
moduleMetadata({
|
||||
imports: [TaskHeaderCloudComponent],
|
||||
providers: [{ provide: TaskCloudService, useClass: TaskCloudServiceMock }]
|
||||
}),
|
||||
applicationConfig({
|
||||
providers: [importProvidersFrom(ProcessServicesCloudStoryModule)]
|
||||
})
|
||||
],
|
||||
argTypes: {
|
||||
appName: {
|
||||
control: 'text',
|
||||
description: '(Required) The name of the application.',
|
||||
defaultValue: '',
|
||||
table: {
|
||||
type: { summary: 'string' },
|
||||
defaultValue: { summary: '' }
|
||||
}
|
||||
},
|
||||
taskId: {
|
||||
control: 'text',
|
||||
description: '(Required) The id of the task.',
|
||||
table: {
|
||||
type: { summary: 'string' }
|
||||
}
|
||||
},
|
||||
showTitle: {
|
||||
control: 'boolean',
|
||||
description: 'Show/Hide the task title.',
|
||||
defaultValue: true,
|
||||
table: {
|
||||
type: { summary: 'boolean' },
|
||||
defaultValue: { summary: 'true' }
|
||||
}
|
||||
},
|
||||
claim: {
|
||||
action: 'claim',
|
||||
description: 'Emitted when the task is claimed.',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
unclaim: {
|
||||
action: 'unclaim',
|
||||
description: 'Emitted when the task is unclaimed (ie, requeued).',
|
||||
table: { category: 'Actions' }
|
||||
},
|
||||
error: {
|
||||
action: 'error',
|
||||
description: 'Emitted when the given task has errors.',
|
||||
table: { category: 'Actions' }
|
||||
}
|
||||
}
|
||||
} as Meta<TaskHeaderCloudComponent>;
|
||||
|
||||
const template: StoryFn<TaskHeaderCloudComponent> = (args) => ({
|
||||
props: args
|
||||
});
|
||||
|
||||
export const AssignedAndEditable = template.bind({});
|
||||
AssignedAndEditable.args = {
|
||||
appName: 'app',
|
||||
taskId: 'mock-assigned-task'
|
||||
};
|
||||
|
||||
export const CompletedAndReadonly = template.bind({});
|
||||
CompletedAndReadonly.args = {
|
||||
...AssignedAndEditable.args,
|
||||
taskId: 'mock-completed-task'
|
||||
};
|
||||
|
||||
export const Suspended = template.bind({});
|
||||
Suspended.args = {
|
||||
...AssignedAndEditable.args,
|
||||
taskId: 'mock-suspended-task'
|
||||
};
|
||||
|
||||
export const WithParentId = template.bind({});
|
||||
WithParentId.args = {
|
||||
...AssignedAndEditable.args,
|
||||
taskId: 'mock-parent-task-id'
|
||||
};
|
||||
|
||||
export const WithoutAssignee = template.bind({});
|
||||
WithoutAssignee.args = {
|
||||
...AssignedAndEditable.args,
|
||||
taskId: 'mock-created-task'
|
||||
};
|
||||
|
||||
export const NotClaimableByUser = template.bind({});
|
||||
NotClaimableByUser.args = {
|
||||
...AssignedAndEditable.args,
|
||||
taskId: 'mock-no-candidate-users'
|
||||
};
|
||||
|
||||
export const TaskNotClaimableByGroupUser = template.bind({});
|
||||
TaskNotClaimableByGroupUser.args = {
|
||||
...AssignedAndEditable.args,
|
||||
taskId: 'mock-no-candidate-groups'
|
||||
};
|
||||
|
||||
export const InvalidForMissingApp = template.bind({});
|
||||
InvalidForMissingApp.args = {
|
||||
...AssignedAndEditable.args,
|
||||
appName: undefined
|
||||
};
|
||||
|
||||
export const InvalidForMissingTaskId = template.bind({});
|
||||
InvalidForMissingTaskId.args = {
|
||||
...AssignedAndEditable.args,
|
||||
taskId: undefined
|
||||
};
|
||||
@@ -180,80 +180,3 @@ export const suspendedTaskDetailsCloudMock: TaskDetailsCloudModel = {
|
||||
lastModifiedTo: null,
|
||||
lastModifiedFrom: null
|
||||
};
|
||||
|
||||
export const noCandidateUsersTaskDetailsCloudMock: TaskDetailsCloudModel = {
|
||||
appName: 'mock-app-name',
|
||||
appVersion: 1,
|
||||
id: 'mock-task-id',
|
||||
assignee: '',
|
||||
name: 'This is a new task',
|
||||
description: 'This is the description ',
|
||||
createdDate: new Date(1545048055900),
|
||||
dueDate: new Date(1545091200000),
|
||||
claimedDate: null,
|
||||
priority: 5,
|
||||
category: null,
|
||||
processDefinitionId: null,
|
||||
processInstanceId: null,
|
||||
status: 'CREATED',
|
||||
owner: 'ownerUser',
|
||||
candidateUsers: null,
|
||||
parentTaskId: null,
|
||||
formKey: null,
|
||||
lastModified: new Date(1545048055900),
|
||||
lastModifiedTo: null,
|
||||
lastModifiedFrom: null,
|
||||
standalone: false
|
||||
};
|
||||
|
||||
export const noCandidateGroupsTaskDetailsCloudMock: TaskDetailsCloudModel = {
|
||||
appName: 'mock-app-name',
|
||||
appVersion: 1,
|
||||
id: 'mock-task-id',
|
||||
assignee: '',
|
||||
name: 'This is a new task',
|
||||
description: 'This is the description ',
|
||||
createdDate: new Date(1545048055900),
|
||||
dueDate: new Date(1545091200000),
|
||||
claimedDate: null,
|
||||
priority: 5,
|
||||
category: null,
|
||||
processDefinitionId: null,
|
||||
processInstanceId: null,
|
||||
status: 'CREATED',
|
||||
owner: 'ownerUser',
|
||||
candidateGroups: null,
|
||||
parentTaskId: null,
|
||||
formKey: null,
|
||||
lastModified: new Date(1545048055900),
|
||||
lastModifiedTo: null,
|
||||
lastModifiedFrom: null,
|
||||
standalone: false
|
||||
};
|
||||
|
||||
export const taskWithFormDetailsMock: TaskDetailsCloudModel = {
|
||||
appName: 'mock-app-name',
|
||||
assignee: 'AssignedTaskUser',
|
||||
completedDate: null,
|
||||
createdDate: new Date(1555419255340),
|
||||
dueDate: new Date(1558419255340),
|
||||
description: null,
|
||||
formKey: '4',
|
||||
priority: 1,
|
||||
parentTaskId: 'bd6b1741-6046-11e9-80f0-0a586460040d',
|
||||
id: 'bd6b1741-6046-11e9-80f0-0a586460040d',
|
||||
name: 'Task1',
|
||||
owner: 'fakeAdmin',
|
||||
status: 'ASSIGNED'
|
||||
};
|
||||
|
||||
export const taskDetailsContainer = {
|
||||
'mock-assigned-task': assignedTaskDetailsCloudMock,
|
||||
'mock-completed-task': completedTaskDetailsCloudMock,
|
||||
'mock-created-task': createdStateTaskDetailsCloudMock,
|
||||
'mock-parent-task-id': taskDetailsWithParentTaskIdMock,
|
||||
'mock-suspended-task': suspendedTaskDetailsCloudMock,
|
||||
'mock-no-candidate-users': noCandidateUsersTaskDetailsCloudMock,
|
||||
'mock-no-candidate-groups': noCandidateGroupsTaskDetailsCloudMock,
|
||||
'mock-task-with-form': taskWithFormDetailsMock
|
||||
};
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2025 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 { NgModule } from '@angular/core';
|
||||
import { AuthModule, CoreModule, provideTranslations } from '@alfresco/adf-core';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { ProcessServicesCloudModule } from '../process-services-cloud.module';
|
||||
import { provideAnimations } from '@angular/platform-browser/animations';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
AuthModule.forRoot(),
|
||||
TranslateModule.forRoot(),
|
||||
CoreModule.forRoot(),
|
||||
ProcessServicesCloudModule.forRoot()
|
||||
],
|
||||
providers: [
|
||||
provideTranslations('adf-process-services-cloud', 'assets/adf-process-services-cloud'),
|
||||
provideAnimations()
|
||||
]
|
||||
})
|
||||
export class ProcessServicesCloudStoryModule { }
|
||||
Reference in New Issue
Block a user