mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-05-12 17:04:57 +00:00
AAE-26215 Standalone start-process component (#10531)
This commit is contained in:
parent
14e7290466
commit
0bc5b6d139
@ -509,7 +509,6 @@ Status: Experimental | [Source](<>) |
|
|||||||
| Name | Description | Source link |
|
| Name | Description | Source link |
|
||||||
| ---- | ----------- | ----------- |
|
| ---- | ----------- | ----------- |
|
||||||
| [Group initial pipe](process-services-cloud/pipes/group-initial.pipe.md) | Extracts the initial character from a group name. | [Source](../lib/process-services-cloud/src/lib/group/pipe/group-initial.pipe.ts) |
|
| [Group initial pipe](process-services-cloud/pipes/group-initial.pipe.md) | Extracts the initial character from a group name. | [Source](../lib/process-services-cloud/src/lib/group/pipe/group-initial.pipe.ts) |
|
||||||
| [Process name cloud pipe](process-services-cloud/pipes/process-name-cloud.pipe.md) | When an identifier is specified, the input will be transformed replacing the identifiers with the values of the selected process definition provided. | [Source](../lib/process-services-cloud/src/lib/pipes/process-name-cloud.pipe.ts) |
|
|
||||||
|
|
||||||
### Services
|
### Services
|
||||||
|
|
||||||
|
@ -1,49 +0,0 @@
|
|||||||
---
|
|
||||||
Title: Process name cloud pipe
|
|
||||||
Added: v3.9.0
|
|
||||||
Status: Active
|
|
||||||
Last reviewed: 2020-06-02
|
|
||||||
---
|
|
||||||
|
|
||||||
# [Process name cloud pipe](../../../lib/process-services-cloud/src/lib/pipes/process-name-cloud.pipe.ts "Defined in process-name-cloud.pipe.ts")
|
|
||||||
|
|
||||||
When an identifier is specified, the input will be transformed replacing the identifiers with the values of the selected process definition provided.
|
|
||||||
|
|
||||||
## Basic Usage
|
|
||||||
|
|
||||||
processNameCloudPipe.transform('Example - %{processDefinition} - %{datetime}', new ProcessDefinitionCloud({ name: 'upload-passport'}));
|
|
||||||
|
|
||||||
### Properties
|
|
||||||
|
|
||||||
| Name | Type | Default value | Description |
|
|
||||||
| ---- | ---- | ------------- | ----------- |
|
|
||||||
| processNameFormat | string | undefined | The process name format including the preferred identifiers to be used |
|
|
||||||
| selectedProcessDefinition | [`ProcessDefinitionCloud`](../../../lib/process-services-cloud/src/lib/models/process-definition-cloud.model.ts) | undefined | (optional) The selected process definition |
|
|
||||||
|
|
||||||
## Details
|
|
||||||
|
|
||||||
The pipe offers a convenient way to format a process name using a process name format template.
|
|
||||||
|
|
||||||
The supported identifiers that can be used in the process name format are the following:
|
|
||||||
|
|
||||||
- %{processDefinition}
|
|
||||||
- %{datetime}
|
|
||||||
|
|
||||||
When the %{processDefinition} identifier is used, the selected process definition provided
|
|
||||||
will be added and positioned in the same place as the identifier.
|
|
||||||
|
|
||||||
When the %{datetime} identifier is used, the current datetime will be added and positioned in the same place as the identifier.
|
|
||||||
|
|
||||||
Important Notes:
|
|
||||||
|
|
||||||
- All the identifiers are case-insensitive.
|
|
||||||
- The identifiers can be used in any position (beginning, middle, end, custom).
|
|
||||||
- The identifiers can NOT be used more than once each in the same processNameFormat (The second occurrence of each identifier will be ignored
|
|
||||||
and handled as a plain string).
|
|
||||||
|
|
||||||
#### Result
|
|
||||||
|
|
||||||
```ts
|
|
||||||
processNameCloudPipe.transform('Example - %{processDefinition} - %{datetime}', new ProcessDefinitionCloud({ name: 'upload-passport'}));
|
|
||||||
//Returns 'Example - upload passport - June 02, 2020, 12:00:00 AM'
|
|
||||||
```
|
|
@ -1,70 +0,0 @@
|
|||||||
/*!
|
|
||||||
* @license
|
|
||||||
* Copyright © 2005-2024 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 { TestBed } from '@angular/core/testing';
|
|
||||||
import { ProcessNameCloudPipe } from './process-name-cloud.pipe';
|
|
||||||
import { LocalizedDatePipe, CoreTestingModule } from '@alfresco/adf-core';
|
|
||||||
import { ProcessInstanceCloud } from '../process/start-process/models/process-instance-cloud.model';
|
|
||||||
|
|
||||||
describe('ProcessNameCloudPipe', () => {
|
|
||||||
let processNamePipe: ProcessNameCloudPipe;
|
|
||||||
const defaultName = 'default-name';
|
|
||||||
const datetimeIdentifier = '%{datetime}';
|
|
||||||
const processDefinitionIdentifier = '%{processDefinition}';
|
|
||||||
const mockCurrentDate: number = new Date('Wed Oct 23 2019').getTime();
|
|
||||||
const mockLocalizedCurrentDate = 'Oct 23, 2019, 12:00:00 AM';
|
|
||||||
const nameWithProcessDefinitionIdentifier = `${defaultName} - ${processDefinitionIdentifier}`;
|
|
||||||
const nameWithDatetimeIdentifier = `${defaultName} - ${datetimeIdentifier}`;
|
|
||||||
const nameWithAllIdentifiers = `${defaultName} ${processDefinitionIdentifier} - ${datetimeIdentifier}`;
|
|
||||||
const fakeProcessInstanceDetails: ProcessInstanceCloud = { processDefinitionName: 'my-process-definition' };
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
TestBed.configureTestingModule({
|
|
||||||
imports: [CoreTestingModule],
|
|
||||||
providers: [LocalizedDatePipe]
|
|
||||||
});
|
|
||||||
const localizedDatePipe = TestBed.inject(LocalizedDatePipe);
|
|
||||||
processNamePipe = new ProcessNameCloudPipe(localizedDatePipe);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not modify the name when there is no identifier', () => {
|
|
||||||
const transformResult = processNamePipe.transform(defaultName);
|
|
||||||
expect(transformResult).toEqual(defaultName);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should add the selected process definition name to the process name', () => {
|
|
||||||
const transformResult = processNamePipe.transform(nameWithProcessDefinitionIdentifier, fakeProcessInstanceDetails);
|
|
||||||
expect(transformResult).toEqual(`${defaultName} - ${fakeProcessInstanceDetails.processDefinitionName}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should add the current datetime to the process name', () => {
|
|
||||||
spyOn(Date.prototype, 'getTime').and.returnValue(mockCurrentDate);
|
|
||||||
const transformResult = processNamePipe.transform(nameWithDatetimeIdentifier);
|
|
||||||
expect(transformResult).toEqual(`${defaultName} - ${mockLocalizedCurrentDate}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should add the current datetime and the selected process definition name when both identifiers are present', () => {
|
|
||||||
spyOn(Date.prototype, 'getTime').and.returnValue(mockCurrentDate);
|
|
||||||
const transformResult = processNamePipe.transform(nameWithAllIdentifiers, fakeProcessInstanceDetails);
|
|
||||||
expect(transformResult).toEqual(`${defaultName} ${fakeProcessInstanceDetails.processDefinitionName} - ${mockLocalizedCurrentDate}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not modify the process name when processDefinition identifier is present but no process definition is selected', () => {
|
|
||||||
const transformResult = processNamePipe.transform(nameWithProcessDefinitionIdentifier);
|
|
||||||
expect(transformResult).toEqual(`${defaultName} - `);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,50 +0,0 @@
|
|||||||
/*!
|
|
||||||
* @license
|
|
||||||
* Copyright © 2005-2024 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 { Pipe, PipeTransform } from '@angular/core';
|
|
||||||
import { LocalizedDatePipe } from '@alfresco/adf-core';
|
|
||||||
import { ProcessInstanceCloud } from '../process/start-process/models/process-instance-cloud.model';
|
|
||||||
import { getTime } from 'date-fns';
|
|
||||||
|
|
||||||
export const DATE_TIME_IDENTIFIER_REG_EXP = new RegExp('%{datetime}', 'i');
|
|
||||||
export const PROCESS_DEFINITION_IDENTIFIER_REG_EXP = new RegExp('%{processdefinition}', 'i');
|
|
||||||
|
|
||||||
@Pipe({ name: 'processNameCloud' })
|
|
||||||
export class ProcessNameCloudPipe implements PipeTransform {
|
|
||||||
constructor(private localizedDatePipe: LocalizedDatePipe) {
|
|
||||||
}
|
|
||||||
|
|
||||||
transform(processNameFormat: string, processInstance?: ProcessInstanceCloud): string {
|
|
||||||
let processName = processNameFormat;
|
|
||||||
if (processName.match(DATE_TIME_IDENTIFIER_REG_EXP)) {
|
|
||||||
const presentDateTime = getTime(new Date());
|
|
||||||
processName = processName.replace(
|
|
||||||
DATE_TIME_IDENTIFIER_REG_EXP,
|
|
||||||
this.localizedDatePipe.transform(presentDateTime, 'medium')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (processName.match(PROCESS_DEFINITION_IDENTIFIER_REG_EXP)) {
|
|
||||||
const selectedProcessDefinitionName = processInstance ? processInstance.processDefinitionName : '';
|
|
||||||
processName = processName.replace(
|
|
||||||
PROCESS_DEFINITION_IDENTIFIER_REG_EXP,
|
|
||||||
selectedProcessDefinitionName
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return processName;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
/*!
|
|
||||||
* @license
|
|
||||||
* Copyright © 2005-2024 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 { ProcessNameCloudPipe } from './process-name-cloud.pipe';
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
declarations: [
|
|
||||||
ProcessNameCloudPipe
|
|
||||||
],
|
|
||||||
exports: [
|
|
||||||
ProcessNameCloudPipe
|
|
||||||
]
|
|
||||||
})
|
|
||||||
export class ProcessServicesCloudPipeModule {
|
|
||||||
}
|
|
@ -33,7 +33,6 @@ import {
|
|||||||
} from './services/public-api';
|
} from './services/public-api';
|
||||||
import { PeopleCloudModule } from './people/people-cloud.module';
|
import { PeopleCloudModule } from './people/people-cloud.module';
|
||||||
import { CloudFormRenderingService } from './form/components/cloud-form-rendering.service';
|
import { CloudFormRenderingService } from './form/components/cloud-form-rendering.service';
|
||||||
import { ProcessServicesCloudPipeModule } from './pipes/process-services-cloud-pipe.module';
|
|
||||||
import { ApolloModule } from 'apollo-angular';
|
import { ApolloModule } from 'apollo-angular';
|
||||||
import { RichTextEditorComponent } from './rich-text-editor';
|
import { RichTextEditorComponent } from './rich-text-editor';
|
||||||
|
|
||||||
@ -47,7 +46,6 @@ import { RichTextEditorComponent } from './rich-text-editor';
|
|||||||
PeopleCloudModule,
|
PeopleCloudModule,
|
||||||
FormCloudModule,
|
FormCloudModule,
|
||||||
TaskFormModule,
|
TaskFormModule,
|
||||||
ProcessServicesCloudPipeModule,
|
|
||||||
ApolloModule,
|
ApolloModule,
|
||||||
RichTextEditorComponent
|
RichTextEditorComponent
|
||||||
],
|
],
|
||||||
@ -60,7 +58,6 @@ import { RichTextEditorComponent } from './rich-text-editor';
|
|||||||
FormCloudModule,
|
FormCloudModule,
|
||||||
TaskFormModule,
|
TaskFormModule,
|
||||||
PeopleCloudModule,
|
PeopleCloudModule,
|
||||||
ProcessServicesCloudPipeModule,
|
|
||||||
RichTextEditorComponent
|
RichTextEditorComponent
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
@ -18,22 +18,21 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { ProcessFiltersCloudModule } from './process-filters/process-filters-cloud.module';
|
import { ProcessFiltersCloudModule } from './process-filters/process-filters-cloud.module';
|
||||||
import { ProcessListCloudModule } from './process-list/process-list-cloud.module';
|
import { ProcessListCloudModule } from './process-list/process-list-cloud.module';
|
||||||
import { StartProcessCloudModule } from './start-process/start-process-cloud.module';
|
|
||||||
import { CoreModule, LocalizedDatePipe } from '@alfresco/adf-core';
|
import { CoreModule, LocalizedDatePipe } from '@alfresco/adf-core';
|
||||||
import { ProcessHeaderCloudModule } from './process-header/process-header-cloud.module';
|
import { ProcessHeaderCloudModule } from './process-header/process-header-cloud.module';
|
||||||
import { ProcessDirectiveModule } from './directives/process-directive.module';
|
import { ProcessDirectiveModule } from './directives/process-directive.module';
|
||||||
import { ProcessNameCloudPipe } from '../pipes/process-name-cloud.pipe';
|
import { StartProcessCloudComponent } from './start-process/components/start-process-cloud.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
CoreModule,
|
CoreModule,
|
||||||
ProcessFiltersCloudModule,
|
ProcessFiltersCloudModule,
|
||||||
ProcessListCloudModule,
|
ProcessListCloudModule,
|
||||||
StartProcessCloudModule,
|
StartProcessCloudComponent,
|
||||||
ProcessHeaderCloudModule,
|
ProcessHeaderCloudModule,
|
||||||
ProcessDirectiveModule
|
ProcessDirectiveModule
|
||||||
],
|
],
|
||||||
exports: [ProcessFiltersCloudModule, ProcessListCloudModule, StartProcessCloudModule, ProcessHeaderCloudModule, ProcessDirectiveModule],
|
exports: [ProcessFiltersCloudModule, ProcessListCloudModule, StartProcessCloudComponent, ProcessHeaderCloudModule, ProcessDirectiveModule],
|
||||||
providers: [ProcessNameCloudPipe, LocalizedDatePipe]
|
providers: [LocalizedDatePipe]
|
||||||
})
|
})
|
||||||
export class ProcessCloudModule {}
|
export class ProcessCloudModule {}
|
||||||
|
@ -46,7 +46,6 @@ import { By } from '@angular/platform-browser';
|
|||||||
import { ProcessPayloadCloud } from '../models/process-payload-cloud.model';
|
import { ProcessPayloadCloud } from '../models/process-payload-cloud.model';
|
||||||
import { ProcessWithFormPayloadCloud } from '../models/process-with-form-payload-cloud.model';
|
import { ProcessWithFormPayloadCloud } from '../models/process-with-form-payload-cloud.model';
|
||||||
import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module';
|
import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module';
|
||||||
import { ProcessNameCloudPipe } from '../../../pipes/process-name-cloud.pipe';
|
|
||||||
import { ProcessInstanceCloud } from '../models/process-instance-cloud.model';
|
import { ProcessInstanceCloud } from '../models/process-instance-cloud.model';
|
||||||
import { ESCAPE } from '@angular/cdk/keycodes';
|
import { ESCAPE } from '@angular/cdk/keycodes';
|
||||||
import { ProcessDefinitionCloud } from '../../../models/process-definition-cloud.model';
|
import { ProcessDefinitionCloud } from '../../../models/process-definition-cloud.model';
|
||||||
@ -999,8 +998,7 @@ describe('StartProcessCloudComponent', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should set the process name using the processName cloud pipe when a process definition gets selected', async () => {
|
it('should set the process name using the processName cloud pipe when a process definition gets selected', async () => {
|
||||||
const processNameCloudPipe = TestBed.inject(ProcessNameCloudPipe);
|
const getDefaultProcessNameSpy = spyOn(component, 'getDefaultProcessName').and.returnValue('fake-transformed-name');
|
||||||
const processNamePipeTransformSpy = spyOn(processNameCloudPipe, 'transform').and.returnValue('fake-transformed-name');
|
|
||||||
const expectedProcessInstanceDetails: ProcessInstanceCloud = { processDefinitionName: fakeProcessDefinitions[0].name };
|
const expectedProcessInstanceDetails: ProcessInstanceCloud = { processDefinitionName: fakeProcessDefinitions[0].name };
|
||||||
getDefinitionsSpy.and.returnValue(of([fakeProcessDefinitions[0]]));
|
getDefinitionsSpy.and.returnValue(of([fakeProcessDefinitions[0]]));
|
||||||
formDefinitionSpy.and.stub();
|
formDefinitionSpy.and.stub();
|
||||||
@ -1011,7 +1009,7 @@ describe('StartProcessCloudComponent', () => {
|
|||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
await fixture.whenStable();
|
await fixture.whenStable();
|
||||||
|
|
||||||
expect(processNamePipeTransformSpy).toHaveBeenCalledWith(component.name, expectedProcessInstanceDetails);
|
expect(getDefaultProcessNameSpy).toHaveBeenCalledWith(component.name, expectedProcessInstanceDetails);
|
||||||
expect(component.processInstanceName.dirty).toBe(true);
|
expect(component.processInstanceName.dirty).toBe(true);
|
||||||
expect(component.processInstanceName.touched).toBe(true);
|
expect(component.processInstanceName.touched).toBe(true);
|
||||||
expect(component.processInstanceName.value).toEqual('fake-transformed-name');
|
expect(component.processInstanceName.value).toEqual('fake-transformed-name');
|
||||||
@ -1038,9 +1036,8 @@ describe('StartProcessCloudComponent', () => {
|
|||||||
|
|
||||||
getDefinitionsSpy.and.returnValue(of(definitions));
|
getDefinitionsSpy.and.returnValue(of(definitions));
|
||||||
|
|
||||||
const processNameCloudPipe = TestBed.inject(ProcessNameCloudPipe);
|
|
||||||
const fakeTransformedName = 'fake-transformed-name';
|
const fakeTransformedName = 'fake-transformed-name';
|
||||||
spyOn(processNameCloudPipe, 'transform').and.returnValue(fakeTransformedName);
|
spyOn(component, 'getDefaultProcessName').and.returnValue(fakeTransformedName);
|
||||||
|
|
||||||
component.processDefinitionName = 'fake-name';
|
component.processDefinitionName = 'fake-name';
|
||||||
const change = new SimpleChange(null, 'MyApp', true);
|
const change = new SimpleChange(null, 'MyApp', true);
|
||||||
|
@ -29,16 +29,17 @@ import {
|
|||||||
ViewChild,
|
ViewChild,
|
||||||
ViewEncapsulation
|
ViewEncapsulation
|
||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ContentLinkModel,
|
ContentLinkModel,
|
||||||
FORM_FIELD_VALIDATORS,
|
FORM_FIELD_VALIDATORS,
|
||||||
FormFieldValidator,
|
FormFieldValidator,
|
||||||
FormModel,
|
FormModel,
|
||||||
|
InplaceFormInputComponent,
|
||||||
|
LocalizedDatePipe,
|
||||||
TranslationService
|
TranslationService
|
||||||
} from '@alfresco/adf-core';
|
} from '@alfresco/adf-core';
|
||||||
import { AbstractControl, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';
|
import { AbstractControl, FormControl, FormGroup, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';
|
||||||
import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
|
import { MatAutocompleteModule, MatAutocompleteTrigger } from '@angular/material/autocomplete';
|
||||||
import { catchError, debounceTime } from 'rxjs/operators';
|
import { catchError, debounceTime } from 'rxjs/operators';
|
||||||
import { ProcessInstanceCloud } from '../models/process-instance-cloud.model';
|
import { ProcessInstanceCloud } from '../models/process-instance-cloud.model';
|
||||||
import { ProcessPayloadCloud } from '../models/process-payload-cloud.model';
|
import { ProcessPayloadCloud } from '../models/process-payload-cloud.model';
|
||||||
@ -47,15 +48,41 @@ import { StartProcessCloudService } from '../services/start-process-cloud.servic
|
|||||||
import { forkJoin, of } from 'rxjs';
|
import { forkJoin, of } from 'rxjs';
|
||||||
import { ProcessDefinitionCloud } from '../../../models/process-definition-cloud.model';
|
import { ProcessDefinitionCloud } from '../../../models/process-definition-cloud.model';
|
||||||
import { TaskVariableCloud } from '../../../form/models/task-variable-cloud.model';
|
import { TaskVariableCloud } from '../../../form/models/task-variable-cloud.model';
|
||||||
import { ProcessNameCloudPipe } from '../../../pipes/process-name-cloud.pipe';
|
|
||||||
import { FormCloudDisplayModeConfiguration } from '../../../services/form-fields.interfaces';
|
import { FormCloudDisplayModeConfiguration } from '../../../services/form-fields.interfaces';
|
||||||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||||
|
import { getTime } from 'date-fns';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
||||||
|
import { MatCardModule } from '@angular/material/card';
|
||||||
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
|
import { FormCloudModule } from '../../../form/form-cloud.module';
|
||||||
|
import { MatIconModule } from '@angular/material/icon';
|
||||||
|
import { MatInputModule } from '@angular/material/input';
|
||||||
|
import { MatOptionModule } from '@angular/material/core';
|
||||||
|
|
||||||
const MAX_NAME_LENGTH: number = 255;
|
const MAX_NAME_LENGTH: number = 255;
|
||||||
const PROCESS_DEFINITION_DEBOUNCE: number = 300;
|
const PROCESS_DEFINITION_DEBOUNCE: number = 300;
|
||||||
|
const DATE_TIME_IDENTIFIER_REG_EXP = new RegExp('%{datetime}', 'i');
|
||||||
|
const PROCESS_DEFINITION_IDENTIFIER_REG_EXP = new RegExp('%{processdefinition}', 'i');
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'adf-cloud-start-process',
|
selector: 'adf-cloud-start-process',
|
||||||
|
standalone: true,
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
TranslateModule,
|
||||||
|
MatProgressSpinnerModule,
|
||||||
|
MatCardModule,
|
||||||
|
MatButtonModule,
|
||||||
|
FormCloudModule,
|
||||||
|
InplaceFormInputComponent,
|
||||||
|
MatIconModule,
|
||||||
|
MatInputModule,
|
||||||
|
MatOptionModule,
|
||||||
|
MatAutocompleteModule,
|
||||||
|
ReactiveFormsModule
|
||||||
|
],
|
||||||
templateUrl: './start-process-cloud.component.html',
|
templateUrl: './start-process-cloud.component.html',
|
||||||
styleUrls: ['./start-process-cloud.component.scss'],
|
styleUrls: ['./start-process-cloud.component.scss'],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
@ -140,7 +167,6 @@ export class StartProcessCloudComponent implements OnChanges, OnInit {
|
|||||||
resolvedValues?: TaskVariableCloud[];
|
resolvedValues?: TaskVariableCloud[];
|
||||||
customOutcome: string;
|
customOutcome: string;
|
||||||
|
|
||||||
|
|
||||||
isProcessStarting = false;
|
isProcessStarting = false;
|
||||||
isFormCloudLoaded = false;
|
isFormCloudLoaded = false;
|
||||||
isFormCloudLoading = false;
|
isFormCloudLoading = false;
|
||||||
@ -162,7 +188,7 @@ export class StartProcessCloudComponent implements OnChanges, OnInit {
|
|||||||
|
|
||||||
private readonly destroyRef = inject(DestroyRef);
|
private readonly destroyRef = inject(DestroyRef);
|
||||||
private readonly startProcessCloudService = inject(StartProcessCloudService);
|
private readonly startProcessCloudService = inject(StartProcessCloudService);
|
||||||
private readonly processNameCloudPipe = inject(ProcessNameCloudPipe);
|
private readonly localizedDatePipe = inject(LocalizedDatePipe);
|
||||||
|
|
||||||
get isProcessFormValid(): boolean {
|
get isProcessFormValid(): boolean {
|
||||||
if (this.hasForm && this.isFormCloudLoaded) {
|
if (this.hasForm && this.isFormCloudLoaded) {
|
||||||
@ -500,9 +526,23 @@ export class StartProcessCloudComponent implements OnChanges, OnInit {
|
|||||||
|
|
||||||
setDefaultProcessName(processDefinitionName: string): void {
|
setDefaultProcessName(processDefinitionName: string): void {
|
||||||
const processInstanceDetails: ProcessInstanceCloud = { processDefinitionName };
|
const processInstanceDetails: ProcessInstanceCloud = { processDefinitionName };
|
||||||
const defaultProcessName = this.processNameCloudPipe.transform(this.name, processInstanceDetails);
|
const defaultProcessName = this.getDefaultProcessName(this.name, processInstanceDetails);
|
||||||
this.processInstanceName.setValue(defaultProcessName);
|
this.processInstanceName.setValue(defaultProcessName);
|
||||||
this.processInstanceName.markAsDirty();
|
this.processInstanceName.markAsDirty();
|
||||||
this.processInstanceName.markAsTouched();
|
this.processInstanceName.markAsTouched();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getDefaultProcessName(processNameFormat: string, processInstance?: ProcessInstanceCloud): string {
|
||||||
|
let processName = processNameFormat;
|
||||||
|
if (processName.match(DATE_TIME_IDENTIFIER_REG_EXP)) {
|
||||||
|
const presentDateTime = getTime(new Date());
|
||||||
|
processName = processName.replace(DATE_TIME_IDENTIFIER_REG_EXP, this.localizedDatePipe.transform(presentDateTime, 'medium'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (processName.match(PROCESS_DEFINITION_IDENTIFIER_REG_EXP)) {
|
||||||
|
const selectedProcessDefinitionName = processInstance ? processInstance.processDefinitionName : '';
|
||||||
|
processName = processName.replace(PROCESS_DEFINITION_IDENTIFIER_REG_EXP, selectedProcessDefinitionName);
|
||||||
|
}
|
||||||
|
return processName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,26 +16,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { CommonModule } from '@angular/common';
|
|
||||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
||||||
import { MaterialModule } from '../../material.module';
|
|
||||||
import { FormCloudModule } from '../../form/form-cloud.module';
|
|
||||||
import { StartProcessCloudComponent } from './components/start-process-cloud.component';
|
import { StartProcessCloudComponent } from './components/start-process-cloud.component';
|
||||||
import { CoreModule } from '@alfresco/adf-core';
|
|
||||||
|
/** @deprecated use StartProcessCloudComponent instead */
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [StartProcessCloudComponent],
|
||||||
FormsModule,
|
exports: [StartProcessCloudComponent]
|
||||||
CommonModule,
|
|
||||||
FormCloudModule,
|
|
||||||
MaterialModule,
|
|
||||||
ReactiveFormsModule,
|
|
||||||
CoreModule
|
|
||||||
],
|
|
||||||
declarations: [
|
|
||||||
StartProcessCloudComponent
|
|
||||||
],
|
|
||||||
exports: [
|
|
||||||
StartProcessCloudComponent
|
|
||||||
]
|
|
||||||
})
|
})
|
||||||
export class StartProcessCloudModule { }
|
export class StartProcessCloudModule {}
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
/*!
|
|
||||||
* @license
|
|
||||||
* Copyright © 2005-2024 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 { CardViewItemValidator } from '@alfresco/adf-core';
|
|
||||||
|
|
||||||
export class NumericFieldValidator implements CardViewItemValidator {
|
|
||||||
|
|
||||||
message: string = 'ADF_CLOUD_TASK_HEADER.FORM_VALIDATION.INVALID_FIELD';
|
|
||||||
|
|
||||||
isValid(value: any): boolean {
|
|
||||||
if (!value) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return !isNaN(+value) && !this.whitespaces(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
whitespaces(value: any): boolean {
|
|
||||||
const isWhitespace = (value || '').trim().length === 0;
|
|
||||||
return !(value.length === 0 || !isWhitespace);
|
|
||||||
}
|
|
||||||
}
|
|
@ -27,8 +27,6 @@ export * from './lib/rich-text-editor/public-api';
|
|||||||
|
|
||||||
export * from './lib/types';
|
export * from './lib/types';
|
||||||
export * from './lib/common/index';
|
export * from './lib/common/index';
|
||||||
export * from './lib/pipes/process-name-cloud.pipe';
|
|
||||||
export * from './lib/pipes/process-services-cloud-pipe.module';
|
|
||||||
export * from './lib/models/process-definition-cloud.model';
|
export * from './lib/models/process-definition-cloud.model';
|
||||||
export * from './lib/models/date-cloud-filter.model';
|
export * from './lib/models/date-cloud-filter.model';
|
||||||
export * from './lib/models/application-version.model';
|
export * from './lib/models/application-version.model';
|
||||||
@ -39,4 +37,4 @@ export * from './lib/models/task-list-sorting.model';
|
|||||||
export * from './lib/models/process-instance-variable.model';
|
export * from './lib/models/process-instance-variable.model';
|
||||||
export * from './lib/models/variable-definition';
|
export * from './lib/models/variable-definition';
|
||||||
export * from './lib/models/date-format-cloud.model';
|
export * from './lib/models/date-format-cloud.model';
|
||||||
export * from './lib/models/process-variable-filter.model'
|
export * from './lib/models/process-variable-filter.model';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user