Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/ilovecveti.ru/bitrix/js/fileman/userfield/address_widget/src/view/ |
Upload File : |
import { Address as AddressEntity } from 'location.core'; import { Dom, Event, Loc, Tag } from 'main.core'; import { EventEmitter } from 'main.core.events'; import { BaseView } from './baseview'; import './css/style.css'; import { EditEntry } from './editentry'; export class Edit extends BaseView { #fieldName = ''; #fieldFormName = ''; #addresses: AddressEntity[] = []; #inputsWrapper: Element = null; #isMultiple = false; #isCompactMode = false; #showMap = true; #showDetailsToggle: boolean = false; #inputs: EditEntry[] = []; constructor(params: Object) { super(params); this.#fieldName = params.fieldName; this.#fieldFormName = params.fieldFormName; this.#addresses = params.addresses; this.#isMultiple = params.isMultiple; this.#isCompactMode = params.compactMode; this.#showMap = params.showMap; this.#showDetailsToggle = Boolean(params.showDetailsToggle ?? false); } layout(): Element { const layout = Tag.render`<div class="address-edit-wrapper"></div>`; const inputsWrapper = Tag.render`<div class="address-inputs-wrapper"></div>`; if (this.#addresses.length > 0) { this.#addresses.forEach((address) => { const input = this.createInputForAddress(address); Dom.append(input.layout(), inputsWrapper); }); } else { const input = this.createInputForAddress(); Dom.append(input.layout(), inputsWrapper); } Dom.append(inputsWrapper, layout); this.#inputsWrapper = inputsWrapper; if (this.#isMultiple) { const addInputElement = Tag.render`<input type="button" value="${Loc.getMessage('ADDRESS_USERFIELD_ADD_INPUT')}" />`; Event.bind(addInputElement, 'click', this.addInput.bind(this)); Dom.append(addInputElement, layout); } Dom.append(layout, this.getWrapper()); return this.getWrapper(); } addInput() { if (!this.#inputsWrapper) { return; } const input = this.createInputForAddress(); Dom.append(input.layout(), this.#inputsWrapper); } createInputForAddress(address: AddressEntity): EditEntry { const entry = new EditEntry({ wrapper: this.getWrapper(), address: address, fieldName: this.#fieldName, fieldFormName: this.#fieldFormName, enableRemoveButton: this.#isMultiple, initialAddressId: parseInt(address?.id) ?? null, isCompactMode: this.#isCompactMode, showMap: this.#showMap, showDetailsToggle: this.#showDetailsToggle, }); EventEmitter.subscribe(entry, EditEntry.onRemoveInputButtonClickedEvent, this.removeInput.bind(this, entry)); this.#inputs.push(entry); return entry; } removeInput(input: EditEntry) { const activeInputsCount = this.#inputs.filter((input) => {return !input.isDestroyed()}).length; if (activeInputsCount > 1) { input.destroy(); } } }