cozy-search 0.1.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/LICENSE +21 -0
- package/README.md +89 -0
- package/dist/components/AssistantDesktop.d.ts +16 -0
- package/dist/components/AssistantDesktop.js +44 -0
- package/dist/components/AssistantIcon/AssistantIcon.d.ts +6 -0
- package/dist/components/AssistantIcon/AssistantIcon.js +43 -0
- package/dist/components/AssistantMobile.d.ts +2 -0
- package/dist/components/AssistantMobile.js +50 -0
- package/dist/components/AssistantProvider.d.ts +7 -0
- package/dist/components/AssistantProvider.js +174 -0
- package/dist/components/Conversations/ChatAssistantItem.d.ts +8 -0
- package/dist/components/Conversations/ChatAssistantItem.js +53 -0
- package/dist/components/Conversations/ChatConversation.d.ts +5 -0
- package/dist/components/Conversations/ChatConversation.js +110 -0
- package/dist/components/Conversations/ChatItem.d.ts +7 -0
- package/dist/components/Conversations/ChatItem.js +39 -0
- package/dist/components/Conversations/ChatItemLabel.d.ts +5 -0
- package/dist/components/Conversations/ChatItemLabel.js +29 -0
- package/dist/components/Conversations/ChatRealtimeAnswer.d.ts +5 -0
- package/dist/components/Conversations/ChatRealtimeAnswer.js +30 -0
- package/dist/components/Conversations/ChatUserItem.d.ts +7 -0
- package/dist/components/Conversations/ChatUserItem.js +41 -0
- package/dist/components/Conversations/Conversation.d.ts +4 -0
- package/dist/components/Conversations/Conversation.js +41 -0
- package/dist/components/Conversations/ConversationBar.d.ts +4 -0
- package/dist/components/Conversations/ConversationBar.js +164 -0
- package/dist/components/Conversations/Sources/Sources.d.ts +5 -0
- package/dist/components/Conversations/Sources/Sources.js +134 -0
- package/dist/components/Conversations/Sources/SourcesItem.d.ts +4 -0
- package/dist/components/Conversations/Sources/SourcesItem.js +55 -0
- package/dist/components/Conversations/Sources/styles.styl +5 -0
- package/dist/components/Conversations/styles.styl +15 -0
- package/dist/components/ResultMenu/NoResultItem.d.ts +2 -0
- package/dist/components/ResultMenu/NoResultItem.js +30 -0
- package/dist/components/ResultMenu/NotEnoughItem.d.ts +2 -0
- package/dist/components/ResultMenu/NotEnoughItem.js +30 -0
- package/dist/components/ResultMenu/ResultMenu.d.ts +6 -0
- package/dist/components/ResultMenu/ResultMenu.js +47 -0
- package/dist/components/ResultMenu/ResultMenuContent.d.ts +3 -0
- package/dist/components/ResultMenu/ResultMenuContent.js +117 -0
- package/dist/components/ResultMenu/ResultMenuItem.d.ts +12 -0
- package/dist/components/ResultMenu/ResultMenuItem.js +65 -0
- package/dist/components/ResultMenu/SuggestionItemTextHighlighted.d.ts +5 -0
- package/dist/components/ResultMenu/SuggestionItemTextHighlighted.js +100 -0
- package/dist/components/ResultMenu/SuggestionItemTextSecondary.d.ts +7 -0
- package/dist/components/ResultMenu/SuggestionItemTextSecondary.js +70 -0
- package/dist/components/ResultMenu/styles.styl +8 -0
- package/dist/components/Search/EncryptedFolderIcon.d.ts +2 -0
- package/dist/components/Search/EncryptedFolderIcon.js +34 -0
- package/dist/components/Search/SearchBar.d.ts +4 -0
- package/dist/components/Search/SearchBar.js +71 -0
- package/dist/components/Search/SearchBarDesktop.d.ts +15 -0
- package/dist/components/Search/SearchBarDesktop.js +167 -0
- package/dist/components/Search/SearchBarMobile.d.ts +6 -0
- package/dist/components/Search/SearchBarMobile.js +71 -0
- package/dist/components/Search/SearchProvider.d.ts +7 -0
- package/dist/components/Search/SearchProvider.js +81 -0
- package/dist/components/Search/SearchSubmitFab.d.ts +5 -0
- package/dist/components/Search/SearchSubmitFab.js +59 -0
- package/dist/components/Search/SuggestionsPlaceholder.d.ts +2 -0
- package/dist/components/Search/SuggestionsPlaceholder.js +55 -0
- package/dist/components/Search/getFileMimetype.d.ts +1 -0
- package/dist/components/Search/getFileMimetype.js +54 -0
- package/dist/components/Search/getIconForSearchResult.d.ts +12 -0
- package/dist/components/Search/getIconForSearchResult.js +127 -0
- package/dist/components/Search/styles.styl +7 -0
- package/dist/components/Search/useFetchResult.d.ts +4 -0
- package/dist/components/Search/useFetchResult.js +191 -0
- package/dist/components/Views/AssistantDialog.d.ts +2 -0
- package/dist/components/Views/AssistantDialog.js +79 -0
- package/dist/components/Views/SearchDialog.d.ts +2 -0
- package/dist/components/Views/SearchDialog.js +96 -0
- package/dist/components/helpers.d.ts +5 -0
- package/dist/components/helpers.js +58 -0
- package/dist/components/queries.d.ts +25 -0
- package/dist/components/queries.js +58 -0
- package/dist/components/styles.styl +18 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +39 -0
- package/dist/locales/en.json +21 -0
- package/dist/locales/fr.json +21 -0
- package/dist/locales/index.d.ts +6 -0
- package/dist/locales/index.js +53 -0
- package/dist/stylesheet.css +48 -0
- package/package.json +91 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useFetchResult = void 0;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
|
|
14
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
+
|
|
16
|
+
var _react = require("react");
|
|
17
|
+
|
|
18
|
+
var _cozyDataproxyLib = require("cozy-dataproxy-lib");
|
|
19
|
+
|
|
20
|
+
var _cozyMinilog = _interopRequireDefault(require("cozy-minilog"));
|
|
21
|
+
|
|
22
|
+
var _getIconForSearchResult = require("./getIconForSearchResult");
|
|
23
|
+
|
|
24
|
+
var log = (0, _cozyMinilog.default)('🔍 [useFetchResult]');
|
|
25
|
+
|
|
26
|
+
var searchWithRetry = /*#__PURE__*/function () {
|
|
27
|
+
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(dataProxy, searchValue) {
|
|
28
|
+
var _ref2,
|
|
29
|
+
_ref2$maxRetries,
|
|
30
|
+
maxRetries,
|
|
31
|
+
_ref2$delay,
|
|
32
|
+
delay,
|
|
33
|
+
currentDelay,
|
|
34
|
+
attempt,
|
|
35
|
+
searchResults,
|
|
36
|
+
_args = arguments;
|
|
37
|
+
|
|
38
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
39
|
+
while (1) {
|
|
40
|
+
switch (_context.prev = _context.next) {
|
|
41
|
+
case 0:
|
|
42
|
+
_ref2 = _args.length > 2 && _args[2] !== undefined ? _args[2] : {}, _ref2$maxRetries = _ref2.maxRetries, maxRetries = _ref2$maxRetries === void 0 ? 5 : _ref2$maxRetries, _ref2$delay = _ref2.delay, delay = _ref2$delay === void 0 ? 500 : _ref2$delay;
|
|
43
|
+
currentDelay = delay; // Make several search attemps in case it is not ready yet
|
|
44
|
+
|
|
45
|
+
attempt = 0;
|
|
46
|
+
|
|
47
|
+
case 3:
|
|
48
|
+
if (!(attempt < maxRetries)) {
|
|
49
|
+
_context.next = 16;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
_context.next = 6;
|
|
54
|
+
return dataProxy.search(searchValue);
|
|
55
|
+
|
|
56
|
+
case 6:
|
|
57
|
+
searchResults = _context.sent;
|
|
58
|
+
|
|
59
|
+
if (!searchResults) {
|
|
60
|
+
_context.next = 9;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return _context.abrupt("return", searchResults);
|
|
65
|
+
|
|
66
|
+
case 9:
|
|
67
|
+
log.info("Search attempt ".concat(attempt + 1, " failed, retrying in ").concat(currentDelay, " ms..."));
|
|
68
|
+
_context.next = 12;
|
|
69
|
+
return new Promise(function (resolve) {
|
|
70
|
+
return setTimeout(resolve, currentDelay);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
case 12:
|
|
74
|
+
currentDelay *= 2; // Exponential backoff
|
|
75
|
+
|
|
76
|
+
case 13:
|
|
77
|
+
attempt++;
|
|
78
|
+
_context.next = 3;
|
|
79
|
+
break;
|
|
80
|
+
|
|
81
|
+
case 16:
|
|
82
|
+
log.error("Search failed after ".concat(maxRetries, " attempts"));
|
|
83
|
+
return _context.abrupt("return", []);
|
|
84
|
+
|
|
85
|
+
case 18:
|
|
86
|
+
case "end":
|
|
87
|
+
return _context.stop();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}, _callee);
|
|
91
|
+
}));
|
|
92
|
+
|
|
93
|
+
return function searchWithRetry(_x, _x2) {
|
|
94
|
+
return _ref.apply(this, arguments);
|
|
95
|
+
};
|
|
96
|
+
}();
|
|
97
|
+
|
|
98
|
+
var useFetchResult = function useFetchResult(searchValue) {
|
|
99
|
+
var _useState = (0, _react.useState)({
|
|
100
|
+
isLoading: true,
|
|
101
|
+
results: null,
|
|
102
|
+
searchValue: null
|
|
103
|
+
}),
|
|
104
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
105
|
+
state = _useState2[0],
|
|
106
|
+
setState = _useState2[1];
|
|
107
|
+
|
|
108
|
+
var dataProxy = (0, _cozyDataproxyLib.useDataProxy)();
|
|
109
|
+
(0, _react.useEffect)(function () {
|
|
110
|
+
var fetch = /*#__PURE__*/function () {
|
|
111
|
+
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(searchValue) {
|
|
112
|
+
var searchResults, results;
|
|
113
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
114
|
+
while (1) {
|
|
115
|
+
switch (_context2.prev = _context2.next) {
|
|
116
|
+
case 0:
|
|
117
|
+
if (dataProxy.dataProxyServicesAvailable) {
|
|
118
|
+
_context2.next = 3;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
log.log('DataProxy services are not available. Skipping search...');
|
|
123
|
+
return _context2.abrupt("return");
|
|
124
|
+
|
|
125
|
+
case 3:
|
|
126
|
+
setState({
|
|
127
|
+
isLoading: true,
|
|
128
|
+
results: null,
|
|
129
|
+
searchValue: searchValue
|
|
130
|
+
});
|
|
131
|
+
_context2.next = 6;
|
|
132
|
+
return searchWithRetry(dataProxy, searchValue);
|
|
133
|
+
|
|
134
|
+
case 6:
|
|
135
|
+
searchResults = _context2.sent;
|
|
136
|
+
results = searchResults.map(function (r) {
|
|
137
|
+
// Begin Retrocompatibility code, to be removed when following PR is merged: https://github.com/cozy/cozy-web-data-proxy/pull/10
|
|
138
|
+
r.slug = r.slug || r.type;
|
|
139
|
+
r.subTitle = r.subTitle || r.name; // End Retrocompatibility code
|
|
140
|
+
|
|
141
|
+
var icon = (0, _getIconForSearchResult.getIconForSearchResult)(r);
|
|
142
|
+
return {
|
|
143
|
+
id: r.doc._id,
|
|
144
|
+
icon: icon,
|
|
145
|
+
slug: r.slug,
|
|
146
|
+
secondaryUrl: r.secondaryUrl,
|
|
147
|
+
primary: r.title,
|
|
148
|
+
secondary: r.subTitle,
|
|
149
|
+
onClick: function onClick() {
|
|
150
|
+
window.open(r.url);
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
});
|
|
154
|
+
setState({
|
|
155
|
+
isLoading: false,
|
|
156
|
+
results: results,
|
|
157
|
+
searchValue: searchValue
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
case 9:
|
|
161
|
+
case "end":
|
|
162
|
+
return _context2.stop();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}, _callee2);
|
|
166
|
+
}));
|
|
167
|
+
|
|
168
|
+
return function fetch(_x3) {
|
|
169
|
+
return _ref3.apply(this, arguments);
|
|
170
|
+
};
|
|
171
|
+
}();
|
|
172
|
+
|
|
173
|
+
if (searchValue) {
|
|
174
|
+
if (searchValue !== state.searchValue) {
|
|
175
|
+
fetch(searchValue);
|
|
176
|
+
}
|
|
177
|
+
} else {
|
|
178
|
+
setState({
|
|
179
|
+
isLoading: true,
|
|
180
|
+
results: null,
|
|
181
|
+
searchValue: null
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}, [dataProxy, searchValue, state.searchValue, setState]);
|
|
185
|
+
return {
|
|
186
|
+
isLoading: state.isLoading,
|
|
187
|
+
results: state.results
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
exports.useFetchResult = useFetchResult;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _reactRouterDom = require("react-router-dom");
|
|
13
|
+
|
|
14
|
+
var _CozyDialogs = require("cozy-ui/transpiled/react/CozyDialogs");
|
|
15
|
+
|
|
16
|
+
var _Breakpoints = require("cozy-ui/transpiled/react/providers/Breakpoints");
|
|
17
|
+
|
|
18
|
+
var _CozyTheme = _interopRequireDefault(require("cozy-ui/transpiled/react/providers/CozyTheme"));
|
|
19
|
+
|
|
20
|
+
var _AssistantProvider = _interopRequireWildcard(require("../AssistantProvider"));
|
|
21
|
+
|
|
22
|
+
var _Conversation = _interopRequireDefault(require("../Conversations/Conversation"));
|
|
23
|
+
|
|
24
|
+
var _ConversationBar = _interopRequireDefault(require("../Conversations/ConversationBar"));
|
|
25
|
+
|
|
26
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
27
|
+
|
|
28
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
29
|
+
|
|
30
|
+
var AssistantDialog = function AssistantDialog() {
|
|
31
|
+
var _useAssistant = (0, _AssistantProvider.useAssistant)(),
|
|
32
|
+
assistantState = _useAssistant.assistantState;
|
|
33
|
+
|
|
34
|
+
var _useBreakpoints = (0, _Breakpoints.useBreakpoints)(),
|
|
35
|
+
isMobile = _useBreakpoints.isMobile;
|
|
36
|
+
|
|
37
|
+
var navigate = (0, _reactRouterDom.useNavigate)();
|
|
38
|
+
|
|
39
|
+
var _useParams = (0, _reactRouterDom.useParams)(),
|
|
40
|
+
conversationId = _useParams.conversationId;
|
|
41
|
+
|
|
42
|
+
var onClose = function onClose() {
|
|
43
|
+
navigate('..');
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
return /*#__PURE__*/_react.default.createElement(_CozyDialogs.FixedDialog, {
|
|
47
|
+
open: true,
|
|
48
|
+
fullScreen: true,
|
|
49
|
+
size: "full",
|
|
50
|
+
componentsProps: {
|
|
51
|
+
dialogTitle: {
|
|
52
|
+
className: isMobile ? 'u-ph-0' : ''
|
|
53
|
+
},
|
|
54
|
+
dialogActions: {
|
|
55
|
+
className: isMobile ? 'u-mh-half' : 'u-mb-2'
|
|
56
|
+
},
|
|
57
|
+
divider: {
|
|
58
|
+
className: 'u-dn'
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
title: isMobile ? ' ' : ' ',
|
|
62
|
+
content: /*#__PURE__*/_react.default.createElement(_Conversation.default, {
|
|
63
|
+
id: conversationId
|
|
64
|
+
}),
|
|
65
|
+
actions: /*#__PURE__*/_react.default.createElement(_ConversationBar.default, {
|
|
66
|
+
assistantStatus: assistantState.status
|
|
67
|
+
}),
|
|
68
|
+
onClose: onClose
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
var AssistantDialogWithProviders = function AssistantDialogWithProviders() {
|
|
73
|
+
return /*#__PURE__*/_react.default.createElement(_CozyTheme.default, {
|
|
74
|
+
variant: "normal"
|
|
75
|
+
}, /*#__PURE__*/_react.default.createElement(_AssistantProvider.default, null, /*#__PURE__*/_react.default.createElement(AssistantDialog, null)));
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
var _default = AssistantDialogWithProviders;
|
|
79
|
+
exports.default = _default;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _reactRouterDom = require("react-router-dom");
|
|
13
|
+
|
|
14
|
+
var _CozyDialogs = require("cozy-ui/transpiled/react/CozyDialogs");
|
|
15
|
+
|
|
16
|
+
var _CozyTheme = _interopRequireDefault(require("cozy-ui/transpiled/react/providers/CozyTheme"));
|
|
17
|
+
|
|
18
|
+
var _useExtendI18n = _interopRequireDefault(require("cozy-ui/transpiled/react/providers/I18n/useExtendI18n"));
|
|
19
|
+
|
|
20
|
+
var _locales = require("../../locales");
|
|
21
|
+
|
|
22
|
+
var _AssistantProvider = _interopRequireWildcard(require("../AssistantProvider"));
|
|
23
|
+
|
|
24
|
+
var _ResultMenuContent = _interopRequireDefault(require("../ResultMenu/ResultMenuContent"));
|
|
25
|
+
|
|
26
|
+
var _SearchBar = _interopRequireDefault(require("../Search/SearchBar"));
|
|
27
|
+
|
|
28
|
+
var _SearchProvider = _interopRequireWildcard(require("../Search/SearchProvider"));
|
|
29
|
+
|
|
30
|
+
var _SearchSubmitFab = _interopRequireDefault(require("../Search/SearchSubmitFab"));
|
|
31
|
+
|
|
32
|
+
var _helpers = require("../helpers");
|
|
33
|
+
|
|
34
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
35
|
+
|
|
36
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
37
|
+
|
|
38
|
+
var SearchDialog = function SearchDialog() {
|
|
39
|
+
(0, _useExtendI18n.default)(_locales.locales);
|
|
40
|
+
|
|
41
|
+
var _useAssistant = (0, _AssistantProvider.useAssistant)(),
|
|
42
|
+
onAssistantExecute = _useAssistant.onAssistantExecute;
|
|
43
|
+
|
|
44
|
+
var navigate = (0, _reactRouterDom.useNavigate)();
|
|
45
|
+
|
|
46
|
+
var _useSearch = (0, _SearchProvider.useSearch)(),
|
|
47
|
+
searchValue = _useSearch.searchValue;
|
|
48
|
+
|
|
49
|
+
var handleClick = function handleClick() {
|
|
50
|
+
var conversationId = (0, _helpers.makeConversationId)();
|
|
51
|
+
onAssistantExecute({
|
|
52
|
+
value: searchValue,
|
|
53
|
+
conversationId: conversationId
|
|
54
|
+
});
|
|
55
|
+
navigate("../assistant/".concat(conversationId), {
|
|
56
|
+
replace: true
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
var handleClose = function handleClose() {
|
|
61
|
+
navigate('..');
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
return /*#__PURE__*/_react.default.createElement(_CozyDialogs.FixedDialog, {
|
|
65
|
+
open: true,
|
|
66
|
+
fullScreen: true,
|
|
67
|
+
size: "full",
|
|
68
|
+
disableGutters: true,
|
|
69
|
+
componentsProps: {
|
|
70
|
+
// don't touch padding-top in dialogTitle, there is a flagship override. Play with margin instead.
|
|
71
|
+
dialogTitle: {
|
|
72
|
+
className: 'u-ph-half u-pb-0 u-mt-2-half u-ov-visible'
|
|
73
|
+
},
|
|
74
|
+
divider: {
|
|
75
|
+
className: 'u-dn'
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
title: /*#__PURE__*/_react.default.createElement(_SearchBar.default, null),
|
|
79
|
+
content: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, searchValue && /*#__PURE__*/_react.default.createElement(_ResultMenuContent.default, {
|
|
80
|
+
onClick: handleClick
|
|
81
|
+
}), (0, _helpers.isAssistantEnabled)() && /*#__PURE__*/_react.default.createElement(_SearchSubmitFab.default, {
|
|
82
|
+
searchValue: searchValue,
|
|
83
|
+
onClick: handleClick
|
|
84
|
+
})),
|
|
85
|
+
onClose: handleClose
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
var SearchDialogWithProviders = function SearchDialogWithProviders() {
|
|
90
|
+
return /*#__PURE__*/_react.default.createElement(_CozyTheme.default, {
|
|
91
|
+
variant: "normal"
|
|
92
|
+
}, /*#__PURE__*/_react.default.createElement(_AssistantProvider.default, null, /*#__PURE__*/_react.default.createElement(_SearchProvider.default, null, /*#__PURE__*/_react.default.createElement(SearchDialog, null))));
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
var _default = SearchDialogWithProviders;
|
|
96
|
+
exports.default = _default;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export function getInstantMessage(assistantState: any): string;
|
|
2
|
+
export function makeConversationId(): string;
|
|
3
|
+
export function pushMessagesIdInState(id: any, res: any, setState: any): void;
|
|
4
|
+
export function isMessageForThisConversation(res: any, messagesId: any): any;
|
|
5
|
+
export function isAssistantEnabled(): any;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.pushMessagesIdInState = exports.makeConversationId = exports.isMessageForThisConversation = exports.isAssistantEnabled = exports.getInstantMessage = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _cozyFlags = _interopRequireDefault(require("cozy-flags"));
|
|
13
|
+
|
|
14
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
15
|
+
|
|
16
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
17
|
+
|
|
18
|
+
var getInstantMessage = function getInstantMessage(assistantState) {
|
|
19
|
+
return Object.keys(assistantState.message).sort(function (a, b) {
|
|
20
|
+
return a - b;
|
|
21
|
+
}).map(function (key) {
|
|
22
|
+
return assistantState.message[key];
|
|
23
|
+
}).join('');
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
exports.getInstantMessage = getInstantMessage;
|
|
27
|
+
|
|
28
|
+
var makeConversationId = function makeConversationId() {
|
|
29
|
+
return "".concat(Date.now(), "-").concat(Math.floor(Math.random() * 90000) + 10000);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
exports.makeConversationId = makeConversationId;
|
|
33
|
+
|
|
34
|
+
var pushMessagesIdInState = function pushMessagesIdInState(id, res, setState) {
|
|
35
|
+
if (id !== res._id) return;
|
|
36
|
+
var messagesId = res.messages.map(function (message) {
|
|
37
|
+
return message.id;
|
|
38
|
+
});
|
|
39
|
+
setState(function (v) {
|
|
40
|
+
return _objectSpread(_objectSpread({}, v), {}, {
|
|
41
|
+
messagesId: messagesId
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
exports.pushMessagesIdInState = pushMessagesIdInState;
|
|
47
|
+
|
|
48
|
+
var isMessageForThisConversation = function isMessageForThisConversation(res, messagesId) {
|
|
49
|
+
return messagesId.includes(res._id);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
exports.isMessageForThisConversation = isMessageForThisConversation;
|
|
53
|
+
|
|
54
|
+
var isAssistantEnabled = function isAssistantEnabled() {
|
|
55
|
+
return (0, _cozyFlags.default)('cozy.assistant.enabled');
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
exports.isAssistantEnabled = isAssistantEnabled;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const CHAT_CONVERSATIONS_DOCTYPE: "io.cozy.ai.chat.conversations";
|
|
2
|
+
export const CHAT_EVENTS_DOCTYPE: "io.cozy.ai.chat.events";
|
|
3
|
+
export const FILES_DOCTYPE: "io.cozy.files";
|
|
4
|
+
export function buildFilesByIds(ids: any): {
|
|
5
|
+
definition: import("cozy-client").QueryDefinition;
|
|
6
|
+
options: {
|
|
7
|
+
as: string;
|
|
8
|
+
fetchPolicy: Function;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export function buildChatConversationQueryById(id: any): {
|
|
12
|
+
definition: import("cozy-client").QueryDefinition;
|
|
13
|
+
options: {
|
|
14
|
+
as: string;
|
|
15
|
+
fetchPolicy: Function;
|
|
16
|
+
singleDocData: boolean;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export function buildMyselfQuery(): {
|
|
20
|
+
definition: import("cozy-client").QueryDefinition;
|
|
21
|
+
options: {
|
|
22
|
+
as: string;
|
|
23
|
+
fetchPolicy: Function;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.buildMyselfQuery = exports.buildFilesByIds = exports.buildChatConversationQueryById = exports.FILES_DOCTYPE = exports.CHAT_EVENTS_DOCTYPE = exports.CHAT_CONVERSATIONS_DOCTYPE = void 0;
|
|
7
|
+
|
|
8
|
+
var _cozyClient = require("cozy-client");
|
|
9
|
+
|
|
10
|
+
var CONTACTS_DOCTYPE = 'io.cozy.contacts';
|
|
11
|
+
var CHAT_CONVERSATIONS_DOCTYPE = 'io.cozy.ai.chat.conversations';
|
|
12
|
+
exports.CHAT_CONVERSATIONS_DOCTYPE = CHAT_CONVERSATIONS_DOCTYPE;
|
|
13
|
+
var CHAT_EVENTS_DOCTYPE = 'io.cozy.ai.chat.events';
|
|
14
|
+
exports.CHAT_EVENTS_DOCTYPE = CHAT_EVENTS_DOCTYPE;
|
|
15
|
+
var FILES_DOCTYPE = 'io.cozy.files';
|
|
16
|
+
exports.FILES_DOCTYPE = FILES_DOCTYPE;
|
|
17
|
+
|
|
18
|
+
var defaultFetchPolicy = _cozyClient.fetchPolicies.olderThan(86400); // 24 hours
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
var buildFilesByIds = function buildFilesByIds(ids) {
|
|
22
|
+
return {
|
|
23
|
+
definition: (0, _cozyClient.Q)(FILES_DOCTYPE).getByIds(ids),
|
|
24
|
+
options: {
|
|
25
|
+
as: "".concat(FILES_DOCTYPE, "/").concat(ids.join('')),
|
|
26
|
+
fetchPolicy: defaultFetchPolicy
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
exports.buildFilesByIds = buildFilesByIds;
|
|
32
|
+
|
|
33
|
+
var buildChatConversationQueryById = function buildChatConversationQueryById(id) {
|
|
34
|
+
return {
|
|
35
|
+
definition: (0, _cozyClient.Q)(CHAT_CONVERSATIONS_DOCTYPE).getById(id),
|
|
36
|
+
options: {
|
|
37
|
+
as: "".concat(CHAT_CONVERSATIONS_DOCTYPE, "/").concat(id),
|
|
38
|
+
fetchPolicy: defaultFetchPolicy,
|
|
39
|
+
singleDocData: true
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
exports.buildChatConversationQueryById = buildChatConversationQueryById;
|
|
45
|
+
|
|
46
|
+
var buildMyselfQuery = function buildMyselfQuery() {
|
|
47
|
+
return {
|
|
48
|
+
definition: (0, _cozyClient.Q)(CONTACTS_DOCTYPE).where({
|
|
49
|
+
me: true
|
|
50
|
+
}),
|
|
51
|
+
options: {
|
|
52
|
+
as: "".concat(CONTACTS_DOCTYPE, "/myself"),
|
|
53
|
+
fetchPolicy: defaultFetchPolicy
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
exports.buildMyselfQuery = buildMyselfQuery;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
.assistantWrapper-mobile
|
|
2
|
+
position fixed
|
|
3
|
+
bottom 0
|
|
4
|
+
right 0
|
|
5
|
+
left 0
|
|
6
|
+
padding 1rem
|
|
7
|
+
|
|
8
|
+
&--light
|
|
9
|
+
background-color #E9F4FF
|
|
10
|
+
|
|
11
|
+
&--dark
|
|
12
|
+
background-color #142536
|
|
13
|
+
|
|
14
|
+
&--offset
|
|
15
|
+
padding-right 4.5rem
|
|
16
|
+
|
|
17
|
+
&--immersive
|
|
18
|
+
padding-bottom calc(1rem + var(--flagship-bottom-height))
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as AssistantDesktop } from './components/AssistantDesktop';
|
|
2
|
+
export { default as AssistantMobile } from './components/AssistantMobile';
|
|
3
|
+
export { default as AssistantDialog } from './components/Views/AssistantDialog';
|
|
4
|
+
export { default as SearchDialog } from './components/Views/SearchDialog';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports, "AssistantDesktop", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _AssistantDesktop.default;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
Object.defineProperty(exports, "AssistantDialog", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function get() {
|
|
17
|
+
return _AssistantDialog.default;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
Object.defineProperty(exports, "AssistantMobile", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: function get() {
|
|
23
|
+
return _AssistantMobile.default;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
Object.defineProperty(exports, "SearchDialog", {
|
|
27
|
+
enumerable: true,
|
|
28
|
+
get: function get() {
|
|
29
|
+
return _SearchDialog.default;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
var _AssistantDesktop = _interopRequireDefault(require("./components/AssistantDesktop"));
|
|
34
|
+
|
|
35
|
+
var _AssistantMobile = _interopRequireDefault(require("./components/AssistantMobile"));
|
|
36
|
+
|
|
37
|
+
var _AssistantDialog = _interopRequireDefault(require("./components/Views/AssistantDialog"));
|
|
38
|
+
|
|
39
|
+
var _SearchDialog = _interopRequireDefault(require("./components/Views/SearchDialog"));
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"assistant": {
|
|
3
|
+
"search": {
|
|
4
|
+
"placeholder": "Any question?",
|
|
5
|
+
"send": "Send",
|
|
6
|
+
"result": "Ask the assistant",
|
|
7
|
+
"noItem": "No results",
|
|
8
|
+
"notEnough": "Your query must contain at least 3 characters"
|
|
9
|
+
},
|
|
10
|
+
"dialog": {
|
|
11
|
+
"close": "Close"
|
|
12
|
+
},
|
|
13
|
+
"name": "Cozy Assistant",
|
|
14
|
+
"sources": "%{smart_count} source |||| %{smart_count} sources",
|
|
15
|
+
"suggestions": {
|
|
16
|
+
"find_file": "Search a file",
|
|
17
|
+
"reimbursements": "Check my repayments",
|
|
18
|
+
"reorganise_files": "Reorganise my files"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"assistant": {
|
|
3
|
+
"search": {
|
|
4
|
+
"placeholder": "Une question ?",
|
|
5
|
+
"send": "Envoyer",
|
|
6
|
+
"result": "Demander à l'assistant",
|
|
7
|
+
"noItem": "Aucun résultat",
|
|
8
|
+
"notEnough": "Votre recherche doit contenir au moins 3 caractères"
|
|
9
|
+
},
|
|
10
|
+
"dialog": {
|
|
11
|
+
"close": "Fermer"
|
|
12
|
+
},
|
|
13
|
+
"name": "Assistant Cozy",
|
|
14
|
+
"sources": "%{smart_count} source |||| %{smart_count} sources",
|
|
15
|
+
"suggestions": {
|
|
16
|
+
"find_file": "Rechercher un fichier",
|
|
17
|
+
"reimbursements": "Vérifier mes remboursements",
|
|
18
|
+
"reorganise_files": "Réorganiser mes fichiers"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|