@lowcodeunit/applications-flow-common 1.34.6-integration → 1.34.7-lets-get-social-ish

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 (31) hide show
  1. package/esm2020/lcu.api.mjs +3 -3
  2. package/esm2020/lib/applications-flow.module.mjs +22 -11
  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/dialogs/feed-header-dialog/feed-header-dialog.component.mjs +287 -0
  6. package/esm2020/lib/elements/feed-card-sm/feed-card-sm.component.mjs +2 -2
  7. package/esm2020/lib/elements/feed-header/feed-header.component.mjs +131 -0
  8. package/esm2020/lib/elements/main-feed-card/main-feed-card.component.mjs +2 -2
  9. package/esm2020/lib/elements/projects/controls/git-auth/git-auth.component.mjs +3 -2
  10. package/esm2020/lib/elements/projects/controls/tabs/domains/domains.component.mjs +2 -2
  11. package/esm2020/lib/elements/skeleton-feed-card/skeleton-feed-card.component.mjs +2 -2
  12. package/esm2020/lib/models/user-feed.model.mjs +3 -1
  13. package/esm2020/lib/services/applications-flow.service.mjs +8 -1
  14. package/esm2020/lib/services/eac.service.mjs +4 -1
  15. package/esm2020/lib/services/project.service.mjs +25 -1
  16. package/esm2020/lib/state/applications-flow.state.mjs +1 -1
  17. package/fesm2015/lowcodeunit-applications-flow-common.mjs +1716 -1352
  18. package/fesm2015/lowcodeunit-applications-flow-common.mjs.map +1 -1
  19. package/fesm2020/lowcodeunit-applications-flow-common.mjs +1636 -1292
  20. package/fesm2020/lowcodeunit-applications-flow-common.mjs.map +1 -1
  21. package/lcu.api.d.ts +2 -2
  22. package/lib/applications-flow.module.d.ts +12 -10
  23. package/lib/dialogs/feed-header-dialog/feed-header-dialog.component.d.ts +71 -0
  24. package/lib/elements/{gh-control/gh-control.component.d.ts → feed-header/feed-header.component.d.ts} +9 -7
  25. package/lib/models/user-feed.model.d.ts +17 -0
  26. package/lib/services/applications-flow.service.d.ts +2 -0
  27. package/lib/services/eac.service.d.ts +2 -1
  28. package/lib/services/project.service.d.ts +2 -1
  29. package/lib/state/applications-flow.state.d.ts +2 -1
  30. package/package.json +1 -1
  31. package/esm2020/lib/elements/gh-control/gh-control.component.mjs +0 -107
@@ -42,11 +42,13 @@ 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 { EaCApplicationAsCode } from '@semanticjs/common';
46
- import * as i3$1 from '@angular/material/snack-bar';
47
- import * as i7$1 from '@angular/material/menu';
48
45
  import moment from 'moment';
46
+ import * as i3$1 from '@angular/material/snack-bar';
49
47
  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';
50
52
 
