@huntsman-cancer-institute/cod 17.2.6 → 17.3.0

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.
@@ -1,9 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Pipe, InjectionToken, isDevMode, Injectable, Inject, EventEmitter, Directive, Input, Output, ViewChild, Component, ViewEncapsulation, forwardRef, HostBinding, NgModule } from '@angular/core';
2
+ import { Pipe, InjectionToken, isDevMode, Injectable, Inject, EventEmitter, Directive, Input, Output, ViewChild, Component, ViewEncapsulation, HostBinding, NgModule, forwardRef } from '@angular/core';
3
3
  import * as i4 from '@angular/common';
4
4
  import { DatePipe, CommonModule } from '@angular/common';
5
5
  import * as i5 from '@angular/forms';
6
- import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
6
+ import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
7
7
  import * as i3 from '@angular/router';
8
8
  import { RouterModule } from '@angular/router';
9
9
  import * as i6 from '@angular/material/datepicker';
@@ -15,7 +15,6 @@ import * as i3$1 from 'ag-grid-angular';
15
15
  import { AgGridModule } from 'ag-grid-angular';
16
16
  import * as i2$1 from '@ng-bootstrap/ng-bootstrap';
17
17
  import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
18
- import * as i3$2 from '@huntsman-cancer-institute/input';
19
18
  import { DropdownModule, SelectModule } from '@huntsman-cancer-institute/input';
20
19
  import * as i4$1 from '@huntsman-cancer-institute/misc';
21
20
  import { MiscModule } from '@huntsman-cancer-institute/misc';
@@ -24,6 +23,7 @@ import { first } from 'rxjs/operators';
24
23
  import * as i2 from '@angular/common/http';
25
24
  import { HttpParams } from '@angular/common/http';
26
25
  import * as i1 from '@huntsman-cancer-institute/dictionary-service';
26
+ import { DictionaryServiceModule } from '@huntsman-cancer-institute/dictionary-service';
27
27
  import { parse } from 'date-fns';
28
28
 
