@projectcor/maia-components 2.11.36-6 → 2.11.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/lib/App.js +11 -24
  2. package/lib/components/atoms/MAIAInput/MAIAInput.js +191 -61
  3. package/lib/components/atoms/icons/index.js +1 -3
  4. package/lib/components/index.js +1 -2
  5. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +2 -2
  6. package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +3 -3
  7. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +2 -2
  8. package/lib/components/molecules/AbmSection/index.js +1 -2
  9. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +1 -15
  10. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +4 -8
  11. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +2 -21
  12. package/lib/components/molecules/ChatAIMessages/newStyles.js +2 -2
  13. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +88 -90
  14. package/lib/components/molecules/ChatAIModal/constants.js +2 -10
  15. package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -5
  16. package/lib/components/molecules/Sidebar/Sidebar.js +31 -68
  17. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -6
  18. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +50 -235
  19. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +4 -4
  20. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +3 -13
  21. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +3 -6
  22. package/lib/dev/Providers.js +6 -11
  23. package/lib/hooks/useAgentModel/useCreateAgent.js +10 -11
  24. package/lib/hooks/useAgentModel/useUpdateAgent.js +11 -12
  25. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  26. package/lib/hooks/useChatManager/useChatManager.js +11 -21
  27. package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
  28. package/lib/hooks/useChatMessages/useChatMessages.js +14 -30
  29. package/lib/hooks/useEvent.js +1 -5
  30. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -6
  31. package/lib/lang/br/index.js +1 -267
  32. package/lib/lang/en/index.js +1 -267
  33. package/lib/lang/es/index.js +1 -267
  34. package/lib/lang/fr/index.js +2 -269
  35. package/lib/services/maia/Agents/createAgent.js +1 -1
  36. package/lib/services/maia/Agents/getAgentById.js +2 -3
  37. package/lib/services/maia/Agents/updateAgent.js +1 -1
  38. package/lib/services/maia/Chats/getChatMessages.js +4 -29
  39. package/lib/services/maia/Orchestrator/orchestrator.js +9 -11
  40. package/lib/services/maia/RecentProjects/getRecentProjects.js +4 -12
  41. package/lib/services/utils/mapChatMessages.js +5 -12
  42. package/lib/types/Chat.js +1 -1
  43. package/lib/types/agent.js +1 -1
  44. package/lib/types/agentModal.js +1 -1
  45. package/package.json +1 -1
  46. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +0 -28
  47. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +0 -84
  48. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +0 -123
  49. package/lib/components/atoms/ContextMentionChip/index.js +0 -4
  50. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +0 -85
  51. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +0 -6
  52. package/lib/components/atoms/ContextMentionEditor/index.js +0 -2
  53. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +0 -188
  54. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +0 -98
  55. package/lib/components/atoms/ContextMentionItem/index.js +0 -2
  56. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +0 -131
  57. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +0 -63
  58. package/lib/components/atoms/ContextMentionPopover/index.js +0 -3
  59. package/lib/components/atoms/icons/NotionIcon.js +0 -36
  60. package/lib/components/atoms/icons/RocketIcon.js +0 -31
  61. package/lib/components/atoms/icons/WrenchIcon.js +0 -42
  62. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.js +0 -483
  63. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.styles.js +0 -238
  64. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/catalog.js +0 -437
  65. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/index.js +0 -3
  66. package/lib/components/molecules/AbmSection/AbmSkillsSection.styles.js +0 -80
  67. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.interface.js +0 -2
  68. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.js +0 -722
  69. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.styles.js +0 -165
  70. package/lib/components/molecules/AbmSection/AbmTriggersSection/index.js +0 -2
  71. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +0 -55
  72. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +0 -6
  73. package/lib/components/molecules/ContextMentionInput/index.js +0 -2
  74. package/lib/components/molecules/SchedulesPage/SchedulesPage.js +0 -625
  75. package/lib/components/molecules/SchedulesPage/index.js +0 -2
  76. package/lib/components/molecules/SkillsPage/SkillsPage.js +0 -708
  77. package/lib/components/molecules/SkillsPage/index.js +0 -2
  78. package/lib/components/molecules/maiaSectionModalStyles.js +0 -91
  79. package/lib/components/molecules/maiaSectionUiTokens.js +0 -31
  80. package/lib/constants/taskLinkIcon.js +0 -6
  81. package/lib/dev/DevAbmAgentModal.js +0 -114
  82. package/lib/dev/DevContextMentionInput.js +0 -65
  83. package/lib/dev/mocks/abmModalMocks.js +0 -193
  84. package/lib/hooks/useCaretPosition.js +0 -35
  85. package/lib/hooks/useContextMentions.js +0 -204
  86. package/lib/hooks/useEntitySearch.js +0 -405
  87. package/lib/hooks/useMentionAllowedTypes.js +0 -86
  88. package/lib/hooks/useMentionPopover.js +0 -284
  89. package/lib/services/maia/Agents/connectors.js +0 -89
  90. package/lib/services/maia/Agents/skills.js +0 -164
  91. package/lib/services/maia/Schedules/createSchedule.js +0 -39
  92. package/lib/services/maia/Schedules/deleteSchedule.js +0 -36
  93. package/lib/services/maia/Schedules/getMySchedules.js +0 -55
  94. package/lib/services/maia/Schedules/getSchedules.js +0 -58
  95. package/lib/services/maia/Schedules/index.js +0 -5
  96. package/lib/services/query/entitySearchQuery.js +0 -16
  97. package/lib/services/query/usersDirectoryQuery.js +0 -19
  98. package/lib/types/agentSkill.js +0 -2
  99. package/lib/types/attachment.js +0 -2
  100. package/lib/types/contextMention.js +0 -37
  101. package/lib/utils/contextMentionIcons.js +0 -115
  102. package/lib/utils/contextMentionLabel.js +0 -4
  103. package/lib/utils/contextMentionTypeLabel.js +0 -17
  104. package/lib/utils/renderContextMentions.js +0 -216
