Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/modules/main/lib/grid/ui/
Upload File :
Current File : /var/www/homesaver/www/bitrix/modules/main/lib/grid/ui/gridresponse.php

<?php

namespace Bitrix\Main\Grid\UI;

use Bitrix\Main\Application;
use Bitrix\Main\Engine\Response\Json;
use CMain;

/**
 * Grid's response for `bitrix:main.ui.grid` component.
 */
class GridResponse implements \Bitrix\Main\Grid\GridResponse
{
	/**
	 * @var array[]
	 */
	private array $messages = [];
	private mixed $payload = null;

	/**
	 * Add message to response.
	 *
	 * @param string $message
	 * @param string $type constant of `MessageType` class e.g. MessageType::ERROR
	 *
	 * @see \Bitrix\Main\Grid\MessageType
	 *
	 * @return void
	 */
	public function addMessage(string $message, string $type): void
	{
		$this->messages[] = [
			'TYPE' => $type,
			'TEXT' => $message,
		];
	}

	/**
	 * Add payload to response.
	 *
	 * @param mixed $payload
	 *
	 * @return void
	 */
	public function setPayload(mixed $payload): void
	{
		$this->payload = $payload;
	}

	/**
	 * @inheritDoc
	 *
	 * @return bool
	 */
	public function isSendable(): bool
	{
		return !(
			empty($this->messages) && empty($this->payload)
		);
	}

	/**
	 * Send response with messages.
	 *
	 * @return never
	 */
	public function send(): void
	{
		global $APPLICATION;

		/**
		 * @var CMain $APPLICATION
		 */

		$APPLICATION->RestartBuffer();

		// TODO: fix JS code for correct work without messages
		$responseData = [
			'messages' => $this->messages,
		];
		if (!empty($this->payload))
		{
			$responseData['payload'] = $this->payload;
		}

		$response = new Json($responseData);

		Application::getInstance()->end(200, $response);
	}
}