@projectcor/maia-components 2.11.36-7 → 2.11.37-0
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.
- package/lib/App.js +11 -24
- package/lib/components/atoms/Chip/Chip.js +35 -31
- package/lib/components/atoms/MAIAInput/MAIAInput.js +436 -126
- package/lib/components/atoms/MAIAInput/styles.js +61 -43
- package/lib/components/atoms/icons/index.js +1 -3
- package/lib/components/index.js +1 -2
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +2 -2
- package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +3 -3
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +2 -2
- package/lib/components/molecules/AbmSection/index.js +1 -2
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +1 -13
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +4 -8
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +2 -21
- package/lib/components/molecules/ChatAIMessages/newStyles.js +2 -2
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +89 -91
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +2 -2
- package/lib/components/molecules/ChatAIModal/constants.js +2 -10
- package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -6
- package/lib/components/molecules/Sidebar/Sidebar.js +31 -68
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -6
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +50 -247
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +4 -4
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +3 -13
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +3 -6
- package/lib/dev/Providers.js +6 -11
- package/lib/hooks/useAgentModel/useCreateAgent.js +10 -11
- package/lib/hooks/useAgentModel/useUpdateAgent.js +11 -12
- package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
- package/lib/hooks/useChatManager/useChatManager.js +11 -21
- package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
- package/lib/hooks/useChatMessages/useChatMessages.js +14 -30
- package/lib/hooks/useEvent.js +2 -5
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -6
- package/lib/lang/br/index.js +5 -266
- package/lib/lang/en/index.js +5 -266
- package/lib/lang/es/index.js +5 -266
- package/lib/lang/fr/index.js +6 -268
- package/lib/services/maia/Agents/createAgent.js +1 -1
- package/lib/services/maia/Agents/getAgentById.js +2 -3
- package/lib/services/maia/Agents/updateAgent.js +1 -1
- package/lib/services/maia/Chats/getChatMessages.js +4 -29
- package/lib/services/maia/Orchestrator/orchestrator.js +9 -11
- package/lib/services/maia/RecentProjects/getRecentProjects.js +4 -12
- package/lib/services/utils/mapChatMessages.js +5 -12
- package/lib/types/Chat.js +1 -1
- package/lib/types/agent.js +1 -1
- package/lib/types/agentModal.js +1 -1
- package/lib/utils/hitlAnalytics.js +6 -1
- package/package.json +1 -1
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +0 -28
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +0 -84
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +0 -123
- package/lib/components/atoms/ContextMentionChip/index.js +0 -4
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +0 -85
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +0 -6
- package/lib/components/atoms/ContextMentionEditor/index.js +0 -2
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +0 -188
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +0 -98
- package/lib/components/atoms/ContextMentionItem/index.js +0 -2
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +0 -131
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +0 -63
- package/lib/components/atoms/ContextMentionPopover/index.js +0 -3
- package/lib/components/atoms/icons/NotionIcon.js +0 -36
- package/lib/components/atoms/icons/RocketIcon.js +0 -31
- package/lib/components/atoms/icons/WrenchIcon.js +0 -42
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.js +0 -510
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.styles.js +0 -234
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/catalog.js +0 -437
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/index.js +0 -3
- package/lib/components/molecules/AbmSection/AbmSkillsSection.styles.js +0 -80
- package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.interface.js +0 -2
- package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.js +0 -722
- package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.styles.js +0 -165
- package/lib/components/molecules/AbmSection/AbmTriggersSection/index.js +0 -2
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +0 -55
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +0 -6
- package/lib/components/molecules/ContextMentionInput/index.js +0 -2
- package/lib/components/molecules/SchedulesPage/SchedulesPage.js +0 -610
- package/lib/components/molecules/SchedulesPage/index.js +0 -2
- package/lib/components/molecules/SkillsPage/SkillsPage.js +0 -708
- package/lib/components/molecules/SkillsPage/index.js +0 -2
- package/lib/components/molecules/maiaSectionModalStyles.js +0 -91
- package/lib/components/molecules/maiaSectionUiTokens.js +0 -31
- package/lib/constants/taskLinkIcon.js +0 -6
- package/lib/dev/DevAbmAgentModal.js +0 -114
- package/lib/dev/DevContextMentionInput.js +0 -65
- package/lib/dev/mocks/abmModalMocks.js +0 -193
- package/lib/hooks/useCaretPosition.js +0 -35
- package/lib/hooks/useContextMentions.js +0 -204
- package/lib/hooks/useEntitySearch.js +0 -405
- package/lib/hooks/useMentionAllowedTypes.js +0 -86
- package/lib/hooks/useMentionPopover.js +0 -284
- package/lib/services/maia/Agents/connectors.js +0 -110
- package/lib/services/maia/Agents/skills.js +0 -164
- package/lib/services/maia/Schedules/createSchedule.js +0 -39
- package/lib/services/maia/Schedules/deleteSchedule.js +0 -36
- package/lib/services/maia/Schedules/getMySchedules.js +0 -55
- package/lib/services/maia/Schedules/getSchedules.js +0 -58
- package/lib/services/maia/Schedules/index.js +0 -5
- package/lib/services/query/entitySearchQuery.js +0 -16
- package/lib/services/query/usersDirectoryQuery.js +0 -19
- package/lib/types/agentSkill.js +0 -2
- package/lib/types/attachment.js +0 -2
- package/lib/types/contextMention.js +0 -37
- package/lib/utils/contextMentionIcons.js +0 -115
- package/lib/utils/contextMentionLabel.js +0 -4
- package/lib/utils/contextMentionTypeLabel.js +0 -17
- 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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
|