@@ -1,405 +0,0 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
- import _regeneratorRuntime from "@babel/runtime/regenerator";
5
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
- import { useLazyQuery } from '@apollo/client';
8
- import { useCallback, useEffect, useMemo, useState } from 'react';
9
- import { getRecentClients } from '../services/maia/RecentClients/getRecentClients';
10
- import { getRecentProjects } from '../services/maia/RecentProjects/getRecentProjects';
11
- import { SEARCH_ENTITIES } from '../services/query/entitySearchQuery';
12
- import { SEARCH_CLIENTS } from '../services/query/ClientSearchQuery';
13
- import { USERS_DIRECTORY } from '../services/query/usersDirectoryQuery';
14
- import { useDebounce } from './useDebounce';
15
-
16
- /**
17
- * Restringe los resultados al `clientId`/`projectId` del agente activo.
18
- * Cuando el agente está scopeado a un client/project, tanto los recents como
19
- * el search deben filtrar por ese contexto. Si el backend no entiende algún
20
- * campo lo ignora y se cae al comportamiento global.
21
- */
22
-
23
- var BASE_FILTERS_BY_TYPE = {
24
- project: {
25
- project: 'true',
26
- archived: 'all'
27
- },
28
- task: {
29
- task: 'true'
30
- }
31
- };
32
- var buildFiltersForType = function buildFiltersForType(type, scope) {
33
- var base = BASE_FILTERS_BY_TYPE[type];
34
- var extra = {};
35
- if ((scope === null || scope === void 0 ? void 0 : scope.clientId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.clientId) !== null && scope.clientId !== '') {
36
- extra.clientId = String(scope.clientId);
37
- }
38
- // Project tab nunca filtra por projectId (rompe la lista). Tasks sí.
39
- if (type !== 'project' && (scope === null || scope === void 0 ? void 0 : scope.projectId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.projectId) !== null && scope.projectId !== '') {
40
- extra.projectId = String(scope.projectId);
41
- }
42
- return JSON.stringify(_objectSpread(_objectSpread({}, base), extra));
43
- };
44
-
45
- /**
46
- * Filtros para usersDirectory. El backend espera un JSON string con
47
- * withPosition, withTeams y searchInput. Le agregamos clientId/projectId
48
- * del scope en caso de que el backend los aproveche para filtrar por
49
- * contexto (si no los entiende los ignora).
50
- */
51
- var buildUsersDirectoryFilters = function buildUsersDirectoryFilters(q, scope) {
52
- var base = {
53
- withPosition: true,
54
- withTeams: true,
55
- searchInput: q
56
- };
57
- if ((scope === null || scope === void 0 ? void 0 : scope.clientId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.clientId) !== null && scope.clientId !== '') {
58
- base.clientId = String(scope.clientId);
59
- }
60
- if ((scope === null || scope === void 0 ? void 0 : scope.projectId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.projectId) !== null && scope.projectId !== '') {
61
- base.projectId = String(scope.projectId);
62
- }
63
- return JSON.stringify(base);
64
- };
65
- var highlightRange = function highlightRange(text, searchValue) {
66
- if (!searchValue) return undefined;
67
- var idx = text.toLowerCase().indexOf(searchValue.toLowerCase());
68
- if (idx < 0) return undefined;
69
- return {
70
- start: idx,
71
- length: searchValue.length
72
- };
73
- };
74
- var mapClientToItem = function mapClientToItem(c, searchValue) {
75
- var _c$totalProyectos, _c$totalProyectos2;
76
- return {
77
- id: c.id,
78
- type: 'client',
79
- primary: c.name,
80
- primaryHighlight: highlightRange(c.name, searchValue),
81
- breadcrumb: {
82
- count: (_c$totalProyectos = c.totalProyectos) !== null && _c$totalProyectos !== void 0 ? _c$totalProyectos : undefined,
83
- countLabel: 'projects'
84
- },
85
- raw: {
86
- id: c.id,
87
- name: c.name,
88
- totalProyectos: (_c$totalProyectos2 = c.totalProyectos) !== null && _c$totalProyectos2 !== void 0 ? _c$totalProyectos2 : null
89
- }
90
- };
91
- };
92
- var mapUserToItem = function mapUserToItem(u, searchValue) {
93
- var _u$firstName, _u$lastName, _u$picture, _u$positionName, _u$email;
94
- var fullName = "".concat((_u$firstName = u.firstName) !== null && _u$firstName !== void 0 ? _u$firstName : '', " ").concat((_u$lastName = u.lastName) !== null && _u$lastName !== void 0 ? _u$lastName : '').trim();
95
- var primary = fullName || u.email || String(u.id);
96
- return {
97
- id: u.id,
98
- type: 'user',
99
- primary: primary,
100
- primaryHighlight: highlightRange(primary, searchValue),
101
- raw: {
102
- id: u.id,
103
- name: primary,
104
- picture: (_u$picture = u.picture) !== null && _u$picture !== void 0 ? _u$picture : null,
105
- positionName: (_u$positionName = u.positionName) !== null && _u$positionName !== void 0 ? _u$positionName : null,
106
- email: (_u$email = u.email) !== null && _u$email !== void 0 ? _u$email : null
107
- }
108
- };
109
- };
110
- var mapSearchToItem = function mapSearchToItem(r, type, searchValue) {
111
- var _r$projectName, _r$clientId, _r$clientName, _r$projectName2, _r$feeId;
112
- var primary = r.title || r.projectName || '';
113
- var parent;
114
- if (type === 'project') parent = r.clientName;else if (type === 'task') parent = undefined;else parent = (_r$projectName = r.projectName) !== null && _r$projectName !== void 0 ? _r$projectName : r.clientName;
115
- return {
116
- id: r.id,
117
- type: type,
118
- primary: primary,
119
- primaryHighlight: highlightRange(primary, searchValue),
120
- breadcrumb: parent ? {
121
- parent: parent
122
- } : undefined,
123
- raw: {
124
- id: r.id,
125
- name: primary,
126
- clientId: (_r$clientId = r.clientId) !== null && _r$clientId !== void 0 ? _r$clientId : null,
127
- clientName: (_r$clientName = r.clientName) !== null && _r$clientName !== void 0 ? _r$clientName : null,
128
- projectName: (_r$projectName2 = r.projectName) !== null && _r$projectName2 !== void 0 ? _r$projectName2 : null,
129
- feeId: (_r$feeId = r.feeId) !== null && _r$feeId !== void 0 ? _r$feeId : null
130
- }
131
- };
132
- };
133
- var formatMcpPrimaryLabel = function formatMcpPrimaryLabel(slug) {
134
- return slug.replace(/_/g, ' ').replace(/\b\w/g, function (_char) {
135
- return _char.toUpperCase();
136
- });
137
- };
138
- var mapMcpSlugsToItems = function mapMcpSlugsToItems(slugs, searchValue) {
139
- var q = searchValue.trim().toLowerCase();
140
- var filtered = slugs;
141
- if (q) {
142
- filtered = slugs.filter(function (s) {
143
- var primary = formatMcpPrimaryLabel(s);
144
- return s.toLowerCase().includes(q) || primary.toLowerCase().includes(q);
145
- });
146
- }
147
- return filtered.map(function (slug) {
148
- var primary = formatMcpPrimaryLabel(slug);
149
- return {
150
- id: slug,
151
- type: 'mcp',
152
- primary: primary,
153
- primaryHighlight: highlightRange(primary, searchValue),
154
- raw: {
155
- id: slug,
156
- name: primary
157
- }
158
- };
159
- });
160
- };
161
- export var useEntitySearch = function useEntitySearch(type, scope) {
162
- var _scope$mcpSlugs;
163
- var _useState = useState(''),
164
- _useState2 = _slicedToArray(_useState, 2),
165
- searchValue = _useState2[0],
166
- setSearchValue = _useState2[1];
167
- var debouncedSearchValue = useDebounce(searchValue, 400);
168
- var _useState3 = useState([]),
169
- _useState4 = _slicedToArray(_useState3, 2),
170
- items = _useState4[0],
171
- setItems = _useState4[1];
172
- var _useState5 = useState(false),
173
- _useState6 = _slicedToArray(_useState5, 2),
174
- loading = _useState6[0],
175
- setLoading = _useState6[1];
176
- var _useState7 = useState(false),
177
- _useState8 = _slicedToArray(_useState7, 2),
178
- error = _useState8[0],
179
- setError = _useState8[1];
180
- var mcpSlugsKey = ((_scope$mcpSlugs = scope === null || scope === void 0 ? void 0 : scope.mcpSlugs) !== null && _scope$mcpSlugs !== void 0 ? _scope$mcpSlugs : []).join('|');
181
-
182
- // Estabilizamos el scope para no disparar fetchs por cambios de identidad de objeto.
183
- var stableScope = useMemo(function () {
184
- var _scope$clientId, _scope$projectId, _scope$mcpSlugs2;
185
- return {
186
- clientId: (_scope$clientId = scope === null || scope === void 0 ? void 0 : scope.clientId) !== null && _scope$clientId !== void 0 ? _scope$clientId : null,
187
- projectId: (_scope$projectId = scope === null || scope === void 0 ? void 0 : scope.projectId) !== null && _scope$projectId !== void 0 ? _scope$projectId : null,
188
- mcpSlugs: (_scope$mcpSlugs2 = scope === null || scope === void 0 ? void 0 : scope.mcpSlugs) !== null && _scope$mcpSlugs2 !== void 0 ? _scope$mcpSlugs2 : []
189
- };
190
- }, [scope === null || scope === void 0 ? void 0 : scope.clientId, scope === null || scope === void 0 ? void 0 : scope.projectId, mcpSlugsKey]);
191
-
192
- // --- Search: project | task (GraphQL: search) ---
193
- var _useLazyQuery = useLazyQuery(SEARCH_ENTITIES, {
194
- variables: {
195
- limit: 20
196
- },
197
- fetchPolicy: 'network-only'
198
- }),
199
- _useLazyQuery2 = _slicedToArray(_useLazyQuery, 2),
200
- fetchSearchEntities = _useLazyQuery2[0],
201
- _useLazyQuery2$ = _useLazyQuery2[1],
202
- searchData = _useLazyQuery2$.data,
203
- searchLoading = _useLazyQuery2$.loading,
204
- searchError = _useLazyQuery2$.error;
205
-
206
- // --- Search: client (GraphQL) ---
207
- var _useLazyQuery3 = useLazyQuery(SEARCH_CLIENTS, {
208
- fetchPolicy: 'network-only'
209
- }),
210
- _useLazyQuery4 = _slicedToArray(_useLazyQuery3, 2),
211
- fetchSearchClients = _useLazyQuery4[0],
212
- _useLazyQuery4$ = _useLazyQuery4[1],
213
- clientsData = _useLazyQuery4$.data,
214
- clientsLoading = _useLazyQuery4$.loading,
215
- clientsError = _useLazyQuery4$.error;
216
-
217
- // --- Search: user (GraphQL: usersDirectory) ---
218
- var _useLazyQuery5 = useLazyQuery(USERS_DIRECTORY, {
219
- fetchPolicy: 'network-only'
220
- }),
221
- _useLazyQuery6 = _slicedToArray(_useLazyQuery5, 2),
222
- fetchUsersDirectory = _useLazyQuery6[0],
223
- _useLazyQuery6$ = _useLazyQuery6[1],
224
- usersData = _useLazyQuery6$.data,
225
- usersLoading = _useLazyQuery6$.loading,
226
- usersError = _useLazyQuery6$.error;
227
- var fetchRecent = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
228
- var _stableScope$mcpSlugs, slugs, data, mapped, _data, _mapped, _t;
229
- return _regeneratorRuntime.wrap(function (_context) {
230
- while (1) switch (_context.prev = _context.next) {
231
- case 0:
232
- if (!(type === 'mcp')) {
233
- _context.next = 1;
234
- break;
235
- }
236
- slugs = (_stableScope$mcpSlugs = stableScope.mcpSlugs) !== null && _stableScope$mcpSlugs !== void 0 ? _stableScope$mcpSlugs : [];
237
- setLoading(false);
238
- setError(false);
239
- setItems(mapMcpSlugsToItems(slugs, ''));
240
- return _context.abrupt("return");
241
- case 1:
242
- setLoading(true);
243
- setError(false);
244
- _context.prev = 2;
245
- if (!(type === 'client')) {
246
- _context.next = 4;
247
- break;
248
- }
249
- _context.next = 3;
250
- return getRecentClients();
251
- case 3:
252
- data = _context.sent;
253
- mapped = (data !== null && data !== void 0 ? data : []).map(function (c) {
254
- return mapClientToItem(c, '');
255
- });
256
- setItems(mapped);
257
- _context.next = 7;
258
- break;
259
- case 4:
260
- if (!(type === 'project')) {
261
- _context.next = 6;
262
- break;
263
- }
264
- _context.next = 5;
265
- return getRecentProjects(stableScope.clientId ? {
266
- clientId: stableScope.clientId
267
- } : undefined);
268
- case 5:
269
- _data = _context.sent;
270
- _mapped = (Array.isArray(_data) ? _data : []).map(function (p) {
271
- return mapSearchToItem({
272
- id: p.id,
273
- title: p.title,
274
- type: 'project',
275
- clientId: p.clientId,
276
- feeId: p.feeId,
277
- clientName: p.clientName
278
- }, 'project', '');
279
- });
280
- setItems(_mapped);
281
- _context.next = 7;
282
- break;
283
- case 6:
284
- // tasks y users no tienen endpoint de recents: arrancamos vacío
285
- setItems([]);
286
- case 7:
287
- _context.next = 9;
288
- break;
289
- case 8:
290
- _context.prev = 8;
291
- _t = _context["catch"](2);
292
- setError(true);
293
- setItems([]);
294
- case 9:
295
- _context.prev = 9;
296
- setLoading(false);
297
- return _context.finish(9);
298
- case 10:
299
- case "end":
300
- return _context.stop();
301
- }
302
- }, _callee, null, [[2, 8, 9, 10]]);
303
- })), [type, stableScope]);
304
-
305
- // Disparar search al cambiar debounced value
306
- useEffect(function () {
307
- var q = debouncedSearchValue.trim();
308
- if (type === 'mcp') {
309
- var _stableScope$mcpSlugs2;
310
- var slugs = (_stableScope$mcpSlugs2 = stableScope.mcpSlugs) !== null && _stableScope$mcpSlugs2 !== void 0 ? _stableScope$mcpSlugs2 : [];
311
- setLoading(false);
312
- setError(false);
313
- setItems(mapMcpSlugsToItems(slugs, q));
314
- return;
315
- }
316
- if (!q) return;
317
- if (type === 'client') {
318
- fetchSearchClients({
319
- variables: {
320
- filter: {
321
- name: q
322
- },
323
- page: 1,
324
- perPage: 20
325
- }
326
- });
327
- } else if (type === 'user') {
328
- fetchUsersDirectory({
329
- variables: {
330
- filters: buildUsersDirectoryFilters(q, stableScope),
331
- page: 1
332
- }
333
- });
334
- } else {
335
- fetchSearchEntities({
336
- variables: {
337
- q: q,
338
- filters: buildFiltersForType(type, stableScope)
339
- }
340
- });
341
- }
342
- }, [debouncedSearchValue, type, stableScope, fetchSearchEntities, fetchSearchClients, fetchUsersDirectory]);
343
-
344
- // Sincronizar resultados de search
345
- useEffect(function () {
346
- if (type === 'mcp') return;
347
- var q = debouncedSearchValue.trim();
348
- if (!q) return;
349
- if (type === 'client') {
350
- var _clientsData$clients;
351
- setLoading(clientsLoading);
352
- if (clientsError) {
353
- setError(true);
354
- return;
355
- }
356
- if (clientsData !== null && clientsData !== void 0 && (_clientsData$clients = clientsData.clients) !== null && _clientsData$clients !== void 0 && _clientsData$clients.data) {
357
- setItems(clientsData.clients.data.map(function (c) {
358
- return mapClientToItem(c, q);
359
- }));
360
- setError(false);
361
- }
362
- } else if (type === 'user') {
363
- var _usersData$usersDirec;
364
- setLoading(usersLoading);
365
- if (usersError) {
366
- setError(true);
367
- return;
368
- }
369
- if (usersData !== null && usersData !== void 0 && (_usersData$usersDirec = usersData.usersDirectory) !== null && _usersData$usersDirec !== void 0 && _usersData$usersDirec.data) {
370
- setItems(usersData.usersDirectory.data.map(function (u) {
371
- return mapUserToItem(u, q);
372
- }));
373
- setError(false);
374
- }
375
- } else {
376
- setLoading(searchLoading);
377
- if (searchError) {
378
- setError(true);
379
- return;
380
- }
381
- if (searchData !== null && searchData !== void 0 && searchData.search) {
382
- setItems(searchData.search.map(function (r) {
383
- return mapSearchToItem(r, type, q);
384
- }));
385
- setError(false);
386
- }
387
- }
388
- }, [searchData, clientsData, usersData, searchLoading, clientsLoading, usersLoading, searchError, clientsError, usersError, debouncedSearchValue, type]);
389
-
390
- // Cuando se limpia el search, volver a recents
391
- useEffect(function () {
392
- if (!debouncedSearchValue.trim()) {
393
- fetchRecent();
394
- }
395
- }, [debouncedSearchValue, fetchRecent]);
396
- return {
397
- items: items,
398
- loading: loading,
399
- error: error,
400
- searchValue: searchValue,
401
- updateSearchValue: setSearchValue,
402
- fetchRecent: fetchRecent
403
- };
404
- };
405
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXp5UXVlcnkiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsImdldFJlY2VudENsaWVudHMiLCJnZXRSZWNlbnRQcm9qZWN0cyIsIlNFQVJDSF9FTlRJVElFUyIsIlNFQVJDSF9DTElFTlRTIiwiVVNFUlNfRElSRUNUT1JZIiwidXNlRGVib3VuY2UiLCJCQVNFX0ZJTFRFUlNfQllfVFlQRSIsInByb2plY3QiLCJhcmNoaXZlZCIsInRhc2siLCJidWlsZEZpbHRlcnNGb3JUeXBlIiwidHlwZSIsInNjb3BlIiwiYmFzZSIsImV4dHJhIiwiY2xpZW50SWQiLCJ1bmRlZmluZWQiLCJTdHJpbmciLCJwcm9qZWN0SWQiLCJKU09OIiwic3RyaW5naWZ5IiwiX29iamVjdFNwcmVhZCIsImJ1aWxkVXNlcnNEaXJlY3RvcnlGaWx0ZXJzIiwicSIsIndpdGhQb3NpdGlvbiIsIndpdGhUZWFtcyIsInNlYXJjaElucHV0IiwiaGlnaGxpZ2h0UmFuZ2UiLCJ0ZXh0Iiwic2VhcmNoVmFsdWUiLCJpZHgiLCJ0b0xvd2VyQ2FzZSIsImluZGV4T2YiLCJzdGFydCIsImxlbmd0aCIsIm1hcENsaWVudFRvSXRlbSIsImMiLCJfYyR0b3RhbFByb3llY3RvcyIsIl9jJHRvdGFsUHJveWVjdG9zMiIsImlkIiwicHJpbWFyeSIsIm5hbWUiLCJwcmltYXJ5SGlnaGxpZ2h0IiwiYnJlYWRjcnVtYiIsImNvdW50IiwidG90YWxQcm95ZWN0b3MiLCJjb3VudExhYmVsIiwicmF3IiwibWFwVXNlclRvSXRlbSIsInUiLCJfdSRmaXJzdE5hbWUiLCJfdSRsYXN0TmFtZSIsIl91JHBpY3R1cmUiLCJfdSRwb3NpdGlvbk5hbWUiLCJfdSRlbWFpbCIsImZ1bGxOYW1lIiwiY29uY2F0IiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJ0cmltIiwiZW1haWwiLCJwaWN0dXJlIiwicG9zaXRpb25OYW1lIiwibWFwU2VhcmNoVG9JdGVtIiwiciIsIl9yJHByb2plY3ROYW1lIiwiX3IkY2xpZW50SWQiLCJfciRjbGllbnROYW1lIiwiX3IkcHJvamVjdE5hbWUyIiwiX3IkZmVlSWQiLCJ0aXRsZSIsInByb2plY3ROYW1lIiwicGFyZW50IiwiY2xpZW50TmFtZSIsImZlZUlkIiwiZm9ybWF0TWNwUHJpbWFyeUxhYmVsIiwic2x1ZyIsInJlcGxhY2UiLCJjaGFyIiwidG9VcHBlckNhc2UiLCJtYXBNY3BTbHVnc1RvSXRlbXMiLCJzbHVncyIsImZpbHRlcmVkIiwiZmlsdGVyIiwicyIsImluY2x1ZGVzIiwibWFwIiwidXNlRW50aXR5U2VhcmNoIiwiX3Njb3BlJG1jcFNsdWdzIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2V0U2VhcmNoVmFsdWUiLCJkZWJvdW5jZWRTZWFyY2hWYWx1ZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXRlbXMiLCJzZXRJdGVtcyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwibG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImVycm9yIiwic2V0RXJyb3IiLCJtY3BTbHVnc0tleSIsIm1jcFNsdWdzIiwiam9pbiIsInN0YWJsZVNjb3BlIiwiX3Njb3BlJGNsaWVudElkIiwiX3Njb3BlJHByb2plY3RJZCIsIl9zY29wZSRtY3BTbHVnczIiLCJfdXNlTGF6eVF1ZXJ5IiwidmFyaWFibGVzIiwibGltaXQiLCJmZXRjaFBvbGljeSIsIl91c2VMYXp5UXVlcnkyIiwiZmV0Y2hTZWFyY2hFbnRpdGllcyIsIl91c2VMYXp5UXVlcnkyJCIsInNlYXJjaERhdGEiLCJkYXRhIiwic2VhcmNoTG9hZGluZyIsInNlYXJjaEVycm9yIiwiX3VzZUxhenlRdWVyeTMiLCJfdXNlTGF6eVF1ZXJ5NCIsImZldGNoU2VhcmNoQ2xpZW50cyIsIl91c2VMYXp5UXVlcnk0JCIsImNsaWVudHNEYXRhIiwiY2xpZW50c0xvYWRpbmciLCJjbGllbnRzRXJyb3IiLCJfdXNlTGF6eVF1ZXJ5NSIsIl91c2VMYXp5UXVlcnk2IiwiZmV0Y2hVc2Vyc0RpcmVjdG9yeSIsIl91c2VMYXp5UXVlcnk2JCIsInVzZXJzRGF0YSIsInVzZXJzTG9hZGluZyIsInVzZXJzRXJyb3IiLCJmZXRjaFJlY2VudCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX3N0YWJsZVNjb3BlJG1jcFNsdWdzIiwibWFwcGVkIiwiX2RhdGEiLCJfbWFwcGVkIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImFicnVwdCIsInNlbnQiLCJBcnJheSIsImlzQXJyYXkiLCJwIiwiZmluaXNoIiwic3RvcCIsIl9zdGFibGVTY29wZSRtY3BTbHVnczIiLCJwYWdlIiwicGVyUGFnZSIsImZpbHRlcnMiLCJfY2xpZW50c0RhdGEkY2xpZW50cyIsImNsaWVudHMiLCJfdXNlcnNEYXRhJHVzZXJzRGlyZWMiLCJ1c2Vyc0RpcmVjdG9yeSIsInNlYXJjaCIsInVwZGF0ZVNlYXJjaFZhbHVlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZUVudGl0eVNlYXJjaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VMYXp5UXVlcnkgfSBmcm9tICdAYXBvbGxvL2NsaWVudCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBnZXRSZWNlbnRDbGllbnRzIH0gZnJvbSAnLi4vc2VydmljZXMvbWFpYS9SZWNlbnRDbGllbnRzL2dldFJlY2VudENsaWVudHMnXG5pbXBvcnQgeyBnZXRSZWNlbnRQcm9qZWN0cyB9IGZyb20gJy4uL3NlcnZpY2VzL21haWEvUmVjZW50UHJvamVjdHMvZ2V0UmVjZW50UHJvamVjdHMnXG5pbXBvcnQgeyBTRUFSQ0hfRU5USVRJRVMgfSBmcm9tICcuLi9zZXJ2aWNlcy9xdWVyeS9lbnRpdHlTZWFyY2hRdWVyeSdcbmltcG9ydCB7IFNFQVJDSF9DTElFTlRTIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvQ2xpZW50U2VhcmNoUXVlcnknXG5pbXBvcnQgeyBVU0VSU19ESVJFQ1RPUlkgfSBmcm9tICcuLi9zZXJ2aWNlcy9xdWVyeS91c2Vyc0RpcmVjdG9yeVF1ZXJ5J1xuaW1wb3J0IHsgdXNlRGVib3VuY2UgfSBmcm9tICcuL3VzZURlYm91bmNlJ1xuaW1wb3J0IHsgQ29udGV4dEVudGl0eVR5cGUsIENvbnRleHRNZW50aW9uSXRlbSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuXG50eXBlIFJhd1NlYXJjaFJlc3VsdCA9IHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlclxuICB0aXRsZTogc3RyaW5nXG4gIHR5cGU/OiBzdHJpbmdcbiAgY2xpZW50SWQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsXG4gIGZlZUlkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbFxuICBjbGllbnROYW1lPzogc3RyaW5nIHwgbnVsbFxuICBwcm9qZWN0TmFtZT86IHN0cmluZyB8IG51bGxcbn1cblxudHlwZSBSYXdDbGllbnQgPSB7XG4gIGlkOiBudW1iZXIgfCBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHRvdGFsUHJveWVjdG9zPzogbnVtYmVyIHwgbnVsbFxufVxuXG50eXBlIFJhd0RpcmVjdG9yeVVzZXIgPSB7XG4gIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgZmlyc3ROYW1lPzogc3RyaW5nIHwgbnVsbFxuICBsYXN0TmFtZT86IHN0cmluZyB8IG51bGxcbiAgZW1haWw/OiBzdHJpbmcgfCBudWxsXG4gIHBpY3R1cmU/OiBzdHJpbmcgfCBudWxsXG4gIHBvc2l0aW9uTmFtZT86IHN0cmluZyB8IG51bGxcbn1cblxudHlwZSBTZWFyY2hFbnRpdGllc0RhdGEgPSB7IHNlYXJjaDogUmF3U2VhcmNoUmVzdWx0W10gfCBudWxsIH1cbnR5cGUgU2VhcmNoQ2xpZW50c0RhdGEgPSB7XG4gIGNsaWVudHM6IHtcbiAgICBkYXRhOiBSYXdDbGllbnRbXVxuICB9IHwgbnVsbFxufVxudHlwZSBVc2Vyc0RpcmVjdG9yeURhdGEgPSB7XG4gIHVzZXJzRGlyZWN0b3J5OiB7XG4gICAgdG90YWw/OiBudW1iZXIgfCBudWxsXG4gICAgZGF0YTogUmF3RGlyZWN0b3J5VXNlcltdIHwgbnVsbFxuICB9IHwgbnVsbFxufVxuXG4vKipcbiAqIFJlc3RyaW5nZSBsb3MgcmVzdWx0YWRvcyBhbCBgY2xpZW50SWRgL2Bwcm9qZWN0SWRgIGRlbCBhZ2VudGUgYWN0aXZvLlxuICogQ3VhbmRvIGVsIGFnZW50ZSBlc3TDoSBzY29wZWFkbyBhIHVuIGNsaWVudC9wcm9qZWN0LCB0YW50byBsb3MgcmVjZW50cyBjb21vXG4gKiBlbCBzZWFyY2ggZGViZW4gZmlsdHJhciBwb3IgZXNlIGNvbnRleHRvLiBTaSBlbCBiYWNrZW5kIG5vIGVudGllbmRlIGFsZ8O6blxuICogY2FtcG8gbG8gaWdub3JhIHkgc2UgY2FlIGFsIGNvbXBvcnRhbWllbnRvIGdsb2JhbC5cbiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5U2VhcmNoU2NvcGUgPSB7XG4gIGNsaWVudElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBwcm9qZWN0SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIC8qKiBTbHVncyBkZWwgY29uZWN0b3IgTUNQIGRlbCBhZ2VudGUgKGxpc3RhZG8gbG9jYWwsIHNpbiBHcmFwaFFMKS4gKi9cbiAgbWNwU2x1Z3M/OiBzdHJpbmdbXVxufVxuXG50eXBlIFNlYXJjaEZpbHRlcmFibGVUeXBlID0gJ3Byb2plY3QnIHwgJ3Rhc2snXG5cbmNvbnN0IEJBU0VfRklMVEVSU19CWV9UWVBFOiBSZWNvcmQ8U2VhcmNoRmlsdGVyYWJsZVR5cGUsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge1xuICBwcm9qZWN0OiB7IHByb2plY3Q6ICd0cnVlJywgYXJjaGl2ZWQ6ICdhbGwnIH0sXG4gIHRhc2s6IHsgdGFzazogJ3RydWUnIH0sXG59XG5cbmNvbnN0IGJ1aWxkRmlsdGVyc0ZvclR5cGUgPSAodHlwZTogU2VhcmNoRmlsdGVyYWJsZVR5cGUsIHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBiYXNlID0gQkFTRV9GSUxURVJTX0JZX1RZUEVbdHlwZV1cbiAgY29uc3QgZXh0cmE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fVxuICBpZiAoc2NvcGU/LmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgc2NvcGU/LmNsaWVudElkICE9PSBudWxsICYmIHNjb3BlLmNsaWVudElkICE9PSAnJykge1xuICAgIGV4dHJhLmNsaWVudElkID0gU3RyaW5nKHNjb3BlLmNsaWVudElkKVxuICB9XG4gIC8vIFByb2plY3QgdGFiIG51bmNhIGZpbHRyYSBwb3IgcHJvamVjdElkIChyb21wZSBsYSBsaXN0YSkuIFRhc2tzIHPDrS5cbiAgaWYgKHR5cGUgIT09ICdwcm9qZWN0JyAmJiBzY29wZT8ucHJvamVjdElkICE9PSB1bmRlZmluZWQgJiYgc2NvcGU/LnByb2plY3RJZCAhPT0gbnVsbCAmJiBzY29wZS5wcm9qZWN0SWQgIT09ICcnKSB7XG4gICAgZXh0cmEucHJvamVjdElkID0gU3RyaW5nKHNjb3BlLnByb2plY3RJZClcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeyAuLi5iYXNlLCAuLi5leHRyYSB9KVxufVxuXG4vKipcbiAqIEZpbHRyb3MgcGFyYSB1c2Vyc0RpcmVjdG9yeS4gRWwgYmFja2VuZCBlc3BlcmEgdW4gSlNPTiBzdHJpbmcgY29uXG4gKiB3aXRoUG9zaXRpb24sIHdpdGhUZWFtcyB5IHNlYXJjaElucHV0LiBMZSBhZ3JlZ2Ftb3MgY2xpZW50SWQvcHJvamVjdElkXG4gKiBkZWwgc2NvcGUgZW4gY2FzbyBkZSBxdWUgZWwgYmFja2VuZCBsb3MgYXByb3ZlY2hlIHBhcmEgZmlsdHJhciBwb3JcbiAqIGNvbnRleHRvIChzaSBubyBsb3MgZW50aWVuZGUgbG9zIGlnbm9yYSkuXG4gKi9cbmNvbnN0IGJ1aWxkVXNlcnNEaXJlY3RvcnlGaWx0ZXJzID0gKHE6IHN0cmluZywgc2NvcGU/OiBFbnRpdHlTZWFyY2hTY29wZSk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGJhc2U6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIHdpdGhQb3NpdGlvbjogdHJ1ZSxcbiAgICB3aXRoVGVhbXM6IHRydWUsXG4gICAgc2VhcmNoSW5wdXQ6IHEsXG4gIH1cbiAgaWYgKHNjb3BlPy5jbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHNjb3BlPy5jbGllbnRJZCAhPT0gbnVsbCAmJiBzY29wZS5jbGllbnRJZCAhPT0gJycpIHtcbiAgICBiYXNlLmNsaWVudElkID0gU3RyaW5nKHNjb3BlLmNsaWVudElkKVxuICB9XG4gIGlmIChzY29wZT8ucHJvamVjdElkICE9PSB1bmRlZmluZWQgJiYgc2NvcGU/LnByb2plY3RJZCAhPT0gbnVsbCAmJiBzY29wZS5wcm9qZWN0SWQgIT09ICcnKSB7XG4gICAgYmFzZS5wcm9qZWN0SWQgPSBTdHJpbmcoc2NvcGUucHJvamVjdElkKVxuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShiYXNlKVxufVxuXG5jb25zdCBoaWdobGlnaHRSYW5nZSA9ICh0ZXh0OiBzdHJpbmcsIHNlYXJjaFZhbHVlOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFzZWFyY2hWYWx1ZSkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBpZHggPSB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKVxuICBpZiAoaWR4IDwgMCkgcmV0dXJuIHVuZGVmaW5lZFxuICByZXR1cm4geyBzdGFydDogaWR4LCBsZW5ndGg6IHNlYXJjaFZhbHVlLmxlbmd0aCB9XG59XG5cbmNvbnN0IG1hcENsaWVudFRvSXRlbSA9IChjOiBSYXdDbGllbnQsIHNlYXJjaFZhbHVlOiBzdHJpbmcpOiBDb250ZXh0TWVudGlvbkl0ZW0gPT4gKHtcbiAgaWQ6IGMuaWQsXG4gIHR5cGU6ICdjbGllbnQnLFxuICBwcmltYXJ5OiBjLm5hbWUsXG4gIHByaW1hcnlIaWdobGlnaHQ6IGhpZ2hsaWdodFJhbmdlKGMubmFtZSwgc2VhcmNoVmFsdWUpLFxuICBicmVhZGNydW1iOiB7XG4gICAgY291bnQ6IGMudG90YWxQcm95ZWN0b3MgPz8gdW5kZWZpbmVkLFxuICAgIGNvdW50TGFiZWw6ICdwcm9qZWN0cycsXG4gIH0sXG4gIHJhdzoge1xuICAgIGlkOiBjLmlkLFxuICAgIG5hbWU6IGMubmFtZSxcbiAgICB0b3RhbFByb3llY3RvczogYy50b3RhbFByb3llY3RvcyA/PyBudWxsLFxuICB9LFxufSlcblxuY29uc3QgbWFwVXNlclRvSXRlbSA9ICh1OiBSYXdEaXJlY3RvcnlVc2VyLCBzZWFyY2hWYWx1ZTogc3RyaW5nKTogQ29udGV4dE1lbnRpb25JdGVtID0+IHtcbiAgY29uc3QgZnVsbE5hbWUgPSBgJHt1LmZpcnN0TmFtZSA/PyAnJ30gJHt1Lmxhc3ROYW1lID8/ICcnfWAudHJpbSgpXG4gIGNvbnN0IHByaW1hcnkgPSBmdWxsTmFtZSB8fCB1LmVtYWlsIHx8IFN0cmluZyh1LmlkKVxuXG4gIHJldHVybiB7XG4gICAgaWQ6IHUuaWQsXG4gICAgdHlwZTogJ3VzZXInLFxuICAgIHByaW1hcnksXG4gICAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UocHJpbWFyeSwgc2VhcmNoVmFsdWUpLFxuICAgIHJhdzoge1xuICAgICAgaWQ6IHUuaWQsXG4gICAgICBuYW1lOiBwcmltYXJ5LFxuICAgICAgcGljdHVyZTogdS5waWN0dXJlID8/IG51bGwsXG4gICAgICBwb3NpdGlvbk5hbWU6IHUucG9zaXRpb25OYW1lID8/IG51bGwsXG4gICAgICBlbWFpbDogdS5lbWFpbCA/PyBudWxsLFxuICAgIH0sXG4gIH1cbn1cblxuY29uc3QgbWFwU2VhcmNoVG9JdGVtID0gKHI6IFJhd1NlYXJjaFJlc3VsdCwgdHlwZTogQ29udGV4dEVudGl0eVR5cGUsIHNlYXJjaFZhbHVlOiBzdHJpbmcpOiBDb250ZXh0TWVudGlvbkl0ZW0gPT4ge1xuICBjb25zdCBwcmltYXJ5ID0gci50aXRsZSB8fCByLnByb2plY3ROYW1lIHx8ICcnXG4gIGxldCBwYXJlbnQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgaWYgKHR5cGUgPT09ICdwcm9qZWN0JykgcGFyZW50ID0gci5jbGllbnROYW1lXG4gIGVsc2UgaWYgKHR5cGUgPT09ICd0YXNrJykgcGFyZW50ID0gdW5kZWZpbmVkXG4gIGVsc2UgcGFyZW50ID0gci5wcm9qZWN0TmFtZSA/PyByLmNsaWVudE5hbWVcblxuICByZXR1cm4ge1xuICAgIGlkOiByLmlkLFxuICAgIHR5cGUsXG4gICAgcHJpbWFyeSxcbiAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgYnJlYWRjcnVtYjogcGFyZW50ID8geyBwYXJlbnQgfSA6IHVuZGVmaW5lZCxcbiAgICByYXc6IHtcbiAgICAgIGlkOiByLmlkLFxuICAgICAgbmFtZTogcHJpbWFyeSxcbiAgICAgIGNsaWVudElkOiByLmNsaWVudElkID8/IG51bGwsXG4gICAgICBjbGllbnROYW1lOiByLmNsaWVudE5hbWUgPz8gbnVsbCxcbiAgICAgIHByb2plY3ROYW1lOiByLnByb2plY3ROYW1lID8/IG51bGwsXG4gICAgICBmZWVJZDogci5mZWVJZCA/PyBudWxsLFxuICAgIH0sXG4gIH1cbn1cblxuY29uc3QgZm9ybWF0TWNwUHJpbWFyeUxhYmVsID0gKHNsdWc6IHN0cmluZyk6IHN0cmluZyA9PlxuICBzbHVnLnJlcGxhY2UoL18vZywgJyAnKS5yZXBsYWNlKC9cXGJcXHcvZywgY2hhciA9PiBjaGFyLnRvVXBwZXJDYXNlKCkpXG5cbmNvbnN0IG1hcE1jcFNsdWdzVG9JdGVtcyA9IChzbHVnczogc3RyaW5nW10sIHNlYXJjaFZhbHVlOiBzdHJpbmcpOiBDb250ZXh0TWVudGlvbkl0ZW1bXSA9PiB7XG4gIGNvbnN0IHEgPSBzZWFyY2hWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKVxuICBsZXQgZmlsdGVyZWQgPSBzbHVnc1xuICBpZiAocSkge1xuICAgIGZpbHRlcmVkID0gc2x1Z3MuZmlsdGVyKHMgPT4ge1xuICAgICAgY29uc3QgcHJpbWFyeSA9IGZvcm1hdE1jcFByaW1hcnlMYWJlbChzKVxuICAgICAgcmV0dXJuIHMudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKSB8fCBwcmltYXJ5LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSlcbiAgICB9KVxuICB9XG4gIHJldHVybiBmaWx0ZXJlZC5tYXAoc2x1ZyA9PiB7XG4gICAgY29uc3QgcHJpbWFyeSA9IGZvcm1hdE1jcFByaW1hcnlMYWJlbChzbHVnKVxuICAgIHJldHVybiB7XG4gICAgICBpZDogc2x1ZyxcbiAgICAgIHR5cGU6ICdtY3AnIGFzIGNvbnN0LFxuICAgICAgcHJpbWFyeSxcbiAgICAgIHByaW1hcnlIaWdobGlnaHQ6IGhpZ2hsaWdodFJhbmdlKHByaW1hcnksIHNlYXJjaFZhbHVlKSxcbiAgICAgIHJhdzoge1xuICAgICAgICBpZDogc2x1ZyxcbiAgICAgICAgbmFtZTogcHJpbWFyeSxcbiAgICAgIH0sXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgY29uc3QgdXNlRW50aXR5U2VhcmNoID0gKHR5cGU6IENvbnRleHRFbnRpdHlUeXBlLCBzY29wZT86IEVudGl0eVNlYXJjaFNjb3BlKSA9PiB7XG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IGRlYm91bmNlZFNlYXJjaFZhbHVlID0gdXNlRGVib3VuY2Uoc2VhcmNoVmFsdWUsIDQwMClcblxuICBjb25zdCBbaXRlbXMsIHNldEl0ZW1zXSA9IHVzZVN0YXRlPENvbnRleHRNZW50aW9uSXRlbVtdPihbXSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgbWNwU2x1Z3NLZXkgPSAoc2NvcGU/Lm1jcFNsdWdzID8/IFtdKS5qb2luKCd8JylcblxuICAvLyBFc3RhYmlsaXphbW9zIGVsIHNjb3BlIHBhcmEgbm8gZGlzcGFyYXIgZmV0Y2hzIHBvciBjYW1iaW9zIGRlIGlkZW50aWRhZCBkZSBvYmpldG8uXG4gIGNvbnN0IHN0YWJsZVNjb3BlID0gdXNlTWVtbzxFbnRpdHlTZWFyY2hTY29wZT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIGNsaWVudElkOiBzY29wZT8uY2xpZW50SWQgPz8gbnVsbCxcbiAgICAgIHByb2plY3RJZDogc2NvcGU/LnByb2plY3RJZCA/PyBudWxsLFxuICAgICAgbWNwU2x1Z3M6IHNjb3BlPy5tY3BTbHVncyA/PyBbXSxcbiAgICB9KSxcbiAgICBbc2NvcGU/LmNsaWVudElkLCBzY29wZT8ucHJvamVjdElkLCBtY3BTbHVnc0tleV1cbiAgKVxuXG4gIC8vIC0tLSBTZWFyY2g6IHByb2plY3QgfCB0YXNrIChHcmFwaFFMOiBzZWFyY2gpIC0tLVxuICBjb25zdCBbZmV0Y2hTZWFyY2hFbnRpdGllcywgeyBkYXRhOiBzZWFyY2hEYXRhLCBsb2FkaW5nOiBzZWFyY2hMb2FkaW5nLCBlcnJvcjogc2VhcmNoRXJyb3IgfV0gPVxuICAgIHVzZUxhenlRdWVyeTxTZWFyY2hFbnRpdGllc0RhdGE+KFNFQVJDSF9FTlRJVElFUywge1xuICAgICAgdmFyaWFibGVzOiB7IGxpbWl0OiAyMCB9LFxuICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgIH0pXG5cbiAgLy8gLS0tIFNlYXJjaDogY2xpZW50IChHcmFwaFFMKSAtLS1cbiAgY29uc3QgW2ZldGNoU2VhcmNoQ2xpZW50cywgeyBkYXRhOiBjbGllbnRzRGF0YSwgbG9hZGluZzogY2xpZW50c0xvYWRpbmcsIGVycm9yOiBjbGllbnRzRXJyb3IgfV0gPVxuICAgIHVzZUxhenlRdWVyeTxTZWFyY2hDbGllbnRzRGF0YT4oU0VBUkNIX0NMSUVOVFMsIHtcbiAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICB9KVxuXG4gIC8vIC0tLSBTZWFyY2g6IHVzZXIgKEdyYXBoUUw6IHVzZXJzRGlyZWN0b3J5KSAtLS1cbiAgY29uc3QgW2ZldGNoVXNlcnNEaXJlY3RvcnksIHsgZGF0YTogdXNlcnNEYXRhLCBsb2FkaW5nOiB1c2Vyc0xvYWRpbmcsIGVycm9yOiB1c2Vyc0Vycm9yIH1dID1cbiAgICB1c2VMYXp5UXVlcnk8VXNlcnNEaXJlY3RvcnlEYXRhPihVU0VSU19ESVJFQ1RPUlksIHtcbiAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICB9KVxuXG4gIGNvbnN0IGZldGNoUmVjZW50ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0eXBlID09PSAnbWNwJykge1xuICAgICAgY29uc3Qgc2x1Z3MgPSBzdGFibGVTY29wZS5tY3BTbHVncyA/PyBbXVxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgc2V0SXRlbXMobWFwTWNwU2x1Z3NUb0l0ZW1zKHNsdWdzLCAnJykpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlID09PSAnY2xpZW50Jykge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVjZW50Q2xpZW50cygpXG4gICAgICAgIGNvbnN0IG1hcHBlZCA9IChkYXRhID8/IFtdKS5tYXAoYyA9PiBtYXBDbGllbnRUb0l0ZW0oYywgJycpKVxuICAgICAgICBzZXRJdGVtcyhtYXBwZWQpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwcm9qZWN0Jykge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVjZW50UHJvamVjdHMoc3RhYmxlU2NvcGUuY2xpZW50SWQgPyB7IGNsaWVudElkOiBzdGFibGVTY29wZS5jbGllbnRJZCB9IDogdW5kZWZpbmVkKVxuICAgICAgICBjb25zdCBtYXBwZWQgPSAoQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbXSkubWFwKHAgPT5cbiAgICAgICAgICBtYXBTZWFyY2hUb0l0ZW0oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiBwLmlkLFxuICAgICAgICAgICAgICB0aXRsZTogcC50aXRsZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3Byb2plY3QnLFxuICAgICAgICAgICAgICBjbGllbnRJZDogcC5jbGllbnRJZCxcbiAgICAgICAgICAgICAgZmVlSWQ6IHAuZmVlSWQsXG4gICAgICAgICAgICAgIGNsaWVudE5hbWU6IHAuY2xpZW50TmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAncHJvamVjdCcsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICBzZXRJdGVtcyhtYXBwZWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0YXNrcyB5IHVzZXJzIG5vIHRpZW5lbiBlbmRwb2ludCBkZSByZWNlbnRzOiBhcnJhbmNhbW9zIHZhY8Otb1xuICAgICAgICBzZXRJdGVtcyhbXSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICBzZXRJdGVtcyhbXSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH0sIFt0eXBlLCBzdGFibGVTY29wZV0pXG5cbiAgLy8gRGlzcGFyYXIgc2VhcmNoIGFsIGNhbWJpYXIgZGVib3VuY2VkIHZhbHVlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcSA9IGRlYm91bmNlZFNlYXJjaFZhbHVlLnRyaW0oKVxuXG4gICAgaWYgKHR5cGUgPT09ICdtY3AnKSB7XG4gICAgICBjb25zdCBzbHVncyA9IHN0YWJsZVNjb3BlLm1jcFNsdWdzID8/IFtdXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgICBzZXRJdGVtcyhtYXBNY3BTbHVnc1RvSXRlbXMoc2x1Z3MsIHEpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFxKSByZXR1cm5cblxuICAgIGlmICh0eXBlID09PSAnY2xpZW50Jykge1xuICAgICAgZmV0Y2hTZWFyY2hDbGllbnRzKHtcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgZmlsdGVyOiB7IG5hbWU6IHEgfSxcbiAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgIHBlclBhZ2U6IDIwLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd1c2VyJykge1xuICAgICAgZmV0Y2hVc2Vyc0RpcmVjdG9yeSh7XG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGZpbHRlcnM6IGJ1aWxkVXNlcnNEaXJlY3RvcnlGaWx0ZXJzKHEsIHN0YWJsZVNjb3BlKSxcbiAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgZmV0Y2hTZWFyY2hFbnRpdGllcyh7XG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIHEsXG4gICAgICAgICAgZmlsdGVyczogYnVpbGRGaWx0ZXJzRm9yVHlwZSh0eXBlLCBzdGFibGVTY29wZSksXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW2RlYm91bmNlZFNlYXJjaFZhbHVlLCB0eXBlLCBzdGFibGVTY29wZSwgZmV0Y2hTZWFyY2hFbnRpdGllcywgZmV0Y2hTZWFyY2hDbGllbnRzLCBmZXRjaFVzZXJzRGlyZWN0b3J5XSlcblxuICAvLyBTaW5jcm9uaXphciByZXN1bHRhZG9zIGRlIHNlYXJjaFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlID09PSAnbWNwJykgcmV0dXJuXG5cbiAgICBjb25zdCBxID0gZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpXG4gICAgaWYgKCFxKSByZXR1cm5cblxuICAgIGlmICh0eXBlID09PSAnY2xpZW50Jykge1xuICAgICAgc2V0TG9hZGluZyhjbGllbnRzTG9hZGluZylcbiAgICAgIGlmIChjbGllbnRzRXJyb3IpIHtcbiAgICAgICAgc2V0RXJyb3IodHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoY2xpZW50c0RhdGE/LmNsaWVudHM/LmRhdGEpIHtcbiAgICAgICAgc2V0SXRlbXMoY2xpZW50c0RhdGEuY2xpZW50cy5kYXRhLm1hcChjID0+IG1hcENsaWVudFRvSXRlbShjLCBxKSkpXG4gICAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICBzZXRMb2FkaW5nKHVzZXJzTG9hZGluZylcbiAgICAgIGlmICh1c2Vyc0Vycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHVzZXJzRGF0YT8udXNlcnNEaXJlY3Rvcnk/LmRhdGEpIHtcbiAgICAgICAgc2V0SXRlbXModXNlcnNEYXRhLnVzZXJzRGlyZWN0b3J5LmRhdGEubWFwKHUgPT4gbWFwVXNlclRvSXRlbSh1LCBxKSkpXG4gICAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRMb2FkaW5nKHNlYXJjaExvYWRpbmcpXG4gICAgICBpZiAoc2VhcmNoRXJyb3IpIHtcbiAgICAgICAgc2V0RXJyb3IodHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoc2VhcmNoRGF0YT8uc2VhcmNoKSB7XG4gICAgICAgIHNldEl0ZW1zKHNlYXJjaERhdGEuc2VhcmNoLm1hcChyID0+IG1hcFNlYXJjaFRvSXRlbShyLCB0eXBlLCBxKSkpXG4gICAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIHNlYXJjaERhdGEsXG4gICAgY2xpZW50c0RhdGEsXG4gICAgdXNlcnNEYXRhLFxuICAgIHNlYXJjaExvYWRpbmcsXG4gICAgY2xpZW50c0xvYWRpbmcsXG4gICAgdXNlcnNMb2FkaW5nLFxuICAgIHNlYXJjaEVycm9yLFxuICAgIGNsaWVudHNFcnJvcixcbiAgICB1c2Vyc0Vycm9yLFxuICAgIGRlYm91bmNlZFNlYXJjaFZhbHVlLFxuICAgIHR5cGUsXG4gIF0pXG5cbiAgLy8gQ3VhbmRvIHNlIGxpbXBpYSBlbCBzZWFyY2gsIHZvbHZlciBhIHJlY2VudHNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRlYm91bmNlZFNlYXJjaFZhbHVlLnRyaW0oKSkge1xuICAgICAgZmV0Y2hSZWNlbnQoKVxuICAgIH1cbiAgfSwgW2RlYm91bmNlZFNlYXJjaFZhbHVlLCBmZXRjaFJlY2VudF0pXG5cbiAgcmV0dXJuIHtcbiAgICBpdGVtcyxcbiAgICBsb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIHNlYXJjaFZhbHVlLFxuICAgIHVwZGF0ZVNlYXJjaFZhbHVlOiBzZXRTZWFyY2hWYWx1ZSxcbiAgICBmZXRjaFJlY2VudCxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxTQUFTQSxZQUFZLFFBQVEsZ0JBQWdCO0FBQzdDLFNBQVNDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2pFLFNBQVNDLGdCQUFnQixRQUFRLGlEQUFpRDtBQUNsRixTQUFTQyxpQkFBaUIsUUFBUSxtREFBbUQ7QUFDckYsU0FBU0MsZUFBZSxRQUFRLHFDQUFxQztBQUNyRSxTQUFTQyxjQUFjLFFBQVEscUNBQXFDO0FBQ3BFLFNBQVNDLGVBQWUsUUFBUSx1Q0FBdUM7QUFDdkUsU0FBU0MsV0FBVyxRQUFRLGVBQWU7O0FBeUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBVUEsSUFBTUMsb0JBQTBFLEdBQUc7RUFDakZDLE9BQU8sRUFBRTtJQUFFQSxPQUFPLEVBQUUsTUFBTTtJQUFFQyxRQUFR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
@@ -1,86 +0,0 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
- import { useMemo } from 'react';
3
- import { useGlobalContext } from '../context/global-context';
4
- var ALL_TYPES = ['client', 'project', 'task', 'user'];
5
- var COR_READ_SLUG_TO_TYPE = {
6
- clients_read: 'client',
7
- client_read: 'client',
8
- projects_read: 'project',
9
- project_read: 'project',
10
- tasks_read: 'task',
11
- task_read: 'task'
12
- };
13
- /**
14
- * Deriva del agent activo qué tabs del context mention deben estar disponibles.
15
- *
16
- * Reglas:
17
- * - agent.entity === 'global' → ninguna (sin @-mentions)
18
- * - agent.entity === 'project' → [task, user]
19
- * - agent.entity === 'client' → [project, task, user]
20
- * - agent.entity === null/otro → todas (p. ej. agente sin entity en contexto amplio)
21
- * - agent.type === 'custom' y conectores COR → además filtra client/project/task por slugs *_read
22
- * - agentes no custom (pm, clone): no se aplica filtro por conectores; solo reglas por entity
23
- *
24
- * El `override` (prop `enabledTypes` del componente consumidor) siempre gana.
25
- */
26
- export var useMentionAllowedTypes = function useMentionAllowedTypes(override) {
27
- var _useGlobalContext = useGlobalContext(),
28
- agent = _useGlobalContext.agent;
29
- return useMemo(function () {
30
- var _agent$connectors, _corConnector$slugs, _agent$connectors$fin, _agent$connectors2, _allowedTypes$;
31
- if (override && override.length > 0) {
32
- var defaultType = override[0];
33
- return {
34
- allowedTypes: override,
35
- defaultType: defaultType
36
- };
37
- }
38
- if ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'global') {
39
- return {
40
- allowedTypes: [],
41
- defaultType: 'user'
42
- };
43
- }
44
- var allowedTypes = ALL_TYPES;
45
- if ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'project') {
46
- allowedTypes = ['task', 'user'];
47
- } else if ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'client') {
48
- allowedTypes = ['project', 'task', 'user'];
49
- }
50
- var corConnector = agent === null || agent === void 0 || (_agent$connectors = agent.connectors) === null || _agent$connectors === void 0 ? void 0 : _agent$connectors.find(function (connector) {
51
- return connector.group === 'COR';
52
- });
53
- var allowedByConnectors = new Set(((_corConnector$slugs = corConnector === null || corConnector === void 0 ? void 0 : corConnector.slugs) !== null && _corConnector$slugs !== void 0 ? _corConnector$slugs : []).map(function (slug) {
54
- return COR_READ_SLUG_TO_TYPE[slug];
55
- }).filter(function (type) {
56
- return !!type;
57
- }));
58
-
59
- // Solo custom: permisos COR por slug. Project/client “de producto” no deben quedar en [] por conectores incompletos.
60
- if ((agent === null || agent === void 0 ? void 0 : agent.type) === 'custom' && corConnector) {
61
- allowedTypes = allowedTypes.filter(function (type) {
62
- return type === 'user' || allowedByConnectors.has(type);
63
- });
64
- }
65
-
66
- // `user` sólo se habilita junto con `task`.
67
- if (!allowedTypes.includes('task')) {
68
- allowedTypes = allowedTypes.filter(function (type) {
69
- return type !== 'user';
70
- });
71
- }
72
- var mcpSlugs = (_agent$connectors$fin = agent === null || agent === void 0 || (_agent$connectors2 = agent.connectors) === null || _agent$connectors2 === void 0 || (_agent$connectors2 = _agent$connectors2.find(function (connector) {
73
- return connector.group === 'MCP';
74
- })) === null || _agent$connectors2 === void 0 || (_agent$connectors2 = _agent$connectors2.slugs) === null || _agent$connectors2 === void 0 ? void 0 : _agent$connectors2.filter(function (slug) {
75
- return typeof slug === 'string' && slug.trim().length > 0;
76
- })) !== null && _agent$connectors$fin !== void 0 ? _agent$connectors$fin : [];
77
- if (mcpSlugs.length > 0) {
78
- allowedTypes = [].concat(_toConsumableArray(allowedTypes), ['mcp']);
79
- }
80
- return {
81
- allowedTypes: allowedTypes,
82
- defaultType: (_allowedTypes$ = allowedTypes[0]) !== null && _allowedTypes$ !== void 0 ? _allowedTypes$ : 'user'
83
- };
84
- }, [agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.type, agent === null || agent === void 0 ? void 0 : agent.connectors, override]);
85
- };
86
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlR2xvYmFsQ29udGV4dCIsIkFMTF9UWVBFUyIsIkNPUl9SRUFEX1NMVUdfVE9fVFlQRSIsImNsaWVudHNfcmVhZCIsImNsaWVudF9yZWFkIiwicHJvamVjdHNfcmVhZCIsInByb2plY3RfcmVhZCIsInRhc2tzX3JlYWQiLCJ0YXNrX3JlYWQiLCJ1c2VNZW50aW9uQWxsb3dlZFR5cGVzIiwib3ZlcnJpZGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsImFnZW50IiwiX2FnZW50JGNvbm5lY3RvcnMiLCJfY29yQ29ubmVjdG9yJHNsdWdzIiwiX2FnZW50JGNvbm5lY3RvcnMkZmluIiwiX2FnZW50JGNvbm5lY3RvcnMyIiwiX2FsbG93ZWRUeXBlcyQiLCJsZW5ndGgiLCJkZWZhdWx0VHlwZSIsImFsbG93ZWRUeXBlcyIsImVudGl0eSIsImNvckNvbm5lY3RvciIsImNvbm5lY3RvcnMiLCJmaW5kIiwiY29ubmVjdG9yIiwiZ3JvdXAiLCJhbGxvd2VkQnlDb25uZWN0b3JzIiwiU2V0Iiwic2x1Z3MiLCJtYXAiLCJzbHVnIiwiZmlsdGVyIiwidHlwZSIsImhhcyIsImluY2x1ZGVzIiwibWNwU2x1Z3MiLCJ0cmltIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZU1lbnRpb25BbGxvd2VkVHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBDb250ZXh0RW50aXR5VHlwZSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuXG5jb25zdCBBTExfVFlQRVM6IENvbnRleHRFbnRpdHlUeXBlW10gPSBbJ2NsaWVudCcsICdwcm9qZWN0JywgJ3Rhc2snLCAndXNlciddXG5cbmNvbnN0IENPUl9SRUFEX1NMVUdfVE9fVFlQRTogUmVjb3JkPHN0cmluZywgRXh0cmFjdDxDb250ZXh0RW50aXR5VHlwZSwgJ2NsaWVudCcgfCAncHJvamVjdCcgfCAndGFzayc+PiA9IHtcbiAgY2xpZW50c19yZWFkOiAnY2xpZW50JyxcbiAgY2xpZW50X3JlYWQ6ICdjbGllbnQnLFxuICBwcm9qZWN0c19yZWFkOiAncHJvamVjdCcsXG4gIHByb2plY3RfcmVhZDogJ3Byb2plY3QnLFxuICB0YXNrc19yZWFkOiAndGFzaycsXG4gIHRhc2tfcmVhZDogJ3Rhc2snLFxufVxuXG5leHBvcnQgdHlwZSBVc2VNZW50aW9uQWxsb3dlZFR5cGVzUmVzdWx0ID0ge1xuICBhbGxvd2VkVHlwZXM6IENvbnRleHRFbnRpdHlUeXBlW11cbiAgZGVmYXVsdFR5cGU6IENvbnRleHRFbnRpdHlUeXBlXG59XG5cbi8qKlxuICogRGVyaXZhIGRlbCBhZ2VudCBhY3Rpdm8gcXXDqSB0YWJzIGRlbCBjb250ZXh0IG1lbnRpb24gZGViZW4gZXN0YXIgZGlzcG9uaWJsZXMuXG4gKlxuICogUmVnbGFzOlxuICogICAtIGFnZW50LmVudGl0eSA9PT0gJ2dsb2JhbCcgIOKGkiBuaW5ndW5hIChzaW4gQC1tZW50aW9ucylcbiAqICAgLSBhZ2VudC5lbnRpdHkgPT09ICdwcm9qZWN0JyDihpIgW3Rhc2ssIHVzZXJdXG4gKiAgIC0gYWdlbnQuZW50aXR5ID09PSAnY2xpZW50JyAg4oaSIFtwcm9qZWN0LCB0YXNrLCB1c2VyXVxuICogICAtIGFnZW50LmVudGl0eSA9PT0gbnVsbC9vdHJvICDihpIgdG9kYXMgKHAuIGVqLiBhZ2VudGUgc2luIGVudGl0eSBlbiBjb250ZXh0byBhbXBsaW8pXG4gKiAgIC0gYWdlbnQudHlwZSA9PT0gJ2N1c3RvbScgeSBjb25lY3RvcmVzIENPUiDihpIgYWRlbcOhcyBmaWx0cmEgY2xpZW50L3Byb2plY3QvdGFzayBwb3Igc2x1Z3MgKl9yZWFkXG4gKiAgIC0gYWdlbnRlcyBubyBjdXN0b20gKHBtLCBjbG9uZSk6IG5vIHNlIGFwbGljYSBmaWx0cm8gcG9yIGNvbmVjdG9yZXM7IHNvbG8gcmVnbGFzIHBvciBlbnRpdHlcbiAqXG4gKiBFbCBgb3ZlcnJpZGVgIChwcm9wIGBlbmFibGVkVHlwZXNgIGRlbCBjb21wb25lbnRlIGNvbnN1bWlkb3IpIHNpZW1wcmUgZ2FuYS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1lbnRpb25BbGxvd2VkVHlwZXMgPSAob3ZlcnJpZGU/OiBDb250ZXh0RW50aXR5VHlwZVtdKTogVXNlTWVudGlvbkFsbG93ZWRUeXBlc1Jlc3VsdCA9PiB7XG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIHJldHVybiB1c2VNZW1vKCgpOiBVc2VNZW50aW9uQWxsb3dlZFR5cGVzUmVzdWx0ID0+IHtcbiAgICBpZiAob3ZlcnJpZGUgJiYgb3ZlcnJpZGUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGVmYXVsdFR5cGUgPSBvdmVycmlkZVswXVxuICAgICAgcmV0dXJuIHsgYWxsb3dlZFR5cGVzOiBvdmVycmlkZSwgZGVmYXVsdFR5cGUgfVxuICAgIH1cblxuICAgIGlmIChhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJykge1xuICAgICAgcmV0dXJuIHsgYWxsb3dlZFR5cGVzOiBbXSwgZGVmYXVsdFR5cGU6ICd1c2VyJyB9XG4gICAgfVxuXG4gICAgbGV0IGFsbG93ZWRUeXBlczogQ29udGV4dEVudGl0eVR5cGVbXSA9IEFMTF9UWVBFU1xuXG4gICAgaWYgKGFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0Jykge1xuICAgICAgYWxsb3dlZFR5cGVzID0gWyd0YXNrJywgJ3VzZXInXVxuICAgIH0gZWxzZSBpZiAoYWdlbnQ/LmVudGl0eSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIGFsbG93ZWRUeXBlcyA9IFsncHJvamVjdCcsICd0YXNrJywgJ3VzZXInXVxuICAgIH1cblxuICAgIGNvbnN0IGNvckNvbm5lY3RvciA9IGFnZW50Py5jb25uZWN0b3JzPy5maW5kKGNvbm5lY3RvciA9PiBjb25uZWN0b3IuZ3JvdXAgPT09ICdDT1InKVxuICAgIGNvbnN0IGFsbG93ZWRCeUNvbm5lY3RvcnMgPSBuZXcgU2V0PENvbnRleHRFbnRpdHlUeXBlPihcbiAgICAgIChjb3JDb25uZWN0b3I/LnNsdWdzID8/IFtdKVxuICAgICAgICAubWFwKHNsdWcgPT4gQ09SX1JFQURfU0xVR19UT19UWVBFW3NsdWddKVxuICAgICAgICAuZmlsdGVyKCh0eXBlKTogdHlwZSBpcyBFeHRyYWN0PENvbnRleHRFbnRpdHlUeXBlLCAnY2xpZW50JyB8ICdwcm9qZWN0JyB8ICd0YXNrJz4gPT4gISF0eXBlKVxuICAgIClcblxuICAgIC8vIFNvbG8gY3VzdG9tOiBwZXJtaXNvcyBDT1IgcG9yIHNsdWcuIFByb2plY3QvY2xpZW50IOKAnGRlIHByb2R1Y3Rv4oCdIG5vIGRlYmVuIHF1ZWRhciBlbiBbXSBwb3IgY29uZWN0b3JlcyBpbmNvbXBsZXRvcy5cbiAgICBpZiAoYWdlbnQ/LnR5cGUgPT09ICdjdXN0b20nICYmIGNvckNvbm5lY3Rvcikge1xuICAgICAgYWxsb3dlZFR5cGVzID0gYWxsb3dlZFR5cGVzLmZpbHRlcih0eXBlID0+IHR5cGUgPT09ICd1c2VyJyB8fCBhbGxvd2VkQnlDb25uZWN0b3JzLmhhcyh0eXBlKSlcbiAgICB9XG5cbiAgICAvLyBgdXNlcmAgc8OzbG8gc2UgaGFiaWxpdGEganVudG8gY29uIGB0YXNrYC5cbiAgICBpZiAoIWFsbG93ZWRUeXBlcy5pbmNsdWRlcygndGFzaycpKSB7XG4gICAgICBhbGxvd2VkVHlwZXMgPSBhbGxvd2VkVHlwZXMuZmlsdGVyKHR5cGUgPT4gdHlwZSAhPT0gJ3VzZXInKVxuICAgIH1cblxuICAgIGNvbnN0IG1jcFNsdWdzID1cbiAgICAgIGFnZW50Py5jb25uZWN0b3JzXG4gICAgICAgID8uZmluZChjb25uZWN0b3IgPT4gY29ubmVjdG9yLmdyb3VwID09PSAnTUNQJylcbiAgICAgICAgPy5zbHVncz8uZmlsdGVyKChzbHVnKTogc2x1ZyBpcyBzdHJpbmcgPT4gdHlwZW9mIHNsdWcgPT09ICdzdHJpbmcnICYmIHNsdWcudHJpbSgpLmxlbmd0aCA+IDApID8/IFtdXG4gICAgaWYgKG1jcFNsdWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFsbG93ZWRUeXBlcyA9IFsuLi5hbGxvd2VkVHlwZXMsICdtY3AnXVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhbGxvd2VkVHlwZXMsXG4gICAgICBkZWZhdWx0VHlwZTogYWxsb3dlZFR5cGVzWzBdID8/ICd1c2VyJyxcbiAgICB9XG4gIH0sIFthZ2VudD8uZW50aXR5LCBhZ2VudD8udHlwZSwgYWdlbnQ/LmNvbm5lY3RvcnMsIG92ZXJyaWRlXSlcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVNBLE9BQU8sUUFBUSxPQUFPO0FBQy9CLFNBQVNDLGdCQUFnQixRQUFRLDJCQUEyQjtBQUc1RCxJQUFNQyxTQUE4QixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0FBRTVFLElBQU1DLHFCQUFnRyxHQUFHO0VBQ3ZHQyxZQUFZLEVBQUUsUUFBUTtFQUN0QkMsV0FBVyxFQUFFLFFBQVE7RUFDckJDLGFBQWEsRUFBRSxTQUFTO0VBQ3hCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsVUFBVSxFQUFFLE1BQU07RUFDbEJDLFNBQVMsRUFBRTtBQUNiLENBQUM7QUFPRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBSUMsUUFBOEIsRUFBbUM7RUFDdEcsSUFBQUMsaUJBQUEsR0FBa0JYLGdCQUFnQixDQUFDLENBQUM7SUFBNUJZLEtBQUssR0FBQUQsaUJBQUEsQ0FBTEMsS0FBSztFQUViLE9BQU9iLE9BQU8sQ0FBQyxZQUFvQztJQUFBLElBQUFjLGlCQUFBLEVBQUFDLG1CQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGtCQUFBLEVBQUFDLGNBQUE7SUFD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