Skip to content

Commit dee5367

Browse files
committed
fix: Element instead of ListElement
Generic template support setDefaultAction Fix #80
1 parent d2aba29 commit dee5367

File tree

9 files changed

+62
-179
lines changed

9 files changed

+62
-179
lines changed

src/Collections/ElementCollection.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,14 @@ public function __construct(array $elements = [])
3434
* @param $title
3535
* @param $description
3636
* @param string $image
37-
* @param string $url
3837
*
3938
* @return Element
39+
* @internal param string $url
40+
*
4041
*/
41-
public function addElement($title, $description, $image = '', $url = '')
42+
public function addElement($title, $description, $image = '')
4243
{
43-
$element = new Element($title, $description, $image, $url);
44+
$element = new Element($title, $description, $image);
4445
$this->add($element);
4546

4647
return $element;

src/Collections/ListElementCollection.php

Lines changed: 0 additions & 64 deletions
This file was deleted.

src/Messages/Element.php

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
namespace Casperlaitw\LaravelFbMessenger\Messages;
99

1010
use Casperlaitw\LaravelFbMessenger\Collections\ButtonCollection;
11+
use Casperlaitw\LaravelFbMessenger\Exceptions\DefaultActionInvalidTypeException;
1112
use pimax\Messages\MessageElement;
1213

1314
/**
@@ -41,20 +42,27 @@ class Element
4142
*/
4243
private $buttons;
4344

45+
/**
46+
* Default action
47+
*
48+
* @var UrlButton
49+
*/
50+
private $defaultAction;
51+
4452
/**
4553
* Element constructor.
4654
*
47-
* @param $title
48-
* @param $description
49-
* @param $image
50-
* @param $url
55+
* @param $title
56+
* @param $description
57+
* @param string $image
58+
*
59+
* @internal param $url
5160
*/
52-
public function __construct($title, $description, $image = '', $url = '')
61+
public function __construct($title, $description, $image = '')
5362
{
5463
$this->title = $title;
5564
$this->description = $description;
5665
$this->image = $image;
57-
$this->url = $url;
5866
$this->buttons = new ButtonCollection;
5967
}
6068

@@ -68,6 +76,20 @@ public function buttons()
6876
return $this->buttons;
6977
}
7078

79+
/**
80+
* Set default action button
81+
*
82+
* @param UrlButton $button
83+
* @return $this
84+
* @throws DefaultActionInvalidTypeException
85+
*/
86+
public function setDefaultAction(UrlButton $button)
87+
{
88+
$this->defaultAction = $button;
89+
90+
return $this;
91+
}
92+
7193
/**
7294
* To array for send api
7395
*
@@ -76,11 +98,19 @@ public function buttons()
7698
public function toData()
7799
{
78100
$button = $this->buttons()->isEmpty() ? [] : ['buttons' => $this->buttons->toData()];
79-
return array_merge([
101+
102+
$data = array_merge([
80103
'title' => $this->title,
81104
'subtitle' => $this->description,
82-
'item_url' => $this->url,
83105
'image_url' => $this->image,
84106
], $button);
107+
108+
if ($this->defaultAction) {
109+
$defaultActionData = $this->defaultAction->toData();
110+
unset($defaultActionData['title']);
111+
$data['default_action'] = $defaultActionData;
112+
}
113+
114+
return $data;
85115
}
86116
}

src/Messages/ListElement.php

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -8,61 +8,12 @@
88

99
namespace Casperlaitw\LaravelFbMessenger\Messages;
1010

11-
use Casperlaitw\LaravelFbMessenger\Exceptions\DefaultActionInvalidTypeException;
12-
1311
/**
1412
* Class ListElement
1513
* @package Casperlaitw\LaravelFbMessenger\Messages
14+
* @deprecated Replace use Casperlaitw\LaravelFbMessenger\Messages\Element
1615
*/
1716
class ListElement extends Element
1817
{
19-
/**
20-
* Default action
21-
*
22-
* @var Button
23-
*/
24-
private $defaultAction;
25-
26-
/**
27-
* ListElement constructor.
28-
* @param $title
29-
* @param $description
30-
* @param string $image
31-
*/
32-
public function __construct($title, $description, $image)
33-
{
34-
parent::__construct($title, $description, $image, null);
35-
}
36-
37-
/**
38-
* Set default action button
39-
*
40-
* @param UrlButton $button
41-
* @return $this
42-
* @throws DefaultActionInvalidTypeException
43-
*/
44-
public function setDefaultAction(UrlButton $button)
45-
{
46-
$this->defaultAction = $button;
47-
48-
return $this;
49-
}
50-
51-
/**
52-
* To array for send api
53-
*
54-
* @return array
55-
*/
56-
public function toData()
57-
{
58-
$data = parent::toData();
59-
60-
if ($this->defaultAction) {
61-
$defaultActionData = $this->defaultAction->toData();
62-
unset($defaultActionData['title'], $data['item_url']);
63-
$data['default_action'] = $defaultActionData;
64-
}
6518

66-
return $data;
67-
}
6819
}

src/Messages/ListTemplate.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace Casperlaitw\LaravelFbMessenger\Messages;
1010

