Skip to content

Commit c3ea5de

Browse files
authored
Datalist for input (orchidsoftware#1362)
* Added `datalist` for input
1 parent 521062f commit c3ea5de

File tree

3 files changed

+47
-2
lines changed

3 files changed

+47
-2
lines changed

resources/views/fields/input.blade.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,12 @@
44
>
55
<input {{ $attributes }}>
66
</div>
7+
8+
@empty(!$datalist)
9+
<datalist id="datalist-{{$name}}">
10+
@foreach($datalist as $item)
11+
<option value="{{ $item }}">
12+
@endforeach
13+
</datalist>
14+
@endempty
715
@endcomponent

src/Screen/Fields/Input.php

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ class Input extends Field
5353
* @var array
5454
*/
5555
protected $attributes = [
56-
'class' => 'form-control',
56+
'class' => 'form-control',
57+
'datalist' => [],
5758
];
5859

5960
/**
@@ -105,4 +106,22 @@ public function __construct()
105106
}
106107
});
107108
}
109+
110+
/**
111+
* @param array $datalist
112+
*
113+
* @return Input
114+
*/
115+
public function datalist(array $datalist = []): self
116+
{
117+
if (empty($datalist)) {
118+
return $this;
119+
}
120+
121+
$this->set('datalist', $datalist);
122+
123+
return $this->addBeforeRender(function () {
124+
$this->set('list', 'datalist-'.$this->get('name'));
125+
});
126+
}
108127
}

tests/Unit/Screen/Fields/InputTest.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66

77
use Orchid\Screen\Fields\Input;
88
use Orchid\Tests\Unit\Screen\TestFieldsUnitCase;
9+
use Throwable;
910

1011
class InputTest extends TestFieldsUnitCase
1112
{
1213
/**
13-
* @throws \Throwable
14+
* @throws Throwable
1415
*/
1516
public function testShowHr(): void
1617
{
@@ -82,4 +83,21 @@ public function testRemoveBooleanAttributes(): void
8283

8384
$this->assertStringNotContainsString('required', $input);
8485
}
86+
87+
public function testDataListAttribute(): void
88+
{
89+
$input = (string) Input::make('browser')->datalist([
90+
'Opera', 'Edge', 'Firefox',
91+
'Chrome', 'Safari',
92+
]);
93+
94+
$this->assertStringContainsString('Safari', $input);
95+
$this->assertStringContainsString('list="datalist-browser"', $input);
96+
$this->assertStringContainsString('<datalist id="datalist-browser"', $input);
97+
98+
$input = (string) Input::make('browser')->datalist([]);
99+
100+
$this->assertStringNotContainsString('list="datalist-browser"', $input);
101+
$this->assertStringNotContainsString('<datalist id="datalist-browser"', $input);
102+
}
85103
}

0 commit comments

Comments
 (0)