@lowcodeunit/applications-flow-common 1.33.301-lets-get-social-ish → 1.33.304-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.
@@ -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
@@ -3836,1439 +3838,1081 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
3836
3838
  args: ['feed-item']
3837
3839
  }] } });
3838
3840
 
3839
- class EditApplicationFormComponent {
3840
- constructor(formBldr, eacSvc) {
3841
- this.formBldr = formBldr;
3841
+ class DevopsSourceControlFormComponent {
3842
+ // Constructors
3843
+ constructor(appsFlowSvc, eacSvc, formBuilder) {
3844
+ this.appsFlowSvc = appsFlowSvc;
3842
3845
  this.eacSvc = eacSvc;
3843
- this.SaveFormEvent = new EventEmitter;
3844
- this.HasSaveButton = true;
3846
+ this.formBuilder = formBuilder;
3847
+ this.SeparatorKeysCodes = [ENTER, COMMA];
3848
+ this.SaveStatusEvent = new EventEmitter();
3849
+ this.BuildPath = null;
3850
+ this.HostingDetails = new ProjectHostingDetails();
3851
+ this.SelectedBranches = [];
3852
+ this.SourceControlRoot = '';
3853
+ this.SkeletonEffect = "wave";
3854
+ this.UseBranches = true;
3855
+ this.UseBuildPath = false;
3845
3856
  }
3846
- get DescriptionFormControl() {
3847
- return this.ApplicationFormGroup?.controls.description;
3857
+ // Properties
3858
+ get ArtifactLookups() {
3859
+ return this.DevOpsAction?.ArtifactLookups;
3848
3860
  }
3849
- get NameFormControl() {
3850
- return this.ApplicationFormGroup?.controls.name;
3861
+ get ArtifactLookup() {
3862
+ const artLookup = this.DevOpsAction?.ArtifactLookups
3863
+ ? this.DevOpsAction?.ArtifactLookups[0]
3864
+ : null;
3865
+ return artLookup;
3851
3866
  }
3852
- get RouteFormControl() {
3853
- return this.ApplicationFormGroup?.controls.route;
3867
+ get Artifact() {
3868
+ return this.Environment?.Artifacts && this.ArtifactLookup
3869
+ ? this.Environment?.Artifacts[this.ArtifactLookup] || {}
3870
+ : {};
3854
3871
  }
3855
- get State() {
3856
- return this.eacSvc.State;
3872
+ get BranchesFormControl() {
3873
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'branches');
3857
3874
  }
3858
- ngOnInit() {
3859
- this.setupApplicationForm();
3875
+ get BuildPathFormControl() {
3876
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'buildPath');
3860
3877
  }
3861
- SubmitApplicationControl() {
3862
- console.log("application form: ", this.ApplicationFormGroup.value);
3863
- this.SaveApplication();
3878
+ get DevOpsActionLookups() {
3879
+ // console.log(this.DevOpsActions);
3880
+ return Object.keys(this.DevOpsActions || {});
3864
3881
  }
3865
- SaveApplication() {
3866
- const app = this.EditingApplication;
3867
- // console.log("APP=", app);
3868
- app.Application = {
3869
- Name: this.NameFormControl.value,
3870
- Description: this.DescriptionFormControl.value,
3871
- PriorityShift: this.EditingApplication?.Application?.PriorityShift || 0,
3872
- };
3873
- app.LookupConfig.PathRegex = `${this.RouteFormControl.value}.*`;
3874
- switch (app.Processor.Type) {
3875
- case 'DFS':
3876
- app.Processor.BaseHref = `${this.RouteFormControl.value}/`.replace('//', '/');
3877
- break;
3882
+ get DevOpsAction() {
3883
+ return this.Environment.DevOpsActions && this.DevOpsActionLookup
3884
+ ? this.Environment.DevOpsActions[this.DevOpsActionLookup] || {}
3885
+ : {};
3886
+ }
3887
+ get DevOpsActionLookup() {
3888
+ if (!!this.DevOpsActionLookupFormControl?.value) {
3889
+ return this.DevOpsActionLookupFormControl.value;
3878
3890
  }
3879
- if (!app.LookupConfig.PathRegex.startsWith('/')) {
3880
- app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
3891
+ if (!!this.EditingSourceControl?.DevOpsActionTriggerLookups) {
3892
+ return this.EditingSourceControl?.DevOpsActionTriggerLookups[0];
3881
3893
  }
3882
- const saveAppReq = {
3883
- ProjectLookup: this.ProjectLookup,
3884
- Application: app,
3885
- ApplicationLookup: this.ApplicationLookup,
3886
- };
3887
- console.log("processor details being submitted: ", app.Processor);
3888
- this.eacSvc.SaveApplicationAsCode(saveAppReq).then(res => {
3889
- this.SaveFormEvent.emit(res);
3890
- });
3891
- }
3892
- //HELPERS
3893
- setupApplicationForm() {
3894
- if (this.EditingApplication != null) {
3895
- this.ApplicationFormGroup = this.formBldr.group({
3896
- name: [this.EditingApplication.Application?.Name, Validators.required],
3897
- description: [
3898
- this.EditingApplication.Application?.Description,
3899
- Validators.required,
3900
- ],
3901
- route: [this.CurrentRoute ? this.CurrentRoute :
3902
- this.EditingApplication.LookupConfig?.PathRegex.replace('.*', '') ||
3903
- '/',
3904
- Validators.required,
3905
- ],
3906
- // priority: [
3907
- // this.EditingApplication.Application?.Priority || 10000,
3908
- // Validators.required,
3909
- // ],
3910
- });
3894
+ else {
3895
+ return null;
3911
3896
  }
3912
3897
  }
3913
- }
3914
- 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 });
3915
- 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"] }] });
3916
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationFormComponent, decorators: [{
3917
- type: Component,
3918
- 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"] }]
3919
- }], ctorParameters: function () { return [{ type: i1$2.FormBuilder }, { type: EaCService }]; }, propDecorators: { ApplicationLookup: [{
3920
- type: Input,
3921
- args: ['application-lookup']
3922
- }], CurrentRoute: [{
3923
- type: Input,
3924
- args: ['current-route']
3925
- }], EditingApplication: [{
3926
- type: Input,
3927
- args: ['editing-application']
3928
- }], HasSaveButton: [{
3929
- type: Input,
3930
- args: ['has-save-button']
3931
- }], ProjectLookup: [{
3932
- type: Input,
3933
- args: ['project-lookup']
3934
- }], SaveFormEvent: [{
3935
- type: Output,
3936
- args: ['save-form-event']
3937
- }] } });
3938
-
3939
- class ProcessorDetailsFormComponent {
3940
- constructor(appsFlowSvc, formBldr, eacSvc) {
3941
- this.appsFlowSvc = appsFlowSvc;
3942
- this.formBldr = formBldr;
3943
- this.eacSvc = eacSvc;
3944
- this.redirectTooltip = '';
3945
- this.HasSaveButton = true;
3946
- this.SaveFormEvent = new EventEmitter();
3947
- }
3948
- get APIRootFormControl() {
3949
- return this.ProcessorDetailsFormGroup?.controls.apiRoot;
3950
- }
3951
- get Environment() {
3952
- return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
3898
+ get DevOpsActionLookupFormControl() {
3899
+ return this.DevOpsSourceControlFormGroup.get('devOpsActionLookup');
3953
3900
  }
3954
- get BuildFormControl() {
3955
- return this.ProcessorDetailsFormGroup?.controls.build;
3901
+ get DevOpsActions() {
3902
+ return this.Environment.DevOpsActions || {};
3956
3903
  }
3957
- get BuildPathFormControl() {
3958
- return this.ProcessorDetailsFormGroup?.controls.buildPath;
3904
+ get EditingSourceControl() {
3905
+ let sc = this.Environment?.Sources
3906
+ ? this.Environment?.Sources[this.EditingSourceControlLookup]
3907
+ : null;
3908
+ if (sc == null && this.EditingSourceControlLookup) {
3909
+ sc = {};
3910
+ }
3911
+ return sc;
3959
3912
  }
3960
- get ClientIDFormControl() {
3961
- return this.ProcessorDetailsFormGroup?.controls.clientId;
3913
+ get MainBranchFormControl() {
3914
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'mainBranch');
3962
3915
  }
3963
- get ClientSecretFormControl() {
3964
- return this.ProcessorDetailsFormGroup?.controls.clientSecret;
3916
+ get OrganizationFormControl() {
3917
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'organization');
3965
3918
  }
3966
- get DefaultFileFormControl() {
3967
- return this.ProcessorDetailsFormGroup?.controls.defaultFile;
3919
+ get RepositoryFormControl() {
3920
+ return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'repository');
3968
3921
  }
3969
- get DefaultSourceControl() {
3970
- return {
3971
- Organization: this.EditingApplication?.LowCodeUnit?.Organization,
3972
- Repository: this.EditingApplication?.LowCodeUnit?.Repository,
3973
- };
3922
+ get State() {
3923
+ return this.eacSvc.State;
3974
3924
  }
3975
- get InboundPathFormControl() {
3976
- return this.ProcessorDetailsFormGroup?.controls.inboundPath;
3925
+ // Life Cycle
3926
+ ngAfterViewInit() { }
3927
+ ngOnDestroy() {
3928
+ this.destroyFormControls();
3977
3929
  }
3978
- get IncludeRequestFormControl() {
3979
- return this.ProcessorDetailsFormGroup?.controls.includeRequest;
3930
+ ngOnInit() {
3931
+ console.log("source control lookup", this.EditingSourceControlLookup);
3932
+ if (this.EditingSourceControlLookup === null) {
3933
+ this.CreateNewSourceControl();
3934
+ }
3935
+ console.log("source control", this.EditingSourceControl);
3936
+ if (this.EditingSourceControl != null) {
3937
+ this.DevOpsSourceControlFormGroup = this.formBuilder.group({});
3938
+ this.setupFormControls();
3939
+ }
3940
+ this.RefreshOrganizations();
3980
3941
  }
3981
- get MethodsFormControl() {
3982
- return this.ProcessorDetailsFormGroup?.controls.methods;
3942
+ // API Methods
3943
+ AddBranchOption(event) {
3944
+ this.addBranchOption(event.value);
3945
+ event.input.value = '';
3983
3946
  }
3984
- get PackageFormControl() {
3985
- return this.ProcessorDetailsFormGroup?.controls.package;
3947
+ BranchOptionSelected(event) {
3948
+ this.addBranchOption(event.option.value);
3986
3949
  }
3987
- get PermanentFormControl() {
3988
- return this.ProcessorDetailsFormGroup?.controls.permanent;
3950
+ BranchesChanged(branches) {
3951
+ this.loadProjectHostingDetails();
3989
3952
  }
3990
- get PreserveMethodFormControl() {
3991
- return this.ProcessorDetailsFormGroup?.controls.preserveMethod;
3953
+ BuildPathChanged(event) {
3954
+ //do something??
3992
3955
  }
3993
- get RedirectFormControl() {
3994
- return this.ProcessorDetailsFormGroup?.controls.redirect;
3956
+ CreateNewSourceControl() {
3957
+ this.SetEditingSourceControl(Guid.CreateRaw());
3995
3958
  }
3996
- get ScopesFormControl() {
3997
- return this.ProcessorDetailsFormGroup?.controls.scopes;
3959
+ CreateRepository() {
3960
+ this.CreatingRepository = true;
3961
+ this.RepositoryFormControl.reset();
3998
3962
  }
3999
- get SecurityFormControl() {
4000
- return this.ProcessorDetailsFormGroup?.controls.security;
3963
+ CancelCreateRepository() {
3964
+ this.CreatingRepository = false;
4001
3965
  }
4002
- get State() {
4003
- return this.eacSvc.State;
3966
+ DevOpsActionLookupChanged(event) {
3967
+ this.configureDevOpsAction();
4004
3968
  }
4005
- get SourceControls() {
4006
- return this.Environment?.Sources || {};
3969
+ MainBranchChanged(event) {
3970
+ this.emitBranchesChanged();
4007
3971
  }
4008
- get SourceControlFormControl() {
4009
- return this.ProcessorDetailsFormGroup?.controls.sourceControl;
3972
+ OrganizationChanged(event) {
3973
+ const org = this.OrganizationFormControl;
3974
+ this.RepositoryFormControl.reset();
3975
+ if (this.UseBranches) {
3976
+ this.BranchesFormControl.reset();
3977
+ this.SelectedBranches = [];
3978
+ }
3979
+ this.listRepositories();
4010
3980
  }
4011
- get SPARootFormControl() {
4012
- return this.ProcessorDetailsFormGroup?.controls.spaRoot;
3981
+ RefreshOrganizations() {
3982
+ // this.Loading = true;
3983
+ this.listOrganizations();
3984
+ this.OrganizationFormControl?.reset();
3985
+ this.RepositoryFormControl?.reset();
3986
+ if (this.UseBranches) {
3987
+ this.BranchesFormControl?.reset();
3988
+ }
4013
3989
  }
4014
- get TokenLookupFormControl() {
4015
- return this.ProcessorDetailsFormGroup?.controls.tokenLookup;
3990
+ RemoveBranchOption(option) {
3991
+ const index = this.SelectedBranches.indexOf(option);
3992
+ if (index >= 0) {
3993
+ this.SelectedBranches.splice(index, 1);
3994
+ }
3995
+ this.emitBranchesChanged();
4016
3996
  }
4017
- get ValidFormControls() {
4018
- let vfc = new Array();
4019
- for (const field in this.ProcessorDetailsFormGroup.controls) {
4020
- const control = this.ProcessorDetailsFormGroup.get(field);
4021
- if (control.valid) {
4022
- vfc.push(control);
4023
- }
3997
+ RepositoryChanged(event) {
3998
+ const repo = this.RepositoryFormControl;
3999
+ if (this.UseBranches) {
4000
+ this.BranchesFormControl.reset();
4001
+ this.SelectedBranches = [];
4002
+ this.listBranches();
4003
+ }
4004
+ if (!this.UseBranches) {
4005
+ this.listBuildPaths();
4024
4006
  }
4025
- // console.log("VFC=", vfc)
4026
- return vfc;
4027
4007
  }
4028
- get VersionFormControl() {
4029
- return this.ProcessorDetailsFormGroup?.controls.version;
4008
+ SaveRepository() {
4009
+ this.Loading = true;
4010
+ const org = this.OrganizationFormControl.value;
4011
+ const repoName = this.RepositoryFormControl.value;
4012
+ this.appsFlowSvc
4013
+ .CreateRepository(org, repoName)
4014
+ .subscribe((response) => {
4015
+ if (response.Status.Code === 0) {
4016
+ this.listRepositories(repoName);
4017
+ this.CreatingRepository = false;
4018
+ }
4019
+ else {
4020
+ // TODO: Need to surface an error to the user...
4021
+ this.Loading = false;
4022
+ }
4023
+ });
4030
4024
  }
4031
- get ZipFileFormControl() {
4032
- return this.ProcessorDetailsFormGroup?.controls.zipFile;
4025
+ SetEditingSourceControl(scLookup) {
4026
+ this.EditingSourceControlLookup = scLookup;
4033
4027
  }
4034
- ngOnInit() {
4035
- if (!this.EditingApplication) {
4036
- this.CreateNewApplication();
4037
- }
4038
- else {
4039
- this.setupProcessorDetailsForm();
4040
- }
4028
+ SubmitSourceControl() {
4029
+ console.log('source control submitted: ', this.DevOpsSourceControlFormGroup.value);
4030
+ this.SaveSourceControl();
4041
4031
  }
4042
- CreateNewApplication() {
4043
- this.SetEditingApplication(Guid.CreateRaw());
4032
+ SaveSourceControl() {
4033
+ const saveEnvReq = {
4034
+ Environment: {
4035
+ ...this.Environment,
4036
+ Sources: this.Environment.Sources || {},
4037
+ },
4038
+ EnvironmentLookup: this.EnvironmentLookup,
4039
+ EnterpriseDataTokens: {},
4040
+ };
4041
+ let source = {
4042
+ ...this.EditingSourceControl,
4043
+ Branches: this.SelectedBranches,
4044
+ MainBranch: this.MainBranchFormControl.value,
4045
+ };
4046
+ source = {
4047
+ ...source,
4048
+ Type: 'GitHub',
4049
+ Name: `@${this.OrganizationFormControl.value}/${this.RepositoryFormControl.value}`,
4050
+ DevOpsActionTriggerLookups: [this.DevOpsActionLookup],
4051
+ Organization: this.OrganizationFormControl.value,
4052
+ Repository: this.RepositoryFormControl.value,
4053
+ };
4054
+ const scLookup = `github://${source.Organization}/${source.Repository}`;
4055
+ saveEnvReq.Environment.Sources[scLookup] = source;
4056
+ console.log('save SC: ', saveEnvReq);
4057
+ let resp = this.eacSvc.SaveEnvironmentAsCode(saveEnvReq);
4058
+ resp.then((res) => {
4059
+ this.SaveStatusEvent.emit(res);
4060
+ });
4044
4061
  }
4045
- DetermineTooltipText() {
4046
- let permanentValue = this.PermanentFormControl.value;
4047
- let preserveValue = this.PreserveMethodFormControl.value;
4048
- if (permanentValue === true && preserveValue === false) {
4049
- this.redirectTooltip = '301 – Permanent and Not Preserve';
4050
- }
4051
- else if (permanentValue === false && preserveValue === false) {
4052
- this.redirectTooltip = '302 – Not Permanent and Not Preserve';
4062
+ // Helpers
4063
+ addBranchOption(value) {
4064
+ value = (value || '').trim();
4065
+ if (value && this.SelectedBranches.indexOf(value) < 0) {
4066
+ this.SelectedBranches.push(value);
4053
4067
  }
4054
- else if (permanentValue === false && preserveValue === true) {
4055
- this.redirectTooltip = '307 – Not Permanent and Preserve';
4068
+ this.BranchesInput.nativeElement.blur();
4069
+ this.emitBranchesChanged();
4070
+ }
4071
+ configureDevOpsAction() {
4072
+ setTimeout(() => {
4073
+ this.DevOpsActionLookupFormControl.setValue(this.DevOpsActionLookup);
4074
+ }, 0);
4075
+ }
4076
+ destroyFormControls() {
4077
+ this.DevOpsSourceControlFormGroup.removeControl([this.SourceControlRoot, 'mainBranch'].join(''));
4078
+ this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'branches'].join(''));
4079
+ this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'buildPath'].join(''));
4080
+ this.SelectedBranches = [];
4081
+ this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'organization'].join(''));
4082
+ this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'repository'].join(''));
4083
+ }
4084
+ emitBranchesChanged() {
4085
+ if (this.SelectedBranches?.length > 0 &&
4086
+ (!this.MainBranchFormControl.value ||
4087
+ this.SelectedBranches.indexOf(this.MainBranchFormControl.value) < 0)) {
4088
+ this.MainBranchFormControl.setValue(this.SelectedBranches.find((branch) => branch === 'main' || branch === 'master') || this.SelectedBranches[0]);
4056
4089
  }
4057
- else if (permanentValue === true && preserveValue === true) {
4058
- this.redirectTooltip = '308 – Permanent and Preserve';
4090
+ else if (this.SelectedBranches?.length <= 0) {
4091
+ this.MainBranchFormControl.reset();
4059
4092
  }
4093
+ this.BranchesFormControl.setValue(this.SelectedBranches.join(','));
4094
+ this.BranchesChanged(this.SelectedBranches || []);
4060
4095
  }
4061
- SaveProcessorDetails() {
4062
- const app = this.EditingApplication;
4063
- app.LookupConfig.AllowedMethods = this.MethodsFormControl?.value
4064
- ?.split(' ')
4065
- .filter((v) => !!v);
4066
- app.Processor.Type = this.ProcessorType;
4067
- switch (app.Processor.Type) {
4068
- case 'DFS':
4069
- app.Processor.DefaultFile =
4070
- this.DefaultFileFormControl.value || 'index.html';
4071
- app.LowCodeUnit = {
4072
- Type: this.LCUType,
4073
- };
4074
- switch (app.LowCodeUnit.Type) {
4075
- case 'GitHub':
4076
- app.LowCodeUnit.Organization =
4077
- this.SourceControls[this.SourceControlFormControl.value]?.Organization;
4078
- app.LowCodeUnit.Repository =
4079
- this.SourceControls[this.SourceControlFormControl.value]?.Repository;
4080
- app.LowCodeUnit.Build = this.BuildFormControl.value;
4081
- app.LowCodeUnit.Path = this.BuildPathFormControl.value;
4082
- app.LowCodeUnit.SourceControlLookup =
4083
- this.SourceControlFormControl.value;
4084
- break;
4085
- case 'NPM':
4086
- app.LowCodeUnit.Package = this.PackageFormControl.value;
4087
- app.LowCodeUnit.Version = this.VersionFormControl.value;
4088
- break;
4089
- case 'WordPress':
4090
- app.LowCodeUnit.APIRoot = this.APIRootFormControl.value;
4091
- break;
4092
- case 'Zip':
4093
- app.LowCodeUnit.ZipFile = this.ZipFileFormControl.value;
4094
- break;
4095
- }
4096
- break;
4097
- case 'OAuth':
4098
- app.Processor.Scopes = this.ScopesFormControl.value.split(' ');
4099
- app.Processor.TokenLookup = this.TokenLookupFormControl.value;
4100
- app.LowCodeUnit = {
4101
- Type: this.LCUType,
4102
- };
4103
- switch (app.LowCodeUnit.Type) {
4104
- case 'GitHubOAuth':
4105
- app.LowCodeUnit.ClientID = this.ClientIDFormControl.value;
4106
- app.LowCodeUnit.ClientSecret = this.ClientSecretFormControl.value;
4107
- break;
4096
+ listBranches() {
4097
+ if (this.UseBranches) {
4098
+ this.Loading = true;
4099
+ this.appsFlowSvc
4100
+ .ListBranches(this.OrganizationFormControl.value, this.RepositoryFormControl.value)
4101
+ .subscribe((response) => {
4102
+ this.BranchOptions = response.Model;
4103
+ this.Loading = false;
4104
+ if (this.EditingSourceControl?.Branches?.length > 0) {
4105
+ this.SelectedBranches = this.EditingSourceControl.Branches;
4108
4106
  }
4109
- break;
4110
- case 'Proxy':
4111
- app.Processor.InboundPath = this.InboundPathFormControl.value;
4112
- app.LowCodeUnit = {
4113
- Type: this.LCUType,
4114
- };
4115
- switch (app.LowCodeUnit.Type) {
4116
- case 'API':
4117
- app.LowCodeUnit.APIRoot = this.APIRootFormControl.value;
4118
- app.LowCodeUnit.Security = this.SecurityFormControl.value;
4119
- break;
4120
- case 'SPA':
4121
- app.LowCodeUnit.SPARoot = this.SPARootFormControl.value;
4122
- break;
4107
+ else if (this.BranchOptions?.length === 1) {
4108
+ this.BranchesFormControl.setValue(this.BranchOptions[0].Name);
4109
+ this.SelectedBranches = [this.BranchOptions[0].Name];
4123
4110
  }
4124
- break;
4125
- case 'Redirect':
4126
- app.Processor.IncludeRequest = !!this.IncludeRequestFormControl.value;
4127
- app.Processor.Permanent = !!this.PermanentFormControl.value;
4128
- app.Processor.PreserveMethod = !!this.PreserveMethodFormControl.value;
4129
- app.Processor.Redirect = this.RedirectFormControl.value;
4130
- break;
4131
- }
4132
- if (!app.LookupConfig.PathRegex.startsWith('/')) {
4133
- app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
4111
+ this.emitBranchesChanged();
4112
+ this.listBuildPaths();
4113
+ });
4134
4114
  }
4135
- const saveAppReq = {
4136
- ProjectLookup: this.ProjectLookup,
4137
- Application: app,
4138
- ApplicationLookup: this.EditingApplicationLookup || Guid.CreateRaw(),
4139
- };
4140
- this.eacSvc.SaveApplicationAsCode(saveAppReq).then((res) => {
4141
- this.SaveFormEvent.emit(res);
4142
- });
4143
- }
4144
- SetEditingApplication(appLookup) {
4145
- this.EditingApplication = new EaCApplicationAsCode();
4146
- this.EditingApplicationLookup = appLookup;
4147
- this.setupProcessorDetailsForm();
4148
4115
  }
4149
- SourceControlChanged(event) {
4150
- this.listBuildPaths();
4116
+ listBuildPaths() {
4117
+ if (this.UseBuildPath) {
4118
+ this.Loading = true;
4119
+ this.appsFlowSvc
4120
+ .ListBuildPaths(this.OrganizationFormControl.value, this.RepositoryFormControl.value)
4121
+ .subscribe((response) => {
4122
+ this.BuildPathOptions = response.Model;
4123
+ this.Loading = false;
4124
+ if (this.BuildPathOptions?.length === 1) {
4125
+ this.BuildPathFormControl.setValue(this.BuildPathOptions[0]);
4126
+ }
4127
+ });
4128
+ }
4151
4129
  }
4152
- ProcessorTypeChanged(event) {
4153
- this.ProcessorType = event.value;
4154
- this.setupProcessorTypeSubForm();
4155
- }
4156
- LCUTypeChanged(event) {
4157
- this.LCUType = event.value;
4158
- this.setupLcuTypeSubForm();
4159
- }
4160
- //HELPERS
4161
- cleanupLcuTypeSubForm() {
4162
- this.ProcessorDetailsFormGroup.removeControl('methods');
4163
- this.ProcessorDetailsFormGroup.removeControl('apiRoot');
4164
- this.ProcessorDetailsFormGroup.removeControl('security');
4165
- this.ProcessorDetailsFormGroup.removeControl('spaRoot');
4166
- this.ProcessorDetailsFormGroup.removeControl('applicationId');
4167
- this.ProcessorDetailsFormGroup.removeControl('sourceControl');
4168
- this.ProcessorDetailsFormGroup.removeControl('build');
4169
- this.ProcessorDetailsFormGroup.removeControl('clientId');
4170
- this.ProcessorDetailsFormGroup.removeControl('clientSecret');
4171
- this.ProcessorDetailsFormGroup.removeControl('package');
4172
- this.ProcessorDetailsFormGroup.removeControl('version');
4173
- this.ProcessorDetailsFormGroup.removeControl('zipFile');
4174
- }
4175
- cleanupProcessorTypeSubForm() {
4176
- this.ProcessorDetailsFormGroup.removeControl('defaultFile');
4177
- // this.ApplicationFormGroup.removeControl('dfsLcuType');
4178
- // this.ApplicationFormGroup.removeControl('oauthLcuType');
4179
- this.ProcessorDetailsFormGroup.removeControl('scopes');
4180
- this.ProcessorDetailsFormGroup.removeControl('tokenLookup');
4181
- this.ProcessorDetailsFormGroup.removeControl('inboundPath');
4182
- this.ProcessorDetailsFormGroup.removeControl('proxyLcuType');
4183
- this.ProcessorDetailsFormGroup.removeControl('includeRequest');
4184
- this.ProcessorDetailsFormGroup.removeControl('redirect');
4185
- this.ProcessorDetailsFormGroup.removeControl('permanent');
4186
- this.ProcessorDetailsFormGroup.removeControl('preserveMethod');
4187
- this.cleanupLcuTypeSubForm();
4188
- }
4189
- listBuildPaths() {
4190
- this.State.Loading = true;
4191
- console.log("Source Control: ", this.SourceControls[this.SourceControlFormControl.value]);
4130
+ listOrganizations() {
4131
+ this.Loading = true;
4192
4132
  this.appsFlowSvc
4193
- .ListBuildPaths(this.SourceControls[this.SourceControlFormControl.value]?.Organization, this.SourceControls[this.SourceControlFormControl.value]?.Repository)
4133
+ .ListOrganizations()
4194
4134
  .subscribe((response) => {
4195
- this.BuildPathOptions = response.Model;
4196
- console.log("build path options: ", this.BuildPathOptions);
4197
- this.State.Loading = false;
4198
- // if (this.BuildPathOptions?.length === 1) {
4199
- // this.BuildPathFormControl.setValue(this.BuildPathOptions[0]);
4200
- // }
4201
- });
4202
- }
4203
- setupLcuTypeSubForm() {
4204
- this.cleanupLcuTypeSubForm();
4205
- if (this.LCUType) {
4206
- switch (this.LCUType) {
4207
- case 'API':
4208
- this.setupLCUAPIForm();
4209
- break;
4210
- case 'ApplicationPointer':
4211
- this.setupLCUApplicationPointerForm();
4212
- break;
4213
- case 'GitHub':
4214
- this.setupLCUGitHubForm();
4215
- break;
4216
- case 'GitHubOAuth':
4217
- this.setupLCUGitHubOAuthForm();
4218
- break;
4219
- case 'WordPress':
4220
- this.setupLCUWordPressForm();
4221
- break;
4222
- // case 'NPM':
4223
- // this.setupLCUNPMForm();
4224
- // break;
4225
- case 'SPA':
4226
- this.setupLCUSPAForm();
4227
- break;
4228
- case 'Zip':
4229
- this.setupLCUZipForm();
4230
- break;
4231
- }
4232
- }
4233
- }
4234
- setupProcessorDetailsForm() {
4235
- this.ProcessorType = this.EditingApplication?.Processor?.Type || '';
4236
- // console.log('EDITING APP = ', this.EditingApplication);
4237
- if (this.EditingApplication != null) {
4238
- this.ProcessorDetailsFormGroup = this.formBldr.group({
4239
- procType: [this.ProcessorType, [Validators.required]],
4240
- });
4241
- // this.setupDfsForm();
4242
- // this.setupLcuTypeSubForm();
4243
- this.setupProcessorTypeSubForm();
4244
- }
4245
- }
4246
- setupLCUGitHubForm() {
4247
- console.log('EditingApplication: ', this.EditingApplication);
4248
- this.ProcessorDetailsFormGroup.addControl('sourceControl', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SourceControlLookup || '', [Validators.required]));
4249
- this.ProcessorDetailsFormGroup.addControl('buildPath', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Path || '', [
4250
- Validators.required,
4251
- ]));
4252
- this.ProcessorDetailsFormGroup.addControl('build', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Build || 'latest', [Validators.required]));
4253
- this.listBuildPaths();
4254
- }
4255
- setupLCUApplicationPointerForm() {
4256
- this.ProcessorDetailsFormGroup.addControl('applicationId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ApplicationID || '', [Validators.required]));
4257
- }
4258
- setupLCUSPAForm() {
4259
- this.ProcessorDetailsFormGroup.addControl('spaRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SPARoot || '', [Validators.required]));
4260
- }
4261
- setupLCUAPIForm() {
4262
- this.ProcessorDetailsFormGroup.addControl('methods', this.formBldr.control(this.EditingApplication.LookupConfig?.AllowedMethods?.join(' ') || '', []));
4263
- this.ProcessorDetailsFormGroup.addControl('apiRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.APIRoot || '', [Validators.required]));
4264
- this.ProcessorDetailsFormGroup.addControl('security', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Security || '', [Validators.required]));
4265
- }
4266
- setupLCUGitHubOAuthForm() {
4267
- this.ProcessorDetailsFormGroup.addControl('clientId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientID || '', [Validators.required]));
4268
- this.ProcessorDetailsFormGroup.addControl('clientSecret', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientSecret || '', [Validators.required]));
4269
- }
4270
- setupLCUWordPressForm() {
4271
- this.ProcessorDetailsFormGroup.addControl('apiRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.APIRoot || '', [Validators.required]));
4272
- }
4273
- setupProxyForm() {
4274
- this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4275
- this.ProcessorDetailsFormGroup.addControl('inboundPath', this.formBldr.control(this.EditingApplication.Processor?.InboundPath || '', [Validators.required]));
4276
- this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
4277
- }
4278
- setupRedirectForm() {
4279
- this.ProcessorDetailsFormGroup.addControl('redirect', this.formBldr.control(this.EditingApplication.Processor?.Redirect || '', [
4280
- Validators.required,
4281
- ]));
4282
- this.ProcessorDetailsFormGroup.addControl('permanent', this.formBldr.control(this.EditingApplication.Processor?.Permanent || false, []));
4283
- this.ProcessorDetailsFormGroup.addControl('preserveMethod', this.formBldr.control(this.EditingApplication.Processor?.PreserveMethod || false, []));
4284
- this.ProcessorDetailsFormGroup.addControl('includeRequest', this.formBldr.control(this.EditingApplication.Processor?.IncludeRequest || false, []));
4285
- this.DetermineTooltipText();
4286
- }
4287
- setupOAuthForm() {
4288
- this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4289
- this.ProcessorDetailsFormGroup.addControl('scopes', this.formBldr.control(this.EditingApplication.Processor?.Scopes?.Join(' ') || '', [Validators.required]));
4290
- this.ProcessorDetailsFormGroup.addControl('tokenLookup', this.formBldr.control(this.EditingApplication.Processor?.TokenLookup || '', [Validators.required]));
4291
- this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
4292
- }
4293
- setupLCUZipForm() {
4294
- this.ProcessorDetailsFormGroup.addControl('zipFile', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ZipFile || '', [Validators.required]));
4295
- }
4296
- setupDfsForm() {
4297
- this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4298
- this.ProcessorDetailsFormGroup.addControl('defaultFile', this.formBldr.control(this.EditingApplication.Processor?.DefaultFile || 'index.html', [Validators.required]));
4299
- this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
4300
- }
4301
- setupProcessorTypeSubForm() {
4302
- this.cleanupProcessorTypeSubForm();
4303
- if (this.ProcessorType) {
4304
- switch (this.ProcessorType) {
4305
- case 'DFS':
4306
- this.setupDfsForm();
4307
- break;
4308
- case 'OAuth':
4309
- this.setupOAuthForm();
4310
- break;
4311
- case 'Proxy':
4312
- this.setupProxyForm();
4313
- break;
4314
- case 'Redirect':
4315
- this.setupRedirectForm();
4316
- break;
4135
+ this.OrganizationOptions = response.Model;
4136
+ console.log("Organization Options: ", this.OrganizationOptions);
4137
+ this.Loading = false;
4138
+ if (this.EditingSourceControl?.Organization) {
4139
+ setTimeout(() => {
4140
+ this.OrganizationFormControl.setValue(this.EditingSourceControl.Organization);
4141
+ this.listRepositories(this.EditingSourceControl?.Repository);
4142
+ }, 0);
4317
4143
  }
4318
- }
4319
- this.setupLcuTypeSubForm();
4320
- }
4321
- }
4322
- 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 });
4323
- 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"] }] });
4324
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ProcessorDetailsFormComponent, decorators: [{
4325
- type: Component,
4326
- 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"] }]
4327
- }], ctorParameters: function () { return [{ type: ApplicationsFlowService }, { type: i1$2.FormBuilder }, { type: EaCService }]; }, propDecorators: { EditingApplication: [{
4328
- type: Input,
4329
- args: ['editing-application']
4330
- }], EditingApplicationLookup: [{
4331
- type: Input,
4332
- args: ['editing-application-lookup']
4333
- }], HasSaveButton: [{
4334
- type: Input,
4335
- args: ['has-save-button']
4336
- }], SourceControlLookups: [{
4337
- type: Input,
4338
- args: ['source-control-lookups']
4339
- }], ProjectLookup: [{
4340
- type: Input,
4341
- args: ['project-lookup']
4342
- }], SaveFormEvent: [{
4343
- type: Output,
4344
- args: ['save-form-event']
4345
- }] } });
4346
-
4347
- class NewApplicationDialogComponent {
4348
- constructor(eacSvc, dialogRef, data, snackBar) {
4349
- this.eacSvc = eacSvc;
4350
- this.dialogRef = dialogRef;
4351
- this.data = data;
4352
- this.snackBar = snackBar;
4353
- this.HasSaveButton = false;
4354
- }
4355
- get Environment() {
4356
- return this.State?.EaC?.Environments[this.data.environmentLookup];
4357
- }
4358
- get SourceControls() {
4359
- return this.Environment?.Sources || {};
4360
- }
4361
- get SourceControlLookups() {
4362
- return Object.keys(this.Environment.Sources || {});
4363
- }
4364
- get State() {
4365
- return this.eacSvc.State;
4366
- }
4367
- ngOnInit() {
4368
- this.SetupApplication(Guid.CreateRaw());
4369
- }
4370
- CloseDialog() {
4371
- this.dialogRef.close();
4372
- }
4373
- SetupApplication(appLookup) {
4374
- this.NewApplication = new EaCApplicationAsCode;
4375
- this.NewApplicationLookup = appLookup;
4144
+ });
4376
4145
  }
4377
- SaveApplication() {
4378
- const app = {
4379
- Application: {
4380
- Name: this.ApplicationFormControls.NameFormControl.value,
4381
- Description: this.ApplicationFormControls.DescriptionFormControl.value,
4382
- PriorityShift: 0,
4383
- },
4384
- AccessRightLookups: [],
4385
- DataTokens: {},
4386
- LicenseConfigurationLookups: [],
4387
- LookupConfig: {
4388
- IsPrivate: false,
4389
- IsTriggerSignIn: false,
4390
- PathRegex: `${this.ApplicationFormControls.RouteFormControl.value}.*`,
4391
- QueryRegex: '',
4392
- HeaderRegex: '',
4393
- AllowedMethods: this.ProcessorDetailsFormControls.MethodsFormControl?.value
4394
- ?.split(' ')
4395
- .filter((v) => !!v),
4396
- },
4397
- Processor: {
4398
- Type: this.ProcessorDetailsFormControls.ProcessorType,
4399
- },
4400
- };
4401
- switch (app.Processor.Type) {
4402
- case 'DFS':
4403
- app.Processor.BaseHref = `${this.ApplicationFormControls.RouteFormControl.value}/`.replace('//', '/');
4404
- app.Processor.DefaultFile =
4405
- this.ProcessorDetailsFormControls.DefaultFileFormControl.value || 'index.html';
4406
- app.LowCodeUnit = {
4407
- Type: this.ProcessorDetailsFormControls.LCUType,
4408
- };
4409
- switch (app.LowCodeUnit.Type) {
4410
- case 'GitHub':
4411
- app.LowCodeUnit.Organization =
4412
- this.SourceControls[this.ProcessorDetailsFormControls.SourceControlFormControl.value].Organization;
4413
- app.LowCodeUnit.Repository =
4414
- this.SourceControls[this.ProcessorDetailsFormControls.SourceControlFormControl.value].Repository;
4415
- app.LowCodeUnit.Build = this.ProcessorDetailsFormControls.BuildFormControl.value;
4416
- app.LowCodeUnit.Path =
4417
- this.ProcessorDetailsFormControls.BuildPathFormControl.value;
4418
- break;
4419
- case 'NPM':
4420
- app.LowCodeUnit.Package = this.ProcessorDetailsFormControls.PackageFormControl.value;
4421
- app.LowCodeUnit.Version = this.ProcessorDetailsFormControls.VersionFormControl.value;
4422
- break;
4423
- case 'Zip':
4424
- app.LowCodeUnit.ZipFile = this.ProcessorDetailsFormControls.ZipFileFormControl.value;
4425
- break;
4426
- }
4427
- break;
4428
- case 'OAuth':
4429
- app.Processor.Scopes = this.ProcessorDetailsFormControls.ScopesFormControl.value.split(' ');
4430
- app.Processor.TokenLookup = this.ProcessorDetailsFormControls.TokenLookupFormControl.value;
4431
- app.LowCodeUnit = {
4432
- Type: this.ProcessorDetailsFormControls.LCUType,
4433
- };
4434
- switch (app.LowCodeUnit.Type) {
4435
- case 'GitHubOAuth':
4436
- app.LowCodeUnit.ClientID = this.ProcessorDetailsFormControls.ClientIDFormControl.value;
4437
- app.LowCodeUnit.ClientSecret = this.ProcessorDetailsFormControls.ClientSecretFormControl.value;
4438
- break;
4439
- }
4440
- break;
4441
- case 'Proxy':
4442
- app.Processor.InboundPath = this.ProcessorDetailsFormControls.InboundPathFormControl.value;
4443
- app.LowCodeUnit = {
4444
- Type: this.ProcessorDetailsFormControls.LCUType,
4445
- };
4446
- switch (app.LowCodeUnit.Type) {
4447
- case 'API':
4448
- app.LowCodeUnit.APIRoot = this.ProcessorDetailsFormControls.APIRootFormControl.value;
4449
- app.LowCodeUnit.Security = this.ProcessorDetailsFormControls.SecurityFormControl.value;
4450
- break;
4451
- case 'SPA':
4452
- app.LowCodeUnit.SPARoot = this.ProcessorDetailsFormControls.SPARootFormControl.value;
4453
- break;
4454
- }
4455
- break;
4456
- case 'Redirect':
4457
- app.Processor.Permanent = !!this.ProcessorDetailsFormControls.PermanentFormControl.value;
4458
- app.Processor.PreserveMethod = !!this.ProcessorDetailsFormControls.PreserveMethodFormControl.value;
4459
- app.Processor.Redirect = this.ProcessorDetailsFormControls.RedirectFormControl.value;
4460
- break;
4461
- }
4462
- if (!app.LookupConfig.PathRegex.startsWith('/')) {
4463
- app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
4464
- }
4465
- const saveAppReq = {
4466
- ProjectLookup: this.data.projectLookup,
4467
- Application: app,
4468
- ApplicationLookup: this.NewApplicationLookup,
4469
- };
4470
- // this.HasBuildFormControl.value && taken out from below if statement
4471
- if (this.ProcessorDetailsFormControls.ProcessorType !== 'redirect' && this.ProcessorDetailsFormControls.LCUType === 'GitHub') {
4472
- if (app) {
4473
- app.LowCodeUnit.SourceControlLookup = this.ProcessorDetailsFormControls.SourceControlFormControl.value;
4146
+ listRepositories(activeRepo = null) {
4147
+ this.Loading = true;
4148
+ this.appsFlowSvc
4149
+ .ListRepositories(this.OrganizationFormControl.value)
4150
+ .subscribe((response) => {
4151
+ this.RepositoryOptions = response.Model;
4152
+ this.Loading = false;
4153
+ if (activeRepo) {
4154
+ setTimeout(() => {
4155
+ this.RepositoryFormControl.setValue(activeRepo);
4156
+ this.listBranches();
4157
+ if (!this.UseBranches) {
4158
+ this.listBuildPaths();
4159
+ }
4160
+ }, 0);
4161
+ }
4162
+ else if (this.RepositoryOptions?.length <= 0) {
4163
+ this.CreatingRepository = true;
4474
4164
  }
4475
- }
4476
- else if (app) {
4477
- app.LowCodeUnit.SourceControlLookup = null;
4478
- }
4479
- // console.log("Save new App request: ", saveAppReq);
4480
- this.eacSvc.SaveApplicationAsCode(saveAppReq).then(res => {
4481
- this.handleSaveStatus(res);
4482
4165
  });
4483
4166
  }
4484
- handleSaveStatus(status) {
4485
- console.log("event to save: ", status);
4486
- if (status.Code === 0) {
4487
- this.snackBar.open("Application Succesfully Created", "Dismiss", {
4488
- duration: 5000
4167
+ loadProjectHostingDetails() {
4168
+ if (this.SelectedBranches?.length > 0) {
4169
+ this.HostingDetails.Loading = true;
4170
+ this.appsFlowSvc
4171
+ .LoadProjectHostingDetails()
4172
+ .subscribe((response) => {
4173
+ this.HostingDetails = response.Model;
4174
+ this.HostingDetails.Loading = false;
4175
+ this.configureDevOpsAction();
4176
+ }, (err) => {
4177
+ this.HostingDetails.Loading = false;
4489
4178
  });
4490
- this.CloseDialog();
4491
4179
  }
4492
- else {
4493
- this.ErrorMessage = status.Message;
4180
+ }
4181
+ setupFormControls() {
4182
+ this.destroyFormControls();
4183
+ console.log("Source Control: ", this.EditingSourceControl);
4184
+ this.DevOpsSourceControlFormGroup.addControl('devOpsActionLookup', new FormControl(this.DevOpsActionLookup || '', []));
4185
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'organization'].join(''), new FormControl(this.EditingSourceControl.Organization ?? '', Validators.required));
4186
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'repository'].join(''), new FormControl(this.EditingSourceControl.Repository ?? '', Validators.required));
4187
+ if (this.UseBranches) {
4188
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'branches'].join(''), new FormControl(this.EditingSourceControl?.Branches ?? '', Validators.required));
4189
+ this.SelectedBranches = this.EditingSourceControl?.Branches;
4190
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'mainBranch'].join(''), new FormControl(this.EditingSourceControl.MainBranch ?? '', Validators.required));
4191
+ }
4192
+ if (this.UseBuildPath) {
4193
+ this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'buildPath'].join(''), new FormControl(this.BuildPath ?? '', Validators.required));
4494
4194
  }
4495
4195
  }
4496
4196
  }
4497
- 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 });
4498
- 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"] }] });
4499
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: NewApplicationDialogComponent, decorators: [{
4197
+ 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 });
4198
+ 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"] }] });
4199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DevopsSourceControlFormComponent, decorators: [{
4500
4200
  type: Component,
4501
- 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: [""] }]
4502
- }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialogRef }, { type: undefined, decorators: [{
4503
- type: Inject,
4504
- args: [MAT_DIALOG_DATA]
4505
- }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { ApplicationFormControls: [{
4506
- type: ViewChild,
4507
- args: [EditApplicationFormComponent]
4508
- }], ProcessorDetailsFormControls: [{
4201
+ 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"] }]
4202
+ }], ctorParameters: function () { return [{ type: ApplicationsFlowService }, { type: EaCService }, { type: i1$2.FormBuilder }]; }, propDecorators: { EditingSourceControlLookup: [{
4203
+ type: Input,
4204
+ args: ['editing-source-control-lookup']
4205
+ }], Environment: [{
4206
+ type: Input,
4207
+ args: ['environment']
4208
+ }], EnvironmentLookup: [{
4209
+ type: Input,
4210
+ args: ['environment-lookup']
4211
+ }], SaveStatusEvent: [{
4212
+ type: Output,
4213
+ args: ['save-status-event']
4214
+ }], BranchesInput: [{
4509
4215
  type: ViewChild,
4510
- args: [ProcessorDetailsFormComponent]
4216
+ args: ['branches']
4511
4217
  }] } });
4512
4218
 
4513
- class GhControlComponent {
4514
- constructor(eacSvc, dialog) {
4219
+ class SourceControlDialogComponent {
4220
+ constructor(dialogRef, eacSvc, data, snackBar) {
4221
+ this.dialogRef = dialogRef;
4515
4222
  this.eacSvc = eacSvc;
4516
- this.dialog = dialog;
4517
- this.InputLabel = "Create Pull Request";
4518
- this.SkeletonEffect = "wave";
4519
- this.selectedBtn = "pr-btn";
4223
+ this.data = data;
4224
+ this.snackBar = snackBar;
4520
4225
  }
4521
- get ActiveEnvironmentLookup() {
4522
- // TODO: Eventually support multiple environments
4523
- const envLookups = Object.keys(this.State?.EaC?.Environments || {});
4524
- return envLookups[0];
4226
+ get DevOpsSourceControlFormGroup() {
4227
+ return this.DevopsSourceControl?.DevOpsSourceControlFormGroup;
4228
+ }
4229
+ get HasConnection() {
4230
+ return this.State.GitHub.HasConnection;
4525
4231
  }
4526
4232
  get State() {
4527
4233
  return this.eacSvc.State;
4528
4234
  }
4529
4235
  ngOnInit() {
4530
4236
  }
4531
- ngAfterViewInit() {
4532
- this.addSelectBtn();
4533
- }
4534
- CreateFeatureBranch() {
4535
- this.removeSelectedBtn();
4536
- this.InputLabel = "Create Feature Branch";
4537
- this.selectedBtn = "fb-btn";
4538
- this.addSelectBtn();
4539
- console.log("create feature branch selected");
4540
- }
4541
- OpenIssue() {
4542
- this.removeSelectedBtn();
4543
- this.InputLabel = "Open Issue";
4544
- this.selectedBtn = "oi-btn";
4545
- this.addSelectBtn();
4546
- console.log("open issue selected");
4547
- }
4548
- CreatePullRequest() {
4549
- this.removeSelectedBtn();
4550
- this.InputLabel = "Create Pull Request";
4551
- this.selectedBtn = "pr-btn";
4552
- this.addSelectBtn();
4553
- console.log("create pull request selected");
4554
- }
4555
- CreateNewApp() {
4556
- const dialogRef = this.dialog.open(NewApplicationDialogComponent, {
4557
- width: '600px',
4558
- data: {
4559
- environmentLookup: this.ActiveEnvironmentLookup,
4560
- },
4561
- });
4562
- dialogRef.afterClosed().subscribe((result) => {
4563
- // console.log('The dialog was closed');
4564
- // console.log("result:", result)
4565
- });
4566
- }
4567
- RouteToPath(path) {
4568
- window.location.href = path;
4237
+ CloseDialog() {
4238
+ this.dialogRef.close();
4569
4239
  }
4570
- Submit() {
4571
- console.log("submitting: ", this.value);
4572
- switch (this.selectedBtn) {
4573
- case "pr-btn":
4574
- //Pull request
4575
- console.log("creating pull request: ", this.value);
4576
- break;
4577
- case "oi-btn":
4578
- //Open Issue
4579
- console.log("Open issue: ", this.value);
4580
- break;
4581
- case "fb-btn":
4582
- //Feature Branch
4583
- console.log("creating feature branch: ", this.value);
4584
- break;
4585
- default:
4586
- console.log("hmm");
4587
- break;
4240
+ HandleSaveStatusEvent(event) {
4241
+ console.log("event to save: ", event);
4242
+ if (event.Code === 0) {
4243
+ this.snackBar.open("Source Control Succesfully Saved", "Dismiss", {
4244
+ duration: 5000
4245
+ });
4246
+ this.CloseDialog();
4247
+ }
4248
+ else {
4249
+ this.ErrorMessage = event.Message;
4588
4250
  }
4589
4251
  }
4590
- //HELPERS
4591
- addSelectBtn() {
4592
- // (<HTMLElement>document.getElementById(this.selectedBtn)).classList.add('selected');
4593
- }
4594
- removeSelectedBtn() {
4595
- // (<HTMLElement>document.getElementById(this.selectedBtn)).classList.remove('selected');
4252
+ SaveSourceControl() {
4253
+ this.DevopsSourceControl.SaveSourceControl();
4596
4254
  }
4597
4255
  }
4598
- 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 });
4599
- 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"] }] });
4600
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: GhControlComponent, decorators: [{
4256
+ 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 });
4257
+ 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"] }] });
4258
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SourceControlDialogComponent, decorators: [{
4601
4259
  type: Component,
4602
- 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"] }]
4603
- }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialog }]; } });
4260
+ 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"] }]
4261
+ }], ctorParameters: function () { return [{ type: i2$3.MatDialogRef }, { type: EaCService }, { type: undefined, decorators: [{
4262
+ type: Inject,
4263
+ args: [MAT_DIALOG_DATA]
4264
+ }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { DevopsSourceControl: [{
4265
+ type: ViewChild,
4266
+ args: [DevopsSourceControlFormComponent]
4267
+ }] } });
4604
4268
 
4605
- class DevopsSourceControlFormComponent {
4606
- // Constructors
4607
- constructor(appsFlowSvc, eacSvc, formBuilder) {
4608
- this.appsFlowSvc = appsFlowSvc;
4269
+ class MainFeedCardComponent {
4270
+ constructor(eacSvc, dialog, sanitizer) {
4609
4271
  this.eacSvc = eacSvc;
4610
- this.formBuilder = formBuilder;
4611
- this.SeparatorKeysCodes = [ENTER, COMMA];
4612
- this.SaveStatusEvent = new EventEmitter();
4613
- this.BuildPath = null;
4614
- this.HostingDetails = new ProjectHostingDetails();
4615
- this.SelectedBranches = [];
4616
- this.SourceControlRoot = '';
4617
- this.SkeletonEffect = "wave";
4618
- this.UseBranches = true;
4619
- this.UseBuildPath = false;
4620
- }
4621
- // Properties
4622
- get ArtifactLookups() {
4623
- return this.DevOpsAction?.ArtifactLookups;
4624
- }
4625
- get ArtifactLookup() {
4626
- const artLookup = this.DevOpsAction?.ArtifactLookups
4627
- ? this.DevOpsAction?.ArtifactLookups[0]
4628
- : null;
4629
- return artLookup;
4630
- }
4631
- get Artifact() {
4632
- return this.Environment?.Artifacts && this.ArtifactLookup
4633
- ? this.Environment?.Artifacts[this.ArtifactLookup] || {}
4634
- : {};
4635
- }
4636
- get BranchesFormControl() {
4637
- return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'branches');
4272
+ this.dialog = dialog;
4273
+ this.sanitizer = sanitizer;
4638
4274
  }
4639
- get BuildPathFormControl() {
4640
- return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'buildPath');
4275
+ get ActiveEnvironment() {
4276
+ return this.State?.EaC?.Environments[this.ActiveEnvironmentLookup];
4641
4277
  }
4642
- get DevOpsActionLookups() {
4643
- // console.log(this.DevOpsActions);
4644
- return Object.keys(this.DevOpsActions || {});
4278
+ get ActiveEnvironmentLookup() {
4279
+ // TODO: Eventually support multiple environments
4280
+ const envLookups = Object.keys(this.State?.EaC?.Environments || {});
4281
+ return envLookups[0];
4645
4282
  }
4646
- get DevOpsAction() {
4647
- return this.Environment.DevOpsActions && this.DevOpsActionLookup
4648
- ? this.Environment.DevOpsActions[this.DevOpsActionLookup] || {}
4649
- : {};
4283
+ get Environment() {
4284
+ // console.log("Ent Environment var: ", this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment]);
4285
+ return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
4650
4286
  }
4651
- get DevOpsActionLookup() {
4652
- if (!!this.DevOpsActionLookupFormControl?.value) {
4653
- return this.DevOpsActionLookupFormControl.value;
4287
+ get Icon() {
4288
+ if (this.FeedItem.Status.Code === 0) {
4289
+ return 'check_circle';
4654
4290
  }
4655
- if (!!this.EditingSourceControl?.DevOpsActionTriggerLookups) {
4656
- return this.EditingSourceControl?.DevOpsActionTriggerLookups[0];
4291
+ else if (this.FeedItem.Status.Code === 1) {
4292
+ return 'cancel';
4293
+ }
4294
+ else if (this.FeedItem.Status.Code === 2) {
4295
+ return 'sync';
4657
4296
  }
4658
4297
  else {
4659
- return null;
4298
+ return 'help_outline';
4660
4299
  }
4661
4300
  }
4662
- get DevOpsActionLookupFormControl() {
4663
- return this.DevOpsSourceControlFormGroup.get('devOpsActionLookup');
4664
- }
4665
- get DevOpsActions() {
4666
- return this.Environment.DevOpsActions || {};
4667
- }
4668
- get EditingSourceControl() {
4669
- let sc = this.Environment?.Sources
4670
- ? this.Environment?.Sources[this.EditingSourceControlLookup]
4671
- : null;
4672
- if (sc == null && this.EditingSourceControlLookup) {
4673
- sc = {};
4301
+ get IconColor() {
4302
+ if (this.FeedItem.Status.Code === 0) {
4303
+ return 'green';
4304
+ }
4305
+ else if (this.FeedItem.Status.Code === 1) {
4306
+ return 'red';
4307
+ }
4308
+ else if (this.FeedItem.Status.Code === 2) {
4309
+ return 'blue';
4310
+ }
4311
+ else {
4312
+ return 'gray';
4674
4313
  }
4675
- return sc;
4676
- }
4677
- get MainBranchFormControl() {
4678
- return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'mainBranch');
4679
- }
4680
- get OrganizationFormControl() {
4681
- return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'organization');
4682
- }
4683
- get RepositoryFormControl() {
4684
- return this.DevOpsSourceControlFormGroup.get(this.SourceControlRoot + 'repository');
4685
4314
  }
4686
4315
  get State() {
4687
4316
  return this.eacSvc.State;
4688
4317
  }
4689
4318
  // Life Cycle
4690
- ngAfterViewInit() { }
4691
- ngOnDestroy() {
4692
- this.destroyFormControls();
4693
- }
4694
4319
  ngOnInit() {
4695
- console.log("source control lookup", this.EditingSourceControlLookup);
4696
- if (this.EditingSourceControlLookup === null) {
4697
- this.CreateNewSourceControl();
4698
- }
4699
- console.log("source control", this.EditingSourceControl);
4700
- if (this.EditingSourceControl != null) {
4701
- this.DevOpsSourceControlFormGroup = this.formBuilder.group({});
4702
- this.setupFormControls();
4703
- }
4704
- this.RefreshOrganizations();
4320
+ this.handleRefresh();
4705
4321
  }
4706
4322
  // API Methods
4707
- AddBranchOption(event) {
4708
- this.addBranchOption(event.value);
4709
- event.input.value = '';
4710
- }
4711
- BranchOptionSelected(event) {
4712
- this.addBranchOption(event.option.value);
4713
- }
4714
- BranchesChanged(branches) {
4715
- this.loadProjectHostingDetails();
4716
- }
4717
- BuildPathChanged(event) {
4718
- //do something??
4719
- }
4720
- CreateNewSourceControl() {
4721
- this.SetEditingSourceControl(Guid.CreateRaw());
4722
- }
4723
- CreateRepository() {
4724
- this.CreatingRepository = true;
4725
- this.RepositoryFormControl.reset();
4726
- }
4727
- CancelCreateRepository() {
4728
- this.CreatingRepository = false;
4729
- }
4730
- DevOpsActionLookupChanged(event) {
4731
- this.configureDevOpsAction();
4732
- }
4733
- MainBranchChanged(event) {
4734
- this.emitBranchesChanged();
4735
- }
4736
- OrganizationChanged(event) {
4737
- const org = this.OrganizationFormControl;
4738
- this.RepositoryFormControl.reset();
4739
- if (this.UseBranches) {
4740
- this.BranchesFormControl.reset();
4741
- this.SelectedBranches = [];
4742
- }
4743
- this.listRepositories();
4744
- }
4745
- RefreshOrganizations() {
4746
- // this.Loading = true;
4747
- this.listOrganizations();
4748
- this.OrganizationFormControl?.reset();
4749
- this.RepositoryFormControl?.reset();
4750
- if (this.UseBranches) {
4751
- this.BranchesFormControl?.reset();
4752
- }
4753
- }
4754
- RemoveBranchOption(option) {
4755
- const index = this.SelectedBranches.indexOf(option);
4756
- if (index >= 0) {
4757
- this.SelectedBranches.splice(index, 1);
4758
- }
4759
- this.emitBranchesChanged();
4323
+ CalculateTimelapse(timestamp) {
4324
+ return moment(timestamp).fromNow();
4760
4325
  }
4761
- RepositoryChanged(event) {
4762
- const repo = this.RepositoryFormControl;
4763
- if (this.UseBranches) {
4764
- this.BranchesFormControl.reset();
4765
- this.SelectedBranches = [];
4766
- this.listBranches();
4767
- }
4768
- if (!this.UseBranches) {
4769
- this.listBuildPaths();
4326
+ HandleAction(action) {
4327
+ if (action.ActionType == 'Link') {
4328
+ if (action.Action.startsWith('http')) {
4329
+ window.open(action.Action, '_blank');
4330
+ }
4331
+ else {
4332
+ window.location.href = action.Action;
4333
+ }
4770
4334
  }
4771
- }
4772
- SaveRepository() {
4773
- this.Loading = true;
4774
- const org = this.OrganizationFormControl.value;
4775
- const repoName = this.RepositoryFormControl.value;
4776
- this.appsFlowSvc
4777
- .CreateRepository(org, repoName)
4778
- .subscribe((response) => {
4779
- if (response.Status.Code === 0) {
4780
- this.listRepositories(repoName);
4781
- this.CreatingRepository = false;
4335
+ else if (action.ActionType == 'Modal') {
4336
+ if (action.Action == 'AddSourceControl') {
4337
+ this.OpenSourceControlDialog(null);
4782
4338
  }
4783
4339
  else {
4784
- // TODO: Need to surface an error to the user...
4785
- this.Loading = false;
4340
+ alert('other modaled ' + action.Action);
4786
4341
  }
4787
- });
4788
- }
4789
- SetEditingSourceControl(scLookup) {
4790
- this.EditingSourceControlLookup = scLookup;
4791
- }
4792
- SubmitSourceControl() {
4793
- console.log('source control submitted: ', this.DevOpsSourceControlFormGroup.value);
4794
- this.SaveSourceControl();
4342
+ }
4795
4343
  }
4796
- SaveSourceControl() {
4797
- const saveEnvReq = {
4798
- Environment: {
4799
- ...this.Environment,
4800
- Sources: this.Environment.Sources || {},
4344
+ OpenSourceControlDialog(scLookup) {
4345
+ const dialogRef = this.dialog.open(SourceControlDialogComponent, {
4346
+ width: '550px',
4347
+ data: {
4348
+ environment: this.Environment,
4349
+ environmentLookup: this.ActiveEnvironmentLookup,
4350
+ scLookup: scLookup,
4801
4351
  },
4802
- EnvironmentLookup: this.EnvironmentLookup,
4803
- EnterpriseDataTokens: {},
4804
- };
4805
- let source = {
4806
- ...this.EditingSourceControl,
4807
- Branches: this.SelectedBranches,
4808
- MainBranch: this.MainBranchFormControl.value,
4809
- };
4810
- source = {
4811
- ...source,
4812
- Type: 'GitHub',
4813
- Name: `@${this.OrganizationFormControl.value}/${this.RepositoryFormControl.value}`,
4814
- DevOpsActionTriggerLookups: [this.DevOpsActionLookup],
4815
- Organization: this.OrganizationFormControl.value,
4816
- Repository: this.RepositoryFormControl.value,
4817
- };
4818
- const scLookup = `github://${source.Organization}/${source.Repository}`;
4819
- saveEnvReq.Environment.Sources[scLookup] = source;
4820
- console.log('save SC: ', saveEnvReq);
4821
- let resp = this.eacSvc.SaveEnvironmentAsCode(saveEnvReq);
4822
- resp.then((res) => {
4823
- this.SaveStatusEvent.emit(res);
4352
+ });
4353
+ dialogRef.afterClosed().subscribe((result) => {
4354
+ // console.log('The dialog was closed');
4355
+ // console.log("result:", result)
4824
4356
  });
4825
4357
  }
4358
+ SafeHtml(html) {
4359
+ return this.sanitizer.bypassSecurityTrustHtml(html);
4360
+ }
4826
4361
  // Helpers
4827
- addBranchOption(value) {
4828
- value = (value || '').trim();
4829
- if (value && this.SelectedBranches.indexOf(value) < 0) {
4830
- this.SelectedBranches.push(value);
4362
+ handleRefresh() {
4363
+ if (this.FeedItem?.RefreshLink) {
4364
+ setTimeout(() => {
4365
+ this.eacSvc.CheckUserFeedItem(this.FeedItem).subscribe(async (response) => {
4366
+ if (response.Status.Code === 0) {
4367
+ this.FeedItem = response.Model;
4368
+ this.handleRefresh();
4369
+ }
4370
+ else {
4371
+ console.log(response);
4372
+ }
4373
+ }, (err) => {
4374
+ console.log(err);
4375
+ });
4376
+ }, 5000);
4831
4377
  }
4832
- this.BranchesInput.nativeElement.blur();
4833
- this.emitBranchesChanged();
4834
4378
  }
4835
- configureDevOpsAction() {
4836
- setTimeout(() => {
4837
- this.DevOpsActionLookupFormControl.setValue(this.DevOpsActionLookup);
4838
- }, 0);
4379
+ }
4380
+ 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 });
4381
+ 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?.Video\">\n <div\n class=\"video\"\n [innerHTML]=\"SafeHtml(tab.Data.Video)\"\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.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"] }] });
4382
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MainFeedCardComponent, decorators: [{
4383
+ type: Component,
4384
+ 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?.Video\">\n <div\n class=\"video\"\n [innerHTML]=\"SafeHtml(tab.Data.Video)\"\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"] }]
4385
+ }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialog }, { type: i3$2.DomSanitizer }]; }, propDecorators: { FeedItem: [{
4386
+ type: Input,
4387
+ args: ['feed-item']
4388
+ }] } });
4389
+
4390
+ class TwoColumnHeaderComponent {
4391
+ constructor() { }
4392
+ ngOnInit() {
4839
4393
  }
4840
- destroyFormControls() {
4841
- this.DevOpsSourceControlFormGroup.removeControl([this.SourceControlRoot, 'mainBranch'].join(''));
4842
- this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'branches'].join(''));
4843
- this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'buildPath'].join(''));
4844
- this.SelectedBranches = [];
4845
- this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'organization'].join(''));
4846
- this.DevOpsSourceControlFormGroup?.removeControl([this.SourceControlRoot, 'repository'].join(''));
4394
+ }
4395
+ TwoColumnHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TwoColumnHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4396
+ 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"] }] });
4397
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TwoColumnHeaderComponent, decorators: [{
4398
+ type: Component,
4399
+ 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"] }]
4400
+ }], ctorParameters: function () { return []; } });
4401
+
4402
+ class CardCarouselComponent {
4403
+ constructor() {
4404
+ this.carouselIndex = 0;
4847
4405
  }
4848
- emitBranchesChanged() {
4849
- if (this.SelectedBranches?.length > 0 &&
4850
- (!this.MainBranchFormControl.value ||
4851
- this.SelectedBranches.indexOf(this.MainBranchFormControl.value) < 0)) {
4852
- this.MainBranchFormControl.setValue(this.SelectedBranches.find((branch) => branch === 'main' || branch === 'master') || this.SelectedBranches[0]);
4406
+ ngOnInit() {
4407
+ }
4408
+ ngAfterViewInit() {
4409
+ this.assignCarouselClass();
4410
+ }
4411
+ LeftChevronClicked() {
4412
+ this.removeCarouselClasses();
4413
+ if (this.carouselIndex === 0) {
4414
+ this.carouselIndex = this.Stats.length - 1;
4853
4415
  }
4854
- else if (this.SelectedBranches?.length <= 0) {
4855
- this.MainBranchFormControl.reset();
4416
+ else {
4417
+ this.carouselIndex--;
4856
4418
  }
4857
- this.BranchesFormControl.setValue(this.SelectedBranches.join(','));
4858
- this.BranchesChanged(this.SelectedBranches || []);
4419
+ this.assignCarouselClass();
4859
4420
  }
4860
- listBranches() {
4861
- if (this.UseBranches) {
4862
- this.Loading = true;
4863
- this.appsFlowSvc
4864
- .ListBranches(this.OrganizationFormControl.value, this.RepositoryFormControl.value)
4865
- .subscribe((response) => {
4866
- this.BranchOptions = response.Model;
4867
- this.Loading = false;
4868
- if (this.EditingSourceControl?.Branches?.length > 0) {
4869
- this.SelectedBranches = this.EditingSourceControl.Branches;
4870
- }
4871
- else if (this.BranchOptions?.length === 1) {
4872
- this.BranchesFormControl.setValue(this.BranchOptions[0].Name);
4873
- this.SelectedBranches = [this.BranchOptions[0].Name];
4874
- }
4875
- this.emitBranchesChanged();
4876
- this.listBuildPaths();
4877
- });
4878
- }
4421
+ MoreDetailsClicked() {
4422
+ console.log("More details clicked on carousel item", this.Stats[this.carouselIndex]);
4879
4423
  }
4880
- listBuildPaths() {
4881
- if (this.UseBuildPath) {
4882
- this.Loading = true;
4883
- this.appsFlowSvc
4884
- .ListBuildPaths(this.OrganizationFormControl.value, this.RepositoryFormControl.value)
4885
- .subscribe((response) => {
4886
- this.BuildPathOptions = response.Model;
4887
- this.Loading = false;
4888
- if (this.BuildPathOptions?.length === 1) {
4889
- this.BuildPathFormControl.setValue(this.BuildPathOptions[0]);
4890
- }
4891
- });
4424
+ RightChevronClicked() {
4425
+ this.removeCarouselClasses();
4426
+ if (this.carouselIndex === this.Stats.length - 1) {
4427
+ this.carouselIndex = 0;
4892
4428
  }
4429
+ else {
4430
+ this.carouselIndex++;
4431
+ }
4432
+ this.assignCarouselClass();
4893
4433
  }
4894
- listOrganizations() {
4895
- this.Loading = true;
4896
- this.appsFlowSvc
4897
- .ListOrganizations()
4898
- .subscribe((response) => {
4899
- this.OrganizationOptions = response.Model;
4900
- console.log("Organization Options: ", this.OrganizationOptions);
4901
- this.Loading = false;
4902
- if (this.EditingSourceControl?.Organization) {
4903
- setTimeout(() => {
4904
- this.OrganizationFormControl.setValue(this.EditingSourceControl.Organization);
4905
- this.listRepositories(this.EditingSourceControl?.Repository);
4906
- }, 0);
4907
- }
4908
- });
4909
- }
4910
- listRepositories(activeRepo = null) {
4911
- this.Loading = true;
4912
- this.appsFlowSvc
4913
- .ListRepositories(this.OrganizationFormControl.value)
4914
- .subscribe((response) => {
4915
- this.RepositoryOptions = response.Model;
4916
- this.Loading = false;
4917
- if (activeRepo) {
4918
- setTimeout(() => {
4919
- this.RepositoryFormControl.setValue(activeRepo);
4920
- this.listBranches();
4921
- if (!this.UseBranches) {
4922
- this.listBuildPaths();
4923
- }
4924
- }, 0);
4434
+ //HELPERS
4435
+ removeCarouselClasses() {
4436
+ for (let i = 0; i < this.Stats.length; i++) {
4437
+ if (i === this.carouselIndex) {
4438
+ document.getElementById("carousel-" + this.carouselIndex).classList.remove('active');
4925
4439
  }
4926
- else if (this.RepositoryOptions?.length <= 0) {
4927
- this.CreatingRepository = true;
4440
+ else {
4441
+ document.getElementById("carousel-" + i).classList.remove('hidden');
4928
4442
  }
4929
- });
4930
- }
4931
- loadProjectHostingDetails() {
4932
- if (this.SelectedBranches?.length > 0) {
4933
- this.HostingDetails.Loading = true;
4934
- this.appsFlowSvc
4935
- .LoadProjectHostingDetails()
4936
- .subscribe((response) => {
4937
- this.HostingDetails = response.Model;
4938
- this.HostingDetails.Loading = false;
4939
- this.configureDevOpsAction();
4940
- }, (err) => {
4941
- this.HostingDetails.Loading = false;
4942
- });
4943
4443
  }
4944
4444
  }
4945
- setupFormControls() {
4946
- this.destroyFormControls();
4947
- console.log("Source Control: ", this.EditingSourceControl);
4948
- this.DevOpsSourceControlFormGroup.addControl('devOpsActionLookup', new FormControl(this.DevOpsActionLookup || '', []));
4949
- this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'organization'].join(''), new FormControl(this.EditingSourceControl.Organization ?? '', Validators.required));
4950
- this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'repository'].join(''), new FormControl(this.EditingSourceControl.Repository ?? '', Validators.required));
4951
- if (this.UseBranches) {
4952
- this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'branches'].join(''), new FormControl(this.EditingSourceControl?.Branches ?? '', Validators.required));
4953
- this.SelectedBranches = this.EditingSourceControl?.Branches;
4954
- this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'mainBranch'].join(''), new FormControl(this.EditingSourceControl.MainBranch ?? '', Validators.required));
4955
- }
4956
- if (this.UseBuildPath) {
4957
- this.DevOpsSourceControlFormGroup.addControl([this.SourceControlRoot, 'buildPath'].join(''), new FormControl(this.BuildPath ?? '', Validators.required));
4445
+ assignCarouselClass() {
4446
+ for (let i = 0; i < this.Stats.length; i++) {
4447
+ if (i === this.carouselIndex) {
4448
+ document.getElementById("carousel-" + this.carouselIndex).classList.add('active');
4449
+ }
4450
+ else {
4451
+ document.getElementById("carousel-" + i).classList.add('hidden');
4452
+ }
4958
4453
  }
4959
4454
  }
4960
4455
  }
4961
- 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 });
4962
- 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"] }] });
4963
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DevopsSourceControlFormComponent, decorators: [{
4456
+ CardCarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CardCarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4457
+ 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"] }] });
4458
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CardCarouselComponent, decorators: [{
4964
4459
  type: Component,
4965
- 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"] }]
4966
- }], ctorParameters: function () { return [{ type: ApplicationsFlowService }, { type: EaCService }, { type: i1$2.FormBuilder }]; }, propDecorators: { EditingSourceControlLookup: [{
4967
- type: Input,
4968
- args: ['editing-source-control-lookup']
4969
- }], Environment: [{
4970
- type: Input,
4971
- args: ['environment']
4972
- }], EnvironmentLookup: [{
4460
+ 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"] }]
4461
+ }], ctorParameters: function () { return []; }, propDecorators: { Stats: [{
4973
4462
  type: Input,
4974
- args: ['environment-lookup']
4975
- }], SaveStatusEvent: [{
4976
- type: Output,
4977
- args: ['save-status-event']
4978
- }], BranchesInput: [{
4979
- type: ViewChild,
4980
- args: ['branches']
4463
+ args: ['stats']
4981
4464
  }] } });
4982
4465
 
4983
- class SourceControlDialogComponent {
4984
- constructor(dialogRef, eacSvc, data, snackBar) {
4985
- this.dialogRef = dialogRef;
4466
+ class SecurityToggleComponent {
4467
+ constructor(eacSvc, formBldr) {
4986
4468
  this.eacSvc = eacSvc;
4987
- this.data = data;
4988
- this.snackBar = snackBar;
4469
+ this.formBldr = formBldr;
4470
+ this.SaveFormEvent = new EventEmitter;
4471
+ this.SkeletonEffect = 'wave';
4989
4472
  }
4990
- get DevOpsSourceControlFormGroup() {
4991
- return this.DevopsSourceControl?.DevOpsSourceControlFormGroup;
4473
+ get IsPrivateFormControl() {
4474
+ return this.SecurityFormGroup?.controls.isPrivate;
4992
4475
  }
4993
- get HasConnection() {
4994
- return this.State.GitHub.HasConnection;
4476
+ get IsTriggerSignInFormControl() {
4477
+ return this.SecurityFormGroup?.controls.isTriggerSignIn;
4995
4478
  }
4996
4479
  get State() {
4997
4480
  return this.eacSvc.State;
4998
4481
  }
4999
4482
  ngOnInit() {
4483
+ this.setupSecurityFormGroup();
5000
4484
  }
5001
- CloseDialog() {
5002
- this.dialogRef.close();
4485
+ SecuritySubmit() {
4486
+ //save the security settings
4487
+ console.log("submitting security values: ", this.SecurityFormGroup.value);
4488
+ this.SaveFormEvent.emit(this.SecurityFormGroup.value);
5003
4489
  }
5004
- HandleSaveStatusEvent(event) {
5005
- console.log("event to save: ", event);
5006
- if (event.Code === 0) {
5007
- this.snackBar.open("Source Control Succesfully Saved", "Dismiss", {
5008
- duration: 5000
5009
- });
5010
- this.CloseDialog();
5011
- }
5012
- else {
5013
- this.ErrorMessage = event.Message;
5014
- }
4490
+ setupSecurityFormGroup() {
4491
+ this.ProcessorType = this.EditingApplication?.Processor?.Type || '';
4492
+ this.SecurityFormGroup = this.formBldr.group({});
4493
+ this.setupSecurityForm();
5015
4494
  }
5016
- SaveSourceControl() {
5017
- this.DevopsSourceControl.SaveSourceControl();
4495
+ setupSecurityForm() {
4496
+ this.SecurityFormGroup.addControl('isPrivate', this.formBldr.control(this.EditingApplication.LookupConfig?.IsPrivate || false, [Validators.required]));
4497
+ this.SecurityFormGroup.addControl('isTriggerSignIn', this.formBldr.control(this.EditingApplication.LookupConfig?.IsTriggerSignIn || false, [Validators.required]));
5018
4498
  }
5019
4499
  }
5020
- 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 });
5021
- 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"] }] });
5022
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SourceControlDialogComponent, decorators: [{
4500
+ 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 });
4501
+ 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]" }] });
4502
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SecurityToggleComponent, decorators: [{
5023
4503
  type: Component,
5024
- 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"] }]
5025
- }], ctorParameters: function () { return [{ type: i2$3.MatDialogRef }, { type: EaCService }, { type: undefined, decorators: [{
5026
- type: Inject,
5027
- args: [MAT_DIALOG_DATA]
5028
- }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { DevopsSourceControl: [{
5029
- type: ViewChild,
5030
- args: [DevopsSourceControlFormComponent]
4504
+ 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"] }]
4505
+ }], ctorParameters: function () { return [{ type: EaCService }, { type: i1$2.FormBuilder }]; }, propDecorators: { EditingApplication: [{
4506
+ type: Input,
4507
+ args: ['editing-application']
4508
+ }], SaveFormEvent: [{
4509
+ type: Output,
4510
+ args: ['save-form-event']
5031
4511
  }] } });
5032
4512
 
5033
- class MainFeedCardComponent {
5034
- constructor(eacSvc, dialog, sanitizer) {
4513
+ class ProcessorDetailsFormComponent {
4514
+ constructor(appsFlowSvc, formBldr, eacSvc) {
4515
+ this.appsFlowSvc = appsFlowSvc;
4516
+ this.formBldr = formBldr;
5035
4517
  this.eacSvc = eacSvc;
5036
- this.dialog = dialog;
5037
- this.sanitizer = sanitizer;
4518
+ this.redirectTooltip = '';
4519
+ this.HasSaveButton = true;
4520
+ this.SaveFormEvent = new EventEmitter();
4521
+ }
4522
+ get APIRootFormControl() {
4523
+ return this.ProcessorDetailsFormGroup?.controls.apiRoot;
4524
+ }
4525
+ get Environment() {
4526
+ return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
4527
+ }
4528
+ get BuildFormControl() {
4529
+ return this.ProcessorDetailsFormGroup?.controls.build;
4530
+ }
4531
+ get BuildPathFormControl() {
4532
+ return this.ProcessorDetailsFormGroup?.controls.buildPath;
4533
+ }
4534
+ get ClientIDFormControl() {
4535
+ return this.ProcessorDetailsFormGroup?.controls.clientId;
4536
+ }
4537
+ get ClientSecretFormControl() {
4538
+ return this.ProcessorDetailsFormGroup?.controls.clientSecret;
4539
+ }
4540
+ get DefaultFileFormControl() {
4541
+ return this.ProcessorDetailsFormGroup?.controls.defaultFile;
4542
+ }
4543
+ get DefaultSourceControl() {
4544
+ return {
4545
+ Organization: this.EditingApplication?.LowCodeUnit?.Organization,
4546
+ Repository: this.EditingApplication?.LowCodeUnit?.Repository,
4547
+ };
4548
+ }
4549
+ get InboundPathFormControl() {
4550
+ return this.ProcessorDetailsFormGroup?.controls.inboundPath;
5038
4551
  }
5039
- get ActiveEnvironment() {
5040
- return this.State?.EaC?.Environments[this.ActiveEnvironmentLookup];
4552
+ get IncludeRequestFormControl() {
4553
+ return this.ProcessorDetailsFormGroup?.controls.includeRequest;
5041
4554
  }
5042
- get ActiveEnvironmentLookup() {
5043
- // TODO: Eventually support multiple environments
5044
- const envLookups = Object.keys(this.State?.EaC?.Environments || {});
5045
- return envLookups[0];
4555
+ get MethodsFormControl() {
4556
+ return this.ProcessorDetailsFormGroup?.controls.methods;
5046
4557
  }
5047
- get Environment() {
5048
- // console.log("Ent Environment var: ", this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment]);
5049
- return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
4558
+ get PackageFormControl() {
4559
+ return this.ProcessorDetailsFormGroup?.controls.package;
5050
4560
  }
5051
- get Icon() {
5052
- if (this.FeedItem.Status.Code === 0) {
5053
- return 'check_circle';
5054
- }
5055
- else if (this.FeedItem.Status.Code === 1) {
5056
- return 'cancel';
5057
- }
5058
- else if (this.FeedItem.Status.Code === 2) {
5059
- return 'sync';
5060
- }
5061
- else {
5062
- return 'help_outline';
5063
- }
4561
+ get PermanentFormControl() {
4562
+ return this.ProcessorDetailsFormGroup?.controls.permanent;
5064
4563
  }
5065
- get IconColor() {
5066
- if (this.FeedItem.Status.Code === 0) {
5067
- return 'green';
5068
- }
5069
- else if (this.FeedItem.Status.Code === 1) {
5070
- return 'red';
5071
- }
5072
- else if (this.FeedItem.Status.Code === 2) {
5073
- return 'blue';
5074
- }
5075
- else {
5076
- return 'gray';
5077
- }
4564
+ get PreserveMethodFormControl() {
4565
+ return this.ProcessorDetailsFormGroup?.controls.preserveMethod;
4566
+ }
4567
+ get RedirectFormControl() {
4568
+ return this.ProcessorDetailsFormGroup?.controls.redirect;
4569
+ }
4570
+ get ScopesFormControl() {
4571
+ return this.ProcessorDetailsFormGroup?.controls.scopes;
4572
+ }
4573
+ get SecurityFormControl() {
4574
+ return this.ProcessorDetailsFormGroup?.controls.security;
5078
4575
  }
5079
4576
  get State() {
5080
4577
  return this.eacSvc.State;
5081
4578
  }
5082
- // Life Cycle
5083
- ngOnInit() {
5084
- this.handleRefresh();
5085
- }
5086
- // API Methods
5087
- CalculateTimelapse(timestamp) {
5088
- return moment(timestamp).fromNow();
4579
+ get SourceControls() {
4580
+ return this.Environment?.Sources || {};
5089
4581
  }
5090
- HandleAction(action) {
5091
- if (action.ActionType == 'Link') {
5092
- if (action.Action.startsWith('http')) {
5093
- window.open(action.Action, '_blank');
5094
- }
5095
- else {
5096
- window.location.href = action.Action;
5097
- }
5098
- }
5099
- else if (action.ActionType == 'Modal') {
5100
- if (action.Action == 'AddSourceControl') {
5101
- this.OpenSourceControlDialog(null);
5102
- }
5103
- else {
5104
- alert('other modaled ' + action.Action);
5105
- }
5106
- }
4582
+ get SourceControlFormControl() {
4583
+ return this.ProcessorDetailsFormGroup?.controls.sourceControl;
5107
4584
  }
5108
- OpenSourceControlDialog(scLookup) {
5109
- const dialogRef = this.dialog.open(SourceControlDialogComponent, {
5110
- width: '550px',
5111
- data: {
5112
- environment: this.Environment,
5113
- environmentLookup: this.ActiveEnvironmentLookup,
5114
- scLookup: scLookup,
5115
- },
5116
- });
5117
- dialogRef.afterClosed().subscribe((result) => {
5118
- // console.log('The dialog was closed');
5119
- // console.log("result:", result)
5120
- });
4585
+ get SPARootFormControl() {
4586
+ return this.ProcessorDetailsFormGroup?.controls.spaRoot;
5121
4587
  }
5122
- SafeHtml(html) {
5123
- return this.sanitizer.bypassSecurityTrustHtml(html);
4588
+ get TokenLookupFormControl() {
4589
+ return this.ProcessorDetailsFormGroup?.controls.tokenLookup;
5124
4590
  }
5125
- // Helpers
5126
- handleRefresh() {
5127
- if (this.FeedItem?.RefreshLink) {
5128
- setTimeout(() => {
5129
- this.eacSvc.CheckUserFeedItem(this.FeedItem).subscribe(async (response) => {
5130
- if (response.Status.Code === 0) {
5131
- this.FeedItem = response.Model;
5132
- this.handleRefresh();
5133
- }
5134
- else {
5135
- console.log(response);
5136
- }
5137
- }, (err) => {
5138
- console.log(err);
5139
- });
5140
- }, 5000);
4591
+ get ValidFormControls() {
4592
+ let vfc = new Array();
4593
+ for (const field in this.ProcessorDetailsFormGroup.controls) {
4594
+ const control = this.ProcessorDetailsFormGroup.get(field);
4595
+ if (control.valid) {
4596
+ vfc.push(control);
4597
+ }
5141
4598
  }
4599
+ // console.log("VFC=", vfc)
4600
+ return vfc;
5142
4601
  }
5143
- }
5144
- 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 });
5145
- 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?.Video\">\n <div\n class=\"video\"\n [innerHTML]=\"SafeHtml(tab.Data.Video)\"\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.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"] }] });
5146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MainFeedCardComponent, decorators: [{
5147
- type: Component,
5148
- 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?.Video\">\n <div\n class=\"video\"\n [innerHTML]=\"SafeHtml(tab.Data.Video)\"\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"] }]
5149
- }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialog }, { type: i3$2.DomSanitizer }]; }, propDecorators: { FeedItem: [{
5150
- type: Input,
5151
- args: ['feed-item']
5152
- }] } });
5153
-
5154
- class TwoColumnHeaderComponent {
5155
- constructor() { }
5156
- ngOnInit() {
4602
+ get VersionFormControl() {
4603
+ return this.ProcessorDetailsFormGroup?.controls.version;
5157
4604
  }
5158
- }
5159
- TwoColumnHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TwoColumnHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5160
- 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"] }] });
5161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TwoColumnHeaderComponent, decorators: [{
5162
- type: Component,
5163
- 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"] }]
5164
- }], ctorParameters: function () { return []; } });
5165
-
5166
- class CardCarouselComponent {
5167
- constructor() {
5168
- this.carouselIndex = 0;
4605
+ get ZipFileFormControl() {
4606
+ return this.ProcessorDetailsFormGroup?.controls.zipFile;
5169
4607
  }
5170
4608
  ngOnInit() {
4609
+ if (!this.EditingApplication) {
4610
+ this.CreateNewApplication();
4611
+ }
4612
+ else {
4613
+ this.setupProcessorDetailsForm();
4614
+ }
5171
4615
  }
5172
- ngAfterViewInit() {
5173
- this.assignCarouselClass();
4616
+ CreateNewApplication() {
4617
+ this.SetEditingApplication(Guid.CreateRaw());
5174
4618
  }
5175
- LeftChevronClicked() {
5176
- this.removeCarouselClasses();
5177
- if (this.carouselIndex === 0) {
5178
- this.carouselIndex = this.Stats.length - 1;
4619
+ DetermineTooltipText() {
4620
+ let permanentValue = this.PermanentFormControl.value;
4621
+ let preserveValue = this.PreserveMethodFormControl.value;
4622
+ if (permanentValue === true && preserveValue === false) {
4623
+ this.redirectTooltip = '301 – Permanent and Not Preserve';
4624
+ }
4625
+ else if (permanentValue === false && preserveValue === false) {
4626
+ this.redirectTooltip = '302 – Not Permanent and Not Preserve';
4627
+ }
4628
+ else if (permanentValue === false && preserveValue === true) {
4629
+ this.redirectTooltip = '307 – Not Permanent and Preserve';
4630
+ }
4631
+ else if (permanentValue === true && preserveValue === true) {
4632
+ this.redirectTooltip = '308 – Permanent and Preserve';
4633
+ }
4634
+ }
4635
+ SaveProcessorDetails() {
4636
+ const app = this.EditingApplication;
4637
+ app.LookupConfig.AllowedMethods = this.MethodsFormControl?.value
4638
+ ?.split(' ')
4639
+ .filter((v) => !!v);
4640
+ app.Processor.Type = this.ProcessorType;
4641
+ switch (app.Processor.Type) {
4642
+ case 'DFS':
4643
+ app.Processor.DefaultFile =
4644
+ this.DefaultFileFormControl.value || 'index.html';
4645
+ app.LowCodeUnit = {
4646
+ Type: this.LCUType,
4647
+ };
4648
+ switch (app.LowCodeUnit.Type) {
4649
+ case 'GitHub':
4650
+ app.LowCodeUnit.Organization =
4651
+ this.SourceControls[this.SourceControlFormControl.value]?.Organization;
4652
+ app.LowCodeUnit.Repository =
4653
+ this.SourceControls[this.SourceControlFormControl.value]?.Repository;
4654
+ app.LowCodeUnit.Build = this.BuildFormControl.value;
4655
+ app.LowCodeUnit.Path = this.BuildPathFormControl.value;
4656
+ app.LowCodeUnit.SourceControlLookup =
4657
+ this.SourceControlFormControl.value;
4658
+ break;
4659
+ case 'NPM':
4660
+ app.LowCodeUnit.Package = this.PackageFormControl.value;
4661
+ app.LowCodeUnit.Version = this.VersionFormControl.value;
4662
+ break;
4663
+ case 'WordPress':
4664
+ app.LowCodeUnit.APIRoot = this.APIRootFormControl.value;
4665
+ break;
4666
+ case 'Zip':
4667
+ app.LowCodeUnit.ZipFile = this.ZipFileFormControl.value;
4668
+ break;
4669
+ }
4670
+ break;
4671
+ case 'OAuth':
4672
+ app.Processor.Scopes = this.ScopesFormControl.value.split(' ');
4673
+ app.Processor.TokenLookup = this.TokenLookupFormControl.value;
4674
+ app.LowCodeUnit = {
4675
+ Type: this.LCUType,
4676
+ };
4677
+ switch (app.LowCodeUnit.Type) {
4678
+ case 'GitHubOAuth':
4679
+ app.LowCodeUnit.ClientID = this.ClientIDFormControl.value;
4680
+ app.LowCodeUnit.ClientSecret = this.ClientSecretFormControl.value;
4681
+ break;
4682
+ }
4683
+ break;
4684
+ case 'Proxy':
4685
+ app.Processor.InboundPath = this.InboundPathFormControl.value;
4686
+ app.LowCodeUnit = {
4687
+ Type: this.LCUType,
4688
+ };
4689
+ switch (app.LowCodeUnit.Type) {
4690
+ case 'API':
4691
+ app.LowCodeUnit.APIRoot = this.APIRootFormControl.value;
4692
+ app.LowCodeUnit.Security = this.SecurityFormControl.value;
4693
+ break;
4694
+ case 'SPA':
4695
+ app.LowCodeUnit.SPARoot = this.SPARootFormControl.value;
4696
+ break;
4697
+ }
4698
+ break;
4699
+ case 'Redirect':
4700
+ app.Processor.IncludeRequest = !!this.IncludeRequestFormControl.value;
4701
+ app.Processor.Permanent = !!this.PermanentFormControl.value;
4702
+ app.Processor.PreserveMethod = !!this.PreserveMethodFormControl.value;
4703
+ app.Processor.Redirect = this.RedirectFormControl.value;
4704
+ break;
5179
4705
  }
5180
- else {
5181
- this.carouselIndex--;
4706
+ if (!app.LookupConfig.PathRegex.startsWith('/')) {
4707
+ app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
5182
4708
  }
5183
- this.assignCarouselClass();
4709
+ const saveAppReq = {
4710
+ ProjectLookup: this.ProjectLookup,
4711
+ Application: app,
4712
+ ApplicationLookup: this.EditingApplicationLookup || Guid.CreateRaw(),
4713
+ };
4714
+ this.eacSvc.SaveApplicationAsCode(saveAppReq).then((res) => {
4715
+ this.SaveFormEvent.emit(res);
4716
+ });
5184
4717
  }
5185
- MoreDetailsClicked() {
5186
- console.log("More details clicked on carousel item", this.Stats[this.carouselIndex]);
4718
+ SetEditingApplication(appLookup) {
4719
+ this.EditingApplication = new EaCApplicationAsCode();
4720
+ this.EditingApplicationLookup = appLookup;
4721
+ this.setupProcessorDetailsForm();
5187
4722
  }
5188
- RightChevronClicked() {
5189
- this.removeCarouselClasses();
5190
- if (this.carouselIndex === this.Stats.length - 1) {
5191
- this.carouselIndex = 0;
5192
- }
5193
- else {
5194
- this.carouselIndex++;
5195
- }
5196
- this.assignCarouselClass();
4723
+ SourceControlChanged(event) {
4724
+ this.listBuildPaths();
4725
+ }
4726
+ ProcessorTypeChanged(event) {
4727
+ this.ProcessorType = event.value;
4728
+ this.setupProcessorTypeSubForm();
4729
+ }
4730
+ LCUTypeChanged(event) {
4731
+ this.LCUType = event.value;
4732
+ this.setupLcuTypeSubForm();
5197
4733
  }
5198
4734
  //HELPERS
5199
- removeCarouselClasses() {
5200
- for (let i = 0; i < this.Stats.length; i++) {
5201
- if (i === this.carouselIndex) {
5202
- document.getElementById("carousel-" + this.carouselIndex).classList.remove('active');
5203
- }
5204
- else {
5205
- document.getElementById("carousel-" + i).classList.remove('hidden');
4735
+ cleanupLcuTypeSubForm() {
4736
+ this.ProcessorDetailsFormGroup.removeControl('methods');
4737
+ this.ProcessorDetailsFormGroup.removeControl('apiRoot');
4738
+ this.ProcessorDetailsFormGroup.removeControl('security');
4739
+ this.ProcessorDetailsFormGroup.removeControl('spaRoot');
4740
+ this.ProcessorDetailsFormGroup.removeControl('applicationId');
4741
+ this.ProcessorDetailsFormGroup.removeControl('sourceControl');
4742
+ this.ProcessorDetailsFormGroup.removeControl('build');
4743
+ this.ProcessorDetailsFormGroup.removeControl('clientId');
4744
+ this.ProcessorDetailsFormGroup.removeControl('clientSecret');
4745
+ this.ProcessorDetailsFormGroup.removeControl('package');
4746
+ this.ProcessorDetailsFormGroup.removeControl('version');
4747
+ this.ProcessorDetailsFormGroup.removeControl('zipFile');
4748
+ }
4749
+ cleanupProcessorTypeSubForm() {
4750
+ this.ProcessorDetailsFormGroup.removeControl('defaultFile');
4751
+ // this.ApplicationFormGroup.removeControl('dfsLcuType');
4752
+ // this.ApplicationFormGroup.removeControl('oauthLcuType');
4753
+ this.ProcessorDetailsFormGroup.removeControl('scopes');
4754
+ this.ProcessorDetailsFormGroup.removeControl('tokenLookup');
4755
+ this.ProcessorDetailsFormGroup.removeControl('inboundPath');
4756
+ this.ProcessorDetailsFormGroup.removeControl('proxyLcuType');
4757
+ this.ProcessorDetailsFormGroup.removeControl('includeRequest');
4758
+ this.ProcessorDetailsFormGroup.removeControl('redirect');
4759
+ this.ProcessorDetailsFormGroup.removeControl('permanent');
4760
+ this.ProcessorDetailsFormGroup.removeControl('preserveMethod');
4761
+ this.cleanupLcuTypeSubForm();
4762
+ }
4763
+ listBuildPaths() {
4764
+ this.State.Loading = true;
4765
+ console.log("Source Control: ", this.SourceControls[this.SourceControlFormControl.value]);
4766
+ this.appsFlowSvc
4767
+ .ListBuildPaths(this.SourceControls[this.SourceControlFormControl.value]?.Organization, this.SourceControls[this.SourceControlFormControl.value]?.Repository)
4768
+ .subscribe((response) => {
4769
+ this.BuildPathOptions = response.Model;
4770
+ console.log("build path options: ", this.BuildPathOptions);
4771
+ this.State.Loading = false;
4772
+ // if (this.BuildPathOptions?.length === 1) {
4773
+ // this.BuildPathFormControl.setValue(this.BuildPathOptions[0]);
4774
+ // }
4775
+ });
4776
+ }
4777
+ setupLcuTypeSubForm() {
4778
+ this.cleanupLcuTypeSubForm();
4779
+ if (this.LCUType) {
4780
+ switch (this.LCUType) {
4781
+ case 'API':
4782
+ this.setupLCUAPIForm();
4783
+ break;
4784
+ case 'ApplicationPointer':
4785
+ this.setupLCUApplicationPointerForm();
4786
+ break;
4787
+ case 'GitHub':
4788
+ this.setupLCUGitHubForm();
4789
+ break;
4790
+ case 'GitHubOAuth':
4791
+ this.setupLCUGitHubOAuthForm();
4792
+ break;
4793
+ case 'WordPress':
4794
+ this.setupLCUWordPressForm();
4795
+ break;
4796
+ // case 'NPM':
4797
+ // this.setupLCUNPMForm();
4798
+ // break;
4799
+ case 'SPA':
4800
+ this.setupLCUSPAForm();
4801
+ break;
4802
+ case 'Zip':
4803
+ this.setupLCUZipForm();
4804
+ break;
5206
4805
  }
5207
4806
  }
5208
4807
  }
5209
- assignCarouselClass() {
5210
- for (let i = 0; i < this.Stats.length; i++) {
5211
- if (i === this.carouselIndex) {
5212
- document.getElementById("carousel-" + this.carouselIndex).classList.add('active');
5213
- }
5214
- else {
5215
- document.getElementById("carousel-" + i).classList.add('hidden');
5216
- }
4808
+ setupProcessorDetailsForm() {
4809
+ this.ProcessorType = this.EditingApplication?.Processor?.Type || '';
4810
+ // console.log('EDITING APP = ', this.EditingApplication);
4811
+ if (this.EditingApplication != null) {
4812
+ this.ProcessorDetailsFormGroup = this.formBldr.group({
4813
+ procType: [this.ProcessorType, [Validators.required]],
4814
+ });
4815
+ // this.setupDfsForm();
4816
+ // this.setupLcuTypeSubForm();
4817
+ this.setupProcessorTypeSubForm();
5217
4818
  }
5218
4819
  }
5219
- }
5220
- CardCarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CardCarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5221
- 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"] }] });
5222
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CardCarouselComponent, decorators: [{
5223
- type: Component,
5224
- 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"] }]
5225
- }], ctorParameters: function () { return []; }, propDecorators: { Stats: [{
5226
- type: Input,
5227
- args: ['stats']
5228
- }] } });
5229
-
5230
- class SecurityToggleComponent {
5231
- constructor(eacSvc, formBldr) {
5232
- this.eacSvc = eacSvc;
5233
- this.formBldr = formBldr;
5234
- this.SaveFormEvent = new EventEmitter;
5235
- this.SkeletonEffect = 'wave';
4820
+ setupLCUGitHubForm() {
4821
+ console.log('EditingApplication: ', this.EditingApplication);
4822
+ this.ProcessorDetailsFormGroup.addControl('sourceControl', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SourceControlLookup || '', [Validators.required]));
4823
+ this.ProcessorDetailsFormGroup.addControl('buildPath', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Path || '', [
4824
+ Validators.required,
4825
+ ]));
4826
+ this.ProcessorDetailsFormGroup.addControl('build', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Build || 'latest', [Validators.required]));
4827
+ this.listBuildPaths();
5236
4828
  }
5237
- get IsPrivateFormControl() {
5238
- return this.SecurityFormGroup?.controls.isPrivate;
4829
+ setupLCUApplicationPointerForm() {
4830
+ this.ProcessorDetailsFormGroup.addControl('applicationId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ApplicationID || '', [Validators.required]));
5239
4831
  }
5240
- get IsTriggerSignInFormControl() {
5241
- return this.SecurityFormGroup?.controls.isTriggerSignIn;
4832
+ setupLCUSPAForm() {
4833
+ this.ProcessorDetailsFormGroup.addControl('spaRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SPARoot || '', [Validators.required]));
5242
4834
  }
5243
- get State() {
5244
- return this.eacSvc.State;
4835
+ setupLCUAPIForm() {
4836
+ this.ProcessorDetailsFormGroup.addControl('methods', this.formBldr.control(this.EditingApplication.LookupConfig?.AllowedMethods?.join(' ') || '', []));
4837
+ this.ProcessorDetailsFormGroup.addControl('apiRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.APIRoot || '', [Validators.required]));
4838
+ this.ProcessorDetailsFormGroup.addControl('security', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Security || '', [Validators.required]));
5245
4839
  }
5246
- ngOnInit() {
5247
- this.setupSecurityFormGroup();
4840
+ setupLCUGitHubOAuthForm() {
4841
+ this.ProcessorDetailsFormGroup.addControl('clientId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientID || '', [Validators.required]));
4842
+ this.ProcessorDetailsFormGroup.addControl('clientSecret', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientSecret || '', [Validators.required]));
5248
4843
  }
5249
- SecuritySubmit() {
5250
- //save the security settings
5251
- console.log("submitting security values: ", this.SecurityFormGroup.value);
5252
- this.SaveFormEvent.emit(this.SecurityFormGroup.value);
4844
+ setupLCUWordPressForm() {
4845
+ this.ProcessorDetailsFormGroup.addControl('apiRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.APIRoot || '', [Validators.required]));
5253
4846
  }
5254
- setupSecurityFormGroup() {
5255
- this.ProcessorType = this.EditingApplication?.Processor?.Type || '';
5256
- this.SecurityFormGroup = this.formBldr.group({});
5257
- this.setupSecurityForm();
4847
+ setupProxyForm() {
4848
+ this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4849
+ this.ProcessorDetailsFormGroup.addControl('inboundPath', this.formBldr.control(this.EditingApplication.Processor?.InboundPath || '', [Validators.required]));
4850
+ this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
5258
4851
  }
5259
- setupSecurityForm() {
5260
- this.SecurityFormGroup.addControl('isPrivate', this.formBldr.control(this.EditingApplication.LookupConfig?.IsPrivate || false, [Validators.required]));
5261
- this.SecurityFormGroup.addControl('isTriggerSignIn', this.formBldr.control(this.EditingApplication.LookupConfig?.IsTriggerSignIn || false, [Validators.required]));
4852
+ setupRedirectForm() {
4853
+ this.ProcessorDetailsFormGroup.addControl('redirect', this.formBldr.control(this.EditingApplication.Processor?.Redirect || '', [
4854
+ Validators.required,
4855
+ ]));
4856
+ this.ProcessorDetailsFormGroup.addControl('permanent', this.formBldr.control(this.EditingApplication.Processor?.Permanent || false, []));
4857
+ this.ProcessorDetailsFormGroup.addControl('preserveMethod', this.formBldr.control(this.EditingApplication.Processor?.PreserveMethod || false, []));
4858
+ this.ProcessorDetailsFormGroup.addControl('includeRequest', this.formBldr.control(this.EditingApplication.Processor?.IncludeRequest || false, []));
4859
+ this.DetermineTooltipText();
4860
+ }
4861
+ setupOAuthForm() {
4862
+ this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4863
+ this.ProcessorDetailsFormGroup.addControl('scopes', this.formBldr.control(this.EditingApplication.Processor?.Scopes?.Join(' ') || '', [Validators.required]));
4864
+ this.ProcessorDetailsFormGroup.addControl('tokenLookup', this.formBldr.control(this.EditingApplication.Processor?.TokenLookup || '', [Validators.required]));
4865
+ this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
4866
+ }
4867
+ setupLCUZipForm() {
4868
+ this.ProcessorDetailsFormGroup.addControl('zipFile', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ZipFile || '', [Validators.required]));
4869
+ }
4870
+ setupDfsForm() {
4871
+ this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
4872
+ this.ProcessorDetailsFormGroup.addControl('defaultFile', this.formBldr.control(this.EditingApplication.Processor?.DefaultFile || 'index.html', [Validators.required]));
4873
+ this.ProcessorDetailsFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
4874
+ }
4875
+ setupProcessorTypeSubForm() {
4876
+ this.cleanupProcessorTypeSubForm();
4877
+ if (this.ProcessorType) {
4878
+ switch (this.ProcessorType) {
4879
+ case 'DFS':
4880
+ this.setupDfsForm();
4881
+ break;
4882
+ case 'OAuth':
4883
+ this.setupOAuthForm();
4884
+ break;
4885
+ case 'Proxy':
4886
+ this.setupProxyForm();
4887
+ break;
4888
+ case 'Redirect':
4889
+ this.setupRedirectForm();
4890
+ break;
4891
+ }
4892
+ }
4893
+ this.setupLcuTypeSubForm();
5262
4894
  }
5263
4895
  }
5264
- 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 });
5265
- 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]" }] });
5266
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SecurityToggleComponent, decorators: [{
4896
+ 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 });
4897
+ 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"] }] });
4898
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ProcessorDetailsFormComponent, decorators: [{
5267
4899
  type: Component,
5268
- 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"] }]
5269
- }], ctorParameters: function () { return [{ type: EaCService }, { type: i1$2.FormBuilder }]; }, propDecorators: { EditingApplication: [{
4900
+ 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"] }]
4901
+ }], ctorParameters: function () { return [{ type: ApplicationsFlowService }, { type: i1$2.FormBuilder }, { type: EaCService }]; }, propDecorators: { EditingApplication: [{
4902
+ type: Input,
4903
+ args: ['editing-application']
4904
+ }], EditingApplicationLookup: [{
4905
+ type: Input,
4906
+ args: ['editing-application-lookup']
4907
+ }], HasSaveButton: [{
4908
+ type: Input,
4909
+ args: ['has-save-button']
4910
+ }], SourceControlLookups: [{
4911
+ type: Input,
4912
+ args: ['source-control-lookups']
4913
+ }], ProjectLookup: [{
5270
4914
  type: Input,
5271
- args: ['editing-application']
4915
+ args: ['project-lookup']
5272
4916
  }], SaveFormEvent: [{
5273
4917
  type: Output,
5274
4918
  args: ['save-form-event']
@@ -5616,6 +5260,106 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
5616
5260
  args: [BuildPipelineFormComponent]
5617
5261
  }] } });
5618
5262
 
5263
+ class EditApplicationFormComponent {
5264
+ constructor(formBldr, eacSvc) {
5265
+ this.formBldr = formBldr;
5266
+ this.eacSvc = eacSvc;
5267
+ this.SaveFormEvent = new EventEmitter;
5268
+ this.HasSaveButton = true;
5269
+ }
5270
+ get DescriptionFormControl() {
5271
+ return this.ApplicationFormGroup?.controls.description;
5272
+ }
5273
+ get NameFormControl() {
5274
+ return this.ApplicationFormGroup?.controls.name;
5275
+ }
5276
+ get RouteFormControl() {
5277
+ return this.ApplicationFormGroup?.controls.route;
5278
+ }
5279
+ get State() {
5280
+ return this.eacSvc.State;
5281
+ }
5282
+ ngOnInit() {
5283
+ this.setupApplicationForm();
5284
+ }
5285
+ SubmitApplicationControl() {
5286
+ console.log("application form: ", this.ApplicationFormGroup.value);
5287
+ this.SaveApplication();
5288
+ }
5289
+ SaveApplication() {
5290
+ const app = this.EditingApplication;
5291
+ // console.log("APP=", app);
5292
+ app.Application = {
5293
+ Name: this.NameFormControl.value,
5294
+ Description: this.DescriptionFormControl.value,
5295
+ PriorityShift: this.EditingApplication?.Application?.PriorityShift || 0,
5296
+ };
5297
+ app.LookupConfig.PathRegex = `${this.RouteFormControl.value}.*`;
5298
+ switch (app.Processor.Type) {
5299
+ case 'DFS':
5300
+ app.Processor.BaseHref = `${this.RouteFormControl.value}/`.replace('//', '/');
5301
+ break;
5302
+ }
5303
+ if (!app.LookupConfig.PathRegex.startsWith('/')) {
5304
+ app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
5305
+ }
5306
+ const saveAppReq = {
5307
+ ProjectLookup: this.ProjectLookup,
5308
+ Application: app,
5309
+ ApplicationLookup: this.ApplicationLookup,
5310
+ };
5311
+ console.log("processor details being submitted: ", app.Processor);
5312
+ this.eacSvc.SaveApplicationAsCode(saveAppReq).then(res => {
5313
+ this.SaveFormEvent.emit(res);
5314
+ });
5315
+ }
5316
+ //HELPERS
5317
+ setupApplicationForm() {
5318
+ if (this.EditingApplication != null) {
5319
+ this.ApplicationFormGroup = this.formBldr.group({
5320
+ name: [this.EditingApplication.Application?.Name, Validators.required],
5321
+ description: [
5322
+ this.EditingApplication.Application?.Description,
5323
+ Validators.required,
5324
+ ],
5325
+ route: [this.CurrentRoute ? this.CurrentRoute :
5326
+ this.EditingApplication.LookupConfig?.PathRegex.replace('.*', '') ||
5327
+ '/',
5328
+ Validators.required,
5329
+ ],
5330
+ // priority: [
5331
+ // this.EditingApplication.Application?.Priority || 10000,
5332
+ // Validators.required,
5333
+ // ],
5334
+ });
5335
+ }
5336
+ }
5337
+ }
5338
+ 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 });
5339
+ 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"] }] });
5340
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationFormComponent, decorators: [{
5341
+ type: Component,
5342
+ 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"] }]
5343
+ }], ctorParameters: function () { return [{ type: i1$2.FormBuilder }, { type: EaCService }]; }, propDecorators: { ApplicationLookup: [{
5344
+ type: Input,
5345
+ args: ['application-lookup']
5346
+ }], CurrentRoute: [{
5347
+ type: Input,
5348
+ args: ['current-route']
5349
+ }], EditingApplication: [{
5350
+ type: Input,
5351
+ args: ['editing-application']
5352
+ }], HasSaveButton: [{
5353
+ type: Input,
5354
+ args: ['has-save-button']
5355
+ }], ProjectLookup: [{
5356
+ type: Input,
5357
+ args: ['project-lookup']
5358
+ }], SaveFormEvent: [{
5359
+ type: Output,
5360
+ args: ['save-form-event']
5361
+ }] } });
5362
+
5619
5363
  class BreadcrumbComponent {
5620
5364
  constructor(eacSvc) {
5621
5365
  this.eacSvc = eacSvc;
@@ -5715,7 +5459,7 @@ class BreadcrumbComponent {
5715
5459
  async handleStateChange() { }
5716
5460
  }
5717
5461
  BreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BreadcrumbComponent, deps: [{ token: EaCService }], target: i0.ɵɵFactoryTarget.Component });
5718
- 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"] }] });
5462
+ BreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: BreadcrumbComponent, selector: "lcu-breadcrumb", inputs: { ApplicationLookup: ["application-lookup", "ApplicationLookup"], ProjectLookup: ["project-lookup", "ProjectLookup"], SelectedRoute: ["selected-route", "SelectedRoute"] }, ngImport: i0, template: "<div class=\"breadcrumb-container\" fxLayout=\"row wrap\">\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <ng-container *ngIf=\"State.Loading || Loading\">\n <mat-icon skeleton-text [effect]=\"SkeletonEffect\">home</mat-icon>\n\n <div skeleton-text [effect]=\"SkeletonEffect\">Enterprise Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State.Loading && Enterprise && !Loading\">\n <div class=\"crumb-name\" [routerLink]=\"['/enterprises']\">\n <mat-icon>home</mat-icon>\n\n {{ Enterprise?.Name }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"enterpriseMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #enterpriseMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n [routerLink]=\"['/enterprises']\"\n (click)=\"SetActiveEnterprise(ent.Lookup)\"\n *ngFor=\"let ent of State.Enterprises\"\n >\n <span>{{ ent.Name }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"ProjectLookup && SelectedProject\"\n fxLayout=\"row\"\n fxLayoutAlign=\"center center\"\n >\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Project Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div class=\"crumb-name\" [routerLink]=\"['/projects', ProjectLookup]\">\n {{ SelectedProject?.Project?.Name }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"projectMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #projectMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n *ngFor=\"let projectLookup of ProjectLookups\"\n [routerLink]=\"['/projects', projectLookup]\"\n >\n <span *ngIf=\"Projects[projectLookup]; let pro\">{{\n pro.Project?.Name\n }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n\n <div *ngIf=\"SelectedRoute\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Route Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div\n class=\"crumb-name\"\n [routerLink]=\"['/routes', SelectedRoute, ProjectLookup]\"\n >\n {{ SelectedRoute }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"routeMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #routeMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n *ngFor=\"let appRoute of Routes\"\n [routerLink]=\"['/routes', appRoute, ProjectLookup]\"\n >\n <span *ngIf=\"appRoute\">{{ appRoute }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"SelectedApplication && ApplicationLookup\"\n fxLayout=\"row\"\n fxLayoutAlign=\"center center\"\n >\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Application Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div\n class=\"crumb-name\"\n [routerLink]=\"[\n '/applications',\n ApplicationLookup,\n SelectedRoute,\n ProjectLookup\n ]\"\n >\n {{ SelectedApplication?.Application?.Name }}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"applicationMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #applicationMenu=\"matMenu\" xPosition=\"before\">\n <button\n mat-menu-item\n *ngFor=\"let appLookup of CurrentRouteApplicationLookups\"\n [routerLink]=\"[\n '/applications',\n appLookup,\n SelectedRoute,\n ProjectLookup\n ]\"\n >\n <span *ngIf=\"RoutedApplications[SelectedRoute][appLookup]; let app\">{{\n app.Application?.Name\n }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n</div>\n", styles: [":host ::ng-deep .breadcrumb-container{background-color:#ebecf0;margin:20px 20px 0}:host ::ng-deep .seperator{font-size:25px;padding:10px}:host ::ng-deep .crumb-name{cursor:pointer}:host ::ng-deep .mat-icon{display:inline-flex;vertical-align:middle}\n"], components: [{ type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4$4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4$4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$3.SkeletonTextDirective, selector: "[skeleton-text]", inputs: ["effect"] }, { type: i2$1.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4$4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
5719
5463
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BreadcrumbComponent, decorators: [{
5720
5464
  type: Component,
5721
5465
  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"] }]
@@ -5775,33 +5519,199 @@ class EditApplicationDialogComponent {
5775
5519
  CloseDialog() {
5776
5520
  this.dialogRef.close();
5777
5521
  }
5778
- HandleSaveApplicationEvent(event) {
5779
- console.log("event to save: ", event);
5780
- if (event.Code === 0) {
5781
- this.snackBar.open("Application Succesfully Updated", "Dismiss", {
5522
+ HandleSaveApplicationEvent(event) {
5523
+ console.log("event to save: ", event);
5524
+ if (event.Code === 0) {
5525
+ this.snackBar.open("Application Succesfully Updated", "Dismiss", {
5526
+ duration: 5000
5527
+ });
5528
+ this.CloseDialog();
5529
+ }
5530
+ else {
5531
+ this.ErrorMessage = event.Message;
5532
+ }
5533
+ }
5534
+ SaveApplication() {
5535
+ this.EditApplicationControl.SaveApplication();
5536
+ }
5537
+ }
5538
+ 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 });
5539
+ 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"] }] });
5540
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationDialogComponent, decorators: [{
5541
+ type: Component,
5542
+ 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: [""] }]
5543
+ }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialogRef }, { type: undefined, decorators: [{
5544
+ type: Inject,
5545
+ args: [MAT_DIALOG_DATA]
5546
+ }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { EditApplicationControl: [{
5547
+ type: ViewChild,
5548
+ args: [EditApplicationFormComponent]
5549
+ }] } });
5550
+
5551
+ class NewApplicationDialogComponent {
5552
+ constructor(eacSvc, dialogRef, data, snackBar) {
5553
+ this.eacSvc = eacSvc;
5554
+ this.dialogRef = dialogRef;
5555
+ this.data = data;
5556
+ this.snackBar = snackBar;
5557
+ this.HasSaveButton = false;
5558
+ }
5559
+ get Environment() {
5560
+ return this.State?.EaC?.Environments[this.data.environmentLookup];
5561
+ }
5562
+ get SourceControls() {
5563
+ return this.Environment?.Sources || {};
5564
+ }
5565
+ get SourceControlLookups() {
5566
+ return Object.keys(this.Environment.Sources || {});
5567
+ }
5568
+ get State() {
5569
+ return this.eacSvc.State;
5570
+ }
5571
+ ngOnInit() {
5572
+ this.SetupApplication(Guid.CreateRaw());
5573
+ }
5574
+ CloseDialog() {
5575
+ this.dialogRef.close();
5576
+ }
5577
+ SetupApplication(appLookup) {
5578
+ this.NewApplication = new EaCApplicationAsCode;
5579
+ this.NewApplicationLookup = appLookup;
5580
+ }
5581
+ SaveApplication() {
5582
+ const app = {
5583
+ Application: {
5584
+ Name: this.ApplicationFormControls.NameFormControl.value,
5585
+ Description: this.ApplicationFormControls.DescriptionFormControl.value,
5586
+ PriorityShift: 0,
5587
+ },
5588
+ AccessRightLookups: [],
5589
+ DataTokens: {},
5590
+ LicenseConfigurationLookups: [],
5591
+ LookupConfig: {
5592
+ IsPrivate: false,
5593
+ IsTriggerSignIn: false,
5594
+ PathRegex: `${this.ApplicationFormControls.RouteFormControl.value}.*`,
5595
+ QueryRegex: '',
5596
+ HeaderRegex: '',
5597
+ AllowedMethods: this.ProcessorDetailsFormControls.MethodsFormControl?.value
5598
+ ?.split(' ')
5599
+ .filter((v) => !!v),
5600
+ },
5601
+ Processor: {
5602
+ Type: this.ProcessorDetailsFormControls.ProcessorType,
5603
+ },
5604
+ };
5605
+ switch (app.Processor.Type) {
5606
+ case 'DFS':
5607
+ app.Processor.BaseHref = `${this.ApplicationFormControls.RouteFormControl.value}/`.replace('//', '/');
5608
+ app.Processor.DefaultFile =
5609
+ this.ProcessorDetailsFormControls.DefaultFileFormControl.value || 'index.html';
5610
+ app.LowCodeUnit = {
5611
+ Type: this.ProcessorDetailsFormControls.LCUType,
5612
+ };
5613
+ switch (app.LowCodeUnit.Type) {
5614
+ case 'GitHub':
5615
+ app.LowCodeUnit.Organization =
5616
+ this.SourceControls[this.ProcessorDetailsFormControls.SourceControlFormControl.value].Organization;
5617
+ app.LowCodeUnit.Repository =
5618
+ this.SourceControls[this.ProcessorDetailsFormControls.SourceControlFormControl.value].Repository;
5619
+ app.LowCodeUnit.Build = this.ProcessorDetailsFormControls.BuildFormControl.value;
5620
+ app.LowCodeUnit.Path =
5621
+ this.ProcessorDetailsFormControls.BuildPathFormControl.value;
5622
+ break;
5623
+ case 'NPM':
5624
+ app.LowCodeUnit.Package = this.ProcessorDetailsFormControls.PackageFormControl.value;
5625
+ app.LowCodeUnit.Version = this.ProcessorDetailsFormControls.VersionFormControl.value;
5626
+ break;
5627
+ case 'Zip':
5628
+ app.LowCodeUnit.ZipFile = this.ProcessorDetailsFormControls.ZipFileFormControl.value;
5629
+ break;
5630
+ }
5631
+ break;
5632
+ case 'OAuth':
5633
+ app.Processor.Scopes = this.ProcessorDetailsFormControls.ScopesFormControl.value.split(' ');
5634
+ app.Processor.TokenLookup = this.ProcessorDetailsFormControls.TokenLookupFormControl.value;
5635
+ app.LowCodeUnit = {
5636
+ Type: this.ProcessorDetailsFormControls.LCUType,
5637
+ };
5638
+ switch (app.LowCodeUnit.Type) {
5639
+ case 'GitHubOAuth':
5640
+ app.LowCodeUnit.ClientID = this.ProcessorDetailsFormControls.ClientIDFormControl.value;
5641
+ app.LowCodeUnit.ClientSecret = this.ProcessorDetailsFormControls.ClientSecretFormControl.value;
5642
+ break;
5643
+ }
5644
+ break;
5645
+ case 'Proxy':
5646
+ app.Processor.InboundPath = this.ProcessorDetailsFormControls.InboundPathFormControl.value;
5647
+ app.LowCodeUnit = {
5648
+ Type: this.ProcessorDetailsFormControls.LCUType,
5649
+ };
5650
+ switch (app.LowCodeUnit.Type) {
5651
+ case 'API':
5652
+ app.LowCodeUnit.APIRoot = this.ProcessorDetailsFormControls.APIRootFormControl.value;
5653
+ app.LowCodeUnit.Security = this.ProcessorDetailsFormControls.SecurityFormControl.value;
5654
+ break;
5655
+ case 'SPA':
5656
+ app.LowCodeUnit.SPARoot = this.ProcessorDetailsFormControls.SPARootFormControl.value;
5657
+ break;
5658
+ }
5659
+ break;
5660
+ case 'Redirect':
5661
+ app.Processor.Permanent = !!this.ProcessorDetailsFormControls.PermanentFormControl.value;
5662
+ app.Processor.PreserveMethod = !!this.ProcessorDetailsFormControls.PreserveMethodFormControl.value;
5663
+ app.Processor.Redirect = this.ProcessorDetailsFormControls.RedirectFormControl.value;
5664
+ break;
5665
+ }
5666
+ if (!app.LookupConfig.PathRegex.startsWith('/')) {
5667
+ app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
5668
+ }
5669
+ const saveAppReq = {
5670
+ ProjectLookup: this.data.projectLookup,
5671
+ Application: app,
5672
+ ApplicationLookup: this.NewApplicationLookup,
5673
+ };
5674
+ // this.HasBuildFormControl.value && taken out from below if statement
5675
+ if (this.ProcessorDetailsFormControls.ProcessorType !== 'redirect' && this.ProcessorDetailsFormControls.LCUType === 'GitHub') {
5676
+ if (app) {
5677
+ app.LowCodeUnit.SourceControlLookup = this.ProcessorDetailsFormControls.SourceControlFormControl.value;
5678
+ }
5679
+ }
5680
+ else if (app) {
5681
+ app.LowCodeUnit.SourceControlLookup = null;
5682
+ }
5683
+ // console.log("Save new App request: ", saveAppReq);
5684
+ this.eacSvc.SaveApplicationAsCode(saveAppReq).then(res => {
5685
+ this.handleSaveStatus(res);
5686
+ });
5687
+ }
5688
+ handleSaveStatus(status) {
5689
+ console.log("event to save: ", status);
5690
+ if (status.Code === 0) {
5691
+ this.snackBar.open("Application Succesfully Created", "Dismiss", {
5782
5692
  duration: 5000
5783
5693
  });
5784
5694
  this.CloseDialog();
5785
5695
  }
5786
5696
  else {
5787
- this.ErrorMessage = event.Message;
5697
+ this.ErrorMessage = status.Message;
5788
5698
  }
5789
5699
  }
5790
- SaveApplication() {
5791
- this.EditApplicationControl.SaveApplication();
5792
- }
5793
5700
  }
5794
- 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 });
5795
- 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"] }] });
5796
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EditApplicationDialogComponent, decorators: [{
5701
+ 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 });
5702
+ 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"] }] });
5703
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: NewApplicationDialogComponent, decorators: [{
5797
5704
  type: Component,
5798
- 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: [""] }]
5705
+ args: [{ selector: 'lcu-new-application-dialog', template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Create Application</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n <lcu-edit-application-form \n [current-route]=\"data.currentRoute\"\n [editing-application]=\"NewApplication\"\n [has-save-button]=\"HasSaveButton\"\n >\n </lcu-edit-application-form>\n\n <lcu-processor-details-form \n [editing-application]=\"NewApplication\"\n [editing-application-lookup]=\"NewApplicationLookup\"\n [has-save-button]=\"HasSaveButton\"\n [source-control-lookups]=\"SourceControlLookups\"\n [project-lookup]=\"data.projectLookup\"\n >\n </lcu-processor-details-form>\n\n <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error>\n</mat-dialog-content>\n\n<mat-dialog-actions\n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\"\n >\n Cancel\n </button>\n\n\n <button \n *ngIf=\"ProcessorDetailsFormControls && ApplicationFormControls && !State?.Loading\"\n mat-raised-button \n color=\"primary\"\n fxFlex=\"25%\"\n class=\"new-app-submit\" \n (click)=\"SaveApplication()\"\n [disabled]=\"\n !ProcessorDetailsFormControls?.ProcessorDetailsFormGroup?.valid \n || \n !ApplicationFormControls?.ApplicationFormGroup?.valid\n \"\n >\n Save Application\n </button>\n</mat-dialog-actions>\n\n\n", styles: [""] }]
5799
5706
  }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialogRef }, { type: undefined, decorators: [{
5800
5707
  type: Inject,
5801
5708
  args: [MAT_DIALOG_DATA]
5802
- }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { EditApplicationControl: [{
5709
+ }] }, { type: i3$1.MatSnackBar }]; }, propDecorators: { ApplicationFormControls: [{
5803
5710
  type: ViewChild,
5804
5711
  args: [EditApplicationFormComponent]
5712
+ }], ProcessorDetailsFormControls: [{
5713
+ type: ViewChild,
5714
+ args: [ProcessorDetailsFormComponent]
5805
5715
  }] } });
5806
5716
 
5807
5717
  class ProcessorDetailsDialogComponent {
@@ -5993,6 +5903,365 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
5993
5903
  }]
5994
5904
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.LCUServiceSettings }]; } });
5995
5905
 
5906
+ class FeedHeaderDialogComponent {
5907
+ constructor(appsFlowSvc, eacSvc, formBldr, dialogRef, data) {
5908
+ this.appsFlowSvc = appsFlowSvc;
5909
+ this.eacSvc = eacSvc;
5910
+ this.formBldr = formBldr;
5911
+ this.dialogRef = dialogRef;
5912
+ this.data = data;
5913
+ this.EditorConfig = {
5914
+ editable: true,
5915
+ spellcheck: true,
5916
+ height: '250px',
5917
+ minHeight: '0',
5918
+ maxHeight: 'auto',
5919
+ width: 'auto',
5920
+ minWidth: '0',
5921
+ translate: 'yes',
5922
+ enableToolbar: true,
5923
+ showToolbar: true,
5924
+ placeholder: 'Enter text here...',
5925
+ defaultParagraphSeparator: '',
5926
+ defaultFontName: '',
5927
+ defaultFontSize: '',
5928
+ fonts: [
5929
+ { class: 'arial', name: 'Arial' },
5930
+ { class: 'times-new-roman', name: 'Times New Roman' },
5931
+ { class: 'calibri', name: 'Calibri' },
5932
+ { class: 'comic-sans-ms', name: 'Comic Sans MS' }
5933
+ ],
5934
+ customClasses: [
5935
+ {
5936
+ name: 'quote',
5937
+ class: 'quote',
5938
+ },
5939
+ {
5940
+ name: 'redText',
5941
+ class: 'redText'
5942
+ },
5943
+ {
5944
+ name: 'titleText',
5945
+ class: 'titleText',
5946
+ tag: 'h1',
5947
+ },
5948
+ ],
5949
+ sanitize: true,
5950
+ toolbarPosition: 'top',
5951
+ toolbarHiddenButtons: [
5952
+ ['subscript', 'superscript'],
5953
+ ['fontSize']
5954
+ ]
5955
+ };
5956
+ this.SlicesCount = 5;
5957
+ this.Slices = {
5958
+ Sources: this.SlicesCount,
5959
+ };
5960
+ if (this.data.sourceControlLookup) {
5961
+ this.SourceControl = this.Environment?.Sources[this.data.sourceControlLookup];
5962
+ }
5963
+ }
5964
+ get ActionIconControl() {
5965
+ return this.FeedHeaderFormGroup?.controls.actionIcon;
5966
+ }
5967
+ get ActionLinkControl() {
5968
+ return this.FeedHeaderFormGroup?.controls.actionLink;
5969
+ }
5970
+ get ActionTextControl() {
5971
+ return this.FeedHeaderFormGroup?.controls.actionText;
5972
+ }
5973
+ get BaseBranchFormControl() {
5974
+ return this.FeedHeaderFormGroup.controls.baseBranch;
5975
+ }
5976
+ get CompareBranchFormControl() {
5977
+ return this.FeedHeaderFormGroup.controls.compareBranch;
5978
+ }
5979
+ get EditorControl() {
5980
+ return this.FeedHeaderFormGroup?.controls.editor;
5981
+ }
5982
+ get Environment() {
5983
+ return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
5984
+ }
5985
+ get NewBranchFormControl() {
5986
+ return this.FeedHeaderFormGroup.controls.newBranch;
5987
+ }
5988
+ get OrganizationFormControl() {
5989
+ return this.FeedHeaderFormGroup.controls.organization;
5990
+ }
5991
+ get ParentBranchFormControl() {
5992
+ return this.FeedHeaderFormGroup.controls.parentBranch;
5993
+ }
5994
+ get RepositoryFormControl() {
5995
+ return this.FeedHeaderFormGroup.controls.repository;
5996
+ }
5997
+ get SourceControlFormControl() {
5998
+ return this.FeedHeaderFormGroup.controls.sourceControl;
5999
+ }
6000
+ get SourceControlLookups() {
6001
+ return Object.keys(this.SourceControls || {});
6002
+ }
6003
+ get SourceControls() {
6004
+ return this.Environment?.Sources || {};
6005
+ }
6006
+ get SubtitleFormControl() {
6007
+ return this.FeedHeaderFormGroup.controls.subtitle;
6008
+ }
6009
+ get State() {
6010
+ return this.eacSvc.State;
6011
+ }
6012
+ get TitleFormControl() {
6013
+ return this.FeedHeaderFormGroup?.controls.title;
6014
+ }
6015
+ ngOnInit() {
6016
+ this.setupFeedHeaderForm();
6017
+ }
6018
+ CloseDialog() {
6019
+ this.dialogRef.close();
6020
+ }
6021
+ HandleAction() {
6022
+ if (this.ActionLinkControl.value.startsWith('http')) {
6023
+ window.open(this.ActionLinkControl.value, '_blank');
6024
+ }
6025
+ else {
6026
+ window.location.href = this.ActionLinkControl.value;
6027
+ }
6028
+ }
6029
+ PullRequestSourceControlChanged(event) {
6030
+ this.SourceControl = this.SourceControlFormControl.value;
6031
+ this.listBranches();
6032
+ }
6033
+ FeatureBranchSourceControlChanged(event) {
6034
+ this.SourceControl = this.SourceControlFormControl.value;
6035
+ this.listOrganizations();
6036
+ }
6037
+ Submit() {
6038
+ console.log("Title: ", this.TitleFormControl.value);
6039
+ console.log("Editor: ", this.EditorControl.value);
6040
+ }
6041
+ OrganizationChanged(event) {
6042
+ this.RepositoryFormControl.reset();
6043
+ this.listRepositories();
6044
+ }
6045
+ RepositoryChanged(event) {
6046
+ this.listBranches();
6047
+ }
6048
+ //HELPERS
6049
+ listBranches() {
6050
+ // this.Loading = true;
6051
+ this.appsFlowSvc
6052
+ .ListBranches(this.SourceControl?.Organization, this.SourceControl?.Repository)
6053
+ .subscribe((response) => {
6054
+ this.BranchOptions = response.Model;
6055
+ // this.Loading = false;
6056
+ // if (this.EditingSourceControl?.Branches?.length > 0) {
6057
+ // this.SelectedBranches = this.EditingSourceControl.Branches;
6058
+ // } else if (this.BranchOptions?.length === 1) {
6059
+ // this.BranchesFormControl.setValue(this.BranchOptions[0].Name);
6060
+ // this.SelectedBranches = [this.BranchOptions[0].Name];
6061
+ // }
6062
+ });
6063
+ }
6064
+ listOrganizations() {
6065
+ // this.Loading = true;
6066
+ this.appsFlowSvc
6067
+ .ListOrganizations()
6068
+ .subscribe((response) => {
6069
+ this.OrganizationOptions = response.Model;
6070
+ console.log("Organization Options: ", this.OrganizationOptions);
6071
+ // this.Loading = false;
6072
+ if (this.SourceControl?.Organization) {
6073
+ setTimeout(() => {
6074
+ this.OrganizationFormControl.setValue(this.SourceControl.Organization);
6075
+ this.listRepositories(this.SourceControl?.Repository);
6076
+ }, 0);
6077
+ }
6078
+ });
6079
+ }
6080
+ listRepositories(activeRepo = null) {
6081
+ // this.Loading = true;
6082
+ this.appsFlowSvc
6083
+ .ListRepositories(this.OrganizationFormControl.value)
6084
+ .subscribe((response) => {
6085
+ this.RepositoryOptions = response.Model;
6086
+ // this.Loading = false;
6087
+ if (activeRepo) {
6088
+ setTimeout(() => {
6089
+ this.RepositoryFormControl.setValue(activeRepo);
6090
+ this.listBranches();
6091
+ }, 0);
6092
+ }
6093
+ });
6094
+ }
6095
+ setupFeedHeaderForm() {
6096
+ this.FeedHeaderFormGroup = this.formBldr.group({});
6097
+ switch (this.data.type) {
6098
+ case "announcement":
6099
+ this.setupAnnouncementForm();
6100
+ break;
6101
+ case "pr":
6102
+ this.setupPRForm();
6103
+ break;
6104
+ case "issue":
6105
+ this.setupIssueForm();
6106
+ break;
6107
+ case "fb":
6108
+ this.setupFeatureBranchForm();
6109
+ break;
6110
+ default:
6111
+ //
6112
+ break;
6113
+ }
6114
+ }
6115
+ setupAnnouncementForm() {
6116
+ this.setupIssueForm();
6117
+ this.FeedHeaderFormGroup.addControl('subtitle', this.formBldr.control(''));
6118
+ this.FeedHeaderFormGroup.addControl('actionText', this.formBldr.control(''));
6119
+ this.FeedHeaderFormGroup.addControl('actionLink', this.formBldr.control(''));
6120
+ this.FeedHeaderFormGroup.addControl('actionIcon', this.formBldr.control(''));
6121
+ }
6122
+ setupPRForm() {
6123
+ this.listBranches();
6124
+ this.setupBasicForm();
6125
+ this.FeedHeaderFormGroup.addControl('baseBranch', this.formBldr.control(''));
6126
+ this.FeedHeaderFormGroup.addControl('compareBranch', this.formBldr.control(''));
6127
+ }
6128
+ setupBasicForm() {
6129
+ this.FeedHeaderFormGroup.addControl('title', this.formBldr.control('', [Validators.required]));
6130
+ this.FeedHeaderFormGroup.addControl('editor', this.formBldr.control(''));
6131
+ }
6132
+ setupIssueForm() {
6133
+ this.setupBasicForm();
6134
+ this.setupSourceControlForm();
6135
+ }
6136
+ setupFeatureBranchForm() {
6137
+ this.setupSourceControlForm();
6138
+ this.FeedHeaderFormGroup.addControl('organization', this.formBldr.control(''));
6139
+ this.FeedHeaderFormGroup.addControl('repository', this.formBldr.control(''));
6140
+ this.FeedHeaderFormGroup.addControl('newBranch', this.formBldr.control(''));
6141
+ this.FeedHeaderFormGroup.addControl('parentBranch', this.formBldr.control(''));
6142
+ }
6143
+ setupSourceControlForm() {
6144
+ this.FeedHeaderFormGroup.addControl('sourceControl', this.formBldr.control(''));
6145
+ }
6146
+ }
6147
+ 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 });
6148
+ FeedHeaderDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: FeedHeaderDialogComponent, selector: "lcu-feed-header-dialog", ngImport: i0, template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>{{data.dialogTitle}}</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n <form [formGroup]=\"FeedHeaderFormGroup\" >\n\n <!-- ISSUE FORM -->\n <ng-container *ngIf=\"data.type === 'issue' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"sc\">\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 === 'pr' \">\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]=\"sc\">\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=\"baseBranch\" 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=\"compareBranch\" 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 === 'fb' \">\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]=\"sc\">\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>Branch</mat-label>\n <mat-select formControlName=\"parentBranch\" 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=\"newBranch\"\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 } });
6149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedHeaderDialogComponent, decorators: [{
6150
+ type: Component,
6151
+ args: [{ selector: 'lcu-feed-header-dialog', template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>{{data.dialogTitle}}</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n <form [formGroup]=\"FeedHeaderFormGroup\" >\n\n <!-- ISSUE FORM -->\n <ng-container *ngIf=\"data.type === 'issue' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"sc\">\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 === 'pr' \">\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]=\"sc\">\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=\"baseBranch\" 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=\"compareBranch\" 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 === 'fb' \">\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]=\"sc\">\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>Branch</mat-label>\n <mat-select formControlName=\"parentBranch\" 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=\"newBranch\"\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: [""] }]
6152
+ }], ctorParameters: function () { return [{ type: ApplicationsFlowService }, { type: EaCService }, { type: i1$2.FormBuilder }, { type: i2$3.MatDialogRef }, { type: undefined, decorators: [{
6153
+ type: Inject,
6154
+ args: [MAT_DIALOG_DATA]
6155
+ }] }]; } });
6156
+
6157
+ class FeedHeaderComponent {
6158
+ constructor(eacSvc, dialog) {
6159
+ this.eacSvc = eacSvc;
6160
+ this.dialog = dialog;
6161
+ this.InputLabel = "Create Team Announcement";
6162
+ this.SkeletonEffect = "wave";
6163
+ // this.selectedBtn = "pr-btn";
6164
+ }
6165
+ get ActiveEnvironmentLookup() {
6166
+ // TODO: Eventually support multiple environments
6167
+ const envLookups = Object.keys(this.State?.EaC?.Environments || {});
6168
+ return envLookups[0];
6169
+ }
6170
+ get State() {
6171
+ return this.eacSvc.State;
6172
+ }
6173
+ ngOnInit() {
6174
+ }
6175
+ ngAfterViewInit() {
6176
+ this.addSelectBtn();
6177
+ }
6178
+ CreateFeatureBranch() {
6179
+ this.removeSelectedBtn();
6180
+ this.InputLabel = "Create Feature Branch";
6181
+ this.selectedBtn = "fb-btn";
6182
+ this.addSelectBtn();
6183
+ console.log("create feature branch selected");
6184
+ this.OpenFHDialog('fb');
6185
+ }
6186
+ OpenIssue() {
6187
+ this.removeSelectedBtn();
6188
+ this.InputLabel = "Open Issue";
6189
+ this.selectedBtn = "oi-btn";
6190
+ this.addSelectBtn();
6191
+ console.log("open issue selected");
6192
+ this.OpenFHDialog('issue');
6193
+ }
6194
+ CreatePullRequest() {
6195
+ this.removeSelectedBtn();
6196
+ this.InputLabel = "Create Pull Request";
6197
+ this.selectedBtn = "pr-btn";
6198
+ this.addSelectBtn();
6199
+ console.log("create pull request selected");
6200
+ this.OpenFHDialog('pr');
6201
+ }
6202
+ CreateNewApp() {
6203
+ const dialogRef = this.dialog.open(NewApplicationDialogComponent, {
6204
+ width: '600px',
6205
+ data: {
6206
+ environmentLookup: this.ActiveEnvironmentLookup,
6207
+ },
6208
+ });
6209
+ dialogRef.afterClosed().subscribe((result) => {
6210
+ // console.log('The dialog was closed');
6211
+ // console.log("result:", result)
6212
+ });
6213
+ }
6214
+ OpenFHDialog(modalType) {
6215
+ const dialogRef = this.dialog.open(FeedHeaderDialogComponent, {
6216
+ width: '600px',
6217
+ data: {
6218
+ dialogTitle: this.InputLabel,
6219
+ type: modalType
6220
+ },
6221
+ });
6222
+ dialogRef.afterClosed().subscribe((result) => {
6223
+ // console.log('The dialog was closed');
6224
+ // console.log("result:", result)
6225
+ });
6226
+ }
6227
+ RouteToPath(path) {
6228
+ window.location.href = path;
6229
+ }
6230
+ Submit() {
6231
+ console.log("submitting: ", this.value);
6232
+ switch (this.selectedBtn) {
6233
+ case "pr-btn":
6234
+ //Pull request
6235
+ console.log("creating pull request: ", this.value);
6236
+ break;
6237
+ case "oi-btn":
6238
+ //Open Issue
6239
+ console.log("Open issue: ", this.value);
6240
+ break;
6241
+ case "fb-btn":
6242
+ //Feature Branch
6243
+ console.log("creating feature branch: ", this.value);
6244
+ break;
6245
+ default:
6246
+ console.log("hmm");
6247
+ break;
6248
+ }
6249
+ }
6250
+ //HELPERS
6251
+ addSelectBtn() {
6252
+ document.getElementById(this.selectedBtn)?.classList.add('selected');
6253
+ }
6254
+ removeSelectedBtn() {
6255
+ document.getElementById(this.selectedBtn)?.classList.remove('selected');
6256
+ }
6257
+ }
6258
+ 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 });
6259
+ FeedHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: FeedHeaderComponent, selector: "lcu-feed-header", ngImport: i0, template: "<mat-card class=\"social-card\">\n <ng-container *ngIf=\"!State?.Loading\">\n <div class=\"gh-card-container\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <mat-icon fxFlex=\"15%\" class=\"gh-icon\" color=\"primary\">error_outline</mat-icon>\n <div fxFlex=\"85%\" class=\"gh-card-main-content\">\n <button \n mat-button \n class=\"main-btn\"\n (click)=\"OpenFHDialog('announcement')\" \n color=\"primary\"\n >{{ InputLabel }}</button>\n\n <!-- <mat-form-field appearance=\"fill\" class=\"gh-input\">\n <mat-label>{{ InputLabel }}</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"value\" (click)=\"OpenFHDialog('announcement')\"/>\n </mat-form-field> -->\n </div>\n\n <!-- <button\n fxFlex=\"15%\"\n mat-button\n (click)=\"Submit()\"\n id=\"submit-btn\"\n color=\"primary\"\n >\n Submit\n </button> -->\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <button \n mat-button \n (click)=\"CreatePullRequest()\" \n id=\"pr-btn\" \n color=\"primary\"\n >\n Pull Request\n </button>\n\n <button \n mat-button \n (click)=\"OpenIssue()\" \n id=\"oi-btn\" \n color=\"primary\"\n >\n Open Issue\n </button>\n\n <button \n mat-button \n (click)=\"CreateFeatureBranch()\" \n id=\"fb-btn\" \n color=\"primary\"\n >\n Feature Branch\n </button>\n\n <!-- <button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"menu\">\n <mat-icon>more_horiz</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button class=\"gh-menu-action\" mat-menu-item (click)=\"CreateNewApp()\">\n Create New App\n </button>\n\n <button\n class=\"gh-menu-action\"\n mat-menu-item\n (click)=\"RouteToPath('/dashboard/create-project')\"\n >\n Create Project\n </button>\n </mat-menu> -->\n </mat-card-actions>\n </ng-container>\n\n <!-- SKELETON -->\n <ng-container *ngIf=\"State?.Loading\">\n <div id=\"gh-card-skeleton\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <skeleton-avatar\n class=\"gh-icon\"\n [showIcon]=\"false\"\n [effect]=\"SkeletonEffect\"\n ></skeleton-avatar>\n\n <div fxFlex=\"85%\" class=\"gh-card-main-content\">\n <skeleton-block\n height=\"60px\"\n [effect]=\"SkeletonEffect\"\n ></skeleton-block>\n </div>\n\n <!-- <div\n skeleton-text\n fxFlex=\"15%\"\n [effect]=\"SkeletonEffect\"\n style=\"margin: 0px 10px\"\n >\n Submit\n </div> -->\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Pull Request</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Open Issue</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Feature Branch</div>\n <!-- <div skeleton-text [effect]=\"SkeletonEffect\">\n <mat-icon>more_horiz</mat-icon>\n </div> -->\n </div>\n </ng-container>\n</mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:25px;width:25px;font-size:25px;cursor:pointer}.gh-icon{width:60px;height:60px;font-size:60px;text-align:center}.gh-input{width:90%}.main-btn{width:90%;height:50px;border-radius:30px;border:1px solid}.selected{border:1px solid green}.gh-input ::ng-deep .mat-form-field-flex{border:1px solid;border-radius:30px!important}.gh-input ::ng-deep .mat-form-field-wrapper{padding-bottom:0!important}.gh-input ::ng-deep .mat-form-field-underline{display:none}\n"], components: [{ type: i1$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4$3.SkeletonAvatarComponent, selector: "skeleton-avatar", inputs: ["size", "color", "showIcon", "iconColor", "borderRadius", "effect"] }, { type: i4$3.SkeletonBlockComponent, selector: "skeleton-block", inputs: ["width", "height", "effect", "borderRadius"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i4$3.SkeletonTextDirective, selector: "[skeleton-text]", inputs: ["effect"] }] });
6260
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedHeaderComponent, decorators: [{
6261
+ type: Component,
6262
+ args: [{ selector: 'lcu-feed-header', template: "<mat-card class=\"social-card\">\n <ng-container *ngIf=\"!State?.Loading\">\n <div class=\"gh-card-container\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <mat-icon fxFlex=\"15%\" class=\"gh-icon\" color=\"primary\">error_outline</mat-icon>\n <div fxFlex=\"85%\" class=\"gh-card-main-content\">\n <button \n mat-button \n class=\"main-btn\"\n (click)=\"OpenFHDialog('announcement')\" \n color=\"primary\"\n >{{ InputLabel }}</button>\n\n <!-- <mat-form-field appearance=\"fill\" class=\"gh-input\">\n <mat-label>{{ InputLabel }}</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"value\" (click)=\"OpenFHDialog('announcement')\"/>\n </mat-form-field> -->\n </div>\n\n <!-- <button\n fxFlex=\"15%\"\n mat-button\n (click)=\"Submit()\"\n id=\"submit-btn\"\n color=\"primary\"\n >\n Submit\n </button> -->\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <button \n mat-button \n (click)=\"CreatePullRequest()\" \n id=\"pr-btn\" \n color=\"primary\"\n >\n Pull Request\n </button>\n\n <button \n mat-button \n (click)=\"OpenIssue()\" \n id=\"oi-btn\" \n color=\"primary\"\n >\n Open Issue\n </button>\n\n <button \n mat-button \n (click)=\"CreateFeatureBranch()\" \n id=\"fb-btn\" \n color=\"primary\"\n >\n Feature Branch\n </button>\n\n <!-- <button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"menu\">\n <mat-icon>more_horiz</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button class=\"gh-menu-action\" mat-menu-item (click)=\"CreateNewApp()\">\n Create New App\n </button>\n\n <button\n class=\"gh-menu-action\"\n mat-menu-item\n (click)=\"RouteToPath('/dashboard/create-project')\"\n >\n Create Project\n </button>\n </mat-menu> -->\n </mat-card-actions>\n </ng-container>\n\n <!-- SKELETON -->\n <ng-container *ngIf=\"State?.Loading\">\n <div id=\"gh-card-skeleton\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <skeleton-avatar\n class=\"gh-icon\"\n [showIcon]=\"false\"\n [effect]=\"SkeletonEffect\"\n ></skeleton-avatar>\n\n <div fxFlex=\"85%\" class=\"gh-card-main-content\">\n <skeleton-block\n height=\"60px\"\n [effect]=\"SkeletonEffect\"\n ></skeleton-block>\n </div>\n\n <!-- <div\n skeleton-text\n fxFlex=\"15%\"\n [effect]=\"SkeletonEffect\"\n style=\"margin: 0px 10px\"\n >\n Submit\n </div> -->\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Pull Request</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Open Issue</div>\n <div skeleton-text [effect]=\"SkeletonEffect\">Feature Branch</div>\n <!-- <div skeleton-text [effect]=\"SkeletonEffect\">\n <mat-icon>more_horiz</mat-icon>\n </div> -->\n </div>\n </ng-container>\n</mat-card>\n", styles: [":host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host ::ng-deep .main-slot-container{padding:10px}:host ::ng-deep .slot-header{align-items:center}:host ::ng-deep .slot-content{width:100%}:host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host ::ng-deep .action-icon{height:25px;width:25px;font-size:25px;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"] }]
6263
+ }], ctorParameters: function () { return [{ type: EaCService }, { type: i2$3.MatDialog }]; } });
6264
+
5996
6265
  class ApplicationsFlowModule {
5997
6266
  static forRoot() {
5998
6267
  return {
@@ -6037,7 +6306,7 @@ ApplicationsFlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
6037
6306
  ProjectInfoCardComponent,
6038
6307
  AnalyticsCardComponent,
6039
6308
  FeedCardSmComponent,
6040
- GhControlComponent,
6309
+ FeedHeaderComponent,
6041
6310
  MainFeedCardComponent,
6042
6311
  TwoColumnHeaderComponent,
6043
6312
  CardCarouselComponent,
@@ -6056,7 +6325,9 @@ ApplicationsFlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
6056
6325
  ProcessorDetailsDialogComponent,
6057
6326
  SkeletonFeedCardComponent,
6058
6327
  UpgradeDialogComponent,
6059
- EmulatedDevicesToggleComponent], imports: [ClipboardModule,
6328
+ EmulatedDevicesToggleComponent,
6329
+ FeedHeaderDialogComponent], imports: [AngularEditorModule,
6330
+ ClipboardModule,
6060
6331
  FathymSharedModule,
6061
6332
  FormsModule,
6062
6333
  ReactiveFormsModule,
@@ -6094,7 +6365,8 @@ ApplicationsFlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
6094
6365
  ProjectInfoCardComponent,
6095
6366
  AnalyticsCardComponent,
6096
6367
  FeedCardSmComponent,
6097
- GhControlComponent,
6368
+ FeedHeaderComponent,
6369
+ FeedHeaderDialogComponent,
6098
6370
  MainFeedCardComponent,
6099
6371
  TwoColumnHeaderComponent,
6100
6372
  CardCarouselComponent,
@@ -6113,8 +6385,10 @@ ApplicationsFlowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
6113
6385
  ProcessorDetailsDialogComponent,
6114
6386
  SkeletonFeedCardComponent,
6115
6387
  UpgradeDialogComponent,
6116
- EmulatedDevicesToggleComponent] });
6388
+ EmulatedDevicesToggleComponent,
6389
+ FeedHeaderDialogComponent] });
6117
6390
  ApplicationsFlowModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ApplicationsFlowModule, imports: [[
6391
+ AngularEditorModule,
6118
6392
  ClipboardModule,
6119
6393
  FathymSharedModule,
6120
6394
  FormsModule,
@@ -6158,7 +6432,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6158
6432
  ProjectInfoCardComponent,
6159
6433
  AnalyticsCardComponent,
6160
6434
  FeedCardSmComponent,
6161
- GhControlComponent,
6435
+ FeedHeaderComponent,
6162
6436
  MainFeedCardComponent,
6163
6437
  TwoColumnHeaderComponent,
6164
6438
  CardCarouselComponent,
@@ -6177,9 +6451,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6177
6451
  ProcessorDetailsDialogComponent,
6178
6452
  SkeletonFeedCardComponent,
6179
6453
  UpgradeDialogComponent,
6180
- EmulatedDevicesToggleComponent
6454
+ EmulatedDevicesToggleComponent,
6455
+ FeedHeaderDialogComponent
6181
6456
  ],
6182
6457
  imports: [
6458
+ AngularEditorModule,
6183
6459
  ClipboardModule,
6184
6460
  FathymSharedModule,
6185
6461
  FormsModule,
@@ -6220,7 +6496,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6220
6496
  ProjectInfoCardComponent,
6221
6497
  AnalyticsCardComponent,
6222
6498
  FeedCardSmComponent,
6223
- GhControlComponent,
6499
+ FeedHeaderComponent,
6500
+ FeedHeaderDialogComponent,
6224
6501
  MainFeedCardComponent,
6225
6502
  TwoColumnHeaderComponent,
6226
6503
  CardCarouselComponent,
@@ -6239,7 +6516,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6239
6516
  ProcessorDetailsDialogComponent,
6240
6517
  SkeletonFeedCardComponent,
6241
6518
  UpgradeDialogComponent,
6242
- EmulatedDevicesToggleComponent
6519
+ EmulatedDevicesToggleComponent,
6520
+ FeedHeaderDialogComponent
6243
6521
  ],
6244
6522
  entryComponents: [
6245
6523
  ApplicationsFlowProjectsElementComponent,
@@ -6266,7 +6544,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
6266
6544
  ProjectInfoCardComponent,
6267
6545
  AnalyticsCardComponent,
6268
6546
  FeedCardSmComponent,
6269
- GhControlComponent,
6547
+ FeedHeaderComponent,
6270
6548
  MainFeedCardComponent,
6271
6549
  TwoColumnHeaderComponent,
6272
6550
  CardCarouselComponent,
@@ -6328,5 +6606,5 @@ class FormModel {
6328
6606
  * Generated bundle index. Do not edit.
6329
6607
  */
6330
6608
 
6331
- 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 };
6609
+ 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, FeedHeaderComponent, FeedHeaderDialogComponent, FeedItem, FeedItemAction, FeedItemContributor, FeedItemTab, FlowToolComponent, FormActionsModel, FormCardComponent, FormModel, FormValuesModel, FormsService, GitAuthComponent, GitHubBranch, GitHubOrganization, GitHubRepository, GitHubSetupState, GitHubWorkflowRun, HeaderComponent, HostingDetailsFormGroupComponent, IoTEnsembleService, MainFeedCardComponent, NPMService, NewApplicationDialogComponent, NpmPackageSelectComponent, ProcessorDetailsDialogComponent, ProcessorDetailsFormComponent, ProjectActionsModel, ProjectHostingDetails, ProjectHostingOption, ProjectHostingOptionInput, ProjectInfoCardComponent, ProjectItemsComponent, ProjectNameComponent, ProjectService, ProjectTabsComponent, RecentActivitiesComponent, RootDirectoryComponent, SELECTOR_APPLICATIONS_FLOW_PROJECTS_ELEMENT, SaveApplicationAsCodeEventRequest, SaveDFSModifierEventRequest, SaveEnvironmentAsCodeEventRequest, SaveProjectAsCodeEventRequest, SecurityToggleComponent, SkeletonFeedCardComponent, SlottedCardComponent, SourceControlDialogComponent, SourceControlFormComponent, SourceControlFormControlsComponent, ThreeColumnComponent, TwoColumnHeaderComponent, UnpackLowCodeUnitRequest, UpgradeDialogComponent, UserFeedResponse };
6332
6610
  //# sourceMappingURL=lowcodeunit-applications-flow-common.mjs.map