constructor(hash: any) {
if (hash) {
- hash.forEach((val, key) => this[key] = val);
+ Object.keys(hash).forEach(key => this[key] = hash[key]);
}
}
}
constructor() {
this.isAvailable = null;
+ this.messages = {};
this.msgId = 1;
}
- connect() {
+ connect(): boolean {
- if (this.isAvailable) {
- // Already connected
- return;
+ if (this.isAvailable !== null) {
+ return this.isAvailable;
}
// When the Hatch extension loads, it tacks an attribute onto
// the top-level documentElement to indicate it's available.
if (!window.document.documentElement.getAttribute('hatch-is-open')) {
- this.isAvailable = false;
- return;
+ console.warn('Could not connect to Hatch');
+ return this.isAvailable = false;
}
window.addEventListener('message', event => {
}
});
- this.isAvailable = true;
+ return this.isAvailable = true;
}
// Send a request from the browser to Hatch.
import {Component, OnInit, TemplateRef, ElementRef, Renderer2} from '@angular/core';
import {PrintService, PrintRequest} from './print.service';
import {StoreService} from '@eg/core/store.service';
+import {ServerStoreService} from '@eg/core/server-store.service';
import {HatchService, HatchMessage} from './hatch.service';
@Component({
private renderer: Renderer2,
private elm: ElementRef,
private store: StoreService,
+ private serverStore: ServerStoreService,
private hatch: HatchService,
private printer: PrintService) {
this.isPrinting = false;
this.htmlContainer =
this.renderer.selectRootElement('#eg-print-html-container');
-
- if (this.store.getLocalItem('eg.hatch.enable.printing')) {
- this.hatch.connect();
- }
}
handlePrintRequest(printReq: PrintRequest) {
return;
}
- if (printReq.text && true /* !this.hatch.isActive */) {
+ if (printReq.text && !this.useHatch()) {
// Insert HTML into the browser DOM for in-browser printing only.
if (printReq.contentType === 'text/plain') {
show_dialog: printReq.showDialog
});
- if (this.store.getLocalItem('eg.hatch.enable.printing')) {
+ if (this.useHatch()) {
this.printViaHatch(printReq);
} else {
// Here the needed HTML is already in the page.
}
}
+ useHatch(): boolean {
+ return this.store.getLocalItem('eg.hatch.enable.printing')
+ && this.hatch.connect();
+ }
+
printViaHatch(printReq: PrintRequest) {
// Send a full HTML document to Hatch
const html = `<html><body>${printReq.text}</body></html>`;
- const config = this.store.getLocalItem(
- `eg.print.config.${printReq.printContext}`);
-
- const msg = new HatchMessage({
- action: 'print',
- content : html,
- settings : config,
- contentType : printReq.contentType,
- showDialog : printReq.showDialog
- });
- this.hatch.sendRequest(msg).then(
- ok => console.debug('Print request succeeded'),
- err => console.warn('Print request failed')
- );
+ this.serverStore.getItem(`eg.print.config.${printReq.printContext}`)
+ .then(config => {
+
+ const msg = new HatchMessage({
+ action: 'print',
+ content: html,
+ settings: config || {},
+ contentType: 'text/html',
+ showDialog: printReq.showDialog
+ });
+
+ this.hatch.sendRequest(msg).then(
+ ok => console.debug('Print request succeeded'),
+ err => console.warn('Print request failed', err)
+ );
+ });
}
}
<button class="btn btn-secondary" (click)="doPrint()">Test Print</button>
<ng-template #printTemplate let-context>Hello, {{context.world}}!</ng-template>
+<button class="btn btn-secondary" (click)="printWithDialog()">Print with dialog</button>
+
<br/><br/>
HERasdfE
<div class="row">
text: '<b>hello</b>',
printContext: 'default'
});
+ }
+ printWithDialog() {
+ this.printer.print({
+ template: this.printTemplate,
+ contextData: {world : this.world},
+ printContext: 'default',
+ showDialog: true
+ });
}
changeDate(date) {
)
);
+INSERT INTO config.workstation_setting_type (name, grp, datatype, label)
+VALUES (
+ 'eg.print.config.default', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.print.config.default',
+ 'Print config for default context',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.config.receipt', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.print.config.receipt',
+ 'Print config for receipt context',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.config.label', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.print.config.label',
+ 'Print config for label context',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.config.mail', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.print.config.mail',
+ 'Print config for mail context',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.config.offline', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.print.config.offline',
+ 'Print config for offline context',
+ 'cwst', 'label'
+ )
+);
+
--- /dev/null
+BEGIN;
+
+--SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
+
+INSERT INTO config.workstation_setting_type (name, grp, datatype, label)
+VALUES (
+ 'eg.print.config.default', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.print.config.default',
+ 'Print config for default context',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.config.receipt', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.print.config.receipt',
+ 'Print config for receipt context',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.config.label', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.print.config.label',
+ 'Print config for label context',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.config.mail', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.print.config.mail',
+ 'Print config for mail context',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.config.offline', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.print.config.offline',
+ 'Print config for offline context',
+ 'cwst', 'label'
+ )
+);
+
+COMMIT;
}
service.getPrintConfig = function(context) {
- return service.getRemoteItem('eg.print.config.' + context);
+ return service.getItem('eg.print.config.' + context);
}
service.setPrintConfig = function(context, config) {
- return service.setRemoteItem('eg.print.config.' + context, config);
+ return service.setItem('eg.print.config.' + context, config);
}
service.getPrinterOptions = function(name) {