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.
Files changed (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +89 -0
  3. package/dist/components/AssistantDesktop.d.ts +16 -0
  4. package/dist/components/AssistantDesktop.js +44 -0
  5. package/dist/components/AssistantIcon/AssistantIcon.d.ts +6 -0
  6. package/dist/components/AssistantIcon/AssistantIcon.js +43 -0
  7. package/dist/components/AssistantMobile.d.ts +2 -0
  8. package/dist/components/AssistantMobile.js +50 -0
  9. package/dist/components/AssistantProvider.d.ts +7 -0
  10. package/dist/components/AssistantProvider.js +174 -0
  11. package/dist/components/Conversations/ChatAssistantItem.d.ts +8 -0
  12. package/dist/components/Conversations/ChatAssistantItem.js +53 -0
  13. package/dist/components/Conversations/ChatConversation.d.ts +5 -0
  14. package/dist/components/Conversations/ChatConversation.js +110 -0
  15. package/dist/components/Conversations/ChatItem.d.ts +7 -0
  16. package/dist/components/Conversations/ChatItem.js +39 -0
  17. package/dist/components/Conversations/ChatItemLabel.d.ts +5 -0
  18. package/dist/components/Conversations/ChatItemLabel.js +29 -0
  19. package/dist/components/Conversations/ChatRealtimeAnswer.d.ts +5 -0
  20. package/dist/components/Conversations/ChatRealtimeAnswer.js +30 -0
  21. package/dist/components/Conversations/ChatUserItem.d.ts +7 -0
  22. package/dist/components/Conversations/ChatUserItem.js +41 -0
  23. package/dist/components/Conversations/Conversation.d.ts +4 -0
  24. package/dist/components/Conversations/Conversation.js +41 -0
  25. package/dist/components/Conversations/ConversationBar.d.ts +4 -0
  26. package/dist/components/Conversations/ConversationBar.js +164 -0
  27. package/dist/components/Conversations/Sources/Sources.d.ts +5 -0
  28. package/dist/components/Conversations/Sources/Sources.js +134 -0
  29. package/dist/components/Conversations/Sources/SourcesItem.d.ts +4 -0
  30. package/dist/components/Conversations/Sources/SourcesItem.js +55 -0
  31. package/dist/components/Conversations/Sources/styles.styl +5 -0
  32. package/dist/components/Conversations/styles.styl +15 -0
  33. package/dist/components/ResultMenu/NoResultItem.d.ts +2 -0
  34. package/dist/components/ResultMenu/NoResultItem.js +30 -0
  35. package/dist/components/ResultMenu/NotEnoughItem.d.ts +2 -0
  36. package/dist/components/ResultMenu/NotEnoughItem.js +30 -0
  37. package/dist/components/ResultMenu/ResultMenu.d.ts +6 -0
  38. package/dist/components/ResultMenu/ResultMenu.js +47 -0
  39. package/dist/components/ResultMenu/ResultMenuContent.d.ts +3 -0
  40. package/dist/components/ResultMenu/ResultMenuContent.js +117 -0
  41. package/dist/components/ResultMenu/ResultMenuItem.d.ts +12 -0
  42. package/dist/components/ResultMenu/ResultMenuItem.js +65 -0
  43. package/dist/components/ResultMenu/SuggestionItemTextHighlighted.d.ts +5 -0
  44. package/dist/components/ResultMenu/SuggestionItemTextHighlighted.js +100 -0
  45. package/dist/components/ResultMenu/SuggestionItemTextSecondary.d.ts +7 -0
  46. package/dist/components/ResultMenu/SuggestionItemTextSecondary.js +70 -0
  47. package/dist/components/ResultMenu/styles.styl +8 -0
  48. package/dist/components/Search/EncryptedFolderIcon.d.ts +2 -0
  49. package/dist/components/Search/EncryptedFolderIcon.js +34 -0
  50. package/dist/components/Search/SearchBar.d.ts +4 -0
  51. package/dist/components/Search/SearchBar.js +71 -0
  52. package/dist/components/Search/SearchBarDesktop.d.ts +15 -0
  53. package/dist/components/Search/SearchBarDesktop.js +167 -0
  54. package/dist/components/Search/SearchBarMobile.d.ts +6 -0
  55. package/dist/components/Search/SearchBarMobile.js +71 -0
  56. package/dist/components/Search/SearchProvider.d.ts +7 -0
  57. package/dist/components/Search/SearchProvider.js +81 -0
  58. package/dist/components/Search/SearchSubmitFab.d.ts +5 -0
  59. package/dist/components/Search/SearchSubmitFab.js +59 -0
  60. package/dist/components/Search/SuggestionsPlaceholder.d.ts +2 -0
  61. package/dist/components/Search/SuggestionsPlaceholder.js +55 -0
  62. package/dist/components/Search/getFileMimetype.d.ts +1 -0
  63. package/dist/components/Search/getFileMimetype.js +54 -0
  64. package/dist/components/Search/getIconForSearchResult.d.ts +12 -0
  65. package/dist/components/Search/getIconForSearchResult.js +127 -0
  66. package/dist/components/Search/styles.styl +7 -0
  67. package/dist/components/Search/useFetchResult.d.ts +4 -0
  68. package/dist/components/Search/useFetchResult.js +191 -0
  69. package/dist/components/Views/AssistantDialog.d.ts +2 -0
  70. package/dist/components/Views/AssistantDialog.js +79 -0
  71. package/dist/components/Views/SearchDialog.d.ts +2 -0
  72. package/dist/components/Views/SearchDialog.js +96 -0
  73. package/dist/components/helpers.d.ts +5 -0
  74. package/dist/components/helpers.js +58 -0
  75. package/dist/components/queries.d.ts +25 -0
  76. package/dist/components/queries.js +58 -0
  77. package/dist/components/styles.styl +18 -0
  78. package/dist/index.d.ts +4 -0
  79. package/dist/index.js +39 -0
  80. package/dist/locales/en.json +21 -0
  81. package/dist/locales/fr.json +21 -0
  82. package/dist/locales/index.d.ts +6 -0
  83. package/dist/locales/index.js +53 -0
  84. package/dist/stylesheet.css +48 -0
  85. 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,2 @@
1
+ export default AssistantDialogWithProviders;
2
+ declare function AssistantDialogWithProviders(): JSX.Element;
@@ -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,2 @@
1
+ export default SearchDialogWithProviders;
2
+ declare function SearchDialogWithProviders(): JSX.Element;
@@ -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))
@@ -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
+ }
@@ -0,0 +1,6 @@
1
+ export namespace locales {
2
+ export { en };
3
+ export { fr };
4
+ }
5
+ import en from './en.json';
6
+ import fr from './fr.json';