LP1739277 Angular org selector style callback
authorBill Erickson <berickxx@gmail.com>
Tue, 30 Jul 2019 16:12:12 +0000 (12:12 -0400)
committerJane Sandberg <sandbej@linnbenton.edu>
Wed, 17 Nov 2021 22:50:39 +0000 (14:50 -0800)
Allow the caller of an <eg-org-select> to pass a function which is
called against each org unit in the list to determine what CSS class(es)
should be applied to the org unit label in the list.

Includes sandbox example.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jennifer Bruch <jbruch@sparkpa.org>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Open-ILS/src/eg2/src/app/share/org-select/org-select.component.html
Open-ILS/src/eg2/src/app/share/org-select/org-select.component.ts
Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.html
Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.ts

index cf120ec..0a662c0 100644 (file)
@@ -1,7 +1,7 @@
 
 <!-- todo disabled -->
 <ng-template #displayTemplate let-r="result">
-  <span id="{{domId}}-{{r.id}}">{{r.label}}</span>
+  <span id="{{domId}}-{{r.id}}" class="{{orgClassCallback(r.id)}}">{{r.label}}</span>
 </ng-template>
 
 <ng-container *ngIf="readOnly && selected">
index dab8e37..005c076 100644 (file)
@@ -118,6 +118,11 @@ export class OrgSelectComponent implements OnInit {
         this.applyPermLimitOrgs(perms);
     }
 
+    // Function which should return a string value representing
+    // a CSS class name to use for styling each org unit label
+    // in the selector.
+    @Input() orgClassCallback: (orgId: number) => string;
+
     // Emitted when the org unit value is changed via the selector.
     // Does not fire on initialOrg
     @Output() onChange = new EventEmitter<IdlObject>();
@@ -145,7 +150,9 @@ export class OrgSelectComponent implements OnInit {
       private serverStore: ServerStoreService,
       private org: OrgService,
       private perm: PermService
-    ) { }
+    ) {
+        this.orgClassCallback = (orgId: number): string => '';
+    }
 
     ngOnInit() {
 
index a693944..2fdc7bc 100644 (file)
         idlClass="cbt" mode="update" recordId="1" orgDefaultAllowed="owner">
       </eg-fm-record-editor>
     </div>
+
+<div class="m-4">
+  <div class="col-lg-4">
+    <h4>Org Unit Selector With Styled Orgs</h4>
+    <eg-org-select [orgClassCallback]="orgClassCallback">
+    </eg-org-select>
   </div>
 </div>
 
index 396b431..93d4a10 100644 (file)
@@ -111,11 +111,11 @@ export class SandboxComponent implements OnInit {
     // cross-tab communications example
     private sbChannel: any;
     sbChannelText: string;
-
     myTimeForm: FormGroup;
 
     locId = 1; // Stacks
     aLocation: IdlObject; // acpl
+    orgClassCallback: (orgId: number) => string;
 
     constructor(
         private idl: IdlService,
@@ -132,6 +132,11 @@ export class SandboxComponent implements OnInit {
         this.sbChannel = (typeof BroadcastChannel === 'undefined') ?
             {} : new BroadcastChannel('eg.sbChannel');
         this.sbChannel.onmessage = (e) => this.sbChannelHandler(e);
+
+        this.orgClassCallback = (orgId: number): string => {
+            if (orgId === 1) { return 'font-weight-bold'; }
+            return orgId <= 3 ? 'text-info' : 'text-danger';
+        };
     }
 
     ngOnInit() {