11-
use Casperlaitw\LaravelFbMessenger\Collections\ListElementCollection;
11+
use Casperlaitw\LaravelFbMessenger\Collections\ElementCollection;
1212
use Casperlaitw\LaravelFbMessenger\Contracts\Messages\Template;
1313
use Casperlaitw\LaravelFbMessenger\Exceptions\ListElementCountException;
1414
use Casperlaitw\LaravelFbMessenger\Transformers\ListTransformer;
@@ -73,7 +73,7 @@ public function toData()
7373
*/
7474
protected function collection()
7575
{
76-
return ListElementCollection::class;
76+
return ElementCollection::class;
7777
}
7878

7979
/**

tests/Collections/ListElementCollectionTest.php

Lines changed: 0 additions & 34 deletions
This file was deleted.

tests/Messages/ListElementTest.php

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
<?php
2-
use Casperlaitw\LaravelFbMessenger\Exceptions\DefaultActionInvalidTypeException;
3-
use Casperlaitw\LaravelFbMessenger\Messages\Button;
4-
use Casperlaitw\LaravelFbMessenger\Messages\ListElement;
2+
use Casperlaitw\LaravelFbMessenger\Messages\Element;
53
use Casperlaitw\LaravelFbMessenger\Messages\UrlButton;
64

75
/**
@@ -16,10 +14,10 @@ public function test_set_default_action()
1614
{
1715
$button = new UrlButton('title', 'http://www.google.com');
1816

19-
$list = new ListElement('title', 'description', 'image');
17+
$list = new Element('title', 'description', 'image');
2018
$list->setDefaultAction($button);
2119

22-
$actual = $this->getPrivateProperty(ListElement::class, 'defaultAction')->getValue($list);
20+
$actual = $this->getPrivateProperty(Element::class, 'defaultAction')->getValue($list);
2321

2422
$this->assertEquals($button, $actual);
2523
}
@@ -28,7 +26,7 @@ public function test_to_data()
2826
{
2927
$button = new UrlButton('title', 'http://www.google.com');
3028

31-
$list = new ListElement('title', 'description', 'image');
29+
$list = new Element('title', 'description', 'image');
3230
$list->setDefaultAction($button);
3331

3432
$expected = [

tests/Messages/ListTemplateTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22
use Casperlaitw\LaravelFbMessenger\Exceptions\ListElementCountException;
33
use Casperlaitw\LaravelFbMessenger\Messages\Button;
4-
use Casperlaitw\LaravelFbMessenger\Messages\ListElement;
4+
use Casperlaitw\LaravelFbMessenger\Messages\Element;
55
use Casperlaitw\LaravelFbMessenger\Messages\ListTemplate;
66

77
/**
@@ -20,8 +20,8 @@ public function setUp()
2020
{
2121
$this->sender = str_random();
2222
$this->case = [
23-
new ListElement('title1', 'description1', 'image1'),
24-
new ListElement('title2', 'description2', 'image2'),
23+
new Element('title1', 'description1', 'image1'),
24+
new Element('title2', 'description2', 'image2'),
2525
];
2626
$this->button = new Button(Button::TYPE_POSTBACK, 'GET_MORE');
2727
}

tests/Transformers/ListTransformerTest.php

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
<?php
2-
use Casperlaitw\LaravelFbMessenger\Collections\ListElementCollection;
2+
3+
use Casperlaitw\LaravelFbMessenger\Collections\ElementCollection;
34
use Casperlaitw\LaravelFbMessenger\Contracts\Messages\Template;
45
use Casperlaitw\LaravelFbMessenger\Messages\Button;
5-
use Casperlaitw\LaravelFbMessenger\Messages\ListElement;
6+
use Casperlaitw\LaravelFbMessenger\Messages\Element;
67
use Casperlaitw\LaravelFbMessenger\Transformers\ListTransformer;
78
use Mockery as m;
89

@@ -19,9 +20,9 @@ public function test_transform()
1920
{
2021
$testSender = str_random();
2122
$testCase = [
22-
new ListElement('title1', 'description2', 'image_url'),
23-
new ListElement('title2', 'description2', 'image_url'),
24-
new ListElement('title2', 'description2', 'image_url'),
23+
new Element('title1', 'description2', 'image_url'),
24+
new Element('title2', 'description2', 'image_url'),
25+
new Element('title2', 'description2', 'image_url'),
2526
];
2627

2728
$testButton = new Button(Button::TYPE_WEB, 'title', 'http://www.google.com');
@@ -49,9 +50,9 @@ public function test_transform_without_buttons()
4950
{
5051
$testSender = str_random();
5152
$testCase = [
52-
new ListElement('title1', 'description2', 'image_url'),
53-
new ListElement('title2', 'description2', 'image_url'),
54-
new ListElement('title2', 'description2', 'image_url'),
53+
new Element('title1', 'description2', 'image_url'),
54+
new Element('title2', 'description2', 'image_url'),
55+
new Element('title2', 'description2', 'image_url'),
5556
];
5657

5758
$expectedCase = [];
@@ -74,7 +75,7 @@ public function test_transform_without_buttons()
7475

7576
private function createMessageMock($testCase, $testSender, $testButton)
7677
{
77-
$elements = new ListElementCollection($testCase);
78+
$elements = new ElementCollection($testCase);
7879

7980
$message = m::mock(Template::class)
8081
->shouldReceive('getSender')->andReturn($testSender)

0 commit comments

Comments
 (0)