Skip to content

Commit 9a0abc8

Browse files
authored
Merge pull request #15 from olivertar/og-fix-chatbot-conversations-list
Fix Chatbot Conversations list never finishes loading
2 parents 31ea074 + a0e4bd2 commit 9a0abc8

3 files changed

Lines changed: 110 additions & 42 deletions

File tree

Ui/Component/Listing/Column/ConversationActions.php

Lines changed: 55 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -40,42 +40,66 @@ public function __construct(
4040
public function prepareDataSource(array $dataSource)
4141
{
4242
if (isset($dataSource['data']['items'])) {
43-
foreach ($dataSource['data']['items'] as & $item) {
44-
if (isset($item['conversation_id'])) {
45-
$item[$this->getData('name')] = [
46-
'view' => [
47-
'href' => $this->urlBuilder->getUrl(
48-
'magentomcpai/conversation/view',
49-
['id' => $item['conversation_id']]
50-
),
51-
'label' => __('View'),
52-
'hidden' => false,
53-
],
54-
'send_transcript' => [
55-
'href' => $this->urlBuilder->getUrl(
56-
'magentomcpai/conversation/send',
57-
['id' => $item['conversation_id']]
58-
),
59-
'label' => __('Send Transcript'),
60-
'hidden' => (bool)$item['transcript_sent'],
61-
],
62-
'delete' => [
63-
'href' => $this->urlBuilder->getUrl(
64-
'magentomcpai/conversation/delete',
65-
['id' => $item['conversation_id']]
66-
),
67-
'label' => __('Delete'),
68-
'confirm' => [
69-
'title' => __('Delete Conversation'),
70-
'message' => __('Are you sure you want to delete this conversation?')
71-
],
72-
'hidden' => false,
73-
]
43+
foreach ($dataSource['data']['items'] as &$item) {
44+
$actions = $this->getData('action_list');
45+
if (!is_array($actions)) {
46+
continue;
47+
}
48+
49+
foreach ($actions as $key => $action) {
50+
if (!$this->isValidAction($action)) {
51+
continue;
52+
}
53+
54+
$params = $this->prepareActionParams($action['params'], $item);
55+
56+
$actionData = [
57+
'href' => $this->urlBuilder->getUrl($action['path'], $params),
58+
'label' => $action['label'],
59+
'hidden' => false,
7460
];
61+
62+
if (isset($action['confirm'])) {
63+
$actionData['confirm'] = $action['confirm'];
64+
}
65+
66+
$item[$this->getData('name')][$key] = $actionData;
7567
}
7668
}
7769
}
7870

7971
return $dataSource;
8072
}
73+
74+
75+
/**
76+
* Validate action configuration
77+
*
78+
* @param array $action
79+
* @return bool
80+
*/
81+
private function isValidAction(array $action): bool
82+
{
83+
return isset($action['path'], $action['label'], $action['params'])
84+
&& is_array($action['params']);
85+
}
86+
87+
/**
88+
* Prepare action parameters
89+
*
90+
* @param array $params
91+
* @param array $item
92+
* @return array
93+
*/
94+
private function prepareActionParams(array $params, array $item): array
95+
{
96+
$preparedParams = [];
97+
foreach ($params as $field => $param) {
98+
if (isset($item[$param])) {
99+
$preparedParams[$field] = $item[$param];
100+
}
101+
}
102+
103+
return $preparedParams;
104+
}
81105
}

Ui/DataProvider/ConversationDataProvider.php

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,21 +66,24 @@ public function __construct(
6666
*/
6767
public function getData()
6868
{
69-
if (isset($this->loadedData)) {
70-
return $this->loadedData;
71-
}
72-
$items = $this->getCollection()->getItems();
73-
$this->loadedData = [];
74-
foreach ($items as $conversation) {
69+
$collection = $this->getCollection();
70+
71+
$items = [];
72+
foreach ($collection->getItems() as $conversation) {
7573
// Add the count of messages
7674
$messages = json_decode($conversation->getConversationData(), true);
7775
$messageCount = !empty($messages['messages']) ? count($messages['messages']) : 0;
7876
$conversation->setData('message_count', $messageCount);
79-
80-
$this->loadedData[$conversation->getId()] = $conversation->getData();
77+
78+
$items[] = $conversation->getData();
8179
}
82-
83-
return $this->loadedData;
80+
81+
$result = [
82+
'items' => $items,
83+
'totalRecords' => $collection->getSize()
84+
];
85+
86+
return $result;
8487
}
8588

8689
/**
@@ -92,7 +95,7 @@ public function getCollection()
9295
{
9396
return $this->createCollection();
9497
}
95-
98+
9699
/**
97100
* Create collection instance
98101
*
@@ -106,4 +109,17 @@ protected function createCollection()
106109
}
107110
return $collection;
108111
}
112+
113+
/**
114+
* Add filter
115+
*
116+
* @param Filter $filter
117+
* @return void
118+
*/
119+
public function addFilter(Filter $filter)
120+
{
121+
// Handle custom filters here if needed
122+
parent::addFilter($filter);
123+
}
124+
109125
}

view/adminhtml/ui_component/chatbot_conversation_listing.xml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
</item>
3737
</argument>
3838
</dataSource>
39+
3940
<listingToolbar name="listing_top">
4041
<argument name="data" xsi:type="array">
4142
<item name="config" xsi:type="array">
@@ -171,6 +172,33 @@
171172
<item name="resizeDefaultWidth" xsi:type="string">107</item>
172173
<item name="indexField" xsi:type="string">conversation_id</item>
173174
</item>
175+
<item name="action_list" xsi:type="array">
176+
<item name="view" xsi:type="array">
177+
<item name="label" xsi:type="string" translate="true">View</item>
178+
<item name="path" xsi:type="string">magentomcpai/conversation/view</item>
179+
<item name="params" xsi:type="array">
180+
<item name="id" xsi:type="string">conversation_id</item>
181+
</item>
182+
</item>
183+
<item name="send_transcript" xsi:type="array">
184+
<item name="label" xsi:type="string" translate="true">Send Transcript</item>
185+
<item name="path" xsi:type="string">magentomcpai/conversation/send</item>
186+
<item name="params" xsi:type="array">
187+
<item name="id" xsi:type="string">conversation_id</item>
188+
</item>
189+
</item>
190+
<item name="delete" xsi:type="array">
191+
<item name="label" xsi:type="string" translate="true">Delete</item>
192+
<item name="path" xsi:type="string">magentomcpai/conversation/delete</item>
193+
<item name="params" xsi:type="array">
194+
<item name="id" xsi:type="string">conversation_id</item>
195+
</item>
196+
<item name="confirm" xsi:type="array">
197+
<item name="title" xsi:type="string" translate="true">Delete Conversation</item>
198+
<item name="message" xsi:type="string" translate="true">Are you sure you want to delete this conversation?</item>
199+
</item>
200+
</item>
201+
</item>
174202
</argument>
175203
</actionsColumn>
176204
</columns>

0 commit comments

Comments
 (0)