29
29
  /**
@@ -98,6 +98,7 @@ class AttributeService {
98
98
  this.updatedAttributeValues = [];
99
99
  this.slicedAttributeValues = [];
100
100
  this.uniqueId = 0;
101
+ this._editButtonsEnabled = true; //Preserve old default
101
102
  if (isDevMode()) {
102
103
  console.debug("Created New AttributeService");
103
104
  }
@@ -108,6 +109,16 @@ class AttributeService {
108
109
  this.notifyAttributes();
109
110
  }
110
111
  }
112
+ get editButtonsEnabled() {
113
+ return this._editButtonsEnabled;
114
+ }
115
+ ;
116
+ set editButtonsEnabled(enabled) {
117
+ if (enabled !== this._editButtonsEnabled) {
118
+ this._editButtonsEnabled = enabled;
119
+ this.notifyAttributes();
120
+ }
121
+ }
111
122
  getAttributeValueCountByAttribute(idAttribute) {
112
123
  return this.http.get(this.attributeEndpoint + "attribute-value-count", { params: new HttpParams().set("idAttribute", idAttribute.toString()) });
113
124
  }
@@ -565,6 +576,7 @@ class AttributeService {
565
576
  if (!attributeValueSet.attributeValues) {
566
577
  attributeValueSet.attributeValues = [];
567
578
  }
579
+ this.checkAvsEditable();
568
580
  this.attributeValueSetSubject.next(attributeValueSet);
569
581
  this.loadingSubject.next(false);
570
582
  this.dirty.next(false);
@@ -574,6 +586,17 @@ class AttributeService {
574
586
  this.attributeValueSetSubject.next(undefined);
575
587
  });
576
588
  }
589
+ checkAvsEditable() {
590
+ let url = this.attributeEndpoint + "attribute-value-set/" + this.idAttributeValueSet + "/can-edit";
591
+ let ac = this.attributeConfigurationSubject.getValue();
592
+ let queryParams = new HttpParams()
593
+ .set("codeAttributeSecurityContext", ac.codeAttributeSecurityContext)
594
+ .set("codeAttributeContext", ac.codeAttributeContext)
595
+ .set("idParentObject", (this.idParentObject) ? this.idParentObject.toString() : "");
596
+ this.http.get(url, { params: queryParams }).subscribe((canEdit) => {
597
+ this.editButtonsEnabled = canEdit;
598
+ });
599
+ }
577
600
  getBaseWindowDimension(baseWindowTemplate) {
578
601
  this.http.get(this.attributeEndpoint + "base-window-dimension", { params: new HttpParams().set("baseWindowTemplate", baseWindowTemplate) })
579
602
  .subscribe((dimension) => {
@@ -1933,7 +1956,8 @@ class AttributeEditComponent extends AttributeBase {
1933
1956
  <div *ngIf="attribute.displayName" class="d-flex col-md-6">
1934
1957
  {{attribute.displayName}}
1935
1958
  </div>
1936
- <div class="d-flex col-md-6">
1959
+
1960
+ <div *ngIf="(attribute.h == undefined || (attribute.h && attribute.h <= 25))" class="d-flex col-md-6">
1937
1961
  <input #inputRef
1938
1962
  type="text"
1939
1963
  [ngModel]="attributeValues[0].valueString"
@@ -1941,6 +1965,21 @@ class AttributeEditComponent extends AttributeBase {
1941
1965
  [disabled]="!editInline || attribute.isCalculated === 'Y'"
1942
1966
  />
1943
1967
  </div>
1968
+
1969
+ <div *ngIf="(attribute.h && attribute.h > 25)" class="d-flex col-md-6">
1970
+ <textarea
1971
+ #inputRef
1972
+ type="text"
1973
+ spellcheck="spellcheck"
1974
+ lang="en"
1975
+ [ngModel]="attributeValues[0].valueString"
1976
+ (ngModelChange)="valueStringChange($event)"
1977
+ [disabled]="!editInline || attribute.isCalculated === 'Y'"
1978
+ style="width: 500px; height: 125px; resize: none;"
1979
+ >
1980
+ </textarea>
1981
+ </div>
1982
+
1944
1983
  </div>
1945
1984
  </ng-container>
1946
1985
 
@@ -2263,7 +2302,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
2263
2302
  <div *ngIf="attribute.displayName" class="d-flex col-md-6">
2264
2303
  {{attribute.displayName}}
2265
2304
  </div>
2266
- <div class="d-flex col-md-6">
2305
+
2306
+ <div *ngIf="(attribute.h == undefined || (attribute.h && attribute.h <= 25))" class="d-flex col-md-6">
2267
2307
  <input #inputRef
2268
2308
  type="text"
2269
2309
  [ngModel]="attributeValues[0].valueString"
@@ -2271,6 +2311,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
2271
2311
  [disabled]="!editInline || attribute.isCalculated === 'Y'"
2272
2312
  />
2273
2313
  </div>
2314
+
2315
+ <div *ngIf="(attribute.h && attribute.h > 25)" class="d-flex col-md-6">
2316
+ <textarea
2317
+ #inputRef
2318
+ type="text"
2319
+ spellcheck="spellcheck"
2320
+ lang="en"
2321
+ [ngModel]="attributeValues[0].valueString"
2322
+ (ngModelChange)="valueStringChange($event)"
2323
+ [disabled]="!editInline || attribute.isCalculated === 'Y'"
2324
+ style="width: 500px; height: 125px; resize: none;"
2325
+ >
2326
+ </textarea>
2327
+ </div>
2328
+
2274
2329
  </div>
2275
2330
  </ng-container>
2276
2331
 
@@ -2607,9 +2662,6 @@ class AttributeAbsoluteComponent extends AttributeBase {
2607
2662
  refresh() {
2608
2663
  super.refresh();
2609
2664
  this.renderer.setStyle(this.elementRef.nativeElement, "position", "absolute");
2610
- if (this.attribute.tabOrder !== undefined) {
2611
- this.renderer.setStyle(this.elementRef.nativeElement, "z-index", 10 + this.attribute.tabOrder);
2612
- }
2613
2665
  if (this.attribute.x !== undefined) {
2614
2666
  this.renderer.setStyle(this.elementRef.nativeElement, "left", this.attribute.x + "px");
2615
2667
  }
@@ -2639,6 +2691,9 @@ class AttributeAbsoluteComponent extends AttributeBase {
2639
2691
  if (this.nativeSelectRef) {
2640
2692
  this.nativeSelectRef.setHeight(this.attribute.h);
2641
2693
  }
2694
+ if (this.attribute.isMultiValue === 'Y') {
2695
+ this.renderer.setStyle(this.elementRef.nativeElement, 'height', this.attribute.h + 'px');
2696
+ }
2642
2697
  }
2643
2698
  }
2644
2699
  /**
@@ -2917,7 +2972,6 @@ class AttributeAbsoluteComponent extends AttributeBase {
2917
2972
  <div class="d-flex flex-shrink-0">
2918
2973
  <input type="checkbox"
2919
2974
  [checked]="attributeChoice.value"
2920
- [disabled]="!editInline || attribute.isCalculated === 'Y'"
2921
2975
  (change)="valueMultiChoiceChange(attributeChoice)"
2922
2976
  [disabled]="!editInline || attribute.isCalculated === 'Y'"
2923
2977
  class="form-control checkbox"/>
@@ -2943,7 +2997,6 @@ class AttributeAbsoluteComponent extends AttributeBase {
2943
2997
  <div class="d-flex flex-shrink-0">
2944
2998
  <input type="checkbox"
2945
2999
  [checked]="entry.checked"
2946
- [disabled]="!editInline || attribute.isCalculated === 'Y'"
2947
3000
  (change)="valueMultiDictChange(entry)"
2948
3001
  [disabled]="!editInline || attribute.isCalculated === 'Y'"
2949
3002
  class="form-control checkbox" />
@@ -2982,17 +3035,27 @@ class AttributeAbsoluteComponent extends AttributeBase {
2982
3035
  <!-- Grid -->
2983
3036
  <ng-container *ngIf="attribute.codeAttributeDataType === 'GA'">
2984
3037
  <div #attributeRef class="d-flex flex-column cod-type-ga i-height">
2985
- <div *ngIf="attribute.displayName" class="d-flex cod-top-label me-1" [style.width]="'max-content'">
3038
+ <div *ngIf="attribute.idAttribute" class="d-flex cod-top-label me-1" [style.width]="'max-content'">
2986
3039
  <div>
2987
3040
  {{attribute.displayName}}
2988
3041
  </div>
2989
3042
  <div *ngIf="editInline" style="margin-left: auto;" class="ps-2 pb-2">
2990
- <button class="btn-ga" (click)="addGridRow(editGridModal, attribute.idAttribute)">
3043
+
3044
+ <button
3045
+ class="btn-ga"
3046
+ [disabled]="(!this.attributeService.editButtonsEnabled)"
3047
+ (click)="addGridRow(editGridModal, attribute.idAttribute)"
3048
+ >
2991
3049
  <span class="ga-icon">
2992
3050
  <i class="fas fa-plus fa-xs"></i>
2993
3051
  </span>
2994
3052
  </button>
2995
- <button class="btn-ga" (click)="removeGridRow(attribute.idAttribute)">
3053
+
3054
+ <button
3055
+ class="btn-ga"
3056
+ [disabled]="(!this.attributeService.editButtonsEnabled)"
3057
+ (click)="removeGridRow(attribute.idAttribute)"
3058
+ >
2996
3059
  <span class="ga-icon">
2997
3060
  <i class="fas fa-minus fa-xs"></i>
2998
3061
  </span>
@@ -3030,8 +3093,19 @@ class AttributeAbsoluteComponent extends AttributeBase {
3030
3093
  </ng-container>
3031
3094
  </div>
3032
3095
  <div class="modal-footer">
3033
- <button class="btn btn-primary" (click)="close('Save')">Save</button>
3034
- <button class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
3096
+ <button
3097
+ [disabled]="(!this.attributeService.editButtonsEnabled)"
3098
+ class="btn btn-primary"
3099
+ (click)="close('Save')"
3100
+ >
3101
+ Save
3102
+ </button>
3103
+
3104
+ <button
3105
+ class="btn btn-primary"
3106
+ (click)="close('Cancel')"
3107
+ >Cancel
3108
+ </button>
3035
3109
  </div>
3036
3110
  </ng-template>
3037
3111
  `, isInline: true, styles: [".hci-cod button.mat-icon-button.mat-button-base{height:20px;width:20px;line-height:unset}.btn-ga{padding:0;height:18px;width:18px}.ga-icon{font-size:.9em;vertical-align:top}.hci-cod .mat-datepicker-toggle-default-icon{height:20px;width:20px}\n"], dependencies: [{ kind: "component", type: i3$1.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i7.NgxMatDatetimepicker, selector: "ngx-mat-datetime-picker", exportAs: ["ngxMatDatetimePicker"] }, { kind: "directive", type: i7.NgxMatDatepickerInput, selector: "input[ngxMatDatetimePicker]", inputs: ["ngxMatDatetimePicker", "min", "max", "matDatepickerFilter"], exportAs: ["ngxMatDatepickerInput"] }, { kind: "component", type: AttributeEditComponent, selector: "hci-attribute-edit" }], encapsulation: i0.ViewEncapsulation.None }); }
@@ -3292,7 +3366,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
3292
3366
  <div class="d-flex flex-shrink-0">
3293
3367
  <input type="checkbox"
3294
3368
  [checked]="attributeChoice.value"
3295
- [disabled]="!editInline || attribute.isCalculated === 'Y'"
3296
3369
  (change)="valueMultiChoiceChange(attributeChoice)"
3297
3370
  [disabled]="!editInline || attribute.isCalculated === 'Y'"
3298
3371
  class="form-control checkbox"/>
@@ -3318,7 +3391,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
3318
3391
  <div class="d-flex flex-shrink-0">
3319
3392
  <input type="checkbox"
3320
3393
  [checked]="entry.checked"
3321
- [disabled]="!editInline || attribute.isCalculated === 'Y'"
3322
3394
  (change)="valueMultiDictChange(entry)"
3323
3395
  [disabled]="!editInline || attribute.isCalculated === 'Y'"
3324
3396
  class="form-control checkbox" />
@@ -3357,17 +3429,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
3357
3429
  <!-- Grid -->
3358
3430
  <ng-container *ngIf="attribute.codeAttributeDataType === 'GA'">
3359
3431
  <div #attributeRef class="d-flex flex-column cod-type-ga i-height">
3360
- <div *ngIf="attribute.displayName" class="d-flex cod-top-label me-1" [style.width]="'max-content'">
3432
+ <div *ngIf="attribute.idAttribute" class="d-flex cod-top-label me-1" [style.width]="'max-content'">
3361
3433
  <div>
3362
3434
  {{attribute.displayName}}
3363
3435
  </div>
3364
3436
  <div *ngIf="editInline" style="margin-left: auto;" class="ps-2 pb-2">
3365
- <button class="btn-ga" (click)="addGridRow(editGridModal, attribute.idAttribute)">
3437
+
3438
+ <button
3439
+ class="btn-ga"
3440
+ [disabled]="(!this.attributeService.editButtonsEnabled)"
3441
+ (click)="addGridRow(editGridModal, attribute.idAttribute)"
3442
+ >
3366
3443
  <span class="ga-icon">
3367
3444
  <i class="fas fa-plus fa-xs"></i>
3368
3445
  </span>
3369
3446
  </button>
3370
- <button class="btn-ga" (click)="removeGridRow(attribute.idAttribute)">
3447
+
3448
+ <button
3449
+ class="btn-ga"
3450
+ [disabled]="(!this.attributeService.editButtonsEnabled)"
3451
+ (click)="removeGridRow(attribute.idAttribute)"
3452
+ >
3371
3453
  <span class="ga-icon">
3372
3454
  <i class="fas fa-minus fa-xs"></i>
3373
3455
  </span>
@@ -3405,8 +3487,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
3405
3487
  </ng-container>
3406
3488
  </div>
3407
3489
  <div class="modal-footer">
3408
- <button class="btn btn-primary" (click)="close('Save')">Save</button>
3409
- <button class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
3490
+ <button
3491
+ [disabled]="(!this.attributeService.editButtonsEnabled)"
3492
+ class="btn btn-primary"
3493
+ (click)="close('Save')"
3494
+ >
3495
+ Save
3496
+ </button>
3497
+
3498
+ <button
3499
+ class="btn btn-primary"
3500
+ (click)="close('Cancel')"
3501
+ >Cancel
3502
+ </button>
3410
3503
  </div>
3411
3504
  </ng-template>
3412
3505
  `, styles: [".hci-cod button.mat-icon-button.mat-button-base{height:20px;width:20px;line-height:unset}.btn-ga{padding:0;height:18px;width:18px}.ga-icon{font-size:.9em;vertical-align:top}.hci-cod .mat-datepicker-toggle-default-icon{height:20px;width:20px}\n"] }]
@@ -3754,17 +3847,25 @@ class AttributeFlexComponent extends AttributeBase {
3754
3847
  <!-- Grid -->
3755
3848
  <ng-container *ngIf="attribute.codeAttributeDataType === 'GA'">
3756
3849
  <div #attributeRef class="d-flex flex-column cod-type-ga">
3757
- <div *ngIf="attribute.displayName" class="d-flex cod-top-label me-1">
3850
+ <div *ngIf="attribute.idAttribute" class="d-flex cod-top-label mr-1">
3758
3851
  <div>
3759
3852
  {{attribute.displayName}}
3760
3853
  </div>
3761
3854
  <div *ngIf="editInline" style="margin-left: auto;">
3762
- <button class="btn-ga" (click)="addGridRow(editGridModal, attribute.idAttribute)">
3855
+ <button
3856
+ class="btn-ga"
3857
+ [disabled]="(!this.attributeService.editButtonsEnabled)"
3858
+ (click)="addGridRow(editGridModal, attribute.idAttribute)"
3859
+ >
3763
3860
  <span class="ga-icon">
3764
3861
  <i class="fas fa-plus fa-xs"></i>
3765
3862
  </span>
3766
3863
  </button>
3767
- <button class="btn-ga" (click)="removeGridRow(attribute.idAttribute)">
3864
+ <button
3865
+ class="btn-ga"
3866
+ [disabled]="(!this.attributeService.editButtonsEnabled)"
3867
+ (click)="removeGridRow(attribute.idAttribute)"
3868
+ >
3768
3869
  <span class="ga-icon">
3769
3870
  <i class="fas fa-minus fa-xs"></i>
3770
3871
  </span>
@@ -3802,8 +3903,20 @@ class AttributeFlexComponent extends AttributeBase {
3802
3903
  </ng-container>
3803
3904
  </div>
3804
3905
  <div class="modal-footer">
3805
- <button class="btn btn-primary" (click)="close('Save')">Save</button>
3806
- <button class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
3906
+ <button
3907
+ [disabled]="(!this.attributeService.editButtonsEnabled)"
3908
+ class="btn btn-primary"
3909
+ (click)="close('Save')"
3910
+ >
3911
+ Save
3912
+ </button>
3913
+
3914
+ <button
3915
+ class="btn btn-primary"
3916
+ (click)="close('Cancel')"
3917
+ >
3918
+ Cancel
3919
+ </button>
3807
3920
  </div>
3808
3921
  </ng-template>
3809
3922
  `, isInline: true, styles: [".hci-cod button.mat-icon-button.mat-button-base{height:20px;width:20px;line-height:unset}.btn-ga{padding:0;height:18px;width:18px}.ga-icon{font-size:.9em;vertical-align:top}.hci-cod .mat-datepicker-toggle-default-icon{height:20px;width:20px}\n"], dependencies: [{ kind: "component", type: i3$1.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i7.NgxMatDatetimepicker, selector: "ngx-mat-datetime-picker", exportAs: ["ngxMatDatetimePicker"] }, { kind: "directive", type: i7.NgxMatDatepickerInput, selector: "input[ngxMatDatetimePicker]", inputs: ["ngxMatDatetimePicker", "min", "max", "matDatepickerFilter"], exportAs: ["ngxMatDatepickerInput"] }, { kind: "component", type: AttributeEditComponent, selector: "hci-attribute-edit" }], encapsulation: i0.ViewEncapsulation.None }); }
@@ -4112,17 +4225,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
4112
4225
  <!-- Grid -->
4113
4226
  <ng-container *ngIf="attribute.codeAttributeDataType === 'GA'">
4114
4227
  <div #attributeRef class="d-flex flex-column cod-type-ga">
4115
- <div *ngIf="attribute.displayName" class="d-flex cod-top-label me-1">
4228
+ <div *ngIf="attribute.idAttribute" class="d-flex cod-top-label mr-1">
4116
4229
  <div>
4117
4230
  {{attribute.displayName}}
4118
4231
  </div>
4119
4232
  <div *ngIf="editInline" style="margin-left: auto;">
4120
- <button class="btn-ga" (click)="addGridRow(editGridModal, attribute.idAttribute)">
4233
+ <button
4234
+ class="btn-ga"
4235
+ [disabled]="(!this.attributeService.editButtonsEnabled)"
4236
+ (click)="addGridRow(editGridModal, attribute.idAttribute)"
4237
+ >
4121
4238
  <span class="ga-icon">
4122
4239
  <i class="fas fa-plus fa-xs"></i>
4123
4240
  </span>
4124
4241
  </button>
4125
- <button class="btn-ga" (click)="removeGridRow(attribute.idAttribute)">
4242
+ <button
4243
+ class="btn-ga"
4244
+ [disabled]="(!this.attributeService.editButtonsEnabled)"
4245
+ (click)="removeGridRow(attribute.idAttribute)"
4246
+ >
4126
4247
  <span class="ga-icon">
4127
4248
  <i class="fas fa-minus fa-xs"></i>
4128
4249
  </span>
@@ -4160,74 +4281,427 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
4160
4281
  </ng-container>
4161
4282
  </div>
4162
4283
  <div class="modal-footer">
4163
- <button class="btn btn-primary" (click)="close('Save')">Save</button>
4164
- <button class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
4284
+ <button
4285
+ [disabled]="(!this.attributeService.editButtonsEnabled)"
4286
+ class="btn btn-primary"
4287
+ (click)="close('Save')"
4288
+ >
4289
+ Save
4290
+ </button>
4291
+
4292
+ <button
4293
+ class="btn btn-primary"
4294
+ (click)="close('Cancel')"
4295
+ >
4296
+ Cancel
4297
+ </button>
4165
4298
  </div>
4166
4299
  </ng-template>
4167
4300
  `, styles: [".hci-cod button.mat-icon-button.mat-button-base{height:20px;width:20px;line-height:unset}.btn-ga{padding:0;height:18px;width:18px}.ga-icon{font-size:.9em;vertical-align:top}.hci-cod .mat-datepicker-toggle-default-icon{height:20px;width:20px}\n"] }]
4168
4301
  }], ctorParameters: () => [{ type: AttributeService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i2$1.NgbModal }] });
4169
4302
 
4170
- class AttributeDefaultComponent {
4171
- get value() {
4172
- return this._value;
4303
+ /**
4304
+ * This component should be added on to any screen that displays a container with COD content. This container
4305
+ * represents the one of the containers, which in turn contain attributes which display those values in the
4306
+ * attributeValueSet.
4307
+ */
4308
+ class AttributeContainerComponent {
4309
+ constructor(attributeService, elementRef, renderer, changeDetectorRef, modalService) {
4310
+ this.attributeService = attributeService;
4311
+ this.elementRef = elementRef;
4312
+ this.renderer = renderer;
4313
+ this.changeDetectorRef = changeDetectorRef;
4314
+ this.modalService = modalService;
4315
+ this.classList = "hci-attribute-configuration hci-cod d-flex flex-column flex-grow-1";
4316
+ this.editInline = true;
4317
+ this.editPopup = false;
4318
+ this.editable = true;
4319
+ this.windowDimension = {};
4320
+ this.subscriptions = new Subscription();
4321
+ this.getBusySubjects = () => {
4322
+ let subjects = [];
4323
+ //subjects.push(this.attributeService.getAttributeConfigurationLoadingSubject());
4324
+ subjects.push(this.attributeService.getLoadingSubject());
4325
+ return subjects;
4326
+ };
4173
4327
  }
4174
- ;
4175
- set value(v) {
4176
- this.onTouched();
4177
- if (v !== this.value) {
4178
- this._value = v;
4179
- this.onChange(v);
4328
+ /**
4329
+ * Upon init, subscribe to the configuration and value set.
4330
+ */
4331
+ ngOnInit() {
4332
+ if (!this.editable) {
4333
+ this.editInline = false;
4334
+ this.editPopup = false;
4180
4335
  }
4336
+ this.attributeService.setAttributeConfigurationById(this.idAttributeConfiguration, this.idAttributeValueSet, this.idParentObject);
4337
+ this.subscriptions.add(this.attributeService.getAttributeConfigurationSubject().subscribe((attributeConfiguration) => {
4338
+ if (attributeConfiguration) {
4339
+ this.attributeConfiguration = attributeConfiguration;
4340
+ if (this.idAttributeContainer !== undefined) {
4341
+ this.attributeContainer = this.getAttributeContainerById(this.idAttributeContainer);
4342
+ }
4343
+ if (this.indexOfContainer !== undefined) {
4344
+ if (this.attributeConfiguration.attributeContainers[this.indexOfContainer]) {
4345
+ this.attributeContainer = this.attributeConfiguration.attributeContainers[this.indexOfContainer];
4346
+ }
4347
+ }
4348
+ }
4349
+ }));
4350
+ this.subscriptions.add(this.attributeService.attributeConfigurationDimensionSubject.subscribe((windowDimension) => {
4351
+ if (windowDimension) {
4352
+ this.windowDimension = windowDimension;
4353
+ }
4354
+ }));
4355
+ this.subscriptions.add(this.attributeService.getAttributeValueSet().subscribe((attributeValueSet) => {
4356
+ this.attributeValueSet = attributeValueSet;
4357
+ if (this.attributeValueSet) {
4358
+ this.attributeService.notifyAttributes();
4359
+ }
4360
+ }));
4181
4361
  }
4182
- constructor() {
4183
- this._value = "";
4184
- this.onChange = (_) => { };
4185
- this.onTouched = () => { };
4362
+ set boundData(value) {
4363
+ this.attributeService.setBoundData(value);
4186
4364
  }
4187
- ngOnInit() { }
4188
- writeValue(v) {
4189
- this._value = v;
4365
+ ngOnDestroy() {
4366
+ this.subscriptions.unsubscribe();
4190
4367
  }
4191
- registerOnChange(fn) {
4192
- this.onChange = fn;
4368
+ ngOnChanges(changes) {
4369
+ if (!this.editable) {
4370
+ this.editInline = false;
4371
+ this.editPopup = false;
4372
+ }
4373
+ if (changes.idAttributeContainer) {
4374
+ this.idAttributeContainer = changes.idAttributeContainer.currentValue;
4375
+ this.attributeContainer = this.getAttributeContainerById(this.idAttributeContainer);
4376
+ }
4377
+ if (changes.indexOfContainer) {
4378
+ this.indexOfContainer = changes.indexOfContainer.currentValue;
4379
+ if (this.attributeConfiguration && this.attributeConfiguration.attributeContainers[this.indexOfContainer]) {
4380
+ this.attributeContainer = this.attributeConfiguration.attributeContainers[this.indexOfContainer];
4381
+ }
4382
+ }
4193
4383
  }
4194
- registerOnTouched(fn) {
4195
- this.onTouched = fn;
4384
+ getAttributeService() {
4385
+ return this.attributeService;
4196
4386
  }
4197
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AttributeDefaultComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4198
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: AttributeDefaultComponent, selector: "hci-attribute-default", inputs: { id: "id", name: "name", attribute: "attribute" }, providers: [
4199
- {
4200
- provide: NG_VALUE_ACCESSOR,
4201
- useExisting: forwardRef(() => AttributeDefaultComponent),
4202
- multi: true
4387
+ edit(modal, editContainer) {
4388
+ this.editContainer = editContainer;
4389
+ this.modalService.open(modal, { windowClass: "modal-lg" }).result.then((result) => {
4390
+ if (result === "Save") {
4391
+ this.attributeService.updateAttributeValueSet();
4203
4392
  }
4204
- ], ngImport: i0, template: `
4205
- <!-- String -->
4206
- <ng-container *ngIf="attribute.codeAttributeDataType.toUpperCase() === 'S'">
4207
- <input type="text"
4208
- class="form-control"
4209
- [id]="id"
4210
- [name]="name"
4211
- [(ngModel)]="value">
4212
- </ng-container>
4213
-
4214
- <!-- Text -->
4215
- <ng-container *ngIf="attribute.codeAttributeDataType.toUpperCase() === 'TXT'">
4216
- <textarea type="text"
4217
- class="form-control"
4218
- [id]="id"
4219
- [name]="name"
4220
- spellcheck="spellcheck"
4221
- lang="en"
4222
- [(ngModel)]="value">
4223
- </textarea>
4393
+ else if (result === "Cancel") {
4394
+ this.attributeService.clearUpdatedAttributeValues();
4395
+ }
4396
+ }, (reason) => { });
4397
+ }
4398
+ post() {
4399
+ this.attributeService.updateAttributeValueSet();
4400
+ }
4401
+ getAttributeContainerById(idAttributeContainer) {
4402
+ if (this.attributeConfiguration) {
4403
+ return this.attributeConfiguration.attributeContainers.find(x => x.idAttributeContainer === idAttributeContainer);
4404
+ }
4405
+ }
4406
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AttributeContainerComponent, deps: [{ token: AttributeService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i2$1.NgbModal }], target: i0.ɵɵFactoryTarget.Component }); }
4407
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: AttributeContainerComponent, selector: "hci-attribute-container", inputs: { idAttributeValueSet: "idAttributeValueSet", idAttributeConfiguration: "idAttributeConfiguration", idAttributeContainer: "idAttributeContainer", indexOfContainer: "indexOfContainer", idParentObject: "idParentObject", attributeContainer: "attributeContainer", attributeConfiguration: "attributeConfiguration", attributeValueSet: "attributeValueSet", editInline: "editInline", editPopup: "editPopup", editable: "editable", boundData: "boundData" }, host: { properties: { "class": "this.classList" } }, usesOnChanges: true, ngImport: i0, template: `
4408
+ <hci-busy [getBusySubjects]="getBusySubjects"></hci-busy>
4409
+
4410
+ <ng-container *ngIf="attributeContainer">
4411
+ <div *ngIf="editPopup" [id]="'id-attribute-container-' + attributeContainer.idAttributeContainer + '-header'"
4412
+ class="d-flex attribute-container-header {{'sort-order-' + attributeContainer.sortOrder}}">
4413
+ <div class="ms-auto me-0" (click)="edit(editModal, attributeContainer)">
4414
+ <i class="fas fa-pencil-alt"></i>
4415
+ </div>
4416
+ </div>
4417
+ <div class="d-flex flex-grow-1 y-auto" style="flex: 1 1 1px;">
4418
+ <div class="attribute-container"
4419
+ [class.col-md-12]="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y'"
4420
+ [class.flex]="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y'"
4421
+ [class.flex-wrap]="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y'"
4422
+ [class.absolute]="!attributeContainer.isAutoLayout || attributeContainer.isAutoLayout === 'N'">
4423
+ <ng-container *ngFor="let attribute of attributeContainer.graphicalAttributes | isGroupAttribute: false">
4424
+ <ng-container *ngIf="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y' && attribute.codeAttributeDataType !== 'LINE'">
4425
+ <hci-attribute-flex [id]="'id-attribute-' + attribute.idAttribute"
4426
+ [attribute]="attribute"
4427
+ [editInline]="editInline"
4428
+ [class.attribute]="true"
4429
+ [class.col-4]="attribute.codeAttributeDataType !== 'GA' && attribute.codeAttributeDataType !== 'LINE'"
4430
+ [class.col-12]="attribute.codeAttributeDataType === 'GA' || attribute.codeAttributeDataType === 'LINE'"></hci-attribute-flex>
4431
+ </ng-container>
4432
+ <ng-container *ngIf="!attributeContainer.isAutoLayout || attributeContainer.isAutoLayout === 'N'">
4433
+ <hci-attribute-absolute [id]="'id-attribute-' + attribute.idAttribute"
4434
+ [attribute]="attribute"
4435
+ [editInline]="editInline"
4436
+ [class.attribute]="true"></hci-attribute-absolute>
4437
+ </ng-container>
4438
+ </ng-container>
4439
+ </div>
4440
+ </div>
4224
4441
  </ng-container>
4225
4442
 
4226
- <!-- Checkbox -->
4227
- <ng-container *ngIf="attribute.codeAttributeDataType.toUpperCase() === 'CB'">
4228
- <input type="checkbox"
4229
- class="form-control"
4230
- [id]="id"
4443
+ <ng-template #editModal let-close="close">
4444
+ <div class="modal-header">
4445
+ {{editContainer.containerName}}
4446
+ </div>
4447
+ <div class="modal-body d-flex flex-column hci-cod-edit">
4448
+ <ng-container *ngFor="let attribute of editContainer.graphicalAttributes | isGroupAttribute: false">
4449
+ <hci-attribute-edit [id]="'edit-id-attribute-' + attribute.idAttribute"
4450
+ [attribute]="attribute"
4451
+ class="attribute"></hci-attribute-edit>
4452
+ </ng-container>
4453
+ </div>
4454
+ <div class="modal-footer">
4455
+ <button class="btn btn-primary" (click)="close('Save')">Save</button>
4456
+ <button class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
4457
+ </div>
4458
+ </ng-template>
4459
+ `, isInline: true, dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$1.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }, { kind: "component", type: AttributeAbsoluteComponent, selector: "hci-attribute-absolute" }, { kind: "component", type: AttributeFlexComponent, selector: "hci-attribute-flex" }, { kind: "component", type: AttributeEditComponent, selector: "hci-attribute-edit" }, { kind: "pipe", type: IsGroupAttributePipe, name: "isGroupAttribute" }] }); }
4460
+ }
4461
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AttributeContainerComponent, decorators: [{
4462
+ type: Component,
4463
+ args: [{
4464
+ selector: "hci-attribute-container",
4465
+ template: `
4466
+ <hci-busy [getBusySubjects]="getBusySubjects"></hci-busy>
4467
+
4468
+ <ng-container *ngIf="attributeContainer">
4469
+ <div *ngIf="editPopup" [id]="'id-attribute-container-' + attributeContainer.idAttributeContainer + '-header'"
4470
+ class="d-flex attribute-container-header {{'sort-order-' + attributeContainer.sortOrder}}">
4471
+ <div class="ms-auto me-0" (click)="edit(editModal, attributeContainer)">
4472
+ <i class="fas fa-pencil-alt"></i>
4473
+ </div>
4474
+ </div>
4475
+ <div class="d-flex flex-grow-1 y-auto" style="flex: 1 1 1px;">
4476
+ <div class="attribute-container"
4477
+ [class.col-md-12]="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y'"
4478
+ [class.flex]="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y'"
4479
+ [class.flex-wrap]="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y'"
4480
+ [class.absolute]="!attributeContainer.isAutoLayout || attributeContainer.isAutoLayout === 'N'">
4481
+ <ng-container *ngFor="let attribute of attributeContainer.graphicalAttributes | isGroupAttribute: false">
4482
+ <ng-container *ngIf="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y' && attribute.codeAttributeDataType !== 'LINE'">
4483
+ <hci-attribute-flex [id]="'id-attribute-' + attribute.idAttribute"
4484
+ [attribute]="attribute"
4485
+ [editInline]="editInline"
4486
+ [class.attribute]="true"
4487
+ [class.col-4]="attribute.codeAttributeDataType !== 'GA' && attribute.codeAttributeDataType !== 'LINE'"
4488
+ [class.col-12]="attribute.codeAttributeDataType === 'GA' || attribute.codeAttributeDataType === 'LINE'"></hci-attribute-flex>
4489
+ </ng-container>
4490
+ <ng-container *ngIf="!attributeContainer.isAutoLayout || attributeContainer.isAutoLayout === 'N'">
4491
+ <hci-attribute-absolute [id]="'id-attribute-' + attribute.idAttribute"
4492
+ [attribute]="attribute"
4493
+ [editInline]="editInline"
4494
+ [class.attribute]="true"></hci-attribute-absolute>
4495
+ </ng-container>
4496
+ </ng-container>
4497
+ </div>
4498
+ </div>
4499
+ </ng-container>
4500
+
4501
+ <ng-template #editModal let-close="close">
4502
+ <div class="modal-header">
4503
+ {{editContainer.containerName}}
4504
+ </div>
4505
+ <div class="modal-body d-flex flex-column hci-cod-edit">
4506
+ <ng-container *ngFor="let attribute of editContainer.graphicalAttributes | isGroupAttribute: false">
4507
+ <hci-attribute-edit [id]="'edit-id-attribute-' + attribute.idAttribute"
4508
+ [attribute]="attribute"
4509
+ class="attribute"></hci-attribute-edit>
4510
+ </ng-container>
4511
+ </div>
4512
+ <div class="modal-footer">
4513
+ <button class="btn btn-primary" (click)="close('Save')">Save</button>
4514
+ <button class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
4515
+ </div>
4516
+ </ng-template>
4517
+ `
4518
+ }]
4519
+ }], ctorParameters: () => [{ type: AttributeService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i2$1.NgbModal }], propDecorators: { classList: [{
4520
+ type: HostBinding,
4521
+ args: ["class"]
4522
+ }], idAttributeValueSet: [{
4523
+ type: Input
4524
+ }], idAttributeConfiguration: [{
4525
+ type: Input
4526
+ }], idAttributeContainer: [{
4527
+ type: Input
4528
+ }], indexOfContainer: [{
4529
+ type: Input
4530
+ }], idParentObject: [{
4531
+ type: Input
4532
+ }], attributeContainer: [{
4533
+ type: Input
4534
+ }], attributeConfiguration: [{
4535
+ type: Input
4536
+ }], attributeValueSet: [{
4537
+ type: Input
4538
+ }], editInline: [{
4539
+ type: Input
4540
+ }], editPopup: [{
4541
+ type: Input
4542
+ }], editable: [{
4543
+ type: Input
4544
+ }], boundData: [{
4545
+ type: Input
4546
+ }] } });
4547
+
4548
+ /*
4549
+ * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
4550
+ */
4551
+ /**
4552
+ * The main @huntsman-cancer-institute/cod module. Custom components to be used by the grid are passed in here.
4553
+ *
4554
+ * @since 1.0.0
4555
+ */
4556
+ class CodModule {
4557
+ static forRoot() {
4558
+ return {
4559
+ providers: [
4560
+ AttributeService
4561
+ ],
4562
+ ngModule: CodModule
4563
+ };
4564
+ }
4565
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CodModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4566
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.2", ngImport: i0, type: CodModule, declarations: [AttributeBase,
4567
+ AttributeAbsoluteComponent,
4568
+ AttributeContainerComponent,
4569
+ AttributeFlexComponent,
4570
+ AttributeEditComponent,
4571
+ IsGroupAttributePipe], imports: [AgGridModule,
4572
+ CommonModule,
4573
+ FormsModule,
4574
+ RouterModule,
4575
+ NgbModule,
4576
+ DropdownModule,
4577
+ SelectModule,
4578
+ MiscModule,
4579
+ MatDatepickerModule,
4580
+ MatNativeDateModule,
4581
+ NgxMatDatetimePickerModule,
4582
+ NgxMatTimepickerModule,
4583
+ NgxMatNativeDateModule,
4584
+ DictionaryServiceModule], exports: [AttributeAbsoluteComponent,
4585
+ AttributeFlexComponent,
4586
+ AttributeEditComponent,
4587
+ AttributeContainerComponent,
4588
+ IsGroupAttributePipe] }); }
4589
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CodModule, imports: [AgGridModule,
4590
+ CommonModule,
4591
+ FormsModule,
4592
+ RouterModule,
4593
+ NgbModule,
4594
+ DropdownModule,
4595
+ SelectModule,
4596
+ MiscModule,
4597
+ MatDatepickerModule,
4598
+ MatNativeDateModule,
4599
+ NgxMatDatetimePickerModule,
4600
+ NgxMatTimepickerModule,
4601
+ NgxMatNativeDateModule,
4602
+ DictionaryServiceModule] }); }
4603
+ }
4604
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CodModule, decorators: [{
4605
+ type: NgModule,
4606
+ args: [{
4607
+ imports: [
4608
+ AgGridModule,
4609
+ CommonModule,
4610
+ FormsModule,
4611
+ RouterModule,
4612
+ NgbModule,
4613
+ DropdownModule,
4614
+ SelectModule,
4615
+ MiscModule,
4616
+ MatDatepickerModule,
4617
+ MatNativeDateModule,
4618
+ NgxMatDatetimePickerModule,
4619
+ NgxMatTimepickerModule,
4620
+ NgxMatNativeDateModule,
4621
+ DictionaryServiceModule
4622
+ ],
4623
+ declarations: [
4624
+ AttributeBase,
4625
+ AttributeAbsoluteComponent,
4626
+ AttributeContainerComponent,
4627
+ AttributeFlexComponent,
4628
+ AttributeEditComponent,
4629
+ IsGroupAttributePipe
4630
+ ],
4631
+ exports: [
4632
+ AttributeAbsoluteComponent,
4633
+ AttributeFlexComponent,
4634
+ AttributeEditComponent,
4635
+ AttributeContainerComponent,
4636
+ IsGroupAttributePipe
4637
+ ]
4638
+ }]
4639
+ }] });
4640
+
4641
+ class AttributeValue {
4642
+ }
4643
+
4644
+ class AttributeDefaultComponent {
4645
+ get value() {
4646
+ return this._value;
4647
+ }
4648
+ ;
4649
+ set value(v) {
4650
+ this.onTouched();
4651
+ if (v !== this.value) {
4652
+ this._value = v;
4653
+ this.onChange(v);
4654
+ }
4655
+ }
4656
+ constructor() {
4657
+ this._value = "";
4658
+ this.onChange = (_) => { };
4659
+ this.onTouched = () => { };
4660
+ }
4661
+ ngOnInit() { }
4662
+ writeValue(v) {
4663
+ this._value = v;
4664
+ }
4665
+ registerOnChange(fn) {
4666
+ this.onChange = fn;
4667
+ }
4668
+ registerOnTouched(fn) {
4669
+ this.onTouched = fn;
4670
+ }
4671
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AttributeDefaultComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4672
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: AttributeDefaultComponent, selector: "hci-attribute-default", inputs: { id: "id", name: "name", attribute: "attribute" }, providers: [
4673
+ {
4674
+ provide: NG_VALUE_ACCESSOR,
4675
+ useExisting: forwardRef(() => AttributeDefaultComponent),
4676
+ multi: true
4677
+ }
4678
+ ], ngImport: i0, template: `
4679
+ <!-- String -->
4680
+ <ng-container *ngIf="attribute.codeAttributeDataType.toUpperCase() === 'S'">
4681
+ <input type="text"
4682
+ class="form-control"
4683
+ [id]="id"
4684
+ [name]="name"
4685
+ [(ngModel)]="value">
4686
+ </ng-container>
4687
+
4688
+ <!-- Text -->
4689
+ <ng-container *ngIf="attribute.codeAttributeDataType.toUpperCase() === 'TXT'">
4690
+ <textarea type="text"
4691
+ class="form-control"
4692
+ [id]="id"
4693
+ [name]="name"
4694
+ spellcheck="spellcheck"
4695
+ lang="en"
4696
+ [(ngModel)]="value">
4697
+ </textarea>
4698
+ </ng-container>
4699
+
4700
+ <!-- Checkbox -->
4701
+ <ng-container *ngIf="attribute.codeAttributeDataType.toUpperCase() === 'CB'">
4702
+ <input type="checkbox"
4703
+ class="form-control"
4704
+ [id]="id"
4231
4705
  [name]="name"
4232
4706
  [(ngModel)]="value"
4233
4707
  [checked]="value && value.toUpperCase() === 'Y'">
@@ -4332,7 +4806,7 @@ class AttributeDefaultComponent {
4332
4806
  [name]="name"
4333
4807
  disabled>
4334
4808
  </ng-container>
4335
- `, isInline: true, dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3$2.NativeSelectComponent, selector: "hci-native-select", inputs: ["class", "name", "label", "url", "entries", "required", "idKey", "displayKey", "disabled", "sortKey", "sortNumeric", "filterKey", "filter"] }] }); }
4809
+ `, isInline: true }); }
4336
4810
  }
4337
4811
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AttributeDefaultComponent, decorators: [{
4338
4812
  type: Component,
@@ -4486,348 +4960,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
4486
4960
  type: Input
4487
4961
  }] } });
4488
4962
 
4489
- /**
4490
- * This component should be added on to any screen that displays a container with COD content. This container
4491
- * represents the one of the containers, which in turn contain attributes which display those values in the
4492
- * attributeValueSet.
4493
- */
4494
- class AttributeContainerComponent {
4495
- constructor(attributeService, elementRef, renderer, changeDetectorRef, modalService) {
4496
- this.attributeService = attributeService;
4497
- this.elementRef = elementRef;
4498
- this.renderer = renderer;
4499
- this.changeDetectorRef = changeDetectorRef;
4500
- this.modalService = modalService;
4501
- this.classList = "hci-attribute-configuration hci-cod d-flex flex-column flex-grow-1";
4502
- this.editInline = true;
4503
- this.editPopup = false;
4504
- this.editable = true;
4505
- this.windowDimension = {};
4506
- this.subscriptions = new Subscription();
4507
- this.getBusySubjects = () => {
4508
- let subjects = [];
4509
- //subjects.push(this.attributeService.getAttributeConfigurationLoadingSubject());
4510
- subjects.push(this.attributeService.getLoadingSubject());
4511
- return subjects;
4512
- };
4513
- }
4514
- /**
4515
- * Upon init, subscribe to the configuration and value set.
4516
- */
4517
- ngOnInit() {
4518
- if (!this.editable) {
4519
- this.editInline = false;
4520
- this.editPopup = false;
4521
- }
4522
- this.attributeService.setAttributeConfigurationById(this.idAttributeConfiguration, this.idAttributeValueSet, this.idParentObject);
4523
- this.subscriptions.add(this.attributeService.getAttributeConfigurationSubject().subscribe((attributeConfiguration) => {
4524
- if (attributeConfiguration) {
4525
- this.attributeConfiguration = attributeConfiguration;
4526
- if (this.idAttributeContainer !== undefined) {
4527
- this.attributeContainer = this.getAttributeContainerById(this.idAttributeContainer);
4528
- }
4529
- if (this.indexOfContainer !== undefined) {
4530
- if (this.attributeConfiguration.attributeContainers[this.indexOfContainer]) {
4531
- this.attributeContainer = this.attributeConfiguration.attributeContainers[this.indexOfContainer];
4532
- }
4533
- }
4534
- }
4535
- }));
4536
- this.subscriptions.add(this.attributeService.attributeConfigurationDimensionSubject.subscribe((windowDimension) => {
4537
- if (windowDimension) {
4538
- this.windowDimension = windowDimension;
4539
- }
4540
- }));
4541
- this.subscriptions.add(this.attributeService.getAttributeValueSet().subscribe((attributeValueSet) => {
4542
- this.attributeValueSet = attributeValueSet;
4543
- if (this.attributeValueSet) {
4544
- this.attributeService.notifyAttributes();
4545
- }
4546
- }));
4547
- }
4548
- set boundData(value) {
4549
- this.attributeService.setBoundData(value);
4550
- }
4551
- ngOnDestroy() {
4552
- this.subscriptions.unsubscribe();
4553
- }
4554
- ngOnChanges(changes) {
4555
- if (!this.editable) {
4556
- this.editInline = false;
4557
- this.editPopup = false;
4558
- }
4559
- if (changes.idAttributeContainer) {
4560
- this.idAttributeContainer = changes.idAttributeContainer.currentValue;
4561
- this.attributeContainer = this.getAttributeContainerById(this.idAttributeContainer);
4562
- }
4563
- if (changes.indexOfContainer) {
4564
- this.indexOfContainer = changes.indexOfContainer.currentValue;
4565
- if (this.attributeConfiguration && this.attributeConfiguration.attributeContainers[this.indexOfContainer]) {
4566
- this.attributeContainer = this.attributeConfiguration.attributeContainers[this.indexOfContainer];
4567
- }
4568
- }
4569
- }
4570
- getAttributeService() {
4571
- return this.attributeService;
4572
- }
4573
- edit(modal, editContainer) {
4574
- this.editContainer = editContainer;
4575
- this.modalService.open(modal, { windowClass: "modal-lg" }).result.then((result) => {
4576
- if (result === "Save") {
4577
- this.attributeService.updateAttributeValueSet();
4578
- }
4579
- else if (result === "Cancel") {
4580
- this.attributeService.clearUpdatedAttributeValues();
4581
- }
4582
- }, (reason) => { });
4583
- }
4584
- post() {
4585
- this.attributeService.updateAttributeValueSet();
4586
- }
4587
- getAttributeContainerById(idAttributeContainer) {
4588
- if (this.attributeConfiguration) {
4589
- return this.attributeConfiguration.attributeContainers.find(x => x.idAttributeContainer === idAttributeContainer);
4590
- }
4591
- }
4592
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AttributeContainerComponent, deps: [{ token: AttributeService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i2$1.NgbModal }], target: i0.ɵɵFactoryTarget.Component }); }
4593
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: AttributeContainerComponent, selector: "hci-attribute-container", inputs: { idAttributeValueSet: "idAttributeValueSet", idAttributeConfiguration: "idAttributeConfiguration", idAttributeContainer: "idAttributeContainer", indexOfContainer: "indexOfContainer", idParentObject: "idParentObject", attributeContainer: "attributeContainer", attributeConfiguration: "attributeConfiguration", attributeValueSet: "attributeValueSet", editInline: "editInline", editPopup: "editPopup", editable: "editable", boundData: "boundData" }, host: { properties: { "class": "this.classList" } }, usesOnChanges: true, ngImport: i0, template: `
4594
- <hci-busy [getBusySubjects]="getBusySubjects"></hci-busy>
4595
-
4596
- <ng-container *ngIf="attributeContainer">
4597
- <div *ngIf="editPopup" [id]="'id-attribute-container-' + attributeContainer.idAttributeContainer + '-header'"
4598
- class="d-flex attribute-container-header {{'sort-order-' + attributeContainer.sortOrder}}">
4599
- <div class="ms-auto me-0" (click)="edit(editModal, attributeContainer)">
4600
- <i class="fas fa-pencil-alt"></i>
4601
- </div>
4602
- </div>
4603
- <div class="d-flex flex-grow-1 y-auto" style="flex: 1 1 1px;">
4604
- <div class="attribute-container"
4605
- [class.col-md-12]="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y'"
4606
- [class.flex]="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y'"
4607
- [class.flex-wrap]="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y'"
4608
- [class.absolute]="!attributeContainer.isAutoLayout || attributeContainer.isAutoLayout === 'N'">
4609
- <ng-container *ngFor="let attribute of attributeContainer.graphicalAttributes | isGroupAttribute: false">
4610
- <ng-container *ngIf="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y' && attribute.codeAttributeDataType !== 'LINE'">
4611
- <hci-attribute-flex [id]="'id-attribute-' + attribute.idAttribute"
4612
- [attribute]="attribute"
4613
- [editInline]="editInline"
4614
- [class.attribute]="true"
4615
- [class.col-4]="attribute.codeAttributeDataType !== 'GA' && attribute.codeAttributeDataType !== 'LINE'"
4616
- [class.col-12]="attribute.codeAttributeDataType === 'GA' || attribute.codeAttributeDataType === 'LINE'"></hci-attribute-flex>
4617
- </ng-container>
4618
- <ng-container *ngIf="!attributeContainer.isAutoLayout || attributeContainer.isAutoLayout === 'N'">
4619
- <hci-attribute-absolute [id]="'id-attribute-' + attribute.idAttribute"
4620
- [attribute]="attribute"
4621
- [editInline]="editInline"
4622
- [class.attribute]="true"></hci-attribute-absolute>
4623
- </ng-container>
4624
- </ng-container>
4625
- </div>
4626
- </div>
4627
- </ng-container>
4628
-
4629
- <ng-template #editModal let-close="close">
4630
- <div class="modal-header">
4631
- {{editContainer.containerName}}
4632
- </div>
4633
- <div class="modal-body d-flex flex-column hci-cod-edit">
4634
- <ng-container *ngFor="let attribute of editContainer.graphicalAttributes | isGroupAttribute: false">
4635
- <hci-attribute-edit [id]="'edit-id-attribute-' + attribute.idAttribute"
4636
- [attribute]="attribute"
4637
- class="attribute"></hci-attribute-edit>
4638
- </ng-container>
4639
- </div>
4640
- <div class="modal-footer">
4641
- <button class="btn btn-primary" (click)="close('Save')">Save</button>
4642
- <button class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
4643
- </div>
4644
- </ng-template>
4645
- `, isInline: true, dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$1.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }, { kind: "component", type: AttributeAbsoluteComponent, selector: "hci-attribute-absolute" }, { kind: "component", type: AttributeFlexComponent, selector: "hci-attribute-flex" }, { kind: "component", type: AttributeEditComponent, selector: "hci-attribute-edit" }, { kind: "pipe", type: IsGroupAttributePipe, name: "isGroupAttribute" }] }); }
4646
- }
4647
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AttributeContainerComponent, decorators: [{
4648
- type: Component,
4649
- args: [{
4650
- selector: "hci-attribute-container",
4651
- template: `
4652
- <hci-busy [getBusySubjects]="getBusySubjects"></hci-busy>
4653
-
4654
- <ng-container *ngIf="attributeContainer">
4655
- <div *ngIf="editPopup" [id]="'id-attribute-container-' + attributeContainer.idAttributeContainer + '-header'"
4656
- class="d-flex attribute-container-header {{'sort-order-' + attributeContainer.sortOrder}}">
4657
- <div class="ms-auto me-0" (click)="edit(editModal, attributeContainer)">
4658
- <i class="fas fa-pencil-alt"></i>
4659
- </div>
4660
- </div>
4661
- <div class="d-flex flex-grow-1 y-auto" style="flex: 1 1 1px;">
4662
- <div class="attribute-container"
4663
- [class.col-md-12]="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y'"
4664
- [class.flex]="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y'"
4665
- [class.flex-wrap]="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y'"
4666
- [class.absolute]="!attributeContainer.isAutoLayout || attributeContainer.isAutoLayout === 'N'">
4667
- <ng-container *ngFor="let attribute of attributeContainer.graphicalAttributes | isGroupAttribute: false">
4668
- <ng-container *ngIf="attributeContainer.isAutoLayout && attributeContainer.isAutoLayout === 'Y' && attribute.codeAttributeDataType !== 'LINE'">
4669
- <hci-attribute-flex [id]="'id-attribute-' + attribute.idAttribute"
4670
- [attribute]="attribute"
4671
- [editInline]="editInline"
4672
- [class.attribute]="true"
4673
- [class.col-4]="attribute.codeAttributeDataType !== 'GA' && attribute.codeAttributeDataType !== 'LINE'"
4674
- [class.col-12]="attribute.codeAttributeDataType === 'GA' || attribute.codeAttributeDataType === 'LINE'"></hci-attribute-flex>
4675
- </ng-container>
4676
- <ng-container *ngIf="!attributeContainer.isAutoLayout || attributeContainer.isAutoLayout === 'N'">
4677
- <hci-attribute-absolute [id]="'id-attribute-' + attribute.idAttribute"
4678
- [attribute]="attribute"
4679
- [editInline]="editInline"
4680
- [class.attribute]="true"></hci-attribute-absolute>
4681
- </ng-container>
4682
- </ng-container>
4683
- </div>
4684
- </div>
4685
- </ng-container>
4686
-
4687
- <ng-template #editModal let-close="close">
4688
- <div class="modal-header">
4689
- {{editContainer.containerName}}
4690
- </div>
4691
- <div class="modal-body d-flex flex-column hci-cod-edit">
4692
- <ng-container *ngFor="let attribute of editContainer.graphicalAttributes | isGroupAttribute: false">
4693
- <hci-attribute-edit [id]="'edit-id-attribute-' + attribute.idAttribute"
4694
- [attribute]="attribute"
4695
- class="attribute"></hci-attribute-edit>
4696
- </ng-container>
4697
- </div>
4698
- <div class="modal-footer">
4699
- <button class="btn btn-primary" (click)="close('Save')">Save</button>
4700
- <button class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
4701
- </div>
4702
- </ng-template>
4703
- `
4704
- }]
4705
- }], ctorParameters: () => [{ type: AttributeService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i2$1.NgbModal }], propDecorators: { classList: [{
4706
- type: HostBinding,
4707
- args: ["class"]
4708
- }], idAttributeValueSet: [{
4709
- type: Input
4710
- }], idAttributeConfiguration: [{
4711
- type: Input
4712
- }], idAttributeContainer: [{
4713
- type: Input
4714
- }], indexOfContainer: [{
4715
- type: Input
4716
- }], idParentObject: [{
4717
- type: Input
4718
- }], attributeContainer: [{
4719
- type: Input
4720
- }], attributeConfiguration: [{
4721
- type: Input
4722
- }], attributeValueSet: [{
4723
- type: Input
4724
- }], editInline: [{
4725
- type: Input
4726
- }], editPopup: [{
4727
- type: Input
4728
- }], editable: [{
4729
- type: Input
4730
- }], boundData: [{
4731
- type: Input
4732
- }] } });
4733
-
4734
- /*
4735
- * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
4736
- */
4737
- /**
4738
- * The main @huntsman-cancer-institute/cod module. Custom components to be used by the grid are passed in here.
4739
- *
4740
- * @since 1.0.0
4741
- */
4742
- class CodModule {
4743
- static forRoot() {
4744
- return {
4745
- providers: [
4746
- AttributeService
4747
- ],
4748
- ngModule: CodModule
4749
- };
4750
- }
4751
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CodModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4752
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.2", ngImport: i0, type: CodModule, declarations: [AttributeBase,
4753
- AttributeAbsoluteComponent,
4754
- AttributeContainerComponent,
4755
- AttributeFlexComponent,
4756
- AttributeEditComponent,
4757
- AttributeDefaultComponent,
4758
- IsGroupAttributePipe], imports: [AgGridModule,
4759
- CommonModule,
4760
- FormsModule,
4761
- RouterModule,
4762
- NgbModule,
4763
- DropdownModule,
4764
- SelectModule,
4765
- MiscModule,
4766
- MatDatepickerModule,
4767
- MatNativeDateModule,
4768
- NgxMatDatetimePickerModule,
4769
- NgxMatTimepickerModule,
4770
- NgxMatNativeDateModule], exports: [AttributeAbsoluteComponent,
4771
- AttributeFlexComponent,
4772
- AttributeEditComponent,
4773
- AttributeDefaultComponent,
4774
- AttributeContainerComponent,
4775
- IsGroupAttributePipe] }); }
4776
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CodModule, imports: [AgGridModule,
4777
- CommonModule,
4778
- FormsModule,
4779
- RouterModule,
4780
- NgbModule,
4781
- DropdownModule,
4782
- SelectModule,
4783
- MiscModule,
4784
- MatDatepickerModule,
4785
- MatNativeDateModule,
4786
- NgxMatDatetimePickerModule,
4787
- NgxMatTimepickerModule,
4788
- NgxMatNativeDateModule] }); }
4789
- }
4790
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CodModule, decorators: [{
4791
- type: NgModule,
4792
- args: [{
4793
- imports: [
4794
- AgGridModule,
4795
- CommonModule,
4796
- FormsModule,
4797
- RouterModule,
4798
- NgbModule,
4799
- DropdownModule,
4800
- SelectModule,
4801
- MiscModule,
4802
- MatDatepickerModule,
4803
- MatNativeDateModule,
4804
- NgxMatDatetimePickerModule,
4805
- NgxMatTimepickerModule,
4806
- NgxMatNativeDateModule
4807
- ],
4808
- declarations: [
4809
- AttributeBase,
4810
- AttributeAbsoluteComponent,
4811
- AttributeContainerComponent,
4812
- AttributeFlexComponent,
4813
- AttributeEditComponent,
4814
- AttributeDefaultComponent,
4815
- IsGroupAttributePipe
4816
- ],
4817
- exports: [
4818
- AttributeAbsoluteComponent,
4819
- AttributeFlexComponent,
4820
- AttributeEditComponent,
4821
- AttributeDefaultComponent,
4822
- AttributeContainerComponent,
4823
- IsGroupAttributePipe
4824
- ]
4825
- }]
4826
- }] });
4827
-
4828
- class AttributeValue {
4829
- }
4830
-
4831
4963
  /*
4832
4964
  * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
4833
4965
  */