From: Bill Erickson Date: Thu, 13 Aug 2020 20:56:33 +0000 (-0400) Subject: LPXXX Patron UI WIP X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=7d85f4582b65075d2072d598d62946a036617ccb;p=working%2FEvergreen.git LPXXX Patron UI WIP Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/edit-toolbar.component.html b/Open-ILS/src/eg2/src/app/staff/circ/patron/edit-toolbar.component.html new file mode 100644 index 0000000000..6a1647b235 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/edit-toolbar.component.html @@ -0,0 +1,7 @@ +
+
+ + + +
+
diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/edit-toolbar.component.ts b/Open-ILS/src/eg2/src/app/staff/circ/patron/edit-toolbar.component.ts new file mode 100644 index 0000000000..c538ab7a8e --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/edit-toolbar.component.ts @@ -0,0 +1,25 @@ +import {Component, OnInit, Input} from '@angular/core'; +import {Router, ActivatedRoute, ParamMap} from '@angular/router'; +import {NgbNav, NgbNavChangeEvent} from '@ng-bootstrap/ng-bootstrap'; +import {OrgService} from '@eg/core/org.service'; +import {NetService} from '@eg/core/net.service'; +import {PatronService} from '@eg/staff/share/patron/patron.service'; +import {PatronManagerService} from './patron.service'; + +@Component({ + templateUrl: 'edit-toolbar.component.html', + selector: 'eg-patron-edit-toolbar' +}) +export class EditToolbarComponent implements OnInit { + + constructor( + private org: OrgService, + private net: NetService, + public patronService: PatronService, + public context: PatronManagerService + ) {} + + ngOnInit() { + } +} + diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/edit.component.html b/Open-ILS/src/eg2/src/app/staff/circ/patron/edit.component.html index 383f2fc2a8..035f79c3b7 100644 --- a/Open-ILS/src/eg2/src/app/staff/circ/patron/edit.component.html +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/edit.component.html @@ -1,11 +1,3 @@ -
-
- - - - -
-
diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/edit.component.ts b/Open-ILS/src/eg2/src/app/staff/circ/patron/edit.component.ts index 061ae91971..61012290ac 100644 --- a/Open-ILS/src/eg2/src/app/staff/circ/patron/edit.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/edit.component.ts @@ -12,9 +12,6 @@ import {PatronManagerService} from './patron.service'; }) export class EditComponent implements OnInit { - // CSS class for the main edit pane - @Input() contentPaneClass = ''; - constructor( private org: OrgService, private net: NetService, diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.component.css b/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.component.css index dbe3658876..d4abd5f1e6 100644 --- a/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.component.css +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.component.css @@ -1,11 +1,5 @@ -::ng-deep .patron-content-pane { - margin-top: 10px; - padding-top: 10px; - margin-right: 5px; - padding-right: 5px; - position: fixed; - height: 100%; - overflow-y: auto; +::ng-deep legend { + font-size: 1rem; /* defaults to 1.5 */ } diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.component.html b/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.component.html index cd8ec32560..59942686f1 100644 --- a/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.component.html +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.component.html @@ -1,65 +1,154 @@ - -
-
-

- {{patronService.namePart(context.patron, 'family_name')}}, - {{patronService.namePart(context.patron, 'first_given_name')}} - {{patronService.namePart(context.patron, 'second_given_name')}} -

-
-
- -
-
+ + + + + +
-
- +
- - - -
-
-
+
+ + + +
- -
+ +
+ +
+ + + + + + + +
+ +
- +
diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.component.ts b/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.component.ts index fa5774b203..11cee905ed 100644 --- a/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.component.ts @@ -7,16 +7,19 @@ import {PatronService} from '@eg/staff/share/patron/patron.service'; import {PatronManagerService} from './patron.service'; import {PatronSearchComponent} from '@eg/staff/share/patron/search.component'; +const MAIN_TABS = + ['checkout', 'items_out', 'holds', 'bills', 'messages', 'edit', 'search']; + @Component({ templateUrl: 'patron.component.html', styleUrls: ['patron.component.css'] }) export class PatronComponent implements OnInit, AfterViewInit { - patronTab = 'search'; patronId: number; + patronTab = 'search'; + altTab: string; showSummary = true; - viewInitDone = false; constructor( private router: Router, @@ -36,6 +39,13 @@ export class PatronComponent implements OnInit, AfterViewInit { this.patronTab = params.get('tab') || 'search'; this.patronId = +params.get('id'); + if (MAIN_TABS.includes(this.patronTab)) { + this.altTab = null; + } else { + this.altTab = this.patronTab; + this.patronTab = 'other'; + } + const prevId = this.context.patron ? this.context.patron.id() : null; @@ -50,11 +60,7 @@ export class PatronComponent implements OnInit, AfterViewInit { }); } - // Trick that allows us to set a value for ngbNavOutlet, whose - // component is not avilable until after view init, without - // firing "expression changed after check" errors. ngAfterViewInit() { - setTimeout(() => this.viewInitDone = true); } beforeTabChange(evt: NgbNavChangeEvent) { @@ -73,6 +79,9 @@ export class PatronComponent implements OnInit, AfterViewInit { case 'bcsearch': url += this.patronTab; break; + case 'other': + url += `${this.patronId}/${this.altTab}`; + break; default: url += `${this.patronId}/${this.patronTab}`; } @@ -80,6 +89,10 @@ export class PatronComponent implements OnInit, AfterViewInit { this.router.navigate([url]); } + showSummaryPane(): boolean { + return this.showSummary || this.patronTab === 'search'; + } + // Patron row single-clicked in the grid. Load the patron without // leaving the search tab. patronSelectionChange(ids: number[]) { @@ -94,7 +107,7 @@ export class PatronComponent implements OnInit, AfterViewInit { } // Route to checkout tab for selected patron. - patronsSelected(rows: any[]) { + patronsActivated(rows: any[]) { if (rows.length !== 1) { return; } const id = rows[0].id(); @@ -103,5 +116,14 @@ export class PatronComponent implements OnInit, AfterViewInit { this.routeToTab(); } + disablePurge(): boolean { + return + this.context.patron.super_user() === 't' || + this.patronId === this.auth.user().id(); + } + + purgeAccount() { + // show scary warning, etc. + } } diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.module.ts b/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.module.ts index d16f6f1022..76cd7dcf54 100644 --- a/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/patron.module.ts @@ -11,6 +11,7 @@ import {PatronComponent} from './patron.component'; import {SummaryComponent} from './summary.component'; import {CheckoutComponent} from './checkout.component'; import {EditComponent} from './edit.component'; +import {EditToolbarComponent} from './edit-toolbar.component'; import {BcSearchComponent} from './bcsearch.component'; @NgModule({ @@ -19,6 +20,7 @@ import {BcSearchComponent} from './bcsearch.component'; SummaryComponent, CheckoutComponent, EditComponent, + EditToolbarComponent, BcSearchComponent ], imports: [ diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/summary-component.css b/Open-ILS/src/eg2/src/app/staff/circ/patron/summary-component.css deleted file mode 100644 index 71ba8a412d..0000000000 --- a/Open-ILS/src/eg2/src/app/staff/circ/patron/summary-component.css +++ /dev/null @@ -1,6 +0,0 @@ - -.patron-summary-container .row:nth-child(odd) { - background-color: rgb(248, 248, 248); -} - - diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/summary.component.css b/Open-ILS/src/eg2/src/app/staff/circ/patron/summary.component.css new file mode 100644 index 0000000000..71ba8a412d --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/summary.component.css @@ -0,0 +1,6 @@ + +.patron-summary-container .row:nth-child(odd) { + background-color: rgb(248, 248, 248); +} + + diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/summary.component.html b/Open-ILS/src/eg2/src/app/staff/circ/patron/summary.component.html index 57bd105718..ecba5a6a12 100644 --- a/Open-ILS/src/eg2/src/app/staff/circ/patron/summary.component.html +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/summary.component.html @@ -1,5 +1,12 @@
+ +

+ {{patronService.namePart(context.patron, 'family_name')}}, + {{patronService.namePart(context.patron, 'first_given_name')}} + {{patronService.namePart(context.patron, 'second_given_name')}} +

+
Profile
{{context.patron.profile().name()}}
@@ -110,5 +117,17 @@
Email
XXXXXXXXXX
- + +
+ +
+
+
+ {{addr.address_type()}} +
{{addr.street1()}} {{addr.street2()}}
+
{{addr.city()}}, {{addr.state()}} {{addr.post_code()}}
+
+ +
+
diff --git a/Open-ILS/src/eg2/src/app/staff/circ/patron/summary.component.ts b/Open-ILS/src/eg2/src/app/staff/circ/patron/summary.component.ts index 4381075b51..90da1f9230 100644 --- a/Open-ILS/src/eg2/src/app/staff/circ/patron/summary.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/circ/patron/summary.component.ts @@ -8,7 +8,7 @@ import {PatronManagerService} from './patron.service'; @Component({ templateUrl: 'summary.component.html', - styleUrls: ['summary-component.css'], + styleUrls: ['summary.component.css'], selector: 'eg-patron-summary' }) export class SummaryComponent implements OnInit { diff --git a/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.ts b/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.ts index d09daf27b7..3fd88ef766 100644 --- a/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.ts @@ -43,7 +43,7 @@ export class PatronSearchComponent implements OnInit, AfterViewInit { // Fires on dbl-click or Enter while one or more search result // rows are selected. - @Output() patronsSelected: EventEmitter; + @Output() patronsActivated: EventEmitter; // Fires when the selection of search result rows changes. // Emits an array of patron IDs @@ -62,7 +62,7 @@ export class PatronSearchComponent implements OnInit, AfterViewInit { private auth: AuthService, private store: ServerStoreService ) { - this.patronsSelected = new EventEmitter(); + this.patronsActivated = new EventEmitter(); this.selectionChange = new EventEmitter(); this.dataSource = new GridDataSource(); this.dataSource.getRows = (pager: Pager, sort: any[]) => { @@ -105,7 +105,7 @@ export class PatronSearchComponent implements OnInit, AfterViewInit { } rowsActivated(rows: IdlObject | IdlObject[]) { - this.patronsSelected.emit([].concat(rows)); + this.patronsActivated.emit([].concat(rows)); } getSelected(): IdlObject[] { diff --git a/Open-ILS/src/eg2/src/styles.css b/Open-ILS/src/eg2/src/styles.css index d1144fd9fb..4459b94f85 100644 --- a/Open-ILS/src/eg2/src/styles.css +++ b/Open-ILS/src/eg2/src/styles.css @@ -141,6 +141,14 @@ h5 {font-size: .95rem} font-size: 99%; } +/* Items stick to the top of the page once scrolled past, + * leaving room above for the nav bar */ +.sticky-top-with-nav { + top: 48px; + position: sticky; + z-index: 1; +} + /* -------------------------------------------------------------------------- /* Form Validation CSS - https://angular.io/guide/form-validation * TODO: these colors don't fit the EG color scheme