Your IP : 172.69.7.233


Current Path : /var/www/element/data/www/revenuestory.ru/bitrix/js/landing/ui/form/
Upload File :
Current File : /var/www/element/data/www/revenuestory.ru/bitrix/js/landing/ui/form/dynamic_block_form.js

;(function() {
	"use strict";

	BX.namespace("BX.Landing.UI.Form");

	BX.Landing.UI.Form.DynamicBlockForm = function(data)
	{
		BX.Landing.UI.Form.BaseForm.apply(this, arguments);
		this.type = data.type;
		this.forms = data.forms;
		this.code = data.code;
		this.onSourceChangeHandler = data.onSourceChange;
		this.dynamicParams = data.dynamicParams;

		this.settingFieldsSelectors = [
			"source"
		];

		this.addField(this.createSourceField());
	};

	BX.Landing.UI.Form.DynamicBlockForm.prototype = {
		constructor: BX.Landing.UI.Form.DynamicBlockForm,
		__proto__: BX.Landing.UI.Form.BaseForm.prototype,

		getSources: function()
		{
			return BX.Landing.Main.getInstance().options.sources;
		},

		getSourceById: function(id)
		{
			return this.getSources().find(function(source) {
				return String(source.id) === String(id);
			});
		},

		getSourcesFieldItems: function()
		{
			return this.getSources().map(function(source) {
				return {name: source.name, value: source.id};
			});
		},

		createSourceField: function()
		{
			var value = "";

			if (
				BX.type.isPlainObject(this.dynamicParams)
				&& BX.type.isPlainObject(this.dynamicParams.wrapper)
				&& BX.type.isPlainObject(this.dynamicParams.wrapper.settings)
				&& BX.type.isString(this.dynamicParams.wrapper.settings.source)
			)
			{
				value = this.dynamicParams.wrapper.settings.source;
			}

			var source = this.getSourceById(value);

			if (!source)
			{
				source = this.getSources()[0];
			}

			setTimeout(function() {
				this.onSourceChangeHandler.apply(this, [source]);
			}.bind(this), 0);

			return new BX.Landing.UI.Field.Dropdown({
				title: BX.Landing.Loc.getMessage('LANDING_CARDS__SOURCE_FIELD_TITLE'),
				selector: "source",
				content: value,
				items: this.getSourcesFieldItems(),
				onValueChange: function(field) {
					this.onSourceChangeHandler.apply(this, [this.getSourceById(field.getValue())]);
				}.bind(this)
			});
		},

		isReference: function(value)
		{
			var sources = this.getSources();

			if (BX.type.isArray(sources))
			{
				return sources.some(function(source) {
					if (BX.type.isArray(source.references))
					{
						return source.references.some(function(reference) {
							return reference.id === value;
						});
					}

					return false;
				});
			}

			return false;
		},

		serialize: function()
		{
			return this.fields.reduce(function(acc, field) {
				var value = field.getValue();

				if (this.settingFieldsSelectors.includes(field.selector))
				{
					if (field.selector === 'source')
					{
						acc.source = value;
					}

					acc.settings[field.selector] = value;
				}
				else if (
					value === '@hide'
					|| (BX.type.isPlainObject(value) && value.id === '@hide')
				)
				{
					acc.references[field.selector] = '@hide';

					if (BX.hasClass(field.layout, 'landing-ui-field-dynamic-dropdown'))
					{
						acc.stubs[field.selector] = '';
					}
					else if (BX.hasClass(field.layout, 'landing-ui-field-dynamic-image'))
					{
						acc.stubs[field.selector] = {
							id: -1,
							src: 'data:image/gif;base64,R0lGODlhAQABAIAAAP',
							alt: ''
						};
					}
				}
				else
				{
					if (
						this.isReference(value)
						|| (
							BX.type.isPlainObject(value)
							&& BX.type.isString(value.id)
						)
					)
					{
						if (this.isReference(value))
						{
							acc.references[field.selector] = {id: value};
						}
						else
						{
							acc.references[field.selector] = value;
						}

					}
					else
					{
						acc.stubs[field.selector] = value;
					}
				}

				return acc;
			}.bind(this), {settings: {}, references: {}, stubs: {}});
		}
	};
})();