UNPKG

stimulsoft-forms

Version:
664 lines 85.7 kB
import { Injectable } from "@angular/core"; import { StiTextBoxComponent } from "../components/sti-text-box/sti-text-box.component"; import { StiNumberBoxComponent } from "../components/sti-number-box/sti-number-box.component"; import { StiComboBoxComponent } from "../components/sti-combo-box/sti-combo-box.component"; import { StiListBoxComponent } from "../components/sti-list-box/sti-list-box.component"; import { StiSingleSelectionComponent } from "../components/sti-single-selection/sti-single-selection.component"; import { StiMultipleSelectionComponent } from "../components/sti-multiple-selection/sti-multiple-selection.component"; import { StiCheckBoxComponent } from "../components/sti-check-box/sti-check-box.component"; import { StiLineComponent } from "../components/sti-line/sti-line.component"; import { StiSignatureComponent } from "../components/sti-signature/sti-signature.component"; import { StiDateTimeBoxComponent } from "../components/sti-date-time-box/sti-date-time-box.component"; import { StiTableComponent } from "../components/sti-table/sti-table.component"; import { StiImageComponent } from "../components/sti-image/sti-image.component"; import { StiButtonComponent } from "../components/sti-button/sti-button.component"; import { StiBarcodeComponent } from "../components/sti-barcode/sti-barcode.component"; import { StiTextComponent } from "../components/sti-text/sti-text.component"; import { StiLabelComponent } from "../components/sti-label/sti-label.component"; import { Subject } from "rxjs"; import { StiDraggableService } from "./sti-draggable.service"; import { StiBarcodeElement } from "../elements/StiBarcodeElement"; import { StiButtonElement } from "../elements/StiButtonElement"; import { StiCheckBoxElement } from "../elements/StiCheckBoxElement"; import { StiComboBoxElement } from "../elements/StiComboBoxElement"; import { StiDateTimeBoxElement } from "../elements/StiDateTimeBoxElement"; import { StiImageElement } from "../elements/StiImageElement"; import { StiLabelElement } from "../elements/StiLabelElement"; import StiLineElement from "../elements/StiLineElement"; import { StiListBoxElement } from "../elements/StiListBoxElement"; import { StiMultipleSelectionElement } from "../elements/StiMultipleSelectionElement"; import { StiNumberBoxElement } from "../elements/StiNumberBoxElement"; import { StiPanelElement } from "../elements/StiPanelElement"; import { StiSignatureElement } from "../elements/StiSignatureElement"; import { StiSingleSelectionElement } from "../elements/StiSingleSelectionElement"; import { StiTableElement } from "../elements/StiTableElement"; import { StiTextBoxElement } from "../elements/StiTextBoxElement"; import { StiTextElement } from "../elements/StiTextElement"; import { StiAddressComponent } from "../components/sti-address/sti-address.component"; import { StiAddressElement } from "../elements/StiAddressElement"; import { StiPDFSignatureComponent } from "../components/sti-pdf-signature/sti-pdf-signature.component"; import { StiPDFSignatureElement } from "../elements/StiPDFSignatureElement"; import { StiPanelComponent } from "../components/sti-components-holder.component"; import * as i0 from "@angular/core"; import * as i1 from "./mouse.service"; import * as i2 from "./sti-draggable.service"; import * as i3 from "./model.service"; import * as i4 from "./sti-localization.service"; export class StiToolboxService { isEnabled(element) { if (this.unusedElements?.find((item) => item == element.id) || !this.isEnabledFromSettings(element)) { return false; } else { return true; } } isEnabledFromSettings(element) { return this.model.getBooleanSetting(this.idToCamelCase(element?.id)) ?? true; } getToolboxId(type) { if (type == "TextElement" || type == "Text") { return "text"; } else if (type == "Text_BoxElement" || type == "TextBox") { return "textbox"; } else if (type == "TableElement" || type == "Table") { return "table"; } else if (type == "Single_SelectionElement" || type == "SingleSelection") { return "singleSelection"; } else if (type == "SignatureElement" || type == "Signature") { return "signature"; } else if (type == "PDFSignatureElement" || type == "PDFSignature") { return "PDFsignature"; } else if (type == "PanelElement" || type == "Panel") { return "panel"; } else if (type == "Number_BoxElement" || type == "NumberBox") { return "numberbox"; } else if (type == "Multiple_SelectionElement" || type == "MultipleSelection") { return "multipleSelection"; } else if (type == "List_BoxElement" || type == "ListBox") { return "listbox"; } else if (type == "LineElement" || type == "Line") { return "line"; } else if (type == "LabelElement" || type == "Label") { return "label"; } else if (type == "ImageElement" || type == "Image") { return "image"; } else if (type == "DateTime_BoxElement" || type == "DateTimeBox") { return "dateTime"; } else if (type == "Combo_BoxElement" || type == "ComboBox") { return "combobox"; } else if (type == "Check_BoxElement" || type == "CheckBox") { return "checkbox"; } else if (type == "ButtonElement" || type == "Button") { return "button"; } else if (type == "BarCodeElement" || type == "BarCode") { return "barcode"; } else if (type == "AddressElement" || type == "Address") { return "address"; } } idToCamelCase(id) { switch (id) { case "textbox": return "showTextBox"; case "numberbox": return "showNumberBox"; case "combobox": return "showComboBox"; case "listbox": return "showListBox"; case "singleSelection": return "showSingleSelection"; case "multipleSelection": return "showMultipleSelection"; case "checkbox": return "showCheckBox"; case "signature": return "showSignature"; /* case "PDFsignature": return "showPDFSignature"; */ case "dateTime": return "showDateTimeBox"; case "table": return "showTable"; case "button": return "showButton"; case "barcode": return "showBarCode"; case "address": return "showAddress"; case "label": return "showLabel"; case "text": return "showText"; case "image": return "showImage"; case "line": return "showLine"; case "panel": return "showPanel"; } } isGroupEnabled(group) { if (group.caption == "Input" || group.caption == "Selection" || group.caption == "Other" || group.caption == "Divider") { if (group.caption == "Input") { if (!this.unusedElements?.find((item) => item == "textbox") || !this.unusedElements?.find((item) => item == "numberbox") || !this.unusedElements?.find((item) => item == "combobox") || !this.unusedElements?.find((item) => item == "dateTime")) { return true; } else { return false; } } else if (group.caption == "Selection") { if (!this.unusedElements?.find((item) => item == "singleSelection") || !this.unusedElements?.find((item) => item == "multipleSelection") || !this.unusedElements?.find((item) => item == "listbox") || !this.unusedElements?.find((item) => item == "checkbox")) { return true; } else { return false; } } else if (group.caption == "Other") { if (!this.unusedElements?.find((item) => item == "signature") || !this.unusedElements?.find((item) => item == "PDFsignature") || !this.unusedElements?.find((item) => item == "barcode") || !this.unusedElements?.find((item) => item == "address") || !this.unusedElements?.find((item) => item == "line")) { return true; } else { return false; } } } else { return true; } } isInsertInlineElementsDividerEnabled(element) { if (element.caption == "Divider") { if (!this.unusedElements?.find((item) => item == "textbox") || !this.unusedElements?.find((item) => item == "numberbox") || !this.unusedElements?.find((item) => item == "combobox") || !this.unusedElements?.find((item) => item == "dateTime") || !this.unusedElements?.find((item) => item == "singleSelection") || !this.unusedElements?.find((item) => item == "multipleSelection") || !this.unusedElements?.find((item) => item == "listbox") || !this.unusedElements?.find((item) => item == "checkbox") || !this.unusedElements?.find((item) => item == "signature") || !this.unusedElements?.find((item) => item == "PDFsignature") || !this.unusedElements?.find((item) => item == "barcode") || !this.unusedElements?.find((item) => item == "address") || !this.unusedElements?.find((item) => item == "line")) { return true; } else { return false; } } else { return false; } } isToolboxInlineElementsDividerEnabled(element) { if (element.caption == "Divider") { if (!this.unusedElements?.find((item) => item == "textbox") || !this.unusedElements?.find((item) => item == "numberbox") || !this.unusedElements?.find((item) => item == "combobox") || !this.unusedElements?.find((item) => item == "dateTime") || !this.unusedElements?.find((item) => item == "singleSelection") || !this.unusedElements?.find((item) => item == "multipleSelection") || !this.unusedElements?.find((item) => item == "listbox") || !this.unusedElements?.find((item) => item == "checkbox") || !this.unusedElements?.find((item) => item == "signature") || !this.unusedElements?.find((item) => item == "PDFsignature") || !this.unusedElements?.find((item) => item == "barcode") || !this.unusedElements?.find((item) => item == "address") || !this.unusedElements?.find((item) => item == "table") || !this.unusedElements?.find((item) => item == "button")) { return true; } else { return false; } } else { return false; } } isInsertOutlineElementsDividerEnabled() { if (!this.unusedElements?.find((item) => item == "table") || !this.unusedElements?.find((item) => item == "button") || !this.unusedElements?.find((item) => item == "label") || !this.unusedElements?.find((item) => item == "text") || !this.unusedElements?.find((item) => item == "image") || !this.unusedElements?.find((item) => item == "panel")) { return true; } else { return false; } } isToolboxOutlineElementsDividerEnabled() { if (!this.unusedElements?.find((item) => item == "label") || !this.unusedElements?.find((item) => item == "text") || !this.unusedElements?.find((item) => item == "image") || !this.unusedElements?.find((item) => item == "line") || !this.unusedElements?.find((item) => item == "panel")) { return true; } else { return false; } } haveEnabledComponents() { let isEnabled = false; for (let element of this.elements) { if (element.enabled) { isEnabled = true; break; } } return isEnabled; } constructor(mouseService, draggableService, model, loc) { this.mouseService = mouseService; this.draggableService = draggableService; this.model = model; this.loc = loc; this.showGroupPreview = false; this.elementsForRibbon = [ { caption: "Input", image: "images.Toolbox.StiTextBoxElement.png", category: "PropertyMain", }, { caption: "Selection", image: "images.Toolbox.StiSingleSelectionElement.png", }, { caption: "Others", image: "images.Toolbox.StiSignatureElement.png", category: "FormDesigner", }, { caption: "Divider" }, { caption: "StiTable", image: "images.Toolbox.StiTableElement.png", id: "table", component: StiTableComponent, element: StiTableElement, setForm: true }, { caption: "StiButton", image: "images.Toolbox.StiButtonElement.png", id: "button", component: StiButtonComponent, element: StiButtonElement, }, { caption: "StiLabelControl", image: "images.Toolbox.StiLabelElement.png", id: "label", component: StiLabelComponent, element: StiLabelElement, category: "Dialogs", }, { caption: "StiText", image: "images.Toolbox.StiRichTextElement.png", id: "text", component: StiTextComponent, element: StiTextElement, }, { caption: "StiImage", image: "images.Toolbox.StiImageElement.png", id: "image", component: StiImageComponent, element: StiImageElement, }, { caption: "StiPanel", image: "images.Toolbox.StiPanelElement.png", id: "panel", component: StiPanelComponent, element: StiPanelElement, }, ]; this.inputGroup = [ { caption: "StiTextBoxControl", image: "images.Toolbox.StiTextBoxElement.png", id: "textbox", component: StiTextBoxComponent, element: StiTextBoxElement, category: "Dialogs", }, { caption: "StiNumberBox", image: "images.Toolbox.StiNumberBoxElement.png", id: "numberbox", component: StiNumberBoxComponent, element: StiNumberBoxElement, }, { caption: "StiComboBox", image: "images.Toolbox.StiComboBoxElement.png", id: "combobox", component: StiComboBoxComponent, element: StiComboBoxElement, }, { caption: "StiDateTimePickerControl", image: "images.Toolbox.StiDateTimeBoxElement.png", id: "dateTime", component: StiDateTimeBoxComponent, element: StiDateTimeBoxElement, setForm: true, category: "Dialogs", }, ]; this.selectionGroup = [ { caption: "StiSingleSelection", image: "images.Toolbox.StiSingleSelectionElement.png", id: "singleSelection", component: StiSingleSelectionComponent, element: StiSingleSelectionElement, }, { caption: "StiMultipleSelection", image: "images.Toolbox.StiMultipleSelectionElement.png", id: "multipleSelection", component: StiMultipleSelectionComponent, element: StiMultipleSelectionElement, }, { caption: "StiListBox", image: "images.Toolbox.StiListBoxElement.png", id: "listbox", component: StiListBoxComponent, element: StiListBoxElement, }, { caption: "StiCheckBox", image: "images.Toolbox.StiCheckBoxElement.png", id: "checkbox", component: StiCheckBoxComponent, element: StiCheckBoxElement, }, ]; this.otherGroup = [ { caption: "StiElectronicSignature", image: "images.Toolbox.StiElectronicSignature.png", id: "signature", component: StiSignatureComponent, element: StiSignatureElement, }, { caption: "StiPdfDigitalSignature", image: "images.Toolbox.StiPdfDigitalSignature.png", id: "PDFsignature", component: StiPDFSignatureComponent, element: StiPDFSignatureElement, }, { caption: "StiBarCode", image: "images.Toolbox.StiBarCodeElement.png", id: "barcode", component: StiBarcodeComponent, element: StiBarcodeElement, }, { caption: "Address", image: "images.Toolbox.Address.png", id: "address", component: StiAddressComponent, element: StiAddressElement, category: "Report", }, { caption: "Line", image: "images.Toolbox.StiLineElement.png", id: "line", component: StiLineComponent, element: StiLineElement, category: "Chart", }, ]; this.elements = [ { caption: "StiTextBoxControl", image: "images.Toolbox.StiTextBoxElement.png", id: "textbox", component: StiTextBoxComponent, element: StiTextBoxElement, enabled: true, category: "Dialogs", }, { caption: "StiNumberBox", image: "images.Toolbox.StiNumberBoxElement.png", id: "numberbox", component: StiNumberBoxComponent, element: StiNumberBoxElement, enabled: true, }, { caption: "StiComboBox", image: "images.Toolbox.StiComboBoxElement.png", id: "combobox", component: StiComboBoxComponent, element: StiComboBoxElement, enabled: true, }, { caption: "StiListBox", image: "images.Toolbox.StiListBoxElement.png", id: "listbox", component: StiListBoxComponent, element: StiListBoxElement, enabled: true, }, { caption: "StiSingleSelection", image: "images.Toolbox.StiSingleSelectionElement.png", id: "singleSelection", component: StiSingleSelectionComponent, element: StiSingleSelectionElement, enabled: true, }, { caption: "StiMultipleSelection", image: "images.Toolbox.StiMultipleSelectionElement.png", id: "multipleSelection", component: StiMultipleSelectionComponent, element: StiMultipleSelectionElement, enabled: true, }, { caption: "StiCheckBox", image: "images.Toolbox.StiCheckBoxElement.png", id: "checkbox", component: StiCheckBoxComponent, element: StiCheckBoxElement, enabled: true, }, { caption: "StiElectronicSignature", image: "images.Toolbox.StiElectronicSignature.png", id: "signature", component: StiSignatureComponent, element: StiSignatureElement, enabled: true, }, { caption: "StiPdfDigitalSignature", image: "images.Toolbox.StiPdfDigitalSignature.png", id: "PDFsignature", component: StiPDFSignatureComponent, element: StiPDFSignatureElement, enabled: true, }, { caption: "StiDateTimePickerControl", image: "images.Toolbox.StiDateTimeBoxElement.png", id: "dateTime", component: StiDateTimeBoxComponent, element: StiDateTimeBoxElement, enabled: true, category: "Dialogs", }, { caption: "StiTable", image: "images.Toolbox.StiTableElement.png", id: "table", component: StiTableComponent, element: StiTableElement, enabled: true, setForm: true }, { caption: "StiButton", image: "images.Toolbox.StiButtonElement.png", id: "button", component: StiButtonComponent, element: StiButtonElement, enabled: true, }, { caption: "StiBarCode", image: "images.Toolbox.StiBarCodeElement.png", id: "barcode", component: StiBarcodeComponent, element: StiBarcodeElement, enabled: true, }, { caption: "Address", image: "images.Toolbox.Address.png", id: "address", component: StiAddressComponent, element: StiAddressElement, enabled: true, category: "Report", }, { caption: "Divider" }, { caption: "StiLabelControl", image: "images.Toolbox.StiLabelElement.png", id: "label", component: StiLabelComponent, element: StiLabelElement, enabled: true, category: "Dialogs", }, { caption: "StiText", image: "images.Toolbox.StiRichTextElement.png", id: "text", component: StiTextComponent, element: StiTextElement, enabled: true, }, { caption: "StiImage", image: "images.Toolbox.StiImageElement.png", id: "image", component: StiImageComponent, element: StiImageElement, enabled: true, }, { caption: "Line", image: "images.Toolbox.StiLineElement.png", id: "line", component: StiLineComponent, element: StiLineElement, enabled: true, category: "Chart", }, { caption: "StiPanel", image: "images.Toolbox.StiPanelElement.png", id: "panel", component: StiPanelComponent, element: StiPanelElement, enabled: true, }, ]; this.unusedElements = []; this.subject = new Subject(); this.showToolbox = true; mouseService.getDocumentMouseMove().subscribe((event) => { this.onMouseMove(event); }); mouseService.getDocumentMouseUp().subscribe(() => { // this.mouseDownComponent = null; }); } getMessage() { return this.subject.asObservable(); } elementMouseDown(component, event) { this.mouseDownComponent = component; this.mouseDownX = event.clientX; this.mouseDownY = event.clientY; } elementDoubleClick(component) { this.mouseDownComponent = null; let element = new component.element.element(component.element.setForm ? this.model.form : undefined); this.model.form.settings.applySettings(element); this.draggableService.addingByDoubleClick(element); } onMouseMove(event) { if (this.mouseDownComponent && Math.max(Math.abs(this.mouseDownX - event.clientX), Math.abs(this.mouseDownY - event.clientY)) > StiDraggableService.MOUSE_DELTA) { let element = new this.mouseDownComponent.element.element(this.mouseDownComponent.element.setForm ? this.model.form : undefined); this.model.form.settings.applySettings(element); this.model.elementToUpdate = element; this.draggableService.startDrag(event, element); if (this.model.showGroupPreview) { this.model.showGroupPreview = false; } this.mouseDownComponent = null; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiToolboxService, deps: [{ token: i1.StiMouseService }, { token: i2.StiDraggableService }, { token: i3.StiModelService }, { token: i4.StiLocalizationService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiToolboxService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiToolboxService, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.StiMouseService }, { type: i2.StiDraggableService }, { type: i3.StiModelService }, { type: i4.StiLocalizationService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RpLXRvb2xib3guc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0aW11bHNvZnQtZm9ybXMvc3JjL2xpYi9zZXJ2aWNlcy9zdGktdG9vbGJveC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDOUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDM0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFDaEgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDdEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDNUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDdEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0Us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