Skip to content

Commit 4fa8011

Browse files
committed
feat: add search adn better triggers to agent/tools/cps combos
1 parent bbbb50b commit 4fa8011

File tree

3 files changed

+56
-12
lines changed

3 files changed

+56
-12
lines changed

assets/components/modai/mgr/js/utils/combos.js

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,11 @@ modAIAdmin.combo.ContextProviderClass = function (config) {
134134
displayField: 'class',
135135
valueField: 'class',
136136
fields: ['class', 'config'],
137-
pageSize: 20,
137+
typeAhead: false,
138+
editable: true,
139+
forceSelection: true,
140+
pageSize: 0,
141+
minChars: 0,
138142
url: MODx.config.connector_url,
139143
baseParams: {
140144
action: 'modAI\\Processors\\Combos\\ContextProviderClass',
@@ -153,7 +157,11 @@ modAIAdmin.combo.ToolClass = function (config) {
153157
displayField: 'class',
154158
valueField: 'class',
155159
fields: ['class', 'config', 'suggestedName'],
156-
pageSize: 20,
160+
typeAhead: false,
161+
editable: true,
162+
forceSelection: true,
163+
pageSize: 0,
164+
minChars: 0,
157165
url: MODx.config.connector_url,
158166
baseParams: {
159167
action: 'modAI\\Processors\\Combos\\ToolClass',
@@ -176,10 +184,12 @@ modAIAdmin.combo.Tools = function (config, getStore) {
176184
fields: ['name', 'id', 'description'],
177185
mode: 'remote',
178186
triggerAction: 'all',
179-
typeAhead: true,
187+
typeAhead: false,
180188
editable: true,
181-
forceSelection: false,
189+
forceSelection: true,
182190
pageSize: 20,
191+
queryParam: 'search',
192+
minChars: 0,
183193
url: MODx.config.connector_url,
184194
clearBtnCls: 'x-form-trigger',
185195
expandBtnCls: 'x-form-trigger',
@@ -229,9 +239,11 @@ modAIAdmin.combo.ContextProviders = function (config, getStore) {
229239
fields: ['name', 'id', 'description'],
230240
mode: 'remote',
231241
triggerAction: 'all',
232-
typeAhead: true,
242+
typeAhead: false,
233243
editable: true,
234-
forceSelection: false,
244+
forceSelection: true,
245+
queryParam: 'search',
246+
minChars: 0,
235247
pageSize: 20,
236248
url: MODx.config.connector_url,
237249
clearBtnCls: 'x-form-trigger',
@@ -283,9 +295,11 @@ modAIAdmin.combo.Agents = function (config, getStore) {
283295
fields: ['name', 'id', 'description'],
284296
mode: 'remote',
285297
triggerAction: 'all',
286-
typeAhead: true,
298+
typeAhead: false,
287299
editable: true,
288-
forceSelection: false,
300+
forceSelection: true,
301+
queryParam: 'search',
302+
minChars: 0,
289303
pageSize: 20,
290304
url: MODx.config.connector_url,
291305
clearBtnCls: 'x-form-trigger',

core/components/modai/src/Processors/Combos/ContextProviderClass.php

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,21 @@ class ContextProviderClass extends Processor
1111

1212
public function process()
1313
{
14+
$query = $this->getProperty('query');
15+
1416
/** @var class-string<ContextProviderInterface>[] $classes */
1517
$classes = [];
1618

1719
$registeredContextProviders = $this->modx->invokeEvent('modAIOnContextProviderRegister');
1820
foreach ($registeredContextProviders as $registeredContextProvider) {
19-
if (is_string($registeredContextProvider) && class_implements($registeredContextProvider, ContextProviderInterface::class)) {
21+
if ($this->validateClassName($registeredContextProvider, $query)) {
2022
$classes[] = $registeredContextProvider;
2123
continue;
2224
}
2325

2426
if (is_array($registeredContextProvider)) {
2527
foreach ($registeredContextProvider as $contextProvider) {
26-
if (class_implements($contextProvider, ContextProviderInterface::class)) {
28+
if ($this->validateClassName($contextProvider, $query)) {
2729
$classes[] = $contextProvider;
2830
}
2931
}
@@ -42,4 +44,17 @@ public function getLanguageTopics()
4244
{
4345
return $this->languageTopics;
4446
}
47+
48+
private function validateClassName($class, $query)
49+
{
50+
if (!class_implements($class, ContextProviderInterface::class)) {
51+
return false;
52+
}
53+
54+
if (!empty($query) && stripos($class, $query) === false) {
55+
return false;
56+
}
57+
58+
return true;
59+
}
4560
}

core/components/modai/src/Processors/Combos/ToolClass.php

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,21 @@ class ToolClass extends Processor
1111

1212
public function process()
1313
{
14+
$query = $this->getProperty('query');
15+
1416
/** @var class-string<ToolInterface>[] $classes */
1517
$classes = [];
1618

1719
$registeredTools = $this->modx->invokeEvent('modAIOnToolRegister');
1820
foreach ($registeredTools as $registeredTool) {
19-
if (is_string($registeredTool) && class_implements($registeredTool, ToolInterface::class)) {
21+
if ($this->validateClassName($registeredTool, $query)) {
2022
$classes[] = $registeredTool;
2123
continue;
2224
}
2325

2426
if (is_array($registeredTool)) {
2527
foreach ($registeredTool as $tool) {
26-
if (class_implements($tool, ToolInterface::class)) {
28+
if ($this->validateClassName($tool, $query)) {
2729
$classes[] = $tool;
2830
}
2931
}
@@ -43,4 +45,17 @@ public function getLanguageTopics()
4345
{
4446
return $this->languageTopics;
4547
}
48+
49+
private function validateClassName($class, $query)
50+
{
51+
if (!class_implements($class, ToolInterface::class)) {
52+
return false;
53+
}
54+
55+
if (!empty($query) && stripos($class, $query) === false) {
56+
return false;
57+
}
58+
59+
return true;
60+
}
4661
}

0 commit comments

Comments
 (0)