From: Bill Erickson Date: Wed, 14 Aug 2019 19:15:29 +0000 (-0400) Subject: LP1840050 Modularize more components X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=614d43583bfa1f7917ed589f4247c0384fd1fa35;p=working%2FEvergreen.git LP1840050 Modularize more components Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/examples/fm_IDL.xml b/Open-ILS/examples/fm_IDL.xml index cb2b8bf157..3ffaffd569 100644 --- a/Open-ILS/examples/fm_IDL.xml +++ b/Open-ILS/examples/fm_IDL.xml @@ -6205,18 +6205,18 @@ SELECT usr, - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts b/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts index 33da1f49ff..674d348737 100644 --- a/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts +++ b/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts @@ -10,7 +10,7 @@ import {ToastService} from '@eg/share/toast/toast.service'; import {StringComponent} from '@eg/share/string/string.component'; import {NgbModal} from '@ng-bootstrap/ng-bootstrap'; import {ComboboxEntry} from '@eg/share/combobox/combobox.component'; -import {TranslateComponent} from '@eg/staff/share/translate/translate.component'; +import {TranslateComponent} from '@eg/share/translate/translate.component'; interface CustomFieldTemplate { diff --git a/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.module.ts b/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.module.ts new file mode 100644 index 0000000000..7be4cf8525 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.module.ts @@ -0,0 +1,27 @@ +import {NgModule} from '@angular/core'; +import {EgCommonModule} from '@eg/common.module'; +import {CommonWidgetsModule} from '@eg/share/common-widgets.module'; +import {StringModule} from '@eg/share/string/string.module'; +import {TranslateModule} from '@eg/share/translate/translate.module'; +import {FmRecordEditorComponent} from './fm-editor.component'; + + +@NgModule({ + declarations: [ + FmRecordEditorComponent + ], + imports: [ + EgCommonModule, + StringModule, + TranslateModule, + CommonWidgetsModule + ], + exports: [ + FmRecordEditorComponent + ], + providers: [ + ] +}) + +export class FmRecordEditorModule { } + diff --git a/Open-ILS/src/eg2/src/app/share/org-family-select/org-family-select.module.ts b/Open-ILS/src/eg2/src/app/share/org-family-select/org-family-select.module.ts new file mode 100644 index 0000000000..ea5fc2f4c7 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/share/org-family-select/org-family-select.module.ts @@ -0,0 +1,26 @@ +import {NgModule} from '@angular/core'; +import {EgCommonModule} from '@eg/common.module'; +import {EgCoreModule} from '@eg/core/core.module'; +import {CommonWidgetsModule} from '@eg/share/common-widgets.module'; +import {OrgFamilySelectComponent} from './org-family-select.component'; +import {ReactiveFormsModule} from '@angular/forms'; + +@NgModule({ + declarations: [ + OrgFamilySelectComponent + ], + imports: [ + EgCommonModule, + EgCoreModule, + CommonWidgetsModule, + ReactiveFormsModule + ], + exports: [ + OrgFamilySelectComponent + ], + providers: [ + ] +}) + +export class OrgFamilySelectModule { } + diff --git a/Open-ILS/src/eg2/src/app/share/string/string.module.ts b/Open-ILS/src/eg2/src/app/share/string/string.module.ts new file mode 100644 index 0000000000..185ede1eff --- /dev/null +++ b/Open-ILS/src/eg2/src/app/share/string/string.module.ts @@ -0,0 +1,25 @@ +import {NgModule} from '@angular/core'; +import {EgCommonModule} from '@eg/common.module'; +import {EgCoreModule} from '@eg/core/core.module'; +import {StringComponent} from '@eg/share/string/string.component'; +import {StringService} from '@eg/share/string/string.service'; + + +@NgModule({ + declarations: [ + StringComponent + ], + imports: [ + EgCommonModule, + EgCoreModule + ], + exports: [ + StringComponent + ], + providers: [ + StringService + ] +}) + +export class StringModule { } + diff --git a/Open-ILS/src/eg2/src/app/share/translate/translate.component.html b/Open-ILS/src/eg2/src/app/share/translate/translate.component.html new file mode 100644 index 0000000000..61b9cb4f90 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/share/translate/translate.component.html @@ -0,0 +1,62 @@ + + + + + diff --git a/Open-ILS/src/eg2/src/app/share/translate/translate.component.ts b/Open-ILS/src/eg2/src/app/share/translate/translate.component.ts new file mode 100644 index 0000000000..48809738c1 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/share/translate/translate.component.ts @@ -0,0 +1,145 @@ +import {Component, OnInit, Input, Renderer2} from '@angular/core'; +import {IdlService, IdlObject} from '@eg/core/idl.service'; +import {ToastService} from '@eg/share/toast/toast.service'; +import {LocaleService} from '@eg/core/locale.service'; +import {AuthService} from '@eg/core/auth.service'; +import {PcrudService} from '@eg/core/pcrud.service'; +import {DialogComponent} from '@eg/share/dialog/dialog.component'; +import {NgbModal} from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + selector: 'eg-translate', + templateUrl: 'translate.component.html' +}) + +export class TranslateComponent + extends DialogComponent implements OnInit { + + idlClassDef: any; + locales: IdlObject[]; + selectedLocale: string; + translatedValue: string; + existingTranslation: IdlObject; + + // These actions should update the idlObject and/or fieldName values, + // forcing the dialog to load a new string to translate. When set, + // applying a translation in the dialog will leave the dialog window open + // so the next/prev buttons can be used to fetch the next string. + nextString: () => void; + prevString: () => void; + + idlObj: IdlObject; + @Input() set idlObject(o: IdlObject) { + if (o) { + this.idlObj = o; + this.idlClassDef = this.idl.classes[o.classname]; + this.fetchTranslation(); + } + } + + field: string; + @Input() set fieldName(n: string) { + this.field = n; + } + + constructor( + private modal: NgbModal, // required for passing to parent + private renderer: Renderer2, + private idl: IdlService, + private toast: ToastService, + private locale: LocaleService, + private pcrud: PcrudService, + private auth: AuthService) { + super(modal); + } + + ngOnInit() { + // Default to the login locale + this.selectedLocale = this.locale.currentLocaleCode(); + this.locales = []; + this.locale.supportedLocales().subscribe(l => this.locales.push(l)); + + this.onOpen$.subscribe(() => { + const elm = this.renderer.selectRootElement('#translation-input'); + if (elm) { + elm.focus(); + elm.select(); + } + }); + } + + localeChanged(code: string) { + this.fetchTranslation(); + } + + fetchTranslation() { + const exist = this.existingTranslation; + + if (exist + && exist.fq_field() === this.fqField() + && exist.identity_value() === this.identValue()) { + // Already have the current translation object. + return; + } + + this.translatedValue = ''; + this.existingTranslation = null; + + this.pcrud.search('i18n', { + translation: this.selectedLocale, + fq_field : this.fqField(), + identity_value: this.identValue() + }).subscribe(tr => { + this.existingTranslation = tr; + this.translatedValue = tr.string(); + console.debug('found existing translation ', tr); + }); + } + + fqField(): string { + return this.idlClassDef.classname + '.' + this.field; + } + + identValue(): string { + return this.idlObj[this.idlClassDef.pkey || 'id'](); + } + + translate() { + if (!this.translatedValue) { return; } + + let entry; + + if (this.existingTranslation) { + entry = this.existingTranslation; + entry.string(this.translatedValue); + + this.pcrud.update(entry).toPromise().then( + ok => { + if (!this.nextString) { + this.close(this.translatedValue); + } + }, + err => console.error(err) + ); + + return; + } + + entry = this.idl.create('i18n'); + entry.fq_field(this.fqField()); + entry.identity_value(this.identValue()); + entry.translation(this.selectedLocale); + entry.string(this.translatedValue); + + this.pcrud.create(entry).toPromise().then( + ok => { + if (!this.nextString) { + this.close(this.translatedValue); + } + }, + err => console.error('Translation creation failed') + ); + } +} + + diff --git a/Open-ILS/src/eg2/src/app/share/translate/translate.module.ts b/Open-ILS/src/eg2/src/app/share/translate/translate.module.ts new file mode 100644 index 0000000000..41dbd5db7b --- /dev/null +++ b/Open-ILS/src/eg2/src/app/share/translate/translate.module.ts @@ -0,0 +1,23 @@ +import {NgModule} from '@angular/core'; +import {EgCommonModule} from '@eg/common.module'; +import {EgCoreModule} from '@eg/core/core.module'; +import {TranslateComponent} from './translate.component'; + + +@NgModule({ + declarations: [ + TranslateComponent + ], + imports: [ + EgCommonModule, + EgCoreModule + ], + exports: [ + TranslateComponent + ], + providers: [ + ] +}) + +export class TranslateModule { } + diff --git a/Open-ILS/src/eg2/src/app/staff/admin/common.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/common.module.ts index 5bd71d3efb..4bb5b30278 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/common.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/common.module.ts @@ -1,6 +1,9 @@ import {NgModule} from '@angular/core'; import {StaffCommonModule} from '@eg/staff/common.module'; import {LinkTableComponent, LinkTableLinkComponent} from '@eg/staff/share/link-table/link-table.component'; +import {TranslateModule} from '@eg/share/translate/translate.module'; +import {FmRecordEditorModule} from '@eg/share/fm-editor/fm-editor.module'; +import {AdminPageModule} from '@eg/staff/share/admin-page/admin-page.module'; import {BasicAdminPageComponent} from '@eg/staff/admin/basic-admin-page.component'; @NgModule({ @@ -10,10 +13,16 @@ import {BasicAdminPageComponent} from '@eg/staff/admin/basic-admin-page.componen BasicAdminPageComponent ], imports: [ - StaffCommonModule + StaffCommonModule, + TranslateModule, + FmRecordEditorModule, + AdminPageModule ], exports: [ StaffCommonModule, + TranslateModule, + FmRecordEditorModule, + AdminPageModule, LinkTableComponent, LinkTableLinkComponent, BasicAdminPageComponent diff --git a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/vandelay.module.ts b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/vandelay.module.ts index 9bbfd46a26..0f394285e3 100644 --- a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/vandelay.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/vandelay.module.ts @@ -1,8 +1,10 @@ import {NgModule} from '@angular/core'; +import {FmRecordEditorModule} from '@eg/share/fm-editor/fm-editor.module'; import {StaffCommonModule} from '@eg/staff/common.module'; import {CatalogCommonModule} from '@eg/share/catalog/catalog-common.module'; import {HttpClientModule} from '@angular/common/http'; import {TreeModule} from '@eg/share/tree/tree.module'; +import {AdminPageModule} from '@eg/staff/share/admin-page/admin-page.module'; import {VandelayRoutingModule} from './routing.module'; import {VandelayService} from './vandelay.service'; import {VandelayComponent} from './vandelay.component'; @@ -48,6 +50,8 @@ import {RecentImportsComponent} from './recent-imports.component'; imports: [ TreeModule, StaffCommonModule, + FmRecordEditorModule, + AdminPageModule, CatalogCommonModule, VandelayRoutingModule, HttpClientModule, diff --git a/Open-ILS/src/eg2/src/app/staff/catalog/catalog.module.ts b/Open-ILS/src/eg2/src/app/staff/catalog/catalog.module.ts index e0fbff851d..4fc82a2ce0 100644 --- a/Open-ILS/src/eg2/src/app/staff/catalog/catalog.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/catalog/catalog.module.ts @@ -1,4 +1,5 @@ import {NgModule} from '@angular/core'; +import {FmRecordEditorModule} from '@eg/share/fm-editor/fm-editor.module'; import {StaffCommonModule} from '@eg/staff/common.module'; import {CatalogCommonModule} from '@eg/share/catalog/catalog-common.module'; import {CatalogRoutingModule} from './routing.module'; @@ -54,6 +55,7 @@ import {SearchTemplatesComponent} from './search-templates.component'; ], imports: [ StaffCommonModule, + FmRecordEditorModule, CatalogCommonModule, CatalogRoutingModule, HoldsModule, diff --git a/Open-ILS/src/eg2/src/app/staff/common.module.ts b/Open-ILS/src/eg2/src/app/staff/common.module.ts index 66c62c32eb..a22df8056d 100644 --- a/Open-ILS/src/eg2/src/app/staff/common.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/common.module.ts @@ -4,21 +4,16 @@ import {CommonWidgetsModule} from '@eg/share/common-widgets.module'; import {AudioService} from '@eg/share/util/audio.service'; import {GridModule} from '@eg/share/grid/grid.module'; import {StaffBannerComponent} from './share/staff-banner.component'; -import {OrgFamilySelectComponent} from '@eg/share/org-family-select/org-family-select.component'; import {AccessKeyDirective} from '@eg/share/accesskey/accesskey.directive'; import {AccessKeyService} from '@eg/share/accesskey/accesskey.service'; import {AccessKeyInfoComponent} from '@eg/share/accesskey/accesskey-info.component'; import {OpChangeComponent} from '@eg/staff/share/op-change/op-change.component'; import {ToastService} from '@eg/share/toast/toast.service'; import {ToastComponent} from '@eg/share/toast/toast.component'; -import {StringComponent} from '@eg/share/string/string.component'; -import {StringService} from '@eg/share/string/string.service'; +import {StringModule} from '@eg/share/string/string.module'; import {TitleComponent} from '@eg/share/title/title.component'; -import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component'; import {BucketDialogComponent} from '@eg/staff/share/buckets/bucket-dialog.component'; import {BibSummaryComponent} from '@eg/staff/share/bib-summary/bib-summary.component'; -import {TranslateComponent} from '@eg/staff/share/translate/translate.component'; -import {AdminPageComponent} from '@eg/staff/share/admin-page/admin-page.component'; import {EgHelpPopoverComponent} from '@eg/share/eg-help-popover/eg-help-popover.component'; import {ReactiveFormsModule} from '@angular/forms'; @@ -29,22 +24,18 @@ import {ReactiveFormsModule} from '@angular/forms'; @NgModule({ declarations: [ StaffBannerComponent, - OrgFamilySelectComponent, AccessKeyDirective, AccessKeyInfoComponent, ToastComponent, - StringComponent, TitleComponent, OpChangeComponent, - FmRecordEditorComponent, BucketDialogComponent, BibSummaryComponent, - TranslateComponent, - AdminPageComponent, EgHelpPopoverComponent ], imports: [ EgCommonModule, + StringModule, ReactiveFormsModule, CommonWidgetsModule, GridModule @@ -54,18 +45,14 @@ import {ReactiveFormsModule} from '@angular/forms'; CommonWidgetsModule, GridModule, StaffBannerComponent, - OrgFamilySelectComponent, AccessKeyDirective, AccessKeyInfoComponent, ToastComponent, - StringComponent, + StringModule, TitleComponent, OpChangeComponent, - FmRecordEditorComponent, BucketDialogComponent, BibSummaryComponent, - TranslateComponent, - AdminPageComponent, EgHelpPopoverComponent ] }) @@ -77,7 +64,6 @@ export class StaffCommonModule { providers: [ // Export staff-wide services AccessKeyService, AudioService, - StringService, ToastService ] }; diff --git a/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.module.ts b/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.module.ts index 0937ab0ee3..a8db49ad5f 100644 --- a/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.module.ts @@ -1,8 +1,11 @@ import {NgModule} from '@angular/core'; +import {FmRecordEditorModule} from '@eg/share/fm-editor/fm-editor.module'; import {StaffCommonModule} from '@eg/staff/common.module'; +import {TranslateModule} from '@eg/share/translate/translate.module'; import {SandboxRoutingModule} from './routing.module'; import {SandboxComponent} from './sandbox.component'; import {ReactiveFormsModule} from '@angular/forms'; +import {OrgFamilySelectModule} from '@eg/share/org-family-select/org-family-select.module'; @NgModule({ declarations: [ @@ -10,6 +13,9 @@ import {ReactiveFormsModule} from '@angular/forms'; ], imports: [ StaffCommonModule, + TranslateModule, + FmRecordEditorModule, + OrgFamilySelectModule, SandboxRoutingModule, ReactiveFormsModule ], diff --git a/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts b/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts index c7798c4f5a..23d65200f7 100644 --- a/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts @@ -3,7 +3,7 @@ import {ActivatedRoute} from '@angular/router'; import {IdlService, IdlObject} from '@eg/core/idl.service'; import {GridDataSource} from '@eg/share/grid/grid'; import {GridComponent} from '@eg/share/grid/grid.component'; -import {TranslateComponent} from '@eg/staff/share/translate/translate.component'; +import {TranslateComponent} from '@eg/share/translate/translate.component'; import {ToastService} from '@eg/share/toast/toast.service'; import {Pager} from '@eg/share/util/pager'; import {PcrudService} from '@eg/core/pcrud.service'; diff --git a/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.module.ts b/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.module.ts new file mode 100644 index 0000000000..ae94c9f452 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.module.ts @@ -0,0 +1,33 @@ +import {NgModule} from '@angular/core'; +import {EgCommonModule} from '@eg/common.module'; +import {EgCoreModule} from '@eg/core/core.module'; +import {GridModule} from '@eg/share/grid/grid.module'; +import {StringModule} from '@eg/share/string/string.module'; +import {TranslateModule} from '@eg/share/translate/translate.module'; +import {FmRecordEditorModule} from '@eg/share/fm-editor/fm-editor.module'; +import {AdminPageComponent} from './admin-page.component'; +import {OrgFamilySelectModule} from '@eg/share/org-family-select/org-family-select.module'; + + +@NgModule({ + declarations: [ + AdminPageComponent + ], + imports: [ + EgCommonModule, + EgCoreModule, + StringModule, + OrgFamilySelectModule, + TranslateModule, + FmRecordEditorModule, + GridModule + ], + exports: [ + AdminPageComponent + ], + providers: [ + ] +}) + +export class AdminPageModule { } + diff --git a/Open-ILS/src/eg2/src/app/staff/share/translate/translate.component.html b/Open-ILS/src/eg2/src/app/staff/share/translate/translate.component.html deleted file mode 100644 index 61b9cb4f90..0000000000 --- a/Open-ILS/src/eg2/src/app/staff/share/translate/translate.component.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - diff --git a/Open-ILS/src/eg2/src/app/staff/share/translate/translate.component.ts b/Open-ILS/src/eg2/src/app/staff/share/translate/translate.component.ts deleted file mode 100644 index 48809738c1..0000000000 --- a/Open-ILS/src/eg2/src/app/staff/share/translate/translate.component.ts +++ /dev/null @@ -1,145 +0,0 @@ -import {Component, OnInit, Input, Renderer2} from '@angular/core'; -import {IdlService, IdlObject} from '@eg/core/idl.service'; -import {ToastService} from '@eg/share/toast/toast.service'; -import {LocaleService} from '@eg/core/locale.service'; -import {AuthService} from '@eg/core/auth.service'; -import {PcrudService} from '@eg/core/pcrud.service'; -import {DialogComponent} from '@eg/share/dialog/dialog.component'; -import {NgbModal} from '@ng-bootstrap/ng-bootstrap'; - -@Component({ - selector: 'eg-translate', - templateUrl: 'translate.component.html' -}) - -export class TranslateComponent - extends DialogComponent implements OnInit { - - idlClassDef: any; - locales: IdlObject[]; - selectedLocale: string; - translatedValue: string; - existingTranslation: IdlObject; - - // These actions should update the idlObject and/or fieldName values, - // forcing the dialog to load a new string to translate. When set, - // applying a translation in the dialog will leave the dialog window open - // so the next/prev buttons can be used to fetch the next string. - nextString: () => void; - prevString: () => void; - - idlObj: IdlObject; - @Input() set idlObject(o: IdlObject) { - if (o) { - this.idlObj = o; - this.idlClassDef = this.idl.classes[o.classname]; - this.fetchTranslation(); - } - } - - field: string; - @Input() set fieldName(n: string) { - this.field = n; - } - - constructor( - private modal: NgbModal, // required for passing to parent - private renderer: Renderer2, - private idl: IdlService, - private toast: ToastService, - private locale: LocaleService, - private pcrud: PcrudService, - private auth: AuthService) { - super(modal); - } - - ngOnInit() { - // Default to the login locale - this.selectedLocale = this.locale.currentLocaleCode(); - this.locales = []; - this.locale.supportedLocales().subscribe(l => this.locales.push(l)); - - this.onOpen$.subscribe(() => { - const elm = this.renderer.selectRootElement('#translation-input'); - if (elm) { - elm.focus(); - elm.select(); - } - }); - } - - localeChanged(code: string) { - this.fetchTranslation(); - } - - fetchTranslation() { - const exist = this.existingTranslation; - - if (exist - && exist.fq_field() === this.fqField() - && exist.identity_value() === this.identValue()) { - // Already have the current translation object. - return; - } - - this.translatedValue = ''; - this.existingTranslation = null; - - this.pcrud.search('i18n', { - translation: this.selectedLocale, - fq_field : this.fqField(), - identity_value: this.identValue() - }).subscribe(tr => { - this.existingTranslation = tr; - this.translatedValue = tr.string(); - console.debug('found existing translation ', tr); - }); - } - - fqField(): string { - return this.idlClassDef.classname + '.' + this.field; - } - - identValue(): string { - return this.idlObj[this.idlClassDef.pkey || 'id'](); - } - - translate() { - if (!this.translatedValue) { return; } - - let entry; - - if (this.existingTranslation) { - entry = this.existingTranslation; - entry.string(this.translatedValue); - - this.pcrud.update(entry).toPromise().then( - ok => { - if (!this.nextString) { - this.close(this.translatedValue); - } - }, - err => console.error(err) - ); - - return; - } - - entry = this.idl.create('i18n'); - entry.fq_field(this.fqField()); - entry.identity_value(this.identValue()); - entry.translation(this.selectedLocale); - entry.string(this.translatedValue); - - this.pcrud.create(entry).toPromise().then( - ok => { - if (!this.nextString) { - this.close(this.translatedValue); - } - }, - err => console.error('Translation creation failed') - ); - } -} - -