@lowcodeunit/applications-flow-common 1.34.1-lets-get-social-ish → 1.34.4-social-ui-bug-fixes

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/esm2020/lcu.api.mjs +3 -3
  2. package/esm2020/lib/applications-flow.module.mjs +11 -22
  3. package/esm2020/lib/controls/devops-source-control-form/devops-source-control-form.component.mjs +3 -3
  4. package/esm2020/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.mjs +3 -3
  5. package/esm2020/lib/elements/feed-card-sm/feed-card-sm.component.mjs +2 -2
  6. package/esm2020/lib/elements/gh-control/gh-control.component.mjs +107 -0
  7. package/esm2020/lib/elements/main-feed-card/main-feed-card.component.mjs +2 -2
  8. package/esm2020/lib/elements/projects/controls/git-auth/git-auth.component.mjs +2 -3
  9. package/esm2020/lib/elements/projects/controls/tabs/domains/domains.component.mjs +2 -2
  10. package/esm2020/lib/elements/skeleton-feed-card/skeleton-feed-card.component.mjs +2 -2
  11. package/esm2020/lib/models/user-feed.model.mjs +1 -3
  12. package/esm2020/lib/services/applications-flow.service.mjs +1 -8
  13. package/esm2020/lib/services/eac.service.mjs +1 -4
  14. package/esm2020/lib/services/project.service.mjs +1 -24
  15. package/fesm2015/lowcodeunit-applications-flow-common.mjs +1374 -1733
  16. package/fesm2015/lowcodeunit-applications-flow-common.mjs.map +1 -1
  17. package/fesm2020/lowcodeunit-applications-flow-common.mjs +1364 -1704
  18. package/fesm2020/lowcodeunit-applications-flow-common.mjs.map +1 -1
  19. package/lcu.api.d.ts +2 -2
  20. package/lib/applications-flow.module.d.ts +10 -12
  21. package/lib/elements/{feed-header/feed-header.component.d.ts → gh-control/gh-control.component.d.ts} +4 -7
  22. package/lib/models/user-feed.model.d.ts +0 -16
  23. package/lib/services/applications-flow.service.d.ts +0 -2
  24. package/lib/services/eac.service.d.ts +1 -2
  25. package/lib/services/project.service.d.ts +1 -2
  26. package/package.json +1 -1
  27. package/esm2020/lib/dialogs/feed-header-dialog/feed-header-dialog.component.mjs +0 -287
  28. package/esm2020/lib/elements/feed-header/feed-header.component.mjs +0 -128
  29. package/lib/dialogs/feed-header-dialog/feed-header-dialog.component.d.ts +0 -71
@@ -42,13 +42,11 @@ import * as i4$3 from 'skeleton-elements/angular';
42
42
  import { SkeletonElementsModule } from 'skeleton-elements/angular';
43
43
  import * as i2$3 from '@angular/material/dialog';
44
44
  import { MAT_DIALOG_DATA } from '@angular/material/dialog';
45
- import moment from 'moment';
45
+ import { EaCApplicationAsCode } from '@semanticjs/common';
46
46
  import * as i3$1 from '@angular/material/snack-bar';
47
+ import * as i7$1 from '@angular/material/menu';
48
+ import moment from 'moment';
47
49
  import * as i3$2 from '@angular/platform-browser';
48
- import { EaCApplicationAsCode } from '@semanticjs/common';
49
- import * as i4$4 from '@angular/material/menu';
50
- import * as i10 from '@kolkov/angular-editor';
51
- import { AngularEditorModule } from '@kolkov/angular-editor';
52
50
 
53
51
  /**
54
52
  * Model for form values
@@ -310,13 +308,6 @@ class ApplicationsFlowService {
310
308
  headers: this.loadHeaders(),
311
309
  });
312
310
  }
313
- SubmitFeedEntry(entry) {
314
- return this.http.post(`${this.apiRoot}/api/lowcodeunit/userfeed/entry`, {
315
- FeedEntry: entry,
316
- }, {
317
- headers: this.loadHeaders(),
318
- });
319
- }
320
311
  UnpackLowCodeUnit(req) {
321
312
  return this.http.post(`${this.apiRoot}/api/lowcodeunit/manage/projects/unpack`, req, {
322
313
  headers: this.loadHeaders(),
@@ -684,29 +675,6 @@ class ProjectService {
684
675
  }
685
676
  });
686
677
  }
687
- async SubmitFeedEntry(state, entry) {
688
- return new Promise((resolve, reject) => {
689
- state.Loading = true;
690
- this.appsFlowSvc.SubmitFeedEntry(entry).subscribe(async (response) => {
691
- if (response.Status.Code === 0) {
692
- var results = await Promise.all([
693
- this.LoadEnterpriseAsCode(state),
694
- this.LoadUserFeed(1, 25, state),
695
- ]);
696
- resolve(response.Status);
697
- }
698
- else {
699
- state.Loading = false;
700
- reject(response.Status);
701
- console.log(response);
702
- }
703
- }, (err) => {
704
- state.Loading = false;
705
- reject(err);
706
- console.log(err);
707
- });
708
- });
709
- }
710
678
  ToggleCreateProject() {
711
679
  this.SetCreatingProject(!this.CreatingProject);
712
680
  }
@@ -967,9 +935,6 @@ class EaCService {
967
935
  async SetEditProjectSettings(projectLookup) {
968
936
  await this.projectService.SetEditProjectSettings(this.State, projectLookup);
969
937
  }
970
- async SubmitFeedEntry(entry) {
971
- return await this.projectService.SubmitFeedEntry(this.State, entry);
972
- }
973
938
  async UnpackLowCodeUnit(req) {
974
939
  if (confirm(`Are you sure you want to unpack application '${req.ApplicationName}' with version '${req.Version}'?`)) {
975
940
  await this.projectService.UnpackLowCodeUnit(this.State, req);
@@ -1241,7 +1206,7 @@ class DomainsComponent {
1241
1206
  config() {
1242
1207
  this.Config = new CardFormConfigModel({
1243
1208
  Icon: 'head',
1244
- Title: '',
1209
+ Title: 'Domains',
1245
1210
  Subtitle: 'In order to use a custom domain, create a CNAME dns record pointing desired subdomain to ' + this.HostDNSInstance + '.',
1246
1211
  FormActions: {
1247
1212
  Message: 'Changes will be applied to your next deployment',
@@ -3574,8 +3539,7 @@ class GitAuthComponent {
3574
3539
  ConnectGitHubProvider() {
3575
3540
  const reidrectUri = location.pathname + location.search;
3576
3541
  // window.location.href = `/.oauth/GitHubOAuth?redirectUri=${reidrectUri}`;
3577
- // added below line for the new social ui redirectUri wasn't working
3578
- window.location.href = '/.oauth/GitHubOAuth?redirectUri=%2Fdashboard';
3542
+ window.location.href = `/.oauth/GitHubOAuth?redirectUri=%2Fdashboard`;
3579
3543
  this.ConnectClicked = true;
3580
3544
  }
3581
3545
  }
@@ -3864,1090 +3828,1448 @@ class FeedCardSmComponent {
3864
3828
  }
3865
3829
  }
3866
3830
  FeedCardSmComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedCardSmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3867
- FeedCardSmComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: FeedCardSmComponent, selector: "lcu-feed-card-sm", inputs: { FeedItem: ["feed-item", "FeedItem"] }, ngImport: i0, template: "<mat-card class=\"social-card\">\n <div class=\"feed-card-container\" fxLayout=\"row\">\n <mat-icon *ngIf=\"Icon\" [style.color]=\"IconColor\">{{ Icon }}</mat-icon>\n <div class=\"feed-card-main-content\">\n <mat-card-title *ngIf=\"FeedItem.Title\">\n {{ FeedItem.Title }}\n </mat-card-title>\n\n <div *ngIf=\"FeedItem.Subtitle\">{{ FeedItem.Subtitle }}</div>\n\n <ng-content select=\"[more-details]\"></ng-content>\n </div>\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"end\">\n <ng-content select=\"[actions]\"></ng-content>\n </mat-card-actions>\n</mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:24px;width:24px;font-size:24px;cursor:pointer}\n"], components: [{ type: i1$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i1$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }] });
3831
+ FeedCardSmComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: FeedCardSmComponent, selector: "lcu-feed-card-sm", inputs: { FeedItem: ["feed-item", "FeedItem"] }, ngImport: i0, template: "<mat-card class=\"social-card\">\n <div class=\"feed-card-container\" fxLayout=\"row\">\n <mat-icon *ngIf=\"Icon\" [style.color]=\"IconColor\">{{ Icon }}</mat-icon>\n <div class=\"feed-card-main-content\">\n <mat-card-title *ngIf=\"FeedItem.Title\">\n {{ FeedItem.Title }}\n </mat-card-title>\n\n <div *ngIf=\"FeedItem.Subtitle\">{{ FeedItem.Subtitle }}</div>\n\n <ng-content select=\"[more-details]\"></ng-content>\n </div>\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"end\">\n <ng-content select=\"[actions]\"></ng-content>\n </mat-card-actions>\n</mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:25px;width:25px;font-size:25px;cursor:pointer}\n"], components: [{ type: i1$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i1$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }] });
3868
3832
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedCardSmComponent, decorators: [{
3869
3833
  type: Component,
3870
- args: [{ selector: 'lcu-feed-card-sm', template: "<mat-card class=\"social-card\">\n <div class=\"feed-card-container\" fxLayout=\"row\">\n <mat-icon *ngIf=\"Icon\" [style.color]=\"IconColor\">{{ Icon }}</mat-icon>\n <div class=\"feed-card-main-content\">\n <mat-card-title *ngIf=\"FeedItem.Title\">\n {{ FeedItem.Title }}\n </mat-card-title>\n\n <div *ngIf=\"FeedItem.Subtitle\">{{ FeedItem.Subtitle }}</div>\n\n <ng-content select=\"[more-details]\"></ng-content>\n </div>\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"end\">\n <ng-content select=\"[actions]\"></ng-content>\n </mat-card-actions>\n</mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:24px;width:24px;font-size:24px;cursor:pointer}\n"] }]
3834
+ args: [{ selector: 'lcu-feed-card-sm', template: "<mat-card class=\"social-card\">\n <div class=\"feed-card-container\" fxLayout=\"row\">\n <mat-icon *ngIf=\"Icon\" [style.color]=\"IconColor\">{{ Icon }}</mat-icon>\n <div class=\"feed-card-main-content\">\n <mat-card-title *ngIf=\"FeedItem.Title\">\n {{ FeedItem.Title }}\n </mat-card-title>\n\n <div *ngIf=\"FeedItem.Subtitle\">{{ FeedItem.Subtitle }}</div>\n\n <ng-content select=\"[more-details]\"></ng-content>\n </div>\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"end\">\n <ng-content select=\"[actions]\"></ng-content>\n </mat-card-actions>\n</mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:25px;width:25px;font-size:25px;cursor:pointer}\n"] }]
3871
3835
  }], ctorParameters: function () { return []; }, propDecorators: { FeedItem: [{
3872
3836
  type: Input,
3873
3837
  args: ['feed-item']
3874
3838
  }] } });
3875
3839
 
3876
- class DevopsSourceControlFormComponent {
3877
- // Constructors
3878
- constructor(appsFlowSvc, eacSvc, formBuilder) {
3879
- this.appsFlowSvc = appsFlowSvc;
3840
+ class EditApplicationFormComponent {
3841
+ constructor(formBldr, eacSvc) {
3842
+ this.formBldr = formBldr;
3880
3843
  this.eacSvc = eacSvc;
3881
- this.formBuilder = formBuilder;
3882
- this.SeparatorKeysCodes = [ENTER, COMMA];
3883
- this.SaveStatusEvent = new EventEmitter();
3884
- this.BuildPath = null;
3885
- this.HostingDetails = new ProjectHostingDetails();
3886
- this.SelectedBranches = [];
3887
- this.SourceControlRoot = '';
3888
- this.SkeletonEffect = "wave";
3889
- this.UseBranches = true;
3890
- this.UseBuildPath = false;
3891
- }
3892
- // Properties
3893
- get ArtifactLookups() {
3894
- return this.DevOpsAction?.ArtifactLookups;
3844
+ this.SaveFormEvent = new EventEmitter;
3845
+ this.HasSaveButton = true;
3895
3846
  }
3896
- get ArtifactLookup() {
3897
- const artLookup = this.DevOpsAction?.ArtifactLookups
3898
- ? this.DevOpsAction?.ArtifactLookups[0]
3899
- : null;
3900
- return artLookup;
3847
+ get DescriptionFormControl() {
3848
+ return this.ApplicationFormGroup?.controls.description;
3901
3849
  }
3902
- get Artifact() {
3903
- return this.Environment?.Artifacts && this.ArtifactLookup
3904
- ? this.Environment?.Artifacts[this.ArtifactLookup] || {}
3905
- : {};
3850
+ get NameFormControl() {
3851
+ return this.ApplicationFormGroup?.controls.name;
3906
3852
  }
3907
- get BranchesFormControl() {
3908
- return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'branches');
3853
+ get RouteFormControl() {
3854
+ return this.ApplicationFormGroup?.controls.route;
3909
3855
  }
3910
- get BuildPathFormControl() {
3911
- return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'buildPath');
3856
+ get State() {
3857
+ return this.eacSvc.State;
3912
3858
  }
3913
- get DevOpsActionLookups() {
3914
- // console.log(this.DevOpsActions);
3915
- return Object.keys(this.DevOpsActions || {});
3859
+ ngOnInit() {
3860
+ this.setupApplicationForm();
3916
3861
  }
3917
- get DevOpsAction() {
3918
- return this.Environment.DevOpsActions && this.DevOpsActionLookup
3919
- ? this.Environment.DevOpsActions[this.DevOpsActionLookup] || {}
3920
- : {};
3862
+ SubmitApplicationControl() {
3863
+ console.log("application form: ", this.ApplicationFormGroup.value);
3864
+ this.SaveApplication();
3921
3865
  }
3922
- get DevOpsActionLookup() {
3923
- if (!!this.DevOpsActionLookupFormControl?.value) {
3924
- return this.DevOpsActionLookupFormControl.value;
3866
+ SaveApplication() {
3867
+ const app = this.EditingApplication;
3868
+ // console.log("APP=", app);
3869
+ app.Application = {
3870
+ Name: this.NameFormControl.value,
3871
+ Description: this.DescriptionFormControl.value,
3872
+ PriorityShift: this.EditingApplication?.Application?.PriorityShift || 0,
3873
+ };
3874
+ app.LookupConfig.PathRegex = `${this.RouteFormControl.value}.*`;
3875
+ switch (app.Processor.Type) {
3876
+ case 'DFS':
3877
+ app.Processor.BaseHref = `${this.RouteFormControl.value}/`.replace('//', '/');
3878
+ break;
3925
3879
  }
3926
- if (!!this.EditingSourceControl?.DevOpsActionTriggerLookups) {
3927
- return this.EditingSourceControl?.DevOpsActionTriggerLookups[0];
3880
+ if (!app.LookupConfig.PathRegex.startsWith('/')) {
3881
+ app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
3928
3882
  }
3929
- else {
3930
- return null;
3883
+ const saveAppReq = {
3884
+ ProjectLookup: this.ProjectLookup,
3885
+ Application: app,
3886
+ ApplicationLookup: this.ApplicationLookup,
3887
+ };
3888
+ console.log("processor details being submitted: ", app.Processor);
3889
+ this.eacSvc.SaveApplicationAsCode(saveAppReq).then(res => {
3890
+ this.SaveFormEvent.emit(res);
3891
+ });
3892
+ }
3893
+ //HELPERS
3894
+ setupApplicationForm() {
3895
+ if (this.EditingApplication != null) {
3896
+ this.ApplicationFormGroup = this.formBldr.group({
3897
+ name: [this.EditingApplication.Application?.Name, Validators.required],
3898
+ description: [
3899
+ this.EditingApplication.Application?.Description,
3900
+ Validators.required,
3901
+ ],
3902
+ route: [this.CurrentRoute ? this.CurrentRoute :
3903
+ this.EditingApplication.LookupConfig?.PathRegex.replace('.*', '') ||
3904
+ '/',
3905
+ Validators.required,
3906
+ ],
3907
+ // priority: [
3908
+ // this.EditingApplication.Application?.Priority || 10000,
3909
+ // Validators.required,
3910
+ // ],
3911
+ });
3931
3912
  }
3932
3913
  }
3933
- get DevOpsActionLookupFormControl() {
3934
- return this.DevOpsSourceControlFormGroup.get('devOpsActionLookup');
3914
+ }
3915
+ EditApplicationFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationFormComponent, deps: [{ token: i1$2.FormBuilder }, { token: EaCService }], target: i0.ɵɵFactoryTarget.Component });
3916
+ EditApplicationFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: EditApplicationFormComponent, selector: "lcu-edit-application-form", inputs: { ApplicationLookup: ["application-lookup", "ApplicationLookup"], CurrentRoute: ["current-route", "CurrentRoute"], EditingApplication: ["editing-application", "EditingApplication"], HasSaveButton: ["has-save-button", "HasSaveButton"], ProjectLookup: ["project-lookup", "ProjectLookup"] }, outputs: { SaveFormEvent: "save-form-event" }, ngImport: i0, template: "<form class=\"form-card\" [formGroup]=\"ApplicationFormGroup\" (ngSubmit)=\"SubmitApplicationControl()\" >\n <!-- <mat-card class=\"spread flow-card\"> -->\n <!-- <mat-card-header>\n <mat-card-title>\n <ng-container *ngIf=\"EditingApplication?.Application\">\n Edit Application:\n {{ EditingApplication.Application?.Name }}\n </ng-container>\n\n <ng-container *ngIf=\"!EditingApplication?.Application\">\n Create an Application\n </ng-container>\n </mat-card-title>\n </mat-card-header> -->\n\n <!-- <mat-card-content> -->\n <ng-container *ngIf=\"State?.Loading\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Name\"\n formControlName=\"name\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <textarea\n matInput\n placeholder=\"Description\"\n formControlName=\"description\"\n rows=\"3\"\n required\n ></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Route\"\n formControlName=\"route\"\n required\n />\n </mat-form-field>\n </ng-container>\n\n <!-- </mat-card-content> -->\n <!-- <mat-card-actions fxLayoutAlign=\"center center\">\n\n <button \n *ngIf=\"HasSaveButton && !State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!ApplicationFormGroup.valid || !ApplicationFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save\n </button>\n <lcu-loader *ngIf=\"HasSaveButton\" [loading]=\"State?.Loading\"></lcu-loader>\n \n </mat-card-actions> -->\n <!-- </mat-card> -->\n</form>\n", styles: [".s-block{margin:10px 0;width:100%;height:40px}\n"], components: [{ type: i4$3.SkeletonBlockComponent, selector: "skeleton-block", inputs: ["width", "height", "effect", "borderRadius"] }, { type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }], directives: [{ type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }] });
3917
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationFormComponent, decorators: [{
3918
+ type: Component,
3919
+ args: [{ selector: 'lcu-edit-application-form', template: "<form class=\"form-card\" [formGroup]=\"ApplicationFormGroup\" (ngSubmit)=\"SubmitApplicationControl()\" >\n <!-- <mat-card class=\"spread flow-card\"> -->\n <!-- <mat-card-header>\n <mat-card-title>\n <ng-container *ngIf=\"EditingApplication?.Application\">\n Edit Application:\n {{ EditingApplication.Application?.Name }}\n </ng-container>\n\n <ng-container *ngIf=\"!EditingApplication?.Application\">\n Create an Application\n </ng-container>\n </mat-card-title>\n </mat-card-header> -->\n\n <!-- <mat-card-content> -->\n <ng-container *ngIf=\"State?.Loading\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Name\"\n formControlName=\"name\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <textarea\n matInput\n placeholder=\"Description\"\n formControlName=\"description\"\n rows=\"3\"\n required\n ></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Route\"\n formControlName=\"route\"\n required\n />\n </mat-form-field>\n </ng-container>\n\n <!-- </mat-card-content> -->\n <!-- <mat-card-actions fxLayoutAlign=\"center center\">\n\n <button \n *ngIf=\"HasSaveButton && !State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!ApplicationFormGroup.valid || !ApplicationFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save\n </button>\n <lcu-loader *ngIf=\"HasSaveButton\" [loading]=\"State?.Loading\"></lcu-loader>\n \n </mat-card-actions> -->\n <!-- </mat-card> -->\n</form>\n", styles: [".s-block{margin:10px 0;width:100%;height:40px}\n"] }]
3920
+ }], ctorParameters: function () { return [{ type: i1$2.FormBuilder }, { type: EaCService }]; }, propDecorators: { ApplicationLookup: [{
3921
+ type: Input,
3922
+ args: ['application-lookup']
3923
+ }], CurrentRoute: [{
3924
+ type: Input,
3925
+ args: ['current-route']
3926
+ }], EditingApplication: [{
3927
+ type: Input,
3928
+ args: ['editing-application']
3929
+ }], HasSaveButton: [{
3930
+ type: Input,
3931
+ args: ['has-save-button']
3932
+ }], ProjectLookup: [{
3933
+ type: Input,
3934
+ args: ['project-lookup']
3935
+ }], SaveFormEvent: [{
3936
+ type: Output,
3937
+ args: ['save-form-event']
3938
+ }] } });
3939
+
3940
+ class ProcessorDetailsFormComponent {
3941
+ constructor(appsFlowSvc, formBldr, eacSvc) {
3942
+ this.appsFlowSvc = appsFlowSvc;
3943
+ this.formBldr = formBldr;
3944
+ this.eacSvc = eacSvc;
3945
+ this.redirectTooltip = '';
3946
+ this.HasSaveButton = true;
3947
+ this.SaveFormEvent = new EventEmitter();
3935
3948
  }
3936
- get DevOpsActions() {
3937
- return this.Environment.DevOpsActions || {};
3949
+ get APIRootFormControl() {
3950
+ return this.ProcessorDetailsFormGroup?.controls.apiRoot;
3938
3951
  }
3939
- get EditingSourceControl() {
3940
- let sc = this.Environment?.Sources
3941
- ? this.Environment?.Sources[this.EditingSourceControlLookup]
3942
- : null;
3943
- if (sc == null && this.EditingSourceControlLookup) {
3944
- sc = {};
3945
- }
3946
- return sc;
3952
+ get Environment() {
3953
+ return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
3947
3954
  }
3948
- get MainBranchFormControl() {
3949
- return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'mainBranch');
3955
+ get BuildFormControl() {
3956
+ return this.ProcessorDetailsFormGroup?.controls.build;
3950
3957
  }
3951
- get OrganizationFormControl() {
3952
- return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'organization');
3958
+ get BuildPathFormControl() {
3959
+ return this.ProcessorDetailsFormGroup?.controls.buildPath;
3953
3960
  }
3954
- get RepositoryFormControl() {
3955
- return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'repository');
3961
+ get ClientIDFormControl() {
3962
+ return this.ProcessorDetailsFormGroup?.controls.clientId;
3956
3963
  }
3957
- get State() {
3958
- return this.eacSvc.State;
3964
+ get ClientSecretFormControl() {
3965
+ return this.ProcessorDetailsFormGroup?.controls.clientSecret;
3959
3966
  }
3960
- // Life Cycle
3961
- ngAfterViewInit() { }
3962
- ngOnDestroy() {
3963
- this.destroyFormControls();
3967
+ get DefaultFileFormControl() {
3968
+ return this.ProcessorDetailsFormGroup?.controls.defaultFile;
3964
3969
  }
3965
- ngOnInit() {
3966
- console.log("source control lookup", this.EditingSourceControlLookup);
3967
- if (this.EditingSourceControlLookup === null) {
3968
- this.CreateNewSourceControl();
3969
- }
3970
- console.log("source control", this.EditingSourceControl);
3971
- if (this.EditingSourceControl != null) {
3972
- this.DevOpsSourceControlFormGroup = this.formBuilder.group({});
3973
- this.setupFormControls();
3974
- }
3975
- this.RefreshOrganizations();
3970
+ get DefaultSourceControl() {
3971
+ return {
3972
+ Organization: this.EditingApplication?.LowCodeUnit?.Organization,
3973
+ Repository: this.EditingApplication?.LowCodeUnit?.Repository,
3974
+ };
3976
3975
  }
3977
- // API Methods
3978
- AddBranchOption(event) {
3979
- this.addBranchOption(event.value);
3980
- event.input.value = '';
3976
+ get InboundPathFormControl() {
3977
+ return this.ProcessorDetailsFormGroup?.controls.inboundPath;
3981
3978
  }
3982
- BranchOptionSelected(event) {
3983
- this.addBranchOption(event.option.value);
3979
+ get IncludeRequestFormControl() {
3980
+ return this.ProcessorDetailsFormGroup?.controls.includeRequest;
3984
3981
  }
3985
- BranchesChanged(branches) {
3986
- this.loadProjectHostingDetails();
3982
+ get MethodsFormControl() {
3983
+ return this.ProcessorDetailsFormGroup?.controls.methods;
3987
3984
  }
3988
- BuildPathChanged(event) {
3989
- //do something??
3985
+ get PackageFormControl() {
3986
+ return this.ProcessorDetailsFormGroup?.controls.package;
3990
3987
  }
3991
- CreateNewSourceControl() {
3992
- this.SetEditingSourceControl(Guid.CreateRaw());
3988
+ get PermanentFormControl() {
3989
+ return this.ProcessorDetailsFormGroup?.controls.permanent;
3993
3990
  }
3994
- CreateRepository() {
3995
- this.CreatingRepository = true;
3996
- this.RepositoryFormControl.reset();
3991
+ get PreserveMethodFormControl() {
3992
+ return this.ProcessorDetailsFormGroup?.controls.preserveMethod;
3997
3993
  }
3998
- CancelCreateRepository() {
3999
- this.CreatingRepository = false;
3994
+ get RedirectFormControl() {
3995
+ return this.ProcessorDetailsFormGroup?.controls.redirect;
4000
3996
  }
4001
- DevOpsActionLookupChanged(event) {
4002
- this.configureDevOpsAction();
4003
- }
4004
- MainBranchChanged(event) {
4005
- this.emitBranchesChanged();
4006
- }
4007
- OrganizationChanged(event) {
4008
- const org = this.OrganizationFormControl;
4009
- this.RepositoryFormControl.reset();
4010
- if (this.UseBranches) {
4011
- this.BranchesFormControl.reset();
4012
- this.SelectedBranches = [];
4013
- }
4014
- this.listRepositories();
4015
- }
4016
- RefreshOrganizations() {
4017
- // this.Loading = true;
4018
- this.listOrganizations();
4019
- this.OrganizationFormControl?.reset();
4020
- this.RepositoryFormControl?.reset();
4021
- if (this.UseBranches) {
4022
- this.BranchesFormControl?.reset();
4023
- }
3997
+ get ScopesFormControl() {
3998
+ return this.ProcessorDetailsFormGroup?.controls.scopes;
4024
3999
  }
4025
- RemoveBranchOption(option) {
4026
- const index = this.SelectedBranches.indexOf(option);
4027
- if (index >= 0) {
4028
- this.SelectedBranches.splice(index, 1);
4029
- }
4030
- this.emitBranchesChanged();
4000
+ get SecurityFormControl() {
4001
+ return this.ProcessorDetailsFormGroup?.controls.security;
4031
4002
  }
4032
- RepositoryChanged(event) {
4033
- const repo = this.RepositoryFormControl;
4034
- if (this.UseBranches) {
4035
- this.BranchesFormControl.reset();
4036
- this.SelectedBranches = [];
4037
- this.listBranches();
4038
- }
4039
- if (!this.UseBranches) {
4040
- this.listBuildPaths();
4041
- }
4003
+ get State() {
4004
+ return this.eacSvc.State;
4042
4005
  }
4043
- SaveRepository() {
4044
- this.Loading = true;
4045
- const org = this.OrganizationFormControl.value;
4046
- const repoName = this.RepositoryFormControl.value;
4047
- this.appsFlowSvc
4048
- .CreateRepository(org, repoName)
4049
- .subscribe((response) => {
4050
- if (response.Status.Code === 0) {
4051
- this.listRepositories(repoName);
4052
- this.CreatingRepository = false;
4053
- }
4054
- else {
4055
- // TODO: Need to surface an error to the user...
4056
- this.Loading = false;
4057
- }
4058
- });
4006
+ get SourceControls() {
4007
+ return this.Environment?.Sources || {};
4059
4008
  }
4060
- SetEditingSourceControl(scLookup) {
4061
- this.EditingSourceControlLookup = scLookup;
4009
+ get SourceControlFormControl() {
4010
+ return this.ProcessorDetailsFormGroup?.controls.sourceControl;
4062
4011
  }
4063
- SubmitSourceControl() {
4064
- console.log('source control submitted: ', this.DevOpsSourceControlFormGroup.value);
4065
- this.SaveSourceControl();
4012
+ get SPARootFormControl() {
4013
+ return this.ProcessorDetailsFormGroup?.controls.spaRoot;
4066
4014
  }
4067
- SaveSourceControl() {
4068
- const saveEnvReq = {
4069
- Environment: {
4070
- ...this.Environment,
4071
- Sources: this.Environment.Sources || {},
4072
- },
4073
- EnvironmentLookup: this.EnvironmentLookup,
4074
- EnterpriseDataTokens: {},
4075
- };
4076
- let source = {
4077
- ...this.EditingSourceControl,
4078
- Branches: this.SelectedBranches,
4079
- MainBranch: this.MainBranchFormControl.value,
4080
- };
4081
- source = {
4082
- ...source,
4083
- Type: 'GitHub',
4084
- Name: `@${this.OrganizationFormControl.value}/${this.RepositoryFormControl.value}`,
4085
- DevOpsActionTriggerLookups: [this.DevOpsActionLookup],
4086
- Organization: this.OrganizationFormControl.value,
4087
- Repository: this.RepositoryFormControl.value,
4088
- };
4089
- const scLookup = `github://${source.Organization}/${source.Repository}`;
4090
- saveEnvReq.Environment.Sources[scLookup] = source;
4091
- console.log('save SC: ', saveEnvReq);
4092
- let resp = this.eacSvc.SaveEnvironmentAsCode(saveEnvReq);
4093
- resp.then((res) => {
4094
- this.SaveStatusEvent.emit(res);
4095
- });
4015
+ get TokenLookupFormControl() {
4016
+ return this.ProcessorDetailsFormGroup?.controls.tokenLookup;
4096
4017
  }
4097
- // Helpers
4098
- addBranchOption(value) {
4099
- value = (value || '').trim();
4100
- if (value && this.SelectedBranches.indexOf(value) < 0) {
4101
- this.SelectedBranches.push(value);
4018
+ get ValidFormControls() {
4019
+ let vfc = new Array();
4020
+ for (const field in this.ProcessorDetailsFormGroup.controls) {
4021
+ const control = this.ProcessorDetailsFormGroup.get(field);
4022
+ if (control.valid) {
4023
+ vfc.push(control);
4024
+ }
4102
4025
  }
4103
- this.BranchesInput.nativeElement.blur();
4104
- this.emitBranchesChanged();
4026
+ // console.log("VFC=", vfc)
4027
+ return vfc;
4105
4028
  }
4106
- configureDevOpsAction() {
4107
- setTimeout(() => {
4108
- this.DevOpsActionLookupFormControl.setValue(this.DevOpsActionLookup);
4109
- }, 0);
4029
+ get VersionFormControl() {
4030
+ return this.ProcessorDetailsFormGroup?.controls.version;
4110
4031
  }
4111
- destroyFormControls() {
4112
- this.DevOpsSourceControlFormGroup.removeControl([this.SourceControlRoot, 'mainBranch'].join(''));
4113
- this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'branches'].join(''));
4114
- this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'buildPath'].join(''));
4115
- this.SelectedBranches = [];
4116
- this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'organization'].join(''));
4117
- this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'repository'].join(''));
4032
+ get ZipFileFormControl() {
4033
+ return this.ProcessorDetailsFormGroup?.controls.zipFile;
4118
4034
  }
4119
- emitBranchesChanged() {
4120
- if (this.SelectedBranches?.length > 0 &&
4121
- (!this.MainBranchFormControl.value ||
4122
- this.SelectedBranches.indexOf(this.MainBranchFormControl.value) < 0)) {
4123
- this.MainBranchFormControl.setValue(this.SelectedBranches.find((branch) => branch === 'main' || branch === 'master') || this.SelectedBranches[0]);
4035
+ ngOnInit() {
4036
+ if (!this.EditingApplication) {
4037
+ this.CreateNewApplication();
4124
4038
  }
4125
- else if (this.SelectedBranches?.length <= 0) {
4126
- this.MainBranchFormControl.reset();
4039
+ else {
4040
+ this.setupProcessorDetailsForm();
4127
4041
  }
4128
- this.BranchesFormControl.setValue(this.SelectedBranches.join(','));
4129
- this.BranchesChanged(this.SelectedBranches || []);
4130
4042
  }
4131
- listBranches() {
4132
- if (this.UseBranches) {
4133
- this.Loading = true;
4134
- this.appsFlowSvc
4135
- .ListBranches(this.OrganizationFormControl.value, this.RepositoryFormControl.value)
4136
- .subscribe((response) => {
4137
- this.BranchOptions = response.Model;
4138
- this.Loading = false;
4139
- if (this.EditingSourceControl?.Branches?.length > 0) {
4140
- this.SelectedBranches = this.EditingSourceControl.Branches;
4141
- }
4142
- else if (this.BranchOptions?.length === 1) {
4143
- this.BranchesFormControl.setValue(this.BranchOptions[0].Name);
4144
- this.SelectedBranches = [this.BranchOptions[0].Name];
4145
- }
4146
- this.emitBranchesChanged();
4147
- this.listBuildPaths();
4148
- });
4149
- }
4043
+ CreateNewApplication() {
4044
+ this.SetEditingApplication(Guid.CreateRaw());
4150
4045
  }
4151
- listBuildPaths() {
4152
- if (this.UseBuildPath) {
4153
- this.Loading = true;
4154
- this.appsFlowSvc
4155
- .ListBuildPaths(this.OrganizationFormControl.value, this.RepositoryFormControl.value)
4156
- .subscribe((response) => {
4157
- this.BuildPathOptions = response.Model;
4158
- this.Loading = false;
4159
- if (this.BuildPathOptions?.length === 1) {
4160
- this.BuildPathFormControl.setValue(this.BuildPathOptions[0]);
4161
- }
4162
- });
4046
+ DetermineTooltipText() {
4047
+ let permanentValue = this.PermanentFormControl.value;
4048
+ let preserveValue = this.PreserveMethodFormControl.value;
4049
+ if (permanentValue === true && preserveValue === false) {
4050
+ this.redirectTooltip = '301 – Permanent and Not Preserve';
4163
4051
  }
4164
- }
4165
- listOrganizations() {
4166
- this.Loading = true;
4167
- this.appsFlowSvc
4168
- .ListOrganizations()
4169
- .subscribe((response) => {
4170
- this.OrganizationOptions = response.Model;
4171
- console.log("Organization Options: ", this.OrganizationOptions);
4172
- this.Loading = false;
4173
- if (this.EditingSourceControl?.Organization) {
4174
- setTimeout(() => {
4175
- this.OrganizationFormControl.setValue(this.EditingSourceControl.Organization);
4176
- this.listRepositories(this.EditingSourceControl?.Repository);
4177
- }, 0);
4178
- }
4179
- });
4180
- }
4181
- listRepositories(activeRepo = null) {
4182
- this.Loading = true;
4183
- this.appsFlowSvc
4184
- .ListRepositories(this.OrganizationFormControl.value)
4185
- .subscribe((response) => {
4186
- this.RepositoryOptions = response.Model;
4187
- this.Loading = false;
4188
- if (activeRepo) {
4189
- setTimeout(() => {
4190
- this.RepositoryFormControl.setValue(activeRepo);
4191
- this.listBranches();
4192
- if (!this.UseBranches) {
4193
- this.listBuildPaths();
4194
- }
4195
- }, 0);
4196
- }
4197
- else if (this.RepositoryOptions?.length <= 0) {
4198
- this.CreatingRepository = true;
4199
- }
4200
- });
4201
- }
4202
- loadProjectHostingDetails() {
4203
- if (this.SelectedBranches?.length > 0) {
4204
- this.HostingDetails.Loading = true;
4205
- this.appsFlowSvc
4206
- .LoadProjectHostingDetails()
4207
- .subscribe((response) => {
4208
- this.HostingDetails = response.Model;
4209
- this.HostingDetails.Loading = false;
4210
- this.configureDevOpsAction();
4211
- }, (err) => {
4212
- this.HostingDetails.Loading = false;
4213
- });
4052
+ else if (permanentValue === false && preserveValue === false) {
4053
+ this.redirectTooltip = '302 – Not Permanent and Not Preserve';
4214
4054
  }
4215
- }
4216
- setupFormControls() {
4217
- this.destroyFormControls();
4218
- console.log("Source Control: ", this.EditingSourceControl);
4219
- this.DevOpsSourceControlFormGroup.addControl('devOpsActionLookup', new FormControl(this.DevOpsActionLookup || '', []));
4220
- this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'organization'].join(''), new FormControl(this.EditingSourceControl.Organization ?? '', Validators.required));
4221
- this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'repository'].join(''), new FormControl(this.EditingSourceControl.Repository ?? '', Validators.required));
4222
- if (this.UseBranches) {
4223
- this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'branches'].join(''), new FormControl(this.EditingSourceControl?.Branches ?? '', Validators.required));
4224
- this.SelectedBranches = this.EditingSourceControl?.Branches;
4225
- this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'mainBranch'].join(''), new FormControl(this.EditingSourceControl.MainBranch ?? '', Validators.required));
4055
+ else if (permanentValue === false && preserveValue === true) {
4056
+ this.redirectTooltip = '307 – Not Permanent and Preserve';
4226
4057
  }
4227
- if (this.UseBuildPath) {
4228
- this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'buildPath'].join(''), new FormControl(this.BuildPath ?? '', Validators.required));
4058
+ else if (permanentValue === true && preserveValue === true) {
4059
+ this.redirectTooltip = '308 Permanent and Preserve';
4229
4060
  }
4230
4061
  }
4231
- }
4232
- DevopsSourceControlFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DevopsSourceControlFormComponent, deps: [{ token: ApplicationsFlowService }, { token: EaCService }, { token: i1$2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
4233
- DevopsSourceControlFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: DevopsSourceControlFormComponent, selector: "lcu-devops-source-control-form", inputs: { EditingSourceControlLookup: ["editing-source-control-lookup", "EditingSourceControlLookup"], Environment: ["environment", "Environment"], EnvironmentLookup: ["environment-lookup", "EnvironmentLookup"] }, outputs: { SaveStatusEvent: "save-status-event" }, viewQueries: [{ propertyName: "BranchesInput", first: true, predicate: ["branches"], descendants: true }], ngImport: i0, template: "<form \n class=\"form-card\" \n [formGroup]=\"DevOpsSourceControlFormGroup\" \n (ngSubmit)=\"SubmitSourceControl()\"\n>\n\n <!-- <mat-card class=\"spread\" class=\"sc-card\"> -->\n <!-- <mat-card-header>\n <mat-card-title> Source Control </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-icon matSuffix matTooltip=\"Configure source control, DevOps CI/CD, and artifacts.\">\n info_outline\n </mat-icon>\n </mat-card-header> -->\n\n <!-- <mat-card-content> -->\n\n <ng-container *ngIf=\"State?.Loading\">\n <lcu-loader [loading]=\"State?.Loading\"></lcu-loader>\n\n <!-- <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block> -->\n\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n\n <div class=\"card\">\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select \n formControlName=\"devOpsActionLookup\" \n placeholder=\"DevOps Action\"\n [disabled]=\"HostingDetails?.Loading\" \n (selectionChange)=\"DevOpsActionLookupChanged($event)\"\n >\n <ng-container *ngFor=\"let devOpsActionLookup of DevOpsActionLookups\">\n <mat-option \n [value]=\"devOpsActionLookup\" \n *ngIf=\"DevOpsActions[devOpsActionLookup]; let devOpsAction\">\n {{ devOpsAction.Name }}\n </mat-option>\n </ng-container>\n\n <mat-option value=\"\">-- Create New --</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"card\" *ngIf=\"OrganizationFormControl?.valid || !Loading\">\n <mat-form-field \n class=\"mat-full-width with-hint margin-bottom\" \n *ngIf=\"OrganizationOptions?.length > 0\"\n >\n <mat-icon class=\"org-icon\" matPrefix>corporate_fare</mat-icon>\n\n <mat-select \n [formControlName]=\"SourceControlRoot + 'organization'\" \n placeholder=\"Organization\"\n (selectionChange)=\"OrganizationChanged($event)\" \n [disabled]=\"Loading || HostingDetails?.Loading\" \n required\n >\n <ng-container *ngFor=\"let orgOpt of OrganizationOptions\">\n <mat-option [value]=\"orgOpt.Name\">\n {{ orgOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <mat-icon matSuffix (click)=\"RefreshOrganizations()\" matTooltip=\"Refresh Organization\" color=\"accent\"> refresh </mat-icon>\n\n <a matSuffix href=\"/.oauth/github?oauth-force-edit=true\" target=\"_blank\" color=\"accent\">\n <mat-icon color=\"accent\" matTooltip=\"Re-authorize Organizations\"> launch </mat-icon>\n </a>\n\n <mat-hint>\n If you don't have an organization or would like to create a new one,\n <a href=\"https://github.com/account/organizations/new\" class=\"primary-link\" target=\"_blank\">\n start here\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"card\" *ngIf=\"\n RepositoryFormControl?.valid ||\n (OrganizationFormControl?.valid && !Loading)\n \">\n <mat-form-field class=\"mat-full-width\">\n <mat-icon class=\"org-icon\" matPrefix>description</mat-icon>\n\n <mat-select [formControlName]=\"SourceControlRoot + 'repository'\" \n [placeholder]=\"\n OrganizationFormControl?.valid\n ? 'Repository'\n : 'Repository (select organization first)'\n \" [disabled]=\"\n !OrganizationFormControl?.valid || Loading || HostingDetails?.Loading\n \" (selectionChange)=\"RepositoryChanged($event)\" *ngIf=\"!CreatingRepository\" required>\n <ng-container *ngFor=\"let repoOpt of RepositoryOptions\">\n <mat-option [value]=\"repoOpt.Name\">\n {{ repoOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <input matInput placeholder=\"Repository (creates new if does not exist)\"\n [formControlName]=\"SourceControlRoot + 'repository'\" *ngIf=\"CreatingRepository\"\n [fxHide]=\"Loading || HostingDetails?.Loading\" required />\n\n <mat-icon matSuffix (click)=\"CreateRepository()\" [fxHide]=\"Loading || HostingDetails?.Loading\"\n *ngIf=\"!CreatingRepository && OrganizationFormControl?.valid\">\n add_circle\n </mat-icon>\n\n <button mat-button type=\"button\" (click)=\"SaveRepository()\"\n *ngIf=\"CreatingRepository && RepositoryFormControl?.valid\">\n\n <mat-icon matSuffix color=\"primary\">\n save\n </mat-icon>\n </button>\n\n <button mat-button type=\"button\" (click)=\"CancelCreateRepository()\" *ngIf=\"CreatingRepository\">\n\n <mat-icon matSuffix>\n cancel\n </mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <div class=\"card\" *ngIf=\"\n (BranchesFormControl?.valid ||\n (OrganizationFormControl?.valid &&\n RepositoryFormControl?.valid &&\n !Loading)) &&\n !CreatingRepository &&\n UseBranches\n \">\n <mat-form-field class=\"mat-full-width\">\n <mat-icon class=\"org-icon\" matPrefix>account_tree</mat-icon>\n\n <mat-label>Selected Branches</mat-label>\n\n <mat-autocomplete (optionSelected)=\"BranchOptionSelected($event)\" #branchOptions=\"matAutocomplete\">\n <ng-container *ngFor=\"let branchOpt of BranchOptions\">\n <mat-option [value]=\"branchOpt.Name\">\n {{ branchOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n\n <mat-chip-list #selectedBranches>\n <mat-chip [removable]=\"true\" (removed)=\"RemoveBranchOption(selBranch)\"\n *ngFor=\"let selBranch of SelectedBranches\">\n {{ selBranch }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n\n <input matInput placeholder=\"New Branch...\" [formControlName]=\"SourceControlRoot + 'branches'\" #branches\n [matAutocomplete]=\"branchOptions\" [matChipInputFor]=\"selectedBranches\"\n [matChipInputSeparatorKeyCodes]=\"SeparatorKeysCodes\" [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"AddBranchOption($event)\" [disabled]=\"Loading || HostingDetails?.Loading\"\n required />\n </mat-chip-list>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width with-hint\" [fxShow]=\"SelectedBranches?.length > 1\">\n <mat-icon class=\"org-icon\" matPrefix>account_tree</mat-icon>\n\n <mat-select [formControlName]=\"SourceControlRoot + 'mainBranch'\" placeholder=\"Main Branch\"\n [disabled]=\"Loading || HostingDetails?.Loading\" (selectionChange)=\"MainBranchChanged($event)\" required>\n <ng-container *ngFor=\"let branch of SelectedBranches\">\n <mat-option [value]=\"branch\">\n {{ branch }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <mat-icon matSuffix (click)=\"RefreshOrganizations()\" color=\"accent\"> refresh </mat-icon>\n\n <a matSuffix mat-icon-button href=\"/.oauth/github?oauth-force-edit=true\" target=\"_blank\" color=\"accent\">\n <mat-icon matTooltip=\"Re-authorize Organizations\" color=\"accent\"> launch </mat-icon>\n </a>\n\n <mat-hint>\n If you don't have an organization or would like to create a new one,\n <a href=\"https://github.com/account/organizations/new\" target=\"_blank\"class=\"primary-link\">\n start here\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"card\" *ngIf=\"\n (BuildPathFormControl?.valid ||\n (OrganizationFormControl?.valid &&\n RepositoryFormControl?.valid &&\n !Loading)) &&\n !CreatingRepository &&\n UseBuildPath\n \">\n <mat-form-field class=\"mat-full-width with-hint\">\n <mat-icon class=\"org-icon\" matPrefix>build</mat-icon>\n\n <mat-select [formControlName]=\"SourceControlRoot + 'buildPath'\" placeholder=\"Build Path\"\n [disabled]=\"Loading || BuildPathDisabled\" (selectionChange)=\"BuildPathChanged($event)\" required>\n <ng-container *ngFor=\"let buildPath of BuildPathOptions\">\n <mat-option [value]=\"buildPath\">\n {{ buildPath }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <mat-hint>\n The build path identifies which build action to use for your\n configuration.\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n\n <div class=\"margin-3\">\n <h4 class=\"mat-title\" *ngIf=\"!OrganizationFormControl?.valid\">\n Loading organizations\n </h4>\n\n <h4 class=\"mat-title\" *ngIf=\"\n OrganizationFormControl?.valid && !RepositoryFormControl?.valid\n \">\n Loading repositories\n </h4>\n\n <h4 class=\"mat-title\" *ngIf=\"RepositoryFormControl?.valid && !BranchesFormControl?.valid\">\n Loading branches\n </h4>\n\n <h4 class=\"mat-title\" *ngIf=\"\n (RepositoryFormControl?.valid || BranchesFormControl?.valid) &&\n !BuildPathFormControl?.valid\n \">\n Loading build paths\n </h4>\n </div>\n </div>\n </div>\n </ng-container>\n <!-- </div> -->\n\n <!-- </mat-card-content> -->\n <!-- <mat-card-actions fxLayoutAlign=\"center center\"> -->\n\n <!-- <button \n mat-raised-button \n *ngIf=\"!State?.Loading\"\n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!DevOpsSourceControlFormGroup.valid || !DevOpsSourceControlFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Source Control\n </button>\n <lcu-loader [loading]=\"State?.Loading\"></lcu-loader> -->\n \n <!-- </mat-card-actions> -->\n <!-- </mat-card> -->\n</form>", styles: [".form-card,.sc-card{width:100%}.margin-bottom{margin-bottom:15px}.primary-link{color:#4a918e;text-decoration:none}.s-block{margin:10px 0;width:100%;height:40px}\n"], components: [{ type: i3.LoaderComponent, selector: "lcu-loader", inputs: ["diameter", "hide-inner", "loading"] }, { type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i8$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i9$2.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }], directives: [{ type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4$1.MatPrefix, selector: "[matPrefix]" }, { type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4$1.MatSuffix, selector: "[matSuffix]" }, { type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9$1.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { type: i4$1.MatLabel, selector: "mat-label" }, { type: i9$2.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i9$2.MatChipRemove, selector: "[matChipRemove]" }, { type: i8$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i9$2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }] });
4234
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DevopsSourceControlFormComponent, decorators: [{
4062
+ SaveProcessorDetails() {
4063
+ const app = this.EditingApplication;
4064
+ app.LookupConfig.AllowedMethods = this.MethodsFormControl?.value
4065
+ ?.split(' ')
4066
+ .filter((v) => !!v);
4067
+ app.Processor.Type = this.ProcessorType;
4068
+ switch (app.Processor.Type) {
4069
+ case 'DFS':
4070
+ app.Processor.DefaultFile =
4071
+ this.DefaultFileFormControl.value || 'index.html';
4072
+ app.LowCodeUnit = {
4073
+ Type: this.LCUType,
4074
+ };
4075
+ switch (app.LowCodeUnit.Type) {
4076
+ case 'GitHub':
4077
+ app.LowCodeUnit.Organization =
4078
+ this.SourceControls[this.SourceControlFormControl.value]?.Organization;
4079
+ app.LowCodeUnit.Repository =
4080
+ this.SourceControls[this.SourceControlFormControl.value]?.Repository;
4081
+ app.LowCodeUnit.Build = this.BuildFormControl.value;
4082
+ app.LowCodeUnit.Path = this.BuildPathFormControl.value;
4083
+ app.LowCodeUnit.SourceControlLookup =
4084
+ this.SourceControlFormControl.value;
4085
+ break;
4086
+ case 'NPM':
4087
+ app.LowCodeUnit.Package = this.PackageFormControl.value;
4088
+ app.LowCodeUnit.Version = this.VersionFormControl.value;
4089
+ break;
4090
+ case 'WordPress':
4091
+ app.LowCodeUnit.APIRoot = this.APIRootFormControl.value;
4092
+ break;
4093
+ case 'Zip':
4094
+ app.LowCodeUnit.ZipFile = this.ZipFileFormControl.value;
4095
+ break;
4096
+ }
4097
+ break;
4098
+ case 'OAuth':
4099
+ app.Processor.Scopes = this.ScopesFormControl.value.split(' ');
4100
+ app.Processor.TokenLookup = this.TokenLookupFormControl.value;
4101
+ app.LowCodeUnit = {
4102
+ Type: this.LCUType,
4103
+ };
4104
+ switch (app.LowCodeUnit.Type) {
4105
+ case 'GitHubOAuth':
4106
+ app.LowCodeUnit.ClientID = this.ClientIDFormControl.value;
4107
+ app.LowCodeUnit.ClientSecret = this.ClientSecretFormControl.value;
4108
+ break;
4109
+ }
4110
+ break;
4111
+ case 'Proxy':
4112
+ app.Processor.InboundPath = this.InboundPathFormControl.value;
4113
+ app.LowCodeUnit = {
4114
+ Type: this.LCUType,
4115
+ };
4116
+ switch (app.LowCodeUnit.Type) {
4117
+ case 'API':
4118
+ app.LowCodeUnit.APIRoot = this.APIRootFormControl.value;
4119
+ app.LowCodeUnit.Security = this.SecurityFormControl.value;
4120
+ break;
4121
+ case 'SPA':
4122
+ app.LowCodeUnit.SPARoot = this.SPARootFormControl.value;
4123
+ break;
4124
+ }
4125
+ break;
4126
+ case 'Redirect':
4127
+ app.Processor.IncludeRequest = !!this.IncludeRequestFormControl.value;
4128
+ app.Processor.Permanent = !!this.PermanentFormControl.value;
4129
+ app.Processor.PreserveMethod = !!this.PreserveMethodFormControl.value;
4130
+ app.Processor.Redirect = this.RedirectFormControl.value;
4131
+ break;
4132
+ }
4133
+ if (!app.LookupConfig.PathRegex.startsWith('/')) {
4134
+ app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
4135
+ }
4136
+ const saveAppReq = {
4137
+ ProjectLookup: this.ProjectLookup,
4138
+ Application: app,
4139
+ ApplicationLookup: this.EditingApplicationLookup || Guid.CreateRaw(),
4140
+ };
4141
+ this.eacSvc.SaveApplicationAsCode(saveAppReq).then((res) => {
4142
+ this.SaveFormEvent.emit(res);
4143
+ });
4144
+ }
4145
+ SetEditingApplication(appLookup) {
4146
+ this.EditingApplication = new EaCApplicationAsCode();
4147
+ this.EditingApplicationLookup = appLookup;
4148
+ this.setupProcessorDetailsForm();
4149
+ }
4150
+ SourceControlChanged(event) {
4151
+ this.listBuildPaths();
4152
+ }
4153
+ ProcessorTypeChanged(event) {
4154
+ this.ProcessorType = event.value;
4155
+ this.setupProcessorTypeSubForm();
4156
+ }
4157
+ LCUTypeChanged(event) {
4158
+ this.LCUType = event.value;
4159
+ this.setupLcuTypeSubForm();
4160
+ }
4161
+ //HELPERS
4162
+ cleanupLcuTypeSubForm() {
4163
+ this.ProcessorDetailsFormGroup.removeControl('methods');
4164
+ this.ProcessorDetailsFormGroup.removeControl('apiRoot');
4165
+ this.ProcessorDetailsFormGroup.removeControl('security');
4166
+ this.ProcessorDetailsFormGroup.removeControl('spaRoot');
4167
+ this.ProcessorDetailsFormGroup.removeControl('applicationId');
4168
+ this.ProcessorDetailsFormGroup.removeControl('sourceControl');
4169
+ this.ProcessorDetailsFormGroup.removeControl('build');
4170
+ this.ProcessorDetailsFormGroup.removeControl('clientId');
4171
+ this.ProcessorDetailsFormGroup.removeControl('clientSecret');
4172
+ this.ProcessorDetailsFormGroup.removeControl('package');
4173
+ this.ProcessorDetailsFormGroup.removeControl('version');
4174
+ this.ProcessorDetailsFormGroup.removeControl('zipFile');
4175
+ }
4176
+ cleanupProcessorTypeSubForm() {
4177
+ this.ProcessorDetailsFormGroup.removeControl('defaultFile');
4178
+ // this.ApplicationFormGroup.removeControl('dfsLcuType');
4179
+ // this.ApplicationFormGroup.removeControl('oauthLcuType');
4180
+ this.ProcessorDetailsFormGroup.removeControl('scopes');
4181
+ this.ProcessorDetailsFormGroup.removeControl('tokenLookup');
4182
+ this.ProcessorDetailsFormGroup.removeControl('inboundPath');
4183
+ this.ProcessorDetailsFormGroup.removeControl('proxyLcuType');
4184
+ this.ProcessorDetailsFormGroup.removeControl('includeRequest');
4185
+ this.ProcessorDetailsFormGroup.removeControl('redirect');
4186
+ this.ProcessorDetailsFormGroup.removeControl('permanent');
4187
+ this.ProcessorDetailsFormGroup.removeControl('preserveMethod');
4188
+ this.cleanupLcuTypeSubForm();
4189
+ }
4190
+ listBuildPaths() {
4191
+ this.State.Loading = true;
4192
+ console.log("Source Control: ", this.SourceControls[this.SourceControlFormControl.value]);
4193
+ this.appsFlowSvc
4194
+ .ListBuildPaths(this.SourceControls[this.SourceControlFormControl.value]?.Organization, this.SourceControls[this.SourceControlFormControl.value]?.Repository)
4195
+ .subscribe((response) => {
4196
+ this.BuildPathOptions = response.Model;
4197
+ console.log("build path options: ", this.BuildPathOptions);
4198
+ this.State.Loading = false;
4199
+ // if (this.BuildPathOptions?.length === 1) {
4200
+ // this.BuildPathFormControl.setValue(this.BuildPathOptions[0]);
4201
+ // }
4202
+ });
4203
+ }
4204
+ setupLcuTypeSubForm() {
4205
+ this.cleanupLcuTypeSubForm();
4206
+ if (this.LCUType) {
4207
+ switch (this.LCUType) {
4208
+ case 'API':
4209
+ this.setupLCUAPIForm();
4210
+ break;
4211
+ case 'ApplicationPointer':
4212
+ this.setupLCUApplicationPointerForm();
4213
+ break;
4214
+ case 'GitHub':
4215
+ this.setupLCUGitHubForm();
4216
+ break;
4217
+ case 'GitHubOAuth':
4218
+ this.setupLCUGitHubOAuthForm();
4219
+ break;
4220
+ case 'WordPress':
4221
+ this.setupLCUWordPressForm();
4222
+ break;
4223
+ // case 'NPM':
4224
+ // this.setupLCUNPMForm();
4225
+ // break;
4226
+ case 'SPA':
4227
+ this.setupLCUSPAForm();
4228
+ break;
4229
+ case 'Zip':
4230
+ this.setupLCUZipForm();
4231
+ break;
4232
+ }
4233
+ }
4234
+ }
4235
+ setupProcessorDetailsForm() {
4236
+ this.ProcessorType = this.EditingApplication?.Processor?.Type || '';
4237
+ // console.log('EDITING APP = ', this.EditingApplication);
4238
+ if (this.EditingApplication != null) {
4239
+ this.ProcessorDetailsFormGroup = this.formBldr.group({
4240
+ procType: [this.ProcessorType, [Validators.required]],
4241
+ });
4242
+ // this.setupDfsForm();
4243
+ // this.setupLcuTypeSubForm();
4244
+ this.setupProcessorTypeSubForm();
4245
+ }
4246
+ }
4247
+ setupLCUGitHubForm() {
4248
+ console.log('EditingApplication: ', this.EditingApplication);
4249
+ this.ProcessorDetailsFormGroup.addControl('sourceControl', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SourceControlLookup || '', [Validators.required]));
4250
+ this.ProcessorDetailsFormGroup.addControl('buildPath', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Path || '', [
4251
+ Validators.required,
4252
+ ]));
4253
+ this.ProcessorDetailsFormGroup.addControl('build', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Build || 'latest', [Validators.required]));
4254
+ this.listBuildPaths();
4255
+ }
4256
+ setupLCUApplicationPointerForm() {
4257
+ this.ProcessorDetailsFormGroup.addControl('applicationId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ApplicationID || '', [Validators.required]));
4258
+ }
4259
+ setupLCUSPAForm() {
4260
+ this.ProcessorDetailsFormGroup.addControl('spaRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SPARoot || '', [Validators.required]));
4261
+ }
4262
+ setupLCUAPIForm() {
4263
+ this.ProcessorDetailsFormGroup.addControl('methods', this.formBldr.control(this.EditingApplication.LookupConfig?.AllowedMethods?.join(' ') || '', []));
4264
+ this.ProcessorDetailsFormGroup.addControl('apiRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.APIRoot || '', [Validators.required]));
4265
+ this.ProcessorDetailsFormGroup.addControl('security', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Security || '', [Validators.required]));
4266
+ }
4267
+ setupLCUGitHubOAuthForm() {
4268
+ this.ProcessorDetailsFormGroup.addControl('clientId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientID || '', [Validators.required]));
4269
+ this.ProcessorDetailsFormGroup.addControl('clientSecret', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientSecret || '', [Validators.required]));
4270
+ }
4271
+ setupLCUWordPressForm() {
4272
+ this.ProcessorDetailsFormGroup.addControl('apiRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.APIRoot || '', [Validators.required]));
4273
+ }
4274
+ setupProxyForm() {
4275
+ this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4276
+ this.ProcessorDetailsFormGroup.addControl('inboundPath', this.formBldr.control(this.EditingApplication.Processor?.InboundPath || '', [Validators.required]));
4277
+ this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
4278
+ }
4279
+ setupRedirectForm() {
4280
+ this.ProcessorDetailsFormGroup.addControl('redirect', this.formBldr.control(this.EditingApplication.Processor?.Redirect || '', [
4281
+ Validators.required,
4282
+ ]));
4283
+ this.ProcessorDetailsFormGroup.addControl('permanent', this.formBldr.control(this.EditingApplication.Processor?.Permanent || false, []));
4284
+ this.ProcessorDetailsFormGroup.addControl('preserveMethod', this.formBldr.control(this.EditingApplication.Processor?.PreserveMethod || false, []));
4285
+ this.ProcessorDetailsFormGroup.addControl('includeRequest', this.formBldr.control(this.EditingApplication.Processor?.IncludeRequest || false, []));
4286
+ this.DetermineTooltipText();
4287
+ }
4288
+ setupOAuthForm() {
4289
+ this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4290
+ this.ProcessorDetailsFormGroup.addControl('scopes', this.formBldr.control(this.EditingApplication.Processor?.Scopes?.Join(' ') || '', [Validators.required]));
4291
+ this.ProcessorDetailsFormGroup.addControl('tokenLookup', this.formBldr.control(this.EditingApplication.Processor?.TokenLookup || '', [Validators.required]));
4292
+ this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
4293
+ }
4294
+ setupLCUZipForm() {
4295
+ this.ProcessorDetailsFormGroup.addControl('zipFile', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ZipFile || '', [Validators.required]));
4296
+ }
4297
+ setupDfsForm() {
4298
+ this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4299
+ this.ProcessorDetailsFormGroup.addControl('defaultFile', this.formBldr.control(this.EditingApplication.Processor?.DefaultFile || 'index.html', [Validators.required]));
4300
+ this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
4301
+ }
4302
+ setupProcessorTypeSubForm() {
4303
+ this.cleanupProcessorTypeSubForm();
4304
+ if (this.ProcessorType) {
4305
+ switch (this.ProcessorType) {
4306
+ case 'DFS':
4307
+ this.setupDfsForm();
4308
+ break;
4309
+ case 'OAuth':
4310
+ this.setupOAuthForm();
4311
+ break;
4312
+ case 'Proxy':
4313
+ this.setupProxyForm();
4314
+ break;
4315
+ case 'Redirect':
4316
+ this.setupRedirectForm();
4317
+ break;
4318
+ }
4319
+ }
4320
+ this.setupLcuTypeSubForm();
4321
+ }
4322
+ }
4323
+ ProcessorDetailsFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ProcessorDetailsFormComponent, deps: [{ token: ApplicationsFlowService }, { token: i1$2.FormBuilder }, { token: EaCService }], target: i0.ɵɵFactoryTarget.Component });
4324
+ ProcessorDetailsFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: ProcessorDetailsFormComponent, selector: "lcu-processor-details-form", inputs: { EditingApplication: ["editing-application", "EditingApplication"], EditingApplicationLookup: ["editing-application-lookup", "EditingApplicationLookup"], HasSaveButton: ["has-save-button", "HasSaveButton"], SourceControlLookups: ["source-control-lookups", "SourceControlLookups"], ProjectLookup: ["project-lookup", "ProjectLookup"] }, outputs: { SaveFormEvent: "save-form-event" }, ngImport: i0, template: "<form class=\"processor-details-form\" [formGroup]=\"ProcessorDetailsFormGroup\" (ngSubmit)=\"SaveProcessorDetails()\">\n<!-- <mat-card class=\"spread flow-card\"> -->\n <!-- <mat-card-header>\n <mat-card-title> Processor Details </mat-card-title>\n </mat-card-header> -->\n\n <ng-container *ngIf=\"State?.Loading\">\n\n <ng-container *ngFor=\"let fc of ValidFormControls\">\n\n <skeleton-block \n [id]=\"fc\"\n class=\"s-block\" \n effect=\"wave\"\n ></skeleton-block>\n \n </ng-container>\n\n <lcu-loader *ngIf=\"LCUType === 'Redirect'\" [loading]=\"State?.Loading\"></lcu-loader>\n\n </ng-container>\n <!-- END SKELETON -->\n\n <ng-container *ngIf=\"!State?.Loading\">\n\n <!-- <mat-card-content> -->\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"procType\"\n (selectionChange)=\"ProcessorTypeChanged($event)\"\n required\n >\n <mat-option value=\"DFS\">View Package</mat-option>\n\n <mat-option value=\"Redirect\">Redirect</mat-option>\n\n <mat-option value=\"Proxy\">Proxy</mat-option>\n\n <mat-option value=\"OAuth\">OAuth</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"ProcessorType\">\n <div *ngSwitchCase=\"'DFS'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Default File\"\n formControlName=\"defaultFile\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"NPM\">NPM</mat-option>\n\n <mat-option value=\"GitHub\">GitHub</mat-option>\n\n <mat-option value=\"WordPress\">WordPress</mat-option>\n\n <!-- <mat-option value=\"Zip\">Zip</mat-option> -->\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHub'\">\n <!-- <lcu-source-control-form-controls\n [build-path]=\"EditingApplication?.LowCodeUnit?.Path\"\n [form-group]=\"ProcessorDetailsFormGroup\"\n [source-control]=\"DefaultSourceControl\"\n [use-branches]=\"false\"\n [use-build-path]=\"true\"\n ></lcu-source-control-form-controls> -->\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Source Control\"\n formControlName=\"sourceControl\"\n (selectionChange)=\"SourceControlChanged($event)\"\n required\n >\n <mat-option \n *ngFor=\"let scLookup of SourceControlLookups\" \n [value]=\"scLookup\">\n {{scLookup}}\n </mat-option>\n \n \n <!-- <mat-option value=\"Zip\">Zip</mat-option> -->\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width with-hint\"\n *ngIf=\"\n SourceControlFormControl?.valid\n \"\n > \n <mat-select\n formControlName=\"buildPath\"\n placeholder=\"Build Path\"\n required\n >\n <ng-container *ngFor=\"let buildPath of BuildPathOptions\">\n <mat-option [value]=\"buildPath\">\n {{ buildPath }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n The build path identifies which build action to use for your\n configuration.\n </mat-hint>\n </mat-form-field>\n\n <mat-form-field\n class=\"mat-full-width\"\n *ngIf=\"\n SourceControlFormControl?.valid\n \"\n >\n <input\n matInput\n placeholder=\"Build\"\n formControlName=\"build\"\n required\n />\n\n <mat-hint>\n Current Build:\n {{ EditingApplication?.LowCodeUnit?.CurrentBuild }}\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'NPM'\">\n <lcu-npm-package-select\n [npm-package]=\"EditingApplication?.LowCodeUnit?.Package\"\n [npm-package-version]=\"\n EditingApplication?.LowCodeUnit?.Version\n \"\n [form-group]=\"ProcessorDetailsFormGroup\"\n ></lcu-npm-package-select>\n\n <mat-hint>\n Current Version:\n {{ EditingApplication?.LowCodeUnit?.CurrentVersion }}\n </mat-hint>\n </div>\n\n <div *ngSwitchCase=\"'WordPress'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"API Root\"\n formControlName=\"apiRoot\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'OAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Scopes (space separated)\"\n formControlName=\"scopes\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Token Lookup\"\n formControlName=\"tokenLookup\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"GitHubOAuth\">GitHub</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHubOAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client ID\"\n formControlName=\"clientId\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client Secret\"\n formControlName=\"clientSecret\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Proxy'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Inbound Path\"\n formControlName=\"inboundPath\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"API\">API</mat-option>\n\n <mat-option value=\"SPA\">Single Page Application</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'API'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"API Root\"\n formControlName=\"apiRoot\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Allowed Methods (separate with spaces)\"\n formControlName=\"methods\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Security ({header}~{value})\"\n formControlName=\"security\"\n required\n />\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'SPA'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"SPA Root\"\n formControlName=\"spaRoot\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Redirect'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Redirect URL\"\n formControlName=\"redirect\"\n required\n />\n </mat-form-field>\n\n <div>\n <mat-slide-toggle \n class=\"spread\" \n formControlName=\"permanent\">\n Is Permanent?\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"spread\"\n formControlName=\"preserveMethod\"\n >\n Preserve Method?\n </mat-slide-toggle>\n\n <mat-icon\n class=\"spread\"\n matSuffix\n (mouseenter)=\"DetermineTooltipText()\"\n matTooltip={{redirectTooltip}}\n >\n info_outline\n </mat-icon>\n\n \n </div>\n \n <div>\n <mat-slide-toggle \n class=\"spread\" \n formControlName=\"includeRequest\">\n Include Path and Query?\n </mat-slide-toggle>\n\n <mat-icon\n class=\"spread\"\n matSuffix\n matTooltip=\"Should the redirect include the path and query?\"\n >\n info_outline\n </mat-icon>\n </div>\n </div>\n </div>\n <!-- </mat-card-content> -->\n <!-- <mat-card-actions fxLayoutAlign=\"center center\"> -->\n\n <!-- <button \n *ngIf=\"HasSaveButton && !State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!ProcessorDetailsFormGroup.valid || !ProcessorDetailsFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Processor Details\n </button> -->\n <!-- <lcu-loader *ngIf=\"HasSaveButton\" [loading]=\"State?.Loading\"></lcu-loader> -->\n\n <!-- </mat-card-actions> -->\n\n </ng-container>\n \n<!-- </mat-card> -->\n</form>\n \n", styles: [".s-block{margin:10px 0;width:100%;height:40px}\n"], components: [{ type: i4$3.SkeletonBlockComponent, selector: "skeleton-block", inputs: ["width", "height", "effect", "borderRadius"] }, { type: i3.LoaderComponent, selector: "lcu-loader", inputs: ["diameter", "hide-inner", "loading"] }, { type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: NpmPackageSelectComponent, selector: "lcu-npm-package-select", inputs: ["npm-package", "npm-package-version", "form-group"] }, { type: i5$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i4$1.MatSuffix, selector: "[matSuffix]" }, { type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
4325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ProcessorDetailsFormComponent, decorators: [{
4235
4326
  type: Component,
4236
- args: [{ selector: 'lcu-devops-source-control-form', template: "<form \n class=\"form-card\" \n [formGroup]=\"DevOpsSourceControlFormGroup\" \n (ngSubmit)=\"SubmitSourceControl()\"\n>\n\n <!-- <mat-card class=\"spread\" class=\"sc-card\"> -->\n <!-- <mat-card-header>\n <mat-card-title> Source Control </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-icon matSuffix matTooltip=\"Configure source control, DevOps CI/CD, and artifacts.\">\n info_outline\n </mat-icon>\n </mat-card-header> -->\n\n <!-- <mat-card-content> -->\n\n <ng-container *ngIf=\"State?.Loading\">\n <lcu-loader [loading]=\"State?.Loading\"></lcu-loader>\n\n <!-- <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block> -->\n\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n\n <div class=\"card\">\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select \n formControlName=\"devOpsActionLookup\" \n placeholder=\"DevOps Action\"\n [disabled]=\"HostingDetails?.Loading\" \n (selectionChange)=\"DevOpsActionLookupChanged($event)\"\n >\n <ng-container *ngFor=\"let devOpsActionLookup of DevOpsActionLookups\">\n <mat-option \n [value]=\"devOpsActionLookup\" \n *ngIf=\"DevOpsActions[devOpsActionLookup]; let devOpsAction\">\n {{ devOpsAction.Name }}\n </mat-option>\n </ng-container>\n\n <mat-option value=\"\">-- Create New --</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"card\" *ngIf=\"OrganizationFormControl?.valid || !Loading\">\n <mat-form-field \n class=\"mat-full-width with-hint margin-bottom\" \n *ngIf=\"OrganizationOptions?.length > 0\"\n >\n <mat-icon class=\"org-icon\" matPrefix>corporate_fare</mat-icon>\n\n <mat-select \n [formControlName]=\"SourceControlRoot + 'organization'\" \n placeholder=\"Organization\"\n (selectionChange)=\"OrganizationChanged($event)\" \n [disabled]=\"Loading || HostingDetails?.Loading\" \n required\n >\n <ng-container *ngFor=\"let orgOpt of OrganizationOptions\">\n <mat-option [value]=\"orgOpt.Name\">\n {{ orgOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <mat-icon matSuffix (click)=\"RefreshOrganizations()\" matTooltip=\"Refresh Organization\" color=\"accent\"> refresh </mat-icon>\n\n <a matSuffix href=\"/.oauth/github?oauth-force-edit=true\" target=\"_blank\" color=\"accent\">\n <mat-icon color=\"accent\" matTooltip=\"Re-authorize Organizations\"> launch </mat-icon>\n </a>\n\n <mat-hint>\n If you don't have an organization or would like to create a new one,\n <a href=\"https://github.com/account/organizations/new\" class=\"primary-link\" target=\"_blank\">\n start here\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"card\" *ngIf=\"\n RepositoryFormControl?.valid ||\n (OrganizationFormControl?.valid && !Loading)\n \">\n <mat-form-field class=\"mat-full-width\">\n <mat-icon class=\"org-icon\" matPrefix>description</mat-icon>\n\n <mat-select [formControlName]=\"SourceControlRoot + 'repository'\" \n [placeholder]=\"\n OrganizationFormControl?.valid\n ? 'Repository'\n : 'Repository (select organization first)'\n \" [disabled]=\"\n !OrganizationFormControl?.valid || Loading || HostingDetails?.Loading\n \" (selectionChange)=\"RepositoryChanged($event)\" *ngIf=\"!CreatingRepository\" required>\n <ng-container *ngFor=\"let repoOpt of RepositoryOptions\">\n <mat-option [value]=\"repoOpt.Name\">\n {{ repoOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <input matInput placeholder=\"Repository (creates new if does not exist)\"\n [formControlName]=\"SourceControlRoot + 'repository'\" *ngIf=\"CreatingRepository\"\n [fxHide]=\"Loading || HostingDetails?.Loading\" required />\n\n <mat-icon matSuffix (click)=\"CreateRepository()\" [fxHide]=\"Loading || HostingDetails?.Loading\"\n *ngIf=\"!CreatingRepository && OrganizationFormControl?.valid\">\n add_circle\n </mat-icon>\n\n <button mat-button type=\"button\" (click)=\"SaveRepository()\"\n *ngIf=\"CreatingRepository && RepositoryFormControl?.valid\">\n\n <mat-icon matSuffix color=\"primary\">\n save\n </mat-icon>\n </button>\n\n <button mat-button type=\"button\" (click)=\"CancelCreateRepository()\" *ngIf=\"CreatingRepository\">\n\n <mat-icon matSuffix>\n cancel\n </mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <div class=\"card\" *ngIf=\"\n (BranchesFormControl?.valid ||\n (OrganizationFormControl?.valid &&\n RepositoryFormControl?.valid &&\n !Loading)) &&\n !CreatingRepository &&\n UseBranches\n \">\n <mat-form-field class=\"mat-full-width\">\n <mat-icon class=\"org-icon\" matPrefix>account_tree</mat-icon>\n\n <mat-label>Selected Branches</mat-label>\n\n <mat-autocomplete (optionSelected)=\"BranchOptionSelected($event)\" #branchOptions=\"matAutocomplete\">\n <ng-container *ngFor=\"let branchOpt of BranchOptions\">\n <mat-option [value]=\"branchOpt.Name\">\n {{ branchOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n\n <mat-chip-list #selectedBranches>\n <mat-chip [removable]=\"true\" (removed)=\"RemoveBranchOption(selBranch)\"\n *ngFor=\"let selBranch of SelectedBranches\">\n {{ selBranch }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n\n <input matInput placeholder=\"New Branch...\" [formControlName]=\"SourceControlRoot + 'branches'\" #branches\n [matAutocomplete]=\"branchOptions\" [matChipInputFor]=\"selectedBranches\"\n [matChipInputSeparatorKeyCodes]=\"SeparatorKeysCodes\" [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"AddBranchOption($event)\" [disabled]=\"Loading || HostingDetails?.Loading\"\n required />\n </mat-chip-list>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width with-hint\" [fxShow]=\"SelectedBranches?.length > 1\">\n <mat-icon class=\"org-icon\" matPrefix>account_tree</mat-icon>\n\n <mat-select [formControlName]=\"SourceControlRoot + 'mainBranch'\" placeholder=\"Main Branch\"\n [disabled]=\"Loading || HostingDetails?.Loading\" (selectionChange)=\"MainBranchChanged($event)\" required>\n <ng-container *ngFor=\"let branch of SelectedBranches\">\n <mat-option [value]=\"branch\">\n {{ branch }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <mat-icon matSuffix (click)=\"RefreshOrganizations()\" color=\"accent\"> refresh </mat-icon>\n\n <a matSuffix mat-icon-button href=\"/.oauth/github?oauth-force-edit=true\" target=\"_blank\" color=\"accent\">\n <mat-icon matTooltip=\"Re-authorize Organizations\" color=\"accent\"> launch </mat-icon>\n </a>\n\n <mat-hint>\n If you don't have an organization or would like to create a new one,\n <a href=\"https://github.com/account/organizations/new\" target=\"_blank\"class=\"primary-link\">\n start here\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"card\" *ngIf=\"\n (BuildPathFormControl?.valid ||\n (OrganizationFormControl?.valid &&\n RepositoryFormControl?.valid &&\n !Loading)) &&\n !CreatingRepository &&\n UseBuildPath\n \">\n <mat-form-field class=\"mat-full-width with-hint\">\n <mat-icon class=\"org-icon\" matPrefix>build</mat-icon>\n\n <mat-select [formControlName]=\"SourceControlRoot + 'buildPath'\" placeholder=\"Build Path\"\n [disabled]=\"Loading || BuildPathDisabled\" (selectionChange)=\"BuildPathChanged($event)\" required>\n <ng-container *ngFor=\"let buildPath of BuildPathOptions\">\n <mat-option [value]=\"buildPath\">\n {{ buildPath }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <mat-hint>\n The build path identifies which build action to use for your\n configuration.\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n\n <div class=\"margin-3\">\n <h4 class=\"mat-title\" *ngIf=\"!OrganizationFormControl?.valid\">\n Loading organizations\n </h4>\n\n <h4 class=\"mat-title\" *ngIf=\"\n OrganizationFormControl?.valid && !RepositoryFormControl?.valid\n \">\n Loading repositories\n </h4>\n\n <h4 class=\"mat-title\" *ngIf=\"RepositoryFormControl?.valid && !BranchesFormControl?.valid\">\n Loading branches\n </h4>\n\n <h4 class=\"mat-title\" *ngIf=\"\n (RepositoryFormControl?.valid || BranchesFormControl?.valid) &&\n !BuildPathFormControl?.valid\n \">\n Loading build paths\n </h4>\n </div>\n </div>\n </div>\n </ng-container>\n <!-- </div> -->\n\n <!-- </mat-card-content> -->\n <!-- <mat-card-actions fxLayoutAlign=\"center center\"> -->\n\n <!-- <button \n mat-raised-button \n *ngIf=\"!State?.Loading\"\n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!DevOpsSourceControlFormGroup.valid || !DevOpsSourceControlFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Source Control\n </button>\n <lcu-loader [loading]=\"State?.Loading\"></lcu-loader> -->\n \n <!-- </mat-card-actions> -->\n <!-- </mat-card> -->\n</form>", styles: [".form-card,.sc-card{width:100%}.margin-bottom{margin-bottom:15px}.primary-link{color:#4a918e;text-decoration:none}.s-block{margin:10px 0;width:100%;height:40px}\n"] }]
4237
- }], ctorParameters: function () { return [{ type: ApplicationsFlowService }, { type: EaCService }, { type: i1$2.FormBuilder }]; }, propDecorators: { EditingSourceControlLookup: [{
4327
+ args: [{ selector: 'lcu-processor-details-form', template: "<form class=\"processor-details-form\" [formGroup]=\"ProcessorDetailsFormGroup\" (ngSubmit)=\"SaveProcessorDetails()\">\n<!-- <mat-card class=\"spread flow-card\"> -->\n <!-- <mat-card-header>\n <mat-card-title> Processor Details </mat-card-title>\n </mat-card-header> -->\n\n <ng-container *ngIf=\"State?.Loading\">\n\n <ng-container *ngFor=\"let fc of ValidFormControls\">\n\n <skeleton-block \n [id]=\"fc\"\n class=\"s-block\" \n effect=\"wave\"\n ></skeleton-block>\n \n </ng-container>\n\n <lcu-loader *ngIf=\"LCUType === 'Redirect'\" [loading]=\"State?.Loading\"></lcu-loader>\n\n </ng-container>\n <!-- END SKELETON -->\n\n <ng-container *ngIf=\"!State?.Loading\">\n\n <!-- <mat-card-content> -->\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"procType\"\n (selectionChange)=\"ProcessorTypeChanged($event)\"\n required\n >\n <mat-option value=\"DFS\">View Package</mat-option>\n\n <mat-option value=\"Redirect\">Redirect</mat-option>\n\n <mat-option value=\"Proxy\">Proxy</mat-option>\n\n <mat-option value=\"OAuth\">OAuth</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"ProcessorType\">\n <div *ngSwitchCase=\"'DFS'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Default File\"\n formControlName=\"defaultFile\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"NPM\">NPM</mat-option>\n\n <mat-option value=\"GitHub\">GitHub</mat-option>\n\n <mat-option value=\"WordPress\">WordPress</mat-option>\n\n <!-- <mat-option value=\"Zip\">Zip</mat-option> -->\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHub'\">\n <!-- <lcu-source-control-form-controls\n [build-path]=\"EditingApplication?.LowCodeUnit?.Path\"\n [form-group]=\"ProcessorDetailsFormGroup\"\n [source-control]=\"DefaultSourceControl\"\n [use-branches]=\"false\"\n [use-build-path]=\"true\"\n ></lcu-source-control-form-controls> -->\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Source Control\"\n formControlName=\"sourceControl\"\n (selectionChange)=\"SourceControlChanged($event)\"\n required\n >\n <mat-option \n *ngFor=\"let scLookup of SourceControlLookups\" \n [value]=\"scLookup\">\n {{scLookup}}\n </mat-option>\n \n \n <!-- <mat-option value=\"Zip\">Zip</mat-option> -->\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width with-hint\"\n *ngIf=\"\n SourceControlFormControl?.valid\n \"\n > \n <mat-select\n formControlName=\"buildPath\"\n placeholder=\"Build Path\"\n required\n >\n <ng-container *ngFor=\"let buildPath of BuildPathOptions\">\n <mat-option [value]=\"buildPath\">\n {{ buildPath }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n The build path identifies which build action to use for your\n configuration.\n </mat-hint>\n </mat-form-field>\n\n <mat-form-field\n class=\"mat-full-width\"\n *ngIf=\"\n SourceControlFormControl?.valid\n \"\n >\n <input\n matInput\n placeholder=\"Build\"\n formControlName=\"build\"\n required\n />\n\n <mat-hint>\n Current Build:\n {{ EditingApplication?.LowCodeUnit?.CurrentBuild }}\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'NPM'\">\n <lcu-npm-package-select\n [npm-package]=\"EditingApplication?.LowCodeUnit?.Package\"\n [npm-package-version]=\"\n EditingApplication?.LowCodeUnit?.Version\n \"\n [form-group]=\"ProcessorDetailsFormGroup\"\n ></lcu-npm-package-select>\n\n <mat-hint>\n Current Version:\n {{ EditingApplication?.LowCodeUnit?.CurrentVersion }}\n </mat-hint>\n </div>\n\n <div *ngSwitchCase=\"'WordPress'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"API Root\"\n formControlName=\"apiRoot\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'OAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Scopes (space separated)\"\n formControlName=\"scopes\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Token Lookup\"\n formControlName=\"tokenLookup\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"GitHubOAuth\">GitHub</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHubOAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client ID\"\n formControlName=\"clientId\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client Secret\"\n formControlName=\"clientSecret\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Proxy'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Inbound Path\"\n formControlName=\"inboundPath\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"API\">API</mat-option>\n\n <mat-option value=\"SPA\">Single Page Application</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'API'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"API Root\"\n formControlName=\"apiRoot\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Allowed Methods (separate with spaces)\"\n formControlName=\"methods\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Security ({header}~{value})\"\n formControlName=\"security\"\n required\n />\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'SPA'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"SPA Root\"\n formControlName=\"spaRoot\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Redirect'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Redirect URL\"\n formControlName=\"redirect\"\n required\n />\n </mat-form-field>\n\n <div>\n <mat-slide-toggle \n class=\"spread\" \n formControlName=\"permanent\">\n Is Permanent?\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"spread\"\n formControlName=\"preserveMethod\"\n >\n Preserve Method?\n </mat-slide-toggle>\n\n <mat-icon\n class=\"spread\"\n matSuffix\n (mouseenter)=\"DetermineTooltipText()\"\n matTooltip={{redirectTooltip}}\n >\n info_outline\n </mat-icon>\n\n \n </div>\n \n <div>\n <mat-slide-toggle \n class=\"spread\" \n formControlName=\"includeRequest\">\n Include Path and Query?\n </mat-slide-toggle>\n\n <mat-icon\n class=\"spread\"\n matSuffix\n matTooltip=\"Should the redirect include the path and query?\"\n >\n info_outline\n </mat-icon>\n </div>\n </div>\n </div>\n <!-- </mat-card-content> -->\n <!-- <mat-card-actions fxLayoutAlign=\"center center\"> -->\n\n <!-- <button \n *ngIf=\"HasSaveButton && !State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!ProcessorDetailsFormGroup.valid || !ProcessorDetailsFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Processor Details\n </button> -->\n <!-- <lcu-loader *ngIf=\"HasSaveButton\" [loading]=\"State?.Loading\"></lcu-loader> -->\n\n <!-- </mat-card-actions> -->\n\n </ng-container>\n \n<!-- </mat-card> -->\n</form>\n \n", styles: [".s-block{margin:10px 0;width:100%;height:40px}\n"] }]
4328
+ }], ctorParameters: function () { return [{ type: ApplicationsFlowService }, { type: i1$2.FormBuilder }, { type: EaCService }]; }, propDecorators: { EditingApplication: [{
4238
4329
  type: Input,
4239
- args: ['editing-source-control-lookup']
4240
- }], Environment: [{
4330
+ args: ['editing-application']
4331
+ }], EditingApplicationLookup: [{
4241
4332
  type: Input,
4242
- args: ['environment']
4243
- }], EnvironmentLookup: [{
4333
+ args: ['editing-application-lookup']
4334
+ }], HasSaveButton: [{
4244
4335
  type: Input,
4245
- args: ['environment-lookup']
4246
- }], SaveStatusEvent: [{
4336
+ args: ['has-save-button']
4337
+ }], SourceControlLookups: [{
4338
+ type: Input,
4339
+ args: ['source-control-lookups']
4340
+ }], ProjectLookup: [{
4341
+ type: Input,
4342
+ args: ['project-lookup']
4343
+ }], SaveFormEvent: [{
4247
4344
  type: Output,
4248
- args: ['save-status-event']
4249
- }], BranchesInput: [{
4250
- type: ViewChild,
4251
- args: ['branches']
4345
+ args: ['save-form-event']
4252
4346
  }] } });
4253
4347
 
4254
- class SourceControlDialogComponent {
4255
- constructor(dialogRef, eacSvc, data, snackBar) {
4256
- this.dialogRef = dialogRef;
4348
+ class NewApplicationDialogComponent {
4349
+ constructor(eacSvc, dialogRef, data, snackBar) {
4257
4350
  this.eacSvc = eacSvc;
4351
+ this.dialogRef = dialogRef;
4258
4352
  this.data = data;
4259
4353
  this.snackBar = snackBar;
4354
+ this.HasSaveButton = false;
4260
4355
  }
4261
- get DevOpsSourceControlFormGroup() {
4262
- return this.DevopsSourceControl?.DevOpsSourceControlFormGroup;
4356
+ get Environment() {
4357
+ return this.State?.EaC?.Environments[this.data.environmentLookup];
4263
4358
  }
4264
- get HasConnection() {
4265
- return this.State.GitHub.HasConnection;
4359
+ get SourceControls() {
4360
+ return this.Environment?.Sources || {};
4361
+ }
4362
+ get SourceControlLookups() {
4363
+ return Object.keys(this.Environment.Sources || {});
4266
4364
  }
4267
4365
  get State() {
4268
4366
  return this.eacSvc.State;
4269
4367
  }
4270
4368
  ngOnInit() {
4369
+ this.SetupApplication(Guid.CreateRaw());
4271
4370
  }
4272
4371
  CloseDialog() {
4273
4372
  this.dialogRef.close();
4274
4373
  }
4275
- HandleSaveStatusEvent(event) {
4276
- console.log("event to save: ", event);
4277
- if (event.Code === 0) {
4278
- this.snackBar.open("Source Control Succesfully Saved", "Dismiss", {
4374
+ SetupApplication(appLookup) {
4375
+ this.NewApplication = new EaCApplicationAsCode;
4376
+ this.NewApplicationLookup = appLookup;
4377
+ }
4378
+ SaveApplication() {
4379
+ const app = {
4380
+ Application: {
4381
+ Name: this.ApplicationFormControls.NameFormControl.value,
4382
+ Description: this.ApplicationFormControls.DescriptionFormControl.value,
4383
+ PriorityShift: 0,
4384
+ },
4385
+ AccessRightLookups: [],
4386
+ DataTokens: {},
4387
+ LicenseConfigurationLookups: [],
4388
+ LookupConfig: {
4389
+ IsPrivate: false,
4390
+ IsTriggerSignIn: false,
4391
+ PathRegex: `${this.ApplicationFormControls.RouteFormControl.value}.*`,
4392
+ QueryRegex: '',
4393
+ HeaderRegex: '',
4394
+ AllowedMethods: this.ProcessorDetailsFormControls.MethodsFormControl?.value
4395
+ ?.split(' ')
4396
+ .filter((v) => !!v),
4397
+ },
4398
+ Processor: {
4399
+ Type: this.ProcessorDetailsFormControls.ProcessorType,
4400
+ },
4401
+ };
4402
+ switch (app.Processor.Type) {
4403
+ case 'DFS':
4404
+ app.Processor.BaseHref = `${this.ApplicationFormControls.RouteFormControl.value}/`.replace('//', '/');
4405
+ app.Processor.DefaultFile =
4406
+ this.ProcessorDetailsFormControls.DefaultFileFormControl.value || 'index.html';
4407
+ app.LowCodeUnit = {
4408
+ Type: this.ProcessorDetailsFormControls.LCUType,
4409
+ };
4410
+ switch (app.LowCodeUnit.Type) {
4411
+ case 'GitHub':
4412
+ app.LowCodeUnit.Organization =
4413
+ this.SourceControls[this.ProcessorDetailsFormControls.SourceControlFormControl.value].Organization;
4414
+ app.LowCodeUnit.Repository =
4415
+ this.SourceControls[this.ProcessorDetailsFormControls.SourceControlFormControl.value].Repository;
4416
+ app.LowCodeUnit.Build = this.ProcessorDetailsFormControls.BuildFormControl.value;
4417
+ app.LowCodeUnit.Path =
4418
+ this.ProcessorDetailsFormControls.BuildPathFormControl.value;
4419
+ break;
4420
+ case 'NPM':
4421
+ app.LowCodeUnit.Package = this.ProcessorDetailsFormControls.PackageFormControl.value;
4422
+ app.LowCodeUnit.Version = this.ProcessorDetailsFormControls.VersionFormControl.value;
4423
+ break;
4424
+ case 'Zip':
4425
+ app.LowCodeUnit.ZipFile = this.ProcessorDetailsFormControls.ZipFileFormControl.value;
4426
+ break;
4427
+ }
4428
+ break;
4429
+ case 'OAuth':
4430
+ app.Processor.Scopes = this.ProcessorDetailsFormControls.ScopesFormControl.value.split(' ');
4431
+ app.Processor.TokenLookup = this.ProcessorDetailsFormControls.TokenLookupFormControl.value;
4432
+ app.LowCodeUnit = {
4433
+ Type: this.ProcessorDetailsFormControls.LCUType,
4434
+ };
4435
+ switch (app.LowCodeUnit.Type) {
4436
+ case 'GitHubOAuth':
4437
+ app.LowCodeUnit.ClientID = this.ProcessorDetailsFormControls.ClientIDFormControl.value;
4438
+ app.LowCodeUnit.ClientSecret = this.ProcessorDetailsFormControls.ClientSecretFormControl.value;
4439
+ break;
4440
+ }
4441
+ break;
4442
+ case 'Proxy':
4443
+ app.Processor.InboundPath = this.ProcessorDetailsFormControls.InboundPathFormControl.value;
4444
+ app.LowCodeUnit = {
4445
+ Type: this.ProcessorDetailsFormControls.LCUType,
4446
+ };
4447
+ switch (app.LowCodeUnit.Type) {
4448
+ case 'API':
4449
+ app.LowCodeUnit.APIRoot = this.ProcessorDetailsFormControls.APIRootFormControl.value;
4450
+ app.LowCodeUnit.Security = this.ProcessorDetailsFormControls.SecurityFormControl.value;
4451
+ break;
4452
+ case 'SPA':
4453
+ app.LowCodeUnit.SPARoot = this.ProcessorDetailsFormControls.SPARootFormControl.value;
4454
+ break;
4455
+ }
4456
+ break;
4457
+ case 'Redirect':
4458
+ app.Processor.Permanent = !!this.ProcessorDetailsFormControls.PermanentFormControl.value;
4459
+ app.Processor.PreserveMethod = !!this.ProcessorDetailsFormControls.PreserveMethodFormControl.value;
4460
+ app.Processor.Redirect = this.ProcessorDetailsFormControls.RedirectFormControl.value;
4461
+ break;
4462
+ }
4463
+ if (!app.LookupConfig.PathRegex.startsWith('/')) {
4464
+ app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
4465
+ }
4466
+ const saveAppReq = {
4467
+ ProjectLookup: this.data.projectLookup,
4468
+ Application: app,
4469
+ ApplicationLookup: this.NewApplicationLookup,
4470
+ };
4471
+ // this.HasBuildFormControl.value && taken out from below if statement
4472
+ if (this.ProcessorDetailsFormControls.ProcessorType !== 'redirect' && this.ProcessorDetailsFormControls.LCUType === 'GitHub') {
4473
+ if (app) {
4474
+ app.LowCodeUnit.SourceControlLookup = this.ProcessorDetailsFormControls.SourceControlFormControl.value;
4475
+ }
4476
+ }
4477
+ else if (app) {
4478
+ app.LowCodeUnit.SourceControlLookup = null;
4479
+ }
4480
+ // console.log("Save new App request: ", saveAppReq);
4481
+ this.eacSvc.SaveApplicationAsCode(saveAppReq).then(res => {
4482
+ this.handleSaveStatus(res);
4483
+ });
4484
+ }
4485
+ handleSaveStatus(status) {
4486
+ console.log("event to save: ", status);
4487
+ if (status.Code === 0) {
4488
+ this.snackBar.open("Application Succesfully Created", "Dismiss", {
4279
4489
  duration: 5000
4280
4490
  });
4281
4491
  this.CloseDialog();
4282
4492
  }
4283
4493
  else {
4284
- this.ErrorMessage = event.Message;
4494
+ this.ErrorMessage = status.Message;
4495
+ }
4496
+ }
4497
+ }
4498
+ NewApplicationDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: NewApplicationDialogComponent, deps: [{ token: EaCService }, { token: i2$3.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i3$1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
4499
+ NewApplicationDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: NewApplicationDialogComponent, selector: "lcu-new-application-dialog", viewQueries: [{ propertyName: "ApplicationFormControls", first: true, predicate: EditApplicationFormComponent, descendants: true }, { propertyName: "ProcessorDetailsFormControls", first: true, predicate: ProcessorDetailsFormComponent, descendants: true }], ngImport: i0, template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Create Application</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n <lcu-edit-application-form \n [current-route]=\"data.currentRoute\"\n [editing-application]=\"NewApplication\"\n [has-save-button]=\"HasSaveButton\"\n >\n </lcu-edit-application-form>\n\n <lcu-processor-details-form \n [editing-application]=\"NewApplication\"\n [editing-application-lookup]=\"NewApplicationLookup\"\n [has-save-button]=\"HasSaveButton\"\n [source-control-lookups]=\"SourceControlLookups\"\n [project-lookup]=\"data.projectLookup\"\n >\n </lcu-processor-details-form>\n\n <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error>\n</mat-dialog-content>\n\n<mat-dialog-actions\n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\"\n >\n Cancel\n </button>\n\n\n <button \n *ngIf=\"ProcessorDetailsFormControls && ApplicationFormControls && !State?.Loading\"\n mat-raised-button \n color=\"primary\"\n fxFlex=\"25%\"\n class=\"new-app-submit\" \n (click)=\"SaveApplication()\"\n [disabled]=\"\n !ProcessorDetailsFormControls?.ProcessorDetailsFormGroup?.valid \n || \n !ApplicationFormControls?.ApplicationFormGroup?.valid\n \"\n >\n Save Application\n </button>\n</mat-dialog-actions>\n\n\n", styles: [""], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: EditApplicationFormComponent, selector: "lcu-edit-application-form", inputs: ["application-lookup", "current-route", "editing-application", "has-save-button", "project-lookup"], outputs: ["save-form-event"] }, { type: ProcessorDetailsFormComponent, selector: "lcu-processor-details-form", inputs: ["editing-application", "editing-application-lookup", "has-save-button", "source-control-lookups", "project-lookup"], outputs: ["save-form-event"] }], directives: [{ type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i2$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i2$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
4500
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: NewApplicationDialogComponent, decorators: [{
4501
+ type: Component,
4502
+ args: [{ selector: 'lcu-new-application-dialog', template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Create Application</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n <lcu-edit-application-form \n [current-route]=\"data.currentRoute\"\n [editing-application]=\"NewApplication\"\n [has-save-button]=\"HasSaveButton\"\n >\n </lcu-edit-application-form>\n\n <lcu-processor-details-form \n [editing-application]=\"NewApplication\"\n [editing-application-lookup]=\"NewApplicationLookup\"\n [has-save-button]=\"HasSaveButton\"\n [source-control-lookups]=\"SourceControlLookups\"\n [project-lookup]=\"data.projectLookup\"\n >\n </lcu-processor-details-form>\n\n <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error>\n</mat-dialog-content>\n\n<mat-dialog-actions\n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\"\n >\n Cancel\n </button>\n\n\n <button \n *ngIf=\"ProcessorDetailsFormControls && ApplicationFormControls && !State?.Loading\"\n mat-raised-button \n color=\"primary\"\n fxFlex=\"25%\"\n class=\"new-app-submit\" \n (click)=\"SaveApplication()\"\n [disabled]=\"\n !ProcessorDetailsFormControls?.ProcessorDetailsFormGroup?.valid \n || \n !ApplicationFormControls?.ApplicationFormGroup?.valid\n \"\n >\n Save Application\n </button>\n</mat-dialog-actions>\n\n\n", styles: [""] }]
4503
+ }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialogRef }, { type: undefined, decorators: [{
4504
+ type: Inject,
4505
+ args: [MAT_DIALOG_DATA]
4506
+ }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { ApplicationFormControls: [{
4507
+ type: ViewChild,
4508
+ args: [EditApplicationFormComponent]
4509
+ }], ProcessorDetailsFormControls: [{
4510
+ type: ViewChild,
4511
+ args: [ProcessorDetailsFormComponent]
4512
+ }] } });
4513
+
4514
+ class GhControlComponent {
4515
+ constructor(eacSvc, dialog) {
4516
+ this.eacSvc = eacSvc;
4517
+ this.dialog = dialog;
4518
+ this.InputLabel = "Create Pull Request";
4519
+ this.SkeletonEffect = "wave";
4520
+ this.selectedBtn = "pr-btn";
4521
+ }
4522
+ get ActiveEnvironmentLookup() {
4523
+ // TODO: Eventually support multiple environments
4524
+ const envLookups = Object.keys(this.State?.EaC?.Environments || {});
4525
+ return envLookups[0];
4526
+ }
4527
+ get State() {
4528
+ return this.eacSvc.State;
4529
+ }
4530
+ ngOnInit() {
4531
+ }
4532
+ ngAfterViewInit() {
4533
+ this.addSelectBtn();
4534
+ }
4535
+ CreateFeatureBranch() {
4536
+ this.removeSelectedBtn();
4537
+ this.InputLabel = "Create Feature Branch";
4538
+ this.selectedBtn = "fb-btn";
4539
+ this.addSelectBtn();
4540
+ console.log("create feature branch selected");
4541
+ }
4542
+ OpenIssue() {
4543
+ this.removeSelectedBtn();
4544
+ this.InputLabel = "Open Issue";
4545
+ this.selectedBtn = "oi-btn";
4546
+ this.addSelectBtn();
4547
+ console.log("open issue selected");
4548
+ }
4549
+ CreatePullRequest() {
4550
+ this.removeSelectedBtn();
4551
+ this.InputLabel = "Create Pull Request";
4552
+ this.selectedBtn = "pr-btn";
4553
+ this.addSelectBtn();
4554
+ console.log("create pull request selected");
4555
+ }
4556
+ CreateNewApp() {
4557
+ const dialogRef = this.dialog.open(NewApplicationDialogComponent, {
4558
+ width: '600px',
4559
+ data: {
4560
+ environmentLookup: this.ActiveEnvironmentLookup,
4561
+ },
4562
+ });
4563
+ dialogRef.afterClosed().subscribe((result) => {
4564
+ // console.log('The dialog was closed');
4565
+ // console.log("result:", result)
4566
+ });
4567
+ }
4568
+ RouteToPath(path) {
4569
+ window.location.href = path;
4570
+ }
4571
+ Submit() {
4572
+ console.log("submitting: ", this.value);
4573
+ switch (this.selectedBtn) {
4574
+ case "pr-btn":
4575
+ //Pull request
4576
+ console.log("creating pull request: ", this.value);
4577
+ break;
4578
+ case "oi-btn":
4579
+ //Open Issue
4580
+ console.log("Open issue: ", this.value);
4581
+ break;
4582
+ case "fb-btn":
4583
+ //Feature Branch
4584
+ console.log("creating feature branch: ", this.value);
4585
+ break;
4586
+ default:
4587
+ console.log("hmm");
4588
+ break;
4285
4589
  }
4286
4590
  }
4287
- SaveSourceControl() {
4288
- this.DevopsSourceControl.SaveSourceControl();
4591
+ //HELPERS
4592
+ addSelectBtn() {
4593
+ // (<HTMLElement>document.getElementById(this.selectedBtn)).classList.add('selected');
4594
+ }
4595
+ removeSelectedBtn() {
4596
+ // (<HTMLElement>document.getElementById(this.selectedBtn)).classList.remove('selected');
4289
4597
  }
4290
4598
  }
4291
- SourceControlDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SourceControlDialogComponent, deps: [{ token: i2$3.MatDialogRef }, { token: EaCService }, { token: MAT_DIALOG_DATA }, { token: i3$1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
4292
- SourceControlDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: SourceControlDialogComponent, selector: "lcu-source-control-dialog", viewQueries: [{ propertyName: "DevopsSourceControl", first: true, predicate: DevopsSourceControlFormComponent, descendants: true }], ngImport: i0, template: "\n<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Source Control</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n <ng-container *ngIf=\"!HasConnection\">\n \n <lcu-git-auth></lcu-git-auth>\n\n </ng-container>\n\n <ng-conatiner *ngIf=\"HasConnection\" fxLayout=\"column\">\n\n <div fxLayoutAlign=\"center center\">\n <lcu-devops-source-control-form\n [environment]=\"data.environment\"\n [environment-lookup]=\"data.environmentLookup\"\n [editing-source-control-lookup]=\"data.scLookup\"\n (save-status-event)=\"HandleSaveStatusEvent($event)\">\n </lcu-devops-source-control-form>\n </div>\n \n <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error>\n\n </ng-conatiner>\n\n</mat-dialog-content>\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n class=\"action-button\"\n mat-raised-button \n *ngIf=\"!State?.Loading\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveSourceControl()\"\n [disabled]=\"!DevOpsSourceControlFormGroup?.valid || !DevOpsSourceControlFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>\n\n\n\n", styles: [".dialog-header{width:100%}.action-button{margin:0 10px}\n"], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: GitAuthComponent, selector: "lcu-git-auth" }, { type: DevopsSourceControlFormComponent, selector: "lcu-devops-source-control-form", inputs: ["editing-source-control-lookup", "environment", "environment-lookup"], outputs: ["save-status-event"] }], directives: [{ type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i2$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i4$1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i2$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
4293
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SourceControlDialogComponent, decorators: [{
4599
+ GhControlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: GhControlComponent, deps: [{ token: EaCService }, { token: i2$3.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
4600
+ GhControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: GhControlComponent, selector: "lcu-gh-control", ngImport: i0, template: "<mat-card class=\"social-card\" *ngIf=\"false\">\n <ng-container *ngIf=\"!State?.Loading\">\n <div class=\"gh-card-container\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <mat-icon fxFlex=\"15%\" class=\"gh-icon\">error_outline</mat-icon>\n <div fxFlex=\"70%\" class=\"gh-card-main-content\">\n <mat-form-field appearance=\"fill\" class=\"gh-input\">\n <mat-label>{{ InputLabel }}</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"value\" />\n <!-- <button *ngIf=\"value\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"value=''\">\n <mat-icon>close</mat-icon>\n </button> -->\n </mat-form-field>\n </div>\n\n <button\n fxFlex=\"15%\"\n mat-button\n (click)=\"Submit()\"\n id=\"submit-btn\"\n color=\"primary\"\n >\n Submit\n </button>\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <button mat-button (click)=\"CreatePullRequest()\" id=\"pr-btn\">\n Pull Request\n </button>\n <button mat-button (click)=\"OpenIssue()\" id=\"oi-btn\">Open Issue</button>\n <button mat-button (click)=\"CreateFeatureBranch()\" id=\"fb-btn\">\n Feature Branch\n </button>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"menu\">\n <mat-icon>more_horiz</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button class=\"gh-menu-action\" mat-menu-item (click)=\"CreateNewApp()\">\n Create New App\n </button>\n\n <button\n class=\"gh-menu-action\"\n mat-menu-item\n (click)=\"RouteToPath('/dashboard/create-project')\"\n >\n Create Project\n </button>\n </mat-menu>\n </mat-card-actions>\n </ng-container>\n\n <!-- SKELETON -->\n <ng-container *ngIf=\"State?.Loading\">\n <div id=\"gh-card-skeleton\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <skeleton-avatar\n class=\"gh-icon\"\n [showIcon]=\"false\"\n [effect]=\"SkeletonEffect\"\n ></skeleton-avatar>\n\n <div fxFlex=\"70%\" class=\"gh-card-main-content\">\n <skeleton-block\n height=\"60px\"\n [effect]=\"SkeletonEffect\"\n ></skeleton-block>\n </div>\n\n <div\n skeleton-text\n fxFlex=\"15%\"\n [effect]=\"SkeletonEffect\"\n style=\"margin: 0px 10px\"\n >\n Submit\n </div>\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Pull Request</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Open Issue</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Feature Branch</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">\n <mat-icon>more_horiz</mat-icon>\n </div>\n </div>\n </ng-container>\n</mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:25px;width:25px;font-size:25px;cursor:pointer}.gh-icon{width:60px;height:60px;font-size:60px;text-align:center}.gh-input{width:90%}.selected{border:1px solid green}.gh-input ::ng-deep .mat-form-field-flex{border:1px solid;border-radius:30px!important}.gh-input ::ng-deep .mat-form-field-wrapper{padding-bottom:0!important}.gh-input ::ng-deep .mat-form-field-underline{display:none}\n"], components: [{ type: i1$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i7$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i4$3.SkeletonAvatarComponent, selector: "skeleton-avatar", inputs: ["size", "color", "showIcon", "iconColor", "borderRadius", "effect"] }, { type: i4$3.SkeletonBlockComponent, selector: "skeleton-block", inputs: ["width", "height", "effect", "borderRadius"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i4$1.MatLabel, selector: "mat-label" }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i7$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i4$3.SkeletonTextDirective, selector: "[skeleton-text]", inputs: ["effect"] }] });
4601
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: GhControlComponent, decorators: [{
4294
4602
  type: Component,
4295
- args: [{ selector: 'lcu-source-control-dialog', template: "\n<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Source Control</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n <ng-container *ngIf=\"!HasConnection\">\n \n <lcu-git-auth></lcu-git-auth>\n\n </ng-container>\n\n <ng-conatiner *ngIf=\"HasConnection\" fxLayout=\"column\">\n\n <div fxLayoutAlign=\"center center\">\n <lcu-devops-source-control-form\n [environment]=\"data.environment\"\n [environment-lookup]=\"data.environmentLookup\"\n [editing-source-control-lookup]=\"data.scLookup\"\n (save-status-event)=\"HandleSaveStatusEvent($event)\">\n </lcu-devops-source-control-form>\n </div>\n \n <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error>\n\n </ng-conatiner>\n\n</mat-dialog-content>\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n class=\"action-button\"\n mat-raised-button \n *ngIf=\"!State?.Loading\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveSourceControl()\"\n [disabled]=\"!DevOpsSourceControlFormGroup?.valid || !DevOpsSourceControlFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>\n\n\n\n", styles: [".dialog-header{width:100%}.action-button{margin:0 10px}\n"] }]
4296
- }], ctorParameters: function () { return [{ type: i2$3.MatDialogRef }, { type: EaCService }, { type: undefined, decorators: [{
4297
- type: Inject,
4298
- args: [MAT_DIALOG_DATA]
4299
- }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { DevopsSourceControl: [{
4300
- type: ViewChild,
4301
- args: [DevopsSourceControlFormComponent]
4302
- }] } });
4603
+ args: [{ selector: 'lcu-gh-control', template: "<mat-card class=\"social-card\" *ngIf=\"false\">\n <ng-container *ngIf=\"!State?.Loading\">\n <div class=\"gh-card-container\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <mat-icon fxFlex=\"15%\" class=\"gh-icon\">error_outline</mat-icon>\n <div fxFlex=\"70%\" class=\"gh-card-main-content\">\n <mat-form-field appearance=\"fill\" class=\"gh-input\">\n <mat-label>{{ InputLabel }}</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"value\" />\n <!-- <button *ngIf=\"value\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"value=''\">\n <mat-icon>close</mat-icon>\n </button> -->\n </mat-form-field>\n </div>\n\n <button\n fxFlex=\"15%\"\n mat-button\n (click)=\"Submit()\"\n id=\"submit-btn\"\n color=\"primary\"\n >\n Submit\n </button>\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <button mat-button (click)=\"CreatePullRequest()\" id=\"pr-btn\">\n Pull Request\n </button>\n <button mat-button (click)=\"OpenIssue()\" id=\"oi-btn\">Open Issue</button>\n <button mat-button (click)=\"CreateFeatureBranch()\" id=\"fb-btn\">\n Feature Branch\n </button>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"menu\">\n <mat-icon>more_horiz</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button class=\"gh-menu-action\" mat-menu-item (click)=\"CreateNewApp()\">\n Create New App\n </button>\n\n <button\n class=\"gh-menu-action\"\n mat-menu-item\n (click)=\"RouteToPath('/dashboard/create-project')\"\n >\n Create Project\n </button>\n </mat-menu>\n </mat-card-actions>\n </ng-container>\n\n <!-- SKELETON -->\n <ng-container *ngIf=\"State?.Loading\">\n <div id=\"gh-card-skeleton\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <skeleton-avatar\n class=\"gh-icon\"\n [showIcon]=\"false\"\n [effect]=\"SkeletonEffect\"\n ></skeleton-avatar>\n\n <div fxFlex=\"70%\" class=\"gh-card-main-content\">\n <skeleton-block\n height=\"60px\"\n [effect]=\"SkeletonEffect\"\n ></skeleton-block>\n </div>\n\n <div\n skeleton-text\n fxFlex=\"15%\"\n [effect]=\"SkeletonEffect\"\n style=\"margin: 0px 10px\"\n >\n Submit\n </div>\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Pull Request</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Open Issue</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Feature Branch</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">\n <mat-icon>more_horiz</mat-icon>\n </div>\n </div>\n </ng-container>\n</mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:25px;width:25px;font-size:25px;cursor:pointer}.gh-icon{width:60px;height:60px;font-size:60px;text-align:center}.gh-input{width:90%}.selected{border:1px solid green}.gh-input ::ng-deep .mat-form-field-flex{border:1px solid;border-radius:30px!important}.gh-input ::ng-deep .mat-form-field-wrapper{padding-bottom:0!important}.gh-input ::ng-deep .mat-form-field-underline{display:none}\n"] }]
4604
+ }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialog }]; } });
4303
4605
 
4304
- class MainFeedCardComponent {
4305
- constructor(eacSvc, dialog, sanitizer) {
4606
+ class DevopsSourceControlFormComponent {
4607
+ // Constructors
4608
+ constructor(appsFlowSvc, eacSvc, formBuilder) {
4609
+ this.appsFlowSvc = appsFlowSvc;
4306
4610
  this.eacSvc = eacSvc;
4307
- this.dialog = dialog;
4308
- this.sanitizer = sanitizer;
4611
+ this.formBuilder = formBuilder;
4612
+ this.SeparatorKeysCodes = [ENTER, COMMA];
4613
+ this.SaveStatusEvent = new EventEmitter();
4614
+ this.BuildPath = null;
4615
+ this.HostingDetails = new ProjectHostingDetails();
4616
+ this.SelectedBranches = [];
4617
+ this.SourceControlRoot = '';
4618
+ this.SkeletonEffect = "wave";
4619
+ this.UseBranches = true;
4620
+ this.UseBuildPath = false;
4309
4621
  }
4310
- get ActiveEnvironment() {
4311
- return this.State?.EaC?.Environments[this.ActiveEnvironmentLookup];
4622
+ // Properties
4623
+ get ArtifactLookups() {
4624
+ return this.DevOpsAction?.ArtifactLookups;
4312
4625
  }
4313
- get ActiveEnvironmentLookup() {
4314
- // TODO: Eventually support multiple environments
4315
- const envLookups = Object.keys(this.State?.EaC?.Environments || {});
4316
- return envLookups[0];
4626
+ get ArtifactLookup() {
4627
+ const artLookup = this.DevOpsAction?.ArtifactLookups
4628
+ ? this.DevOpsAction?.ArtifactLookups[0]
4629
+ : null;
4630
+ return artLookup;
4317
4631
  }
4318
- get Environment() {
4319
- // console.log("Ent Environment var: ", this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment]);
4320
- return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
4632
+ get Artifact() {
4633
+ return this.Environment?.Artifacts && this.ArtifactLookup
4634
+ ? this.Environment?.Artifacts[this.ArtifactLookup] || {}
4635
+ : {};
4321
4636
  }
4322
- get Icon() {
4323
- if (this.FeedItem.Status.Code === 0) {
4324
- return 'check_circle';
4325
- }
4326
- else if (this.FeedItem.Status.Code === 1) {
4327
- return 'cancel';
4637
+ get BranchesFormControl() {
4638
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'branches');
4639
+ }
4640
+ get BuildPathFormControl() {
4641
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'buildPath');
4642
+ }
4643
+ get DevOpsActionLookups() {
4644
+ // console.log(this.DevOpsActions);
4645
+ return Object.keys(this.DevOpsActions || {});
4646
+ }
4647
+ get DevOpsAction() {
4648
+ return this.Environment.DevOpsActions && this.DevOpsActionLookup
4649
+ ? this.Environment.DevOpsActions[this.DevOpsActionLookup] || {}
4650
+ : {};
4651
+ }
4652
+ get DevOpsActionLookup() {
4653
+ if (!!this.DevOpsActionLookupFormControl?.value) {
4654
+ return this.DevOpsActionLookupFormControl.value;
4328
4655
  }
4329
- else if (this.FeedItem.Status.Code === 2) {
4330
- return 'sync';
4656
+ if (!!this.EditingSourceControl?.DevOpsActionTriggerLookups) {
4657
+ return this.EditingSourceControl?.DevOpsActionTriggerLookups[0];
4331
4658
  }
4332
4659
  else {
4333
- return 'help_outline';
4660
+ return null;
4334
4661
  }
4335
4662
  }
4336
- get IconColor() {
4337
- if (this.FeedItem.Status.Code === 0) {
4338
- return 'green';
4339
- }
4340
- else if (this.FeedItem.Status.Code === 1) {
4341
- return 'red';
4342
- }
4343
- else if (this.FeedItem.Status.Code === 2) {
4344
- return 'blue';
4345
- }
4346
- else {
4347
- return 'gray';
4663
+ get DevOpsActionLookupFormControl() {
4664
+ return this.DevOpsSourceControlFormGroup.get('devOpsActionLookup');
4665
+ }
4666
+ get DevOpsActions() {
4667
+ return this.Environment.DevOpsActions || {};
4668
+ }
4669
+ get EditingSourceControl() {
4670
+ let sc = this.Environment?.Sources
4671
+ ? this.Environment?.Sources[this.EditingSourceControlLookup]
4672
+ : null;
4673
+ if (sc == null && this.EditingSourceControlLookup) {
4674
+ sc = {};
4348
4675
  }
4676
+ return sc;
4677
+ }
4678
+ get MainBranchFormControl() {
4679
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'mainBranch');
4680
+ }
4681
+ get OrganizationFormControl() {
4682
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'organization');
4683
+ }
4684
+ get RepositoryFormControl() {
4685
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'repository');
4349
4686
  }
4350
4687
  get State() {
4351
4688
  return this.eacSvc.State;
4352
4689
  }
4353
4690
  // Life Cycle
4691
+ ngAfterViewInit() { }
4692
+ ngOnDestroy() {
4693
+ this.destroyFormControls();
4694
+ }
4354
4695
  ngOnInit() {
4355
- this.handleRefresh();
4696
+ console.log("source control lookup", this.EditingSourceControlLookup);
4697
+ if (this.EditingSourceControlLookup === null) {
4698
+ this.CreateNewSourceControl();
4699
+ }
4700
+ console.log("source control", this.EditingSourceControl);
4701
+ if (this.EditingSourceControl != null) {
4702
+ this.DevOpsSourceControlFormGroup = this.formBuilder.group({});
4703
+ this.setupFormControls();
4704
+ }
4705
+ this.RefreshOrganizations();
4356
4706
  }
4357
4707
  // API Methods
4358
- CalculateTimelapse(timestamp) {
4359
- return moment(timestamp).fromNow();
4708
+ AddBranchOption(event) {
4709
+ this.addBranchOption(event.value);
4710
+ event.input.value = '';
4360
4711
  }
4361
- HandleAction(action) {
4362
- if (action.ActionType == 'Link') {
4363
- if (action.Action.startsWith('http')) {
4364
- window.open(action.Action, '_blank');
4365
- }
4366
- else {
4367
- window.location.href = action.Action;
4368
- }
4369
- }
4370
- else if (action.ActionType == 'Modal') {
4371
- if (action.Action == 'AddSourceControl') {
4372
- this.OpenSourceControlDialog(null);
4373
- }
4374
- else {
4375
- alert('other modaled ' + action.Action);
4376
- }
4377
- }
4712
+ BranchOptionSelected(event) {
4713
+ this.addBranchOption(event.option.value);
4378
4714
  }
4379
- OpenSourceControlDialog(scLookup) {
4380
- const dialogRef = this.dialog.open(SourceControlDialogComponent, {
4381
- width: '550px',
4382
- data: {
4383
- environment: this.Environment,
4384
- environmentLookup: this.ActiveEnvironmentLookup,
4385
- scLookup: scLookup,
4386
- },
4387
- });
4388
- dialogRef.afterClosed().subscribe((result) => {
4389
- // console.log('The dialog was closed');
4390
- // console.log("result:", result)
4391
- });
4715
+ BranchesChanged(branches) {
4716
+ this.loadProjectHostingDetails();
4392
4717
  }
4393
- SafeHtml(html) {
4394
- return this.sanitizer.bypassSecurityTrustHtml(html);
4718
+ BuildPathChanged(event) {
4719
+ //do something??
4395
4720
  }
4396
- // Helpers
4397
- handleRefresh() {
4398
- if (this.FeedItem?.RefreshLink) {
4399
- setTimeout(() => {
4400
- this.eacSvc.CheckUserFeedItem(this.FeedItem).subscribe(async (response) => {
4401
- if (response.Status.Code === 0) {
4402
- this.FeedItem = response.Model;
4403
- this.handleRefresh();
4404
- }
4405
- else {
4406
- console.log(response);
4407
- }
4408
- }, (err) => {
4409
- console.log(err);
4410
- });
4411
- }, 5000);
4412
- }
4721
+ CreateNewSourceControl() {
4722
+ this.SetEditingSourceControl(Guid.CreateRaw());
4413
4723
  }
4414
- }
4415
- MainFeedCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MainFeedCardComponent, deps: [{ token: EaCService }, { token: i2$3.MatDialog }, { token: i3$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
4416
- MainFeedCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: MainFeedCardComponent, selector: "lcu-main-feed-card", inputs: { FeedItem: ["feed-item", "FeedItem"] }, ngImport: i0, template: "<mat-card class=\"social-card\">\n <mat-card-header>\n <img\n mat-card-avatar\n class=\"example-header-image\"\n [src]=\"FeedItem.Avatar\"\n *ngIf=\"FeedItem.Avatar\"\n />\n\n <mat-card-title *ngIf=\"FeedItem.Title\">{{ FeedItem.Title }}</mat-card-title>\n\n <mat-card-subtitle>\n <div *ngIf=\"FeedItem.Subtitle\">{{ FeedItem.Subtitle }}</div>\n\n <div *ngIf=\"FeedItem.Subtext\">{{ FeedItem.Subtext }}</div>\n\n <div *ngIf=\"FeedItem.Status\">\n <mat-icon\n *ngIf=\"Icon\"\n [style.color]=\"IconColor\"\n [class.spin]=\"FeedItem.Status?.Code == 2\"\n >\n {{ Icon }}\n </mat-icon>\n\n <span *ngIf=\"FeedItem.Timestamp\">\n {{ CalculateTimelapse(FeedItem.Timestamp) }}\n </span>\n </div>\n </mat-card-subtitle>\n </mat-card-header>\n\n <div *ngIf=\"!FeedItem.IsShortForm\">\n <div class=\"feed-card-container\">\n <div class=\"feed-card-main-content\">\n <mat-tab-group>\n <ng-container *ngFor=\"let tab of FeedItem.Tabs\">\n <mat-tab [label]=\"tab.Title\">\n <div class=\"tab\">\n <ng-container *ngIf=\"tab.Data?.Commit?.Message\">\n <div class=\"commit-message\">\n {{ tab.Data?.Commit?.Message }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"tab.Data?.Content\">\n <div class=\"content\">\n {{ tab.Data?.Content }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"tab.Data?.Video\">\n <div\n class=\"video\"\n [innerHTML]=\"SafeHtml(tab.Data.Video)\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"tab.Data?.Comments\">\n <div class=\"comments\">\n <ng-container *ngIf=\"tab.Data?.Comments?.length <= 0\">\n <h4>No comments provided</h4>\n </ng-container>\n\n <mat-card *ngFor=\"let comment of tab.Data?.Comments\">\n <mat-card-header>\n <img\n mat-card-avatar\n class=\"example-header-image\"\n [src]=\"comment.Avatar\"\n *ngIf=\"comment.Avatar\"\n />\n\n <mat-card-title>\n {{ comment.Author }}\n commented on\n {{ comment.UpdatedAt }}\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n {{ comment.Comment }}\n </mat-card-content>\n </mat-card>\n </div>\n </ng-container>\n </div>\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n </div>\n </div>\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div fxFlex></div>\n\n <ng-container *ngFor=\"let action of FeedItem.Actions\">\n <button mat-button [color]=\"action.Color\" (click)=\"HandleAction(action)\">\n <mat-icon *ngIf=\"action.Icon\">{{ action.Icon }}</mat-icon>\n\n {{ action.Text }}\n </button>\n </ng-container>\n </mat-card-actions>\n</mat-card>\n", styles: [":host :host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host :host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host :host ::ng-deep .main-slot-container{padding:10px}:host :host ::ng-deep .slot-header{align-items:center}:host :host ::ng-deep .slot-content{width:100%}:host :host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host :host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host :host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host :host ::ng-deep .action-icon{height:24px;width:24px;font-size:24px;cursor:pointer}:host .example-header-image{background-size:cover}:host .mat-icon{display:inline-flex;vertical-align:middle}:host .mat-icon.spin{animation:rotate 1s ease-in-out infinite}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}:host .tab{margin:2em}:host .tab .video iframe{display:block;margin:auto}\n"], components: [{ type: i1$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i1$1.MatCardHeader, selector: "mat-card-header" }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2$2.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i2$2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { type: i1$1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i1$1.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1$1.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i1$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
4417
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MainFeedCardComponent, decorators: [{
4418
- type: Component,
4419
- args: [{ selector: 'lcu-main-feed-card', template: "<mat-card class=\"social-card\">\n <mat-card-header>\n <img\n mat-card-avatar\n class=\"example-header-image\"\n [src]=\"FeedItem.Avatar\"\n *ngIf=\"FeedItem.Avatar\"\n />\n\n <mat-card-title *ngIf=\"FeedItem.Title\">{{ FeedItem.Title }}</mat-card-title>\n\n <mat-card-subtitle>\n <div *ngIf=\"FeedItem.Subtitle\">{{ FeedItem.Subtitle }}</div>\n\n <div *ngIf=\"FeedItem.Subtext\">{{ FeedItem.Subtext }}</div>\n\n <div *ngIf=\"FeedItem.Status\">\n <mat-icon\n *ngIf=\"Icon\"\n [style.color]=\"IconColor\"\n [class.spin]=\"FeedItem.Status?.Code == 2\"\n >\n {{ Icon }}\n </mat-icon>\n\n <span *ngIf=\"FeedItem.Timestamp\">\n {{ CalculateTimelapse(FeedItem.Timestamp) }}\n </span>\n </div>\n </mat-card-subtitle>\n </mat-card-header>\n\n <div *ngIf=\"!FeedItem.IsShortForm\">\n <div class=\"feed-card-container\">\n <div class=\"feed-card-main-content\">\n <mat-tab-group>\n <ng-container *ngFor=\"let tab of FeedItem.Tabs\">\n <mat-tab [label]=\"tab.Title\">\n <div class=\"tab\">\n <ng-container *ngIf=\"tab.Data?.Commit?.Message\">\n <div class=\"commit-message\">\n {{ tab.Data?.Commit?.Message }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"tab.Data?.Content\">\n <div class=\"content\">\n {{ tab.Data?.Content }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"tab.Data?.Video\">\n <div\n class=\"video\"\n [innerHTML]=\"SafeHtml(tab.Data.Video)\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"tab.Data?.Comments\">\n <div class=\"comments\">\n <ng-container *ngIf=\"tab.Data?.Comments?.length <= 0\">\n <h4>No comments provided</h4>\n </ng-container>\n\n <mat-card *ngFor=\"let comment of tab.Data?.Comments\">\n <mat-card-header>\n <img\n mat-card-avatar\n class=\"example-header-image\"\n [src]=\"comment.Avatar\"\n *ngIf=\"comment.Avatar\"\n />\n\n <mat-card-title>\n {{ comment.Author }}\n commented on\n {{ comment.UpdatedAt }}\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n {{ comment.Comment }}\n </mat-card-content>\n </mat-card>\n </div>\n </ng-container>\n </div>\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n </div>\n </div>\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div fxFlex></div>\n\n <ng-container *ngFor=\"let action of FeedItem.Actions\">\n <button mat-button [color]=\"action.Color\" (click)=\"HandleAction(action)\">\n <mat-icon *ngIf=\"action.Icon\">{{ action.Icon }}</mat-icon>\n\n {{ action.Text }}\n </button>\n </ng-container>\n </mat-card-actions>\n</mat-card>\n", styles: [":host :host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host :host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host :host ::ng-deep .main-slot-container{padding:10px}:host :host ::ng-deep .slot-header{align-items:center}:host :host ::ng-deep .slot-content{width:100%}:host :host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host :host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host :host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host :host ::ng-deep .action-icon{height:24px;width:24px;font-size:24px;cursor:pointer}:host .example-header-image{background-size:cover}:host .mat-icon{display:inline-flex;vertical-align:middle}:host .mat-icon.spin{animation:rotate 1s ease-in-out infinite}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}:host .tab{margin:2em}:host .tab .video iframe{display:block;margin:auto}\n"] }]
4420
- }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialog }, { type: i3$2.DomSanitizer }]; }, propDecorators: { FeedItem: [{
4421
- type: Input,
4422
- args: ['feed-item']
4423
- }] } });
4424
-
4425
- class TwoColumnHeaderComponent {
4426
- constructor() { }
4427
- ngOnInit() {
4724
+ CreateRepository() {
4725
+ this.CreatingRepository = true;
4726
+ this.RepositoryFormControl.reset();
4428
4727
  }
4429
- }
4430
- TwoColumnHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TwoColumnHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4431
- TwoColumnHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TwoColumnHeaderComponent, selector: "lcu-two-column-header", ngImport: i0, template: "<div class=\"col-container\" fxLayout=\"row\">\n\n <div class=\"col-left\" fxFlex=\"15%\" >\n <ng-content select=\"[left]\"></ng-content>\n </div>\n\n <div class=\"col-center\" fxFlex=\"85%\">\n <ng-content></ng-content>\n </div>\n\n</div>\n", styles: [".col-container{background-color:#ebecf0}.col-left{min-width:210px}\n"], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
4432
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TwoColumnHeaderComponent, decorators: [{
4433
- type: Component,
4434
- args: [{ selector: 'lcu-two-column-header', template: "<div class=\"col-container\" fxLayout=\"row\">\n\n <div class=\"col-left\" fxFlex=\"15%\" >\n <ng-content select=\"[left]\"></ng-content>\n </div>\n\n <div class=\"col-center\" fxFlex=\"85%\">\n <ng-content></ng-content>\n </div>\n\n</div>\n", styles: [".col-container{background-color:#ebecf0}.col-left{min-width:210px}\n"] }]
4435
- }], ctorParameters: function () { return []; } });
4436
-
4437
- class CardCarouselComponent {
4438
- constructor() {
4439
- this.carouselIndex = 0;
4728
+ CancelCreateRepository() {
4729
+ this.CreatingRepository = false;
4440
4730
  }
4441
- ngOnInit() {
4731
+ DevOpsActionLookupChanged(event) {
4732
+ this.configureDevOpsAction();
4442
4733
  }
4443
- ngAfterViewInit() {
4444
- this.assignCarouselClass();
4734
+ MainBranchChanged(event) {
4735
+ this.emitBranchesChanged();
4445
4736
  }
4446
- LeftChevronClicked() {
4447
- this.removeCarouselClasses();
4448
- if (this.carouselIndex === 0) {
4449
- this.carouselIndex = this.Stats.length - 1;
4737
+ OrganizationChanged(event) {
4738
+ const org = this.OrganizationFormControl;
4739
+ this.RepositoryFormControl.reset();
4740
+ if (this.UseBranches) {
4741
+ this.BranchesFormControl.reset();
4742
+ this.SelectedBranches = [];
4450
4743
  }
4451
- else {
4452
- this.carouselIndex--;
4744
+ this.listRepositories();
4745
+ }
4746
+ RefreshOrganizations() {
4747
+ // this.Loading = true;
4748
+ this.listOrganizations();
4749
+ this.OrganizationFormControl?.reset();
4750
+ this.RepositoryFormControl?.reset();
4751
+ if (this.UseBranches) {
4752
+ this.BranchesFormControl?.reset();
4453
4753
  }
4454
- this.assignCarouselClass();
4455
4754
  }
4456
- MoreDetailsClicked() {
4457
- console.log("More details clicked on carousel item", this.Stats[this.carouselIndex]);
4755
+ RemoveBranchOption(option) {
4756
+ const index = this.SelectedBranches.indexOf(option);
4757
+ if (index >= 0) {
4758
+ this.SelectedBranches.splice(index, 1);
4759
+ }
4760
+ this.emitBranchesChanged();
4458
4761
  }
4459
- RightChevronClicked() {
4460
- this.removeCarouselClasses();
4461
- if (this.carouselIndex === this.Stats.length - 1) {
4462
- this.carouselIndex = 0;
4762
+ RepositoryChanged(event) {
4763
+ const repo = this.RepositoryFormControl;
4764
+ if (this.UseBranches) {
4765
+ this.BranchesFormControl.reset();
4766
+ this.SelectedBranches = [];
4767
+ this.listBranches();
4463
4768
  }
4464
- else {
4465
- this.carouselIndex++;
4769
+ if (!this.UseBranches) {
4770
+ this.listBuildPaths();
4466
4771
  }
4467
- this.assignCarouselClass();
4468
4772
  }
4469
- //HELPERS
4470
- removeCarouselClasses() {
4471
- for (let i = 0; i < this.Stats.length; i++) {
4472
- if (i === this.carouselIndex) {
4473
- document.getElementById("carousel-" + this.carouselIndex).classList.remove('active');
4773
+ SaveRepository() {
4774
+ this.Loading = true;
4775
+ const org = this.OrganizationFormControl.value;
4776
+ const repoName = this.RepositoryFormControl.value;
4777
+ this.appsFlowSvc
4778
+ .CreateRepository(org, repoName)
4779
+ .subscribe((response) => {
4780
+ if (response.Status.Code === 0) {
4781
+ this.listRepositories(repoName);
4782
+ this.CreatingRepository = false;
4474
4783
  }
4475
4784
  else {
4476
- document.getElementById("carousel-" + i).classList.remove('hidden');
4785
+ // TODO: Need to surface an error to the user...
4786
+ this.Loading = false;
4477
4787
  }
4478
- }
4788
+ });
4479
4789
  }
4480
- assignCarouselClass() {
4481
- for (let i = 0; i < this.Stats.length; i++) {
4482
- if (i === this.carouselIndex) {
4483
- document.getElementById("carousel-" + this.carouselIndex).classList.add('active');
4484
- }
4485
- else {
4486
- document.getElementById("carousel-" + i).classList.add('hidden');
4487
- }
4790
+ SetEditingSourceControl(scLookup) {
4791
+ this.EditingSourceControlLookup = scLookup;
4792
+ }
4793
+ SubmitSourceControl() {
4794
+ console.log('source control submitted: ', this.DevOpsSourceControlFormGroup.value);
4795
+ this.SaveSourceControl();
4796
+ }
4797
+ SaveSourceControl() {
4798
+ const saveEnvReq = {
4799
+ Environment: {
4800
+ ...this.Environment,
4801
+ Sources: this.Environment.Sources || {},
4802
+ },
4803
+ EnvironmentLookup: this.EnvironmentLookup,
4804
+ EnterpriseDataTokens: {},
4805
+ };
4806
+ let source = {
4807
+ ...this.EditingSourceControl,
4808
+ Branches: this.SelectedBranches,
4809
+ MainBranch: this.MainBranchFormControl.value,
4810
+ };
4811
+ source = {
4812
+ ...source,
4813
+ Type: 'GitHub',
4814
+ Name: `@${this.OrganizationFormControl.value}/${this.RepositoryFormControl.value}`,
4815
+ DevOpsActionTriggerLookups: [this.DevOpsActionLookup],
4816
+ Organization: this.OrganizationFormControl.value,
4817
+ Repository: this.RepositoryFormControl.value,
4818
+ };
4819
+ const scLookup = `github://${source.Organization}/${source.Repository}`;
4820
+ saveEnvReq.Environment.Sources[scLookup] = source;
4821
+ console.log('save SC: ', saveEnvReq);
4822
+ let resp = this.eacSvc.SaveEnvironmentAsCode(saveEnvReq);
4823
+ resp.then((res) => {
4824
+ this.SaveStatusEvent.emit(res);
4825
+ });
4826
+ }
4827
+ // Helpers
4828
+ addBranchOption(value) {
4829
+ value = (value || '').trim();
4830
+ if (value && this.SelectedBranches.indexOf(value) < 0) {
4831
+ this.SelectedBranches.push(value);
4488
4832
  }
4833
+ this.BranchesInput.nativeElement.blur();
4834
+ this.emitBranchesChanged();
4489
4835
  }
4490
- }
4491
- CardCarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CardCarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4492
- CardCarouselComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: CardCarouselComponent, selector: "lcu-card-carousel", inputs: { Stats: ["stats", "Stats"] }, ngImport: i0, template: "<div stats class=\"carousel-container\">\n <div class=\"chevron-container\" fxLayout=\"row\">\n <button mat-icon-button class=\"chevron-button\" id=\"left-chevron\" (click)=\"LeftChevronClicked()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button mat-icon-button class=\"chevron-button\" id=\"right-chevron\" (click)=\"RightChevronClicked()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n <ng-container *ngFor=\"let stat of Stats; let i = index\">\n <div class=\"carousel-item\" [id]=\"'carousel-'+i\">\n <div class=\"carousel-title\">{{stat.Name}}</div>\n <div class=\"carousel-stat\">{{stat.Stat}}</div>\n </div>\n </ng-container>\n <div (click)=\"MoreDetailsClicked()\">More details</div>\n</div>\n", styles: [".carousel-container{text-align:center;height:75px;padding-top:20px}.carousel-item.hidden{display:none}.carousel-item.active{visibility:visible}.chevron-button{position:absolute}#right-chevron{right:5px}#left-chevron{left:5px}\n"], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
4493
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CardCarouselComponent, decorators: [{
4494
- type: Component,
4495
- args: [{ selector: 'lcu-card-carousel', template: "<div stats class=\"carousel-container\">\n <div class=\"chevron-container\" fxLayout=\"row\">\n <button mat-icon-button class=\"chevron-button\" id=\"left-chevron\" (click)=\"LeftChevronClicked()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button mat-icon-button class=\"chevron-button\" id=\"right-chevron\" (click)=\"RightChevronClicked()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n <ng-container *ngFor=\"let stat of Stats; let i = index\">\n <div class=\"carousel-item\" [id]=\"'carousel-'+i\">\n <div class=\"carousel-title\">{{stat.Name}}</div>\n <div class=\"carousel-stat\">{{stat.Stat}}</div>\n </div>\n </ng-container>\n <div (click)=\"MoreDetailsClicked()\">More details</div>\n</div>\n", styles: [".carousel-container{text-align:center;height:75px;padding-top:20px}.carousel-item.hidden{display:none}.carousel-item.active{visibility:visible}.chevron-button{position:absolute}#right-chevron{right:5px}#left-chevron{left:5px}\n"] }]
4496
- }], ctorParameters: function () { return []; }, propDecorators: { Stats: [{
4497
- type: Input,
4498
- args: ['stats']
4499
- }] } });
4500
-
4501
- class SecurityToggleComponent {
4502
- constructor(eacSvc, formBldr) {
4503
- this.eacSvc = eacSvc;
4504
- this.formBldr = formBldr;
4505
- this.SaveFormEvent = new EventEmitter;
4506
- this.SkeletonEffect = 'wave';
4836
+ configureDevOpsAction() {
4837
+ setTimeout(() => {
4838
+ this.DevOpsActionLookupFormControl.setValue(this.DevOpsActionLookup);
4839
+ }, 0);
4507
4840
  }
4508
- get IsPrivateFormControl() {
4509
- return this.SecurityFormGroup?.controls.isPrivate;
4841
+ destroyFormControls() {
4842
+ this.DevOpsSourceControlFormGroup.removeControl([this.SourceControlRoot, 'mainBranch'].join(''));
4843
+ this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'branches'].join(''));
4844
+ this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'buildPath'].join(''));
4845
+ this.SelectedBranches = [];
4846
+ this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'organization'].join(''));
4847
+ this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'repository'].join(''));
4510
4848
  }
4511
- get IsTriggerSignInFormControl() {
4512
- return this.SecurityFormGroup?.controls.isTriggerSignIn;
4849
+ emitBranchesChanged() {
4850
+ if (this.SelectedBranches?.length > 0 &&
4851
+ (!this.MainBranchFormControl.value ||
4852
+ this.SelectedBranches.indexOf(this.MainBranchFormControl.value) < 0)) {
4853
+ this.MainBranchFormControl.setValue(this.SelectedBranches.find((branch) => branch === 'main' || branch === 'master') || this.SelectedBranches[0]);
4854
+ }
4855
+ else if (this.SelectedBranches?.length <= 0) {
4856
+ this.MainBranchFormControl.reset();
4857
+ }
4858
+ this.BranchesFormControl.setValue(this.SelectedBranches.join(','));
4859
+ this.BranchesChanged(this.SelectedBranches || []);
4513
4860
  }
4514
- get State() {
4515
- return this.eacSvc.State;
4861
+ listBranches() {
4862
+ if (this.UseBranches) {
4863
+ this.Loading = true;
4864
+ this.appsFlowSvc
4865
+ .ListBranches(this.OrganizationFormControl.value, this.RepositoryFormControl.value)
4866
+ .subscribe((response) => {
4867
+ this.BranchOptions = response.Model;
4868
+ this.Loading = false;
4869
+ if (this.EditingSourceControl?.Branches?.length > 0) {
4870
+ this.SelectedBranches = this.EditingSourceControl.Branches;
4871
+ }
4872
+ else if (this.BranchOptions?.length === 1) {
4873
+ this.BranchesFormControl.setValue(this.BranchOptions[0].Name);
4874
+ this.SelectedBranches = [this.BranchOptions[0].Name];
4875
+ }
4876
+ this.emitBranchesChanged();
4877
+ this.listBuildPaths();
4878
+ });
4879
+ }
4516
4880
  }
4517
- ngOnInit() {
4518
- this.setupSecurityFormGroup();
4881
+ listBuildPaths() {
4882
+ if (this.UseBuildPath) {
4883
+ this.Loading = true;
4884
+ this.appsFlowSvc
4885
+ .ListBuildPaths(this.OrganizationFormControl.value, this.RepositoryFormControl.value)
4886
+ .subscribe((response) => {
4887
+ this.BuildPathOptions = response.Model;
4888
+ this.Loading = false;
4889
+ if (this.BuildPathOptions?.length === 1) {
4890
+ this.BuildPathFormControl.setValue(this.BuildPathOptions[0]);
4891
+ }
4892
+ });
4893
+ }
4519
4894
  }
4520
- SecuritySubmit() {
4521
- //save the security settings
4522
- console.log("submitting security values: ", this.SecurityFormGroup.value);
4523
- this.SaveFormEvent.emit(this.SecurityFormGroup.value);
4895
+ listOrganizations() {
4896
+ this.Loading = true;
4897
+ this.appsFlowSvc
4898
+ .ListOrganizations()
4899
+ .subscribe((response) => {
4900
+ this.OrganizationOptions = response.Model;
4901
+ console.log("Organization Options: ", this.OrganizationOptions);
4902
+ this.Loading = false;
4903
+ if (this.EditingSourceControl?.Organization) {
4904
+ setTimeout(() => {
4905
+ this.OrganizationFormControl.setValue(this.EditingSourceControl.Organization);
4906
+ this.listRepositories(this.EditingSourceControl?.Repository);
4907
+ }, 0);
4908
+ }
4909
+ });
4524
4910
  }
4525
- setupSecurityFormGroup() {
4526
- this.ProcessorType = this.EditingApplication?.Processor?.Type || '';
4527
- this.SecurityFormGroup = this.formBldr.group({});
4528
- this.setupSecurityForm();
4911
+ listRepositories(activeRepo = null) {
4912
+ this.Loading = true;
4913
+ this.appsFlowSvc
4914
+ .ListRepositories(this.OrganizationFormControl.value)
4915
+ .subscribe((response) => {
4916
+ this.RepositoryOptions = response.Model;
4917
+ this.Loading = false;
4918
+ if (activeRepo) {
4919
+ setTimeout(() => {
4920
+ this.RepositoryFormControl.setValue(activeRepo);
4921
+ this.listBranches();
4922
+ if (!this.UseBranches) {
4923
+ this.listBuildPaths();
4924
+ }
4925
+ }, 0);
4926
+ }
4927
+ else if (this.RepositoryOptions?.length <= 0) {
4928
+ this.CreatingRepository = true;
4929
+ }
4930
+ });
4529
4931
  }
4530
- setupSecurityForm() {
4531
- this.SecurityFormGroup.addControl('isPrivate', this.formBldr.control(this.EditingApplication.LookupConfig?.IsPrivate || false, [Validators.required]));
4532
- this.SecurityFormGroup.addControl('isTriggerSignIn', this.formBldr.control(this.EditingApplication.LookupConfig?.IsTriggerSignIn || false, [Validators.required]));
4932
+ loadProjectHostingDetails() {
4933
+ if (this.SelectedBranches?.length > 0) {
4934
+ this.HostingDetails.Loading = true;
4935
+ this.appsFlowSvc
4936
+ .LoadProjectHostingDetails()
4937
+ .subscribe((response) => {
4938
+ this.HostingDetails = response.Model;
4939
+ this.HostingDetails.Loading = false;
4940
+ this.configureDevOpsAction();
4941
+ }, (err) => {
4942
+ this.HostingDetails.Loading = false;
4943
+ });
4944
+ }
4533
4945
  }
4534
- }
4535
- SecurityToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SecurityToggleComponent, deps: [{ token: EaCService }, { token: i1$2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
4536
- SecurityToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: SecurityToggleComponent, selector: "lcu-security-toggle", inputs: { EditingApplication: ["editing-application", "EditingApplication"] }, outputs: { SaveFormEvent: "save-form-event" }, ngImport: i0, template: "<form\n class=\"security-form\"\n [formGroup]=\"SecurityFormGroup\"\n (ngSubmit)=\"SecuritySubmit()\"\n>\n <mat-card class=\"flow-card\">\n <!-- SKELETON LOADING -->\n <ng-container *ngIf=\"State?.Loading\">\n <mat-card-header fxLayoutAlign=\"space-between center\">\n <mat-card-title skeleton-text [effect]=\"SkeletonEffect\">\n Security Settings\n </mat-card-title>\n <div fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">XXX</div>\n\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\">\n info_outline\n </mat-icon>\n </div>\n </mat-card-header>\n\n <mat-card-actions fxLayoutAlign=\"center center\">\n <div\n fxFlex=\"100%\"\n skeleton-text\n [effect]=\"SkeletonEffect\"\n fxLayoutAlign=\"center center\"\n >\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\"> save </mat-icon>\n\n Save Settings\n </div>\n </mat-card-actions>\n </ng-container>\n <!-- END SKELETON LOADING -->\n\n <!-- BEGIN ACTUAL CONTENT -->\n\n <ng-container *ngIf=\"!State?.Loading\">\n <mat-card-header>\n <mat-card-title> Security Settings </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-slide-toggle\n formControlName=\"isPrivate\"\n matTooltip=\"Is Secure Application?\"\n >\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Secured Application is one that requires the user to be authenticated to use the application. The application is hosted behind an identity wall.\"\n >\n info_outline\n </mat-icon>\n </mat-card-header>\n\n <mat-card-content>\n <div>\n <div *ngIf=\"IsPrivateFormControl.value\">\n <div>\n <mat-slide-toggle formControlName=\"isTriggerSignIn\">\n Is Trigger Sign In Application?\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Trigger Sign In Application will direct the user to sign in if they are not already.\"\n >\n info_outline\n </mat-icon>\n </div>\n </div>\n </div>\n </mat-card-content>\n\n <mat-card-actions fxLayoutAlign=\"center center\">\n <button\n mat-raised-button\n type=\"submit\"\n fxFlex=\"100%\"\n color=\"primary\"\n [disabled]=\"!SecurityFormGroup.valid || !SecurityFormGroup.dirty\"\n >\n <mat-icon>save</mat-icon>\n Save Settings\n </button>\n </mat-card-actions>\n </ng-container>\n </mat-card>\n</form>\n", styles: ["::ng-deep .mat-tooltip{color:#000!important}.flow-card{margin:32px 20px}\n"], components: [{ type: i1$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i1$1.MatCardHeader, selector: "mat-card-header" }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i1$1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i4$3.SkeletonTextDirective, selector: "[skeleton-text]", inputs: ["effect"] }, { type: i1$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4$1.MatSuffix, selector: "[matSuffix]" }, { type: i1$1.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }] });
4537
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SecurityToggleComponent, decorators: [{
4946
+ setupFormControls() {
4947
+ this.destroyFormControls();
4948
+ console.log("Source Control: ", this.EditingSourceControl);
4949
+ this.DevOpsSourceControlFormGroup.addControl('devOpsActionLookup', new FormControl(this.DevOpsActionLookup || '', []));
4950
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'organization'].join(''), new FormControl(this.EditingSourceControl.Organization ?? '', Validators.required));
4951
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'repository'].join(''), new FormControl(this.EditingSourceControl.Repository ?? '', Validators.required));
4952
+ if (this.UseBranches) {
4953
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'branches'].join(''), new FormControl(this.EditingSourceControl?.Branches ?? '', Validators.required));
4954
+ this.SelectedBranches = this.EditingSourceControl?.Branches;
4955
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'mainBranch'].join(''), new FormControl(this.EditingSourceControl.MainBranch ?? '', Validators.required));
4956
+ }
4957
+ if (this.UseBuildPath) {
4958
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'buildPath'].join(''), new FormControl(this.BuildPath ?? '', Validators.required));
4959
+ }
4960
+ }
4961
+ }
4962
+ DevopsSourceControlFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DevopsSourceControlFormComponent, deps: [{ token: ApplicationsFlowService }, { token: EaCService }, { token: i1$2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
4963
+ DevopsSourceControlFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: DevopsSourceControlFormComponent, selector: "lcu-devops-source-control-form", inputs: { EditingSourceControlLookup: ["editing-source-control-lookup", "EditingSourceControlLookup"], Environment: ["environment", "Environment"], EnvironmentLookup: ["environment-lookup", "EnvironmentLookup"] }, outputs: { SaveStatusEvent: "save-status-event" }, viewQueries: [{ propertyName: "BranchesInput", first: true, predicate: ["branches"], descendants: true }], ngImport: i0, template: "<form \n class=\"form-card\" \n [formGroup]=\"DevOpsSourceControlFormGroup\" \n (ngSubmit)=\"SubmitSourceControl()\"\n>\n\n <!-- <mat-card class=\"spread\" class=\"sc-card\"> -->\n <!-- <mat-card-header>\n <mat-card-title> Source Control </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-icon matSuffix matTooltip=\"Configure source control, DevOps CI/CD, and artifacts.\">\n info_outline\n </mat-icon>\n </mat-card-header> -->\n\n <!-- <mat-card-content> -->\n\n <ng-container *ngIf=\"State?.Loading\">\n <lcu-loader [loading]=\"State?.Loading\"></lcu-loader>\n\n <!-- <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block> -->\n\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n\n <div class=\"card\">\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select \n formControlName=\"devOpsActionLookup\" \n placeholder=\"DevOps Action\"\n [disabled]=\"HostingDetails?.Loading\" \n (selectionChange)=\"DevOpsActionLookupChanged($event)\"\n >\n <ng-container *ngFor=\"let devOpsActionLookup of DevOpsActionLookups\">\n <mat-option \n [value]=\"devOpsActionLookup\" \n *ngIf=\"DevOpsActions[devOpsActionLookup]; let devOpsAction\">\n {{ devOpsAction.Name }}\n </mat-option>\n </ng-container>\n\n <mat-option value=\"\">-- Create New --</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"card\" *ngIf=\"OrganizationFormControl?.valid || !Loading\">\n <mat-form-field \n class=\"mat-full-width with-hint margin-bottom\" \n *ngIf=\"OrganizationOptions?.length > 0\"\n >\n <mat-icon class=\"org-icon\" matPrefix>corporate_fare</mat-icon>\n\n <mat-select \n [formControlName]=\"SourceControlRoot + 'organization'\" \n placeholder=\"Organization\"\n (selectionChange)=\"OrganizationChanged($event)\" \n [disabled]=\"Loading || HostingDetails?.Loading\" \n required\n >\n <ng-container *ngFor=\"let orgOpt of OrganizationOptions\">\n <mat-option [value]=\"orgOpt.Name\">\n {{ orgOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <mat-icon matSuffix (click)=\"RefreshOrganizations()\" matTooltip=\"Refresh Organization\" color=\"accent\"> refresh </mat-icon>\n\n <a matSuffix href=\"/.oauth/github?oauth-force-edit=true\" target=\"_blank\" color=\"accent\">\n <mat-icon color=\"accent\" matTooltip=\"Re-authorize Organizations\"> launch </mat-icon>\n </a>\n\n <mat-hint>\n If you don't have an organization or would like to create a new one,\n <a href=\"https://github.com/account/organizations/new\" class=\"primary-link\" target=\"_blank\">\n start here\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"card\" *ngIf=\"\n RepositoryFormControl?.valid ||\n (OrganizationFormControl?.valid && !Loading)\n \">\n <mat-form-field class=\"mat-full-width\">\n <mat-icon class=\"org-icon\" matPrefix>description</mat-icon>\n\n <mat-select [formControlName]=\"SourceControlRoot + 'repository'\" [placeholder]=\"\n OrganizationFormControl?.valid\n ? 'Repository'\n : 'Repository (select organization first)'\n \" [disabled]=\"\n !OrganizationFormControl?.valid || Loading || HostingDetails?.Loading\n \" (selectionChange)=\"RepositoryChanged($event)\" *ngIf=\"!CreatingRepository\" required>\n <ng-container *ngFor=\"let repoOpt of RepositoryOptions\">\n <mat-option [value]=\"repoOpt.Name\">\n {{ repoOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <input matInput placeholder=\"Repository (creates new if does not exist)\"\n [formControlName]=\"SourceControlRoot + 'repository'\" *ngIf=\"CreatingRepository\"\n [fxHide]=\"Loading || HostingDetails?.Loading\" required />\n\n <mat-icon matSuffix (click)=\"CreateRepository()\" [fxHide]=\"Loading || HostingDetails?.Loading\"\n *ngIf=\"!CreatingRepository && OrganizationFormControl?.valid\">\n add_circle\n </mat-icon>\n\n <button mat-button type=\"button\" (click)=\"SaveRepository()\"\n *ngIf=\"CreatingRepository && RepositoryFormControl?.valid\">\n\n <mat-icon matSuffix color=\"primary\">\n save\n </mat-icon>\n </button>\n\n <button mat-button type=\"button\" (click)=\"CancelCreateRepository()\" *ngIf=\"CreatingRepository\">\n\n <mat-icon matSuffix>\n cancel\n </mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <div class=\"card\" *ngIf=\"\n (BranchesFormControl?.valid ||\n (OrganizationFormControl?.valid &&\n RepositoryFormControl?.valid &&\n !Loading)) &&\n !CreatingRepository &&\n UseBranches\n \">\n <mat-form-field class=\"mat-full-width\">\n <mat-icon class=\"org-icon\" matPrefix>account_tree</mat-icon>\n\n <mat-label>Selected Branches</mat-label>\n\n <mat-autocomplete (optionSelected)=\"BranchOptionSelected($event)\" #branchOptions=\"matAutocomplete\">\n <ng-container *ngFor=\"let branchOpt of BranchOptions\">\n <mat-option [value]=\"branchOpt.Name\">\n {{ branchOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n\n <mat-chip-list #selectedBranches>\n <mat-chip [removable]=\"true\" (removed)=\"RemoveBranchOption(selBranch)\"\n *ngFor=\"let selBranch of SelectedBranches\">\n {{ selBranch }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n\n <input matInput placeholder=\"New Branch...\" [formControlName]=\"SourceControlRoot + 'branches'\" #branches\n [matAutocomplete]=\"branchOptions\" [matChipInputFor]=\"selectedBranches\"\n [matChipInputSeparatorKeyCodes]=\"SeparatorKeysCodes\" [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"AddBranchOption($event)\" [disabled]=\"Loading || HostingDetails?.Loading\"\n required />\n </mat-chip-list>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width with-hint\" [fxShow]=\"SelectedBranches?.length > 1\">\n <mat-icon class=\"org-icon\" matPrefix>account_tree</mat-icon>\n\n <mat-select [formControlName]=\"SourceControlRoot + 'mainBranch'\" placeholder=\"Main Branch\"\n [disabled]=\"Loading || HostingDetails?.Loading\" (selectionChange)=\"MainBranchChanged($event)\" required>\n <ng-container *ngFor=\"let branch of SelectedBranches\">\n <mat-option [value]=\"branch\">\n {{ branch }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <mat-icon matSuffix (click)=\"RefreshOrganizations()\" color=\"accent\"> refresh </mat-icon>\n\n <a matSuffix mat-icon-button href=\"/.oauth/github?oauth-force-edit=true\" target=\"_blank\" color=\"accent\">\n <mat-icon matTooltip=\"Re-authorize Organizations\" color=\"accent\"> launch </mat-icon>\n </a>\n\n <mat-hint>\n If you don't have an organization or would like to create a new one,\n <a href=\"https://github.com/account/organizations/new\" target=\"_blank\"class=\"primary-link\">\n start here\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"card\" *ngIf=\"\n (BuildPathFormControl?.valid ||\n (OrganizationFormControl?.valid &&\n RepositoryFormControl?.valid &&\n !Loading)) &&\n !CreatingRepository &&\n UseBuildPath\n \">\n <mat-form-field class=\"mat-full-width with-hint\">\n <mat-icon class=\"org-icon\" matPrefix>build</mat-icon>\n\n <mat-select [formControlName]=\"SourceControlRoot + 'buildPath'\" placeholder=\"Build Path\"\n [disabled]=\"Loading || BuildPathDisabled\" (selectionChange)=\"BuildPathChanged($event)\" required>\n <ng-container *ngFor=\"let buildPath of BuildPathOptions\">\n <mat-option [value]=\"buildPath\">\n {{ buildPath }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <mat-hint>\n The build path identifies which build action to use for your\n configuration.\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n\n <div class=\"margin-3\">\n <h4 class=\"mat-title\" *ngIf=\"!OrganizationFormControl?.valid\">\n Loading organizations\n </h4>\n\n <h4 class=\"mat-title\" *ngIf=\"\n OrganizationFormControl?.valid && !RepositoryFormControl?.valid\n \">\n Loading repositories\n </h4>\n\n <h4 class=\"mat-title\" *ngIf=\"RepositoryFormControl?.valid && !BranchesFormControl?.valid\">\n Loading branches\n </h4>\n\n <h4 class=\"mat-title\" *ngIf=\"\n (RepositoryFormControl?.valid || BranchesFormControl?.valid) &&\n !BuildPathFormControl?.valid\n \">\n Loading build paths\n </h4>\n </div>\n </div>\n </div>\n </ng-container>\n <!-- </div> -->\n\n <!-- </mat-card-content> -->\n <!-- <mat-card-actions fxLayoutAlign=\"center center\"> -->\n\n <!-- <button \n mat-raised-button \n *ngIf=\"!State?.Loading\"\n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!DevOpsSourceControlFormGroup.valid || !DevOpsSourceControlFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Source Control\n </button>\n <lcu-loader [loading]=\"State?.Loading\"></lcu-loader> -->\n \n <!-- </mat-card-actions> -->\n <!-- </mat-card> -->\n</form>", styles: [".form-card,.sc-card{width:100%}.margin-bottom{margin-bottom:15px}.primary-link{color:#4a918e;text-decoration:none}.s-block{margin:10px 0;width:100%;height:40px}\n"], components: [{ type: i3.LoaderComponent, selector: "lcu-loader", inputs: ["diameter", "hide-inner", "loading"] }, { type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i8$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i9$2.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }], directives: [{ type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4$1.MatPrefix, selector: "[matPrefix]" }, { type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4$1.MatSuffix, selector: "[matSuffix]" }, { type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9$1.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { type: i4$1.MatLabel, selector: "mat-label" }, { type: i9$2.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i9$2.MatChipRemove, selector: "[matChipRemove]" }, { type: i8$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i9$2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }] });
4964
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DevopsSourceControlFormComponent, decorators: [{
4538
4965
  type: Component,
4539
- args: [{ selector: 'lcu-security-toggle', template: "<form\n class=\"security-form\"\n [formGroup]=\"SecurityFormGroup\"\n (ngSubmit)=\"SecuritySubmit()\"\n>\n <mat-card class=\"flow-card\">\n <!-- SKELETON LOADING -->\n <ng-container *ngIf=\"State?.Loading\">\n <mat-card-header fxLayoutAlign=\"space-between center\">\n <mat-card-title skeleton-text [effect]=\"SkeletonEffect\">\n Security Settings\n </mat-card-title>\n <div fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">XXX</div>\n\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\">\n info_outline\n </mat-icon>\n </div>\n </mat-card-header>\n\n <mat-card-actions fxLayoutAlign=\"center center\">\n <div\n fxFlex=\"100%\"\n skeleton-text\n [effect]=\"SkeletonEffect\"\n fxLayoutAlign=\"center center\"\n >\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\"> save </mat-icon>\n\n Save Settings\n </div>\n </mat-card-actions>\n </ng-container>\n <!-- END SKELETON LOADING -->\n\n <!-- BEGIN ACTUAL CONTENT -->\n\n <ng-container *ngIf=\"!State?.Loading\">\n <mat-card-header>\n <mat-card-title> Security Settings </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-slide-toggle\n formControlName=\"isPrivate\"\n matTooltip=\"Is Secure Application?\"\n >\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Secured Application is one that requires the user to be authenticated to use the application. The application is hosted behind an identity wall.\"\n >\n info_outline\n </mat-icon>\n </mat-card-header>\n\n <mat-card-content>\n <div>\n <div *ngIf=\"IsPrivateFormControl.value\">\n <div>\n <mat-slide-toggle formControlName=\"isTriggerSignIn\">\n Is Trigger Sign In Application?\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Trigger Sign In Application will direct the user to sign in if they are not already.\"\n >\n info_outline\n </mat-icon>\n </div>\n </div>\n </div>\n </mat-card-content>\n\n <mat-card-actions fxLayoutAlign=\"center center\">\n <button\n mat-raised-button\n type=\"submit\"\n fxFlex=\"100%\"\n color=\"primary\"\n [disabled]=\"!SecurityFormGroup.valid || !SecurityFormGroup.dirty\"\n >\n <mat-icon>save</mat-icon>\n Save Settings\n </button>\n </mat-card-actions>\n </ng-container>\n </mat-card>\n</form>\n", styles: ["::ng-deep .mat-tooltip{color:#000!important}.flow-card{margin:32px 20px}\n"] }]
4540
- }], ctorParameters: function () { return [{ type: EaCService }, { type: i1$2.FormBuilder }]; }, propDecorators: { EditingApplication: [{
4966
+ args: [{ selector: 'lcu-devops-source-control-form', template: "<form \n class=\"form-card\" \n [formGroup]=\"DevOpsSourceControlFormGroup\" \n (ngSubmit)=\"SubmitSourceControl()\"\n>\n\n <!-- <mat-card class=\"spread\" class=\"sc-card\"> -->\n <!-- <mat-card-header>\n <mat-card-title> Source Control </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-icon matSuffix matTooltip=\"Configure source control, DevOps CI/CD, and artifacts.\">\n info_outline\n </mat-icon>\n </mat-card-header> -->\n\n <!-- <mat-card-content> -->\n\n <ng-container *ngIf=\"State?.Loading\">\n <lcu-loader [loading]=\"State?.Loading\"></lcu-loader>\n\n <!-- <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n [effect]=\"SkeletonEffect\" \n ></skeleton-block> -->\n\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n\n <div class=\"card\">\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select \n formControlName=\"devOpsActionLookup\" \n placeholder=\"DevOps Action\"\n [disabled]=\"HostingDetails?.Loading\" \n (selectionChange)=\"DevOpsActionLookupChanged($event)\"\n >\n <ng-container *ngFor=\"let devOpsActionLookup of DevOpsActionLookups\">\n <mat-option \n [value]=\"devOpsActionLookup\" \n *ngIf=\"DevOpsActions[devOpsActionLookup]; let devOpsAction\">\n {{ devOpsAction.Name }}\n </mat-option>\n </ng-container>\n\n <mat-option value=\"\">-- Create New --</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"card\" *ngIf=\"OrganizationFormControl?.valid || !Loading\">\n <mat-form-field \n class=\"mat-full-width with-hint margin-bottom\" \n *ngIf=\"OrganizationOptions?.length > 0\"\n >\n <mat-icon class=\"org-icon\" matPrefix>corporate_fare</mat-icon>\n\n <mat-select \n [formControlName]=\"SourceControlRoot + 'organization'\" \n placeholder=\"Organization\"\n (selectionChange)=\"OrganizationChanged($event)\" \n [disabled]=\"Loading || HostingDetails?.Loading\" \n required\n >\n <ng-container *ngFor=\"let orgOpt of OrganizationOptions\">\n <mat-option [value]=\"orgOpt.Name\">\n {{ orgOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <mat-icon matSuffix (click)=\"RefreshOrganizations()\" matTooltip=\"Refresh Organization\" color=\"accent\"> refresh </mat-icon>\n\n <a matSuffix href=\"/.oauth/github?oauth-force-edit=true\" target=\"_blank\" color=\"accent\">\n <mat-icon color=\"accent\" matTooltip=\"Re-authorize Organizations\"> launch </mat-icon>\n </a>\n\n <mat-hint>\n If you don't have an organization or would like to create a new one,\n <a href=\"https://github.com/account/organizations/new\" class=\"primary-link\" target=\"_blank\">\n start here\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"card\" *ngIf=\"\n RepositoryFormControl?.valid ||\n (OrganizationFormControl?.valid && !Loading)\n \">\n <mat-form-field class=\"mat-full-width\">\n <mat-icon class=\"org-icon\" matPrefix>description</mat-icon>\n\n <mat-select [formControlName]=\"SourceControlRoot + 'repository'\" [placeholder]=\"\n OrganizationFormControl?.valid\n ? 'Repository'\n : 'Repository (select organization first)'\n \" [disabled]=\"\n !OrganizationFormControl?.valid || Loading || HostingDetails?.Loading\n \" (selectionChange)=\"RepositoryChanged($event)\" *ngIf=\"!CreatingRepository\" required>\n <ng-container *ngFor=\"let repoOpt of RepositoryOptions\">\n <mat-option [value]=\"repoOpt.Name\">\n {{ repoOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <input matInput placeholder=\"Repository (creates new if does not exist)\"\n [formControlName]=\"SourceControlRoot + 'repository'\" *ngIf=\"CreatingRepository\"\n [fxHide]=\"Loading || HostingDetails?.Loading\" required />\n\n <mat-icon matSuffix (click)=\"CreateRepository()\" [fxHide]=\"Loading || HostingDetails?.Loading\"\n *ngIf=\"!CreatingRepository && OrganizationFormControl?.valid\">\n add_circle\n </mat-icon>\n\n <button mat-button type=\"button\" (click)=\"SaveRepository()\"\n *ngIf=\"CreatingRepository && RepositoryFormControl?.valid\">\n\n <mat-icon matSuffix color=\"primary\">\n save\n </mat-icon>\n </button>\n\n <button mat-button type=\"button\" (click)=\"CancelCreateRepository()\" *ngIf=\"CreatingRepository\">\n\n <mat-icon matSuffix>\n cancel\n </mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <div class=\"card\" *ngIf=\"\n (BranchesFormControl?.valid ||\n (OrganizationFormControl?.valid &&\n RepositoryFormControl?.valid &&\n !Loading)) &&\n !CreatingRepository &&\n UseBranches\n \">\n <mat-form-field class=\"mat-full-width\">\n <mat-icon class=\"org-icon\" matPrefix>account_tree</mat-icon>\n\n <mat-label>Selected Branches</mat-label>\n\n <mat-autocomplete (optionSelected)=\"BranchOptionSelected($event)\" #branchOptions=\"matAutocomplete\">\n <ng-container *ngFor=\"let branchOpt of BranchOptions\">\n <mat-option [value]=\"branchOpt.Name\">\n {{ branchOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n\n <mat-chip-list #selectedBranches>\n <mat-chip [removable]=\"true\" (removed)=\"RemoveBranchOption(selBranch)\"\n *ngFor=\"let selBranch of SelectedBranches\">\n {{ selBranch }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n\n <input matInput placeholder=\"New Branch...\" [formControlName]=\"SourceControlRoot + 'branches'\" #branches\n [matAutocomplete]=\"branchOptions\" [matChipInputFor]=\"selectedBranches\"\n [matChipInputSeparatorKeyCodes]=\"SeparatorKeysCodes\" [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"AddBranchOption($event)\" [disabled]=\"Loading || HostingDetails?.Loading\"\n required />\n </mat-chip-list>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width with-hint\" [fxShow]=\"SelectedBranches?.length > 1\">\n <mat-icon class=\"org-icon\" matPrefix>account_tree</mat-icon>\n\n <mat-select [formControlName]=\"SourceControlRoot + 'mainBranch'\" placeholder=\"Main Branch\"\n [disabled]=\"Loading || HostingDetails?.Loading\" (selectionChange)=\"MainBranchChanged($event)\" required>\n <ng-container *ngFor=\"let branch of SelectedBranches\">\n <mat-option [value]=\"branch\">\n {{ branch }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <mat-icon matSuffix (click)=\"RefreshOrganizations()\" color=\"accent\"> refresh </mat-icon>\n\n <a matSuffix mat-icon-button href=\"/.oauth/github?oauth-force-edit=true\" target=\"_blank\" color=\"accent\">\n <mat-icon matTooltip=\"Re-authorize Organizations\" color=\"accent\"> launch </mat-icon>\n </a>\n\n <mat-hint>\n If you don't have an organization or would like to create a new one,\n <a href=\"https://github.com/account/organizations/new\" target=\"_blank\"class=\"primary-link\">\n start here\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"card\" *ngIf=\"\n (BuildPathFormControl?.valid ||\n (OrganizationFormControl?.valid &&\n RepositoryFormControl?.valid &&\n !Loading)) &&\n !CreatingRepository &&\n UseBuildPath\n \">\n <mat-form-field class=\"mat-full-width with-hint\">\n <mat-icon class=\"org-icon\" matPrefix>build</mat-icon>\n\n <mat-select [formControlName]=\"SourceControlRoot + 'buildPath'\" placeholder=\"Build Path\"\n [disabled]=\"Loading || BuildPathDisabled\" (selectionChange)=\"BuildPathChanged($event)\" required>\n <ng-container *ngFor=\"let buildPath of BuildPathOptions\">\n <mat-option [value]=\"buildPath\">\n {{ buildPath }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <mat-hint>\n The build path identifies which build action to use for your\n configuration.\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n\n <div class=\"margin-3\">\n <h4 class=\"mat-title\" *ngIf=\"!OrganizationFormControl?.valid\">\n Loading organizations\n </h4>\n\n <h4 class=\"mat-title\" *ngIf=\"\n OrganizationFormControl?.valid && !RepositoryFormControl?.valid\n \">\n Loading repositories\n </h4>\n\n <h4 class=\"mat-title\" *ngIf=\"RepositoryFormControl?.valid && !BranchesFormControl?.valid\">\n Loading branches\n </h4>\n\n <h4 class=\"mat-title\" *ngIf=\"\n (RepositoryFormControl?.valid || BranchesFormControl?.valid) &&\n !BuildPathFormControl?.valid\n \">\n Loading build paths\n </h4>\n </div>\n </div>\n </div>\n </ng-container>\n <!-- </div> -->\n\n <!-- </mat-card-content> -->\n <!-- <mat-card-actions fxLayoutAlign=\"center center\"> -->\n\n <!-- <button \n mat-raised-button \n *ngIf=\"!State?.Loading\"\n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!DevOpsSourceControlFormGroup.valid || !DevOpsSourceControlFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Source Control\n </button>\n <lcu-loader [loading]=\"State?.Loading\"></lcu-loader> -->\n \n <!-- </mat-card-actions> -->\n <!-- </mat-card> -->\n</form>", styles: [".form-card,.sc-card{width:100%}.margin-bottom{margin-bottom:15px}.primary-link{color:#4a918e;text-decoration:none}.s-block{margin:10px 0;width:100%;height:40px}\n"] }]
4967
+ }], ctorParameters: function () { return [{ type: ApplicationsFlowService }, { type: EaCService }, { type: i1$2.FormBuilder }]; }, propDecorators: { EditingSourceControlLookup: [{
4541
4968
  type: Input,
4542
- args: ['editing-application']
4543
- }], SaveFormEvent: [{
4969
+ args: ['editing-source-control-lookup']
4970
+ }], Environment: [{
4971
+ type: Input,
4972
+ args: ['environment']
4973
+ }], EnvironmentLookup: [{
4974
+ type: Input,
4975
+ args: ['environment-lookup']
4976
+ }], SaveStatusEvent: [{
4544
4977
  type: Output,
4545
- args: ['save-form-event']
4978
+ args: ['save-status-event']
4979
+ }], BranchesInput: [{
4980
+ type: ViewChild,
4981
+ args: ['branches']
4546
4982
  }] } });
4547
4983
 
4548
- class ProcessorDetailsFormComponent {
4549
- constructor(appsFlowSvc, formBldr, eacSvc) {
4550
- this.appsFlowSvc = appsFlowSvc;
4551
- this.formBldr = formBldr;
4984
+ class SourceControlDialogComponent {
4985
+ constructor(dialogRef, eacSvc, data, snackBar) {
4986
+ this.dialogRef = dialogRef;
4552
4987
  this.eacSvc = eacSvc;
4553
- this.redirectTooltip = '';
4554
- this.HasSaveButton = true;
4555
- this.SaveFormEvent = new EventEmitter();
4556
- }
4557
- get APIRootFormControl() {
4558
- return this.ProcessorDetailsFormGroup?.controls.apiRoot;
4559
- }
4560
- get Environment() {
4561
- return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
4562
- }
4563
- get BuildFormControl() {
4564
- return this.ProcessorDetailsFormGroup?.controls.build;
4565
- }
4566
- get BuildPathFormControl() {
4567
- return this.ProcessorDetailsFormGroup?.controls.buildPath;
4568
- }
4569
- get ClientIDFormControl() {
4570
- return this.ProcessorDetailsFormGroup?.controls.clientId;
4571
- }
4572
- get ClientSecretFormControl() {
4573
- return this.ProcessorDetailsFormGroup?.controls.clientSecret;
4574
- }
4575
- get DefaultFileFormControl() {
4576
- return this.ProcessorDetailsFormGroup?.controls.defaultFile;
4577
- }
4578
- get DefaultSourceControl() {
4579
- return {
4580
- Organization: this.EditingApplication?.LowCodeUnit?.Organization,
4581
- Repository: this.EditingApplication?.LowCodeUnit?.Repository,
4582
- };
4583
- }
4584
- get InboundPathFormControl() {
4585
- return this.ProcessorDetailsFormGroup?.controls.inboundPath;
4586
- }
4587
- get IncludeRequestFormControl() {
4588
- return this.ProcessorDetailsFormGroup?.controls.includeRequest;
4589
- }
4590
- get MethodsFormControl() {
4591
- return this.ProcessorDetailsFormGroup?.controls.methods;
4592
- }
4593
- get PackageFormControl() {
4594
- return this.ProcessorDetailsFormGroup?.controls.package;
4595
- }
4596
- get PermanentFormControl() {
4597
- return this.ProcessorDetailsFormGroup?.controls.permanent;
4598
- }
4599
- get PreserveMethodFormControl() {
4600
- return this.ProcessorDetailsFormGroup?.controls.preserveMethod;
4601
- }
4602
- get RedirectFormControl() {
4603
- return this.ProcessorDetailsFormGroup?.controls.redirect;
4988
+ this.data = data;
4989
+ this.snackBar = snackBar;
4604
4990
  }
4605
- get ScopesFormControl() {
4606
- return this.ProcessorDetailsFormGroup?.controls.scopes;
4991
+ get DevOpsSourceControlFormGroup() {
4992
+ return this.DevopsSourceControl?.DevOpsSourceControlFormGroup;
4607
4993
  }
4608
- get SecurityFormControl() {
4609
- return this.ProcessorDetailsFormGroup?.controls.security;
4994
+ get HasConnection() {
4995
+ return this.State.GitHub.HasConnection;
4610
4996
  }
4611
4997
  get State() {
4612
4998
  return this.eacSvc.State;
4613
4999
  }
4614
- get SourceControls() {
4615
- return this.Environment?.Sources || {};
4616
- }
4617
- get SourceControlFormControl() {
4618
- return this.ProcessorDetailsFormGroup?.controls.sourceControl;
4619
- }
4620
- get SPARootFormControl() {
4621
- return this.ProcessorDetailsFormGroup?.controls.spaRoot;
5000
+ ngOnInit() {
4622
5001
  }
4623
- get TokenLookupFormControl() {
4624
- return this.ProcessorDetailsFormGroup?.controls.tokenLookup;
5002
+ CloseDialog() {
5003
+ this.dialogRef.close();
4625
5004
  }
4626
- get ValidFormControls() {
4627
- let vfc = new Array();
4628
- for (const field in this.ProcessorDetailsFormGroup.controls) {
4629
- const control = this.ProcessorDetailsFormGroup.get(field);
4630
- if (control.valid) {
4631
- vfc.push(control);
4632
- }
5005
+ HandleSaveStatusEvent(event) {
5006
+ console.log("event to save: ", event);
5007
+ if (event.Code === 0) {
5008
+ this.snackBar.open("Source Control Succesfully Saved", "Dismiss", {
5009
+ duration: 5000
5010
+ });
5011
+ this.CloseDialog();
5012
+ }
5013
+ else {
5014
+ this.ErrorMessage = event.Message;
4633
5015
  }
4634
- // console.log("VFC=", vfc)
4635
- return vfc;
4636
5016
  }
4637
- get VersionFormControl() {
4638
- return this.ProcessorDetailsFormGroup?.controls.version;
5017
+ SaveSourceControl() {
5018
+ this.DevopsSourceControl.SaveSourceControl();
4639
5019
  }
4640
- get ZipFileFormControl() {
4641
- return this.ProcessorDetailsFormGroup?.controls.zipFile;
5020
+ }
5021
+ SourceControlDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SourceControlDialogComponent, deps: [{ token: i2$3.MatDialogRef }, { token: EaCService }, { token: MAT_DIALOG_DATA }, { token: i3$1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
5022
+ SourceControlDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: SourceControlDialogComponent, selector: "lcu-source-control-dialog", viewQueries: [{ propertyName: "DevopsSourceControl", first: true, predicate: DevopsSourceControlFormComponent, descendants: true }], ngImport: i0, template: "\n<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Source Control</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n <ng-container *ngIf=\"!HasConnection\">\n \n <lcu-git-auth></lcu-git-auth>\n\n </ng-container>\n\n <ng-conatiner *ngIf=\"HasConnection\" fxLayout=\"column\">\n\n <div fxLayoutAlign=\"center center\">\n <lcu-devops-source-control-form\n [environment]=\"data.environment\"\n [environment-lookup]=\"data.environmentLookup\"\n [editing-source-control-lookup]=\"data.scLookup\"\n (save-status-event)=\"HandleSaveStatusEvent($event)\">\n </lcu-devops-source-control-form>\n </div>\n \n <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error>\n\n </ng-conatiner>\n\n</mat-dialog-content>\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n class=\"action-button\"\n mat-raised-button \n *ngIf=\"!State?.Loading\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveSourceControl()\"\n [disabled]=\"!DevOpsSourceControlFormGroup?.valid || !DevOpsSourceControlFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>\n\n\n\n", styles: [".dialog-header{width:100%}.action-button{margin:0 10px}\n"], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: GitAuthComponent, selector: "lcu-git-auth" }, { type: DevopsSourceControlFormComponent, selector: "lcu-devops-source-control-form", inputs: ["editing-source-control-lookup", "environment", "environment-lookup"], outputs: ["save-status-event"] }], directives: [{ type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i2$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i4$1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i2$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
5023
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SourceControlDialogComponent, decorators: [{
5024
+ type: Component,
5025
+ args: [{ selector: 'lcu-source-control-dialog', template: "\n<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Source Control</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n <ng-container *ngIf=\"!HasConnection\">\n \n <lcu-git-auth></lcu-git-auth>\n\n </ng-container>\n\n <ng-conatiner *ngIf=\"HasConnection\" fxLayout=\"column\">\n\n <div fxLayoutAlign=\"center center\">\n <lcu-devops-source-control-form\n [environment]=\"data.environment\"\n [environment-lookup]=\"data.environmentLookup\"\n [editing-source-control-lookup]=\"data.scLookup\"\n (save-status-event)=\"HandleSaveStatusEvent($event)\">\n </lcu-devops-source-control-form>\n </div>\n \n <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error>\n\n </ng-conatiner>\n\n</mat-dialog-content>\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n class=\"action-button\"\n mat-raised-button \n *ngIf=\"!State?.Loading\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveSourceControl()\"\n [disabled]=\"!DevOpsSourceControlFormGroup?.valid || !DevOpsSourceControlFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>\n\n\n\n", styles: [".dialog-header{width:100%}.action-button{margin:0 10px}\n"] }]
5026
+ }], ctorParameters: function () { return [{ type: i2$3.MatDialogRef }, { type: EaCService }, { type: undefined, decorators: [{
5027
+ type: Inject,
5028
+ args: [MAT_DIALOG_DATA]
5029
+ }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { DevopsSourceControl: [{
5030
+ type: ViewChild,
5031
+ args: [DevopsSourceControlFormComponent]
5032
+ }] } });
5033
+
5034
+ class MainFeedCardComponent {
5035
+ constructor(eacSvc, dialog, sanitizer) {
5036
+ this.eacSvc = eacSvc;
5037
+ this.dialog = dialog;
5038
+ this.sanitizer = sanitizer;
4642
5039
  }
4643
- ngOnInit() {
4644
- if (!this.EditingApplication) {
4645
- this.CreateNewApplication();
4646
- }
4647
- else {
4648
- this.setupProcessorDetailsForm();
4649
- }
5040
+ get ActiveEnvironment() {
5041
+ return this.State?.EaC?.Environments[this.ActiveEnvironmentLookup];
4650
5042
  }
4651
- CreateNewApplication() {
4652
- this.SetEditingApplication(Guid.CreateRaw());
5043
+ get ActiveEnvironmentLookup() {
5044
+ // TODO: Eventually support multiple environments
5045
+ const envLookups = Object.keys(this.State?.EaC?.Environments || {});
5046
+ return envLookups[0];
4653
5047
  }
4654
- DetermineTooltipText() {
4655
- let permanentValue = this.PermanentFormControl.value;
4656
- let preserveValue = this.PreserveMethodFormControl.value;
4657
- if (permanentValue === true && preserveValue === false) {
4658
- this.redirectTooltip = '301 – Permanent and Not Preserve';
4659
- }
4660
- else if (permanentValue === false && preserveValue === false) {
4661
- this.redirectTooltip = '302 – Not Permanent and Not Preserve';
4662
- }
4663
- else if (permanentValue === false && preserveValue === true) {
4664
- this.redirectTooltip = '307 – Not Permanent and Preserve';
5048
+ get Environment() {
5049
+ // console.log("Ent Environment var: ", this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment]);
5050
+ return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
5051
+ }
5052
+ get Icon() {
5053
+ if (this.FeedItem.Status.Code === 0) {
5054
+ return 'check_circle';
4665
5055
  }
4666
- else if (permanentValue === true && preserveValue === true) {
4667
- this.redirectTooltip = '308 – Permanent and Preserve';
5056
+ else if (this.FeedItem.Status.Code === 1) {
5057
+ return 'cancel';
4668
5058
  }
4669
- }
4670
- SaveProcessorDetails() {
4671
- const app = this.EditingApplication;
4672
- app.LookupConfig.AllowedMethods = this.MethodsFormControl?.value
4673
- ?.split(' ')
4674
- .filter((v) => !!v);
4675
- app.Processor.Type = this.ProcessorType;
4676
- switch (app.Processor.Type) {
4677
- case 'DFS':
4678
- app.Processor.DefaultFile =
4679
- this.DefaultFileFormControl.value || 'index.html';
4680
- app.LowCodeUnit = {
4681
- Type: this.LCUType,
4682
- };
4683
- switch (app.LowCodeUnit.Type) {
4684
- case 'GitHub':
4685
- app.LowCodeUnit.Organization =
4686
- this.SourceControls[this.SourceControlFormControl.value]?.Organization;
4687
- app.LowCodeUnit.Repository =
4688
- this.SourceControls[this.SourceControlFormControl.value]?.Repository;
4689
- app.LowCodeUnit.Build = this.BuildFormControl.value;
4690
- app.LowCodeUnit.Path = this.BuildPathFormControl.value;
4691
- app.LowCodeUnit.SourceControlLookup =
4692
- this.SourceControlFormControl.value;
4693
- break;
4694
- case 'NPM':
4695
- app.LowCodeUnit.Package = this.PackageFormControl.value;
4696
- app.LowCodeUnit.Version = this.VersionFormControl.value;
4697
- break;
4698
- case 'WordPress':
4699
- app.LowCodeUnit.APIRoot = this.APIRootFormControl.value;
4700
- break;
4701
- case 'Zip':
4702
- app.LowCodeUnit.ZipFile = this.ZipFileFormControl.value;
4703
- break;
4704
- }
4705
- break;
4706
- case 'OAuth':
4707
- app.Processor.Scopes = this.ScopesFormControl.value.split(' ');
4708
- app.Processor.TokenLookup = this.TokenLookupFormControl.value;
4709
- app.LowCodeUnit = {
4710
- Type: this.LCUType,
4711
- };
4712
- switch (app.LowCodeUnit.Type) {
4713
- case 'GitHubOAuth':
4714
- app.LowCodeUnit.ClientID = this.ClientIDFormControl.value;
4715
- app.LowCodeUnit.ClientSecret = this.ClientSecretFormControl.value;
4716
- break;
4717
- }
4718
- break;
4719
- case 'Proxy':
4720
- app.Processor.InboundPath = this.InboundPathFormControl.value;
4721
- app.LowCodeUnit = {
4722
- Type: this.LCUType,
4723
- };
4724
- switch (app.LowCodeUnit.Type) {
4725
- case 'API':
4726
- app.LowCodeUnit.APIRoot = this.APIRootFormControl.value;
4727
- app.LowCodeUnit.Security = this.SecurityFormControl.value;
4728
- break;
4729
- case 'SPA':
4730
- app.LowCodeUnit.SPARoot = this.SPARootFormControl.value;
4731
- break;
4732
- }
4733
- break;
4734
- case 'Redirect':
4735
- app.Processor.IncludeRequest = !!this.IncludeRequestFormControl.value;
4736
- app.Processor.Permanent = !!this.PermanentFormControl.value;
4737
- app.Processor.PreserveMethod = !!this.PreserveMethodFormControl.value;
4738
- app.Processor.Redirect = this.RedirectFormControl.value;
4739
- break;
5059
+ else if (this.FeedItem.Status.Code === 2) {
5060
+ return 'sync';
4740
5061
  }
4741
- if (!app.LookupConfig.PathRegex.startsWith('/')) {
4742
- app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
5062
+ else {
5063
+ return 'help_outline';
4743
5064
  }
4744
- const saveAppReq = {
4745
- ProjectLookup: this.ProjectLookup,
4746
- Application: app,
4747
- ApplicationLookup: this.EditingApplicationLookup || Guid.CreateRaw(),
4748
- };
4749
- this.eacSvc.SaveApplicationAsCode(saveAppReq).then((res) => {
4750
- this.SaveFormEvent.emit(res);
4751
- });
4752
- }
4753
- SetEditingApplication(appLookup) {
4754
- this.EditingApplication = new EaCApplicationAsCode();
4755
- this.EditingApplicationLookup = appLookup;
4756
- this.setupProcessorDetailsForm();
4757
5065
  }
4758
- SourceControlChanged(event) {
4759
- this.listBuildPaths();
5066
+ get IconColor() {
5067
+ if (this.FeedItem.Status.Code === 0) {
5068
+ return 'green';
5069
+ }
5070
+ else if (this.FeedItem.Status.Code === 1) {
5071
+ return 'red';
5072
+ }
5073
+ else if (this.FeedItem.Status.Code === 2) {
5074
+ return 'blue';
5075
+ }
5076
+ else {
5077
+ return 'gray';
5078
+ }
4760
5079
  }
4761
- ProcessorTypeChanged(event) {
4762
- this.ProcessorType = event.value;
4763
- this.setupProcessorTypeSubForm();
5080
+ get State() {
5081
+ return this.eacSvc.State;
4764
5082
  }
4765
- LCUTypeChanged(event) {
4766
- this.LCUType = event.value;
4767
- this.setupLcuTypeSubForm();
5083
+ // Life Cycle
5084
+ ngOnInit() {
5085
+ this.handleRefresh();
4768
5086
  }
4769
- //HELPERS
4770
- cleanupLcuTypeSubForm() {
4771
- this.ProcessorDetailsFormGroup.removeControl('methods');
4772
- this.ProcessorDetailsFormGroup.removeControl('apiRoot');
4773
- this.ProcessorDetailsFormGroup.removeControl('security');
4774
- this.ProcessorDetailsFormGroup.removeControl('spaRoot');
4775
- this.ProcessorDetailsFormGroup.removeControl('applicationId');
4776
- this.ProcessorDetailsFormGroup.removeControl('sourceControl');
4777
- this.ProcessorDetailsFormGroup.removeControl('build');
4778
- this.ProcessorDetailsFormGroup.removeControl('clientId');
4779
- this.ProcessorDetailsFormGroup.removeControl('clientSecret');
4780
- this.ProcessorDetailsFormGroup.removeControl('package');
4781
- this.ProcessorDetailsFormGroup.removeControl('version');
4782
- this.ProcessorDetailsFormGroup.removeControl('zipFile');
5087
+ // API Methods
5088
+ CalculateTimelapse(timestamp) {
5089
+ return moment(timestamp).fromNow();
4783
5090
  }
4784
- cleanupProcessorTypeSubForm() {
4785
- this.ProcessorDetailsFormGroup.removeControl('defaultFile');
4786
- // this.ApplicationFormGroup.removeControl('dfsLcuType');
4787
- // this.ApplicationFormGroup.removeControl('oauthLcuType');
4788
- this.ProcessorDetailsFormGroup.removeControl('scopes');
4789
- this.ProcessorDetailsFormGroup.removeControl('tokenLookup');
4790
- this.ProcessorDetailsFormGroup.removeControl('inboundPath');
4791
- this.ProcessorDetailsFormGroup.removeControl('proxyLcuType');
4792
- this.ProcessorDetailsFormGroup.removeControl('includeRequest');
4793
- this.ProcessorDetailsFormGroup.removeControl('redirect');
4794
- this.ProcessorDetailsFormGroup.removeControl('permanent');
4795
- this.ProcessorDetailsFormGroup.removeControl('preserveMethod');
4796
- this.cleanupLcuTypeSubForm();
5091
+ HandleAction(action) {
5092
+ if (action.ActionType == 'Link') {
5093
+ if (action.Action.startsWith('http')) {
5094
+ window.open(action.Action, '_blank');
5095
+ }
5096
+ else {
5097
+ window.location.href = action.Action;
5098
+ }
5099
+ }
5100
+ else if (action.ActionType == 'Modal') {
5101
+ if (action.Action == 'AddSourceControl') {
5102
+ this.OpenSourceControlDialog(null);
5103
+ }
5104
+ else {
5105
+ alert('other modaled ' + action.Action);
5106
+ }
5107
+ }
4797
5108
  }
4798
- listBuildPaths() {
4799
- this.State.Loading = true;
4800
- console.log("Source Control: ", this.SourceControls[this.SourceControlFormControl.value]);
4801
- this.appsFlowSvc
4802
- .ListBuildPaths(this.SourceControls[this.SourceControlFormControl.value]?.Organization, this.SourceControls[this.SourceControlFormControl.value]?.Repository)
4803
- .subscribe((response) => {
4804
- this.BuildPathOptions = response.Model;
4805
- console.log("build path options: ", this.BuildPathOptions);
4806
- this.State.Loading = false;
4807
- // if (this.BuildPathOptions?.length === 1) {
4808
- // this.BuildPathFormControl.setValue(this.BuildPathOptions[0]);
4809
- // }
5109
+ OpenSourceControlDialog(scLookup) {
5110
+ const dialogRef = this.dialog.open(SourceControlDialogComponent, {
5111
+ width: '550px',
5112
+ data: {
5113
+ environment: this.Environment,
5114
+ environmentLookup: this.ActiveEnvironmentLookup,
5115
+ scLookup: scLookup,
5116
+ },
5117
+ });
5118
+ dialogRef.afterClosed().subscribe((result) => {
5119
+ // console.log('The dialog was closed');
5120
+ // console.log("result:", result)
4810
5121
  });
4811
5122
  }
4812
- setupLcuTypeSubForm() {
4813
- this.cleanupLcuTypeSubForm();
4814
- if (this.LCUType) {
4815
- switch (this.LCUType) {
4816
- case 'API':
4817
- this.setupLCUAPIForm();
4818
- break;
4819
- case 'ApplicationPointer':
4820
- this.setupLCUApplicationPointerForm();
4821
- break;
4822
- case 'GitHub':
4823
- this.setupLCUGitHubForm();
4824
- break;
4825
- case 'GitHubOAuth':
4826
- this.setupLCUGitHubOAuthForm();
4827
- break;
4828
- case 'WordPress':
4829
- this.setupLCUWordPressForm();
4830
- break;
4831
- // case 'NPM':
4832
- // this.setupLCUNPMForm();
4833
- // break;
4834
- case 'SPA':
4835
- this.setupLCUSPAForm();
4836
- break;
4837
- case 'Zip':
4838
- this.setupLCUZipForm();
4839
- break;
4840
- }
5123
+ SafeHtml(html) {
5124
+ return this.sanitizer.bypassSecurityTrustHtml(html);
5125
+ }
5126
+ // Helpers
5127
+ handleRefresh() {
5128
+ if (this.FeedItem?.RefreshLink) {
5129
+ setTimeout(() => {
5130
+ this.eacSvc.CheckUserFeedItem(this.FeedItem).subscribe(async (response) => {
5131
+ if (response.Status.Code === 0) {
5132
+ this.FeedItem = response.Model;
5133
+ this.handleRefresh();
5134
+ }
5135
+ else {
5136
+ console.log(response);
5137
+ }
5138
+ }, (err) => {
5139
+ console.log(err);
5140
+ });
5141
+ }, 5000);
4841
5142
  }
4842
5143
  }
4843
- setupProcessorDetailsForm() {
4844
- this.ProcessorType = this.EditingApplication?.Processor?.Type || '';
4845
- // console.log('EDITING APP = ', this.EditingApplication);
4846
- if (this.EditingApplication != null) {
4847
- this.ProcessorDetailsFormGroup = this.formBldr.group({
4848
- procType: [this.ProcessorType, [Validators.required]],
4849
- });
4850
- // this.setupDfsForm();
4851
- // this.setupLcuTypeSubForm();
4852
- this.setupProcessorTypeSubForm();
5144
+ }
5145
+ MainFeedCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MainFeedCardComponent, deps: [{ token: EaCService }, { token: i2$3.MatDialog }, { token: i3$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
5146
+ MainFeedCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: MainFeedCardComponent, selector: "lcu-main-feed-card", inputs: { FeedItem: ["feed-item", "FeedItem"] }, ngImport: i0, template: "<mat-card class=\"social-card\">\n <mat-card-header>\n <img\n mat-card-avatar\n class=\"example-header-image\"\n [src]=\"FeedItem.Avatar\"\n *ngIf=\"FeedItem.Avatar\"\n />\n\n <mat-card-title *ngIf=\"FeedItem.Title\">{{ FeedItem.Title }}</mat-card-title>\n\n <mat-card-subtitle>\n <div *ngIf=\"FeedItem.Subtitle\">{{ FeedItem.Subtitle }}</div>\n\n <div *ngIf=\"FeedItem.Subtext\">{{ FeedItem.Subtext }}</div>\n\n <div *ngIf=\"FeedItem.Status\">\n <mat-icon\n *ngIf=\"Icon\"\n [style.color]=\"IconColor\"\n [class.spin]=\"FeedItem.Status?.Code == 2\"\n >\n {{ Icon }}\n </mat-icon>\n\n <span *ngIf=\"FeedItem.Timestamp\">\n {{ CalculateTimelapse(FeedItem.Timestamp) }}\n </span>\n </div>\n </mat-card-subtitle>\n </mat-card-header>\n\n <div *ngIf=\"!FeedItem.IsShortForm\">\n <div class=\"feed-card-container\">\n <div class=\"feed-card-main-content\">\n <mat-tab-group>\n <ng-container *ngFor=\"let tab of FeedItem.Tabs\">\n <mat-tab [label]=\"tab.Title\">\n <div class=\"tab\">\n <ng-container *ngIf=\"tab.Data?.Commit?.Message\">\n <div class=\"commit-message\">\n {{ tab.Data?.Commit?.Message }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"tab.Data?.Content\">\n <div class=\"content\">\n {{ tab.Data?.Content }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"tab.Data?.Video\">\n <div\n class=\"video\"\n [innerHTML]=\"SafeHtml(tab.Data.Video)\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"tab.Data?.Comments\">\n <div class=\"comments\">\n <ng-container *ngIf=\"tab.Data?.Comments?.length <= 0\">\n <h4>No comments provided</h4>\n </ng-container>\n\n <mat-card *ngFor=\"let comment of tab.Data?.Comments\">\n <mat-card-header>\n <img\n mat-card-avatar\n class=\"example-header-image\"\n [src]=\"comment.Avatar\"\n *ngIf=\"comment.Avatar\"\n />\n\n <mat-card-title>\n {{ comment.Author }}\n commented on\n {{ comment.UpdatedAt }}\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n {{ comment.Comment }}\n </mat-card-content>\n </mat-card>\n </div>\n </ng-container>\n </div>\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n </div>\n </div>\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div fxFlex></div>\n\n <ng-container *ngFor=\"let action of FeedItem.Actions\">\n <button mat-button [color]=\"action.Color\" (click)=\"HandleAction(action)\">\n <mat-icon *ngIf=\"action.Icon\">{{ action.Icon }}</mat-icon>\n\n {{ action.Text }}\n </button>\n </ng-container>\n </mat-card-actions>\n</mat-card>\n", styles: [":host :host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host :host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host :host ::ng-deep .main-slot-container{padding:10px}:host :host ::ng-deep .slot-header{align-items:center}:host :host ::ng-deep .slot-content{width:100%}:host :host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host :host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host :host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host :host ::ng-deep .action-icon{height:25px;width:25px;font-size:25px;cursor:pointer}:host .example-header-image{background-size:cover}:host .mat-icon{display:inline-flex;vertical-align:middle}:host .mat-icon.spin{animation:rotate 1s ease-in-out infinite}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}:host .tab{margin:2em}:host .tab .video iframe{display:block;margin:auto}\n"], components: [{ type: i1$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i1$1.MatCardHeader, selector: "mat-card-header" }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2$2.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i2$2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { type: i1$1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i1$1.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1$1.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i1$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
5147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MainFeedCardComponent, decorators: [{
5148
+ type: Component,
5149
+ args: [{ selector: 'lcu-main-feed-card', template: "<mat-card class=\"social-card\">\n <mat-card-header>\n <img\n mat-card-avatar\n class=\"example-header-image\"\n [src]=\"FeedItem.Avatar\"\n *ngIf=\"FeedItem.Avatar\"\n />\n\n <mat-card-title *ngIf=\"FeedItem.Title\">{{ FeedItem.Title }}</mat-card-title>\n\n <mat-card-subtitle>\n <div *ngIf=\"FeedItem.Subtitle\">{{ FeedItem.Subtitle }}</div>\n\n <div *ngIf=\"FeedItem.Subtext\">{{ FeedItem.Subtext }}</div>\n\n <div *ngIf=\"FeedItem.Status\">\n <mat-icon\n *ngIf=\"Icon\"\n [style.color]=\"IconColor\"\n [class.spin]=\"FeedItem.Status?.Code == 2\"\n >\n {{ Icon }}\n </mat-icon>\n\n <span *ngIf=\"FeedItem.Timestamp\">\n {{ CalculateTimelapse(FeedItem.Timestamp) }}\n </span>\n </div>\n </mat-card-subtitle>\n </mat-card-header>\n\n <div *ngIf=\"!FeedItem.IsShortForm\">\n <div class=\"feed-card-container\">\n <div class=\"feed-card-main-content\">\n <mat-tab-group>\n <ng-container *ngFor=\"let tab of FeedItem.Tabs\">\n <mat-tab [label]=\"tab.Title\">\n <div class=\"tab\">\n <ng-container *ngIf=\"tab.Data?.Commit?.Message\">\n <div class=\"commit-message\">\n {{ tab.Data?.Commit?.Message }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"tab.Data?.Content\">\n <div class=\"content\">\n {{ tab.Data?.Content }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"tab.Data?.Video\">\n <div\n class=\"video\"\n [innerHTML]=\"SafeHtml(tab.Data.Video)\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"tab.Data?.Comments\">\n <div class=\"comments\">\n <ng-container *ngIf=\"tab.Data?.Comments?.length <= 0\">\n <h4>No comments provided</h4>\n </ng-container>\n\n <mat-card *ngFor=\"let comment of tab.Data?.Comments\">\n <mat-card-header>\n <img\n mat-card-avatar\n class=\"example-header-image\"\n [src]=\"comment.Avatar\"\n *ngIf=\"comment.Avatar\"\n />\n\n <mat-card-title>\n {{ comment.Author }}\n commented on\n {{ comment.UpdatedAt }}\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n {{ comment.Comment }}\n </mat-card-content>\n </mat-card>\n </div>\n </ng-container>\n </div>\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n </div>\n </div>\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div fxFlex></div>\n\n <ng-container *ngFor=\"let action of FeedItem.Actions\">\n <button mat-button [color]=\"action.Color\" (click)=\"HandleAction(action)\">\n <mat-icon *ngIf=\"action.Icon\">{{ action.Icon }}</mat-icon>\n\n {{ action.Text }}\n </button>\n </ng-container>\n </mat-card-actions>\n</mat-card>\n", styles: [":host :host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host :host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host :host ::ng-deep .main-slot-container{padding:10px}:host :host ::ng-deep .slot-header{align-items:center}:host :host ::ng-deep .slot-content{width:100%}:host :host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host :host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host :host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host :host ::ng-deep .action-icon{height:25px;width:25px;font-size:25px;cursor:pointer}:host .example-header-image{background-size:cover}:host .mat-icon{display:inline-flex;vertical-align:middle}:host .mat-icon.spin{animation:rotate 1s ease-in-out infinite}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}:host .tab{margin:2em}:host .tab .video iframe{display:block;margin:auto}\n"] }]
5150
+ }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialog }, { type: i3$2.DomSanitizer }]; }, propDecorators: { FeedItem: [{
5151
+ type: Input,
5152
+ args: ['feed-item']
5153
+ }] } });
5154
+
5155
+ class TwoColumnHeaderComponent {
5156
+ constructor() { }
5157
+ ngOnInit() {
5158
+ }
5159
+ }
5160
+ TwoColumnHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TwoColumnHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5161
+ TwoColumnHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TwoColumnHeaderComponent, selector: "lcu-two-column-header", ngImport: i0, template: "<div class=\"col-container\" fxLayout=\"row\">\n\n <div class=\"col-left\" fxFlex=\"15%\" >\n <ng-content select=\"[left]\"></ng-content>\n </div>\n\n <div class=\"col-center\" fxFlex=\"85%\">\n <ng-content></ng-content>\n </div>\n\n</div>\n", styles: [".col-container{background-color:#ebecf0}.col-left{min-width:210px}\n"], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
5162
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TwoColumnHeaderComponent, decorators: [{
5163
+ type: Component,
5164
+ args: [{ selector: 'lcu-two-column-header', template: "<div class=\"col-container\" fxLayout=\"row\">\n\n <div class=\"col-left\" fxFlex=\"15%\" >\n <ng-content select=\"[left]\"></ng-content>\n </div>\n\n <div class=\"col-center\" fxFlex=\"85%\">\n <ng-content></ng-content>\n </div>\n\n</div>\n", styles: [".col-container{background-color:#ebecf0}.col-left{min-width:210px}\n"] }]
5165
+ }], ctorParameters: function () { return []; } });
5166
+
5167
+ class CardCarouselComponent {
5168
+ constructor() {
5169
+ this.carouselIndex = 0;
5170
+ }
5171
+ ngOnInit() {
5172
+ }
5173
+ ngAfterViewInit() {
5174
+ this.assignCarouselClass();
5175
+ }
5176
+ LeftChevronClicked() {
5177
+ this.removeCarouselClasses();
5178
+ if (this.carouselIndex === 0) {
5179
+ this.carouselIndex = this.Stats.length - 1;
5180
+ }
5181
+ else {
5182
+ this.carouselIndex--;
4853
5183
  }
5184
+ this.assignCarouselClass();
4854
5185
  }
4855
- setupLCUGitHubForm() {
4856
- console.log('EditingApplication: ', this.EditingApplication);
4857
- this.ProcessorDetailsFormGroup.addControl('sourceControl', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SourceControlLookup || '', [Validators.required]));
4858
- this.ProcessorDetailsFormGroup.addControl('buildPath', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Path || '', [
4859
- Validators.required,
4860
- ]));
4861
- this.ProcessorDetailsFormGroup.addControl('build', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Build || 'latest', [Validators.required]));
4862
- this.listBuildPaths();
5186
+ MoreDetailsClicked() {
5187
+ console.log("More details clicked on carousel item", this.Stats[this.carouselIndex]);
4863
5188
  }
4864
- setupLCUApplicationPointerForm() {
4865
- this.ProcessorDetailsFormGroup.addControl('applicationId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ApplicationID || '', [Validators.required]));
5189
+ RightChevronClicked() {
5190
+ this.removeCarouselClasses();
5191
+ if (this.carouselIndex === this.Stats.length - 1) {
5192
+ this.carouselIndex = 0;
5193
+ }
5194
+ else {
5195
+ this.carouselIndex++;
5196
+ }
5197
+ this.assignCarouselClass();
4866
5198
  }
4867
- setupLCUSPAForm() {
4868
- this.ProcessorDetailsFormGroup.addControl('spaRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SPARoot || '', [Validators.required]));
5199
+ //HELPERS
5200
+ removeCarouselClasses() {
5201
+ for (let i = 0; i < this.Stats.length; i++) {
5202
+ if (i === this.carouselIndex) {
5203
+ document.getElementById("carousel-" + this.carouselIndex).classList.remove('active');
5204
+ }
5205
+ else {
5206
+ document.getElementById("carousel-" + i).classList.remove('hidden');
5207
+ }
5208
+ }
4869
5209
  }
4870
- setupLCUAPIForm() {
4871
- this.ProcessorDetailsFormGroup.addControl('methods', this.formBldr.control(this.EditingApplication.LookupConfig?.AllowedMethods?.join(' ') || '', []));
4872
- this.ProcessorDetailsFormGroup.addControl('apiRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.APIRoot || '', [Validators.required]));
4873
- this.ProcessorDetailsFormGroup.addControl('security', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Security || '', [Validators.required]));
5210
+ assignCarouselClass() {
5211
+ for (let i = 0; i < this.Stats.length; i++) {
5212
+ if (i === this.carouselIndex) {
5213
+ document.getElementById("carousel-" + this.carouselIndex).classList.add('active');
5214
+ }
5215
+ else {
5216
+ document.getElementById("carousel-" + i).classList.add('hidden');
5217
+ }
5218
+ }
4874
5219
  }
4875
- setupLCUGitHubOAuthForm() {
4876
- this.ProcessorDetailsFormGroup.addControl('clientId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientID || '', [Validators.required]));
4877
- this.ProcessorDetailsFormGroup.addControl('clientSecret', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientSecret || '', [Validators.required]));
5220
+ }
5221
+ CardCarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CardCarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5222
+ CardCarouselComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: CardCarouselComponent, selector: "lcu-card-carousel", inputs: { Stats: ["stats", "Stats"] }, ngImport: i0, template: "<div stats class=\"carousel-container\">\n <div class=\"chevron-container\" fxLayout=\"row\">\n <button mat-icon-button class=\"chevron-button\" id=\"left-chevron\" (click)=\"LeftChevronClicked()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button mat-icon-button class=\"chevron-button\" id=\"right-chevron\" (click)=\"RightChevronClicked()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n <ng-container *ngFor=\"let stat of Stats; let i = index\">\n <div class=\"carousel-item\" [id]=\"'carousel-'+i\">\n <div class=\"carousel-title\">{{stat.Name}}</div>\n <div class=\"carousel-stat\">{{stat.Stat}}</div>\n </div>\n </ng-container>\n <div (click)=\"MoreDetailsClicked()\">More details</div>\n</div>\n", styles: [".carousel-container{text-align:center;height:75px;padding-top:20px}.carousel-item.hidden{display:none}.carousel-item.active{visibility:visible}.chevron-button{position:absolute}#right-chevron{right:5px}#left-chevron{left:5px}\n"], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
5223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CardCarouselComponent, decorators: [{
5224
+ type: Component,
5225
+ args: [{ selector: 'lcu-card-carousel', template: "<div stats class=\"carousel-container\">\n <div class=\"chevron-container\" fxLayout=\"row\">\n <button mat-icon-button class=\"chevron-button\" id=\"left-chevron\" (click)=\"LeftChevronClicked()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button mat-icon-button class=\"chevron-button\" id=\"right-chevron\" (click)=\"RightChevronClicked()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n <ng-container *ngFor=\"let stat of Stats; let i = index\">\n <div class=\"carousel-item\" [id]=\"'carousel-'+i\">\n <div class=\"carousel-title\">{{stat.Name}}</div>\n <div class=\"carousel-stat\">{{stat.Stat}}</div>\n </div>\n </ng-container>\n <div (click)=\"MoreDetailsClicked()\">More details</div>\n</div>\n", styles: [".carousel-container{text-align:center;height:75px;padding-top:20px}.carousel-item.hidden{display:none}.carousel-item.active{visibility:visible}.chevron-button{position:absolute}#right-chevron{right:5px}#left-chevron{left:5px}\n"] }]
5226
+ }], ctorParameters: function () { return []; }, propDecorators: { Stats: [{
5227
+ type: Input,
5228
+ args: ['stats']
5229
+ }] } });
5230
+
5231
+ class SecurityToggleComponent {
5232
+ constructor(eacSvc, formBldr) {
5233
+ this.eacSvc = eacSvc;
5234
+ this.formBldr = formBldr;
5235
+ this.SaveFormEvent = new EventEmitter;
5236
+ this.SkeletonEffect = 'wave';
4878
5237
  }
4879
- setupLCUWordPressForm() {
4880
- this.ProcessorDetailsFormGroup.addControl('apiRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.APIRoot || '', [Validators.required]));
5238
+ get IsPrivateFormControl() {
5239
+ return this.SecurityFormGroup?.controls.isPrivate;
4881
5240
  }
4882
- setupProxyForm() {
4883
- this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4884
- this.ProcessorDetailsFormGroup.addControl('inboundPath', this.formBldr.control(this.EditingApplication.Processor?.InboundPath || '', [Validators.required]));
4885
- this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
5241
+ get IsTriggerSignInFormControl() {
5242
+ return this.SecurityFormGroup?.controls.isTriggerSignIn;
4886
5243
  }
4887
- setupRedirectForm() {
4888
- this.ProcessorDetailsFormGroup.addControl('redirect', this.formBldr.control(this.EditingApplication.Processor?.Redirect || '', [
4889
- Validators.required,
4890
- ]));
4891
- this.ProcessorDetailsFormGroup.addControl('permanent', this.formBldr.control(this.EditingApplication.Processor?.Permanent || false, []));
4892
- this.ProcessorDetailsFormGroup.addControl('preserveMethod', this.formBldr.control(this.EditingApplication.Processor?.PreserveMethod || false, []));
4893
- this.ProcessorDetailsFormGroup.addControl('includeRequest', this.formBldr.control(this.EditingApplication.Processor?.IncludeRequest || false, []));
4894
- this.DetermineTooltipText();
5244
+ get State() {
5245
+ return this.eacSvc.State;
4895
5246
  }
4896
- setupOAuthForm() {
4897
- this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4898
- this.ProcessorDetailsFormGroup.addControl('scopes', this.formBldr.control(this.EditingApplication.Processor?.Scopes?.Join(' ') || '', [Validators.required]));
4899
- this.ProcessorDetailsFormGroup.addControl('tokenLookup', this.formBldr.control(this.EditingApplication.Processor?.TokenLookup || '', [Validators.required]));
4900
- this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
5247
+ ngOnInit() {
5248
+ this.setupSecurityFormGroup();
4901
5249
  }
4902
- setupLCUZipForm() {
4903
- this.ProcessorDetailsFormGroup.addControl('zipFile', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ZipFile || '', [Validators.required]));
5250
+ SecuritySubmit() {
5251
+ //save the security settings
5252
+ console.log("submitting security values: ", this.SecurityFormGroup.value);
5253
+ this.SaveFormEvent.emit(this.SecurityFormGroup.value);
4904
5254
  }
4905
- setupDfsForm() {
4906
- this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4907
- this.ProcessorDetailsFormGroup.addControl('defaultFile', this.formBldr.control(this.EditingApplication.Processor?.DefaultFile || 'index.html', [Validators.required]));
4908
- this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
5255
+ setupSecurityFormGroup() {
5256
+ this.ProcessorType = this.EditingApplication?.Processor?.Type || '';
5257
+ this.SecurityFormGroup = this.formBldr.group({});
5258
+ this.setupSecurityForm();
4909
5259
  }
4910
- setupProcessorTypeSubForm() {
4911
- this.cleanupProcessorTypeSubForm();
4912
- if (this.ProcessorType) {
4913
- switch (this.ProcessorType) {
4914
- case 'DFS':
4915
- this.setupDfsForm();
4916
- break;
4917
- case 'OAuth':
4918
- this.setupOAuthForm();
4919
- break;
4920
- case 'Proxy':
4921
- this.setupProxyForm();
4922
- break;
4923
- case 'Redirect':
4924
- this.setupRedirectForm();
4925
- break;
4926
- }
4927
- }
4928
- this.setupLcuTypeSubForm();
5260
+ setupSecurityForm() {
5261
+ this.SecurityFormGroup.addControl('isPrivate', this.formBldr.control(this.EditingApplication.LookupConfig?.IsPrivate || false, [Validators.required]));
5262
+ this.SecurityFormGroup.addControl('isTriggerSignIn', this.formBldr.control(this.EditingApplication.LookupConfig?.IsTriggerSignIn || false, [Validators.required]));
4929
5263
  }
4930
5264
  }
4931
- ProcessorDetailsFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ProcessorDetailsFormComponent, deps: [{ token: ApplicationsFlowService }, { token: i1$2.FormBuilder }, { token: EaCService }], target: i0.ɵɵFactoryTarget.Component });
4932
- ProcessorDetailsFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: ProcessorDetailsFormComponent, selector: "lcu-processor-details-form", inputs: { EditingApplication: ["editing-application", "EditingApplication"], EditingApplicationLookup: ["editing-application-lookup", "EditingApplicationLookup"], HasSaveButton: ["has-save-button", "HasSaveButton"], SourceControlLookups: ["source-control-lookups", "SourceControlLookups"], ProjectLookup: ["project-lookup", "ProjectLookup"] }, outputs: { SaveFormEvent: "save-form-event" }, ngImport: i0, template: "<form class=\"processor-details-form\" [formGroup]=\"ProcessorDetailsFormGroup\" (ngSubmit)=\"SaveProcessorDetails()\">\n<!-- <mat-card class=\"spread flow-card\"> -->\n <!-- <mat-card-header>\n <mat-card-title> Processor Details </mat-card-title>\n </mat-card-header> -->\n\n <ng-container *ngIf=\"State?.Loading\">\n\n <ng-container *ngFor=\"let fc of ValidFormControls\">\n\n <skeleton-block \n [id]=\"fc\"\n class=\"s-block\" \n effect=\"wave\"\n ></skeleton-block>\n \n </ng-container>\n\n <lcu-loader *ngIf=\"LCUType === 'Redirect'\" [loading]=\"State?.Loading\"></lcu-loader>\n\n </ng-container>\n <!-- END SKELETON -->\n\n <ng-container *ngIf=\"!State?.Loading\">\n\n <!-- <mat-card-content> -->\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"procType\"\n (selectionChange)=\"ProcessorTypeChanged($event)\"\n required\n >\n <mat-option value=\"DFS\">View Package</mat-option>\n\n <mat-option value=\"Redirect\">Redirect</mat-option>\n\n <mat-option value=\"Proxy\">Proxy</mat-option>\n\n <mat-option value=\"OAuth\">OAuth</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"ProcessorType\">\n <div *ngSwitchCase=\"'DFS'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Default File\"\n formControlName=\"defaultFile\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"NPM\">NPM</mat-option>\n\n <mat-option value=\"GitHub\">GitHub</mat-option>\n\n <mat-option value=\"WordPress\">WordPress</mat-option>\n\n <!-- <mat-option value=\"Zip\">Zip</mat-option> -->\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHub'\">\n <!-- <lcu-source-control-form-controls\n [build-path]=\"EditingApplication?.LowCodeUnit?.Path\"\n [form-group]=\"ProcessorDetailsFormGroup\"\n [source-control]=\"DefaultSourceControl\"\n [use-branches]=\"false\"\n [use-build-path]=\"true\"\n ></lcu-source-control-form-controls> -->\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Source Control\"\n formControlName=\"sourceControl\"\n (selectionChange)=\"SourceControlChanged($event)\"\n required\n >\n <mat-option \n *ngFor=\"let scLookup of SourceControlLookups\" \n [value]=\"scLookup\">\n {{scLookup}}\n </mat-option>\n \n \n <!-- <mat-option value=\"Zip\">Zip</mat-option> -->\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width with-hint\"\n *ngIf=\"\n SourceControlFormControl?.valid\n \"\n > \n <mat-select\n formControlName=\"buildPath\"\n placeholder=\"Build Path\"\n required\n >\n <ng-container *ngFor=\"let buildPath of BuildPathOptions\">\n <mat-option [value]=\"buildPath\">\n {{ buildPath }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n The build path identifies which build action to use for your\n configuration.\n </mat-hint>\n </mat-form-field>\n\n <mat-form-field\n class=\"mat-full-width\"\n *ngIf=\"\n SourceControlFormControl?.valid\n \"\n >\n <input\n matInput\n placeholder=\"Build\"\n formControlName=\"build\"\n required\n />\n\n <mat-hint>\n Current Build:\n {{ EditingApplication?.LowCodeUnit?.CurrentBuild }}\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'NPM'\">\n <lcu-npm-package-select\n [npm-package]=\"EditingApplication?.LowCodeUnit?.Package\"\n [npm-package-version]=\"\n EditingApplication?.LowCodeUnit?.Version\n \"\n [form-group]=\"ProcessorDetailsFormGroup\"\n ></lcu-npm-package-select>\n\n <mat-hint>\n Current Version:\n {{ EditingApplication?.LowCodeUnit?.CurrentVersion }}\n </mat-hint>\n </div>\n\n <div *ngSwitchCase=\"'WordPress'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"API Root\"\n formControlName=\"apiRoot\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'OAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Scopes (space separated)\"\n formControlName=\"scopes\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Token Lookup\"\n formControlName=\"tokenLookup\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"GitHubOAuth\">GitHub</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHubOAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client ID\"\n formControlName=\"clientId\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client Secret\"\n formControlName=\"clientSecret\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Proxy'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Inbound Path\"\n formControlName=\"inboundPath\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"API\">API</mat-option>\n\n <mat-option value=\"SPA\">Single Page Application</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'API'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"API Root\"\n formControlName=\"apiRoot\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Allowed Methods (separate with spaces)\"\n formControlName=\"methods\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Security ({header}~{value})\"\n formControlName=\"security\"\n required\n />\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'SPA'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"SPA Root\"\n formControlName=\"spaRoot\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Redirect'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Redirect URL\"\n formControlName=\"redirect\"\n required\n />\n </mat-form-field>\n\n <div>\n <mat-slide-toggle \n class=\"spread\" \n formControlName=\"permanent\">\n Is Permanent?\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"spread\"\n formControlName=\"preserveMethod\"\n >\n Preserve Method?\n </mat-slide-toggle>\n\n <mat-icon\n class=\"spread\"\n matSuffix\n (mouseenter)=\"DetermineTooltipText()\"\n matTooltip={{redirectTooltip}}\n >\n info_outline\n </mat-icon>\n\n \n </div>\n \n <div>\n <mat-slide-toggle \n class=\"spread\" \n formControlName=\"includeRequest\">\n Include Path and Query?\n </mat-slide-toggle>\n\n <mat-icon\n class=\"spread\"\n matSuffix\n matTooltip=\"Should the redirect include the path and query?\"\n >\n info_outline\n </mat-icon>\n </div>\n </div>\n </div>\n <!-- </mat-card-content> -->\n <!-- <mat-card-actions fxLayoutAlign=\"center center\"> -->\n\n <!-- <button \n *ngIf=\"HasSaveButton && !State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!ProcessorDetailsFormGroup.valid || !ProcessorDetailsFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Processor Details\n </button> -->\n <!-- <lcu-loader *ngIf=\"HasSaveButton\" [loading]=\"State?.Loading\"></lcu-loader> -->\n\n <!-- </mat-card-actions> -->\n\n </ng-container>\n \n<!-- </mat-card> -->\n</form>\n \n", styles: [".s-block{margin:10px 0;width:100%;height:40px}\n"], components: [{ type: i4$3.SkeletonBlockComponent, selector: "skeleton-block", inputs: ["width", "height", "effect", "borderRadius"] }, { type: i3.LoaderComponent, selector: "lcu-loader", inputs: ["diameter", "hide-inner", "loading"] }, { type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: NpmPackageSelectComponent, selector: "lcu-npm-package-select", inputs: ["npm-package", "npm-package-version", "form-group"] }, { type: i5$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i4$1.MatSuffix, selector: "[matSuffix]" }, { type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
4933
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ProcessorDetailsFormComponent, decorators: [{
5265
+ SecurityToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SecurityToggleComponent, deps: [{ token: EaCService }, { token: i1$2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
5266
+ SecurityToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: SecurityToggleComponent, selector: "lcu-security-toggle", inputs: { EditingApplication: ["editing-application", "EditingApplication"] }, outputs: { SaveFormEvent: "save-form-event" }, ngImport: i0, template: "<form\n class=\"security-form\"\n [formGroup]=\"SecurityFormGroup\"\n (ngSubmit)=\"SecuritySubmit()\"\n>\n <mat-card class=\"flow-card\">\n <!-- SKELETON LOADING -->\n <ng-container *ngIf=\"State?.Loading\">\n <mat-card-header fxLayoutAlign=\"space-between center\">\n <mat-card-title skeleton-text [effect]=\"SkeletonEffect\">\n Security Settings\n </mat-card-title>\n <div fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">XXX</div>\n\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\">\n info_outline\n </mat-icon>\n </div>\n </mat-card-header>\n\n <mat-card-actions fxLayoutAlign=\"center center\">\n <div\n fxFlex=\"100%\"\n skeleton-text\n [effect]=\"SkeletonEffect\"\n fxLayoutAlign=\"center center\"\n >\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\"> save </mat-icon>\n\n Save Settings\n </div>\n </mat-card-actions>\n </ng-container>\n <!-- END SKELETON LOADING -->\n\n <!-- BEGIN ACTUAL CONTENT -->\n\n <ng-container *ngIf=\"!State?.Loading\">\n <mat-card-header>\n <mat-card-title> Security Settings </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-slide-toggle\n formControlName=\"isPrivate\"\n matTooltip=\"Is Secure Application?\"\n >\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Secured Application is one that requires the user to be authenticated to use the application. The application is hosted behind an identity wall.\"\n >\n info_outline\n </mat-icon>\n </mat-card-header>\n\n <mat-card-content>\n <div>\n <div *ngIf=\"IsPrivateFormControl.value\">\n <div>\n <mat-slide-toggle formControlName=\"isTriggerSignIn\">\n Is Trigger Sign In Application?\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Trigger Sign In Application will direct the user to sign in if they are not already.\"\n >\n info_outline\n </mat-icon>\n </div>\n </div>\n </div>\n </mat-card-content>\n\n <mat-card-actions fxLayoutAlign=\"center center\">\n <button\n mat-raised-button\n type=\"submit\"\n fxFlex=\"100%\"\n color=\"primary\"\n [disabled]=\"!SecurityFormGroup.valid || !SecurityFormGroup.dirty\"\n >\n <mat-icon>save</mat-icon>\n Save Settings\n </button>\n </mat-card-actions>\n </ng-container>\n </mat-card>\n</form>\n", styles: ["::ng-deep .mat-tooltip{color:#000!important}.flow-card{margin:32px 20px}\n"], components: [{ type: i1$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i1$1.MatCardHeader, selector: "mat-card-header" }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i1$1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i4$3.SkeletonTextDirective, selector: "[skeleton-text]", inputs: ["effect"] }, { type: i1$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4$1.MatSuffix, selector: "[matSuffix]" }, { type: i1$1.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }] });
5267
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SecurityToggleComponent, decorators: [{
4934
5268
  type: Component,
4935
- args: [{ selector: 'lcu-processor-details-form', template: "<form class=\"processor-details-form\" [formGroup]=\"ProcessorDetailsFormGroup\" (ngSubmit)=\"SaveProcessorDetails()\">\n<!-- <mat-card class=\"spread flow-card\"> -->\n <!-- <mat-card-header>\n <mat-card-title> Processor Details </mat-card-title>\n </mat-card-header> -->\n\n <ng-container *ngIf=\"State?.Loading\">\n\n <ng-container *ngFor=\"let fc of ValidFormControls\">\n\n <skeleton-block \n [id]=\"fc\"\n class=\"s-block\" \n effect=\"wave\"\n ></skeleton-block>\n \n </ng-container>\n\n <lcu-loader *ngIf=\"LCUType === 'Redirect'\" [loading]=\"State?.Loading\"></lcu-loader>\n\n </ng-container>\n <!-- END SKELETON -->\n\n <ng-container *ngIf=\"!State?.Loading\">\n\n <!-- <mat-card-content> -->\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"procType\"\n (selectionChange)=\"ProcessorTypeChanged($event)\"\n required\n >\n <mat-option value=\"DFS\">View Package</mat-option>\n\n <mat-option value=\"Redirect\">Redirect</mat-option>\n\n <mat-option value=\"Proxy\">Proxy</mat-option>\n\n <mat-option value=\"OAuth\">OAuth</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"ProcessorType\">\n <div *ngSwitchCase=\"'DFS'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Default File\"\n formControlName=\"defaultFile\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"NPM\">NPM</mat-option>\n\n <mat-option value=\"GitHub\">GitHub</mat-option>\n\n <mat-option value=\"WordPress\">WordPress</mat-option>\n\n <!-- <mat-option value=\"Zip\">Zip</mat-option> -->\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHub'\">\n <!-- <lcu-source-control-form-controls\n [build-path]=\"EditingApplication?.LowCodeUnit?.Path\"\n [form-group]=\"ProcessorDetailsFormGroup\"\n [source-control]=\"DefaultSourceControl\"\n [use-branches]=\"false\"\n [use-build-path]=\"true\"\n ></lcu-source-control-form-controls> -->\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Source Control\"\n formControlName=\"sourceControl\"\n (selectionChange)=\"SourceControlChanged($event)\"\n required\n >\n <mat-option \n *ngFor=\"let scLookup of SourceControlLookups\" \n [value]=\"scLookup\">\n {{scLookup}}\n </mat-option>\n \n \n <!-- <mat-option value=\"Zip\">Zip</mat-option> -->\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width with-hint\"\n *ngIf=\"\n SourceControlFormControl?.valid\n \"\n > \n <mat-select\n formControlName=\"buildPath\"\n placeholder=\"Build Path\"\n required\n >\n <ng-container *ngFor=\"let buildPath of BuildPathOptions\">\n <mat-option [value]=\"buildPath\">\n {{ buildPath }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n The build path identifies which build action to use for your\n configuration.\n </mat-hint>\n </mat-form-field>\n\n <mat-form-field\n class=\"mat-full-width\"\n *ngIf=\"\n SourceControlFormControl?.valid\n \"\n >\n <input\n matInput\n placeholder=\"Build\"\n formControlName=\"build\"\n required\n />\n\n <mat-hint>\n Current Build:\n {{ EditingApplication?.LowCodeUnit?.CurrentBuild }}\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'NPM'\">\n <lcu-npm-package-select\n [npm-package]=\"EditingApplication?.LowCodeUnit?.Package\"\n [npm-package-version]=\"\n EditingApplication?.LowCodeUnit?.Version\n \"\n [form-group]=\"ProcessorDetailsFormGroup\"\n ></lcu-npm-package-select>\n\n <mat-hint>\n Current Version:\n {{ EditingApplication?.LowCodeUnit?.CurrentVersion }}\n </mat-hint>\n </div>\n\n <div *ngSwitchCase=\"'WordPress'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"API Root\"\n formControlName=\"apiRoot\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'OAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Scopes (space separated)\"\n formControlName=\"scopes\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Token Lookup\"\n formControlName=\"tokenLookup\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"GitHubOAuth\">GitHub</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHubOAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client ID\"\n formControlName=\"clientId\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client Secret\"\n formControlName=\"clientSecret\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Proxy'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Inbound Path\"\n formControlName=\"inboundPath\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"API\">API</mat-option>\n\n <mat-option value=\"SPA\">Single Page Application</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'API'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"API Root\"\n formControlName=\"apiRoot\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Allowed Methods (separate with spaces)\"\n formControlName=\"methods\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Security ({header}~{value})\"\n formControlName=\"security\"\n required\n />\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'SPA'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"SPA Root\"\n formControlName=\"spaRoot\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Redirect'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Redirect URL\"\n formControlName=\"redirect\"\n required\n />\n </mat-form-field>\n\n <div>\n <mat-slide-toggle \n class=\"spread\" \n formControlName=\"permanent\">\n Is Permanent?\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"spread\"\n formControlName=\"preserveMethod\"\n >\n Preserve Method?\n </mat-slide-toggle>\n\n <mat-icon\n class=\"spread\"\n matSuffix\n (mouseenter)=\"DetermineTooltipText()\"\n matTooltip={{redirectTooltip}}\n >\n info_outline\n </mat-icon>\n\n \n </div>\n \n <div>\n <mat-slide-toggle \n class=\"spread\" \n formControlName=\"includeRequest\">\n Include Path and Query?\n </mat-slide-toggle>\n\n <mat-icon\n class=\"spread\"\n matSuffix\n matTooltip=\"Should the redirect include the path and query?\"\n >\n info_outline\n </mat-icon>\n </div>\n </div>\n </div>\n <!-- </mat-card-content> -->\n <!-- <mat-card-actions fxLayoutAlign=\"center center\"> -->\n\n <!-- <button \n *ngIf=\"HasSaveButton && !State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!ProcessorDetailsFormGroup.valid || !ProcessorDetailsFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Processor Details\n </button> -->\n <!-- <lcu-loader *ngIf=\"HasSaveButton\" [loading]=\"State?.Loading\"></lcu-loader> -->\n\n <!-- </mat-card-actions> -->\n\n </ng-container>\n \n<!-- </mat-card> -->\n</form>\n \n", styles: [".s-block{margin:10px 0;width:100%;height:40px}\n"] }]
4936
- }], ctorParameters: function () { return [{ type: ApplicationsFlowService }, { type: i1$2.FormBuilder }, { type: EaCService }]; }, propDecorators: { EditingApplication: [{
5269
+ args: [{ selector: 'lcu-security-toggle', template: "<form\n class=\"security-form\"\n [formGroup]=\"SecurityFormGroup\"\n (ngSubmit)=\"SecuritySubmit()\"\n>\n <mat-card class=\"flow-card\">\n <!-- SKELETON LOADING -->\n <ng-container *ngIf=\"State?.Loading\">\n <mat-card-header fxLayoutAlign=\"space-between center\">\n <mat-card-title skeleton-text [effect]=\"SkeletonEffect\">\n Security Settings\n </mat-card-title>\n <div fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">XXX</div>\n\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\">\n info_outline\n </mat-icon>\n </div>\n </mat-card-header>\n\n <mat-card-actions fxLayoutAlign=\"center center\">\n <div\n fxFlex=\"100%\"\n skeleton-text\n [effect]=\"SkeletonEffect\"\n fxLayoutAlign=\"center center\"\n >\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\"> save </mat-icon>\n\n Save Settings\n </div>\n </mat-card-actions>\n </ng-container>\n <!-- END SKELETON LOADING -->\n\n <!-- BEGIN ACTUAL CONTENT -->\n\n <ng-container *ngIf=\"!State?.Loading\">\n <mat-card-header>\n <mat-card-title> Security Settings </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-slide-toggle\n formControlName=\"isPrivate\"\n matTooltip=\"Is Secure Application?\"\n >\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Secured Application is one that requires the user to be authenticated to use the application. The application is hosted behind an identity wall.\"\n >\n info_outline\n </mat-icon>\n </mat-card-header>\n\n <mat-card-content>\n <div>\n <div *ngIf=\"IsPrivateFormControl.value\">\n <div>\n <mat-slide-toggle formControlName=\"isTriggerSignIn\">\n Is Trigger Sign In Application?\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Trigger Sign In Application will direct the user to sign in if they are not already.\"\n >\n info_outline\n </mat-icon>\n </div>\n </div>\n </div>\n </mat-card-content>\n\n <mat-card-actions fxLayoutAlign=\"center center\">\n <button\n mat-raised-button\n type=\"submit\"\n fxFlex=\"100%\"\n color=\"primary\"\n [disabled]=\"!SecurityFormGroup.valid || !SecurityFormGroup.dirty\"\n >\n <mat-icon>save</mat-icon>\n Save Settings\n </button>\n </mat-card-actions>\n </ng-container>\n </mat-card>\n</form>\n", styles: ["::ng-deep .mat-tooltip{color:#000!important}.flow-card{margin:32px 20px}\n"] }]
5270
+ }], ctorParameters: function () { return [{ type: EaCService }, { type: i1$2.FormBuilder }]; }, propDecorators: { EditingApplication: [{
4937
5271
  type: Input,
4938
5272
  args: ['editing-application']
4939
- }], EditingApplicationLookup: [{
4940
- type: Input,
4941
- args: ['editing-application-lookup']
4942
- }], HasSaveButton: [{
4943
- type: Input,
4944
- args: ['has-save-button']
4945
- }], SourceControlLookups: [{
4946
- type: Input,
4947
- args: ['source-control-lookups']
4948
- }], ProjectLookup: [{
4949
- type: Input,
4950
- args: ['project-lookup']
4951
5273
  }], SaveFormEvent: [{
4952
5274
  type: Output,
4953
5275
  args: ['save-form-event']
@@ -5224,175 +5546,75 @@ BuildPipelineFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0
5224
5546
  BuildPipelineFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: BuildPipelineFormComponent, selector: "lcu-build-pipeline-form", inputs: { DevOpsActionLookup: ["devops-action-lookup", "DevOpsActionLookup"], Disabled: ["disabled", "Disabled"], Environment: ["environment", "Environment"], EnvironmentLookup: ["environment-lookup", "EnvironmentLookup"], HostingDetails: ["hosting-details", "HostingDetails"] }, outputs: { ResponseEvent: "response-event" }, ngImport: i0, template: "<form \n class=\"form-card\" \n [formGroup]=\"BuildPipelineFormGroup\" \n (ngSubmit)=\"SubmitBuildPipeline()\"\n>\n <!-- <mat-card\n class=\"spread\" \n > -->\n <!-- <mat-card-header>\n <mat-card-title> Build Pipeline </mat-card-title>\n\n <mat-hint>\n Changes made here are reflected for all sources using this\n DevOpsAction\n </mat-hint>\n </mat-card-header> -->\n\n <!-- <mat-card-content> -->\n\n <ng-container *ngIf=\"HostingDetails?.Loading || State?.Loading\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <ng-container *ngIf=\"SelectedHostingOption?.Inputs\">\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n </ng-container>\n\n <skeleton-block \n *ngIf=\"\"\n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n <ng-container *ngIf=\"!HostingDetails?.Loading && !State?.Loading\">\n\n <!-- <div *ngIf=\"!HostingDetails?.Loading\"> -->\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n formControlName=\"buildPipeline\"\n placeholder=\"Build Pipeline\"\n [disabled]=\"Disabled\"\n (selectionChange)=\"BuildPipelineChanged()\"\n required\n >\n <ng-container\n *ngFor=\"let hostOption of HostingDetails?.HostingOptions; let i = index\"\n >\n <mat-option [value]=\"hostOption.Lookup\">\n {{ hostOption.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n <span *ngIf=\"BuildPipeline == hostOption?.Lookup\">\n {{ hostOption.Description }}\n </span>\n </ng-container>\n </mat-hint>\n </mat-form-field>\n \n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n formControlName=\"devOpsActionName\"\n placeholder=\"Name of DevOps Action\"\n required=\"true\"\n />\n </mat-form-field>\n \n <ng-container *ngFor=\"let input of SelectedHostingOption?.Inputs\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n [formControlName]=\"input.Lookup\"\n [placeholder]=\"input.Placeholder\"\n [required]=\"input.Required\"\n />\n \n <mat-hint>{{ input.Hint }}</mat-hint>\n </mat-form-field>\n </ng-container>\n \n <div *ngIf=\"BuildPipeline == 'npm-release'\">\n <mat-form-field class=\"mat-full-width with-hint padding-bottom-4\">\n <mat-icon matPrefix>security</mat-icon>\n \n <input\n id=\"npm-token\"\n matInput\n type=\"text\"\n formControlName=\"npmToken\"\n placeholder=\"NPM token\"\n [required]=\"!Disabled\"\n style=\"-webkit-text-security: disc;\"\n />\n <mat-hint>\n Securely publish to NPM, provide an NPM Personal Access Token (PAT) with publish access to the organization used for your NPM packages. \n Learn how to create and view access tokens \n <a\n href=\"https://docs.npmjs.com/creating-and-viewing-access-tokens\"\n target=\"_blank\"\n class=\"primary-link\"\n >\n here.\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n <!-- </div> -->\n \n <!-- <div *ngIf=\"HostingDetails?.Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n \n <div class=\"margin-3\">\n <h4 class=\"mat-title\">Loading hosting details</h4>\n </div>\n </div>\n </div> -->\n </ng-container>\n <!-- </mat-card-content> -->\n\n <!-- <mat-card-actions fxLayoutAlign=\"center center\"> -->\n\n <!-- <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!BuildPipelineFormGroup.valid || !BuildPipelineFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Build Pipeline\n </button> -->\n <!-- <lcu-loader [loading]=\"State?.Loading\"></lcu-loader> -->\n \n <!-- </mat-card-actions> -->\n <!-- </mat-card> -->\n</form>\n", styles: [".s-block{margin:10px 0;width:100%;height:40px}.primary-link{color:#4a918e;text-decoration:none}\n"], components: [{ type: i4$3.SkeletonBlockComponent, selector: "skeleton-block", inputs: ["width", "height", "effect", "borderRadius"] }, { type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4$1.MatPrefix, selector: "[matPrefix]" }] });
5225
5547
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BuildPipelineFormComponent, decorators: [{
5226
5548
  type: Component,
5227
- args: [{ selector: 'lcu-build-pipeline-form', template: "<form \n class=\"form-card\" \n [formGroup]=\"BuildPipelineFormGroup\" \n (ngSubmit)=\"SubmitBuildPipeline()\"\n>\n <!-- <mat-card\n class=\"spread\" \n > -->\n <!-- <mat-card-header>\n <mat-card-title> Build Pipeline </mat-card-title>\n\n <mat-hint>\n Changes made here are reflected for all sources using this\n DevOpsAction\n </mat-hint>\n </mat-card-header> -->\n\n <!-- <mat-card-content> -->\n\n <ng-container *ngIf=\"HostingDetails?.Loading || State?.Loading\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <ng-container *ngIf=\"SelectedHostingOption?.Inputs\">\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n </ng-container>\n\n <skeleton-block \n *ngIf=\"\"\n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n <ng-container *ngIf=\"!HostingDetails?.Loading && !State?.Loading\">\n\n <!-- <div *ngIf=\"!HostingDetails?.Loading\"> -->\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n formControlName=\"buildPipeline\"\n placeholder=\"Build Pipeline\"\n [disabled]=\"Disabled\"\n (selectionChange)=\"BuildPipelineChanged()\"\n required\n >\n <ng-container\n *ngFor=\"let hostOption of HostingDetails?.HostingOptions; let i = index\"\n >\n <mat-option [value]=\"hostOption.Lookup\">\n {{ hostOption.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n <span *ngIf=\"BuildPipeline == hostOption?.Lookup\">\n {{ hostOption.Description }}\n </span>\n </ng-container>\n </mat-hint>\n </mat-form-field>\n \n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n formControlName=\"devOpsActionName\"\n placeholder=\"Name of DevOps Action\"\n required=\"true\"\n />\n </mat-form-field>\n \n <ng-container *ngFor=\"let input of SelectedHostingOption?.Inputs\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n [formControlName]=\"input.Lookup\"\n [placeholder]=\"input.Placeholder\"\n [required]=\"input.Required\"\n />\n \n <mat-hint>{{ input.Hint }}</mat-hint>\n </mat-form-field>\n </ng-container>\n \n <div *ngIf=\"BuildPipeline == 'npm-release'\">\n <mat-form-field class=\"mat-full-width with-hint padding-bottom-4\">\n <mat-icon matPrefix>security</mat-icon>\n \n <input\n id=\"npm-token\"\n matInput\n type=\"text\"\n formControlName=\"npmToken\"\n placeholder=\"NPM token\"\n [required]=\"!Disabled\"\n style=\"-webkit-text-security: disc;\"\n />\n <mat-hint>\n Securely publish to NPM, provide an NPM Personal Access Token (PAT) with publish access to the organization used for your NPM packages. \n Learn how to create and view access tokens \n <a\n href=\"https://docs.npmjs.com/creating-and-viewing-access-tokens\"\n target=\"_blank\"\n class=\"primary-link\"\n >\n here.\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n <!-- </div> -->\n \n <!-- <div *ngIf=\"HostingDetails?.Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n \n <div class=\"margin-3\">\n <h4 class=\"mat-title\">Loading hosting details</h4>\n </div>\n </div>\n </div> -->\n </ng-container>\n <!-- </mat-card-content> -->\n\n <!-- <mat-card-actions fxLayoutAlign=\"center center\"> -->\n\n <!-- <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!BuildPipelineFormGroup.valid || !BuildPipelineFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Build Pipeline\n </button> -->\n <!-- <lcu-loader [loading]=\"State?.Loading\"></lcu-loader> -->\n \n <!-- </mat-card-actions> -->\n <!-- </mat-card> -->\n</form>\n", styles: [".s-block{margin:10px 0;width:100%;height:40px}.primary-link{color:#4a918e;text-decoration:none}\n"] }]
5228
- }], ctorParameters: function () { return [{ type: EaCService }, { type: i1$2.FormBuilder }, { type: ApplicationsFlowService }]; }, propDecorators: { DevOpsActionLookup: [{
5229
- type: Input,
5230
- args: ['devops-action-lookup']
5231
- }], Disabled: [{
5232
- type: Input,
5233
- args: ['disabled']
5234
- }], Environment: [{
5235
- type: Input,
5236
- args: ['environment']
5237
- }], EnvironmentLookup: [{
5238
- type: Input,
5239
- args: ['environment-lookup']
5240
- }], HostingDetails: [{
5241
- type: Input,
5242
- args: ['hosting-details']
5243
- }], ResponseEvent: [{
5244
- type: Output,
5245
- args: ['response-event']
5246
- }] } });
5247
-
5248
- class BuildPipelineDialogComponent {
5249
- constructor(dialogRef, eacSvc, data, snackBar) {
5250
- this.dialogRef = dialogRef;
5251
- this.eacSvc = eacSvc;
5252
- this.data = data;
5253
- this.snackBar = snackBar;
5254
- }
5255
- get BuildPipelineFormGroup() {
5256
- return this.BuildPipelineControl?.BuildPipelineFormGroup;
5257
- }
5258
- get HasConnection() {
5259
- return this.State.GitHub.HasConnection;
5260
- }
5261
- get State() {
5262
- return this.eacSvc.State;
5263
- }
5264
- ngOnInit() {
5265
- }
5266
- CloseDialog() {
5267
- this.dialogRef.close();
5268
- }
5269
- HandleResponseEvent(event) {
5270
- console.log("Response Event: ", event);
5271
- if (event.Code === 0) {
5272
- this.snackBar.open("Build Pipeline Created Succesfully", "Dismiss", {
5273
- duration: 5000
5274
- });
5275
- this.CloseDialog();
5276
- }
5277
- else {
5278
- this.ErrorMessage = event.Message;
5279
- }
5280
- }
5281
- SaveBuildPipeline() {
5282
- this.BuildPipelineControl.SaveEnvironment();
5283
- }
5284
- }
5285
- BuildPipelineDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BuildPipelineDialogComponent, deps: [{ token: i2$3.MatDialogRef }, { token: EaCService }, { token: MAT_DIALOG_DATA }, { token: i3$1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
5286
- BuildPipelineDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: BuildPipelineDialogComponent, selector: "lcu-build-pipeline-dialog", viewQueries: [{ propertyName: "BuildPipelineControl", first: true, predicate: BuildPipelineFormComponent, descendants: true }], ngImport: i0, template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Build Pipeline</h2>\n\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n<ng-container *ngIf=\"!HasConnection\">\n \n <lcu-git-auth></lcu-git-auth>\n\n</ng-container>\n\n<ng-container *ngIf=\"HasConnection\">\n\n<lcu-build-pipeline-form \n [devops-action-lookup]=\"data.devopsActionLookup\"\n [environment]=\"data.environment\" \n [environment-lookup]=\"data.environmentLookup\"\n (response-event)=\"HandleResponseEvent($event)\"\n >\n\n</lcu-build-pipeline-form>\n\n<mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n</mat-error>\n\n</ng-container>\n</mat-dialog-content>\n\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveBuildPipeline()\"\n [disabled]=\"!BuildPipelineFormGroup?.valid || !BuildPipelineFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>", styles: [".dialog-header{width:100%}\n"], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: GitAuthComponent, selector: "lcu-git-auth" }, { type: BuildPipelineFormComponent, selector: "lcu-build-pipeline-form", inputs: ["devops-action-lookup", "disabled", "environment", "environment-lookup", "hosting-details"], outputs: ["response-event"] }], directives: [{ type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i2$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i2$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
5287
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BuildPipelineDialogComponent, decorators: [{
5288
- type: Component,
5289
- args: [{ selector: 'lcu-build-pipeline-dialog', template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Build Pipeline</h2>\n\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n<ng-container *ngIf=\"!HasConnection\">\n \n <lcu-git-auth></lcu-git-auth>\n\n</ng-container>\n\n<ng-container *ngIf=\"HasConnection\">\n\n<lcu-build-pipeline-form \n [devops-action-lookup]=\"data.devopsActionLookup\"\n [environment]=\"data.environment\" \n [environment-lookup]=\"data.environmentLookup\"\n (response-event)=\"HandleResponseEvent($event)\"\n >\n\n</lcu-build-pipeline-form>\n\n<mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n</mat-error>\n\n</ng-container>\n</mat-dialog-content>\n\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveBuildPipeline()\"\n [disabled]=\"!BuildPipelineFormGroup?.valid || !BuildPipelineFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>", styles: [".dialog-header{width:100%}\n"] }]
5290
- }], ctorParameters: function () { return [{ type: i2$3.MatDialogRef }, { type: EaCService }, { type: undefined, decorators: [{
5291
- type: Inject,
5292
- args: [MAT_DIALOG_DATA]
5293
- }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { BuildPipelineControl: [{
5294
- type: ViewChild,
5295
- args: [BuildPipelineFormComponent]
5296
- }] } });
5297
-
5298
- class EditApplicationFormComponent {
5299
- constructor(formBldr, eacSvc) {
5300
- this.formBldr = formBldr;
5301
- this.eacSvc = eacSvc;
5302
- this.SaveFormEvent = new EventEmitter;
5303
- this.HasSaveButton = true;
5304
- }
5305
- get DescriptionFormControl() {
5306
- return this.ApplicationFormGroup?.controls.description;
5307
- }
5308
- get NameFormControl() {
5309
- return this.ApplicationFormGroup?.controls.name;
5310
- }
5311
- get RouteFormControl() {
5312
- return this.ApplicationFormGroup?.controls.route;
5313
- }
5314
- get State() {
5315
- return this.eacSvc.State;
5316
- }
5317
- ngOnInit() {
5318
- this.setupApplicationForm();
5319
- }
5320
- SubmitApplicationControl() {
5321
- console.log("application form: ", this.ApplicationFormGroup.value);
5322
- this.SaveApplication();
5323
- }
5324
- SaveApplication() {
5325
- const app = this.EditingApplication;
5326
- // console.log("APP=", app);
5327
- app.Application = {
5328
- Name: this.NameFormControl.value,
5329
- Description: this.DescriptionFormControl.value,
5330
- PriorityShift: this.EditingApplication?.Application?.PriorityShift || 0,
5331
- };
5332
- app.LookupConfig.PathRegex = `${this.RouteFormControl.value}.*`;
5333
- switch (app.Processor.Type) {
5334
- case 'DFS':
5335
- app.Processor.BaseHref = `${this.RouteFormControl.value}/`.replace('//', '/');
5336
- break;
5337
- }
5338
- if (!app.LookupConfig.PathRegex.startsWith('/')) {
5339
- app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
5340
- }
5341
- const saveAppReq = {
5342
- ProjectLookup: this.ProjectLookup,
5343
- Application: app,
5344
- ApplicationLookup: this.ApplicationLookup,
5345
- };
5346
- console.log("processor details being submitted: ", app.Processor);
5347
- this.eacSvc.SaveApplicationAsCode(saveAppReq).then(res => {
5348
- this.SaveFormEvent.emit(res);
5349
- });
5350
- }
5351
- //HELPERS
5352
- setupApplicationForm() {
5353
- if (this.EditingApplication != null) {
5354
- this.ApplicationFormGroup = this.formBldr.group({
5355
- name: [this.EditingApplication.Application?.Name, Validators.required],
5356
- description: [
5357
- this.EditingApplication.Application?.Description,
5358
- Validators.required,
5359
- ],
5360
- route: [this.CurrentRoute ? this.CurrentRoute :
5361
- this.EditingApplication.LookupConfig?.PathRegex.replace('.*', '') ||
5362
- '/',
5363
- Validators.required,
5364
- ],
5365
- // priority: [
5366
- // this.EditingApplication.Application?.Priority || 10000,
5367
- // Validators.required,
5368
- // ],
5369
- });
5370
- }
5371
- }
5372
- }
5373
- EditApplicationFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationFormComponent, deps: [{ token: i1$2.FormBuilder }, { token: EaCService }], target: i0.ɵɵFactoryTarget.Component });
5374
- EditApplicationFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: EditApplicationFormComponent, selector: "lcu-edit-application-form", inputs: { ApplicationLookup: ["application-lookup", "ApplicationLookup"], CurrentRoute: ["current-route", "CurrentRoute"], EditingApplication: ["editing-application", "EditingApplication"], HasSaveButton: ["has-save-button", "HasSaveButton"], ProjectLookup: ["project-lookup", "ProjectLookup"] }, outputs: { SaveFormEvent: "save-form-event" }, ngImport: i0, template: "<form class=\"form-card\" [formGroup]=\"ApplicationFormGroup\" (ngSubmit)=\"SubmitApplicationControl()\" >\n <!-- <mat-card class=\"spread flow-card\"> -->\n <!-- <mat-card-header>\n <mat-card-title>\n <ng-container *ngIf=\"EditingApplication?.Application\">\n Edit Application:\n {{ EditingApplication.Application?.Name }}\n </ng-container>\n\n <ng-container *ngIf=\"!EditingApplication?.Application\">\n Create an Application\n </ng-container>\n </mat-card-title>\n </mat-card-header> -->\n\n <!-- <mat-card-content> -->\n <ng-container *ngIf=\"State?.Loading\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Name\"\n formControlName=\"name\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <textarea\n matInput\n placeholder=\"Description\"\n formControlName=\"description\"\n rows=\"3\"\n required\n ></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Route\"\n formControlName=\"route\"\n required\n />\n </mat-form-field>\n </ng-container>\n\n <!-- </mat-card-content> -->\n <!-- <mat-card-actions fxLayoutAlign=\"center center\">\n\n <button \n *ngIf=\"HasSaveButton && !State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!ApplicationFormGroup.valid || !ApplicationFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save\n </button>\n <lcu-loader *ngIf=\"HasSaveButton\" [loading]=\"State?.Loading\"></lcu-loader>\n \n </mat-card-actions> -->\n <!-- </mat-card> -->\n</form>\n", styles: [".s-block{margin:10px 0;width:100%;height:40px}\n"], components: [{ type: i4$3.SkeletonBlockComponent, selector: "skeleton-block", inputs: ["width", "height", "effect", "borderRadius"] }, { type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }], directives: [{ type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }] });
5375
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationFormComponent, decorators: [{
5376
- type: Component,
5377
- args: [{ selector: 'lcu-edit-application-form', template: "<form class=\"form-card\" [formGroup]=\"ApplicationFormGroup\" (ngSubmit)=\"SubmitApplicationControl()\" >\n <!-- <mat-card class=\"spread flow-card\"> -->\n <!-- <mat-card-header>\n <mat-card-title>\n <ng-container *ngIf=\"EditingApplication?.Application\">\n Edit Application:\n {{ EditingApplication.Application?.Name }}\n </ng-container>\n\n <ng-container *ngIf=\"!EditingApplication?.Application\">\n Create an Application\n </ng-container>\n </mat-card-title>\n </mat-card-header> -->\n\n <!-- <mat-card-content> -->\n <ng-container *ngIf=\"State?.Loading\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Name\"\n formControlName=\"name\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <textarea\n matInput\n placeholder=\"Description\"\n formControlName=\"description\"\n rows=\"3\"\n required\n ></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Route\"\n formControlName=\"route\"\n required\n />\n </mat-form-field>\n </ng-container>\n\n <!-- </mat-card-content> -->\n <!-- <mat-card-actions fxLayoutAlign=\"center center\">\n\n <button \n *ngIf=\"HasSaveButton && !State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!ApplicationFormGroup.valid || !ApplicationFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save\n </button>\n <lcu-loader *ngIf=\"HasSaveButton\" [loading]=\"State?.Loading\"></lcu-loader>\n \n </mat-card-actions> -->\n <!-- </mat-card> -->\n</form>\n", styles: [".s-block{margin:10px 0;width:100%;height:40px}\n"] }]
5378
- }], ctorParameters: function () { return [{ type: i1$2.FormBuilder }, { type: EaCService }]; }, propDecorators: { ApplicationLookup: [{
5549
+ args: [{ selector: 'lcu-build-pipeline-form', template: "<form \n class=\"form-card\" \n [formGroup]=\"BuildPipelineFormGroup\" \n (ngSubmit)=\"SubmitBuildPipeline()\"\n>\n <!-- <mat-card\n class=\"spread\" \n > -->\n <!-- <mat-card-header>\n <mat-card-title> Build Pipeline </mat-card-title>\n\n <mat-hint>\n Changes made here are reflected for all sources using this\n DevOpsAction\n </mat-hint>\n </mat-card-header> -->\n\n <!-- <mat-card-content> -->\n\n <ng-container *ngIf=\"HostingDetails?.Loading || State?.Loading\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <ng-container *ngIf=\"SelectedHostingOption?.Inputs\">\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n </ng-container>\n\n <skeleton-block \n *ngIf=\"\"\n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n <ng-container *ngIf=\"!HostingDetails?.Loading && !State?.Loading\">\n\n <!-- <div *ngIf=\"!HostingDetails?.Loading\"> -->\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n formControlName=\"buildPipeline\"\n placeholder=\"Build Pipeline\"\n [disabled]=\"Disabled\"\n (selectionChange)=\"BuildPipelineChanged()\"\n required\n >\n <ng-container\n *ngFor=\"let hostOption of HostingDetails?.HostingOptions; let i = index\"\n >\n <mat-option [value]=\"hostOption.Lookup\">\n {{ hostOption.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n <span *ngIf=\"BuildPipeline == hostOption?.Lookup\">\n {{ hostOption.Description }}\n </span>\n </ng-container>\n </mat-hint>\n </mat-form-field>\n \n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n formControlName=\"devOpsActionName\"\n placeholder=\"Name of DevOps Action\"\n required=\"true\"\n />\n </mat-form-field>\n \n <ng-container *ngFor=\"let input of SelectedHostingOption?.Inputs\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n [formControlName]=\"input.Lookup\"\n [placeholder]=\"input.Placeholder\"\n [required]=\"input.Required\"\n />\n \n <mat-hint>{{ input.Hint }}</mat-hint>\n </mat-form-field>\n </ng-container>\n \n <div *ngIf=\"BuildPipeline == 'npm-release'\">\n <mat-form-field class=\"mat-full-width with-hint padding-bottom-4\">\n <mat-icon matPrefix>security</mat-icon>\n \n <input\n id=\"npm-token\"\n matInput\n type=\"text\"\n formControlName=\"npmToken\"\n placeholder=\"NPM token\"\n [required]=\"!Disabled\"\n style=\"-webkit-text-security: disc;\"\n />\n <mat-hint>\n Securely publish to NPM, provide an NPM Personal Access Token (PAT) with publish access to the organization used for your NPM packages. \n Learn how to create and view access tokens \n <a\n href=\"https://docs.npmjs.com/creating-and-viewing-access-tokens\"\n target=\"_blank\"\n class=\"primary-link\"\n >\n here.\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n <!-- </div> -->\n \n <!-- <div *ngIf=\"HostingDetails?.Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n \n <div class=\"margin-3\">\n <h4 class=\"mat-title\">Loading hosting details</h4>\n </div>\n </div>\n </div> -->\n </ng-container>\n <!-- </mat-card-content> -->\n\n <!-- <mat-card-actions fxLayoutAlign=\"center center\"> -->\n\n <!-- <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!BuildPipelineFormGroup.valid || !BuildPipelineFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Build Pipeline\n </button> -->\n <!-- <lcu-loader [loading]=\"State?.Loading\"></lcu-loader> -->\n \n <!-- </mat-card-actions> -->\n <!-- </mat-card> -->\n</form>\n", styles: [".s-block{margin:10px 0;width:100%;height:40px}.primary-link{color:#4a918e;text-decoration:none}\n"] }]
5550
+ }], ctorParameters: function () { return [{ type: EaCService }, { type: i1$2.FormBuilder }, { type: ApplicationsFlowService }]; }, propDecorators: { DevOpsActionLookup: [{
5379
5551
  type: Input,
5380
- args: ['application-lookup']
5381
- }], CurrentRoute: [{
5552
+ args: ['devops-action-lookup']
5553
+ }], Disabled: [{
5382
5554
  type: Input,
5383
- args: ['current-route']
5384
- }], EditingApplication: [{
5555
+ args: ['disabled']
5556
+ }], Environment: [{
5385
5557
  type: Input,
5386
- args: ['editing-application']
5387
- }], HasSaveButton: [{
5558
+ args: ['environment']
5559
+ }], EnvironmentLookup: [{
5388
5560
  type: Input,
5389
- args: ['has-save-button']
5390
- }], ProjectLookup: [{
5561
+ args: ['environment-lookup']
5562
+ }], HostingDetails: [{
5391
5563
  type: Input,
5392
- args: ['project-lookup']
5393
- }], SaveFormEvent: [{
5564
+ args: ['hosting-details']
5565
+ }], ResponseEvent: [{
5394
5566
  type: Output,
5395
- args: ['save-form-event']
5567
+ args: ['response-event']
5568
+ }] } });
5569
+
5570
+ class BuildPipelineDialogComponent {
5571
+ constructor(dialogRef, eacSvc, data, snackBar) {
5572
+ this.dialogRef = dialogRef;
5573
+ this.eacSvc = eacSvc;
5574
+ this.data = data;
5575
+ this.snackBar = snackBar;
5576
+ }
5577
+ get BuildPipelineFormGroup() {
5578
+ return this.BuildPipelineControl?.BuildPipelineFormGroup;
5579
+ }
5580
+ get HasConnection() {
5581
+ return this.State.GitHub.HasConnection;
5582
+ }
5583
+ get State() {
5584
+ return this.eacSvc.State;
5585
+ }
5586
+ ngOnInit() {
5587
+ }
5588
+ CloseDialog() {
5589
+ this.dialogRef.close();
5590
+ }
5591
+ HandleResponseEvent(event) {
5592
+ console.log("Response Event: ", event);
5593
+ if (event.Code === 0) {
5594
+ this.snackBar.open("Build Pipeline Created Succesfully", "Dismiss", {
5595
+ duration: 5000
5596
+ });
5597
+ this.CloseDialog();
5598
+ }
5599
+ else {
5600
+ this.ErrorMessage = event.Message;
5601
+ }
5602
+ }
5603
+ SaveBuildPipeline() {
5604
+ this.BuildPipelineControl.SaveEnvironment();
5605
+ }
5606
+ }
5607
+ BuildPipelineDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BuildPipelineDialogComponent, deps: [{ token: i2$3.MatDialogRef }, { token: EaCService }, { token: MAT_DIALOG_DATA }, { token: i3$1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
5608
+ BuildPipelineDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: BuildPipelineDialogComponent, selector: "lcu-build-pipeline-dialog", viewQueries: [{ propertyName: "BuildPipelineControl", first: true, predicate: BuildPipelineFormComponent, descendants: true }], ngImport: i0, template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Build Pipeline</h2>\n\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n<ng-container *ngIf=\"!HasConnection\">\n \n <lcu-git-auth></lcu-git-auth>\n\n</ng-container>\n\n<ng-container *ngIf=\"HasConnection\">\n\n<lcu-build-pipeline-form \n [devops-action-lookup]=\"data.devopsActionLookup\"\n [environment]=\"data.environment\" \n [environment-lookup]=\"data.environmentLookup\"\n (response-event)=\"HandleResponseEvent($event)\"\n >\n\n</lcu-build-pipeline-form>\n\n<mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n</mat-error>\n\n</ng-container>\n</mat-dialog-content>\n\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveBuildPipeline()\"\n [disabled]=\"!BuildPipelineFormGroup?.valid || !BuildPipelineFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>", styles: [".dialog-header{width:100%}\n"], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: GitAuthComponent, selector: "lcu-git-auth" }, { type: BuildPipelineFormComponent, selector: "lcu-build-pipeline-form", inputs: ["devops-action-lookup", "disabled", "environment", "environment-lookup", "hosting-details"], outputs: ["response-event"] }], directives: [{ type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i2$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i2$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
5609
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BuildPipelineDialogComponent, decorators: [{
5610
+ type: Component,
5611
+ args: [{ selector: 'lcu-build-pipeline-dialog', template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Build Pipeline</h2>\n\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n<ng-container *ngIf=\"!HasConnection\">\n \n <lcu-git-auth></lcu-git-auth>\n\n</ng-container>\n\n<ng-container *ngIf=\"HasConnection\">\n\n<lcu-build-pipeline-form \n [devops-action-lookup]=\"data.devopsActionLookup\"\n [environment]=\"data.environment\" \n [environment-lookup]=\"data.environmentLookup\"\n (response-event)=\"HandleResponseEvent($event)\"\n >\n\n</lcu-build-pipeline-form>\n\n<mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n</mat-error>\n\n</ng-container>\n</mat-dialog-content>\n\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveBuildPipeline()\"\n [disabled]=\"!BuildPipelineFormGroup?.valid || !BuildPipelineFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>", styles: [".dialog-header{width:100%}\n"] }]
5612
+ }], ctorParameters: function () { return [{ type: i2$3.MatDialogRef }, { type: EaCService }, { type: undefined, decorators: [{
5613
+ type: Inject,
5614
+ args: [MAT_DIALOG_DATA]
5615
+ }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { BuildPipelineControl: [{
5616
+ type: ViewChild,
5617
+ args: [BuildPipelineFormComponent]
5396
5618
  }] } });
5397
5619
 
5398
5620
  class BreadcrumbComponent {
@@ -5494,7 +5716,7 @@ class BreadcrumbComponent {
5494
5716
  async handleStateChange() { }
5495
5717
  }
5496
5718
  BreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BreadcrumbComponent, deps: [{ token: EaCService }], target: i0.ɵɵFactoryTarget.Component });
5497
- BreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: BreadcrumbComponent, selector: "lcu-breadcrumb", inputs: { ApplicationLookup: ["application-lookup", "ApplicationLookup"], ProjectLookup: ["project-lookup", "ProjectLookup"], SelectedRoute: ["selected-route", "SelectedRoute"] }, ngImport: i0, template: "<div class=\"breadcrumb-container\" fxLayout=\"row wrap\">\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <ng-container *ngIf=\"State.Loading || Loading\">\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\">home</mat-icon>\n\n <div skeleton-text [effect]=\"SkeletonEffect\">Enterprise Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State.Loading && Enterprise && !Loading\">\n <div class=\"crumb-name\" [routerLink]=\"['/enterprises']\">\n <mat-icon>home</mat-icon>\n\n {{ Enterprise?.Name }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"enterpriseMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #enterpriseMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n [routerLink]=\"['/enterprises']\"\n (click)=\"SetActiveEnterprise(ent.Lookup)\"\n *ngFor=\"let ent of State.Enterprises\"\n >\n <span>{{ ent.Name }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"ProjectLookup && SelectedProject\"\n fxLayout=\"row\"\n fxLayoutAlign=\"center center\"\n >\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Project Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div class=\"crumb-name\" [routerLink]=\"['/projects', ProjectLookup]\">\n {{ SelectedProject?.Project?.Name }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"projectMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #projectMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n *ngFor=\"let projectLookup of ProjectLookups\"\n [routerLink]=\"['/projects', projectLookup]\"\n >\n <span *ngIf=\"Projects[projectLookup]; let pro\">{{\n pro.Project?.Name\n }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n\n <div *ngIf=\"SelectedRoute\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Route Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div\n class=\"crumb-name\"\n [routerLink]=\"['/routes', SelectedRoute, ProjectLookup]\"\n >\n {{ SelectedRoute }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"routeMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #routeMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n *ngFor=\"let appRoute of Routes\"\n [routerLink]=\"['/routes', appRoute, ProjectLookup]\"\n >\n <span *ngIf=\"appRoute\">{{ appRoute }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"SelectedApplication && ApplicationLookup\"\n fxLayout=\"row\"\n fxLayoutAlign=\"center center\"\n >\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Application Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div\n class=\"crumb-name\"\n [routerLink]=\"[\n '/applications',\n ApplicationLookup,\n SelectedRoute,\n ProjectLookup\n ]\"\n >\n {{ SelectedApplication?.Application?.Name }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"applicationMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #applicationMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n *ngFor=\"let appLookup of CurrentRouteApplicationLookups\"\n [routerLink]=\"[\n '/applications',\n appLookup,\n SelectedRoute,\n ProjectLookup\n ]\"\n >\n <span *ngIf=\"RoutedApplications[SelectedRoute][appLookup]; let app\">{{\n app.Application?.Name\n }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n</div>\n", styles: [":host ::ng-deep .breadcrumb-container{background-color:#ebecf0;margin:20px 20px 0}:host ::ng-deep .seperator{font-size:25px;padding:10px}:host ::ng-deep .crumb-name{cursor:pointer}:host ::ng-deep .mat-icon{display:inline-flex;vertical-align:middle}\n"], components: [{ type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4$4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4$4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$3.SkeletonTextDirective, selector: "[skeleton-text]", inputs: ["effect"] }, { type: i2$1.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4$4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
5719
+ BreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: BreadcrumbComponent, selector: "lcu-breadcrumb", inputs: { ApplicationLookup: ["application-lookup", "ApplicationLookup"], ProjectLookup: ["project-lookup", "ProjectLookup"], SelectedRoute: ["selected-route", "SelectedRoute"] }, ngImport: i0, template: "<div class=\"breadcrumb-container\" fxLayout=\"row wrap\">\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <ng-container *ngIf=\"State.Loading || Loading\">\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\">home</mat-icon>\n\n <div skeleton-text [effect]=\"SkeletonEffect\">Enterprise Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State.Loading && Enterprise && !Loading\">\n <div class=\"crumb-name\" [routerLink]=\"['/enterprises']\">\n <mat-icon>home</mat-icon>\n\n {{ Enterprise?.Name }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"enterpriseMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #enterpriseMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n [routerLink]=\"['/enterprises']\"\n (click)=\"SetActiveEnterprise(ent.Lookup)\"\n *ngFor=\"let ent of State.Enterprises\"\n >\n <span>{{ ent.Name }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"ProjectLookup && SelectedProject\"\n fxLayout=\"row\"\n fxLayoutAlign=\"center center\"\n >\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Project Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div class=\"crumb-name\" [routerLink]=\"['/projects', ProjectLookup]\">\n {{ SelectedProject?.Project?.Name }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"projectMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #projectMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n *ngFor=\"let projectLookup of ProjectLookups\"\n [routerLink]=\"['/projects', projectLookup]\"\n >\n <span *ngIf=\"Projects[projectLookup]; let pro\">{{\n pro.Project?.Name\n }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n\n <div *ngIf=\"SelectedRoute\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Route Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div\n class=\"crumb-name\"\n [routerLink]=\"['/routes', SelectedRoute, ProjectLookup]\"\n >\n {{ SelectedRoute }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"routeMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #routeMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n *ngFor=\"let appRoute of Routes\"\n [routerLink]=\"['/routes', appRoute, ProjectLookup]\"\n >\n <span *ngIf=\"appRoute\">{{ appRoute }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"SelectedApplication && ApplicationLookup\"\n fxLayout=\"row\"\n fxLayoutAlign=\"center center\"\n >\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Application Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div\n class=\"crumb-name\"\n [routerLink]=\"[\n '/applications',\n ApplicationLookup,\n SelectedRoute,\n ProjectLookup\n ]\"\n >\n {{ SelectedApplication?.Application?.Name }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"applicationMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #applicationMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n *ngFor=\"let appLookup of CurrentRouteApplicationLookups\"\n [routerLink]=\"[\n '/applications',\n appLookup,\n SelectedRoute,\n ProjectLookup\n ]\"\n >\n <span *ngIf=\"RoutedApplications[SelectedRoute][appLookup]; let app\">{{\n app.Application?.Name\n }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n</div>\n", styles: [":host ::ng-deep .breadcrumb-container{background-color:#ebecf0;margin:20px 20px 0}:host ::ng-deep .seperator{font-size:25px;padding:10px}:host ::ng-deep .crumb-name{cursor:pointer}:host ::ng-deep .mat-icon{display:inline-flex;vertical-align:middle}\n"], components: [{ type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i7$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$3.SkeletonTextDirective, selector: "[skeleton-text]", inputs: ["effect"] }, { type: i2$1.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i7$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
5498
5720
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BreadcrumbComponent, decorators: [{
5499
5721
  type: Component,
5500
5722
  args: [{ selector: 'lcu-breadcrumb', template: "<div class=\"breadcrumb-container\" fxLayout=\"row wrap\">\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <ng-container *ngIf=\"State.Loading || Loading\">\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\">home</mat-icon>\n\n <div skeleton-text [effect]=\"SkeletonEffect\">Enterprise Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State.Loading && Enterprise && !Loading\">\n <div class=\"crumb-name\" [routerLink]=\"['/enterprises']\">\n <mat-icon>home</mat-icon>\n\n {{ Enterprise?.Name }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"enterpriseMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #enterpriseMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n [routerLink]=\"['/enterprises']\"\n (click)=\"SetActiveEnterprise(ent.Lookup)\"\n *ngFor=\"let ent of State.Enterprises\"\n >\n <span>{{ ent.Name }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"ProjectLookup && SelectedProject\"\n fxLayout=\"row\"\n fxLayoutAlign=\"center center\"\n >\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Project Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div class=\"crumb-name\" [routerLink]=\"['/projects', ProjectLookup]\">\n {{ SelectedProject?.Project?.Name }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"projectMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #projectMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n *ngFor=\"let projectLookup of ProjectLookups\"\n [routerLink]=\"['/projects', projectLookup]\"\n >\n <span *ngIf=\"Projects[projectLookup]; let pro\">{{\n pro.Project?.Name\n }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n\n <div *ngIf=\"SelectedRoute\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Route Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div\n class=\"crumb-name\"\n [routerLink]=\"['/routes', SelectedRoute, ProjectLookup]\"\n >\n {{ SelectedRoute }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"routeMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #routeMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n *ngFor=\"let appRoute of Routes\"\n [routerLink]=\"['/routes', appRoute, ProjectLookup]\"\n >\n <span *ngIf=\"appRoute\">{{ appRoute }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"SelectedApplication && ApplicationLookup\"\n fxLayout=\"row\"\n fxLayoutAlign=\"center center\"\n >\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Application Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div\n class=\"crumb-name\"\n [routerLink]=\"[\n '/applications',\n ApplicationLookup,\n SelectedRoute,\n ProjectLookup\n ]\"\n >\n {{ SelectedApplication?.Application?.Name }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"applicationMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #applicationMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n *ngFor=\"let appLookup of CurrentRouteApplicationLookups\"\n [routerLink]=\"[\n '/applications',\n appLookup,\n SelectedRoute,\n ProjectLookup\n ]\"\n >\n <span *ngIf=\"RoutedApplications[SelectedRoute][appLookup]; let app\">{{\n app.Application?.Name\n }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n</div>\n", styles: [":host ::ng-deep .breadcrumb-container{background-color:#ebecf0;margin:20px 20px 0}:host ::ng-deep .seperator{font-size:25px;padding:10px}:host ::ng-deep .crumb-name{cursor:pointer}:host ::ng-deep .mat-icon{display:inline-flex;vertical-align:middle}\n"] }]
@@ -5527,10 +5749,10 @@ class CustomDomainDialogComponent {
5527
5749
  }
5528
5750
  }
5529
5751
  CustomDomainDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CustomDomainDialogComponent, deps: [{ token: i2$3.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
5530
- CustomDomainDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: CustomDomainDialogComponent, selector: "lcu-custom-domain-dialog", ngImport: i0, template: "<!-- <div class=\"dialog-header\" fxLayoutAlign=\"end center\">\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div> -->\n\n\n\n\n<!-- NEW BELOW -->\n<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Custom Domain</h2>\n\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n\n\n <lcu-domains\n [data]=\"DomainData\"\n >\n \n </lcu-domains>\n\n <!-- <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error> -->\n\n</mat-dialog-content>\n\n\n<!-- <mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveCustomDomain()\"\n [disabled]=\"!BuildPipelineFormGroup?.valid || !BuildPipelineFormGroup?.dirty\">\n Save\n </button>\n\n</mat-dialog-actions> -->\n", styles: [""], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: DomainsComponent, selector: "lcu-domains", inputs: ["data"] }], directives: [{ type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i2$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
5752
+ CustomDomainDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: CustomDomainDialogComponent, selector: "lcu-custom-domain-dialog", ngImport: i0, template: "<div class=\"dialog-header\" fxLayoutAlign=\"end center\">\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<lcu-domains\n[data]=\"DomainData\"\n>\n\n</lcu-domains>\n", styles: [""], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: DomainsComponent, selector: "lcu-domains", inputs: ["data"] }], directives: [{ type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }] });
5531
5753
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CustomDomainDialogComponent, decorators: [{
5532
5754
  type: Component,
5533
- args: [{ selector: 'lcu-custom-domain-dialog', template: "<!-- <div class=\"dialog-header\" fxLayoutAlign=\"end center\">\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div> -->\n\n\n\n\n<!-- NEW BELOW -->\n<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Custom Domain</h2>\n\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n\n\n <lcu-domains\n [data]=\"DomainData\"\n >\n \n </lcu-domains>\n\n <!-- <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error> -->\n\n</mat-dialog-content>\n\n\n<!-- <mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveCustomDomain()\"\n [disabled]=\"!BuildPipelineFormGroup?.valid || !BuildPipelineFormGroup?.dirty\">\n Save\n </button>\n\n</mat-dialog-actions> -->\n", styles: [""] }]
5755
+ args: [{ selector: 'lcu-custom-domain-dialog', template: "<div class=\"dialog-header\" fxLayoutAlign=\"end center\">\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<lcu-domains\n[data]=\"DomainData\"\n>\n\n</lcu-domains>\n", styles: [""] }]
5534
5756
  }], ctorParameters: function () { return [{ type: i2$3.MatDialogRef }, { type: undefined, decorators: [{
5535
5757
  type: Inject,
5536
5758
  args: [MAT_DIALOG_DATA]
@@ -5539,214 +5761,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
5539
5761
  class EditApplicationDialogComponent {
5540
5762
  constructor(eacSvc, dialogRef, data, snackBar) {
5541
5763
  this.eacSvc = eacSvc;
5542
- this.dialogRef = dialogRef;
5543
- this.data = data;
5544
- this.snackBar = snackBar;
5545
- }
5546
- get ApplicationFormGroup() {
5547
- return this.EditApplicationControl?.ApplicationFormGroup;
5548
- }
5549
- get State() {
5550
- return this.eacSvc.State;
5551
- }
5552
- ngOnInit() {
5553
- }
5554
- CloseDialog() {
5555
- this.dialogRef.close();
5556
- }
5557
- HandleSaveApplicationEvent(event) {
5558
- console.log("event to save: ", event);
5559
- if (event.Code === 0) {
5560
- this.snackBar.open("Application Succesfully Updated", "Dismiss", {
5561
- duration: 5000
5562
- });
5563
- this.CloseDialog();
5564
- }
5565
- else {
5566
- this.ErrorMessage = event.Message;
5567
- }
5568
- }
5569
- SaveApplication() {
5570
- this.EditApplicationControl.SaveApplication();
5571
- }
5572
- }
5573
- EditApplicationDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationDialogComponent, deps: [{ token: EaCService }, { token: i2$3.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i3$1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
5574
- EditApplicationDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: EditApplicationDialogComponent, selector: "lcu-edit-application-dialog", viewQueries: [{ propertyName: "EditApplicationControl", first: true, predicate: EditApplicationFormComponent, descendants: true }], ngImport: i0, template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Edit Application:\n {{ data.application?.Application?.Name }}</h2>\n\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n<lcu-edit-application-form \n [application-lookup]=\"data.applicationLookup\"\n [editing-application]=\"data.application\"\n [project-lookup]=\"data.projectLookup\"\n (save-form-event)=\"HandleSaveApplicationEvent($event)\">\n</lcu-edit-application-form>\n\n<mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n</mat-error>\n\n</mat-dialog-content>\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveApplication()\"\n [disabled]=\"!ApplicationFormGroup?.valid || !ApplicationFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>\n\n", styles: [""], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: EditApplicationFormComponent, selector: "lcu-edit-application-form", inputs: ["application-lookup", "current-route", "editing-application", "has-save-button", "project-lookup"], outputs: ["save-form-event"] }], directives: [{ type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i2$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i2$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
5575
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationDialogComponent, decorators: [{
5576
- type: Component,
5577
- args: [{ selector: 'lcu-edit-application-dialog', template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Edit Application:\n {{ data.application?.Application?.Name }}</h2>\n\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n<lcu-edit-application-form \n [application-lookup]=\"data.applicationLookup\"\n [editing-application]=\"data.application\"\n [project-lookup]=\"data.projectLookup\"\n (save-form-event)=\"HandleSaveApplicationEvent($event)\">\n</lcu-edit-application-form>\n\n<mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n</mat-error>\n\n</mat-dialog-content>\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveApplication()\"\n [disabled]=\"!ApplicationFormGroup?.valid || !ApplicationFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>\n\n", styles: [""] }]
5578
- }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialogRef }, { type: undefined, decorators: [{
5579
- type: Inject,
5580
- args: [MAT_DIALOG_DATA]
5581
- }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { EditApplicationControl: [{
5582
- type: ViewChild,
5583
- args: [EditApplicationFormComponent]
5584
- }] } });
5585
-
5586
- class NewApplicationDialogComponent {
5587
- constructor(eacSvc, dialogRef, data, snackBar) {
5588
- this.eacSvc = eacSvc;
5589
- this.dialogRef = dialogRef;
5590
- this.data = data;
5591
- this.snackBar = snackBar;
5592
- this.HasSaveButton = false;
5593
- }
5594
- get Environment() {
5595
- return this.State?.EaC?.Environments[this.data.environmentLookup];
5596
- }
5597
- get SourceControls() {
5598
- return this.Environment?.Sources || {};
5599
- }
5600
- get SourceControlLookups() {
5601
- return Object.keys(this.Environment.Sources || {});
5602
- }
5603
- get State() {
5604
- return this.eacSvc.State;
5605
- }
5606
- ngOnInit() {
5607
- this.SetupApplication(Guid.CreateRaw());
5608
- }
5609
- CloseDialog() {
5610
- this.dialogRef.close();
5611
- }
5612
- SetupApplication(appLookup) {
5613
- this.NewApplication = new EaCApplicationAsCode;
5614
- this.NewApplicationLookup = appLookup;
5615
- }
5616
- SaveApplication() {
5617
- const app = {
5618
- Application: {
5619
- Name: this.ApplicationFormControls.NameFormControl.value,
5620
- Description: this.ApplicationFormControls.DescriptionFormControl.value,
5621
- PriorityShift: 0,
5622
- },
5623
- AccessRightLookups: [],
5624
- DataTokens: {},
5625
- LicenseConfigurationLookups: [],
5626
- LookupConfig: {
5627
- IsPrivate: false,
5628
- IsTriggerSignIn: false,
5629
- PathRegex: `${this.ApplicationFormControls.RouteFormControl.value}.*`,
5630
- QueryRegex: '',
5631
- HeaderRegex: '',
5632
- AllowedMethods: this.ProcessorDetailsFormControls.MethodsFormControl?.value
5633
- ?.split(' ')
5634
- .filter((v) => !!v),
5635
- },
5636
- Processor: {
5637
- Type: this.ProcessorDetailsFormControls.ProcessorType,
5638
- },
5639
- };
5640
- switch (app.Processor.Type) {
5641
- case 'DFS':
5642
- app.Processor.BaseHref = `${this.ApplicationFormControls.RouteFormControl.value}/`.replace('//', '/');
5643
- app.Processor.DefaultFile =
5644
- this.ProcessorDetailsFormControls.DefaultFileFormControl.value || 'index.html';
5645
- app.LowCodeUnit = {
5646
- Type: this.ProcessorDetailsFormControls.LCUType,
5647
- };
5648
- switch (app.LowCodeUnit.Type) {
5649
- case 'GitHub':
5650
- app.LowCodeUnit.Organization =
5651
- this.SourceControls[this.ProcessorDetailsFormControls.SourceControlFormControl.value].Organization;
5652
- app.LowCodeUnit.Repository =
5653
- this.SourceControls[this.ProcessorDetailsFormControls.SourceControlFormControl.value].Repository;
5654
- app.LowCodeUnit.Build = this.ProcessorDetailsFormControls.BuildFormControl.value;
5655
- app.LowCodeUnit.Path =
5656
- this.ProcessorDetailsFormControls.BuildPathFormControl.value;
5657
- break;
5658
- case 'NPM':
5659
- app.LowCodeUnit.Package = this.ProcessorDetailsFormControls.PackageFormControl.value;
5660
- app.LowCodeUnit.Version = this.ProcessorDetailsFormControls.VersionFormControl.value;
5661
- break;
5662
- case 'Zip':
5663
- app.LowCodeUnit.ZipFile = this.ProcessorDetailsFormControls.ZipFileFormControl.value;
5664
- break;
5665
- }
5666
- break;
5667
- case 'OAuth':
5668
- app.Processor.Scopes = this.ProcessorDetailsFormControls.ScopesFormControl.value.split(' ');
5669
- app.Processor.TokenLookup = this.ProcessorDetailsFormControls.TokenLookupFormControl.value;
5670
- app.LowCodeUnit = {
5671
- Type: this.ProcessorDetailsFormControls.LCUType,
5672
- };
5673
- switch (app.LowCodeUnit.Type) {
5674
- case 'GitHubOAuth':
5675
- app.LowCodeUnit.ClientID = this.ProcessorDetailsFormControls.ClientIDFormControl.value;
5676
- app.LowCodeUnit.ClientSecret = this.ProcessorDetailsFormControls.ClientSecretFormControl.value;
5677
- break;
5678
- }
5679
- break;
5680
- case 'Proxy':
5681
- app.Processor.InboundPath = this.ProcessorDetailsFormControls.InboundPathFormControl.value;
5682
- app.LowCodeUnit = {
5683
- Type: this.ProcessorDetailsFormControls.LCUType,
5684
- };
5685
- switch (app.LowCodeUnit.Type) {
5686
- case 'API':
5687
- app.LowCodeUnit.APIRoot = this.ProcessorDetailsFormControls.APIRootFormControl.value;
5688
- app.LowCodeUnit.Security = this.ProcessorDetailsFormControls.SecurityFormControl.value;
5689
- break;
5690
- case 'SPA':
5691
- app.LowCodeUnit.SPARoot = this.ProcessorDetailsFormControls.SPARootFormControl.value;
5692
- break;
5693
- }
5694
- break;
5695
- case 'Redirect':
5696
- app.Processor.Permanent = !!this.ProcessorDetailsFormControls.PermanentFormControl.value;
5697
- app.Processor.PreserveMethod = !!this.ProcessorDetailsFormControls.PreserveMethodFormControl.value;
5698
- app.Processor.Redirect = this.ProcessorDetailsFormControls.RedirectFormControl.value;
5699
- break;
5700
- }
5701
- if (!app.LookupConfig.PathRegex.startsWith('/')) {
5702
- app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
5703
- }
5704
- const saveAppReq = {
5705
- ProjectLookup: this.data.projectLookup,
5706
- Application: app,
5707
- ApplicationLookup: this.NewApplicationLookup,
5708
- };
5709
- // this.HasBuildFormControl.value && taken out from below if statement
5710
- if (this.ProcessorDetailsFormControls.ProcessorType !== 'redirect' && this.ProcessorDetailsFormControls.LCUType === 'GitHub') {
5711
- if (app) {
5712
- app.LowCodeUnit.SourceControlLookup = this.ProcessorDetailsFormControls.SourceControlFormControl.value;
5713
- }
5714
- }
5715
- else if (app) {
5716
- app.LowCodeUnit.SourceControlLookup = null;
5717
- }
5718
- // console.log("Save new App request: ", saveAppReq);
5719
- this.eacSvc.SaveApplicationAsCode(saveAppReq).then(res => {
5720
- this.handleSaveStatus(res);
5721
- });
5764
+ this.dialogRef = dialogRef;
5765
+ this.data = data;
5766
+ this.snackBar = snackBar;
5722
5767
  }
5723
- handleSaveStatus(status) {
5724
- console.log("event to save: ", status);
5725
- if (status.Code === 0) {
5726
- this.snackBar.open("Application Succesfully Created", "Dismiss", {
5768
+ get ApplicationFormGroup() {
5769
+ return this.EditApplicationControl?.ApplicationFormGroup;
5770
+ }
5771
+ get State() {
5772
+ return this.eacSvc.State;
5773
+ }
5774
+ ngOnInit() {
5775
+ }
5776
+ CloseDialog() {
5777
+ this.dialogRef.close();
5778
+ }
5779
+ HandleSaveApplicationEvent(event) {
5780
+ console.log("event to save: ", event);
5781
+ if (event.Code === 0) {
5782
+ this.snackBar.open("Application Succesfully Updated", "Dismiss", {
5727
5783
  duration: 5000
5728
5784
  });
5729
5785
  this.CloseDialog();
5730
5786
  }
5731
5787
  else {
5732
- this.ErrorMessage = status.Message;
5788
+ this.ErrorMessage = event.Message;
5733
5789
  }
5734
5790
  }
5791
+ SaveApplication() {
5792
+ this.EditApplicationControl.SaveApplication();
5793
+ }
5735
5794
  }
5736
- NewApplicationDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: NewApplicationDialogComponent, deps: [{ token: EaCService }, { token: i2$3.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i3$1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
5737
- NewApplicationDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: NewApplicationDialogComponent, selector: "lcu-new-application-dialog", viewQueries: [{ propertyName: "ApplicationFormControls", first: true, predicate: EditApplicationFormComponent, descendants: true }, { propertyName: "ProcessorDetailsFormControls", first: true, predicate: ProcessorDetailsFormComponent, descendants: true }], ngImport: i0, template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Create Application</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n <lcu-edit-application-form \n [current-route]=\"data.currentRoute\"\n [editing-application]=\"NewApplication\"\n [has-save-button]=\"HasSaveButton\"\n >\n </lcu-edit-application-form>\n\n <lcu-processor-details-form \n [editing-application]=\"NewApplication\"\n [editing-application-lookup]=\"NewApplicationLookup\"\n [has-save-button]=\"HasSaveButton\"\n [source-control-lookups]=\"SourceControlLookups\"\n [project-lookup]=\"data.projectLookup\"\n >\n </lcu-processor-details-form>\n\n <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error>\n</mat-dialog-content>\n\n<mat-dialog-actions\n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\"\n >\n Cancel\n </button>\n\n\n <button \n *ngIf=\"ProcessorDetailsFormControls && ApplicationFormControls && !State?.Loading\"\n mat-raised-button \n color=\"primary\"\n fxFlex=\"25%\"\n class=\"new-app-submit\" \n (click)=\"SaveApplication()\"\n [disabled]=\"\n !ProcessorDetailsFormControls?.ProcessorDetailsFormGroup?.valid \n || \n !ApplicationFormControls?.ApplicationFormGroup?.valid\n \"\n >\n Save Application\n </button>\n</mat-dialog-actions>\n\n\n", styles: [""], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: EditApplicationFormComponent, selector: "lcu-edit-application-form", inputs: ["application-lookup", "current-route", "editing-application", "has-save-button", "project-lookup"], outputs: ["save-form-event"] }, { type: ProcessorDetailsFormComponent, selector: "lcu-processor-details-form", inputs: ["editing-application", "editing-application-lookup", "has-save-button", "source-control-lookups", "project-lookup"], outputs: ["save-form-event"] }], directives: [{ type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i2$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i2$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
5738
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: NewApplicationDialogComponent, decorators: [{
5795
+ EditApplicationDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationDialogComponent, deps: [{ token: EaCService }, { token: i2$3.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i3$1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
5796
+ EditApplicationDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: EditApplicationDialogComponent, selector: "lcu-edit-application-dialog", viewQueries: [{ propertyName: "EditApplicationControl", first: true, predicate: EditApplicationFormComponent, descendants: true }], ngImport: i0, template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Edit Application:\n {{ data.application?.Application?.Name }}</h2>\n\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n<lcu-edit-application-form \n [application-lookup]=\"data.applicationLookup\"\n [editing-application]=\"data.application\"\n [project-lookup]=\"data.projectLookup\"\n (save-form-event)=\"HandleSaveApplicationEvent($event)\">\n</lcu-edit-application-form>\n\n<mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n</mat-error>\n\n</mat-dialog-content>\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveApplication()\"\n [disabled]=\"!ApplicationFormGroup?.valid || !ApplicationFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>\n\n", styles: [""], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: EditApplicationFormComponent, selector: "lcu-edit-application-form", inputs: ["application-lookup", "current-route", "editing-application", "has-save-button", "project-lookup"], outputs: ["save-form-event"] }], directives: [{ type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i2$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$1.MatError, selector: "mat-error", inputs: ["id"] }, { type: i2$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
5797
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationDialogComponent, decorators: [{
5739
5798
  type: Component,
5740
- args: [{ selector: 'lcu-new-application-dialog', template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Create Application</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n <lcu-edit-application-form \n [current-route]=\"data.currentRoute\"\n [editing-application]=\"NewApplication\"\n [has-save-button]=\"HasSaveButton\"\n >\n </lcu-edit-application-form>\n\n <lcu-processor-details-form \n [editing-application]=\"NewApplication\"\n [editing-application-lookup]=\"NewApplicationLookup\"\n [has-save-button]=\"HasSaveButton\"\n [source-control-lookups]=\"SourceControlLookups\"\n [project-lookup]=\"data.projectLookup\"\n >\n </lcu-processor-details-form>\n\n <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error>\n</mat-dialog-content>\n\n<mat-dialog-actions\n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\"\n >\n Cancel\n </button>\n\n\n <button \n *ngIf=\"ProcessorDetailsFormControls && ApplicationFormControls && !State?.Loading\"\n mat-raised-button \n color=\"primary\"\n fxFlex=\"25%\"\n class=\"new-app-submit\" \n (click)=\"SaveApplication()\"\n [disabled]=\"\n !ProcessorDetailsFormControls?.ProcessorDetailsFormGroup?.valid \n || \n !ApplicationFormControls?.ApplicationFormGroup?.valid\n \"\n >\n Save Application\n </button>\n</mat-dialog-actions>\n\n\n", styles: [""] }]
5799
+ args: [{ selector: 'lcu-edit-application-dialog', template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Edit Application:\n {{ data.application?.Application?.Name }}</h2>\n\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n<lcu-edit-application-form \n [application-lookup]=\"data.applicationLookup\"\n [editing-application]=\"data.application\"\n [project-lookup]=\"data.projectLookup\"\n (save-form-event)=\"HandleSaveApplicationEvent($event)\">\n</lcu-edit-application-form>\n\n<mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n</mat-error>\n\n</mat-dialog-content>\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveApplication()\"\n [disabled]=\"!ApplicationFormGroup?.valid || !ApplicationFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>\n\n", styles: [""] }]
5741
5800
  }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialogRef }, { type: undefined, decorators: [{
5742
5801
  type: Inject,
5743
5802
  args: [MAT_DIALOG_DATA]
5744
- }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { ApplicationFormControls: [{
5803
+ }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { EditApplicationControl: [{
5745
5804
  type: ViewChild,
5746
5805
  args: [EditApplicationFormComponent]
5747
- }], ProcessorDetailsFormControls: [{
5748
- type: ViewChild,
5749
- args: [ProcessorDetailsFormComponent]
5750
5806
  }] } });
5751
5807
 
5752
5808
  class ProcessorDetailsDialogComponent {
@@ -5816,10 +5872,10 @@ class SkeletonFeedCardComponent {
5816
5872
  }
5817
5873
  }
5818
5874
  SkeletonFeedCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SkeletonFeedCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5819
- SkeletonFeedCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: SkeletonFeedCardComponent, selector: "lcu-skeleton-feed-card", ngImport: i0, template: "<mat-card class=\"social-card\">\n <mat-card-header>\n \n <skeleton-avatar mat-card-avatar size=\"100\" [effect]=\"SkeletonEffect\"></skeleton-avatar>\n \n <mat-card-title skeleton-text [effect]=\"SkeletonEffect\">FeedItem Title</mat-card-title>\n \n <mat-card-subtitle>\n <div skeleton-text [effect]=\"SkeletonEffect\">FeedItem Subtitle</div>\n <div >\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\">check</mat-icon>\n \n <div skeleton-text [effect]=\"SkeletonEffect\">Timestamp</div>\n </div>\n </mat-card-subtitle>\n </mat-card-header>\n \n <mat-card-content>\n <div skeleton-text [effect]=\"SkeletonEffect\">\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sit amet\n ante dui. Praesent ut aliquam metus. Phasellus consectetur non eros eu\n gravida. Vestibulum faucibus laoreet leo, ac molestie felis tincidunt\n semper. Vivamus lorem ipsum, sagittis nec blandit sed, accumsan sed\n dolor. Etiam tincidunt vel ligula ut malesuada. Nulla sit amet fermentum\n libero. Quisque magna tellus, pellentesque in convallis vitae, aliquet\n et orci. Pellentesque commodo ante id est viverra posuere ac vitae\n ligula. Ut sed ullamcorper purus. Integer sit amet lorem eros.\n </div>\n </mat-card-content>\n \n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n </mat-card-actions>\n </mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:24px;width:24px;font-size:24px;cursor:pointer}\n"], components: [{ type: i1$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i1$1.MatCardHeader, selector: "mat-card-header" }, { type: i4$3.SkeletonAvatarComponent, selector: "skeleton-avatar", inputs: ["size", "color", "showIcon", "iconColor", "borderRadius", "effect"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i1$1.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { type: i1$1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i4$3.SkeletonTextDirective, selector: "[skeleton-text]", inputs: ["effect"] }, { type: i1$1.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { type: i1$1.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i1$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }] });
5875
+ SkeletonFeedCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: SkeletonFeedCardComponent, selector: "lcu-skeleton-feed-card", ngImport: i0, template: "<mat-card class=\"social-card\">\n <mat-card-header>\n \n <skeleton-avatar mat-card-avatar size=\"100\" [effect]=\"SkeletonEffect\"></skeleton-avatar>\n \n <mat-card-title skeleton-text [effect]=\"SkeletonEffect\">FeedItem Title</mat-card-title>\n \n <mat-card-subtitle>\n <div skeleton-text [effect]=\"SkeletonEffect\">FeedItem Subtitle</div>\n <div >\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\">check</mat-icon>\n \n <div skeleton-text [effect]=\"SkeletonEffect\">Timestamp</div>\n </div>\n </mat-card-subtitle>\n </mat-card-header>\n \n <mat-card-content>\n <div skeleton-text [effect]=\"SkeletonEffect\">\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sit amet\n ante dui. Praesent ut aliquam metus. Phasellus consectetur non eros eu\n gravida. Vestibulum faucibus laoreet leo, ac molestie felis tincidunt\n semper. Vivamus lorem ipsum, sagittis nec blandit sed, accumsan sed\n dolor. Etiam tincidunt vel ligula ut malesuada. Nulla sit amet fermentum\n libero. Quisque magna tellus, pellentesque in convallis vitae, aliquet\n et orci. Pellentesque commodo ante id est viverra posuere ac vitae\n ligula. Ut sed ullamcorper purus. Integer sit amet lorem eros.\n </div>\n </mat-card-content>\n \n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n </mat-card-actions>\n </mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:25px;width:25px;font-size:25px;cursor:pointer}\n"], components: [{ type: i1$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i1$1.MatCardHeader, selector: "mat-card-header" }, { type: i4$3.SkeletonAvatarComponent, selector: "skeleton-avatar", inputs: ["size", "color", "showIcon", "iconColor", "borderRadius", "effect"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i1$1.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { type: i1$1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i4$3.SkeletonTextDirective, selector: "[skeleton-text]", inputs: ["effect"] }, { type: i1$1.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { type: i1$1.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i1$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }] });
5820
5876
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SkeletonFeedCardComponent, decorators: [{
5821
5877
  type: Component,
5822
- args: [{ selector: 'lcu-skeleton-feed-card', template: "<mat-card class=\"social-card\">\n <mat-card-header>\n \n <skeleton-avatar mat-card-avatar size=\"100\" [effect]=\"SkeletonEffect\"></skeleton-avatar>\n \n <mat-card-title skeleton-text [effect]=\"SkeletonEffect\">FeedItem Title</mat-card-title>\n \n <mat-card-subtitle>\n <div skeleton-text [effect]=\"SkeletonEffect\">FeedItem Subtitle</div>\n <div >\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\">check</mat-icon>\n \n <div skeleton-text [effect]=\"SkeletonEffect\">Timestamp</div>\n </div>\n </mat-card-subtitle>\n </mat-card-header>\n \n <mat-card-content>\n <div skeleton-text [effect]=\"SkeletonEffect\">\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sit amet\n ante dui. Praesent ut aliquam metus. Phasellus consectetur non eros eu\n gravida. Vestibulum faucibus laoreet leo, ac molestie felis tincidunt\n semper. Vivamus lorem ipsum, sagittis nec blandit sed, accumsan sed\n dolor. Etiam tincidunt vel ligula ut malesuada. Nulla sit amet fermentum\n libero. Quisque magna tellus, pellentesque in convallis vitae, aliquet\n et orci. Pellentesque commodo ante id est viverra posuere ac vitae\n ligula. Ut sed ullamcorper purus. Integer sit amet lorem eros.\n </div>\n </mat-card-content>\n \n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n </mat-card-actions>\n </mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:24px;width:24px;font-size:24px;cursor:pointer}\n"] }]
5878
+ args: [{ selector: 'lcu-skeleton-feed-card', template: "<mat-card class=\"social-card\">\n <mat-card-header>\n \n <skeleton-avatar mat-card-avatar size=\"100\" [effect]=\"SkeletonEffect\"></skeleton-avatar>\n \n <mat-card-title skeleton-text [effect]=\"SkeletonEffect\">FeedItem Title</mat-card-title>\n \n <mat-card-subtitle>\n <div skeleton-text [effect]=\"SkeletonEffect\">FeedItem Subtitle</div>\n <div >\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\">check</mat-icon>\n \n <div skeleton-text [effect]=\"SkeletonEffect\">Timestamp</div>\n </div>\n </mat-card-subtitle>\n </mat-card-header>\n \n <mat-card-content>\n <div skeleton-text [effect]=\"SkeletonEffect\">\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sit amet\n ante dui. Praesent ut aliquam metus. Phasellus consectetur non eros eu\n gravida. Vestibulum faucibus laoreet leo, ac molestie felis tincidunt\n semper. Vivamus lorem ipsum, sagittis nec blandit sed, accumsan sed\n dolor. Etiam tincidunt vel ligula ut malesuada. Nulla sit amet fermentum\n libero. Quisque magna tellus, pellentesque in convallis vitae, aliquet\n et orci. Pellentesque commodo ante id est viverra posuere ac vitae\n ligula. Ut sed ullamcorper purus. Integer sit amet lorem eros.\n </div>\n </mat-card-content>\n \n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Button Text</div>\n </mat-card-actions>\n </mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:25px;width:25px;font-size:25px;cursor:pointer}\n"] }]
5823
5879
  }], ctorParameters: function () { return []; } });
5824
5880
 
5825
5881
  class EmulatedDevicesToggleComponent {
@@ -5938,391 +5994,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
5938
5994
  }]
5939
5995
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.LCUServiceSettings }]; } });
5940
5996
 
5941
- class FeedHeaderDialogComponent {
5942
- constructor(appsFlowSvc, eacSvc, formBldr, dialogRef, data) {
5943
- this.appsFlowSvc = appsFlowSvc;
5944
- this.eacSvc = eacSvc;
5945
- this.formBldr = formBldr;
5946
- this.dialogRef = dialogRef;
5947
- this.data = data;
5948
- this.EditorConfig = {
5949
- editable: true,
5950
- spellcheck: true,
5951
- height: '250px',
5952
- minHeight: '0',
5953
- maxHeight: 'auto',
5954
- width: 'auto',
5955
- minWidth: '0',
5956
- translate: 'yes',
5957
- enableToolbar: true,
5958
- showToolbar: true,
5959
- placeholder: 'Enter text here...',
5960
- defaultParagraphSeparator: '',
5961
- defaultFontName: '',
5962
- defaultFontSize: '',
5963
- fonts: [
5964
- { class: 'arial', name: 'Arial' },
5965
- { class: 'times-new-roman', name: 'Times New Roman' },
5966
- { class: 'calibri', name: 'Calibri' },
5967
- { class: 'comic-sans-ms', name: 'Comic Sans MS' }
5968
- ],
5969
- customClasses: [
5970
- {
5971
- name: 'quote',
5972
- class: 'quote',
5973
- },
5974
- {
5975
- name: 'redText',
5976
- class: 'redText'
5977
- },
5978
- {
5979
- name: 'titleText',
5980
- class: 'titleText',
5981
- tag: 'h1',
5982
- },
5983
- ],
5984
- sanitize: true,
5985
- toolbarPosition: 'top',
5986
- toolbarHiddenButtons: [
5987
- ['subscript', 'superscript'],
5988
- ['fontSize']
5989
- ]
5990
- };
5991
- this.SlicesCount = 5;
5992
- this.Slices = {
5993
- Sources: this.SlicesCount,
5994
- };
5995
- if (this.SourceControlLookups.length === 1) {
5996
- this.SourceControl = this.Environment?.Sources[this.SourceControlLookups[0]];
5997
- }
5998
- }
5999
- get ActionIconControl() {
6000
- return this.FeedHeaderFormGroup?.controls.actionIcon;
6001
- }
6002
- get ActionLinkControl() {
6003
- return this.FeedHeaderFormGroup?.controls.actionLink;
6004
- }
6005
- get ActionTextControl() {
6006
- return this.FeedHeaderFormGroup?.controls.actionText;
6007
- }
6008
- get EditorControl() {
6009
- return this.FeedHeaderFormGroup?.controls.editor;
6010
- }
6011
- get Environment() {
6012
- return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
6013
- }
6014
- get TargetBranchFormControl() {
6015
- return this.FeedHeaderFormGroup.controls.targetBranch;
6016
- }
6017
- get OrganizationFormControl() {
6018
- return this.FeedHeaderFormGroup.controls.organization;
6019
- }
6020
- get SourceBranchFormControl() {
6021
- return this.FeedHeaderFormGroup.controls.sourceBranch;
6022
- }
6023
- get RepositoryFormControl() {
6024
- return this.FeedHeaderFormGroup.controls.repository;
6025
- }
6026
- get SourceControlFormControl() {
6027
- return this.FeedHeaderFormGroup.controls.sourceControl;
6028
- }
6029
- get SourceControlLookups() {
6030
- return this.State.FeedSourceControlLookups
6031
- ? this.State.FeedSourceControlLookups
6032
- : Object.keys(this.SourceControls || {});
6033
- }
6034
- get SourceControls() {
6035
- return this.Environment?.Sources || {};
6036
- }
6037
- get SubtitleFormControl() {
6038
- return this.FeedHeaderFormGroup.controls.subtitle;
6039
- }
6040
- get State() {
6041
- return this.eacSvc.State;
6042
- }
6043
- get TitleFormControl() {
6044
- return this.FeedHeaderFormGroup?.controls.title;
6045
- }
6046
- ngOnInit() {
6047
- this.setupFeedHeaderForm();
6048
- }
6049
- CloseDialog() {
6050
- this.dialogRef.close();
6051
- }
6052
- HandleAction() {
6053
- if (this.ActionLinkControl.value.startsWith('http')) {
6054
- window.open(this.ActionLinkControl.value, '_blank');
6055
- }
6056
- else {
6057
- window.location.href = this.ActionLinkControl.value;
6058
- }
6059
- }
6060
- PullRequestSourceControlChanged(event) {
6061
- this.SourceControl = this.SourceControls[this.SourceControlFormControl.value];
6062
- this.listBranches();
6063
- }
6064
- FeatureBranchSourceControlChanged(event) {
6065
- this.SourceControl = this.SourceControls[this.SourceControlFormControl.value];
6066
- this.listOrganizations();
6067
- }
6068
- IssueSourceControlChanged(event) {
6069
- this.SourceControl = this.SourceControls[this.SourceControlFormControl.value];
6070
- }
6071
- Submit() {
6072
- let returnObject = {
6073
- ActionIcon: this.ActionIconControl ? this.ActionIconControl.value : null,
6074
- ActionLink: this.ActionLinkControl ? this.ActionLinkControl.value : null,
6075
- ActionText: this.ActionTextControl ? this.ActionTextControl.value : null,
6076
- Avatar: null,
6077
- Content: this.EditorControl ? this.EditorControl.value : null,
6078
- ExpiresAt: null,
6079
- Organization: this.OrganizationFormControl ? this.OrganizationFormControl.value : null,
6080
- Repositroy: this.RepositoryFormControl ? this.RepositoryFormControl.value : null,
6081
- SourceBranch: this.SourceBranchFormControl ? this.SourceBranchFormControl.value : null,
6082
- SourceControlLookup: this.SourceControlFormControl ? this.SourceBranchFormControl.value : null,
6083
- Subtitle: this.SubtitleFormControl ? this.SubtitleFormControl.value : null,
6084
- TargetBranch: this.TargetBranchFormControl ? this.TargetBranchFormControl.value : null,
6085
- Type: this.data.type,
6086
- Title: this.TitleFormControl ? this.TitleFormControl.value : null,
6087
- };
6088
- console.log("Control: ", returnObject);
6089
- let status = this.eacSvc.SubmitFeedEntry(returnObject);
6090
- console.log("feed entry status: ", status);
6091
- // console.log("Editor: ", this.EditorControl.value )
6092
- }
6093
- OrganizationChanged(event) {
6094
- this.RepositoryFormControl.reset();
6095
- this.listRepositories();
6096
- }
6097
- RepositoryChanged(event) {
6098
- this.listBranches();
6099
- }
6100
- //HELPERS
6101
- listBranches() {
6102
- // this.Loading = true;
6103
- this.appsFlowSvc
6104
- .ListBranches(this.SourceControl?.Organization, this.SourceControl?.Repository)
6105
- .subscribe((response) => {
6106
- this.BranchOptions = response.Model;
6107
- // this.Loading = false;
6108
- // if (this.EditingSourceControl?.Branches?.length > 0) {
6109
- // this.SelectedBranches = this.EditingSourceControl.Branches;
6110
- // } else if (this.BranchOptions?.length === 1) {
6111
- // this.BranchesFormControl.setValue(this.BranchOptions[0].Name);
6112
- // this.SelectedBranches = [this.BranchOptions[0].Name];
6113
- // }
6114
- });
6115
- }
6116
- listOrganizations() {
6117
- // this.Loading = true;
6118
- this.appsFlowSvc
6119
- .ListOrganizations()
6120
- .subscribe((response) => {
6121
- this.OrganizationOptions = response.Model;
6122
- console.log("Organization Options: ", this.OrganizationOptions);
6123
- // this.Loading = false;
6124
- if (this.SourceControl?.Organization) {
6125
- setTimeout(() => {
6126
- this.OrganizationFormControl.setValue(this.SourceControl.Organization);
6127
- this.listRepositories(this.SourceControl?.Repository);
6128
- }, 0);
6129
- }
6130
- });
6131
- }
6132
- listRepositories(activeRepo = null) {
6133
- // this.Loading = true;
6134
- this.appsFlowSvc
6135
- .ListRepositories(this.OrganizationFormControl.value)
6136
- .subscribe((response) => {
6137
- this.RepositoryOptions = response.Model;
6138
- // this.Loading = false;
6139
- if (activeRepo) {
6140
- setTimeout(() => {
6141
- this.RepositoryFormControl.setValue(activeRepo);
6142
- this.listBranches();
6143
- }, 0);
6144
- }
6145
- });
6146
- }
6147
- setupFeedHeaderForm() {
6148
- this.FeedHeaderFormGroup = this.formBldr.group({});
6149
- switch (this.data.type) {
6150
- case "announcement":
6151
- this.setupAnnouncementForm();
6152
- break;
6153
- case "pull-request":
6154
- this.setupPRForm();
6155
- break;
6156
- case "issue":
6157
- this.setupIssueForm();
6158
- break;
6159
- case "branch":
6160
- this.setupFeatureBranchForm();
6161
- break;
6162
- default:
6163
- //
6164
- break;
6165
- }
6166
- }
6167
- setupAnnouncementForm() {
6168
- this.setupBasicForm();
6169
- this.FeedHeaderFormGroup.addControl('subtitle', this.formBldr.control(''));
6170
- this.FeedHeaderFormGroup.addControl('actionText', this.formBldr.control(''));
6171
- this.FeedHeaderFormGroup.addControl('actionLink', this.formBldr.control(''));
6172
- this.FeedHeaderFormGroup.addControl('actionIcon', this.formBldr.control(''));
6173
- }
6174
- setupPRForm() {
6175
- this.listBranches();
6176
- this.setupIssueForm();
6177
- this.setupBranchesForm();
6178
- }
6179
- setupBasicForm() {
6180
- this.FeedHeaderFormGroup.addControl('title', this.formBldr.control('', [Validators.required]));
6181
- this.FeedHeaderFormGroup.addControl('editor', this.formBldr.control(''));
6182
- }
6183
- setupIssueForm() {
6184
- this.setupBasicForm();
6185
- this.setupSourceControlForm();
6186
- }
6187
- setupFeatureBranchForm() {
6188
- this.setupSourceControlForm();
6189
- this.FeedHeaderFormGroup.addControl('organization', this.formBldr.control(''));
6190
- this.FeedHeaderFormGroup.addControl('repository', this.formBldr.control(''));
6191
- this.setupBranchesForm();
6192
- }
6193
- setupSourceControlForm() {
6194
- this.FeedHeaderFormGroup.addControl('sourceControl', this.formBldr.control(''));
6195
- }
6196
- setupBranchesForm() {
6197
- this.FeedHeaderFormGroup.addControl('targetBranch', this.formBldr.control(''));
6198
- this.FeedHeaderFormGroup.addControl('sourceBranch', this.formBldr.control(''));
6199
- }
6200
- }
6201
- FeedHeaderDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedHeaderDialogComponent, deps: [{ token: ApplicationsFlowService }, { token: EaCService }, { token: i1$2.FormBuilder }, { token: i2$3.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
6202
- FeedHeaderDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: FeedHeaderDialogComponent, selector: "lcu-feed-header-dialog", ngImport: i0, template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>{{data.dialogTitle}}</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n <form [formGroup]=\"FeedHeaderFormGroup\" >\n\n <!-- ISSUE FORM -->\n <ng-container *ngIf=\"data.type === 'issue' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n (selectionChange)=\"IssueSourceControlChanged($event)\"\n\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"scLookup\">\n {{sc.Name}}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Title\"\n formControlName=\"title\"\n required\n />\n </mat-form-field>\n\n\n <angular-editor \n id=\"issue-editor\"\n formControlName=\"editor\" \n [config]=\"EditorConfig\"\n ></angular-editor>\n </ng-container>\n\n <!-- ANNOUNCEMENT FORM -->\n\n <ng-container *ngIf=\"data.type === 'announcement' \">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Title\"\n formControlName=\"title\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Subtitle\"\n formControlName=\"subtitle\"\n />\n </mat-form-field>\n\n <angular-editor \n id=\"announcement-editor\"\n formControlName=\"editor\" \n [config]=\"EditorConfig\"\n ></angular-editor>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Action Text\"\n formControlName=\"actionText\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Action Link\"\n formControlName=\"actionLink\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Action Icon\"\n formControlName=\"actionIcon\"\n />\n </mat-form-field>\n\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <button \n *ngIf=\"ActionTextControl?.value || ActionIconControl?.value\"\n mat-button color=\"primary\" \n (click)=\"HandleAction(ActionLinkControl?.value)\"\n >\n <mat-icon *ngIf=\"ActionIconControl?.value\">{{ ActionIconControl?.value }}</mat-icon>\n \n {{ ActionTextControl?.value }}\n </button>\n\n <button \n *ngIf=\"!ActionTextControl?.value && !ActionIconControl?.value\"\n mat-button color=\"primary\" \n >\n <mat-icon>cruelty_free</mat-icon>\n \n Example Button\n </button>\n </div>\n\n </ng-container>\n\n <!-- PR FORM -->\n\n <ng-container *ngIf=\"data.type === 'pull-request' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n (selectionChange)=\"PullRequestSourceControlChanged($event)\"\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"scLookup\">\n {{sc.Name}}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Base</mat-label>\n <mat-select formControlName=\"targetBranch\" required\n >\n <mat-option *ngFor=\"let branchOpt of BranchOptions\" [value]=\"branchOpt.Name\">\n {{branchOpt.Name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n \n <mat-icon>arrow_back</mat-icon>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Compare</mat-label>\n <mat-select formControlName=\"sourceBranch\" required\n >\n <mat-option *ngFor=\"let branchOpt of BranchOptions\" [value]=\"branchOpt.Name\">\n {{branchOpt.Name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Title\"\n formControlName=\"title\"\n required\n />\n </mat-form-field>\n\n\n <angular-editor \n id=\"pr-editor\"\n formControlName=\"editor\" \n [config]=\"EditorConfig\"\n ></angular-editor>\n\n </ng-container>\n\n <!-- Feature Branch form -->\n\n <ng-container *ngIf=\"data.type === 'branch' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field >\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n (selectionChange)=\"FeatureBranchSourceControlChanged($event)\"\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"scLookup\">\n {{sc.Name}}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n\n <mat-form-field *ngIf=\"OrganizationOptions?.length > 0\">\n\n <mat-select \n formControlName=\"organization\" \n placeholder=\"Organization\"\n (selectionChange)=\"OrganizationChanged($event)\" \n required\n >\n <ng-container *ngFor=\"let orgOpt of OrganizationOptions\">\n <mat-option [value]=\"orgOpt.Name\">\n {{ orgOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n\n\n </mat-form-field>\n\n <mat-form-field *ngIf=\"RepositoryOptions?.length > 0\">\n\n <mat-select formControlName=\"repository\" \n placeholder=\"Repository\" \n (selectionChange)=\"RepositoryChanged($event)\" \n required\n >\n <ng-container *ngFor=\"let repoOpt of RepositoryOptions\">\n <mat-option [value]=\"repoOpt.Name\">\n {{ repoOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select> \n </mat-form-field>\n\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\" *ngIf=\"BranchOptions?.length > 0\">\n\n <mat-form-field >\n <mat-label>Base Branch</mat-label>\n <mat-select formControlName=\"sourceBranch\" required\n >\n <mat-option *ngFor=\"let branchOpt of BranchOptions\" [value]=\"branchOpt.Name\">\n {{branchOpt.Name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field >\n <input\n matInput\n placeholder=\"Create New Branch\"\n formControlName=\"targetBranch\"\n required\n />\n </mat-form-field>\n </div>\n\n </ng-container>\n\n\n\n\n\n </form>\n \n \n\n <!-- <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error> -->\n</mat-dialog-content>\n\n<mat-dialog-actions\n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\"\n >\n Cancel\n </button>\n\n <!-- -->\n <button \n mat-raised-button \n color=\"primary\"\n fxFlex=\"25%\"\n class=\"submit\" \n (click)=\"Submit()\"\n [disabled]=\"\n !FeedHeaderFormGroup?.valid \n\"\n \n >\n Submit\n </button>\n</mat-dialog-actions>\n\n\n", styles: [""], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10.AngularEditorComponent, selector: "angular-editor", inputs: ["id", "config", "placeholder", "tabIndex"], outputs: ["html", "viewMode", "blur", "focus"] }], directives: [{ type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i2$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i4$1.MatLabel, selector: "mat-label" }, { type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i2$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }], pipes: { "slice": i9.SlicePipe } });
6203
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedHeaderDialogComponent, decorators: [{
6204
- type: Component,
6205
- args: [{ selector: 'lcu-feed-header-dialog', template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>{{data.dialogTitle}}</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n <form [formGroup]=\"FeedHeaderFormGroup\" >\n\n <!-- ISSUE FORM -->\n <ng-container *ngIf=\"data.type === 'issue' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n (selectionChange)=\"IssueSourceControlChanged($event)\"\n\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"scLookup\">\n {{sc.Name}}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Title\"\n formControlName=\"title\"\n required\n />\n </mat-form-field>\n\n\n <angular-editor \n id=\"issue-editor\"\n formControlName=\"editor\" \n [config]=\"EditorConfig\"\n ></angular-editor>\n </ng-container>\n\n <!-- ANNOUNCEMENT FORM -->\n\n <ng-container *ngIf=\"data.type === 'announcement' \">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Title\"\n formControlName=\"title\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Subtitle\"\n formControlName=\"subtitle\"\n />\n </mat-form-field>\n\n <angular-editor \n id=\"announcement-editor\"\n formControlName=\"editor\" \n [config]=\"EditorConfig\"\n ></angular-editor>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Action Text\"\n formControlName=\"actionText\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Action Link\"\n formControlName=\"actionLink\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Action Icon\"\n formControlName=\"actionIcon\"\n />\n </mat-form-field>\n\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <button \n *ngIf=\"ActionTextControl?.value || ActionIconControl?.value\"\n mat-button color=\"primary\" \n (click)=\"HandleAction(ActionLinkControl?.value)\"\n >\n <mat-icon *ngIf=\"ActionIconControl?.value\">{{ ActionIconControl?.value }}</mat-icon>\n \n {{ ActionTextControl?.value }}\n </button>\n\n <button \n *ngIf=\"!ActionTextControl?.value && !ActionIconControl?.value\"\n mat-button color=\"primary\" \n >\n <mat-icon>cruelty_free</mat-icon>\n \n Example Button\n </button>\n </div>\n\n </ng-container>\n\n <!-- PR FORM -->\n\n <ng-container *ngIf=\"data.type === 'pull-request' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n (selectionChange)=\"PullRequestSourceControlChanged($event)\"\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"scLookup\">\n {{sc.Name}}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Base</mat-label>\n <mat-select formControlName=\"targetBranch\" required\n >\n <mat-option *ngFor=\"let branchOpt of BranchOptions\" [value]=\"branchOpt.Name\">\n {{branchOpt.Name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n \n <mat-icon>arrow_back</mat-icon>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Compare</mat-label>\n <mat-select formControlName=\"sourceBranch\" required\n >\n <mat-option *ngFor=\"let branchOpt of BranchOptions\" [value]=\"branchOpt.Name\">\n {{branchOpt.Name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Title\"\n formControlName=\"title\"\n required\n />\n </mat-form-field>\n\n\n <angular-editor \n id=\"pr-editor\"\n formControlName=\"editor\" \n [config]=\"EditorConfig\"\n ></angular-editor>\n\n </ng-container>\n\n <!-- Feature Branch form -->\n\n <ng-container *ngIf=\"data.type === 'branch' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field >\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n (selectionChange)=\"FeatureBranchSourceControlChanged($event)\"\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"scLookup\">\n {{sc.Name}}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n\n <mat-form-field *ngIf=\"OrganizationOptions?.length > 0\">\n\n <mat-select \n formControlName=\"organization\" \n placeholder=\"Organization\"\n (selectionChange)=\"OrganizationChanged($event)\" \n required\n >\n <ng-container *ngFor=\"let orgOpt of OrganizationOptions\">\n <mat-option [value]=\"orgOpt.Name\">\n {{ orgOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n\n\n </mat-form-field>\n\n <mat-form-field *ngIf=\"RepositoryOptions?.length > 0\">\n\n <mat-select formControlName=\"repository\" \n placeholder=\"Repository\" \n (selectionChange)=\"RepositoryChanged($event)\" \n required\n >\n <ng-container *ngFor=\"let repoOpt of RepositoryOptions\">\n <mat-option [value]=\"repoOpt.Name\">\n {{ repoOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select> \n </mat-form-field>\n\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\" *ngIf=\"BranchOptions?.length > 0\">\n\n <mat-form-field >\n <mat-label>Base Branch</mat-label>\n <mat-select formControlName=\"sourceBranch\" required\n >\n <mat-option *ngFor=\"let branchOpt of BranchOptions\" [value]=\"branchOpt.Name\">\n {{branchOpt.Name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field >\n <input\n matInput\n placeholder=\"Create New Branch\"\n formControlName=\"targetBranch\"\n required\n />\n </mat-form-field>\n </div>\n\n </ng-container>\n\n\n\n\n\n </form>\n \n \n\n <!-- <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error> -->\n</mat-dialog-content>\n\n<mat-dialog-actions\n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\"\n >\n Cancel\n </button>\n\n <!-- -->\n <button \n mat-raised-button \n color=\"primary\"\n fxFlex=\"25%\"\n class=\"submit\" \n (click)=\"Submit()\"\n [disabled]=\"\n !FeedHeaderFormGroup?.valid \n\"\n \n >\n Submit\n </button>\n</mat-dialog-actions>\n\n\n", styles: [""] }]
6206
- }], ctorParameters: function () { return [{ type: ApplicationsFlowService }, { type: EaCService }, { type: i1$2.FormBuilder }, { type: i2$3.MatDialogRef }, { type: undefined, decorators: [{
6207
- type: Inject,
6208
- args: [MAT_DIALOG_DATA]
6209
- }] }]; } });
6210
-
6211
- class FeedHeaderComponent {
6212
- constructor(eacSvc, dialog) {
6213
- this.eacSvc = eacSvc;
6214
- this.dialog = dialog;
6215
- this.SkeletonEffect = "wave";
6216
- // this.selectedBtn = "pr-btn";
6217
- }
6218
- get ActiveEnvironmentLookup() {
6219
- // TODO: Eventually support multiple environments
6220
- const envLookups = Object.keys(this.State?.EaC?.Environments || {});
6221
- return envLookups[0];
6222
- }
6223
- get State() {
6224
- return this.eacSvc.State;
6225
- }
6226
- ngOnInit() {
6227
- }
6228
- ngAfterViewInit() {
6229
- this.addSelectBtn();
6230
- }
6231
- CreateAnnouncement() {
6232
- this.ModalHeader = "Create Team Announcement";
6233
- this.OpenFHDialog('announcement');
6234
- }
6235
- CreateFeatureBranch() {
6236
- this.removeSelectedBtn();
6237
- this.ModalHeader = "Create Feature Branch";
6238
- this.selectedBtn = "fb-btn";
6239
- this.addSelectBtn();
6240
- console.log("create feature branch selected");
6241
- this.OpenFHDialog('branch');
6242
- }
6243
- OpenIssue() {
6244
- this.removeSelectedBtn();
6245
- this.ModalHeader = "Open Issue";
6246
- this.selectedBtn = "oi-btn";
6247
- this.addSelectBtn();
6248
- console.log("open issue selected");
6249
- this.OpenFHDialog('issue');
6250
- }
6251
- CreatePullRequest() {
6252
- this.removeSelectedBtn();
6253
- this.ModalHeader = "Create Pull Request";
6254
- this.selectedBtn = "pr-btn";
6255
- this.addSelectBtn();
6256
- console.log("create pull request selected");
6257
- this.OpenFHDialog('pull-request');
6258
- }
6259
- CreateNewApp() {
6260
- const dialogRef = this.dialog.open(NewApplicationDialogComponent, {
6261
- width: '600px',
6262
- data: {
6263
- environmentLookup: this.ActiveEnvironmentLookup,
6264
- },
6265
- });
6266
- dialogRef.afterClosed().subscribe((result) => {
6267
- // console.log('The dialog was closed');
6268
- // console.log("result:", result)
6269
- });
6270
- }
6271
- OpenFHDialog(modalType) {
6272
- const dialogRef = this.dialog.open(FeedHeaderDialogComponent, {
6273
- width: '600px',
6274
- data: {
6275
- dialogTitle: this.ModalHeader,
6276
- type: modalType,
6277
- sourceControlLookup: this.SourceControlLookup ? this.SourceControlLookup : null
6278
- },
6279
- });
6280
- dialogRef.afterClosed().subscribe((result) => {
6281
- // console.log('The dialog was closed');
6282
- // console.log("result:", result)
6283
- });
6284
- }
6285
- RouteToPath(path) {
6286
- window.location.href = path;
6287
- }
6288
- Submit() {
6289
- console.log("submitting: ", this.value);
6290
- switch (this.selectedBtn) {
6291
- case "pr-btn":
6292
- //Pull request
6293
- console.log("creating pull request: ", this.value);
6294
- break;
6295
- case "oi-btn":
6296
- //Open Issue
6297
- console.log("Open issue: ", this.value);
6298
- break;
6299
- case "fb-btn":
6300
- //Feature Branch
6301
- console.log("creating feature branch: ", this.value);
6302
- break;
6303
- default:
6304
- console.log("hmm");
6305
- break;
6306
- }
6307
- }
6308
- //HELPERS
6309
- addSelectBtn() {
6310
- document.getElementById(this.selectedBtn)?.classList.add('selected');
6311
- }
6312
- removeSelectedBtn() {
6313
- document.getElementById(this.selectedBtn)?.classList.remove('selected');
6314
- }
6315
- }
6316
- FeedHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedHeaderComponent, deps: [{ token: EaCService }, { token: i2$3.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
6317
- FeedHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: FeedHeaderComponent, selector: "lcu-feed-header", inputs: { SourceControlLookup: ["source-control-lookup", "SourceControlLookup"] }, ngImport: i0, template: "<mat-card class=\"social-card\">\n <ng-container *ngIf=\"!State?.Loading\">\n <div class=\"gh-card-container\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <mat-icon fxFlex=\"15%\" class=\"gh-icon\" color=\"primary\">error_outline</mat-icon>\n <div fxFlex=\"85%\" class=\"gh-card-main-content\">\n <button \n mat-button \n class=\"main-btn\"\n (click)=\"CreateAnnouncement()\" \n color=\"primary\"\n >Create Team Announcement</button>\n\n <!-- <mat-form-field appearance=\"fill\" class=\"gh-input\">\n <mat-label>{{ InputLabel }}</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"value\" (click)=\"OpenFHDialog('announcement')\"/>\n </mat-form-field> -->\n </div>\n\n <!-- <button\n fxFlex=\"15%\"\n mat-button\n (click)=\"Submit()\"\n id=\"submit-btn\"\n color=\"primary\"\n >\n Submit\n </button> -->\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <button \n mat-button \n (click)=\"CreatePullRequest()\" \n id=\"pr-btn\" \n color=\"primary\"\n >\n Pull Request\n </button>\n\n <button \n mat-button \n (click)=\"OpenIssue()\" \n id=\"oi-btn\" \n color=\"primary\"\n >\n Open Issue\n </button>\n\n <button \n mat-button \n (click)=\"CreateFeatureBranch()\" \n id=\"fb-btn\" \n color=\"primary\"\n >\n Feature Branch\n </button>\n\n <!-- <button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"menu\">\n <mat-icon>more_horiz</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button class=\"gh-menu-action\" mat-menu-item (click)=\"CreateNewApp()\">\n Create New App\n </button>\n\n <button\n class=\"gh-menu-action\"\n mat-menu-item\n (click)=\"RouteToPath('/dashboard/create-project')\"\n >\n Create Project\n </button>\n </mat-menu> -->\n </mat-card-actions>\n </ng-container>\n\n <!-- SKELETON -->\n <ng-container *ngIf=\"State?.Loading\">\n <div id=\"gh-card-skeleton\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <skeleton-avatar\n class=\"gh-icon\"\n [showIcon]=\"false\"\n [effect]=\"SkeletonEffect\"\n ></skeleton-avatar>\n\n <div fxFlex=\"85%\" class=\"gh-card-main-content\">\n <skeleton-block\n height=\"60px\"\n [effect]=\"SkeletonEffect\"\n ></skeleton-block>\n </div>\n\n <!-- <div\n skeleton-text\n fxFlex=\"15%\"\n [effect]=\"SkeletonEffect\"\n style=\"margin: 0px 10px\"\n >\n Submit\n </div> -->\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Pull Request</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Open Issue</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Feature Branch</div>\n <!-- <div skeleton-text [effect]=\"SkeletonEffect\">\n <mat-icon>more_horiz</mat-icon>\n </div> -->\n </div>\n </ng-container>\n</mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:24px;width:24px;font-size:24px;cursor:pointer}.gh-icon{width:60px;height:60px;font-size:60px;text-align:center}.gh-input{width:90%}.main-btn{width:90%;height:50px;border-radius:30px;border:1px solid}.selected{border:1px solid green}.gh-input ::ng-deep .mat-form-field-flex{border:1px solid;border-radius:30px!important}.gh-input ::ng-deep .mat-form-field-wrapper{padding-bottom:0!important}.gh-input ::ng-deep .mat-form-field-underline{display:none}\n"], components: [{ type: i1$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4$3.SkeletonAvatarComponent, selector: "skeleton-avatar", inputs: ["size", "color", "showIcon", "iconColor", "borderRadius", "effect"] }, { type: i4$3.SkeletonBlockComponent, selector: "skeleton-block", inputs: ["width", "height", "effect", "borderRadius"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i4$3.SkeletonTextDirective, selector: "[skeleton-text]", inputs: ["effect"] }] });
6318
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedHeaderComponent, decorators: [{
6319
- type: Component,
6320
- args: [{ selector: 'lcu-feed-header', template: "<mat-card class=\"social-card\">\n <ng-container *ngIf=\"!State?.Loading\">\n <div class=\"gh-card-container\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <mat-icon fxFlex=\"15%\" class=\"gh-icon\" color=\"primary\">error_outline</mat-icon>\n <div fxFlex=\"85%\" class=\"gh-card-main-content\">\n <button \n mat-button \n class=\"main-btn\"\n (click)=\"CreateAnnouncement()\" \n color=\"primary\"\n >Create Team Announcement</button>\n\n <!-- <mat-form-field appearance=\"fill\" class=\"gh-input\">\n <mat-label>{{ InputLabel }}</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"value\" (click)=\"OpenFHDialog('announcement')\"/>\n </mat-form-field> -->\n </div>\n\n <!-- <button\n fxFlex=\"15%\"\n mat-button\n (click)=\"Submit()\"\n id=\"submit-btn\"\n color=\"primary\"\n >\n Submit\n </button> -->\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <button \n mat-button \n (click)=\"CreatePullRequest()\" \n id=\"pr-btn\" \n color=\"primary\"\n >\n Pull Request\n </button>\n\n <button \n mat-button \n (click)=\"OpenIssue()\" \n id=\"oi-btn\" \n color=\"primary\"\n >\n Open Issue\n </button>\n\n <button \n mat-button \n (click)=\"CreateFeatureBranch()\" \n id=\"fb-btn\" \n color=\"primary\"\n >\n Feature Branch\n </button>\n\n <!-- <button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"menu\">\n <mat-icon>more_horiz</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button class=\"gh-menu-action\" mat-menu-item (click)=\"CreateNewApp()\">\n Create New App\n </button>\n\n <button\n class=\"gh-menu-action\"\n mat-menu-item\n (click)=\"RouteToPath('/dashboard/create-project')\"\n >\n Create Project\n </button>\n </mat-menu> -->\n </mat-card-actions>\n </ng-container>\n\n <!-- SKELETON -->\n <ng-container *ngIf=\"State?.Loading\">\n <div id=\"gh-card-skeleton\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <skeleton-avatar\n class=\"gh-icon\"\n [showIcon]=\"false\"\n [effect]=\"SkeletonEffect\"\n ></skeleton-avatar>\n\n <div fxFlex=\"85%\" class=\"gh-card-main-content\">\n <skeleton-block\n height=\"60px\"\n [effect]=\"SkeletonEffect\"\n ></skeleton-block>\n </div>\n\n <!-- <div\n skeleton-text\n fxFlex=\"15%\"\n [effect]=\"SkeletonEffect\"\n style=\"margin: 0px 10px\"\n >\n Submit\n </div> -->\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Pull Request</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Open Issue</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Feature Branch</div>\n <!-- <div skeleton-text [effect]=\"SkeletonEffect\">\n <mat-icon>more_horiz</mat-icon>\n </div> -->\n </div>\n </ng-container>\n</mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:24px;width:24px;font-size:24px;cursor:pointer}.gh-icon{width:60px;height:60px;font-size:60px;text-align:center}.gh-input{width:90%}.main-btn{width:90%;height:50px;border-radius:30px;border:1px solid}.selected{border:1px solid green}.gh-input ::ng-deep .mat-form-field-flex{border:1px solid;border-radius:30px!important}.gh-input ::ng-deep .mat-form-field-wrapper{padding-bottom:0!important}.gh-input ::ng-deep .mat-form-field-underline{display:none}\n"] }]
6321
- }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialog }]; }, propDecorators: { SourceControlLookup: [{
6322
- type: Input,
6323
- args: ['source-control-lookup']
6324
- }] } });
6325
-
6326
5997
  class ApplicationsFlowModule {
6327
5998
  static forRoot() {
6328
5999
  return {
@@ -6367,7 +6038,7 @@ ApplicationsFlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
6367
6038
  ProjectInfoCardComponent,
6368
6039
  AnalyticsCardComponent,
6369
6040
  FeedCardSmComponent,
6370
- FeedHeaderComponent,
6041
+ GhControlComponent,
6371
6042
  MainFeedCardComponent,
6372
6043
  TwoColumnHeaderComponent,
6373
6044
  CardCarouselComponent,
@@ -6386,9 +6057,7 @@ ApplicationsFlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
6386
6057
  ProcessorDetailsDialogComponent,
6387
6058
  SkeletonFeedCardComponent,
6388
6059
  UpgradeDialogComponent,
6389
- EmulatedDevicesToggleComponent,
6390
- FeedHeaderDialogComponent], imports: [AngularEditorModule,
6391
- ClipboardModule,
6060
+ EmulatedDevicesToggleComponent], imports: [ClipboardModule,
6392
6061
  FathymSharedModule,
6393
6062
  FormsModule,
6394
6063
  ReactiveFormsModule,
@@ -6426,8 +6095,7 @@ ApplicationsFlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
6426
6095
  ProjectInfoCardComponent,
6427
6096
  AnalyticsCardComponent,
6428
6097
  FeedCardSmComponent,
6429
- FeedHeaderComponent,
6430
- FeedHeaderDialogComponent,
6098
+ GhControlComponent,
6431
6099
  MainFeedCardComponent,
6432
6100
  TwoColumnHeaderComponent,
6433
6101
  CardCarouselComponent,
@@ -6446,10 +6114,8 @@ ApplicationsFlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
6446
6114
  ProcessorDetailsDialogComponent,
6447
6115
  SkeletonFeedCardComponent,
6448
6116
  UpgradeDialogComponent,
6449
- EmulatedDevicesToggleComponent,
6450
- FeedHeaderDialogComponent] });
6117
+ EmulatedDevicesToggleComponent] });
6451
6118
  ApplicationsFlowModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ApplicationsFlowModule, imports: [[
6452
- AngularEditorModule,
6453
6119
  ClipboardModule,
6454
6120
  FathymSharedModule,
6455
6121
  FormsModule,
@@ -6493,7 +6159,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6493
6159
  ProjectInfoCardComponent,
6494
6160
  AnalyticsCardComponent,
6495
6161
  FeedCardSmComponent,
6496
- FeedHeaderComponent,
6162
+ GhControlComponent,
6497
6163
  MainFeedCardComponent,
6498
6164
  TwoColumnHeaderComponent,
6499
6165
  CardCarouselComponent,
@@ -6512,11 +6178,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6512
6178
  ProcessorDetailsDialogComponent,
6513
6179
  SkeletonFeedCardComponent,
6514
6180
  UpgradeDialogComponent,
6515
- EmulatedDevicesToggleComponent,
6516
- FeedHeaderDialogComponent
6181
+ EmulatedDevicesToggleComponent
6517
6182
  ],
6518
6183
  imports: [
6519
- AngularEditorModule,
6520
6184
  ClipboardModule,
6521
6185
  FathymSharedModule,
6522
6186
  FormsModule,
@@ -6557,8 +6221,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6557
6221
  ProjectInfoCardComponent,
6558
6222
  AnalyticsCardComponent,
6559
6223
  FeedCardSmComponent,
6560
- FeedHeaderComponent,
6561
- FeedHeaderDialogComponent,
6224
+ GhControlComponent,
6562
6225
  MainFeedCardComponent,
6563
6226
  TwoColumnHeaderComponent,
6564
6227
  CardCarouselComponent,
@@ -6577,8 +6240,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6577
6240
  ProcessorDetailsDialogComponent,
6578
6241
  SkeletonFeedCardComponent,
6579
6242
  UpgradeDialogComponent,
6580
- EmulatedDevicesToggleComponent,
6581
- FeedHeaderDialogComponent
6243
+ EmulatedDevicesToggleComponent
6582
6244
  ],
6583
6245
  entryComponents: [
6584
6246
  ApplicationsFlowProjectsElementComponent,
@@ -6605,7 +6267,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6605
6267
  ProjectInfoCardComponent,
6606
6268
  AnalyticsCardComponent,
6607
6269
  FeedCardSmComponent,
6608
- FeedHeaderComponent,
6270
+ GhControlComponent,
6609
6271
  MainFeedCardComponent,
6610
6272
  TwoColumnHeaderComponent,
6611
6273
  CardCarouselComponent,
@@ -6644,8 +6306,6 @@ class FeedItemAction {
6644
6306
  }
6645
6307
  class FeedItemTab {
6646
6308
  }
6647
- class FeedEntry {
6648
- }
6649
6309
 
6650
6310
  class ActionsModel {
6651
6311
  }
@@ -6669,5 +6329,5 @@ class FormModel {
6669
6329
  * Generated bundle index. Do not edit.
6670
6330
  */
6671
6331
 
6672
- export { ActionsModel, AnalyticsCardComponent, ApplicationsFlowModule, ApplicationsFlowProjectsContext, ApplicationsFlowProjectsElementComponent, ApplicationsFlowProjectsElementState, ApplicationsFlowService, ApplicationsFlowState, ApplicationsFlowStateContext, AppsFlowComponent, BaseFormComponent, BaseFormConfigModel, BaseFormTestComponent, BreadcrumbComponent, BuildPipelineDialogComponent, BuildPipelineFormComponent, BuildsComponent, CardCarouselComponent, CardFormConfigModel, CreateProjectWizardComponent, CustomDomainDialogComponent, DFSModifiersComponent, DevOpsComponent, DevSettingsPresetModel, DevopsSourceControlFormComponent, DomainModel, DomainsComponent, DynamicTabsComponent, DynamicTabsModel, EaCService, EditApplicationDialogComponent, EditApplicationFormComponent, EmulatedDevicesToggleComponent, FeedCardSmComponent, FeedEntry, FeedHeaderComponent, FeedHeaderDialogComponent, FeedItem, FeedItemAction, FeedItemContributor, FeedItemTab, FlowToolComponent, FormActionsModel, FormCardComponent, FormModel, FormValuesModel, FormsService, GitAuthComponent, GitHubBranch, GitHubOrganization, GitHubRepository, GitHubSetupState, GitHubWorkflowRun, HeaderComponent, HostingDetailsFormGroupComponent, IoTEnsembleService, MainFeedCardComponent, NPMService, NewApplicationDialogComponent, NpmPackageSelectComponent, ProcessorDetailsDialogComponent, ProcessorDetailsFormComponent, ProjectActionsModel, ProjectHostingDetails, ProjectHostingOption, ProjectHostingOptionInput, ProjectInfoCardComponent, ProjectItemsComponent, ProjectNameComponent, ProjectService, ProjectTabsComponent, RecentActivitiesComponent, RootDirectoryComponent, SELECTOR_APPLICATIONS_FLOW_PROJECTS_ELEMENT, SaveApplicationAsCodeEventRequest, SaveDFSModifierEventRequest, SaveEnvironmentAsCodeEventRequest, SaveProjectAsCodeEventRequest, SecurityToggleComponent, SkeletonFeedCardComponent, SlottedCardComponent, SourceControlDialogComponent, SourceControlFormComponent, SourceControlFormControlsComponent, ThreeColumnComponent, TwoColumnHeaderComponent, UnpackLowCodeUnitRequest, UpgradeDialogComponent, UserFeedResponse };
6332
+ export { ActionsModel, AnalyticsCardComponent, ApplicationsFlowModule, ApplicationsFlowProjectsContext, ApplicationsFlowProjectsElementComponent, ApplicationsFlowProjectsElementState, ApplicationsFlowService, ApplicationsFlowState, ApplicationsFlowStateContext, AppsFlowComponent, BaseFormComponent, BaseFormConfigModel, BaseFormTestComponent, BreadcrumbComponent, BuildPipelineDialogComponent, BuildPipelineFormComponent, BuildsComponent, CardCarouselComponent, CardFormConfigModel, CreateProjectWizardComponent, CustomDomainDialogComponent, DFSModifiersComponent, DevOpsComponent, DevSettingsPresetModel, DevopsSourceControlFormComponent, DomainModel, DomainsComponent, DynamicTabsComponent, DynamicTabsModel, EaCService, EditApplicationDialogComponent, EditApplicationFormComponent, EmulatedDevicesToggleComponent, FeedCardSmComponent, FeedItem, FeedItemAction, FeedItemContributor, FeedItemTab, FlowToolComponent, FormActionsModel, FormCardComponent, FormModel, FormValuesModel, FormsService, GhControlComponent, GitAuthComponent, GitHubBranch, GitHubOrganization, GitHubRepository, GitHubSetupState, GitHubWorkflowRun, HeaderComponent, HostingDetailsFormGroupComponent, IoTEnsembleService, MainFeedCardComponent, NPMService, NewApplicationDialogComponent, NpmPackageSelectComponent, ProcessorDetailsDialogComponent, ProcessorDetailsFormComponent, ProjectActionsModel, ProjectHostingDetails, ProjectHostingOption, ProjectHostingOptionInput, ProjectInfoCardComponent, ProjectItemsComponent, ProjectNameComponent, ProjectService, ProjectTabsComponent, RecentActivitiesComponent, RootDirectoryComponent, SELECTOR_APPLICATIONS_FLOW_PROJECTS_ELEMENT, SaveApplicationAsCodeEventRequest, SaveDFSModifierEventRequest, SaveEnvironmentAsCodeEventRequest, SaveProjectAsCodeEventRequest, SecurityToggleComponent, SkeletonFeedCardComponent, SlottedCardComponent, SourceControlDialogComponent, SourceControlFormComponent, SourceControlFormControlsComponent, ThreeColumnComponent, TwoColumnHeaderComponent, UnpackLowCodeUnitRequest, UpgradeDialogComponent, UserFeedResponse };
6673
6333
  //# sourceMappingURL=lowcodeunit-applications-flow-common.mjs.map