@weavix/tracker-components 0.1.5 → 0.1.7
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/README.md +4 -0
- package/build/cjs/components/MetaEntitiesSelect/MetaEntitiesSelect.d.ts +6 -2
- package/build/cjs/components/MetaEntitiesSelect/MetaEntitiesSelect.js +5 -0
- package/build/cjs/components/MetaEntitiesSelect/MetaEntitiesSelect.js.map +1 -1
- package/build/cjs/components/MetaEntitiesSelect/README.md +5 -0
- package/build/cjs/components/MetaEntitiesSelect/utils/getMetaEntityDisplay.js +8 -2
- package/build/cjs/components/MetaEntitiesSelect/utils/getMetaEntityDisplay.js.map +1 -1
- package/build/cjs/components/QueueSelect/QueueSelect.d.ts +1 -1
- package/build/cjs/components/QueueSelect/QueueSelect.js +5 -5
- package/build/cjs/components/QueueSelect/QueueSelect.js.map +1 -1
- package/build/cjs/components/QueueSelect/README.md +4 -6
- package/build/cjs/components/Select/MultiSelect.js.map +1 -1
- package/build/cjs/components/Select/hooks/useAutocomplete.d.ts +1 -1
- package/build/cjs/components/Select/hooks/useAutocomplete.js +23 -22
- package/build/cjs/components/Select/hooks/useAutocomplete.js.map +1 -1
- package/build/cjs/components/UserAvatar/README.md +28 -0
- package/build/cjs/components/UserAvatar/UserAvatar.d.ts +8 -0
- package/build/cjs/components/UserAvatar/UserAvatar.js +82 -0
- package/build/cjs/components/UserAvatar/UserAvatar.js.map +1 -0
- package/build/cjs/components/UserAvatar/UserAvatarProvider.d.ts +9 -0
- package/build/cjs/components/UserAvatar/UserAvatarProvider.js +111 -0
- package/build/cjs/components/UserAvatar/UserAvatarProvider.js.map +1 -0
- package/build/cjs/components/UserAvatar/index.d.ts +5 -0
- package/build/cjs/components/UserAvatar/index.js +20 -0
- package/build/cjs/components/UserAvatar/index.js.map +1 -0
- package/build/cjs/components/UserAvatar/types.d.ts +5 -0
- package/build/cjs/components/UserAvatar/types.js +6 -0
- package/build/cjs/components/UserAvatar/types.js.map +1 -0
- package/build/cjs/hooks/useUpdateEffect.d.ts +2 -0
- package/build/cjs/hooks/useUpdateEffect.js +26 -0
- package/build/cjs/hooks/useUpdateEffect.js.map +1 -0
- package/build/cjs/index.d.ts +1 -0
- package/build/cjs/index.js +12 -0
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/utils/cancellablePromise.d.ts +7 -0
- package/build/cjs/utils/cancellablePromise.js +27 -0
- package/build/cjs/utils/cancellablePromise.js.map +1 -0
- package/build/esm/components/MetaEntitiesSelect/MetaEntitiesSelect.d.ts +6 -2
- package/build/esm/components/MetaEntitiesSelect/MetaEntitiesSelect.js +4 -0
- package/build/esm/components/MetaEntitiesSelect/MetaEntitiesSelect.js.map +1 -1
- package/build/esm/components/MetaEntitiesSelect/README.md +5 -0
- package/build/esm/components/MetaEntitiesSelect/utils/getMetaEntityDisplay.js +7 -2
- package/build/esm/components/MetaEntitiesSelect/utils/getMetaEntityDisplay.js.map +1 -1
- package/build/esm/components/QueueSelect/QueueSelect.d.ts +1 -1
- package/build/esm/components/QueueSelect/QueueSelect.js +4 -4
- package/build/esm/components/QueueSelect/QueueSelect.js.map +1 -1
- package/build/esm/components/QueueSelect/README.md +4 -6
- package/build/esm/components/Select/MultiSelect.js.map +1 -1
- package/build/esm/components/Select/hooks/useAutocomplete.d.ts +1 -1
- package/build/esm/components/Select/hooks/useAutocomplete.js +23 -22
- package/build/esm/components/Select/hooks/useAutocomplete.js.map +1 -1
- package/build/esm/components/UserAvatar/README.md +28 -0
- package/build/esm/components/UserAvatar/UserAvatar.d.ts +8 -0
- package/build/esm/components/UserAvatar/UserAvatar.js +74 -0
- package/build/esm/components/UserAvatar/UserAvatar.js.map +1 -0
- package/build/esm/components/UserAvatar/UserAvatarProvider.d.ts +9 -0
- package/build/esm/components/UserAvatar/UserAvatarProvider.js +103 -0
- package/build/esm/components/UserAvatar/UserAvatarProvider.js.map +1 -0
- package/build/esm/components/UserAvatar/index.d.ts +5 -0
- package/build/esm/components/UserAvatar/index.js +3 -0
- package/build/esm/components/UserAvatar/index.js.map +1 -0
- package/build/esm/components/UserAvatar/types.d.ts +5 -0
- package/build/esm/components/UserAvatar/types.js +2 -0
- package/build/esm/components/UserAvatar/types.js.map +1 -0
- package/build/esm/hooks/useUpdateEffect.d.ts +2 -0
- package/build/esm/hooks/useUpdateEffect.js +20 -0
- package/build/esm/hooks/useUpdateEffect.js.map +1 -0
- package/build/esm/index.d.ts +1 -0
- package/build/esm/index.js +1 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/utils/cancellablePromise.d.ts +7 -0
- package/build/esm/utils/cancellablePromise.js +20 -0
- package/build/esm/utils/cancellablePromise.js.map +1 -0
- package/package.json +3 -6
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# UserAvatar
|
|
2
|
+
|
|
3
|
+
Аватарка пользователя с инициалами при отсутствии URL, ошибке бриджа или загрузки картинки.
|
|
4
|
+
URL определяет сервис, в котором открыт плагин.
|
|
5
|
+
|
|
6
|
+
```tsx
|
|
7
|
+
import {hostApi} from '@weavix/tracker-plugin-sdk';
|
|
8
|
+
import {UserAvatar, UserAvatarProvider} from '@weavix/tracker-components';
|
|
9
|
+
|
|
10
|
+
<UserAvatarProvider getUserAvatars={hostApi.getUserAvatars}>
|
|
11
|
+
<UserAvatar user={{uid: '123', login: 'alice'}} name="Alice Smith" size="m" />
|
|
12
|
+
<UserAvatar user={{login: 'bob'}} name="Bob Jones" />
|
|
13
|
+
</UserAvatarProvider>;
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Используйте один провайдер для списка: запросы одного такта объединяются в пакеты до 100
|
|
17
|
+
уникальных пользователей; повторы одной пары `uid`/`login` в пакете используют общий ответ. `getUserAvatars` должен возвращать массив абсолютных HTTP(S) URL или `null`
|
|
18
|
+
той же длины и в том же порядке. Передавайте стабильную функцию; для другого сервиса можно
|
|
19
|
+
подключить совместимый метод его SDK. Компоненты не зависят от конкретного пакета SDK.
|
|
20
|
+
|
|
21
|
+
`user` содержит `uid`, `login` или оба поля (непустые строки до 1024 символов).
|
|
22
|
+
Некорректные идентификаторы дают инициалы и не попадают в запрос соседних аватарок. `name` задаёт инициалы и доступное имя.
|
|
23
|
+
Поддерживаются `size`, `className`, `title`, `qa` из Gravity UI Avatar.
|
|
24
|
+
Без провайдера или идентификаторов отображаются инициалы без запроса. Результаты не кешируются;
|
|
25
|
+
поздние ответы для предыдущего пользователя игнорируются.
|
|
26
|
+
|
|
27
|
+
Хост должен поддерживать `userAvatars.get` и разрешать домены картинок в CSP `img-src`.
|
|
28
|
+
Для старого хоста ошибка метода приводит к инициалам.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type AvatarProps } from '@gravity-ui/uikit';
|
|
3
|
+
import type { UserAvatarUser } from './types';
|
|
4
|
+
export type UserAvatarProps = Pick<AvatarProps, 'size' | 'className' | 'title' | 'qa'> & {
|
|
5
|
+
user: UserAvatarUser;
|
|
6
|
+
name: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function UserAvatar({ user: { uid, login }, name, ...props }: UserAvatarProps): React.JSX.Element;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.UserAvatar = UserAvatar;
|
|
7
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
|
+
require("core-js/modules/es.function.name.js");
|
|
11
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _uikit = require("@gravity-ui/uikit");
|
|
13
|
+
var _UserAvatarProvider = require("./UserAvatarProvider");
|
|
14
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
16
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
|
+
var _excluded = ["url", "name"],
|
|
18
|
+
_excluded2 = ["user", "name"];
|
|
19
|
+
function AvatarImage(_ref) {
|
|
20
|
+
var url = _ref.url,
|
|
21
|
+
name = _ref.name,
|
|
22
|
+
props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
23
|
+
var _useState = (0, _react.useState)(false),
|
|
24
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
25
|
+
failed = _useState2[0],
|
|
26
|
+
setFailed = _useState2[1];
|
|
27
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
28
|
+
style: {
|
|
29
|
+
display: 'contents'
|
|
30
|
+
},
|
|
31
|
+
onErrorCapture: function onErrorCapture() {
|
|
32
|
+
return setFailed(true);
|
|
33
|
+
},
|
|
34
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_uikit.Avatar, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
35
|
+
"aria-label": name
|
|
36
|
+
}, url && !failed ? {
|
|
37
|
+
imgUrl: url,
|
|
38
|
+
alt: name
|
|
39
|
+
} : {
|
|
40
|
+
text: name || '?'
|
|
41
|
+
}))
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function UserAvatar(_ref2) {
|
|
45
|
+
var _result$url;
|
|
46
|
+
var _ref2$user = _ref2.user,
|
|
47
|
+
uid = _ref2$user.uid,
|
|
48
|
+
login = _ref2$user.login,
|
|
49
|
+
name = _ref2.name,
|
|
50
|
+
props = (0, _objectWithoutProperties2.default)(_ref2, _excluded2);
|
|
51
|
+
var load = (0, _react.useContext)(_UserAvatarProvider.UserAvatarContext);
|
|
52
|
+
var _useState3 = (0, _react.useState)(),
|
|
53
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
54
|
+
result = _useState4[0],
|
|
55
|
+
setResult = _useState4[1];
|
|
56
|
+
(0, _react.useEffect)(function () {
|
|
57
|
+
var cancelled = false;
|
|
58
|
+
if (load && (uid || login)) {
|
|
59
|
+
load((0, _objectSpread2.default)((0, _objectSpread2.default)({}, uid === undefined ? {} : {
|
|
60
|
+
uid: uid
|
|
61
|
+
}), login === undefined ? {} : {
|
|
62
|
+
login: login
|
|
63
|
+
})).then(function (url) {
|
|
64
|
+
if (!cancelled) setResult({
|
|
65
|
+
uid: uid,
|
|
66
|
+
login: login,
|
|
67
|
+
load: load,
|
|
68
|
+
url: url
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return function () {
|
|
73
|
+
cancelled = true;
|
|
74
|
+
};
|
|
75
|
+
}, [uid, login, load]);
|
|
76
|
+
var url = (result === null || result === void 0 ? void 0 : result.uid) === uid && (result === null || result === void 0 ? void 0 : result.login) === login && (result === null || result === void 0 ? void 0 : result.load) === load ? (_result$url = result === null || result === void 0 ? void 0 : result.url) !== null && _result$url !== void 0 ? _result$url : null : null;
|
|
77
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(AvatarImage, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
78
|
+
name: name,
|
|
79
|
+
url: url
|
|
80
|
+
}), url);
|
|
81
|
+
}
|
|
82
|
+
// #sourceMappingURL=UserAvatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_uikit","_UserAvatarProvider","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_interopRequireDefault","AvatarImage","_ref","url","name","props","_objectWithoutProperties","_excluded","_useState","useState","_useState2","_slicedToArray","failed","setFailed","_jsx","style","display","onErrorCapture","children","Avatar","_objectSpread","imgUrl","alt","text","UserAvatar","_ref2","_result$url","_ref2$user","user","uid","login","_excluded2","load","useContext","UserAvatarContext","_useState3","_useState4","result","setResult","useEffect","cancelled","undefined","then"],"sources":["UserAvatar.tsx"],"sourcesContent":["import React, {useContext, useEffect, useState} from 'react';\n\nimport {Avatar, type AvatarProps} from '@gravity-ui/uikit';\n\nimport {UserAvatarContext} from './UserAvatarProvider';\nimport type {UserAvatarUser} from './types';\n\nexport type UserAvatarProps = Pick<AvatarProps, 'size' | 'className' | 'title' | 'qa'> & {\n user: UserAvatarUser;\n name: string;\n};\n\nfunction AvatarImage({url, name, ...props}: Omit<UserAvatarProps, 'user'> & {url: string | null}) {\n const [failed, setFailed] = useState(false);\n return (\n <span style={{display: 'contents'}} onErrorCapture={() => setFailed(true)}>\n <Avatar\n {...props}\n aria-label={name}\n {...(url && !failed ? {imgUrl: url, alt: name} : {text: name || '?'})}\n />\n </span>\n );\n}\n\nexport function UserAvatar({user: {uid, login}, name, ...props}: UserAvatarProps) {\n const load = useContext(UserAvatarContext);\n const [result, setResult] = useState<{\n uid?: string;\n login?: string;\n load: typeof load;\n url: string | null;\n }>();\n\n useEffect(() => {\n let cancelled = false;\n if (load && (uid || login)) {\n load({\n ...(uid === undefined ? {} : {uid}),\n ...(login === undefined ? {} : {login}),\n }).then((url) => {\n if (!cancelled) setResult({uid, login, load, url});\n });\n }\n return () => {\n cancelled = true;\n };\n }, [uid, login, load]);\n\n const url =\n result?.uid === uid && result?.login === login && result?.load === load\n ? (result?.url ?? null)\n : null;\n\n return <AvatarImage key={url} {...props} name={name} url={url} />;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { GetUserAvatars, UserAvatarUser } from './types';
|
|
3
|
+
type LoadAvatar = (user: UserAvatarUser) => Promise<string | null>;
|
|
4
|
+
export declare const UserAvatarContext: React.Context<LoadAvatar | undefined>;
|
|
5
|
+
export type UserAvatarProviderProps = React.PropsWithChildren<{
|
|
6
|
+
getUserAvatars: GetUserAvatars;
|
|
7
|
+
}>;
|
|
8
|
+
export declare function UserAvatarProvider({ getUserAvatars, children }: UserAvatarProviderProps): React.JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.UserAvatarContext = void 0;
|
|
7
|
+
exports.UserAvatarProvider = UserAvatarProvider;
|
|
8
|
+
require("core-js/modules/es.error.cause.js");
|
|
9
|
+
require("core-js/modules/es.error.to-string.js");
|
|
10
|
+
require("core-js/modules/es.array.every.js");
|
|
11
|
+
require("core-js/modules/es.array.for-each.js");
|
|
12
|
+
require("core-js/modules/es.array.from.js");
|
|
13
|
+
require("core-js/modules/es.array.is-array.js");
|
|
14
|
+
require("core-js/modules/es.array.iterator.js");
|
|
15
|
+
require("core-js/modules/es.array.map.js");
|
|
16
|
+
require("core-js/modules/es.array.push.js");
|
|
17
|
+
require("core-js/modules/es.array.slice.js");
|
|
18
|
+
require("core-js/modules/es.date.to-json.js");
|
|
19
|
+
require("core-js/modules/es.iterator.constructor.js");
|
|
20
|
+
require("core-js/modules/es.iterator.for-each.js");
|
|
21
|
+
require("core-js/modules/es.iterator.map.js");
|
|
22
|
+
require("core-js/modules/es.json.stringify.js");
|
|
23
|
+
require("core-js/modules/es.map.js");
|
|
24
|
+
require("core-js/modules/es.object.to-string.js");
|
|
25
|
+
require("core-js/modules/es.promise.js");
|
|
26
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
27
|
+
require("core-js/modules/es.regexp.test.js");
|
|
28
|
+
require("core-js/modules/es.string.iterator.js");
|
|
29
|
+
require("core-js/modules/es.string.trim.js");
|
|
30
|
+
require("core-js/modules/esnext.map.get-or-insert.js");
|
|
31
|
+
require("core-js/modules/esnext.map.get-or-insert-computed.js");
|
|
32
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
33
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
34
|
+
require("core-js/modules/web.queue-microtask.js");
|
|
35
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
36
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
37
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
38
|
+
var UserAvatarContext = exports.UserAvatarContext = /*#__PURE__*/(0, _react.createContext)(undefined);
|
|
39
|
+
function isValidUser(_ref) {
|
|
40
|
+
var uid = _ref.uid,
|
|
41
|
+
login = _ref.login;
|
|
42
|
+
return Boolean(uid || login) && [uid, login].every(function (value) {
|
|
43
|
+
return value === undefined || typeof value === 'string' && value.length <= 1024 && Boolean(value.trim());
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function createLoader(getUserAvatars) {
|
|
47
|
+
var pending = new Map();
|
|
48
|
+
var flush = function flush() {
|
|
49
|
+
var requests = Array.from(pending.values());
|
|
50
|
+
pending = new Map();
|
|
51
|
+
var _loop = function _loop() {
|
|
52
|
+
var batch = requests.slice(offset, offset + 100);
|
|
53
|
+
Promise.resolve().then(function () {
|
|
54
|
+
return getUserAvatars(batch.map(function (_ref2) {
|
|
55
|
+
var user = _ref2.user;
|
|
56
|
+
return user;
|
|
57
|
+
}));
|
|
58
|
+
}).then(function (urls) {
|
|
59
|
+
if (!Array.isArray(urls) || urls.length !== batch.length) {
|
|
60
|
+
throw new Error('Avatar result must match the requested users');
|
|
61
|
+
}
|
|
62
|
+
batch.forEach(function (_ref3, index) {
|
|
63
|
+
var resolve = _ref3.resolve;
|
|
64
|
+
var url = urls[index];
|
|
65
|
+
var avatar = typeof url === 'string' && /^https?:\/\//i.test(url) ? url : null;
|
|
66
|
+
resolve.forEach(function (callback) {
|
|
67
|
+
return callback(avatar);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
})["catch"](function () {
|
|
71
|
+
return batch.forEach(function (_ref4) {
|
|
72
|
+
var resolve = _ref4.resolve;
|
|
73
|
+
return resolve.forEach(function (callback) {
|
|
74
|
+
return callback(null);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
for (var offset = 0; offset < requests.length; offset += 100) {
|
|
80
|
+
_loop();
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
return function (user) {
|
|
84
|
+
if (!isValidUser(user)) return Promise.resolve(null);
|
|
85
|
+
return new Promise(function (resolve) {
|
|
86
|
+
var key = JSON.stringify([user.uid, user.login]);
|
|
87
|
+
var request = pending.get(key);
|
|
88
|
+
if (request) {
|
|
89
|
+
request.resolve.push(resolve);
|
|
90
|
+
} else {
|
|
91
|
+
pending.set(key, {
|
|
92
|
+
user: user,
|
|
93
|
+
resolve: [resolve]
|
|
94
|
+
});
|
|
95
|
+
if (pending.size === 1) queueMicrotask(flush);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function UserAvatarProvider(_ref5) {
|
|
101
|
+
var getUserAvatars = _ref5.getUserAvatars,
|
|
102
|
+
children = _ref5.children;
|
|
103
|
+
var load = (0, _react.useMemo)(function () {
|
|
104
|
+
return createLoader(getUserAvatars);
|
|
105
|
+
}, [getUserAvatars]);
|
|
106
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(UserAvatarContext.Provider, {
|
|
107
|
+
value: load,
|
|
108
|
+
children: children
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
// #sourceMappingURL=UserAvatarProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","UserAvatarContext","exports","createContext","undefined","isValidUser","_ref","uid","login","Boolean","every","value","length","trim","createLoader","getUserAvatars","pending","Map","flush","requests","Array","from","values","_loop","batch","slice","offset","Promise","resolve","then","map","_ref2","user","urls","isArray","Error","forEach","_ref3","index","url","avatar","test","callback","_ref4","key","JSON","stringify","request","push","size","queueMicrotask","UserAvatarProvider","_ref5","children","load","useMemo","_jsx","Provider"],"sources":["UserAvatarProvider.tsx"],"sourcesContent":["import React, {createContext, useMemo} from 'react';\n\nimport type {GetUserAvatars, UserAvatarUser} from './types';\n\ntype LoadAvatar = (user: UserAvatarUser) => Promise<string | null>;\ntype PendingAvatar = {user: UserAvatarUser; resolve: Array<(url: string | null) => void>};\n\nexport const UserAvatarContext = createContext<LoadAvatar | undefined>(undefined);\n\nfunction isValidUser({uid, login}: UserAvatarUser): boolean {\n return (\n Boolean(uid || login) &&\n [uid, login].every(\n (value) =>\n value === undefined ||\n (typeof value === 'string' && value.length <= 1024 && Boolean(value.trim())),\n )\n );\n}\n\nfunction createLoader(getUserAvatars: GetUserAvatars): LoadAvatar {\n let pending = new Map<string, PendingAvatar>();\n\n const flush = () => {\n const requests = Array.from(pending.values());\n pending = new Map();\n for (let offset = 0; offset < requests.length; offset += 100) {\n const batch = requests.slice(offset, offset + 100);\n Promise.resolve()\n .then(() => getUserAvatars(batch.map(({user}) => user)))\n .then((urls) => {\n if (!Array.isArray(urls) || urls.length !== batch.length) {\n throw new Error('Avatar result must match the requested users');\n }\n batch.forEach(({resolve}, index) => {\n const url = urls[index];\n const avatar =\n typeof url === 'string' && /^https?:\\/\\//i.test(url) ? url : null;\n resolve.forEach((callback) => callback(avatar));\n });\n })\n .catch(() =>\n batch.forEach(({resolve}) => resolve.forEach((callback) => callback(null))),\n );\n }\n };\n\n return (user) => {\n if (!isValidUser(user)) return Promise.resolve(null);\n return new Promise((resolve) => {\n const key = JSON.stringify([user.uid, user.login]);\n const request = pending.get(key);\n if (request) {\n request.resolve.push(resolve);\n } else {\n pending.set(key, {user, resolve: [resolve]});\n if (pending.size === 1) queueMicrotask(flush);\n }\n });\n };\n}\n\nexport type UserAvatarProviderProps = React.PropsWithChildren<{\n getUserAvatars: GetUserAvatars;\n}>;\n\nexport function UserAvatarProvider({getUserAvatars, children}: UserAvatarProviderProps) {\n const load = useMemo(() => createLoader(getUserAvatars), [getUserAvatars]);\n return <UserAvatarContext.Provider value={load}>{children}</UserAvatarContext.Provider>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAAoD,IAAAC,WAAA,GAAAD,OAAA;AAAA,SAAAD,wBAAAG,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAL,uBAAA,YAAAA,CAAAG,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAO7C,IAAMkB,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,gBAAG,IAAAE,oBAAa,EAAyBC,SAAS,CAAC;AAEjF,SAASC,WAAWA,CAAAC,IAAA,EAAwC;EAAA,IAAtCC,GAAG,GAAAD,IAAA,CAAHC,GAAG;IAAEC,KAAK,GAAAF,IAAA,CAALE,KAAK;EAC5B,OACIC,OAAO,CAACF,GAAG,IAAIC,KAAK,CAAC,IACrB,CAACD,GAAG,EAAEC,KAAK,CAAC,CAACE,KAAK,CACd,UAACC,KAAK;IAAA,OACFA,KAAK,KAAKP,SAAS,IAClB,OAAOO,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACC,MAAM,IAAI,IAAI,IAAIH,OAAO,CAACE,KAAK,CAACE,IAAI,CAAC,CAAC,CAAE;EAAA,CACpF,CAAC;AAET;AAEA,SAASC,YAAYA,CAACC,cAA8B,EAAc;EAC9D,IAAIC,OAAO,GAAG,IAAIC,GAAG,CAAwB,CAAC;EAE9C,IAAMC,KAAK,GAAG,SAARA,KAAKA,CAAA,EAAS;IAChB,IAAMC,QAAQ,GAAGC,KAAK,CAACC,IAAI,CAACL,OAAO,CAACM,MAAM,CAAC,CAAC,CAAC;IAC7CN,OAAO,GAAG,IAAIC,GAAG,CAAC,CAAC;IAAC,IAAAM,KAAA,YAAAA,MAAA,EAC0C;MAC1D,IAAMC,KAAK,GAAGL,QAAQ,CAACM,KAAK,CAACC,MAAM,EAAEA,MAAM,GAAG,GAAG,CAAC;MAClDC,OAAO,CAACC,OAAO,CAAC,CAAC,CACZC,IAAI,CAAC;QAAA,OAAMd,cAAc,CAACS,KAAK,CAACM,GAAG,CAAC,UAAAC,KAAA;UAAA,IAAEC,IAAI,GAAAD,KAAA,CAAJC,IAAI;UAAA,OAAMA,IAAI;QAAA,EAAC,CAAC;MAAA,EAAC,CACvDH,IAAI,CAAC,UAACI,IAAI,EAAK;QACZ,IAAI,CAACb,KAAK,CAACc,OAAO,CAACD,IAAI,CAAC,IAAIA,IAAI,CAACrB,MAAM,KAAKY,KAAK,CAACZ,MAAM,EAAE;UACtD,MAAM,IAAIuB,KAAK,CAAC,8CAA8C,CAAC;QACnE;QACAX,KAAK,CAACY,OAAO,CAAC,UAAAC,KAAA,EAAYC,KAAK,EAAK;UAAA,IAApBV,OAAO,GAAAS,KAAA,CAAPT,OAAO;UACnB,IAAMW,GAAG,GAAGN,IAAI,CAACK,KAAK,CAAC;UACvB,IAAME,MAAM,GACR,OAAOD,GAAG,KAAK,QAAQ,IAAI,eAAe,CAACE,IAAI,CAACF,GAAG,CAAC,GAAGA,GAAG,GAAG,IAAI;UACrEX,OAAO,CAACQ,OAAO,CAAC,UAACM,QAAQ;YAAA,OAAKA,QAAQ,CAACF,MAAM,CAAC;UAAA,EAAC;QACnD,CAAC,CAAC;MACN,CAAC,CAAC,SACI,CAAC;QAAA,OACHhB,KAAK,CAACY,OAAO,CAAC,UAAAO,KAAA;UAAA,IAAEf,OAAO,GAAAe,KAAA,CAAPf,OAAO;UAAA,OAAMA,OAAO,CAACQ,OAAO,CAAC,UAACM,QAAQ;YAAA,OAAKA,QAAQ,CAAC,IAAI,CAAC;UAAA,EAAC;QAAA,EAAC;MAAA,CAC/E,CAAC;IACT,CAAC;IAlBD,KAAK,IAAIhB,MAAM,GAAG,CAAC,EAAEA,MAAM,GAAGP,QAAQ,CAACP,MAAM,EAAEc,MAAM,IAAI,GAAG;MAAAH,KAAA;IAAA;EAmBhE,CAAC;EAED,OAAO,UAACS,IAAI,EAAK;IACb,IAAI,CAAC3B,WAAW,CAAC2B,IAAI,CAAC,EAAE,OAAOL,OAAO,CAACC,OAAO,CAAC,IAAI,CAAC;IACpD,OAAO,IAAID,OAAO,CAAC,UAACC,OAAO,EAAK;MAC5B,IAAMgB,GAAG,GAAGC,IAAI,CAACC,SAAS,CAAC,CAACd,IAAI,CAACzB,GAAG,EAAEyB,IAAI,CAACxB,KAAK,CAAC,CAAC;MAClD,IAAMuC,OAAO,GAAG/B,OAAO,CAACtB,GAAG,CAACkD,GAAG,CAAC;MAChC,IAAIG,OAAO,EAAE;QACTA,OAAO,CAACnB,OAAO,CAACoB,IAAI,CAACpB,OAAO,CAAC;MACjC,CAAC,MAAM;QACHZ,OAAO,CAACrB,GAAG,CAACiD,GAAG,EAAE;UAACZ,IAAI,EAAJA,IAAI;UAAEJ,OAAO,EAAE,CAACA,OAAO;QAAC,CAAC,CAAC;QAC5C,IAAIZ,OAAO,CAACiC,IAAI,KAAK,CAAC,EAAEC,cAAc,CAAChC,KAAK,CAAC;MACjD;IACJ,CAAC,CAAC;EACN,CAAC;AACL;AAMO,SAASiC,kBAAkBA,CAAAC,KAAA,EAAsD;EAAA,IAApDrC,cAAc,GAAAqC,KAAA,CAAdrC,cAAc;IAAEsC,QAAQ,GAAAD,KAAA,CAARC,QAAQ;EACxD,IAAMC,IAAI,GAAG,IAAAC,cAAO,EAAC;IAAA,OAAMzC,YAAY,CAACC,cAAc,CAAC;EAAA,GAAE,CAACA,cAAc,CAAC,CAAC;EAC1E,oBAAO,IAAAyC,eAAA,EAACvD,iBAAiB,CAACwD,QAAQ;IAAC9C,KAAK,EAAE2C,IAAK;IAAAD,QAAA,EAAEA;EAAQ,CAA6B,CAAC;AAC3F","ignoreList":[]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { UserAvatar } from './UserAvatar';
|
|
2
|
+
export type { UserAvatarProps } from './UserAvatar';
|
|
3
|
+
export { UserAvatarProvider } from './UserAvatarProvider';
|
|
4
|
+
export type { UserAvatarProviderProps } from './UserAvatarProvider';
|
|
5
|
+
export type { GetUserAvatars, UserAvatarUser } from './types';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "UserAvatar", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _UserAvatar.UserAvatar;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "UserAvatarProvider", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _UserAvatarProvider.UserAvatarProvider;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
var _UserAvatar = require("./UserAvatar");
|
|
19
|
+
var _UserAvatarProvider = require("./UserAvatarProvider");
|
|
20
|
+
// #sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_UserAvatar","require","_UserAvatarProvider"],"sources":["index.ts"],"sourcesContent":["export {UserAvatar} from './UserAvatar';\nexport type {UserAvatarProps} from './UserAvatar';\nexport {UserAvatarProvider} from './UserAvatarProvider';\nexport type {UserAvatarProviderProps} from './UserAvatarProvider';\nexport type {GetUserAvatars, UserAvatarUser} from './types';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAEA,IAAAC,mBAAA,GAAAD,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["export type UserAvatarUser = {uid?: string; login?: string};\n\nexport type GetUserAvatars = (users: UserAvatarUser[]) => Promise<Array<string | null>>;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useUpdateEffect = useUpdateEffect;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
function useUpdateEffect(effect, deps) {
|
|
9
|
+
var mounted = (0, _react.useRef)(false);
|
|
10
|
+
(0, _react.useEffect)(function () {
|
|
11
|
+
return function () {
|
|
12
|
+
// React StrictMode replays mount effects; skip both mount setups.
|
|
13
|
+
mounted.current = false;
|
|
14
|
+
};
|
|
15
|
+
}, []);
|
|
16
|
+
(0, _react.useEffect)(function () {
|
|
17
|
+
if (mounted.current) {
|
|
18
|
+
return effect();
|
|
19
|
+
}
|
|
20
|
+
mounted.current = true;
|
|
21
|
+
return undefined;
|
|
22
|
+
// The caller controls when this effect runs, just as with useEffect.
|
|
23
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
24
|
+
}, deps);
|
|
25
|
+
}
|
|
26
|
+
// #sourceMappingURL=useUpdateEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","useUpdateEffect","effect","deps","mounted","useRef","useEffect","current","undefined"],"sources":["useUpdateEffect.ts"],"sourcesContent":["import type {DependencyList, EffectCallback} from 'react';\nimport {useEffect, useRef} from 'react';\n\nexport function useUpdateEffect(effect: EffectCallback, deps: DependencyList) {\n const mounted = useRef(false);\n\n useEffect(\n () => () => {\n // React StrictMode replays mount effects; skip both mount setups.\n mounted.current = false;\n },\n [],\n );\n\n useEffect(() => {\n if (mounted.current) {\n return effect();\n }\n mounted.current = true;\n return undefined;\n // The caller controls when this effect runs, just as with useEffect.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAEO,SAASC,eAAeA,CAACC,MAAsB,EAAEC,IAAoB,EAAE;EAC1E,IAAMC,OAAO,GAAG,IAAAC,aAAM,EAAC,KAAK,CAAC;EAE7B,IAAAC,gBAAS,EACL;IAAA,OAAM,YAAM;MACR;MACAF,OAAO,CAACG,OAAO,GAAG,KAAK;IAC3B,CAAC;EAAA,GACD,EACJ,CAAC;EAED,IAAAD,gBAAS,EAAC,YAAM;IACZ,IAAIF,OAAO,CAACG,OAAO,EAAE;MACjB,OAAOL,MAAM,CAAC,CAAC;IACnB;IACAE,OAAO,CAACG,OAAO,GAAG,IAAI;IACtB,OAAOC,SAAS;IAChB;IACA;EACJ,CAAC,EAAEL,IAAI,CAAC;AACZ","ignoreList":[]}
|
package/build/cjs/index.d.ts
CHANGED
package/build/cjs/index.js
CHANGED
|
@@ -87,4 +87,16 @@ Object.keys(_TrackerDisclosure).forEach(function (key) {
|
|
|
87
87
|
});
|
|
88
88
|
});
|
|
89
89
|
var _cn = require("./components/cn");
|
|
90
|
+
var _UserAvatar = require("./components/UserAvatar");
|
|
91
|
+
Object.keys(_UserAvatar).forEach(function (key) {
|
|
92
|
+
if (key === "default" || key === "__esModule") return;
|
|
93
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
94
|
+
if (key in exports && exports[key] === _UserAvatar[key]) return;
|
|
95
|
+
Object.defineProperty(exports, key, {
|
|
96
|
+
enumerable: true,
|
|
97
|
+
get: function () {
|
|
98
|
+
return _UserAvatar[key];
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
});
|
|
90
102
|
// #sourceMappingURL=index.js.map
|
package/build/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_Icon","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_MetaEntitiesSelect","_PluginFieldsSelect","_QueueSelect","_TrackerDisclosure","_cn"],"sources":["index.ts"],"sourcesContent":["export * from './components/Icon';\nexport * from './components/MetaEntitiesSelect';\nexport * from './components/PluginFieldsSelect';\nexport * from './components/QueueSelect';\nexport * from './components/TrackerDisclosure';\nexport {block, cn, NAMESPACE} from './components/cn';\nexport type {CnBlock} from './components/cn';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,KAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,KAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,KAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,mBAAA,GAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,mBAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,mBAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,mBAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,mBAAA,GAAAd,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAY,mBAAA,EAAAX,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAU,mBAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,mBAAA,CAAAV,GAAA;IAAA;EAAA;AAAA;AACA,IAAAW,YAAA,GAAAf,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAa,YAAA,EAAAZ,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAW,YAAA,CAAAX,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,YAAA,CAAAX,GAAA;IAAA;EAAA;AAAA;AACA,IAAAY,kBAAA,GAAAhB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAc,kBAAA,EAAAb,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAY,kBAAA,CAAAZ,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,kBAAA,CAAAZ,GAAA;IAAA;EAAA;AAAA;AACA,IAAAa,GAAA,GAAAjB,OAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_Icon","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_MetaEntitiesSelect","_PluginFieldsSelect","_QueueSelect","_TrackerDisclosure","_cn","_UserAvatar"],"sources":["index.ts"],"sourcesContent":["export * from './components/Icon';\nexport * from './components/MetaEntitiesSelect';\nexport * from './components/PluginFieldsSelect';\nexport * from './components/QueueSelect';\nexport * from './components/TrackerDisclosure';\nexport {block, cn, NAMESPACE} from './components/cn';\nexport type {CnBlock} from './components/cn';\nexport * from './components/UserAvatar';\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface CancellablePromise<T> extends Promise<T> {
|
|
2
|
+
cancel: () => void;
|
|
3
|
+
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): CancellablePromise<TResult1 | TResult2>;
|
|
4
|
+
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null): CancellablePromise<T | TResult>;
|
|
5
|
+
finally(onfinally?: (() => void) | null): CancellablePromise<T>;
|
|
6
|
+
}
|
|
7
|
+
export declare function cancellablePromise<T>(promise: Promise<T>, cancel?: () => void): CancellablePromise<T>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.cancellablePromise = cancellablePromise;
|
|
7
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
8
|
+
require("core-js/modules/es.symbol.to-string-tag.js");
|
|
9
|
+
require("core-js/modules/es.json.to-string-tag.js");
|
|
10
|
+
require("core-js/modules/es.math.to-string-tag.js");
|
|
11
|
+
require("core-js/modules/es.object.to-string.js");
|
|
12
|
+
require("core-js/modules/es.promise.js");
|
|
13
|
+
require("core-js/modules/es.promise.finally.js");
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
+
// Structural contract: SDK promises remain assignable without their private fields.
|
|
16
|
+
|
|
17
|
+
function cancellablePromise(promise) {
|
|
18
|
+
var cancel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
|
|
19
|
+
return (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, Symbol.toStringTag, 'CancellablePromise'), "cancel", cancel), "then", function then(onfulfilled, onrejected) {
|
|
20
|
+
return cancellablePromise(promise.then(onfulfilled, onrejected), cancel);
|
|
21
|
+
}), "catch", function _catch(onrejected) {
|
|
22
|
+
return cancellablePromise(promise["catch"](onrejected), cancel);
|
|
23
|
+
}), "finally", function _finally(onfinally) {
|
|
24
|
+
return cancellablePromise(promise["finally"](onfinally), cancel);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
// #sourceMappingURL=cancellablePromise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["cancellablePromise","promise","cancel","arguments","length","undefined","_defineProperty","Symbol","toStringTag","then","onfulfilled","onrejected","_catch","_finally","onfinally"],"sources":["cancellablePromise.ts"],"sourcesContent":["// Structural contract: SDK promises remain assignable without their private fields.\nexport interface CancellablePromise<T> extends Promise<T> {\n cancel: () => void;\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null,\n ): CancellablePromise<TResult1 | TResult2>;\n catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null,\n ): CancellablePromise<T | TResult>;\n finally(onfinally?: (() => void) | null): CancellablePromise<T>;\n}\n\nexport function cancellablePromise<T>(\n promise: Promise<T>,\n cancel: () => void = () => {},\n): CancellablePromise<T> {\n return {\n [Symbol.toStringTag]: 'CancellablePromise',\n cancel,\n then: (onfulfilled, onrejected) =>\n cancellablePromise(promise.then(onfulfilled, onrejected), cancel),\n catch: (onrejected) => cancellablePromise(promise.catch(onrejected), cancel),\n finally: (onfinally) => cancellablePromise(promise.finally(onfinally), cancel),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;;AAaO,SAASA,kBAAkBA,CAC9BC,OAAmB,EAEE;EAAA,IADrBC,MAAkB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,YAAM,CAAC,CAAC;EAE7B,WAAAG,wBAAA,MAAAA,wBAAA,MAAAA,wBAAA,MAAAA,wBAAA,MAAAA,wBAAA,MACKC,MAAM,CAACC,WAAW,EAAG,oBAAoB,aAC1CN,MAAM,WACA,SAANO,IAAIA,CAAGC,WAAW,EAAEC,UAAU;IAAA,OAC1BX,kBAAkB,CAACC,OAAO,CAACQ,IAAI,CAACC,WAAW,EAAEC,UAAU,CAAC,EAAET,MAAM,CAAC;EAAA,aAC9D,SAAPU,MAAKA,CAAGD,UAAU;IAAA,OAAKX,kBAAkB,CAACC,OAAO,SAAM,CAACU,UAAU,CAAC,EAAET,MAAM,CAAC;EAAA,eACnE,SAATW,QAAOA,CAAGC,SAAS;IAAA,OAAKd,kBAAkB,CAACC,OAAO,WAAQ,CAACa,SAAS,CAAC,EAAEZ,MAAM,CAAC;EAAA;AAEtF","ignoreList":[]}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import type { FC } from 'react';
|
|
2
|
+
import React from 'react';
|
|
2
3
|
import type { MetaEntityV2 } from '@weavix/tracker-api-types';
|
|
3
4
|
import type { EntitiesSuggestProps } from './components/EntitiesSuggest/EntitiesSuggest';
|
|
4
5
|
type EntitiesSuggestPropsToOmit = 'getItemId' | 'getSuggestTextFromClickedItem' | 'renderItem';
|
|
5
|
-
|
|
6
|
+
type LegacyMetaEntity = MetaEntityV2 & {
|
|
7
|
+
fields: Record<string, Record<string, unknown>>;
|
|
8
|
+
};
|
|
9
|
+
export type MetaEntitiesSelectProps<Entity extends MetaEntityV2 = LegacyMetaEntity> = Omit<EntitiesSuggestProps<Entity>, EntitiesSuggestPropsToOmit> & {
|
|
6
10
|
className?: string;
|
|
7
11
|
itemClassName?: string;
|
|
8
12
|
};
|
|
9
|
-
export declare const MetaEntitiesSelect: FC<MetaEntitiesSelectProps>;
|
|
13
|
+
export declare const MetaEntitiesSelect: (<Entity extends MetaEntityV2>(props: MetaEntitiesSelectProps<Entity>) => React.ReactElement) & FC<MetaEntitiesSelectProps>;
|
|
10
14
|
export {};
|
|
@@ -12,7 +12,11 @@ import { EntitiesSuggestItem } from "./components/EntitiesSuggestItem/EntitiesSu
|
|
|
12
12
|
import { defaultMessages } from "./i18n";
|
|
13
13
|
import { getMetaEntityDisplay } from "./utils/getMetaEntityDisplay";
|
|
14
14
|
import { getMetaEntityId } from "./utils/getMetaEntityId";
|
|
15
|
+
|
|
16
|
+
// Preserve the default callback contract from tracker-api-types 0.0.3.
|
|
17
|
+
// New callers can infer the wider 0.0.6 entity type from their data.
|
|
15
18
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
19
|
+
// Keep FC last so ComponentProps and existing wrappers retain the legacy default.
|
|
16
20
|
export var MetaEntitiesSelect = function MetaEntitiesSelect(_ref) {
|
|
17
21
|
var className = _ref.className,
|
|
18
22
|
itemClassName = _ref.itemClassName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useState","getConfig","MetaEntityIcon","useLocalizedString","cnMetaEntitiesSelect","EntitiesSuggest","EntitiesSuggestItem","defaultMessages","getMetaEntityDisplay","getMetaEntityId","jsx","_jsx","MetaEntitiesSelect","_ref","className","itemClassName","placeholder","initialText","text","onTextChange","suggestProps","_objectWithoutProperties","_excluded","config","_useLocalizedString","lang","t","_useState","_useState2","_slicedToArray","setText","handleTextChange","value","renderItem","entity","entityName","id","name","icon","_objectSpread","getItemsOnMount","showItemsOnNoText","getItemId","getSuggestTextFromClickedItem"],"sources":["MetaEntitiesSelect.tsx"],"sourcesContent":["import type {FC} from 'react';\nimport React, {useCallback, useState} from 'react';\n\nimport {getConfig} from '@gravity-ui/uikit';\nimport type {MetaEntityV2} from '@weavix/tracker-api-types';\n\nimport {MetaEntityIcon} from '~/src/components/Icon/';\nimport {useLocalizedString} from '~/src/hooks/useLocalizedString';\n\nimport {cnMetaEntitiesSelect} from './MetaEntitiesSelect.classname';\nimport {EntitiesSuggest} from './components/EntitiesSuggest/EntitiesSuggest';\nimport type {EntitiesSuggestProps} from './components/EntitiesSuggest/EntitiesSuggest';\nimport {EntitiesSuggestItem} from './components/EntitiesSuggestItem/EntitiesSuggestItem';\nimport {defaultMessages} from './i18n';\nimport {getMetaEntityDisplay} from './utils/getMetaEntityDisplay';\nimport {getMetaEntityId} from './utils/getMetaEntityId';\n\ntype EntitiesSuggestPropsToOmit = 'getItemId' | 'getSuggestTextFromClickedItem' | 'renderItem';\n\nexport type MetaEntitiesSelectProps = Omit<\n EntitiesSuggestProps<
|
|
1
|
+
{"version":3,"names":["React","useCallback","useState","getConfig","MetaEntityIcon","useLocalizedString","cnMetaEntitiesSelect","EntitiesSuggest","EntitiesSuggestItem","defaultMessages","getMetaEntityDisplay","getMetaEntityId","jsx","_jsx","MetaEntitiesSelect","_ref","className","itemClassName","placeholder","initialText","text","onTextChange","suggestProps","_objectWithoutProperties","_excluded","config","_useLocalizedString","lang","t","_useState","_useState2","_slicedToArray","setText","handleTextChange","value","renderItem","entity","entityName","id","name","icon","_objectSpread","getItemsOnMount","showItemsOnNoText","getItemId","getSuggestTextFromClickedItem"],"sources":["MetaEntitiesSelect.tsx"],"sourcesContent":["import type {FC} from 'react';\nimport React, {useCallback, useState} from 'react';\n\nimport {getConfig} from '@gravity-ui/uikit';\nimport type {MetaEntityV2} from '@weavix/tracker-api-types';\n\nimport {MetaEntityIcon} from '~/src/components/Icon/';\nimport {useLocalizedString} from '~/src/hooks/useLocalizedString';\n\nimport {cnMetaEntitiesSelect} from './MetaEntitiesSelect.classname';\nimport {EntitiesSuggest} from './components/EntitiesSuggest/EntitiesSuggest';\nimport type {EntitiesSuggestProps} from './components/EntitiesSuggest/EntitiesSuggest';\nimport {EntitiesSuggestItem} from './components/EntitiesSuggestItem/EntitiesSuggestItem';\nimport {defaultMessages} from './i18n';\nimport {getMetaEntityDisplay} from './utils/getMetaEntityDisplay';\nimport {getMetaEntityId} from './utils/getMetaEntityId';\n\ntype EntitiesSuggestPropsToOmit = 'getItemId' | 'getSuggestTextFromClickedItem' | 'renderItem';\n\n// Preserve the default callback contract from tracker-api-types 0.0.3.\n// New callers can infer the wider 0.0.6 entity type from their data.\ntype LegacyMetaEntity = MetaEntityV2 & {fields: Record<string, Record<string, unknown>>};\n\nexport type MetaEntitiesSelectProps<Entity extends MetaEntityV2 = LegacyMetaEntity> = Omit<\n EntitiesSuggestProps<Entity>,\n EntitiesSuggestPropsToOmit\n> & {\n className?: string;\n itemClassName?: string;\n};\n\n// Keep FC last so ComponentProps and existing wrappers retain the legacy default.\nexport const MetaEntitiesSelect: (<Entity extends MetaEntityV2>(\n props: MetaEntitiesSelectProps<Entity>,\n) => React.ReactElement) &\n FC<MetaEntitiesSelectProps> = <Entity extends MetaEntityV2>({\n className,\n itemClassName,\n placeholder,\n text: initialText,\n onTextChange,\n ...suggestProps\n}: MetaEntitiesSelectProps<Entity>) => {\n const config = getConfig();\n const {t} = useLocalizedString(defaultMessages, config.lang);\n const [text, setText] = useState(initialText ?? '');\n const handleTextChange = useCallback(\n (value: string) => {\n setText(value);\n onTextChange?.(value);\n },\n [setText, onTextChange],\n );\n\n const renderItem = useCallback(\n (entity: Entity) => {\n const entityName = getMetaEntityDisplay(entity);\n return (\n <EntitiesSuggestItem\n key={entity.id}\n id={entity.id}\n name={entityName}\n className={cnMetaEntitiesSelect('item', itemClassName)}\n icon={<MetaEntityIcon entity={entity} />}\n />\n );\n },\n [itemClassName],\n );\n\n return (\n <EntitiesSuggest<Entity>\n {...suggestProps}\n className={cnMetaEntitiesSelect(null, className)}\n renderItem={renderItem}\n placeholder={placeholder ?? t('placeholder')}\n getItemsOnMount\n showItemsOnNoText\n getItemId={getMetaEntityId}\n getSuggestTextFromClickedItem={getMetaEntityDisplay}\n text={text}\n onTextChange={handleTextChange}\n />\n );\n};\n"],"mappings":";;;;AACA,OAAOA,KAAK,IAAGC,WAAW,EAAEC,QAAQ,QAAO,OAAO;AAElD,SAAQC,SAAS,QAAO,mBAAmB;AAG3C,SAAQC,cAAc;AACtB,SAAQC,kBAAkB;AAE1B,SAAQC,oBAAoB;AAC5B,SAAQC,eAAe;AAEvB,SAAQC,mBAAmB;AAC3B,SAAQC,eAAe;AACvB,SAAQC,oBAAoB;AAC5B,SAAQC,eAAe;;AAIvB;AACA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAWA;AACA,OAAO,IAAMC,kBAGkB,GAAG,SAHrBA,kBAGkBA,CAAAC,IAAA,EAOQ;EAAA,IANnCC,SAAS,GAAAD,IAAA,CAATC,SAAS;IACTC,aAAa,GAAAF,IAAA,CAAbE,aAAa;IACbC,WAAW,GAAAH,IAAA,CAAXG,WAAW;IACLC,WAAW,GAAAJ,IAAA,CAAjBK,IAAI;IACJC,YAAY,GAAAN,IAAA,CAAZM,YAAY;IACTC,YAAY,GAAAC,wBAAA,CAAAR,IAAA,EAAAS,SAAA;EAEf,IAAMC,MAAM,GAAGtB,SAAS,CAAC,CAAC;EAC1B,IAAAuB,mBAAA,GAAYrB,kBAAkB,CAACI,eAAe,EAAEgB,MAAM,CAACE,IAAI,CAAC;IAArDC,CAAC,GAAAF,mBAAA,CAADE,CAAC;EACR,IAAAC,SAAA,GAAwB3B,QAAQ,CAACiB,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,EAAE,CAAC;IAAAW,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAA5CT,IAAI,GAAAU,UAAA;IAAEE,OAAO,GAAAF,UAAA;EACpB,IAAMG,gBAAgB,GAAGhC,WAAW,CAChC,UAACiC,KAAa,EAAK;IACfF,OAAO,CAACE,KAAK,CAAC;IACdb,YAAY,aAAZA,YAAY,eAAZA,YAAY,CAAGa,KAAK,CAAC;EACzB,CAAC,EACD,CAACF,OAAO,EAAEX,YAAY,CAC1B,CAAC;EAED,IAAMc,UAAU,GAAGlC,WAAW,CAC1B,UAACmC,MAAc,EAAK;IAChB,IAAMC,UAAU,GAAG3B,oBAAoB,CAAC0B,MAAM,CAAC;IAC/C,oBACIvB,IAAA,CAACL,mBAAmB;MAEhB8B,EAAE,EAAEF,MAAM,CAACE,EAAG;MACdC,IAAI,EAAEF,UAAW;MACjBrB,SAAS,EAAEV,oBAAoB,CAAC,MAAM,EAAEW,aAAa,CAAE;MACvDuB,IAAI,eAAE3B,IAAA,CAACT,cAAc;QAACgC,MAAM,EAAEA;MAAO,CAAE;IAAE,GAJpCA,MAAM,CAACE,EAKf,CAAC;EAEV,CAAC,EACD,CAACrB,aAAa,CAClB,CAAC;EAED,oBACIJ,IAAA,CAACN,eAAe,EAAAkC,aAAA,CAAAA,aAAA,KACRnB,YAAY;IAChBN,SAAS,EAAEV,oBAAoB,CAAC,IAAI,EAAEU,SAAS,CAAE;IACjDmB,UAAU,EAAEA,UAAW;IACvBjB,WAAW,EAAEA,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAIU,CAAC,CAAC,aAAa,CAAE;IAC7Cc,eAAe;IACfC,iBAAiB;IACjBC,SAAS,EAAEjC,eAAgB;IAC3BkC,6BAA6B,EAAEnC,oBAAqB;IACpDU,IAAI,EAAEA,IAAK;IACXC,YAAY,EAAEY;EAAiB,EAClC,CAAC;AAEV,CAAC","ignoreList":[]}
|
|
@@ -76,6 +76,11 @@ import type {MetaEntityV2} from '@weavix/tracker-api-types';
|
|
|
76
76
|
|
|
77
77
|
## Types
|
|
78
78
|
|
|
79
|
+
`MetaEntitiesSelect` infers the entity type from your data and keeps it in selection callbacks.
|
|
80
|
+
`MetaEntitiesSelectProps<Entity>` also accepts an explicit entity type; its default preserves the
|
|
81
|
+
object-valued fields contract from API types 0.0.3. Use `MetaEntitiesSelectProps<MetaEntityV2>`
|
|
82
|
+
for the wider fields in API types 0.0.6.
|
|
83
|
+
|
|
79
84
|
```ts
|
|
80
85
|
// From @weavix/tracker-api-types
|
|
81
86
|
type MetaEntityV2 = {
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
|
1
2
|
export function getMetaEntityDisplay(metaEntity) {
|
|
2
|
-
var _metaEntity$fields,
|
|
3
|
-
|
|
3
|
+
var _metaEntity$fields, _ref;
|
|
4
|
+
var summary = (_metaEntity$fields = metaEntity.fields) === null || _metaEntity$fields === void 0 ? void 0 : _metaEntity$fields.summary;
|
|
5
|
+
if (typeof summary === 'string') {
|
|
6
|
+
return summary;
|
|
7
|
+
}
|
|
8
|
+
return String((_ref = summary && _typeof(summary) === 'object' && 'value' in summary ? summary.value : undefined) !== null && _ref !== void 0 ? _ref : metaEntity.id);
|
|
4
9
|
}
|
|
5
10
|
// #sourceMappingURL=getMetaEntityDisplay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getMetaEntityDisplay","metaEntity","_metaEntity$fields","
|
|
1
|
+
{"version":3,"names":["getMetaEntityDisplay","metaEntity","_metaEntity$fields","_ref","summary","fields","String","_typeof","value","undefined","id"],"sources":["getMetaEntityDisplay.ts"],"sourcesContent":["import type {MetaEntityV2} from '@weavix/tracker-api-types';\n\nexport function getMetaEntityDisplay(metaEntity: MetaEntityV2) {\n const summary = metaEntity.fields?.summary;\n if (typeof summary === 'string') {\n return summary;\n }\n return String(\n (summary && typeof summary === 'object' && 'value' in summary\n ? summary.value\n : undefined) ?? metaEntity.id,\n );\n}\n"],"mappings":";AAEA,OAAO,SAASA,oBAAoBA,CAACC,UAAwB,EAAE;EAAA,IAAAC,kBAAA,EAAAC,IAAA;EAC3D,IAAMC,OAAO,IAAAF,kBAAA,GAAGD,UAAU,CAACI,MAAM,cAAAH,kBAAA,uBAAjBA,kBAAA,CAAmBE,OAAO;EAC1C,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;IAC7B,OAAOA,OAAO;EAClB;EACA,OAAOE,MAAM,EAAAH,IAAA,GACRC,OAAO,IAAIG,OAAA,CAAOH,OAAO,MAAK,QAAQ,IAAI,OAAO,IAAIA,OAAO,GACvDA,OAAO,CAACI,KAAK,GACbC,SAAS,cAAAN,IAAA,cAAAA,IAAA,GAAKF,UAAU,CAACS,EACnC,CAAC;AACL","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { CancellablePromise } from '@gravity-ui/sdk';
|
|
3
2
|
import type { AutocompleteProps } from '~/src/components/Select/Autocomplete';
|
|
3
|
+
import type { CancellablePromise } from '../../utils/cancellablePromise';
|
|
4
4
|
import type { QueueInfo } from './types';
|
|
5
5
|
import './QueueSelect.scss';
|
|
6
6
|
export type QueueSelectProps = {
|
|
@@ -16,13 +16,13 @@ import "core-js/modules/es.iterator.some.js";
|
|
|
16
16
|
import "core-js/modules/es.object.to-string.js";
|
|
17
17
|
import "core-js/modules/es.promise.js";
|
|
18
18
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
19
|
-
import { CancellablePromise } from '@gravity-ui/sdk';
|
|
20
19
|
import { getConfig } from '@gravity-ui/uikit';
|
|
21
|
-
import { useUpdateEffect } from 'react-use';
|
|
22
20
|
import { Autocomplete } from "./../Select/Autocomplete";
|
|
23
21
|
import { useAutocomplete } from "./../Select/hooks/useAutocomplete";
|
|
24
22
|
import { useAutoFocus } from "./../../hooks/useAutoFocus";
|
|
25
23
|
import { useLocalizedString } from "./../../hooks/useLocalizedString";
|
|
24
|
+
import { useUpdateEffect } from "./../../hooks/useUpdateEffect";
|
|
25
|
+
import { cancellablePromise } from "../../utils/cancellablePromise";
|
|
26
26
|
import { cnQueueSelect } from "./QueueSelect.classname";
|
|
27
27
|
import { defaultMessages } from "./i18n";
|
|
28
28
|
import { filterQueues } from "./utils/filterQueues";
|
|
@@ -109,10 +109,10 @@ export var QueueSelect = function QueueSelect(_ref) {
|
|
|
109
109
|
}, [onChange, queues, defaultQueue, initialEmpty]);
|
|
110
110
|
var getQueues = useCallback(function (searchText) {
|
|
111
111
|
if (!onSearch) {
|
|
112
|
-
return
|
|
112
|
+
return cancellablePromise(Promise.resolve([]), function () {});
|
|
113
113
|
}
|
|
114
114
|
var innerPromise = onSearch(searchText);
|
|
115
|
-
return
|
|
115
|
+
return cancellablePromise(innerPromise.then(function (results) {
|
|
116
116
|
return filterQueues(results, hideQueues);
|
|
117
117
|
}), function () {
|
|
118
118
|
var _cancel, _ref2;
|