@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.
Files changed (74) hide show
  1. package/README.md +4 -0
  2. package/build/cjs/components/MetaEntitiesSelect/MetaEntitiesSelect.d.ts +6 -2
  3. package/build/cjs/components/MetaEntitiesSelect/MetaEntitiesSelect.js +5 -0
  4. package/build/cjs/components/MetaEntitiesSelect/MetaEntitiesSelect.js.map +1 -1
  5. package/build/cjs/components/MetaEntitiesSelect/README.md +5 -0
  6. package/build/cjs/components/MetaEntitiesSelect/utils/getMetaEntityDisplay.js +8 -2
  7. package/build/cjs/components/MetaEntitiesSelect/utils/getMetaEntityDisplay.js.map +1 -1
  8. package/build/cjs/components/QueueSelect/QueueSelect.d.ts +1 -1
  9. package/build/cjs/components/QueueSelect/QueueSelect.js +5 -5
  10. package/build/cjs/components/QueueSelect/QueueSelect.js.map +1 -1
  11. package/build/cjs/components/QueueSelect/README.md +4 -6
  12. package/build/cjs/components/Select/MultiSelect.js.map +1 -1
  13. package/build/cjs/components/Select/hooks/useAutocomplete.d.ts +1 -1
  14. package/build/cjs/components/Select/hooks/useAutocomplete.js +23 -22
  15. package/build/cjs/components/Select/hooks/useAutocomplete.js.map +1 -1
  16. package/build/cjs/components/UserAvatar/README.md +28 -0
  17. package/build/cjs/components/UserAvatar/UserAvatar.d.ts +8 -0
  18. package/build/cjs/components/UserAvatar/UserAvatar.js +82 -0
  19. package/build/cjs/components/UserAvatar/UserAvatar.js.map +1 -0
  20. package/build/cjs/components/UserAvatar/UserAvatarProvider.d.ts +9 -0
  21. package/build/cjs/components/UserAvatar/UserAvatarProvider.js +111 -0
  22. package/build/cjs/components/UserAvatar/UserAvatarProvider.js.map +1 -0
  23. package/build/cjs/components/UserAvatar/index.d.ts +5 -0
  24. package/build/cjs/components/UserAvatar/index.js +20 -0
  25. package/build/cjs/components/UserAvatar/index.js.map +1 -0
  26. package/build/cjs/components/UserAvatar/types.d.ts +5 -0
  27. package/build/cjs/components/UserAvatar/types.js +6 -0
  28. package/build/cjs/components/UserAvatar/types.js.map +1 -0
  29. package/build/cjs/hooks/useUpdateEffect.d.ts +2 -0
  30. package/build/cjs/hooks/useUpdateEffect.js +26 -0
  31. package/build/cjs/hooks/useUpdateEffect.js.map +1 -0
  32. package/build/cjs/index.d.ts +1 -0
  33. package/build/cjs/index.js +12 -0
  34. package/build/cjs/index.js.map +1 -1
  35. package/build/cjs/utils/cancellablePromise.d.ts +7 -0
  36. package/build/cjs/utils/cancellablePromise.js +27 -0
  37. package/build/cjs/utils/cancellablePromise.js.map +1 -0
  38. package/build/esm/components/MetaEntitiesSelect/MetaEntitiesSelect.d.ts +6 -2
  39. package/build/esm/components/MetaEntitiesSelect/MetaEntitiesSelect.js +4 -0
  40. package/build/esm/components/MetaEntitiesSelect/MetaEntitiesSelect.js.map +1 -1
  41. package/build/esm/components/MetaEntitiesSelect/README.md +5 -0
  42. package/build/esm/components/MetaEntitiesSelect/utils/getMetaEntityDisplay.js +7 -2
  43. package/build/esm/components/MetaEntitiesSelect/utils/getMetaEntityDisplay.js.map +1 -1
  44. package/build/esm/components/QueueSelect/QueueSelect.d.ts +1 -1
  45. package/build/esm/components/QueueSelect/QueueSelect.js +4 -4
  46. package/build/esm/components/QueueSelect/QueueSelect.js.map +1 -1
  47. package/build/esm/components/QueueSelect/README.md +4 -6
  48. package/build/esm/components/Select/MultiSelect.js.map +1 -1
  49. package/build/esm/components/Select/hooks/useAutocomplete.d.ts +1 -1
  50. package/build/esm/components/Select/hooks/useAutocomplete.js +23 -22
  51. package/build/esm/components/Select/hooks/useAutocomplete.js.map +1 -1
  52. package/build/esm/components/UserAvatar/README.md +28 -0
  53. package/build/esm/components/UserAvatar/UserAvatar.d.ts +8 -0
  54. package/build/esm/components/UserAvatar/UserAvatar.js +74 -0
  55. package/build/esm/components/UserAvatar/UserAvatar.js.map +1 -0
  56. package/build/esm/components/UserAvatar/UserAvatarProvider.d.ts +9 -0
  57. package/build/esm/components/UserAvatar/UserAvatarProvider.js +103 -0
  58. package/build/esm/components/UserAvatar/UserAvatarProvider.js.map +1 -0
  59. package/build/esm/components/UserAvatar/index.d.ts +5 -0
  60. package/build/esm/components/UserAvatar/index.js +3 -0
  61. package/build/esm/components/UserAvatar/index.js.map +1 -0
  62. package/build/esm/components/UserAvatar/types.d.ts +5 -0
  63. package/build/esm/components/UserAvatar/types.js +2 -0
  64. package/build/esm/components/UserAvatar/types.js.map +1 -0
  65. package/build/esm/hooks/useUpdateEffect.d.ts +2 -0
  66. package/build/esm/hooks/useUpdateEffect.js +20 -0
  67. package/build/esm/hooks/useUpdateEffect.js.map +1 -0
  68. package/build/esm/index.d.ts +1 -0
  69. package/build/esm/index.js +1 -0
  70. package/build/esm/index.js.map +1 -1
  71. package/build/esm/utils/cancellablePromise.d.ts +7 -0
  72. package/build/esm/utils/cancellablePromise.js +20 -0
  73. package/build/esm/utils/cancellablePromise.js.map +1 -0
  74. 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":"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","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,5 @@
