8000 feat(ui): add store on workflow edit page (#4027) · ovh/cds@34fba71 · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit 34fba71

Browse files
authored
feat(ui): add store on workflow edit page (#4027)
Signed-off-by: Benjamin Coenen <benjamin.coenen@corp.ovh.com>
1 parent fcf66ba commit 34fba71

File tree

64 files changed

+2653
-2732
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+2653
-2732
lines changed

ui/src/app/app.component.spec.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,16 @@ import { Pipeline } from './model/pipeline.model';
1515
import { Project } from './model/project.model';
1616
import { User } from './model/user.model';
1717
import { ApplicationService } from './service/application/application.service';
18-
import { ApplicationStore } from './service/application/application.store';
1918
import { AuthentificationStore } from './service/auth/authentification.store';
2019
import { PipelineService } from './service/pipeline/pipeline.service';
21-
import { PipelineStore } from './service/pipeline/pipeline.store';
2220
import { ProjectService } from './service/project/project.service';
23-
import { ProjectStore } from './service/project/project.store';
2421
import { SharedModule } from './shared/shared.module';
2522
import { NgxsStoreModule } from './store/store.module';
2623

2724
describe('App: CDS', () => {
2825

2926
let injector: Injector;
3027
let authStore: AuthentificationStore;
31-
let projectStore: ProjectStore;
32-
let applicationStore: ApplicationStore;
33-
let pipelineStore: PipelineStore;
3428

3529
beforeEach(() => {
3630
TestBed.configureTestingModule({
@@ -55,17 +49,11 @@ describe('App: CDS', () => {
5549

5650
injector = getTestBed();
5751
authStore = injector.get(AuthentificationStore);
58-
projectStore = injector.get(ProjectStore);
59-
applicationStore = injector.get(ApplicationStore);
60-
pipelineStore = injector.get(PipelineStore);
6152
});
6253

6354
afterEach(() => {
6455
injector = undefined;
6556
authStore = undefined;
66-
projectStore = undefined;
67-
applicationStore = undefined;
68-
pipelineStore = undefined;
6957
});
7058

7159

ui/src/app/app.service.ts

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { ActivatedRoute } from '@angular/router';
33
import { TranslateService } from '@ngx-translate/core';
44
import { Store } from '@ngxs/store';
55
import { cloneDeep } from 'lodash';
6-
import { filter, first } from 'rxjs/operators';
6+
import { filter } from 'rxjs/operators';
77
import { Subscription } from 'rxjs/Subscription';
88
import { Broadcast, BroadcastEvent } from './model/broadcast.model';
99
import { Event, EventType } from './model/event.model';
@@ -16,14 +16,15 @@ import { BroadcastStore } from './service/broadcast/broadcast.store';
1616
import { RouterService, TimelineStore } from './service/services.module';
1717
import { WorkflowRunService } from './service/workflow/run/workflow.run.service';
1818
import { WorkflowEventStore } from './service/workflow/workflow.event.store';
19-
import { WorkflowStore } from './service/workflow/workflow.store';
2019
import { ToastService } from './shared/toast/ToastService';
2120
import { DeleteFromCacheApplication, ExternalChangeApplication, ResyncApplication } from './store/applications.action';
2221
import { ApplicationsState, ApplicationsStateModel } from './store/applications.state';
2322
import { DeleteFromCachePipeline, ExternalChangePipeline, ResyncPipeline } from './store/pipelines.action';
2423
import { PipelinesState, PipelinesStateModel } from './store/pipelines.state';
2524
import * as projectActions from './store/project.action';
2625
import { ProjectState, ProjectStateModel } from './store/project.state';
26+
import { DeleteFromCacheWorkflow, ExternalChangeWorkflow, ResyncWorkflow } from './store/workflows.action';
27+
import { WorkflowsState, WorkflowsStateModel } from './store/workflows.state';
2728

2829
@Injectable()
2930
export class AppService {
@@ -40,7 +41,6 @@ export class AppService {
4041
private _authStore: AuthentificationStore,
4142
private _translate: TranslateService,
4243
private _workflowEventStore: WorkflowEventStore,
43-
private _wfStore: WorkflowStore,
4444
private _broadcastStore: BroadcastStore,
4545
private _timelineStore: TimelineStore,
4646
private _toast: ToastService,
@@ -214,8 +214,8 @@ export class AppService {
214214
if (!event || !event.type_event) {
215215
return
216216
}
217-
let pipKey = event.project_key + '-' + event.pipeline_name;
218217

218+
const pipKey = event.project_key + '-' + event.pipeline_name;
219219
this.store.selectOnce(PipelinesState).subscribe((pips: PipelinesStateModel) => {
220220
if (!pips || !pips.pipelines || !pips.pipelines[pipKey]) {
221221
return;
@@ -260,37 +260,46 @@ export class AppService {
260260
if (!event || !event.type_event) {
261261
return
262262
}
263-
let wfKey = event.project_key + '-' + event.workflow_name;
264-
this._wfStore.getWorkflows(event.project_key).pipe(first()).subscribe(wfs => {
265-
if (!wfs) {
266-
return;
267-
}
268-
269-
if (!wfs.get(wfKey)) {
270-
return;
271-
}
272-
273-
if (event.type_event === EventType.WORKFLOW_DELETE) {
274-
this._wfStore.removeFromStore(wfKey);
275-
this.store.dispatch(new projectActions.DeleteWorkflowInProject({ workflowName: event.workflow_name }));
276-
return;
277-
}
263+
this.store.selectOnce(WorkflowsState)
264+
.pipe(filter((wfs) => wfs != null))
265+
.subscribe((wfs: WorkflowsStateModel) => {
266+
const wfKey = event.project_key + '-' + event.workflow_name;
267+
if (!wfs || !wfs.workflows || !wfs.workflows[wfKey]) {
268+
return;
269+
}
270+
if (event.type_event === EventType.WORKFLOW_DELETE) {
271+
this.store.dispatch(new DeleteFromCacheWorkflow({
272+
projectKey: event.project_key,
273+
workflowName: event.workflow_name
274+
}));
275+
this.store.dispatch(new projectActions.DeleteWorkflowInProject({ workflowName: event.workflow_name }));
276+
return;
277+
}
278278

279-
// update workflow
280-
if (this.routeParams['key'] && this.routeParams['key'] === event.project_key
281-
&& this.routeParams['workflowName'] === event.workflow_name) {
282-
if (event.username !== this._authStore.getUser().username) {
283-
this._wfStore.externalModification(wfKey);
284-
this._toast.info('', this._translate.instant('warning_workflow', { username: event.username }));
285-
return
279+
// update workflow
280+
if (this.routeParams['key'] && this.routeParams['key'] === event.project_key
281+
&& this.routeParams['workflowName'] === event.workflow_name) {
282+
if (event.username !== this._authStore.getUser().username) {
283+
this.store.dispatch(new ExternalChangeWorkflow({
284+
projectKey: event.project_key,
285+
workflowName: event.workflow_name
286+
}));
287+
this._toast.info('', this._translate.instant('warning_workflow', { username: event.username }));
288+
return;
289+
}
290+
} else {
291+
this.store.dispatch(new DeleteFromCacheWorkflow({
292+
projectKey: event.project_key,
293+
workflowName: event.workflow_name
294+
}));
295+
return;
286296
}
287-
} else {
288-
this._wfStore.removeFromStore(wfKey);
289-
return;
290-
}
291297

292-
this._wfStore.resync(event.project_key, event.workflow_name);
293-
});
298+
this.store.dispatch(new ResyncWorkflow({
299+
projectKey: event.project_key,
300+
workflowName: event.workflow_name
301+
}));
302+
});
294303
}
295304

296305
updateWorkflowRunCache(event: Event): void {

ui/src/app/model/workflow.model.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { notificationTypes, UserNotificationSettings } from 'app/model/notification.model';
22
import { Application } from './application.model';
3+
import { AuditWorkflow } from './audit.model';
34
import { Environment } from './environment.model';
45
import { GroupPermission } from './group.model';
56
import { ProjectIntegration } from './integration.model';
@@ -48,6 +49,10 @@ export class Workflow {
4849
workflow_data: WorkflowData;
4950
as_code_events: Array<AsCodeEvents>;
5051

52+
preview: Workflow;
53+
asCode: string;
54+
audits: AuditWorkflow[];
55+
5156
// UI params
5257
externalChange: boolean;
5358
forceRefresh: boolean;

0 commit comments

Comments
 (0)
0