/
DateAndTimePopup.php
62 lines (51 loc) · 2.56 KB
/
DateAndTimePopup.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
/**
* @copyright Copyright (C) eZ Systems AS. All rights reserved.
* @license For full copyright and license information view LICENSE file distributed with this source code.
*/
namespace EzSystems\EzPlatformAdminUi\Behat\PageElement;
use DateTime;
use EzSystems\EzPlatformAdminUi\Behat\Helper\UtilityContext;
use EzSystems\EzPlatformAdminUi\Behat\PageElement\Fields\Time;
class DateAndTimePopup extends Element
{
public const ELEMENT_NAME = 'Date and time popup';
private const DATETIME_FORMAT = 'd/m/Y';
private const SETTING_SCRIPT_FORMAT = "document.querySelector('%s %s')._flatpickr.setDate('%s', true, '%s')";
public function __construct(UtilityContext $context, bool $isInline = false, $containerSelector = '')
{
parent::__construct($context);
$this->fields = [
'containerSelector' => $containerSelector,
'calendarSelector' => $isInline ? '.flatpickr-calendar' : '.flatpickr-calendar.inline',
'flatpickrSelector' => '.flatpickr-input',
];
}
/**
* @param DateTime $date Date to set
*/
public function setDate(DateTime $date, string $dateFormat = self::DATETIME_FORMAT): void
{
$dateScript = sprintf(self::SETTING_SCRIPT_FORMAT, $this->fields['containerSelector'], $this->fields['flatpickrSelector'], $date->format($dateFormat), $dateFormat);
$this->context->getSession()->getDriver()->executeScript($dateScript);
}
/**
* @param string $hour Hour to set
* @param string $minute Minute to set
*/
public function setTime(string $hour, string $minute): void
{
$isTimeOnly = $this->context->isElementVisible('.flatpickr-calendar.noCalendar');
if (!$isTimeOnly) {
// get current date as it's not possible to set time without setting date
$currentDateScript = sprintf('document.querySelector("%s %s")._flatpickr.selectedDates[0].toLocaleString()',
$this->fields['containerSelector'],
$this->fields['flatpickrSelector']);
$currentDate = $this->context->getSession()->getDriver()->evaluateScript($currentDateScript);
}
$valueToSet = $isTimeOnly ? sprintf('%s:%s:00', $hour, $minute) : sprintf('%s, %s:%s:00', explode(',', $currentDate)[0], $hour, $minute);
$format = $isTimeOnly ? 'H:i:S' : 'm/d/Y, H:i:S';
$timeScript = sprintf(self::SETTING_SCRIPT_FORMAT, $this->fields['containerSelector'], $this->fields['flatpickrSelector'], $valueToSet, $format);
$this->context->getSession()->getDriver()->executeScript($timeScript);
}
}