1
+ export type UserAvatarUser = {
2
+ uid?: string;
3
+ login?: string;
4
+ };
5
+ export type GetUserAvatars = (users: UserAvatarUser[]) => Promise<Array<string | null>>;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ // #sourceMappingURL=types.js.map
@@ -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,2 @@
1
+ import type { DependencyList, EffectCallback } from 'react';
2
+ export declare function useUpdateEffect(effect: EffectCallback, deps: DependencyList): void;
@@ -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":[]}
@@ -5,3 +5,4 @@ export * from './components/QueueSelect';
5
5
  export * from './components/TrackerDisclosure';
6
6
  export { block, cn, NAMESPACE } from './components/cn';
7
7
  export type { CnBlock } from './components/cn';
8
+ export * from './components/UserAvatar';
@@ -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
@@ -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
- export type MetaEntitiesSelectProps = Omit<EntitiesSuggestProps<MetaEntityV2>, EntitiesSuggestPropsToOmit> & {
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<MetaEntityV2>,\n EntitiesSuggestPropsToOmit\n> & {\n className?: string;\n itemClassName?: string;\n};\n\nexport const MetaEntitiesSelect: FC<MetaEntitiesSelectProps> = ({\n className,\n itemClassName,\n placeholder,\n text: initialText,\n onTextChange,\n ...suggestProps\n}) => {\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: MetaEntityV2) => {\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<MetaEntityV2>\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;AAAiC,SAAAC,GAAA,IAAAC,IAAA;AAYxD,OAAO,IAAMC,kBAA+C,GAAG,SAAlDA,kBAA+CA,CAAAC,IAAA,EAOtD;EAAA,IANFC,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,MAAoB,EAAK;IACtB,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":[]}
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, _metaEntity$fields2, _metaEntity$fields$su, _metaEntity$fields3;
3
- return typeof ((_metaEntity$fields = metaEntity.fields) === null || _metaEntity$fields === void 0 ? void 0 : _metaEntity$fields.summary) === 'string' ? (_metaEntity$fields2 = metaEntity.fields) === null || _metaEntity$fields2 === void 0 ? void 0 : _metaEntity$fields2.summary : String((_metaEntity$fields$su = (_metaEntity$fields3 = metaEntity.fields) === null || _metaEntity$fields3 === void 0 || (_metaEntity$fields3 = _metaEntity$fields3.summary) === null || _metaEntity$fields3 === void 0 ? void 0 : _metaEntity$fields3.value) !== null && _metaEntity$fields$su !== void 0 ? _metaEntity$fields$su : metaEntity.id);
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","_metaEntity$fields2","_metaEntity$fields$su","_metaEntity$fields3","fields","summary","String","value","id"],"sources":["getMetaEntityDisplay.ts"],"sourcesContent":["import type {MetaEntityV2} from '@weavix/tracker-api-types';\n\nexport function getMetaEntityDisplay(metaEntity: MetaEntityV2) {\n return typeof metaEntity.fields?.summary === 'string'\n ? metaEntity.fields?.summary\n : String(metaEntity.fields?.summary?.value ?? metaEntity.id);\n}\n"],"mappings":"AAEA,OAAO,SAASA,oBAAoBA,CAACC,UAAwB,EAAE;EAAA,IAAAC,kBAAA,EAAAC,mBAAA,EAAAC,qBAAA,EAAAC,mBAAA;EAC3D,OAAO,SAAAH,kBAAA,GAAOD,UAAU,CAACK,MAAM,cAAAJ,kBAAA,uBAAjBA,kBAAA,CAAmBK,OAAO,MAAK,QAAQ,IAAAJ,mBAAA,GAC/CF,UAAU,CAACK,MAAM,cAAAH,mBAAA,uBAAjBA,mBAAA,CAAmBI,OAAO,GAC1BC,MAAM,EAAAJ,qBAAA,IAAAC,mBAAA,GAACJ,UAAU,CAACK,MAAM,cAAAD,mBAAA,gBAAAA,mBAAA,GAAjBA,mBAAA,CAAmBE,OAAO,cAAAF,mBAAA,uBAA1BA,mBAAA,CAA4BI,KAAK,cAAAL,qBAAA,cAAAA,qBAAA,GAAIH,UAAU,CAACS,EAAE,CAAC;AACpE","ignoreList":[]}
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 new CancellablePromise(Promise.resolve([]), function () {});
112
+ return cancellablePromise(Promise.resolve([]), function () {});
113
113
  }
114
114
  var innerPromise = onSearch(searchText);
115
- return new CancellablePromise(innerPromise.then(function (results) {
115
+ return cancellablePromise(innerPromise.then(function (results) {
116
116
  return filterQueues(results, hideQueues);
117
117
  }), function () {
118
118
  var _cancel, _ref2;