51
53
  /**
52
54
  * Model for form values
@@ -308,6 +310,13 @@ class ApplicationsFlowService {
308
310
  headers: this.loadHeaders(),
309
311
  });
310
312
  }
313
+ SubmitFeedEntry(entry) {
314
+ return this.http.post(`${this.apiRoot}/api/lowcodeunit/userfeed/entry`, {
315
+ FeedEntry: entry,
316
+ }, {
317
+ headers: this.loadHeaders(),
318
+ });
319
+ }
311
320
  UnpackLowCodeUnit(req) {
312
321
  return this.http.post(`${this.apiRoot}/api/lowcodeunit/manage/projects/unpack`, req, {
313
322
  headers: this.loadHeaders(),
@@ -587,6 +596,7 @@ class ProjectService {
587
596
  if (response.Status.Code === 0) {
588
597
  state.Feed = response.Items;
589
598
  state.FeedSourceControlLookups = response.SourceControlLookups;
599
+ state.FeedActions = response.Actions;
590
600
  // console.log("ITEMZ: ", response.Items)
591
601
  resolve(response.Items);
592
602
  }
@@ -675,6 +685,29 @@ class ProjectService {
675
685
  }
676
686
  });
677
687
  }
688
+ async SubmitFeedEntry(state, entry) {
689
+ return new Promise((resolve, reject) => {
690
+ state.Loading = true;
691
+ this.appsFlowSvc.SubmitFeedEntry(entry).subscribe(async (response) => {
692
+ if (response.Status.Code === 0) {
693
+ var results = await Promise.all([
694
+ this.LoadEnterpriseAsCode(state),
695
+ this.LoadUserFeed(1, 25, state),
696
+ ]);
697
+ resolve(response.Status);
698
+ }
699
+ else {
700
+ state.Loading = false;
701
+ reject(response.Status);
702
+ console.log(response);
703
+ }
704
+ }, (err) => {
705
+ state.Loading = false;
706
+ reject(err);
707
+ console.log(err);
708
+ });
709
+ });
710
+ }
678
711
  ToggleCreateProject() {
679
712
  this.SetCreatingProject(!this.CreatingProject);
680
713
  }
@@ -935,6 +968,9 @@ class EaCService {
935
968
  async SetEditProjectSettings(projectLookup) {
936
969
  await this.projectService.SetEditProjectSettings(this.State, projectLookup);
937
970
  }
971
+ async SubmitFeedEntry(entry) {
972
+ return await this.projectService.SubmitFeedEntry(this.State, entry);
973
+ }
938
974
  async UnpackLowCodeUnit(req) {
939
975
  if (confirm(`Are you sure you want to unpack application '${req.ApplicationName}' with version '${req.Version}'?`)) {
940
976
  await this.projectService.UnpackLowCodeUnit(this.State, req);
@@ -1206,7 +1242,7 @@ class DomainsComponent {
1206
1242
  config() {
1207
1243
  this.Config = new CardFormConfigModel({
1208
1244
  Icon: 'head',
1209
- Title: 'Domains',
1245
+ Title: '',
1210
1246
  Subtitle: 'In order to use a custom domain, create a CNAME dns record pointing desired subdomain to ' + this.HostDNSInstance + '.',
1211
1247
  FormActions: {
1212
1248
  Message: 'Changes will be applied to your next deployment',
@@ -3539,7 +3575,8 @@ class GitAuthComponent {
3539
3575
  ConnectGitHubProvider() {
3540
3576
  const reidrectUri = location.pathname + location.search;
3541
3577
  // window.location.href = `/.oauth/GitHubOAuth?redirectUri=${reidrectUri}`;
3542
- window.location.href = `/.oauth/GitHubOAuth?redirectUri=%2Fdashboard`;
3578
+ // added below line for the new social ui redirectUri wasn't working
3579
+ window.location.href = '/.oauth/GitHubOAuth?redirectUri=%2Fdashboard';
3543
3580
  this.ConnectClicked = true;
3544
3581
  }
3545
3582
  }
@@ -3828,1448 +3865,1090 @@ class FeedCardSmComponent {
3828
3865
  }
3829
3866
  }
3830
3867
  FeedCardSmComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedCardSmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
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
+ 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"] }] });
3832
3869
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedCardSmComponent, decorators: [{
3833
3870
  type: Component,
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
+ 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"] }]
3835
3872
  }], ctorParameters: function () { return []; }, propDecorators: { FeedItem: [{
3836
3873
  type: Input,
3837
3874
  args: ['feed-item']
3838
3875
  }] } });
3839
3876
 
3840
- class EditApplicationFormComponent {
3841
- constructor(formBldr, eacSvc) {
3842
- this.formBldr = formBldr;
3877
+ class DevopsSourceControlFormComponent {
3878
+ // Constructors
3879
+ constructor(appsFlowSvc, eacSvc, formBuilder) {
3880
+ this.appsFlowSvc = appsFlowSvc;
3843
3881
  this.eacSvc = eacSvc;
3844
- this.SaveFormEvent = new EventEmitter;
3845
- this.HasSaveButton = true;
3882
+ this.formBuilder = formBuilder;
3883
+ this.SeparatorKeysCodes = [ENTER, COMMA];
3884
+ this.SaveStatusEvent = new EventEmitter();
3885
+ this.BuildPath = null;
3886
+ this.HostingDetails = new ProjectHostingDetails();
3887
+ this.SelectedBranches = [];
3888
+ this.SourceControlRoot = '';
3889
+ this.SkeletonEffect = "wave";
3890
+ this.UseBranches = true;
3891
+ this.UseBuildPath = false;
3846
3892
  }
3847
- get DescriptionFormControl() {
3848
- return this.ApplicationFormGroup?.controls.description;
3893
+ // Properties
3894
+ get ArtifactLookups() {
3895
+ return this.DevOpsAction?.ArtifactLookups;
3849
3896
  }
3850
- get NameFormControl() {
3851
- return this.ApplicationFormGroup?.controls.name;
3897
+ get ArtifactLookup() {
3898
+ const artLookup = this.DevOpsAction?.ArtifactLookups
3899
+ ? this.DevOpsAction?.ArtifactLookups[0]
3900
+ : null;
3901
+ return artLookup;
3852
3902
  }
3853
- get RouteFormControl() {
3854
- return this.ApplicationFormGroup?.controls.route;
3903
+ get Artifact() {
3904
+ return this.Environment?.Artifacts && this.ArtifactLookup
3905
+ ? this.Environment?.Artifacts[this.ArtifactLookup] || {}
3906
+ : {};
3855
3907
  }
3856
- get State() {
3857
- return this.eacSvc.State;
3908
+ get BranchesFormControl() {
3909
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'branches');
3858
3910
  }
3859
- ngOnInit() {
3860
- this.setupApplicationForm();
3911
+ get BuildPathFormControl() {
3912
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'buildPath');
3861
3913
  }
3862
- SubmitApplicationControl() {
3863
- console.log("application form: ", this.ApplicationFormGroup.value);
3864
- this.SaveApplication();
3914
+ get DevOpsActionLookups() {
3915
+ // console.log(this.DevOpsActions);
3916
+ return Object.keys(this.DevOpsActions || {});
3865
3917
  }
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;
3918
+ get DevOpsAction() {
3919
+ return this.Environment.DevOpsActions && this.DevOpsActionLookup
3920
+ ? this.Environment.DevOpsActions[this.DevOpsActionLookup] || {}
3921
+ : {};
3922
+ }
3923
+ get DevOpsActionLookup() {
3924
+ if (!!this.DevOpsActionLookupFormControl?.value) {
3925
+ return this.DevOpsActionLookupFormControl.value;
3879
3926
  }
3880
- if (!app.LookupConfig.PathRegex.startsWith('/')) {
3881
- app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
3927
+ if (!!this.EditingSourceControl?.DevOpsActionTriggerLookups) {
3928
+ return this.EditingSourceControl?.DevOpsActionTriggerLookups[0];
3882
3929
  }
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
- });
3930
+ else {
3931
+ return null;
3912
3932
  }
3913
3933
  }
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();
3934
+ get DevOpsActionLookupFormControl() {
3935
+ return this.DevOpsSourceControlFormGroup.get('devOpsActionLookup');
3948
3936
  }
3949
- get APIRootFormControl() {
3950
- return this.ProcessorDetailsFormGroup?.controls.apiRoot;
3937
+ get DevOpsActions() {
3938
+ return this.Environment.DevOpsActions || {};
3951
3939
  }
3952
- get Environment() {
3953
- return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
3940
+ get EditingSourceControl() {
3941
+ let sc = this.Environment?.Sources
3942
+ ? this.Environment?.Sources[this.EditingSourceControlLookup]
3943
+ : null;
3944
+ if (sc == null && this.EditingSourceControlLookup) {
3945
+ sc = {};
3946
+ }
3947
+ return sc;
3954
3948
  }
3955
- get BuildFormControl() {
3956
- return this.ProcessorDetailsFormGroup?.controls.build;
3949
+ get MainBranchFormControl() {
3950
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'mainBranch');
3957
3951
  }
3958
- get BuildPathFormControl() {
3959
- return this.ProcessorDetailsFormGroup?.controls.buildPath;
3952
+ get OrganizationFormControl() {
3953
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'organization');
3960
3954
  }
3961
- get ClientIDFormControl() {
3962
- return this.ProcessorDetailsFormGroup?.controls.clientId;
3955
+ get RepositoryFormControl() {
3956
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'repository');
3963
3957
  }
3964
- get ClientSecretFormControl() {
3965
- return this.ProcessorDetailsFormGroup?.controls.clientSecret;
3958
+ get State() {
3959
+ return this.eacSvc.State;
3966
3960
  }
3967
- get DefaultFileFormControl() {
3968
- return this.ProcessorDetailsFormGroup?.controls.defaultFile;
3961
+ // Life Cycle
3962
+ ngAfterViewInit() { }
3963
+ ngOnDestroy() {
3964
+ this.destroyFormControls();
3969
3965
  }
3970
- get DefaultSourceControl() {
3971
- return {
3972
- Organization: this.EditingApplication?.LowCodeUnit?.Organization,
3973
- Repository: this.EditingApplication?.LowCodeUnit?.Repository,
3974
- };
3966
+ ngOnInit() {
3967
+ console.log("source control lookup", this.EditingSourceControlLookup);
3968
+ if (this.EditingSourceControlLookup === null) {
3969
+ this.CreateNewSourceControl();
3970
+ }
3971
+ console.log("source control", this.EditingSourceControl);
3972
+ if (this.EditingSourceControl != null) {
3973
+ this.DevOpsSourceControlFormGroup = this.formBuilder.group({});
3974
+ this.setupFormControls();
3975
+ }
3976
+ this.RefreshOrganizations();
3975
3977
  }
3976
- get InboundPathFormControl() {
3977
- return this.ProcessorDetailsFormGroup?.controls.inboundPath;
3978
+ // API Methods
3979
+ AddBranchOption(event) {
3980
+ this.addBranchOption(event.value);
3981
+ event.input.value = '';
3978
3982
  }
3979
- get IncludeRequestFormControl() {
3980
- return this.ProcessorDetailsFormGroup?.controls.includeRequest;
3983
+ BranchOptionSelected(event) {
3984
+ this.addBranchOption(event.option.value);
3981
3985
  }
3982
- get MethodsFormControl() {
3983
- return this.ProcessorDetailsFormGroup?.controls.methods;
3986
+ BranchesChanged(branches) {
3987
+ this.loadProjectHostingDetails();
3984
3988
  }
3985
- get PackageFormControl() {
3986
- return this.ProcessorDetailsFormGroup?.controls.package;
3989
+ BuildPathChanged(event) {
3990
+ //do something??
3987
3991
  }
3988
- get PermanentFormControl() {
3989
- return this.ProcessorDetailsFormGroup?.controls.permanent;
3992
+ CreateNewSourceControl() {
3993
+ this.SetEditingSourceControl(Guid.CreateRaw());
3990
3994
  }
3991
- get PreserveMethodFormControl() {
3992
- return this.ProcessorDetailsFormGroup?.controls.preserveMethod;
3995
+ CreateRepository() {
3996
+ this.CreatingRepository = true;
3997
+ this.RepositoryFormControl.reset();
3993
3998
  }
3994
- get RedirectFormControl() {
3995
- return this.ProcessorDetailsFormGroup?.controls.redirect;
3999
+ CancelCreateRepository() {
4000
+ this.CreatingRepository = false;
3996
4001
  }
3997
- get ScopesFormControl() {
3998
- return this.ProcessorDetailsFormGroup?.controls.scopes;
3999
- }
4000
- get SecurityFormControl() {
4001
- return this.ProcessorDetailsFormGroup?.controls.security;
4002
+ DevOpsActionLookupChanged(event) {
4003
+ this.configureDevOpsAction();
4002
4004
  }
4003
- get State() {
4004
- return this.eacSvc.State;
4005
+ MainBranchChanged(event) {
4006
+ this.emitBranchesChanged();
4005
4007
  }
4006
- get SourceControls() {
4007
- return this.Environment?.Sources || {};
4008
+ OrganizationChanged(event) {
4009
+ const org = this.OrganizationFormControl;
4010
+ this.RepositoryFormControl.reset();
4011
+ if (this.UseBranches) {
4012
+ this.BranchesFormControl.reset();
4013
+ this.SelectedBranches = [];
4014
+ }
4015
+ this.listRepositories();
4008
4016
  }
4009
- get SourceControlFormControl() {
4010
- return this.ProcessorDetailsFormGroup?.controls.sourceControl;
4017
+ RefreshOrganizations() {
4018
+ // this.Loading = true;
4019
+ this.listOrganizations();
4020
+ this.OrganizationFormControl?.reset();
4021
+ this.RepositoryFormControl?.reset();
4022
+ if (this.UseBranches) {
4023
+ this.BranchesFormControl?.reset();
4024
+ }
4011
4025
  }
4012
- get SPARootFormControl() {
4013
- return this.ProcessorDetailsFormGroup?.controls.spaRoot;
4026
+ RemoveBranchOption(option) {
4027
+ const index = this.SelectedBranches.indexOf(option);
4028
+ if (index >= 0) {
4029
+ this.SelectedBranches.splice(index, 1);
4030
+ }
4031
+ this.emitBranchesChanged();
4014
4032
  }
4015
- get TokenLookupFormControl() {
4016
- return this.ProcessorDetailsFormGroup?.controls.tokenLookup;
4033
+ RepositoryChanged(event) {
4034
+ const repo = this.RepositoryFormControl;
4035
+ if (this.UseBranches) {
4036
+ this.BranchesFormControl.reset();
4037
+ this.SelectedBranches = [];
4038
+ this.listBranches();
4039
+ }
4040
+ if (!this.UseBranches) {
4041
+ this.listBuildPaths();
4042
+ }
4017
4043
  }
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);
4044
+ SaveRepository() {
4045
+ this.Loading = true;
4046
+ const org = this.OrganizationFormControl.value;
4047
+ const repoName = this.RepositoryFormControl.value;
4048
+ this.appsFlowSvc
4049
+ .CreateRepository(org, repoName)
4050
+ .subscribe((response) => {
4051
+ if (response.Status.Code === 0) {
4052
+ this.listRepositories(repoName);
4053
+ this.CreatingRepository = false;
4024
4054
  }
4025
- }
4026
- // console.log("VFC=", vfc)
4027
- return vfc;
4055
+ else {
4056
+ // TODO: Need to surface an error to the user...
4057
+ this.Loading = false;
4058
+ }
4059
+ });
4028
4060
  }
4029
- get VersionFormControl() {
4030
- return this.ProcessorDetailsFormGroup?.controls.version;
4061
+ SetEditingSourceControl(scLookup) {
4062
+ this.EditingSourceControlLookup = scLookup;
4031
4063
  }
4032
- get ZipFileFormControl() {
4033
- return this.ProcessorDetailsFormGroup?.controls.zipFile;
4064
+ SubmitSourceControl() {
4065
+ console.log('source control submitted: ', this.DevOpsSourceControlFormGroup.value);
4066
+ this.SaveSourceControl();
4034
4067
  }
4035
- ngOnInit() {
4036
- if (!this.EditingApplication) {
4037
- this.CreateNewApplication();
4038
- }
4039
- else {
4040
- this.setupProcessorDetailsForm();
4068
+ SaveSourceControl() {
4069
+ const saveEnvReq = {
4070
+ Environment: {
4071
+ ...this.Environment,
4072
+ Sources: this.Environment.Sources || {},
4073
+ },
4074
+ EnvironmentLookup: this.EnvironmentLookup,
4075
+ EnterpriseDataTokens: {},
4076
+ };
4077
+ let source = {
4078
+ ...this.EditingSourceControl,
4079
+ Branches: this.SelectedBranches,
4080
+ MainBranch: this.MainBranchFormControl.value,
4081
+ };
4082
+ source = {
4083
+ ...source,
4084
+ Type: 'GitHub',
4085
+ Name: `@${this.OrganizationFormControl.value}/${this.RepositoryFormControl.value}`,
4086
+ DevOpsActionTriggerLookups: [this.DevOpsActionLookup],
4087
+ Organization: this.OrganizationFormControl.value,
4088
+ Repository: this.RepositoryFormControl.value,
4089
+ };
4090
+ const scLookup = `github://${source.Organization}/${source.Repository}`;
4091
+ saveEnvReq.Environment.Sources[scLookup] = source;
4092
+ console.log('save SC: ', saveEnvReq);
4093
+ let resp = this.eacSvc.SaveEnvironmentAsCode(saveEnvReq);
4094
+ resp.then((res) => {
4095
+ this.SaveStatusEvent.emit(res);
4096
+ });
4097
+ }
4098
+ // Helpers
4099
+ addBranchOption(value) {
4100
+ value = (value || '').trim();
4101
+ if (value && this.SelectedBranches.indexOf(value) < 0) {
4102
+ this.SelectedBranches.push(value);
4041
4103
  }
4104
+ this.BranchesInput.nativeElement.blur();
4105
+ this.emitBranchesChanged();
4042
4106
  }
4043
- CreateNewApplication() {
4044
- this.SetEditingApplication(Guid.CreateRaw());
4107
+ configureDevOpsAction() {
4108
+ setTimeout(() => {
4109
+ this.DevOpsActionLookupFormControl.setValue(this.DevOpsActionLookup);
4110
+ }, 0);
4045
4111
  }
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';
4051
- }
4052
- else if (permanentValue === false && preserveValue === false) {
4053
- this.redirectTooltip = '302 – Not Permanent and Not Preserve';
4054
- }
4055
- else if (permanentValue === false && preserveValue === true) {
4056
- this.redirectTooltip = '307 – Not Permanent and Preserve';
4112
+ destroyFormControls() {
4113
+ this.DevOpsSourceControlFormGroup.removeControl([this.SourceControlRoot, 'mainBranch'].join(''));
4114
+ this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'branches'].join(''));
4115
+ this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'buildPath'].join(''));
4116
+ this.SelectedBranches = [];
4117
+ this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'organization'].join(''));
4118
+ this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'repository'].join(''));
4119
+ }
4120
+ emitBranchesChanged() {
4121
+ if (this.SelectedBranches?.length > 0 &&
4122
+ (!this.MainBranchFormControl.value ||
4123
+ this.SelectedBranches.indexOf(this.MainBranchFormControl.value) < 0)) {
4124
+ this.MainBranchFormControl.setValue(this.SelectedBranches.find((branch) => branch === 'main' || branch === 'master') || this.SelectedBranches[0]);
4057
4125
  }
4058
- else if (permanentValue === true && preserveValue === true) {
4059
- this.redirectTooltip = '308 – Permanent and Preserve';
4126
+ else if (this.SelectedBranches?.length <= 0) {
4127
+ this.MainBranchFormControl.reset();
4060
4128
  }
4129
+ this.BranchesFormControl.setValue(this.SelectedBranches.join(','));
4130
+ this.BranchesChanged(this.SelectedBranches || []);
4061
4131
  }
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;
4132
+ listBranches() {
4133
+ if (this.UseBranches) {
4134
+ this.Loading = true;
4135
+ this.appsFlowSvc
4136
+ .ListBranches(this.OrganizationFormControl.value, this.RepositoryFormControl.value)
4137
+ .subscribe((response) => {
4138
+ this.BranchOptions = response.Model;
4139
+ this.Loading = false;
4140
+ if (this.EditingSourceControl?.Branches?.length > 0) {
4141
+ this.SelectedBranches = this.EditingSourceControl.Branches;
4109
4142
  }
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;
4143
+ else if (this.BranchOptions?.length === 1) {
4144
+ this.BranchesFormControl.setValue(this.BranchOptions[0].Name);
4145
+ this.SelectedBranches = [this.BranchOptions[0].Name];
4124
4146
  }
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}`;
4147
+ this.emitBranchesChanged();
4148
+ this.listBuildPaths();
4149
+ });
4135
4150
  }
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
4151
  }
4190
4152
  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: [{
4326
- type: Component,
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: [{
4329
- type: Input,
4330
- args: ['editing-application']
4331
- }], EditingApplicationLookup: [{
4332
- type: Input,
4333
- args: ['editing-application-lookup']
4334
- }], HasSaveButton: [{
4335
- type: Input,
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: [{
4344
- type: Output,
4345
- args: ['save-form-event']
4346
- }] } });
4347
-
4348
- class NewApplicationDialogComponent {
4349
- constructor(eacSvc, dialogRef, data, snackBar) {
4350
- this.eacSvc = eacSvc;
4351
- this.dialogRef = dialogRef;
4352
- this.data = data;
4353
- this.snackBar = snackBar;
4354
- this.HasSaveButton = false;
4355
- }
4356
- get Environment() {
4357
- return this.State?.EaC?.Environments[this.data.environmentLookup];
4358
- }
4359
- get SourceControls() {
4360
- return this.Environment?.Sources || {};
4361
- }
4362
- get SourceControlLookups() {
4363
- return Object.keys(this.Environment.Sources || {});
4364
- }
4365
- get State() {
4366
- return this.eacSvc.State;
4367
- }
4368
- ngOnInit() {
4369
- this.SetupApplication(Guid.CreateRaw());
4370
- }
4371
- CloseDialog() {
4372
- this.dialogRef.close();
4373
- }
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;
4153
+ if (this.UseBuildPath) {
4154
+ this.Loading = true;
4155
+ this.appsFlowSvc
4156
+ .ListBuildPaths(this.OrganizationFormControl.value, this.RepositoryFormControl.value)
4157
+ .subscribe((response) => {
4158
+ this.BuildPathOptions = response.Model;
4159
+ this.Loading = false;
4160
+ if (this.BuildPathOptions?.length === 1) {
4161
+ this.BuildPathFormControl.setValue(this.BuildPathOptions[0]);
4162
+ }
4163
+ });
4479
4164
  }
4480
- // console.log("Save new App request: ", saveAppReq);
4481
- this.eacSvc.SaveApplicationAsCode(saveAppReq).then(res => {
4482
- this.handleSaveStatus(res);
4165
+ }
4166
+ listOrganizations() {
4167
+ this.Loading = true;
4168
+ this.appsFlowSvc
4169
+ .ListOrganizations()
4170
+ .subscribe((response) => {
4171
+ this.OrganizationOptions = response.Model;
4172
+ console.log("Organization Options: ", this.OrganizationOptions);
4173
+ this.Loading = false;
4174
+ if (this.EditingSourceControl?.Organization) {
4175
+ setTimeout(() => {
4176
+ this.OrganizationFormControl.setValue(this.EditingSourceControl.Organization);
4177
+ this.listRepositories(this.EditingSourceControl?.Repository);
4178
+ }, 0);
4179
+ }
4483
4180
  });
4484
4181
  }
4485
- handleSaveStatus(status) {
4486
- console.log("event to save: ", status);
4487
- if (status.Code === 0) {
4488
- this.snackBar.open("Application Succesfully Created", "Dismiss", {
4489
- duration: 5000
4182
+ listRepositories(activeRepo = null) {
4183
+ this.Loading = true;
4184
+ this.appsFlowSvc
4185
+ .ListRepositories(this.OrganizationFormControl.value)
4186
+ .subscribe((response) => {
4187
+ this.RepositoryOptions = response.Model;
4188
+ this.Loading = false;
4189
+ if (activeRepo) {
4190
+ setTimeout(() => {
4191
+ this.RepositoryFormControl.setValue(activeRepo);
4192
+ this.listBranches();
4193
+ if (!this.UseBranches) {
4194
+ this.listBuildPaths();
4195
+ }
4196
+ }, 0);
4197
+ }
4198
+ else if (this.RepositoryOptions?.length <= 0) {
4199
+ this.CreatingRepository = true;
4200
+ }
4201
+ });
4202
+ }
4203
+ loadProjectHostingDetails() {
4204
+ if (this.SelectedBranches?.length > 0) {
4205
+ this.HostingDetails.Loading = true;
4206
+ this.appsFlowSvc
4207
+ .LoadProjectHostingDetails()
4208
+ .subscribe((response) => {
4209
+ this.HostingDetails = response.Model;
4210
+ this.HostingDetails.Loading = false;
4211
+ this.configureDevOpsAction();
4212
+ }, (err) => {
4213
+ this.HostingDetails.Loading = false;
4490
4214
  });
4491
- this.CloseDialog();
4492
4215
  }
4493
- else {
4494
- this.ErrorMessage = status.Message;
4216
+ }
4217
+ setupFormControls() {
4218
+ this.destroyFormControls();
4219
+ console.log("Source Control: ", this.EditingSourceControl);
4220
+ this.DevOpsSourceControlFormGroup.addControl('devOpsActionLookup', new FormControl(this.DevOpsActionLookup || '', []));
4221
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'organization'].join(''), new FormControl(this.EditingSourceControl.Organization ?? '', Validators.required));
4222
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'repository'].join(''), new FormControl(this.EditingSourceControl.Repository ?? '', Validators.required));
4223
+ if (this.UseBranches) {
4224
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'branches'].join(''), new FormControl(this.EditingSourceControl?.Branches ?? '', Validators.required));
4225
+ this.SelectedBranches = this.EditingSourceControl?.Branches;
4226
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'mainBranch'].join(''), new FormControl(this.EditingSourceControl.MainBranch ?? '', Validators.required));
4227
+ }
4228
+ if (this.UseBuildPath) {
4229
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'buildPath'].join(''), new FormControl(this.BuildPath ?? '', Validators.required));
4495
4230
  }
4496
4231
  }
4497
4232
  }
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: [{
4233
+ 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 });
4234
+ 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"] }] });
4235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DevopsSourceControlFormComponent, decorators: [{
4501
4236
  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: [{
4237
+ 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"] }]
4238
+ }], ctorParameters: function () { return [{ type: ApplicationsFlowService }, { type: EaCService }, { type: i1$2.FormBuilder }]; }, propDecorators: { EditingSourceControlLookup: [{
4239
+ type: Input,
4240
+ args: ['editing-source-control-lookup']
4241
+ }], Environment: [{
4242
+ type: Input,
4243
+ args: ['environment']
4244
+ }], EnvironmentLookup: [{
4245
+ type: Input,
4246
+ args: ['environment-lookup']
4247
+ }], SaveStatusEvent: [{
4248
+ type: Output,
4249
+ args: ['save-status-event']
4250
+ }], BranchesInput: [{
4510
4251
  type: ViewChild,
4511
- args: [ProcessorDetailsFormComponent]
4252
+ args: ['branches']
4512
4253
  }] } });
4513
4254
 
4514
- class GhControlComponent {
4515
- constructor(eacSvc, dialog) {
4255
+ class SourceControlDialogComponent {
4256
+ constructor(dialogRef, eacSvc, data, snackBar) {
4257
+ this.dialogRef = dialogRef;
4516
4258
  this.eacSvc = eacSvc;
4517
- this.dialog = dialog;
4518
- this.InputLabel = "Create Pull Request";
4519
- this.SkeletonEffect = "wave";
4520
- this.selectedBtn = "pr-btn";
4259
+ this.data = data;
4260
+ this.snackBar = snackBar;
4521
4261
  }
4522
- get ActiveEnvironmentLookup() {
4523
- // TODO: Eventually support multiple environments
4524
- const envLookups = Object.keys(this.State?.EaC?.Environments || {});
4525
- return envLookups[0];
4262
+ get DevOpsSourceControlFormGroup() {
4263
+ return this.DevopsSourceControl?.DevOpsSourceControlFormGroup;
4264
+ }
4265
+ get HasConnection() {
4266
+ return this.State.GitHub.HasConnection;
4526
4267
  }
4527
4268
  get State() {
4528
4269
  return this.eacSvc.State;
4529
4270
  }
4530
4271
  ngOnInit() {
4531
4272
  }
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;
4273
+ CloseDialog() {
4274
+ this.dialogRef.close();
4570
4275
  }
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;
4276
+ HandleSaveStatusEvent(event) {
4277
+ console.log("event to save: ", event);
4278
+ if (event.Code === 0) {
4279
+ this.snackBar.open("Source Control Succesfully Saved", "Dismiss", {
4280
+ duration: 5000
4281
+ });
4282
+ this.CloseDialog();
4283
+ }
4284
+ else {
4285
+ this.ErrorMessage = event.Message;
4589
4286
  }
4590
4287
  }
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');
4288
+ SaveSourceControl() {
4289
+ this.DevopsSourceControl.SaveSourceControl();
4597
4290
  }
4598
4291
  }
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: [{
4292
+ 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 });
4293
+ 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"] }] });
4294
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SourceControlDialogComponent, decorators: [{
4602
4295
  type: Component,
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 }]; } });
4296
+ 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"] }]
4297
+ }], ctorParameters: function () { return [{ type: i2$3.MatDialogRef }, { type: EaCService }, { type: undefined, decorators: [{
4298
+ type: Inject,
4299
+ args: [MAT_DIALOG_DATA]
4300
+ }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { DevopsSourceControl: [{
4301
+ type: ViewChild,
4302
+ args: [DevopsSourceControlFormComponent]
4303
+ }] } });
4605
4304
 
4606
- class DevopsSourceControlFormComponent {
4607
- // Constructors
4608
- constructor(appsFlowSvc, eacSvc, formBuilder) {
4609
- this.appsFlowSvc = appsFlowSvc;
4305
+ class MainFeedCardComponent {
4306
+ constructor(eacSvc, dialog, sanitizer) {
4610
4307
  this.eacSvc = eacSvc;
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;
4621
- }
4622
- // Properties
4623
- get ArtifactLookups() {
4624
- return this.DevOpsAction?.ArtifactLookups;
4625
- }
4626
- get ArtifactLookup() {
4627
- const artLookup = this.DevOpsAction?.ArtifactLookups
4628
- ? this.DevOpsAction?.ArtifactLookups[0]
4629
- : null;
4630
- return artLookup;
4631
- }
4632
- get Artifact() {
4633
- return this.Environment?.Artifacts && this.ArtifactLookup
4634
- ? this.Environment?.Artifacts[this.ArtifactLookup] || {}
4635
- : {};
4636
- }
4637
- get BranchesFormControl() {
4638
- return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'branches');
4308
+ this.dialog = dialog;
4309
+ this.sanitizer = sanitizer;
4639
4310
  }
4640
- get BuildPathFormControl() {
4641
- return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'buildPath');
4311
+ get ActiveEnvironment() {
4312
+ return this.State?.EaC?.Environments[this.ActiveEnvironmentLookup];
4642
4313
  }
4643
- get DevOpsActionLookups() {
4644
- // console.log(this.DevOpsActions);
4645
- return Object.keys(this.DevOpsActions || {});
4314
+ get ActiveEnvironmentLookup() {
4315
+ // TODO: Eventually support multiple environments
4316
+ const envLookups = Object.keys(this.State?.EaC?.Environments || {});
4317
+ return envLookups[0];
4646
4318
  }
4647
- get DevOpsAction() {
4648
- return this.Environment.DevOpsActions && this.DevOpsActionLookup
4649
- ? this.Environment.DevOpsActions[this.DevOpsActionLookup] || {}
4650
- : {};
4319
+ get Environment() {
4320
+ // console.log("Ent Environment var: ", this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment]);
4321
+ return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
4651
4322
  }
4652
- get DevOpsActionLookup() {
4653
- if (!!this.DevOpsActionLookupFormControl?.value) {
4654
- return this.DevOpsActionLookupFormControl.value;
4323
+ get Icon() {
4324
+ if (this.FeedItem.Status.Code === 0) {
4325
+ return 'check_circle';
4655
4326
  }
4656
- if (!!this.EditingSourceControl?.DevOpsActionTriggerLookups) {
4657
- return this.EditingSourceControl?.DevOpsActionTriggerLookups[0];
4327
+ else if (this.FeedItem.Status.Code === 1) {
4328
+ return 'cancel';
4329
+ }
4330
+ else if (this.FeedItem.Status.Code === 2) {
4331
+ return 'sync';
4658
4332
  }
4659
4333
  else {
4660
- return null;
4334
+ return 'help_outline';
4661
4335
  }
4662
4336
  }
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 = {};
4337
+ get IconColor() {
4338
+ if (this.FeedItem.Status.Code === 0) {
4339
+ return 'green';
4340
+ }
4341
+ else if (this.FeedItem.Status.Code === 1) {
4342
+ return 'red';
4343
+ }
4344
+ else if (this.FeedItem.Status.Code === 2) {
4345
+ return 'blue';
4346
+ }
4347
+ else {
4348
+ return 'gray';
4675
4349
  }
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');
4686
4350
  }
4687
4351
  get State() {
4688
4352
  return this.eacSvc.State;
4689
4353
  }
4690
4354
  // Life Cycle
4691
- ngAfterViewInit() { }
4692
- ngOnDestroy() {
4693
- this.destroyFormControls();
4694
- }
4695
4355
  ngOnInit() {
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
+ this.handleRefresh();
4706
4357
  }
4707
4358
  // API Methods
4708
- AddBranchOption(event) {
4709
- this.addBranchOption(event.value);
4710
- event.input.value = '';
4711
- }
4712
- BranchOptionSelected(event) {
4713
- this.addBranchOption(event.option.value);
4714
- }
4715
- BranchesChanged(branches) {
4716
- this.loadProjectHostingDetails();
4717
- }
4718
- BuildPathChanged(event) {
4719
- //do something??
4720
- }
4721
- CreateNewSourceControl() {
4722
- this.SetEditingSourceControl(Guid.CreateRaw());
4723
- }
4724
- CreateRepository() {
4725
- this.CreatingRepository = true;
4726
- this.RepositoryFormControl.reset();
4727
- }
4728
- CancelCreateRepository() {
4729
- this.CreatingRepository = false;
4730
- }
4731
- DevOpsActionLookupChanged(event) {
4732
- this.configureDevOpsAction();
4733
- }
4734
- MainBranchChanged(event) {
4735
- this.emitBranchesChanged();
4736
- }
4737
- OrganizationChanged(event) {
4738
- const org = this.OrganizationFormControl;
4739
- this.RepositoryFormControl.reset();
4740
- if (this.UseBranches) {
4741
- this.BranchesFormControl.reset();
4742
- this.SelectedBranches = [];
4743
- }
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();
4753
- }
4754
- }
4755
- RemoveBranchOption(option) {
4756
- const index = this.SelectedBranches.indexOf(option);
4757
- if (index >= 0) {
4758
- this.SelectedBranches.splice(index, 1);
4759
- }
4760
- this.emitBranchesChanged();
4359
+ CalculateTimelapse(timestamp) {
4360
+ return moment(timestamp).fromNow();
4761
4361
  }
4762
- RepositoryChanged(event) {
4763
- const repo = this.RepositoryFormControl;
4764
- if (this.UseBranches) {
4765
- this.BranchesFormControl.reset();
4766
- this.SelectedBranches = [];
4767
- this.listBranches();
4768
- }
4769
- if (!this.UseBranches) {
4770
- this.listBuildPaths();
4362
+ HandleAction(action) {
4363
+ if (action.ActionType == 'Link') {
4364
+ if (action.Action.startsWith('http')) {
4365
+ window.open(action.Action, '_blank');
4366
+ }
4367
+ else {
4368
+ window.location.href = action.Action;
4369
+ }
4771
4370
  }
4772
- }
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;
4371
+ else if (action.ActionType == 'Modal') {
4372
+ if (action.Action == 'AddSourceControl') {
4373
+ this.OpenSourceControlDialog(null);
4783
4374
  }
4784
4375
  else {
4785
- // TODO: Need to surface an error to the user...
4786
- this.Loading = false;
4376
+ alert('other modaled ' + action.Action);
4787
4377
  }
4788
- });
4789
- }
4790
- SetEditingSourceControl(scLookup) {
4791
- this.EditingSourceControlLookup = scLookup;
4792
- }
4793
- SubmitSourceControl() {
4794
- console.log('source control submitted: ', this.DevOpsSourceControlFormGroup.value);
4795
- this.SaveSourceControl();
4378
+ }
4796
4379
  }
4797
- SaveSourceControl() {
4798
- const saveEnvReq = {
4799
- Environment: {
4800
- ...this.Environment,
4801
- Sources: this.Environment.Sources || {},
4380
+ OpenSourceControlDialog(scLookup) {
4381
+ const dialogRef = this.dialog.open(SourceControlDialogComponent, {
4382
+ width: '550px',
4383
+ data: {
4384
+ environment: this.Environment,
4385
+ environmentLookup: this.ActiveEnvironmentLookup,
4386
+ scLookup: scLookup,
4802
4387
  },
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
4388
  });
4389
+ dialogRef.afterClosed().subscribe((result) => {
4390
+ // console.log('The dialog was closed');
4391
+ // console.log("result:", result)
4392
+ });
4393
+ }
4394
+ SafeHtml(html) {
4395
+ return this.sanitizer.bypassSecurityTrustHtml(html);
4826
4396
  }
4827
4397
  // Helpers
4828
- addBranchOption(value) {
4829
- value = (value || '').trim();
4830
- if (value && this.SelectedBranches.indexOf(value) < 0) {
4831
- this.SelectedBranches.push(value);
4398
+ handleRefresh() {
4399
+ if (this.FeedItem?.RefreshLink) {
4400
+ setTimeout(() => {
4401
+ this.eacSvc.CheckUserFeedItem(this.FeedItem).subscribe(async (response) => {
4402
+ if (response.Status.Code === 0) {
4403
+ this.FeedItem = response.Model;
4404
+ this.handleRefresh();
4405
+ }
4406
+ else {
4407
+ console.log(response);
4408
+ }
4409
+ }, (err) => {
4410
+ console.log(err);
4411
+ });
4412
+ }, 5000);
4832
4413
  }
4833
- this.BranchesInput.nativeElement.blur();
4834
- this.emitBranchesChanged();
4835
4414
  }
4836
- configureDevOpsAction() {
4837
- setTimeout(() => {
4838
- this.DevOpsActionLookupFormControl.setValue(this.DevOpsActionLookup);
4839
- }, 0);
4415
+ }
4416
+ 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 });
4417
+ 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"] }] });
4418
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MainFeedCardComponent, decorators: [{
4419
+ type: Component,
4420
+ 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"] }]
4421
+ }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialog }, { type: i3$2.DomSanitizer }]; }, propDecorators: { FeedItem: [{
4422
+ type: Input,
4423
+ args: ['feed-item']
4424
+ }] } });
4425
+
4426
+ class TwoColumnHeaderComponent {
4427
+ constructor() { }
4428
+ ngOnInit() {
4840
4429
  }
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(''));
4430
+ }
4431
+ TwoColumnHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TwoColumnHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4432
+ 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"] }] });
4433
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TwoColumnHeaderComponent, decorators: [{
4434
+ type: Component,
4435
+ 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"] }]
4436
+ }], ctorParameters: function () { return []; } });
4437
+
4438
+ class CardCarouselComponent {
4439
+ constructor() {
4440
+ this.carouselIndex = 0;
4848
4441
  }
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]);
4442
+ ngOnInit() {
4443
+ }
4444
+ ngAfterViewInit() {
4445
+ this.assignCarouselClass();
4446
+ }
4447
+ LeftChevronClicked() {
4448
+ this.removeCarouselClasses();
4449
+ if (this.carouselIndex === 0) {
4450
+ this.carouselIndex = this.Stats.length - 1;
4854
4451
  }
4855
- else if (this.SelectedBranches?.length <= 0) {
4856
- this.MainBranchFormControl.reset();
4452
+ else {
4453
+ this.carouselIndex--;
4857
4454
  }
4858
- this.BranchesFormControl.setValue(this.SelectedBranches.join(','));
4859
- this.BranchesChanged(this.SelectedBranches || []);
4455
+ this.assignCarouselClass();
4860
4456
  }
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
- }
4457
+ MoreDetailsClicked() {
4458
+ console.log("More details clicked on carousel item", this.Stats[this.carouselIndex]);
4880
4459
  }
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
- });
4460
+ RightChevronClicked() {
4461
+ this.removeCarouselClasses();
4462
+ if (this.carouselIndex === this.Stats.length - 1) {
4463
+ this.carouselIndex = 0;
4893
4464
  }
4465
+ else {
4466
+ this.carouselIndex++;
4467
+ }
4468
+ this.assignCarouselClass();
4894
4469
  }
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
- });
4910
- }
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);
4470
+ //HELPERS
4471
+ removeCarouselClasses() {
4472
+ for (let i = 0; i < this.Stats.length; i++) {
4473
+ if (i === this.carouselIndex) {
4474
+ document.getElementById("carousel-" + this.carouselIndex).classList.remove('active');
4926
4475
  }
4927
- else if (this.RepositoryOptions?.length <= 0) {
4928
- this.CreatingRepository = true;
4476
+ else {
4477
+ document.getElementById("carousel-" + i).classList.remove('hidden');
4929
4478
  }
4930
- });
4931
- }
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
4479
  }
4945
4480
  }
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));
4481
+ assignCarouselClass() {
4482
+ for (let i = 0; i < this.Stats.length; i++) {
4483
+ if (i === this.carouselIndex) {
4484
+ document.getElementById("carousel-" + this.carouselIndex).classList.add('active');
4485
+ }
4486
+ else {
4487
+ document.getElementById("carousel-" + i).classList.add('hidden');
4488
+ }
4959
4489
  }
4960
4490
  }
4961
4491
  }
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: [{
4492
+ CardCarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CardCarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4493
+ 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"] }] });
4494
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CardCarouselComponent, decorators: [{
4965
4495
  type: Component,
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: [{
4968
- type: Input,
4969
- args: ['editing-source-control-lookup']
4970
- }], Environment: [{
4496
+ 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"] }]
4497
+ }], ctorParameters: function () { return []; }, propDecorators: { Stats: [{
4971
4498
  type: Input,
4972
- args: ['environment']
4973
- }], EnvironmentLookup: [{
4499
+ args: ['stats']
4500
+ }] } });
4501
+
4502
+ class SecurityToggleComponent {
4503
+ constructor(eacSvc, formBldr) {
4504
+ this.eacSvc = eacSvc;
4505
+ this.formBldr = formBldr;
4506
+ this.SaveFormEvent = new EventEmitter;
4507
+ this.SkeletonEffect = 'wave';
4508
+ }
4509
+ get IsPrivateFormControl() {
4510
+ return this.SecurityFormGroup?.controls.isPrivate;
4511
+ }
4512
+ get IsTriggerSignInFormControl() {
4513
+ return this.SecurityFormGroup?.controls.isTriggerSignIn;
4514
+ }
4515
+ get State() {
4516
+ return this.eacSvc.State;
4517
+ }
4518
+ ngOnInit() {
4519
+ this.setupSecurityFormGroup();
4520
+ }
4521
+ SecuritySubmit() {
4522
+ //save the security settings
4523
+ console.log("submitting security values: ", this.SecurityFormGroup.value);
4524
+ this.SaveFormEvent.emit(this.SecurityFormGroup.value);
4525
+ }
4526
+ setupSecurityFormGroup() {
4527
+ this.ProcessorType = this.EditingApplication?.Processor?.Type || '';
4528
+ this.SecurityFormGroup = this.formBldr.group({});
4529
+ this.setupSecurityForm();
4530
+ }
4531
+ setupSecurityForm() {
4532
+ this.SecurityFormGroup.addControl('isPrivate', this.formBldr.control(this.EditingApplication.LookupConfig?.IsPrivate || false, [Validators.required]));
4533
+ this.SecurityFormGroup.addControl('isTriggerSignIn', this.formBldr.control(this.EditingApplication.LookupConfig?.IsTriggerSignIn || false, [Validators.required]));
4534
+ }
4535
+ }
4536
+ 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 });
4537
+ 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]" }] });
4538
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SecurityToggleComponent, decorators: [{
4539
+ type: Component,
4540
+ 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"] }]
4541
+ }], ctorParameters: function () { return [{ type: EaCService }, { type: i1$2.FormBuilder }]; }, propDecorators: { EditingApplication: [{
4974
4542
  type: Input,
4975
- args: ['environment-lookup']
4976
- }], SaveStatusEvent: [{
4543
+ args: ['editing-application']
4544
+ }], SaveFormEvent: [{
4977
4545
  type: Output,
4978
- args: ['save-status-event']
4979
- }], BranchesInput: [{
4980
- type: ViewChild,
4981
- args: ['branches']
4546
+ args: ['save-form-event']
4982
4547
  }] } });
4983
4548
 
4984
- class SourceControlDialogComponent {
4985
- constructor(dialogRef, eacSvc, data, snackBar) {
4986
- this.dialogRef = dialogRef;
4549
+ class ProcessorDetailsFormComponent {
4550
+ constructor(appsFlowSvc, formBldr, eacSvc) {
4551
+ this.appsFlowSvc = appsFlowSvc;
4552
+ this.formBldr = formBldr;
4987
4553
  this.eacSvc = eacSvc;
4988
- this.data = data;
4989
- this.snackBar = snackBar;
4554
+ this.redirectTooltip = '';
4555
+ this.HasSaveButton = true;
4556
+ this.SaveFormEvent = new EventEmitter();
4990
4557
  }
4991
- get DevOpsSourceControlFormGroup() {
4992
- return this.DevopsSourceControl?.DevOpsSourceControlFormGroup;
4558
+ get APIRootFormControl() {
4559
+ return this.ProcessorDetailsFormGroup?.controls.apiRoot;
4560
+ }
4561
+ get Environment() {
4562
+ return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
4563
+ }
4564
+ get BuildFormControl() {
4565
+ return this.ProcessorDetailsFormGroup?.controls.build;
4566
+ }
4567
+ get BuildPathFormControl() {
4568
+ return this.ProcessorDetailsFormGroup?.controls.buildPath;
4569
+ }
4570
+ get ClientIDFormControl() {
4571
+ return this.ProcessorDetailsFormGroup?.controls.clientId;
4572
+ }
4573
+ get ClientSecretFormControl() {
4574
+ return this.ProcessorDetailsFormGroup?.controls.clientSecret;
4575
+ }
4576
+ get DefaultFileFormControl() {
4577
+ return this.ProcessorDetailsFormGroup?.controls.defaultFile;
4578
+ }
4579
+ get DefaultSourceControl() {
4580
+ return {
4581
+ Organization: this.EditingApplication?.LowCodeUnit?.Organization,
4582
+ Repository: this.EditingApplication?.LowCodeUnit?.Repository,
4583
+ };
4584
+ }
4585
+ get InboundPathFormControl() {
4586
+ return this.ProcessorDetailsFormGroup?.controls.inboundPath;
4587
+ }
4588
+ get IncludeRequestFormControl() {
4589
+ return this.ProcessorDetailsFormGroup?.controls.includeRequest;
4590
+ }
4591
+ get MethodsFormControl() {
4592
+ return this.ProcessorDetailsFormGroup?.controls.methods;
4593
+ }
4594
+ get PackageFormControl() {
4595
+ return this.ProcessorDetailsFormGroup?.controls.package;
4596
+ }
4597
+ get PermanentFormControl() {
4598
+ return this.ProcessorDetailsFormGroup?.controls.permanent;
4599
+ }
4600
+ get PreserveMethodFormControl() {
4601
+ return this.ProcessorDetailsFormGroup?.controls.preserveMethod;
4602
+ }
4603
+ get RedirectFormControl() {
4604
+ return this.ProcessorDetailsFormGroup?.controls.redirect;
4605
+ }
4606
+ get ScopesFormControl() {
4607
+ return this.ProcessorDetailsFormGroup?.controls.scopes;
4993
4608
  }
4994
- get HasConnection() {
4995
- return this.State.GitHub.HasConnection;
4609
+ get SecurityFormControl() {
4610
+ return this.ProcessorDetailsFormGroup?.controls.security;
4996
4611
  }
4997
4612
  get State() {
4998
4613
  return this.eacSvc.State;
4999
4614
  }
5000
- ngOnInit() {
5001
- }
5002
- CloseDialog() {
5003
- this.dialogRef.close();
4615
+ get SourceControls() {
4616
+ return this.Environment?.Sources || {};
5004
4617
  }
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;
5015
- }
4618
+ get SourceControlFormControl() {
4619
+ return this.ProcessorDetailsFormGroup?.controls.sourceControl;
5016
4620
  }
5017
- SaveSourceControl() {
5018
- this.DevopsSourceControl.SaveSourceControl();
4621
+ get SPARootFormControl() {
4622
+ return this.ProcessorDetailsFormGroup?.controls.spaRoot;
5019
4623
  }
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;
4624
+ get TokenLookupFormControl() {
4625
+ return this.ProcessorDetailsFormGroup?.controls.tokenLookup;
5039
4626
  }
5040
- get ActiveEnvironment() {
5041
- return this.State?.EaC?.Environments[this.ActiveEnvironmentLookup];
4627
+ get ValidFormControls() {
4628
+ let vfc = new Array();
4629
+ for (const field in this.ProcessorDetailsFormGroup.controls) {
4630
+ const control = this.ProcessorDetailsFormGroup.get(field);
4631
+ if (control.valid) {
4632
+ vfc.push(control);
4633
+ }
4634
+ }
4635
+ // console.log("VFC=", vfc)
4636
+ return vfc;
5042
4637
  }
5043
- get ActiveEnvironmentLookup() {
5044
- // TODO: Eventually support multiple environments
5045
- const envLookups = Object.keys(this.State?.EaC?.Environments || {});
5046
- return envLookups[0];
4638
+ get VersionFormControl() {
4639
+ return this.ProcessorDetailsFormGroup?.controls.version;
5047
4640
  }
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];
4641
+ get ZipFileFormControl() {
4642
+ return this.ProcessorDetailsFormGroup?.controls.zipFile;
5051
4643
  }
5052
- get Icon() {
5053
- if (this.FeedItem.Status.Code === 0) {
5054
- return 'check_circle';
5055
- }
5056
- else if (this.FeedItem.Status.Code === 1) {
5057
- return 'cancel';
5058
- }
5059
- else if (this.FeedItem.Status.Code === 2) {
5060
- return 'sync';
4644
+ ngOnInit() {
4645
+ if (!this.EditingApplication) {
4646
+ this.CreateNewApplication();
5061
4647
  }
5062
4648
  else {
5063
- return 'help_outline';
4649
+ this.setupProcessorDetailsForm();
5064
4650
  }
5065
4651
  }
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';
4652
+ CreateNewApplication() {
4653
+ this.SetEditingApplication(Guid.CreateRaw());
4654
+ }
4655
+ DetermineTooltipText() {
4656
+ let permanentValue = this.PermanentFormControl.value;
4657
+ let preserveValue = this.PreserveMethodFormControl.value;
4658
+ if (permanentValue === true && preserveValue === false) {
4659
+ this.redirectTooltip = '301 – Permanent and Not Preserve';
5075
4660
  }
5076
- else {
5077
- return 'gray';
4661
+ else if (permanentValue === false && preserveValue === false) {
4662
+ this.redirectTooltip = '302 – Not Permanent and Not Preserve';
5078
4663
  }
5079
- }
5080
- get State() {
5081
- return this.eacSvc.State;
5082
- }
5083
- // Life Cycle
5084
- ngOnInit() {
5085
- this.handleRefresh();
5086
- }
5087
- // API Methods
5088
- CalculateTimelapse(timestamp) {
5089
- return moment(timestamp).fromNow();
5090
- }
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
- }
4664
+ else if (permanentValue === false && preserveValue === true) {
4665
+ this.redirectTooltip = '307 – Not Permanent and Preserve';
5099
4666
  }
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
- }
4667
+ else if (permanentValue === true && preserveValue === true) {
4668
+ this.redirectTooltip = '308 – Permanent and Preserve';
5107
4669
  }
5108
4670
  }
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)
5121
- });
5122
- }
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);
4671
+ SaveProcessorDetails() {
4672
+ const app = this.EditingApplication;
4673
+ app.LookupConfig.AllowedMethods = this.MethodsFormControl?.value
4674
+ ?.split(' ')
4675
+ .filter((v) => !!v);
4676
+ app.Processor.Type = this.ProcessorType;
4677
+ switch (app.Processor.Type) {
4678
+ case 'DFS':
4679
+ app.Processor.DefaultFile =
4680
+ this.DefaultFileFormControl.value || 'index.html';
4681
+ app.LowCodeUnit = {
4682
+ Type: this.LCUType,
4683
+ };
4684
+ switch (app.LowCodeUnit.Type) {
4685
+ case 'GitHub':
4686
+ app.LowCodeUnit.Organization =
4687
+ this.SourceControls[this.SourceControlFormControl.value]?.Organization;
4688
+ app.LowCodeUnit.Repository =
4689
+ this.SourceControls[this.SourceControlFormControl.value]?.Repository;
4690
+ app.LowCodeUnit.Build = this.BuildFormControl.value;
4691
+ app.LowCodeUnit.Path = this.BuildPathFormControl.value;
4692
+ app.LowCodeUnit.SourceControlLookup =
4693
+ this.SourceControlFormControl.value;
4694
+ break;
4695
+ case 'NPM':
4696
+ app.LowCodeUnit.Package = this.PackageFormControl.value;
4697
+ app.LowCodeUnit.Version = this.VersionFormControl.value;
4698
+ break;
4699
+ case 'WordPress':
4700
+ app.LowCodeUnit.APIRoot = this.APIRootFormControl.value;
4701
+ break;
4702
+ case 'Zip':
4703
+ app.LowCodeUnit.ZipFile = this.ZipFileFormControl.value;
4704
+ break;
4705
+ }
4706
+ break;
4707
+ case 'OAuth':
4708
+ app.Processor.Scopes = this.ScopesFormControl.value.split(' ');
4709
+ app.Processor.TokenLookup = this.TokenLookupFormControl.value;
4710
+ app.LowCodeUnit = {
4711
+ Type: this.LCUType,
4712
+ };
4713
+ switch (app.LowCodeUnit.Type) {
4714
+ case 'GitHubOAuth':
4715
+ app.LowCodeUnit.ClientID = this.ClientIDFormControl.value;
4716
+ app.LowCodeUnit.ClientSecret = this.ClientSecretFormControl.value;
4717
+ break;
4718
+ }
4719
+ break;
4720
+ case 'Proxy':
4721
+ app.Processor.InboundPath = this.InboundPathFormControl.value;
4722
+ app.LowCodeUnit = {
4723
+ Type: this.LCUType,
4724
+ };
4725
+ switch (app.LowCodeUnit.Type) {
4726
+ case 'API':
4727
+ app.LowCodeUnit.APIRoot = this.APIRootFormControl.value;
4728
+ app.LowCodeUnit.Security = this.SecurityFormControl.value;
4729
+ break;
4730
+ case 'SPA':
4731
+ app.LowCodeUnit.SPARoot = this.SPARootFormControl.value;
4732
+ break;
4733
+ }
4734
+ break;
4735
+ case 'Redirect':
4736
+ app.Processor.IncludeRequest = !!this.IncludeRequestFormControl.value;
4737
+ app.Processor.Permanent = !!this.PermanentFormControl.value;
4738
+ app.Processor.PreserveMethod = !!this.PreserveMethodFormControl.value;
4739
+ app.Processor.Redirect = this.RedirectFormControl.value;
4740
+ break;
5142
4741
  }
4742
+ if (!app.LookupConfig.PathRegex.startsWith('/')) {
4743
+ app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
4744
+ }
4745
+ const saveAppReq = {
4746
+ ProjectLookup: this.ProjectLookup,
4747
+ Application: app,
4748
+ ApplicationLookup: this.EditingApplicationLookup || Guid.CreateRaw(),
4749
+ };
4750
+ this.eacSvc.SaveApplicationAsCode(saveAppReq).then((res) => {
4751
+ this.SaveFormEvent.emit(res);
4752
+ });
5143
4753
  }
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;
4754
+ SetEditingApplication(appLookup) {
4755
+ this.EditingApplication = new EaCApplicationAsCode();
4756
+ this.EditingApplicationLookup = appLookup;
4757
+ this.setupProcessorDetailsForm();
5170
4758
  }
5171
- ngOnInit() {
4759
+ SourceControlChanged(event) {
4760
+ this.listBuildPaths();
5172
4761
  }
5173
- ngAfterViewInit() {
5174
- this.assignCarouselClass();
4762
+ ProcessorTypeChanged(event) {
4763
+ this.ProcessorType = event.value;
4764
+ this.setupProcessorTypeSubForm();
5175
4765
  }
5176
- LeftChevronClicked() {
5177
- this.removeCarouselClasses();
5178
- if (this.carouselIndex === 0) {
5179
- this.carouselIndex = this.Stats.length - 1;
5180
- }
5181
- else {
5182
- this.carouselIndex--;
5183
- }
5184
- this.assignCarouselClass();
4766
+ LCUTypeChanged(event) {
4767
+ this.LCUType = event.value;
4768
+ this.setupLcuTypeSubForm();
5185
4769
  }
5186
- MoreDetailsClicked() {
5187
- console.log("More details clicked on carousel item", this.Stats[this.carouselIndex]);
4770
+ //HELPERS
4771
+ cleanupLcuTypeSubForm() {
4772
+ this.ProcessorDetailsFormGroup.removeControl('methods');
4773
+ this.ProcessorDetailsFormGroup.removeControl('apiRoot');
4774
+ this.ProcessorDetailsFormGroup.removeControl('security');
4775
+ this.ProcessorDetailsFormGroup.removeControl('spaRoot');
4776
+ this.ProcessorDetailsFormGroup.removeControl('applicationId');
4777
+ this.ProcessorDetailsFormGroup.removeControl('sourceControl');
4778
+ this.ProcessorDetailsFormGroup.removeControl('build');
4779
+ this.ProcessorDetailsFormGroup.removeControl('clientId');
4780
+ this.ProcessorDetailsFormGroup.removeControl('clientSecret');
4781
+ this.ProcessorDetailsFormGroup.removeControl('package');
4782
+ this.ProcessorDetailsFormGroup.removeControl('version');
4783
+ this.ProcessorDetailsFormGroup.removeControl('zipFile');
5188
4784
  }
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();
4785
+ cleanupProcessorTypeSubForm() {
4786
+ this.ProcessorDetailsFormGroup.removeControl('defaultFile');
4787
+ // this.ApplicationFormGroup.removeControl('dfsLcuType');
4788
+ // this.ApplicationFormGroup.removeControl('oauthLcuType');
4789
+ this.ProcessorDetailsFormGroup.removeControl('scopes');
4790
+ this.ProcessorDetailsFormGroup.removeControl('tokenLookup');
4791
+ this.ProcessorDetailsFormGroup.removeControl('inboundPath');
4792
+ this.ProcessorDetailsFormGroup.removeControl('proxyLcuType');
4793
+ this.ProcessorDetailsFormGroup.removeControl('includeRequest');
4794
+ this.ProcessorDetailsFormGroup.removeControl('redirect');
4795
+ this.ProcessorDetailsFormGroup.removeControl('permanent');
4796
+ this.ProcessorDetailsFormGroup.removeControl('preserveMethod');
4797
+ this.cleanupLcuTypeSubForm();
5198
4798
  }
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');
4799
+ listBuildPaths() {
4800
+ this.State.Loading = true;
4801
+ console.log("Source Control: ", this.SourceControls[this.SourceControlFormControl.value]);
4802
+ this.appsFlowSvc
4803
+ .ListBuildPaths(this.SourceControls[this.SourceControlFormControl.value]?.Organization, this.SourceControls[this.SourceControlFormControl.value]?.Repository)
4804
+ .subscribe((response) => {
4805
+ this.BuildPathOptions = response.Model;
4806
+ console.log("build path options: ", this.BuildPathOptions);
4807
+ this.State.Loading = false;
4808
+ // if (this.BuildPathOptions?.length === 1) {
4809
+ // this.BuildPathFormControl.setValue(this.BuildPathOptions[0]);
4810
+ // }
4811
+ });
4812
+ }
4813
+ setupLcuTypeSubForm() {
4814
+ this.cleanupLcuTypeSubForm();
4815
+ if (this.LCUType) {
4816
+ switch (this.LCUType) {
4817
+ case 'API':
4818
+ this.setupLCUAPIForm();
4819
+ break;
4820
+ case 'ApplicationPointer':
4821
+ this.setupLCUApplicationPointerForm();
4822
+ break;
4823
+ case 'GitHub':
4824
+ this.setupLCUGitHubForm();
4825
+ break;
4826
+ case 'GitHubOAuth':
4827
+ this.setupLCUGitHubOAuthForm();
4828
+ break;
4829
+ case 'WordPress':
4830
+ this.setupLCUWordPressForm();
4831
+ break;
4832
+ // case 'NPM':
4833
+ // this.setupLCUNPMForm();
4834
+ // break;
4835
+ case 'SPA':
4836
+ this.setupLCUSPAForm();
4837
+ break;
4838
+ case 'Zip':
4839
+ this.setupLCUZipForm();
4840
+ break;
5207
4841
  }
5208
4842
  }
5209
4843
  }
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
- }
4844
+ setupProcessorDetailsForm() {
4845
+ this.ProcessorType = this.EditingApplication?.Processor?.Type || '';
4846
+ // console.log('EDITING APP = ', this.EditingApplication);
4847
+ if (this.EditingApplication != null) {
4848
+ this.ProcessorDetailsFormGroup = this.formBldr.group({
4849
+ procType: [this.ProcessorType, [Validators.required]],
4850
+ });
4851
+ // this.setupDfsForm();
4852
+ // this.setupLcuTypeSubForm();
4853
+ this.setupProcessorTypeSubForm();
5218
4854
  }
5219
4855
  }
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';
4856
+ setupLCUGitHubForm() {
4857
+ console.log('EditingApplication: ', this.EditingApplication);
4858
+ this.ProcessorDetailsFormGroup.addControl('sourceControl', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SourceControlLookup || '', [Validators.required]));
4859
+ this.ProcessorDetailsFormGroup.addControl('buildPath', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Path || '', [
4860
+ Validators.required,
4861
+ ]));
4862
+ this.ProcessorDetailsFormGroup.addControl('build', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Build || 'latest', [Validators.required]));
4863
+ this.listBuildPaths();
5237
4864
  }
5238
- get IsPrivateFormControl() {
5239
- return this.SecurityFormGroup?.controls.isPrivate;
4865
+ setupLCUApplicationPointerForm() {
4866
+ this.ProcessorDetailsFormGroup.addControl('applicationId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ApplicationID || '', [Validators.required]));
5240
4867
  }
5241
- get IsTriggerSignInFormControl() {
5242
- return this.SecurityFormGroup?.controls.isTriggerSignIn;
4868
+ setupLCUSPAForm() {
4869
+ this.ProcessorDetailsFormGroup.addControl('spaRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SPARoot || '', [Validators.required]));
5243
4870
  }
5244
- get State() {
5245
- return this.eacSvc.State;
4871
+ setupLCUAPIForm() {
4872
+ this.ProcessorDetailsFormGroup.addControl('methods', this.formBldr.control(this.EditingApplication.LookupConfig?.AllowedMethods?.join(' ') || '', []));
4873
+ this.ProcessorDetailsFormGroup.addControl('apiRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.APIRoot || '', [Validators.required]));
4874
+ this.ProcessorDetailsFormGroup.addControl('security', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Security || '', [Validators.required]));
5246
4875
  }
5247
- ngOnInit() {
5248
- this.setupSecurityFormGroup();
4876
+ setupLCUGitHubOAuthForm() {
4877
+ this.ProcessorDetailsFormGroup.addControl('clientId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientID || '', [Validators.required]));
4878
+ this.ProcessorDetailsFormGroup.addControl('clientSecret', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientSecret || '', [Validators.required]));
5249
4879
  }
5250
- SecuritySubmit() {
5251
- //save the security settings
5252
- console.log("submitting security values: ", this.SecurityFormGroup.value);
5253
- this.SaveFormEvent.emit(this.SecurityFormGroup.value);
4880
+ setupLCUWordPressForm() {
4881
+ this.ProcessorDetailsFormGroup.addControl('apiRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.APIRoot || '', [Validators.required]));
5254
4882
  }
5255
- setupSecurityFormGroup() {
5256
- this.ProcessorType = this.EditingApplication?.Processor?.Type || '';
5257
- this.SecurityFormGroup = this.formBldr.group({});
5258
- this.setupSecurityForm();
4883
+ setupProxyForm() {
4884
+ this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4885
+ this.ProcessorDetailsFormGroup.addControl('inboundPath', this.formBldr.control(this.EditingApplication.Processor?.InboundPath || '', [Validators.required]));
4886
+ this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
5259
4887
  }
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]));
4888
+ setupRedirectForm() {
4889
+ this.ProcessorDetailsFormGroup.addControl('redirect', this.formBldr.control(this.EditingApplication.Processor?.Redirect || '', [
4890
+ Validators.required,
4891
+ ]));
4892
+ this.ProcessorDetailsFormGroup.addControl('permanent', this.formBldr.control(this.EditingApplication.Processor?.Permanent || false, []));
4893
+ this.ProcessorDetailsFormGroup.addControl('preserveMethod', this.formBldr.control(this.EditingApplication.Processor?.PreserveMethod || false, []));
4894
+ this.ProcessorDetailsFormGroup.addControl('includeRequest', this.formBldr.control(this.EditingApplication.Processor?.IncludeRequest || false, []));
4895
+ this.DetermineTooltipText();
4896
+ }
4897
+ setupOAuthForm() {
4898
+ this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4899
+ this.ProcessorDetailsFormGroup.addControl('scopes', this.formBldr.control(this.EditingApplication.Processor?.Scopes?.Join(' ') || '', [Validators.required]));
4900
+ this.ProcessorDetailsFormGroup.addControl('tokenLookup', this.formBldr.control(this.EditingApplication.Processor?.TokenLookup || '', [Validators.required]));
4901
+ this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
4902
+ }
4903
+ setupLCUZipForm() {
4904
+ this.ProcessorDetailsFormGroup.addControl('zipFile', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ZipFile || '', [Validators.required]));
4905
+ }
4906
+ setupDfsForm() {
4907
+ this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4908
+ this.ProcessorDetailsFormGroup.addControl('defaultFile', this.formBldr.control(this.EditingApplication.Processor?.DefaultFile || 'index.html', [Validators.required]));
4909
+ this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
4910
+ }
4911
+ setupProcessorTypeSubForm() {
4912
+ this.cleanupProcessorTypeSubForm();
4913
+ if (this.ProcessorType) {
4914
+ switch (this.ProcessorType) {
4915
+ case 'DFS':
4916
+ this.setupDfsForm();
4917
+ break;
4918
+ case 'OAuth':
4919
+ this.setupOAuthForm();
4920
+ break;
4921
+ case 'Proxy':
4922
+ this.setupProxyForm();
4923
+ break;
4924
+ case 'Redirect':
4925
+ this.setupRedirectForm();
4926
+ break;
4927
+ }
4928
+ }
4929
+ this.setupLcuTypeSubForm();
5263
4930
  }
5264
4931
  }
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: [{
4932
+ 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 });
4933
+ 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"] }] });
4934
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ProcessorDetailsFormComponent, decorators: [{
5268
4935
  type: Component,
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: [{
4936
+ 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"] }]
4937
+ }], ctorParameters: function () { return [{ type: ApplicationsFlowService }, { type: i1$2.FormBuilder }, { type: EaCService }]; }, propDecorators: { EditingApplication: [{
5271
4938
  type: Input,
5272
4939
  args: ['editing-application']
4940
+ }], EditingApplicationLookup: [{
4941
+ type: Input,
4942
+ args: ['editing-application-lookup']
4943
+ }], HasSaveButton: [{
4944
+ type: Input,
4945
+ args: ['has-save-button']
4946
+ }], SourceControlLookups: [{
4947
+ type: Input,
4948
+ args: ['source-control-lookups']
4949
+ }], ProjectLookup: [{
4950
+ type: Input,
4951
+ args: ['project-lookup']
5273
4952
  }], SaveFormEvent: [{
5274
4953
  type: Output,
5275
4954
  args: ['save-form-event']
@@ -5617,6 +5296,106 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
5617
5296
  args: [BuildPipelineFormComponent]
5618
5297
  }] } });
5619
5298
 
5299
+ class EditApplicationFormComponent {
5300
+ constructor(formBldr, eacSvc) {
5301
+ this.formBldr = formBldr;
5302
+ this.eacSvc = eacSvc;
5303
+ this.SaveFormEvent = new EventEmitter;
5304
+ this.HasSaveButton = true;
5305
+ }
5306
+ get DescriptionFormControl() {
5307
+ return this.ApplicationFormGroup?.controls.description;
5308
+ }
5309
+ get NameFormControl() {
5310
+ return this.ApplicationFormGroup?.controls.name;
5311
+ }
5312
+ get RouteFormControl() {
5313
+ return this.ApplicationFormGroup?.controls.route;
5314
+ }
5315
+ get State() {
5316
+ return this.eacSvc.State;
5317
+ }
5318
+ ngOnInit() {
5319
+ this.setupApplicationForm();
5320
+ }
5321
+ SubmitApplicationControl() {
5322
+ console.log("application form: ", this.ApplicationFormGroup.value);
5323
+ this.SaveApplication();
5324
+ }
5325
+ SaveApplication() {
5326
+ const app = this.EditingApplication;
5327
+ // console.log("APP=", app);
5328
+ app.Application = {
5329
+ Name: this.NameFormControl.value,
5330
+ Description: this.DescriptionFormControl.value,
5331
+ PriorityShift: this.EditingApplication?.Application?.PriorityShift || 0,
5332
+ };
5333
+ app.LookupConfig.PathRegex = `${this.RouteFormControl.value}.*`;
5334
+ switch (app.Processor.Type) {
5335
+ case 'DFS':
5336
+ app.Processor.BaseHref = `${this.RouteFormControl.value}/`.replace('//', '/');
5337
+ break;
5338
+ }
5339
+ if (!app.LookupConfig.PathRegex.startsWith('/')) {
5340
+ app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
5341
+ }
5342
+ const saveAppReq = {
5343
+ ProjectLookup: this.ProjectLookup,
5344
+ Application: app,
5345
+ ApplicationLookup: this.ApplicationLookup,
5346
+ };
5347
+ console.log("processor details being submitted: ", app.Processor);
5348
+ this.eacSvc.SaveApplicationAsCode(saveAppReq).then(res => {
5349
+ this.SaveFormEvent.emit(res);
5350
+ });
5351
+ }
5352
+ //HELPERS
5353
+ setupApplicationForm() {
5354
+ if (this.EditingApplication != null) {
5355
+ this.ApplicationFormGroup = this.formBldr.group({
5356
+ name: [this.EditingApplication.Application?.Name, Validators.required],
5357
+ description: [
5358
+ this.EditingApplication.Application?.Description,
5359
+ Validators.required,
5360
+ ],
5361
+ route: [this.CurrentRoute ? this.CurrentRoute :
5362
+ this.EditingApplication.LookupConfig?.PathRegex.replace('.*', '') ||
5363
+ '/',
5364
+ Validators.required,
5365
+ ],
5366
+ // priority: [
5367
+ // this.EditingApplication.Application?.Priority || 10000,
5368
+ // Validators.required,
5369
+ // ],
5370
+ });
5371
+ }
5372
+ }
5373
+ }
5374
+ 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 });
5375
+ 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"] }] });
5376
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationFormComponent, decorators: [{
5377
+ type: Component,
5378
+ 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"] }]
5379
+ }], ctorParameters: function () { return [{ type: i1$2.FormBuilder }, { type: EaCService }]; }, propDecorators: { ApplicationLookup: [{
5380
+ type: Input,
5381
+ args: ['application-lookup']
5382
+ }], CurrentRoute: [{
5383
+ type: Input,
5384
+ args: ['current-route']
5385
+ }], EditingApplication: [{
5386
+ type: Input,
5387
+ args: ['editing-application']
5388
+ }], HasSaveButton: [{
5389
+ type: Input,
5390
+ args: ['has-save-button']
5391
+ }], ProjectLookup: [{
5392
+ type: Input,
5393
+ args: ['project-lookup']
5394
+ }], SaveFormEvent: [{
5395
+ type: Output,
5396
+ args: ['save-form-event']
5397
+ }] } });
5398
+
5620
5399
  class BreadcrumbComponent {
5621
5400
  constructor(eacSvc) {
5622
5401
  this.eacSvc = eacSvc;
@@ -5716,7 +5495,7 @@ class BreadcrumbComponent {
5716
5495
  async handleStateChange() { }
5717
5496
  }
5718
5497
  BreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BreadcrumbComponent, deps: [{ token: EaCService }], target: i0.ɵɵFactoryTarget.Component });
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
+ 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"] }] });
5720
5499
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BreadcrumbComponent, decorators: [{
5721
5500
  type: Component,
5722
5501
  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"] }]
@@ -5749,10 +5528,10 @@ class CustomDomainDialogComponent {
5749
5528
  }
5750
5529
  }
5751
5530
  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 });
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
+ 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]" }] });
5753
5532
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CustomDomainDialogComponent, decorators: [{
5754
5533
  type: Component,
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
+ 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: [""] }]
5756
5535
  }], ctorParameters: function () { return [{ type: i2$3.MatDialogRef }, { type: undefined, decorators: [{
5757
5536
  type: Inject,
5758
5537
  args: [MAT_DIALOG_DATA]
@@ -5776,33 +5555,199 @@ class EditApplicationDialogComponent {
5776
5555
  CloseDialog() {
5777
5556
  this.dialogRef.close();
5778
5557
  }
5779
- HandleSaveApplicationEvent(event) {
5780
- console.log("event to save: ", event);
5781
- if (event.Code === 0) {
5782
- this.snackBar.open("Application Succesfully Updated", "Dismiss", {
5558
+ HandleSaveApplicationEvent(event) {
5559
+ console.log("event to save: ", event);
5560
+ if (event.Code === 0) {
5561
+ this.snackBar.open("Application Succesfully Updated", "Dismiss", {
5562
+ duration: 5000
5563
+ });
5564
+ this.CloseDialog();
5565
+ }
5566
+ else {
5567
+ this.ErrorMessage = event.Message;
5568
+ }
5569
+ }
5570
+ SaveApplication() {
5571
+ this.EditApplicationControl.SaveApplication();
5572
+ }
5573
+ }
5574
+ 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 });
5575
+ 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"] }] });
5576
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationDialogComponent, decorators: [{
5577
+ type: Component,
5578
+ 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: [""] }]
5579
+ }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialogRef }, { type: undefined, decorators: [{
5580
+ type: Inject,
5581
+ args: [MAT_DIALOG_DATA]
5582
+ }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { EditApplicationControl: [{
5583
+ type: ViewChild,
5584
+ args: [EditApplicationFormComponent]
5585
+ }] } });
5586
+
5587
+ class NewApplicationDialogComponent {
5588
+ constructor(eacSvc, dialogRef, data, snackBar) {
5589
+ this.eacSvc = eacSvc;
5590
+ this.dialogRef = dialogRef;
5591
+ this.data = data;
5592
+ this.snackBar = snackBar;
5593
+ this.HasSaveButton = false;
5594
+ }
5595
+ get Environment() {
5596
+ return this.State?.EaC?.Environments[this.data.environmentLookup];
5597
+ }
5598
+ get SourceControls() {
5599
+ return this.Environment?.Sources || {};
5600
+ }
5601
+ get SourceControlLookups() {
5602
+ return Object.keys(this.Environment.Sources || {});
5603
+ }
5604
+ get State() {
5605
+ return this.eacSvc.State;
5606
+ }
5607
+ ngOnInit() {
5608
+ this.SetupApplication(Guid.CreateRaw());
5609
+ }
5610
+ CloseDialog() {
5611
+ this.dialogRef.close();
5612
+ }
5613
+ SetupApplication(appLookup) {
5614
+ this.NewApplication = new EaCApplicationAsCode;
5615
+ this.NewApplicationLookup = appLookup;
5616
+ }
5617
+ SaveApplication() {
5618
+ const app = {
5619
+ Application: {
5620
+ Name: this.ApplicationFormControls.NameFormControl.value,
5621
+ Description: this.ApplicationFormControls.DescriptionFormControl.value,
5622
+ PriorityShift: 0,
5623
+ },
5624
+ AccessRightLookups: [],
5625
+ DataTokens: {},
5626
+ LicenseConfigurationLookups: [],
5627
+ LookupConfig: {
5628
+ IsPrivate: false,
5629
+ IsTriggerSignIn: false,
5630
+ PathRegex: `${this.ApplicationFormControls.RouteFormControl.value}.*`,
5631
+ QueryRegex: '',
5632
+ HeaderRegex: '',
5633
+ AllowedMethods: this.ProcessorDetailsFormControls.MethodsFormControl?.value
5634
+ ?.split(' ')
5635
+ .filter((v) => !!v),
5636
+ },
5637
+ Processor: {
5638
+ Type: this.ProcessorDetailsFormControls.ProcessorType,
5639
+ },
5640
+ };
5641
+ switch (app.Processor.Type) {
5642
+ case 'DFS':
5643
+ app.Processor.BaseHref = `${this.ApplicationFormControls.RouteFormControl.value}/`.replace('//', '/');
5644
+ app.Processor.DefaultFile =
5645
+ this.ProcessorDetailsFormControls.DefaultFileFormControl.value || 'index.html';
5646
+ app.LowCodeUnit = {
5647
+ Type: this.ProcessorDetailsFormControls.LCUType,
5648
+ };
5649
+ switch (app.LowCodeUnit.Type) {
5650
+ case 'GitHub':
5651
+ app.LowCodeUnit.Organization =
5652
+ this.SourceControls[this.ProcessorDetailsFormControls.SourceControlFormControl.value].Organization;
5653
+ app.LowCodeUnit.Repository =
5654
+ this.SourceControls[this.ProcessorDetailsFormControls.SourceControlFormControl.value].Repository;
5655
+ app.LowCodeUnit.Build = this.ProcessorDetailsFormControls.BuildFormControl.value;
5656
+ app.LowCodeUnit.Path =
5657
+ this.ProcessorDetailsFormControls.BuildPathFormControl.value;
5658
+ break;
5659
+ case 'NPM':
5660
+ app.LowCodeUnit.Package = this.ProcessorDetailsFormControls.PackageFormControl.value;
5661
+ app.LowCodeUnit.Version = this.ProcessorDetailsFormControls.VersionFormControl.value;
5662
+ break;
5663
+ case 'Zip':
5664
+ app.LowCodeUnit.ZipFile = this.ProcessorDetailsFormControls.ZipFileFormControl.value;
5665
+ break;
5666
+ }
5667
+ break;
5668
+ case 'OAuth':
5669
+ app.Processor.Scopes = this.ProcessorDetailsFormControls.ScopesFormControl.value.split(' ');
5670
+ app.Processor.TokenLookup = this.ProcessorDetailsFormControls.TokenLookupFormControl.value;
5671
+ app.LowCodeUnit = {
5672
+ Type: this.ProcessorDetailsFormControls.LCUType,
5673
+ };
5674
+ switch (app.LowCodeUnit.Type) {
5675
+ case 'GitHubOAuth':
5676
+ app.LowCodeUnit.ClientID = this.ProcessorDetailsFormControls.ClientIDFormControl.value;
5677
+ app.LowCodeUnit.ClientSecret = this.ProcessorDetailsFormControls.ClientSecretFormControl.value;
5678
+ break;
5679
+ }
5680
+ break;
5681
+ case 'Proxy':
5682
+ app.Processor.InboundPath = this.ProcessorDetailsFormControls.InboundPathFormControl.value;
5683
+ app.LowCodeUnit = {
5684
+ Type: this.ProcessorDetailsFormControls.LCUType,
5685
+ };
5686
+ switch (app.LowCodeUnit.Type) {
5687
+ case 'API':
5688
+ app.LowCodeUnit.APIRoot = this.ProcessorDetailsFormControls.APIRootFormControl.value;
5689
+ app.LowCodeUnit.Security = this.ProcessorDetailsFormControls.SecurityFormControl.value;
5690
+ break;
5691
+ case 'SPA':
5692
+ app.LowCodeUnit.SPARoot = this.ProcessorDetailsFormControls.SPARootFormControl.value;
5693
+ break;
5694
+ }
5695
+ break;
5696
+ case 'Redirect':
5697
+ app.Processor.Permanent = !!this.ProcessorDetailsFormControls.PermanentFormControl.value;
5698
+ app.Processor.PreserveMethod = !!this.ProcessorDetailsFormControls.PreserveMethodFormControl.value;
5699
+ app.Processor.Redirect = this.ProcessorDetailsFormControls.RedirectFormControl.value;
5700
+ break;
5701
+ }
5702
+ if (!app.LookupConfig.PathRegex.startsWith('/')) {
5703
+ app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
5704
+ }
5705
+ const saveAppReq = {
5706
+ ProjectLookup: this.data.projectLookup,
5707
+ Application: app,
5708
+ ApplicationLookup: this.NewApplicationLookup,
5709
+ };
5710
+ // this.HasBuildFormControl.value && taken out from below if statement
5711
+ if (this.ProcessorDetailsFormControls.ProcessorType !== 'redirect' && this.ProcessorDetailsFormControls.LCUType === 'GitHub') {
5712
+ if (app) {
5713
+ app.LowCodeUnit.SourceControlLookup = this.ProcessorDetailsFormControls.SourceControlFormControl.value;
5714
+ }
5715
+ }
5716
+ else if (app) {
5717
+ app.LowCodeUnit.SourceControlLookup = null;
5718
+ }
5719
+ // console.log("Save new App request: ", saveAppReq);
5720
+ this.eacSvc.SaveApplicationAsCode(saveAppReq).then(res => {
5721
+ this.handleSaveStatus(res);
5722
+ });
5723
+ }
5724
+ handleSaveStatus(status) {
5725
+ console.log("event to save: ", status);
5726
+ if (status.Code === 0) {
5727
+ this.snackBar.open("Application Succesfully Created", "Dismiss", {
5783
5728
  duration: 5000
5784
5729
  });
5785
5730
  this.CloseDialog();
5786
5731
  }
5787
5732
  else {
5788
- this.ErrorMessage = event.Message;
5733
+ this.ErrorMessage = status.Message;
5789
5734
  }
5790
5735
  }
5791
- SaveApplication() {
5792
- this.EditApplicationControl.SaveApplication();
5793
- }
5794
5736
  }
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: [{
5737
+ 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 });
5738
+ 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"] }] });
5739
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: NewApplicationDialogComponent, decorators: [{
5798
5740
  type: Component,
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
+ 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: [""] }]
5800
5742
  }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialogRef }, { type: undefined, decorators: [{
5801
5743
  type: Inject,
5802
5744
  args: [MAT_DIALOG_DATA]
5803
- }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { EditApplicationControl: [{
5745
+ }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { ApplicationFormControls: [{
5804
5746
  type: ViewChild,
5805
5747
  args: [EditApplicationFormComponent]
5748
+ }], ProcessorDetailsFormControls: [{
5749
+ type: ViewChild,
5750
+ args: [ProcessorDetailsFormComponent]
5806
5751
  }] } });
5807
5752
 
5808
5753
  class ProcessorDetailsDialogComponent {
@@ -5872,10 +5817,10 @@ class SkeletonFeedCardComponent {
5872
5817
  }
5873
5818
  }
5874
5819
  SkeletonFeedCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SkeletonFeedCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
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
+ 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"] }] });
5876
5821
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SkeletonFeedCardComponent, decorators: [{
5877
5822
  type: Component,
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
+ 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"] }]
5879
5824
  }], ctorParameters: function () { return []; } });
5880
5825
 
5881
5826
  class EmulatedDevicesToggleComponent {
@@ -5994,6 +5939,394 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
5994
5939
  }]
5995
5940
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.LCUServiceSettings }]; } });
5996
5941
 
5942
+ class FeedHeaderDialogComponent {
5943
+ constructor(appsFlowSvc, eacSvc, formBldr, dialogRef, data) {
5944
+ this.appsFlowSvc = appsFlowSvc;
5945
+ this.eacSvc = eacSvc;
5946
+ this.formBldr = formBldr;
5947
+ this.dialogRef = dialogRef;
5948
+ this.data = data;
5949
+ this.EditorConfig = {
5950
+ editable: true,
5951
+ spellcheck: true,
5952
+ height: '250px',
5953
+ minHeight: '0',
5954
+ maxHeight: 'auto',
5955
+ width: 'auto',
5956
+ minWidth: '0',
5957
+ translate: 'yes',
5958
+ enableToolbar: true,
5959
+ showToolbar: true,
5960
+ placeholder: 'Enter text here...',
5961
+ defaultParagraphSeparator: '',
5962
+ defaultFontName: '',
5963
+ defaultFontSize: '',
5964
+ fonts: [
5965
+ { class: 'arial', name: 'Arial' },
5966
+ { class: 'times-new-roman', name: 'Times New Roman' },
5967
+ { class: 'calibri', name: 'Calibri' },
5968
+ { class: 'comic-sans-ms', name: 'Comic Sans MS' }
5969
+ ],
5970
+ customClasses: [
5971
+ {
5972
+ name: 'quote',
5973
+ class: 'quote',
5974
+ },
5975
+ {
5976
+ name: 'redText',
5977
+ class: 'redText'
5978
+ },
5979
+ {
5980
+ name: 'titleText',
5981
+ class: 'titleText',
5982
+ tag: 'h1',
5983
+ },
5984
+ ],
5985
+ sanitize: true,
5986
+ toolbarPosition: 'top',
5987
+ toolbarHiddenButtons: [
5988
+ ['subscript', 'superscript'],
5989
+ ['fontSize']
5990
+ ]
5991
+ };
5992
+ this.SlicesCount = 5;
5993
+ this.Slices = {
5994
+ Sources: this.SlicesCount,
5995
+ };
5996
+ if (this.SourceControlLookups.length === 1) {
5997
+ this.SourceControl = this.Environment?.Sources[this.SourceControlLookups[0]];
5998
+ }
5999
+ }
6000
+ get ActionIconControl() {
6001
+ return this.FeedHeaderFormGroup?.controls.actionIcon;
6002
+ }
6003
+ get ActionLinkControl() {
6004
+ return this.FeedHeaderFormGroup?.controls.actionLink;
6005
+ }
6006
+ get ActionTextControl() {
6007
+ return this.FeedHeaderFormGroup?.controls.actionText;
6008
+ }
6009
+ get EditorControl() {
6010
+ return this.FeedHeaderFormGroup?.controls.editor;
6011
+ }
6012
+ get Environment() {
6013
+ return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
6014
+ }
6015
+ get TargetBranchFormControl() {
6016
+ return this.FeedHeaderFormGroup.controls.targetBranch;
6017
+ }
6018
+ get OrganizationFormControl() {
6019
+ return this.FeedHeaderFormGroup.controls.organization;
6020
+ }
6021
+ get SourceBranchFormControl() {
6022
+ return this.FeedHeaderFormGroup.controls.sourceBranch;
6023
+ }
6024
+ get RepositoryFormControl() {
6025
+ return this.FeedHeaderFormGroup.controls.repository;
6026
+ }
6027
+ get SourceControlFormControl() {
6028
+ return this.FeedHeaderFormGroup.controls.sourceControl;
6029
+ }
6030
+ get SourceControlLookups() {
6031
+ return this.State.FeedSourceControlLookups
6032
+ ? this.State.FeedSourceControlLookups
6033
+ : Object.keys(this.SourceControls || {});
6034
+ }
6035
+ get SourceControls() {
6036
+ return this.Environment?.Sources || {};
6037
+ }
6038
+ get SubtitleFormControl() {
6039
+ return this.FeedHeaderFormGroup.controls.subtitle;
6040
+ }
6041
+ get State() {
6042
+ return this.eacSvc.State;
6043
+ }
6044
+ get TitleFormControl() {
6045
+ return this.FeedHeaderFormGroup?.controls.title;
6046
+ }
6047
+ ngOnInit() {
6048
+ this.setupFeedHeaderForm();
6049
+ }
6050
+ CloseDialog() {
6051
+ this.dialogRef.close();
6052
+ }
6053
+ HandleAction() {
6054
+ if (this.ActionLinkControl.value.startsWith('http')) {
6055
+ window.open(this.ActionLinkControl.value, '_blank');
6056
+ }
6057
+ else {
6058
+ window.location.href = this.ActionLinkControl.value;
6059
+ }
6060
+ }
6061
+ PullRequestSourceControlChanged(event) {
6062
+ this.SourceControl = this.SourceControls[this.SourceControlFormControl.value];
6063
+ this.listBranches();
6064
+ }
6065
+ FeatureBranchSourceControlChanged(event) {
6066
+ this.SourceControl = this.SourceControls[this.SourceControlFormControl.value];
6067
+ this.listOrganizations();
6068
+ }
6069
+ IssueSourceControlChanged(event) {
6070
+ this.SourceControl = this.SourceControls[this.SourceControlFormControl.value];
6071
+ }
6072
+ Submit() {
6073
+ let returnObject = {
6074
+ ActionIcon: this.ActionIconControl ? this.ActionIconControl.value : null,
6075
+ ActionLink: this.ActionLinkControl ? this.ActionLinkControl.value : null,
6076
+ ActionText: this.ActionTextControl ? this.ActionTextControl.value : null,
6077
+ Avatar: null,
6078
+ Content: this.EditorControl ? this.EditorControl.value : null,
6079
+ ExpiresAt: null,
6080
+ Organization: this.OrganizationFormControl ? this.OrganizationFormControl.value : null,
6081
+ Repositroy: this.RepositoryFormControl ? this.RepositoryFormControl.value : null,
6082
+ SourceBranch: this.SourceBranchFormControl ? this.SourceBranchFormControl.value : null,
6083
+ SourceControlLookup: this.SourceControlFormControl ? this.SourceBranchFormControl.value : null,
6084
+ Subtitle: this.SubtitleFormControl ? this.SubtitleFormControl.value : null,
6085
+ TargetBranch: this.TargetBranchFormControl ? this.TargetBranchFormControl.value : null,
6086
+ Type: this.data.type,
6087
+ Title: this.TitleFormControl ? this.TitleFormControl.value : null,
6088
+ };
6089
+ console.log("Control: ", returnObject);
6090
+ let status = this.eacSvc.SubmitFeedEntry(returnObject);
6091
+ console.log("feed entry status: ", status);
6092
+ // console.log("Editor: ", this.EditorControl.value )
6093
+ }
6094
+ OrganizationChanged(event) {
6095
+ this.RepositoryFormControl.reset();
6096
+ this.listRepositories();
6097
+ }
6098
+ RepositoryChanged(event) {
6099
+ this.listBranches();
6100
+ }
6101
+ //HELPERS
6102
+ listBranches() {
6103
+ // this.Loading = true;
6104
+ this.appsFlowSvc
6105
+ .ListBranches(this.SourceControl?.Organization, this.SourceControl?.Repository)
6106
+ .subscribe((response) => {
6107
+ this.BranchOptions = response.Model;
6108
+ // this.Loading = false;
6109
+ // if (this.EditingSourceControl?.Branches?.length > 0) {
6110
+ // this.SelectedBranches = this.EditingSourceControl.Branches;
6111
+ // } else if (this.BranchOptions?.length === 1) {
6112
+ // this.BranchesFormControl.setValue(this.BranchOptions[0].Name);
6113
+ // this.SelectedBranches = [this.BranchOptions[0].Name];
6114
+ // }
6115
+ });
6116
+ }
6117
+ listOrganizations() {
6118
+ // this.Loading = true;
6119
+ this.appsFlowSvc
6120
+ .ListOrganizations()
6121
+ .subscribe((response) => {
6122
+ this.OrganizationOptions = response.Model;
6123
+ console.log("Organization Options: ", this.OrganizationOptions);
6124
+ // this.Loading = false;
6125
+ if (this.SourceControl?.Organization) {
6126
+ setTimeout(() => {
6127
+ this.OrganizationFormControl.setValue(this.SourceControl.Organization);
6128
+ this.listRepositories(this.SourceControl?.Repository);
6129
+ }, 0);
6130
+ }
6131
+ });
6132
+ }
6133
+ listRepositories(activeRepo = null) {
6134
+ // this.Loading = true;
6135
+ this.appsFlowSvc
6136
+ .ListRepositories(this.OrganizationFormControl.value)
6137
+ .subscribe((response) => {
6138
+ this.RepositoryOptions = response.Model;
6139
+ // this.Loading = false;
6140
+ if (activeRepo) {
6141
+ setTimeout(() => {
6142
+ this.RepositoryFormControl.setValue(activeRepo);
6143
+ this.listBranches();
6144
+ }, 0);
6145
+ }
6146
+ });
6147
+ }
6148
+ setupFeedHeaderForm() {
6149
+ this.FeedHeaderFormGroup = this.formBldr.group({});
6150
+ switch (this.data.type) {
6151
+ case "announcement":
6152
+ this.setupAnnouncementForm();
6153
+ break;
6154
+ case "PullRequest":
6155
+ this.setupPRForm();
6156
+ break;
6157
+ case "OpenIssue":
6158
+ this.setupIssueForm();
6159
+ break;
6160
+ case "CreateBranch":
6161
+ this.setupFeatureBranchForm();
6162
+ break;
6163
+ default:
6164
+ //
6165
+ break;
6166
+ }
6167
+ }
6168
+ setupAnnouncementForm() {
6169
+ this.setupBasicForm();
6170
+ this.FeedHeaderFormGroup.addControl('subtitle', this.formBldr.control(''));
6171
+ this.FeedHeaderFormGroup.addControl('actionText', this.formBldr.control(''));
6172
+ this.FeedHeaderFormGroup.addControl('actionLink', this.formBldr.control(''));
6173
+ this.FeedHeaderFormGroup.addControl('actionIcon', this.formBldr.control(''));
6174
+ }
6175
+ setupPRForm() {
6176
+ this.listBranches();
6177
+ this.setupIssueForm();
6178
+ this.setupBranchesForm();
6179
+ }
6180
+ setupBasicForm() {
6181
+ this.FeedHeaderFormGroup.addControl('title', this.formBldr.control('', [Validators.required]));
6182
+ this.FeedHeaderFormGroup.addControl('editor', this.formBldr.control(''));
6183
+ }
6184
+ setupIssueForm() {
6185
+ this.setupBasicForm();
6186
+ this.setupSourceControlForm();
6187
+ }
6188
+ setupFeatureBranchForm() {
6189
+ this.setupSourceControlForm();
6190
+ this.FeedHeaderFormGroup.addControl('organization', this.formBldr.control(''));
6191
+ this.FeedHeaderFormGroup.addControl('repository', this.formBldr.control(''));
6192
+ this.setupBranchesForm();
6193
+ }
6194
+ setupSourceControlForm() {
6195
+ this.FeedHeaderFormGroup.addControl('sourceControl', this.formBldr.control(''));
6196
+ }
6197
+ setupBranchesForm() {
6198
+ this.FeedHeaderFormGroup.addControl('targetBranch', this.formBldr.control(''));
6199
+ this.FeedHeaderFormGroup.addControl('sourceBranch', this.formBldr.control(''));
6200
+ }
6201
+ }
6202
+ 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 });
6203
+ 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 === 'OpenIssue' \">\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 === 'PullRequest' \">\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 === 'CreateBranch' \">\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 } });
6204
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedHeaderDialogComponent, decorators: [{
6205
+ type: Component,
6206
+ 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 === 'OpenIssue' \">\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 === 'PullRequest' \">\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 === 'CreateBranch' \">\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: [""] }]
6207
+ }], ctorParameters: function () { return [{ type: ApplicationsFlowService }, { type: EaCService }, { type: i1$2.FormBuilder }, { type: i2$3.MatDialogRef }, { type: undefined, decorators: [{
6208
+ type: Inject,
6209
+ args: [MAT_DIALOG_DATA]
6210
+ }] }]; } });
6211
+
6212
+ class FeedHeaderComponent {
6213
+ constructor(eacSvc, dialog) {
6214
+ this.eacSvc = eacSvc;
6215
+ this.dialog = dialog;
6216
+ this.SkeletonEffect = "wave";
6217
+ // this.selectedBtn = "pr-btn";
6218
+ }
6219
+ get ActiveEnvironmentLookup() {
6220
+ // TODO: Eventually support multiple environments
6221
+ const envLookups = Object.keys(this.State?.EaC?.Environments || {});
6222
+ return envLookups[0];
6223
+ }
6224
+ get FeedHeaderActions() {
6225
+ return this.State?.FeedActions;
6226
+ }
6227
+ get State() {
6228
+ return this.eacSvc.State;
6229
+ }
6230
+ ngOnInit() {
6231
+ }
6232
+ ngAfterViewInit() {
6233
+ this.addSelectBtn();
6234
+ }
6235
+ CreateAnnouncement() {
6236
+ // this.ModalHeader = "Create Team Announcement";
6237
+ this.OpenFHDialog('announcement', "Create Team Announcement");
6238
+ }
6239
+ // public CreateFeatureBranch(){
6240
+ // this.removeSelectedBtn();
6241
+ // this.ModalHeader = "Create Feature Branch";
6242
+ // this.selectedBtn = "fb-btn";
6243
+ // this.addSelectBtn();
6244
+ // console.log("create feature branch selected");
6245
+ // this.OpenFHDialog('branch');
6246
+ // }
6247
+ // public OpenIssue(){
6248
+ // this.removeSelectedBtn();
6249
+ // this.ModalHeader = "Open Issue";
6250
+ // this.selectedBtn = "oi-btn";
6251
+ // this.addSelectBtn();
6252
+ // console.log("open issue selected");
6253
+ // this.OpenFHDialog('issue');
6254
+ // }
6255
+ // public CreatePullRequest(){
6256
+ // this.removeSelectedBtn();
6257
+ // this.ModalHeader = "Create Pull Request";
6258
+ // this.selectedBtn = "pr-btn";
6259
+ // this.addSelectBtn();
6260
+ // console.log("create pull request selected");
6261
+ // this.OpenFHDialog('pull-request');
6262
+ // }
6263
+ CreateNewApp() {
6264
+ const dialogRef = this.dialog.open(NewApplicationDialogComponent, {
6265
+ width: '600px',
6266
+ data: {
6267
+ environmentLookup: this.ActiveEnvironmentLookup,
6268
+ },
6269
+ });
6270
+ dialogRef.afterClosed().subscribe((result) => {
6271
+ // console.log('The dialog was closed');
6272
+ // console.log("result:", result)
6273
+ });
6274
+ }
6275
+ OpenFHDialog(modalType, modalHeader) {
6276
+ const dialogRef = this.dialog.open(FeedHeaderDialogComponent, {
6277
+ width: '600px',
6278
+ data: {
6279
+ dialogTitle: modalHeader,
6280
+ type: modalType,
6281
+ sourceControlLookup: this.SourceControlLookup ? this.SourceControlLookup : null
6282
+ },
6283
+ });
6284
+ dialogRef.afterClosed().subscribe((result) => {
6285
+ // console.log('The dialog was closed');
6286
+ // console.log("result:", result)
6287
+ });
6288
+ }
6289
+ RouteToPath(path) {
6290
+ window.location.href = path;
6291
+ }
6292
+ Submit() {
6293
+ console.log("submitting: ", this.value);
6294
+ switch (this.selectedBtn) {
6295
+ case "pr-btn":
6296
+ //Pull request
6297
+ console.log("creating pull request: ", this.value);
6298
+ break;
6299
+ case "oi-btn":
6300
+ //Open Issue
6301
+ console.log("Open issue: ", this.value);
6302
+ break;
6303
+ case "fb-btn":
6304
+ //Feature Branch
6305
+ console.log("creating feature branch: ", this.value);
6306
+ break;
6307
+ default:
6308
+ console.log("hmm");
6309
+ break;
6310
+ }
6311
+ }
6312
+ //HELPERS
6313
+ addSelectBtn() {
6314
+ document.getElementById(this.selectedBtn)?.classList.add('selected');
6315
+ }
6316
+ removeSelectedBtn() {
6317
+ document.getElementById(this.selectedBtn)?.classList.remove('selected');
6318
+ }
6319
+ }
6320
+ 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 });
6321
+ 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?.LoadingFeed\">\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 >\n <button \n *ngFor=\"let action of FeedHeaderActions\"\n mat-button \n (click)=\"OpenFHDialog(action.Action, action.Text)\" \n id=\"pr-btn\" \n color=\"primary\"\n >\n <mat-icon>{{action.Icon}}</mat-icon>\n {{action.Text}}\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?.LoadingFeed\">\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: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4$3.SkeletonTextDirective, selector: "[skeleton-text]", inputs: ["effect"] }] });
6322
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedHeaderComponent, decorators: [{
6323
+ type: Component,
6324
+ args: [{ selector: 'lcu-feed-header', template: "<mat-card class=\"social-card\">\n <ng-container *ngIf=\"!State?.LoadingFeed\">\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 >\n <button \n *ngFor=\"let action of FeedHeaderActions\"\n mat-button \n (click)=\"OpenFHDialog(action.Action, action.Text)\" \n id=\"pr-btn\" \n color=\"primary\"\n >\n <mat-icon>{{action.Icon}}</mat-icon>\n {{action.Text}}\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?.LoadingFeed\">\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"] }]
6325
+ }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialog }]; }, propDecorators: { SourceControlLookup: [{
6326
+ type: Input,
6327
+ args: ['source-control-lookup']
6328
+ }] } });
6329
+
5997
6330
  class ApplicationsFlowModule {
5998
6331
  static forRoot() {
5999
6332
  return {
@@ -6038,7 +6371,7 @@ ApplicationsFlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
6038
6371
  ProjectInfoCardComponent,
6039
6372
  AnalyticsCardComponent,
6040
6373
  FeedCardSmComponent,
6041
- GhControlComponent,
6374
+ FeedHeaderComponent,
6042
6375
  MainFeedCardComponent,
6043
6376
  TwoColumnHeaderComponent,
6044
6377
  CardCarouselComponent,
@@ -6057,7 +6390,9 @@ ApplicationsFlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
6057
6390
  ProcessorDetailsDialogComponent,
6058
6391
  SkeletonFeedCardComponent,
6059
6392
  UpgradeDialogComponent,
6060
- EmulatedDevicesToggleComponent], imports: [ClipboardModule,
6393
+ EmulatedDevicesToggleComponent,
6394
+ FeedHeaderDialogComponent], imports: [AngularEditorModule,
6395
+ ClipboardModule,
6061
6396
  FathymSharedModule,
6062
6397
  FormsModule,
6063
6398
  ReactiveFormsModule,
@@ -6095,7 +6430,8 @@ ApplicationsFlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
6095
6430
  ProjectInfoCardComponent,
6096
6431
  AnalyticsCardComponent,
6097
6432
  FeedCardSmComponent,
6098
- GhControlComponent,
6433
+ FeedHeaderComponent,
6434
+ FeedHeaderDialogComponent,
6099
6435
  MainFeedCardComponent,
6100
6436
  TwoColumnHeaderComponent,
6101
6437
  CardCarouselComponent,
@@ -6114,8 +6450,10 @@ ApplicationsFlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
6114
6450
  ProcessorDetailsDialogComponent,
6115
6451
  SkeletonFeedCardComponent,
6116
6452
  UpgradeDialogComponent,
6117
- EmulatedDevicesToggleComponent] });
6453
+ EmulatedDevicesToggleComponent,
6454
+ FeedHeaderDialogComponent] });
6118
6455
  ApplicationsFlowModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ApplicationsFlowModule, imports: [[
6456
+ AngularEditorModule,
6119
6457
  ClipboardModule,
6120
6458
  FathymSharedModule,
6121
6459
  FormsModule,
@@ -6159,7 +6497,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6159
6497
  ProjectInfoCardComponent,
6160
6498
  AnalyticsCardComponent,
6161
6499
  FeedCardSmComponent,
6162
- GhControlComponent,
6500
+ FeedHeaderComponent,
6163
6501
  MainFeedCardComponent,
6164
6502
  TwoColumnHeaderComponent,
6165
6503
  CardCarouselComponent,
@@ -6178,9 +6516,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6178
6516
  ProcessorDetailsDialogComponent,
6179
6517
  SkeletonFeedCardComponent,
6180
6518
  UpgradeDialogComponent,
6181
- EmulatedDevicesToggleComponent
6519
+ EmulatedDevicesToggleComponent,
6520
+ FeedHeaderDialogComponent
6182
6521
  ],
6183
6522
  imports: [
6523
+ AngularEditorModule,
6184
6524
  ClipboardModule,
6185
6525
  FathymSharedModule,
6186
6526
  FormsModule,
@@ -6221,7 +6561,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6221
6561
  ProjectInfoCardComponent,
6222
6562
  AnalyticsCardComponent,
6223
6563
  FeedCardSmComponent,
6224
- GhControlComponent,
6564
+ FeedHeaderComponent,
6565
+ FeedHeaderDialogComponent,
6225
6566
  MainFeedCardComponent,
6226
6567
  TwoColumnHeaderComponent,
6227
6568
  CardCarouselComponent,
@@ -6240,7 +6581,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6240
6581
  ProcessorDetailsDialogComponent,
6241
6582
  SkeletonFeedCardComponent,
6242
6583
  UpgradeDialogComponent,
6243
- EmulatedDevicesToggleComponent
6584
+ EmulatedDevicesToggleComponent,
6585
+ FeedHeaderDialogComponent
6244
6586
  ],
6245
6587
  entryComponents: [
6246
6588
  ApplicationsFlowProjectsElementComponent,
@@ -6267,7 +6609,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6267
6609
  ProjectInfoCardComponent,
6268
6610
  AnalyticsCardComponent,
6269
6611
  FeedCardSmComponent,
6270
- GhControlComponent,
6612
+ FeedHeaderComponent,
6271
6613
  MainFeedCardComponent,
6272
6614
  TwoColumnHeaderComponent,
6273
6615
  CardCarouselComponent,
@@ -6306,6 +6648,8 @@ class FeedItemAction {
6306
6648
  }
6307
6649
  class FeedItemTab {
6308
6650
  }
6651
+ class FeedEntry {
6652
+ }
6309
6653
 
6310
6654
  class ActionsModel {
6311
6655
  }
@@ -6329,5 +6673,5 @@ class FormModel {
6329
6673
  * Generated bundle index. Do not edit.
6330
6674
  */
6331
6675
 
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 };
6676
+ 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 };
6333
6677
  //# sourceMappingURL=lowcodeunit-applications-flow-common.mjs.map