@chayns-components/person-finder 5.4.0 → 5.4.4

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 (35) hide show
  1. package/lib/cjs/api/person/get.js +5 -3
  2. package/lib/cjs/api/person/get.js.map +1 -1
  3. package/lib/cjs/api/site/get.js +5 -3
  4. package/lib/cjs/api/site/get.js.map +1 -1
  5. package/lib/cjs/components/PersonFinderProvider.js +60 -15
  6. package/lib/cjs/components/PersonFinderProvider.js.map +1 -1
  7. package/lib/cjs/components/person-finder/PersonFinder.js +2 -0
  8. package/lib/cjs/components/person-finder/PersonFinder.js.map +1 -1
  9. package/lib/cjs/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js +7 -5
  10. package/lib/cjs/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js.map +1 -1
  11. package/lib/cjs/constants/url.js +9 -0
  12. package/lib/cjs/constants/url.js.map +1 -0
  13. package/lib/cjs/utils/personFinder.js +6 -3
  14. package/lib/cjs/utils/personFinder.js.map +1 -1
  15. package/lib/esm/api/person/get.js +5 -3
  16. package/lib/esm/api/person/get.js.map +1 -1
  17. package/lib/esm/api/site/get.js +5 -3
  18. package/lib/esm/api/site/get.js.map +1 -1
  19. package/lib/esm/components/PersonFinderProvider.js +59 -15
  20. package/lib/esm/components/PersonFinderProvider.js.map +1 -1
  21. package/lib/esm/components/person-finder/PersonFinder.js +2 -0
  22. package/lib/esm/components/person-finder/PersonFinder.js.map +1 -1
  23. package/lib/esm/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js +7 -5
  24. package/lib/esm/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js.map +1 -1
  25. package/lib/esm/constants/url.js +3 -0
  26. package/lib/esm/constants/url.js.map +1 -0
  27. package/lib/esm/utils/personFinder.js +6 -3
  28. package/lib/esm/utils/personFinder.js.map +1 -1
  29. package/lib/types/api/person/get.d.ts +2 -1
  30. package/lib/types/api/site/get.d.ts +2 -1
  31. package/lib/types/components/PersonFinderProvider.d.ts +1 -0
  32. package/lib/types/components/person-finder/PersonFinder.d.ts +8 -0
  33. package/lib/types/constants/url.d.ts +2 -0
  34. package/lib/types/utils/personFinder.d.ts +2 -1
  35. package/package.json +2 -2
@@ -6,12 +6,13 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getPersons = void 0;
7
7
  var _chaynsApi = require("chayns-api");
8
8
  var _personFinder = require("../../types/personFinder");
9
- const URL = 'https://relations.chayns.net/relations/v2/person?skip=##skip##&take=##take##&query=##search##&scoreForSite=##scoreForSite##';
9
+ var _url = require("../../constants/url");
10
10
  const getPersons = async ({
11
11
  search,
12
12
  skip,
13
13
  take = 20,
14
- relationMode = _personFinder.RelationMode.PERSON
14
+ relationMode = _personFinder.RelationMode.PERSON,
15
+ shouldUseQa
15
16
  }) => {
16
17
  const {
17
18
  accessToken
@@ -25,7 +26,8 @@ const getPersons = async ({
25
26
  },
26
27
  method: 'GET'
27
28
  };
28
- const response = await fetch(URL.replace('##search##', search).replace('##skip##', skip.toString()).replace('##take##', take === null || take === void 0 ? void 0 : take.toString()).replace('##scoreForSite##', relationMode === _personFinder.RelationMode.SITE ? '1' : '0'), requestInit);
29
+ const url = `${shouldUseQa ? _url.QA_RELATIONS_BASE_URL : _url.RELATIONS_BASE_URL}v2/person?skip=##skip##&take=##take##&query=##search##&scoreForSite=##scoreForSite##`;
30
+ const response = await fetch(url.replace('##search##', search).replace('##skip##', skip.toString()).replace('##take##', take === null || take === void 0 ? void 0 : take.toString()).replace('##scoreForSite##', relationMode === _personFinder.RelationMode.SITE ? '1' : '0'), requestInit);
29
31
  if (response.status === 200) {
30
32
  return await response.json();
31
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","names":["_chaynsApi","require","_personFinder","URL","getPersons","search","skip","take","relationMode","RelationMode","PERSON","accessToken","getAccessToken","undefined","requestInit","headers","Authorization","method","response","fetch","replace","toString","SITE","status","json","exports"],"sources":["../../../../src/api/person/get.ts"],"sourcesContent":["import { getAccessToken } from 'chayns-api';\nimport { PersonEntryResult, RelationMode } from '../../types/personFinder';\n\nconst URL =\n 'https://relations.chayns.net/relations/v2/person?skip=##skip##&take=##take##&query=##search##&scoreForSite=##scoreForSite##';\n\ninterface GetPersonResult {\n list: PersonEntryResult[];\n count: number;\n}\n\ninterface GetPersonsOptions {\n search: string;\n skip: number;\n take?: number;\n relationMode?: RelationMode;\n}\n\nexport const getPersons = async ({\n search,\n skip,\n take = 20,\n relationMode = RelationMode.PERSON,\n}: GetPersonsOptions) => {\n const { accessToken } = await getAccessToken();\n\n if (!accessToken) {\n return undefined;\n }\n\n const requestInit: RequestInit = {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n method: 'GET',\n };\n\n const response = await fetch(\n URL.replace('##search##', search)\n .replace('##skip##', skip.toString())\n .replace('##take##', take?.toString())\n .replace('##scoreForSite##', relationMode === RelationMode.SITE ? '1' : '0'),\n requestInit,\n );\n\n if (response.status === 200) {\n return (await response.json()) as GetPersonResult;\n }\n\n return undefined;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAEA,MAAME,GAAG,GACL,6HAA6H;AAc1H,MAAMC,UAAU,GAAG,MAAAA,CAAO;EAC7BC,MAAM;EACNC,IAAI;EACJC,IAAI,GAAG,EAAE;EACTC,YAAY,GAAGC,0BAAY,CAACC;AACb,CAAC,KAAK;EACrB,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAM,IAAAC,yBAAc,EAAC,CAAC;EAE9C,IAAI,CAACD,WAAW,EAAE;IACd,OAAOE,SAAS;EACpB;EAEA,MAAMC,WAAwB,GAAG;IAC7BC,OAAO,EAAE;MACLC,aAAa,EAAE,UAAUL,WAAW;IACxC,CAAC;IACDM,MAAM,EAAE;EACZ,CAAC;EAED,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CACxBhB,GAAG,CAACiB,OAAO,CAAC,YAAY,EAAEf,MAAM,CAAC,CAC5Be,OAAO,CAAC,UAAU,EAAEd,IAAI,CAACe,QAAQ,CAAC,CAAC,CAAC,CACpCD,OAAO,CAAC,UAAU,EAAEb,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEc,QAAQ,CAAC,CAAC,CAAC,CACrCD,OAAO,CAAC,kBAAkB,EAAEZ,YAAY,KAAKC,0BAAY,CAACa,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,EAChFR,WACJ,CAAC;EAED,IAAII,QAAQ,CAACK,MAAM,KAAK,GAAG,EAAE;IACzB,OAAQ,MAAML,QAAQ,CAACM,IAAI,CAAC,CAAC;EACjC;EAEA,OAAOX,SAAS;AACpB,CAAC;AAACY,OAAA,CAAArB,UAAA,GAAAA,UAAA","ignoreList":[]}
1
+ {"version":3,"file":"get.js","names":["_chaynsApi","require","_personFinder","_url","getPersons","search","skip","take","relationMode","RelationMode","PERSON","shouldUseQa","accessToken","getAccessToken","undefined","requestInit","headers","Authorization","method","url","QA_RELATIONS_BASE_URL","RELATIONS_BASE_URL","response","fetch","replace","toString","SITE","status","json","exports"],"sources":["../../../../src/api/person/get.ts"],"sourcesContent":["import { getAccessToken } from 'chayns-api';\nimport { PersonEntryResult, RelationMode } from '../../types/personFinder';\nimport { QA_RELATIONS_BASE_URL, RELATIONS_BASE_URL } from '../../constants/url';\n\ninterface GetPersonResult {\n list: PersonEntryResult[];\n count: number;\n}\n\ninterface GetPersonsOptions {\n search: string;\n skip: number;\n take?: number;\n relationMode?: RelationMode;\n shouldUseQa: boolean;\n}\n\nexport const getPersons = async ({\n search,\n skip,\n take = 20,\n relationMode = RelationMode.PERSON,\n shouldUseQa,\n}: GetPersonsOptions) => {\n const { accessToken } = await getAccessToken();\n\n if (!accessToken) {\n return undefined;\n }\n\n const requestInit: RequestInit = {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n method: 'GET',\n };\n\n const url = `${shouldUseQa ? QA_RELATIONS_BASE_URL : RELATIONS_BASE_URL}v2/person?skip=##skip##&take=##take##&query=##search##&scoreForSite=##scoreForSite##`;\n\n const response = await fetch(\n url\n .replace('##search##', search)\n .replace('##skip##', skip.toString())\n .replace('##take##', take?.toString())\n .replace('##scoreForSite##', relationMode === RelationMode.SITE ? '1' : '0'),\n requestInit,\n );\n\n if (response.status === 200) {\n return (await response.json()) as GetPersonResult;\n }\n\n return undefined;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,IAAA,GAAAF,OAAA;AAeO,MAAMG,UAAU,GAAG,MAAAA,CAAO;EAC7BC,MAAM;EACNC,IAAI;EACJC,IAAI,GAAG,EAAE;EACTC,YAAY,GAAGC,0BAAY,CAACC,MAAM;EAClCC;AACe,CAAC,KAAK;EACrB,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAM,IAAAC,yBAAc,EAAC,CAAC;EAE9C,IAAI,CAACD,WAAW,EAAE;IACd,OAAOE,SAAS;EACpB;EAEA,MAAMC,WAAwB,GAAG;IAC7BC,OAAO,EAAE;MACLC,aAAa,EAAE,UAAUL,WAAW;IACxC,CAAC;IACDM,MAAM,EAAE;EACZ,CAAC;EAED,MAAMC,GAAG,GAAG,GAAGR,WAAW,GAAGS,0BAAqB,GAAGC,uBAAkB,sFAAsF;EAE7J,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CACxBJ,GAAG,CACEK,OAAO,CAAC,YAAY,EAAEnB,MAAM,CAAC,CAC7BmB,OAAO,CAAC,UAAU,EAAElB,IAAI,CAACmB,QAAQ,CAAC,CAAC,CAAC,CACpCD,OAAO,CAAC,UAAU,EAAEjB,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEkB,QAAQ,CAAC,CAAC,CAAC,CACrCD,OAAO,CAAC,kBAAkB,EAAEhB,YAAY,KAAKC,0BAAY,CAACiB,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,EAChFX,WACJ,CAAC;EAED,IAAIO,QAAQ,CAACK,MAAM,KAAK,GAAG,EAAE;IACzB,OAAQ,MAAML,QAAQ,CAACM,IAAI,CAAC,CAAC;EACjC;EAEA,OAAOd,SAAS;AACpB,CAAC;AAACe,OAAA,CAAAzB,UAAA,GAAAA,UAAA","ignoreList":[]}
@@ -5,11 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getSites = void 0;
7
7
  var _chaynsApi = require("chayns-api");
8
- const URL = 'https://relations.chayns.net/relations/location/?query=##search##&skip=##skip##&take=##take##&includeDomains=true';
8
+ var _url = require("../../constants/url");
9
9
  const getSites = async ({
10
10
  search,
11
11
  skip,
12
- take = 20
12
+ take = 20,
13
+ shouldUseQa
13
14
  }) => {
14
15
  const {
15
16
  accessToken
@@ -23,7 +24,8 @@ const getSites = async ({
23
24
  },
24
25
  method: 'GET'
25
26
  };
26
- const response = await fetch(URL.replace('##search##', search).replace('##skip##', skip.toString()).replace('##take##', take === null || take === void 0 ? void 0 : take.toString()), requestInit);
27
+ const url = `${shouldUseQa ? _url.QA_RELATIONS_BASE_URL : _url.RELATIONS_BASE_URL}location/?query=##search##&skip=##skip##&take=##take##&includeDomains=true`;
28
+ const response = await fetch(url.replace('##search##', search).replace('##skip##', skip.toString()).replace('##take##', take === null || take === void 0 ? void 0 : take.toString()), requestInit);
27
29
  if (response.status === 200) {
28
30
  return await response.json();
29
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","names":["_chaynsApi","require","URL","getSites","search","skip","take","accessToken","getAccessToken","undefined","requestInit","headers","Authorization","method","response","fetch","replace","toString","status","json","exports"],"sources":["../../../../src/api/site/get.ts"],"sourcesContent":["import { getAccessToken } from 'chayns-api';\nimport { SiteEntryResult } from '../../types/personFinder';\n\nconst URL =\n 'https://relations.chayns.net/relations/location/?query=##search##&skip=##skip##&take=##take##&includeDomains=true';\n\ninterface GetSiteResult {\n count: number;\n list: SiteEntryResult[];\n}\n\ninterface GetSitesOptions {\n search: string;\n skip: number;\n take?: number;\n}\n\nexport const getSites = async ({ search, skip, take = 20 }: GetSitesOptions) => {\n const { accessToken } = await getAccessToken();\n\n if (!accessToken) {\n return undefined;\n }\n\n const requestInit: RequestInit = {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n method: 'GET',\n };\n\n const response = await fetch(\n URL.replace('##search##', search)\n .replace('##skip##', skip.toString())\n .replace('##take##', take?.toString()),\n requestInit,\n );\n\n if (response.status === 200) {\n return (await response.json()) as GetSiteResult;\n }\n\n return undefined;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAGA,MAAMC,GAAG,GACL,mHAAmH;AAahH,MAAMC,QAAQ,GAAG,MAAAA,CAAO;EAAEC,MAAM;EAAEC,IAAI;EAAEC,IAAI,GAAG;AAAoB,CAAC,KAAK;EAC5E,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAM,IAAAC,yBAAc,EAAC,CAAC;EAE9C,IAAI,CAACD,WAAW,EAAE;IACd,OAAOE,SAAS;EACpB;EAEA,MAAMC,WAAwB,GAAG;IAC7BC,OAAO,EAAE;MACLC,aAAa,EAAE,UAAUL,WAAW;IACxC,CAAC;IACDM,MAAM,EAAE;EACZ,CAAC;EAED,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CACxBb,GAAG,CAACc,OAAO,CAAC,YAAY,EAAEZ,MAAM,CAAC,CAC5BY,OAAO,CAAC,UAAU,EAAEX,IAAI,CAACY,QAAQ,CAAC,CAAC,CAAC,CACpCD,OAAO,CAAC,UAAU,EAAEV,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEW,QAAQ,CAAC,CAAC,CAAC,EAC1CP,WACJ,CAAC;EAED,IAAII,QAAQ,CAACI,MAAM,KAAK,GAAG,EAAE;IACzB,OAAQ,MAAMJ,QAAQ,CAACK,IAAI,CAAC,CAAC;EACjC;EAEA,OAAOV,SAAS;AACpB,CAAC;AAACW,OAAA,CAAAjB,QAAA,GAAAA,QAAA","ignoreList":[]}
1
+ {"version":3,"file":"get.js","names":["_chaynsApi","require","_url","getSites","search","skip","take","shouldUseQa","accessToken","getAccessToken","undefined","requestInit","headers","Authorization","method","url","QA_RELATIONS_BASE_URL","RELATIONS_BASE_URL","response","fetch","replace","toString","status","json","exports"],"sources":["../../../../src/api/site/get.ts"],"sourcesContent":["import { getAccessToken } from 'chayns-api';\nimport { SiteEntryResult } from '../../types/personFinder';\nimport { QA_RELATIONS_BASE_URL, RELATIONS_BASE_URL } from '../../constants/url';\n\ninterface GetSiteResult {\n count: number;\n list: SiteEntryResult[];\n}\n\ninterface GetSitesOptions {\n search: string;\n skip: number;\n take?: number;\n shouldUseQa: boolean;\n}\n\nexport const getSites = async ({ search, skip, take = 20, shouldUseQa }: GetSitesOptions) => {\n const { accessToken } = await getAccessToken();\n\n if (!accessToken) {\n return undefined;\n }\n\n const requestInit: RequestInit = {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n method: 'GET',\n };\n\n const url = `${shouldUseQa ? QA_RELATIONS_BASE_URL : RELATIONS_BASE_URL}location/?query=##search##&skip=##skip##&take=##take##&includeDomains=true`;\n\n const response = await fetch(\n url\n .replace('##search##', search)\n .replace('##skip##', skip.toString())\n .replace('##take##', take?.toString()),\n requestInit,\n );\n\n if (response.status === 200) {\n return (await response.json()) as GetSiteResult;\n }\n\n return undefined;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAAC,IAAA,GAAAD,OAAA;AAcO,MAAME,QAAQ,GAAG,MAAAA,CAAO;EAAEC,MAAM;EAAEC,IAAI;EAAEC,IAAI,GAAG,EAAE;EAAEC;AAA6B,CAAC,KAAK;EACzF,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAM,IAAAC,yBAAc,EAAC,CAAC;EAE9C,IAAI,CAACD,WAAW,EAAE;IACd,OAAOE,SAAS;EACpB;EAEA,MAAMC,WAAwB,GAAG;IAC7BC,OAAO,EAAE;MACLC,aAAa,EAAE,UAAUL,WAAW;IACxC,CAAC;IACDM,MAAM,EAAE;EACZ,CAAC;EAED,MAAMC,GAAG,GAAG,GAAGR,WAAW,GAAGS,0BAAqB,GAAGC,uBAAkB,4EAA4E;EAEnJ,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CACxBJ,GAAG,CACEK,OAAO,CAAC,YAAY,EAAEhB,MAAM,CAAC,CAC7BgB,OAAO,CAAC,UAAU,EAAEf,IAAI,CAACgB,QAAQ,CAAC,CAAC,CAAC,CACpCD,OAAO,CAAC,UAAU,EAAEd,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEe,QAAQ,CAAC,CAAC,CAAC,EAC1CV,WACJ,CAAC;EAED,IAAIO,QAAQ,CAACI,MAAM,KAAK,GAAG,EAAE;IACzB,OAAQ,MAAMJ,QAAQ,CAACK,IAAI,CAAC,CAAC;EACjC;EAEA,OAAOb,SAAS;AACpB,CAAC;AAACc,OAAA,CAAArB,QAAA,GAAAA,QAAA","ignoreList":[]}
@@ -45,6 +45,7 @@ const PersonFinderProvider = ({
45
45
  defaultEntries,
46
46
  excludedEntryIds,
47
47
  shouldShowOwnUser = false,
48
+ shouldUseQa,
48
49
  uacFilter,
49
50
  entries,
50
51
  relationMode
@@ -135,7 +136,8 @@ const PersonFinderProvider = ({
135
136
  skipMap: {
136
137
  [key]: current.skip
137
138
  },
138
- relationMode
139
+ relationMode,
140
+ shouldUseQa
139
141
  }).then(result => {
140
142
  const newData = result === null || result === void 0 ? void 0 : result[key];
141
143
  if (newData) {
@@ -144,7 +146,7 @@ const PersonFinderProvider = ({
144
146
  }).finally(() => {
145
147
  updateLoadingState(key, _personFinder.LoadingState.Success);
146
148
  });
147
- }, [appendData, data, getPagedUsersByGroups, relationMode, search, updateLoadingState]);
149
+ }, [appendData, data, getPagedUsersByGroups, relationMode, search, shouldUseQa, updateLoadingState]);
148
150
  const addFriend = (0, _react.useCallback)(personId => {
149
151
  void (0, _post.postFriends)(personId).then(result => {
150
152
  if (result) {
@@ -197,6 +199,8 @@ const PersonFinderProvider = ({
197
199
  }, [filterTypes]);
198
200
  const latestArgsRef = (0, _react.useRef)(null);
199
201
  const latestHandledRequestRef = (0, _react.useRef)(0);
202
+ const searchLocalRef = (0, _react.useRef)(() => {});
203
+ const searchDataRef = (0, _react.useRef)(() => {});
200
204
  const throttledRequest = (0, _react.useRef)((0, _lodash.default)(async () => {
201
205
  const args = latestArgsRef.current;
202
206
  if (!args) return;
@@ -212,7 +216,8 @@ const PersonFinderProvider = ({
212
216
  searchString,
213
217
  filter,
214
218
  skipMap: {},
215
- relationMode
219
+ relationMode,
220
+ shouldUseQa
216
221
  });
217
222
  if (requestTimestamp < latestHandledRequestRef.current) {
218
223
  return;
@@ -242,10 +247,7 @@ const PersonFinderProvider = ({
242
247
  }, THROTTLE_INTERVAL, {
243
248
  leading: false,
244
249
  trailing: true
245
- })).current;
246
- (0, _react.useEffect)(() => {
247
- dataRef.current = data;
248
- }, [data]);
250
+ }));
249
251
  const searchData = (0, _react.useCallback)(({
250
252
  filter
251
253
  }) => {
@@ -289,26 +291,69 @@ const PersonFinderProvider = ({
289
291
  });
290
292
  updateLoadingState(_personFinder.PersonFinderFilterTypes.PERSON, searchedUsers.length === 0 ? _personFinder.LoadingState.Error : _personFinder.LoadingState.Success);
291
293
  }, [entries, search, uacUsers, updateData, updateLoadingState]);
294
+ (0, _react.useEffect)(() => {
295
+ dataRef.current = data;
296
+ }, [data]);
297
+ (0, _react.useEffect)(() => {
298
+ searchLocalRef.current = searchLocal;
299
+ }, [searchLocal]);
300
+ (0, _react.useEffect)(() => {
301
+ searchDataRef.current = searchData;
302
+ }, [searchData]);
292
303
  (0, _react.useEffect)(() => {
293
304
  if (!search) return;
294
- const active = activeFilter ?? filterTypes;
305
+ const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;
306
+ const currentData = dataRef.current;
295
307
  if (uacFilter || entries) {
296
- searchLocal();
308
+ searchLocalRef.current();
297
309
  } else if (active !== null && active !== void 0 && active.includes(_personFinder.PersonFinderFilterTypes.UAC)) {
298
- searchData({
310
+ searchDataRef.current({
299
311
  filter: [_personFinder.PersonFinderFilterTypes.UAC]
300
312
  });
301
313
  } else {
314
+ // Only load filters that don't have data for this search yet
315
+ const filtersToLoad = active.filter(filter => {
316
+ const filterData = currentData === null || currentData === void 0 ? void 0 : currentData[filter];
317
+ return !filterData || filterData.searchString !== search;
318
+ });
319
+
320
+ // If we have filters to load, use them; otherwise use all active filters
321
+ const filterList = filtersToLoad.length > 0 ? filtersToLoad : active;
302
322
  latestArgsRef.current = {
303
323
  search,
304
- filter: active
324
+ filter: filterList
305
325
  };
306
- throttledRequest();
326
+ throttledRequest.current();
307
327
  }
308
- }, [filterTypes, search, activeFilter, friends, friendsPriority, updateData, updateLoadingState, throttledRequest, searchData, uacFilter, searchLocal, entries]);
328
+ }, [search, uacFilter, entries]);
329
+
330
+ // Handle filter changes - load missing data for newly selected filters
331
+ (0, _react.useEffect)(() => {
332
+ if (!search) return;
333
+ const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;
334
+ const currentData = dataRef.current;
335
+
336
+ // Check which filters need to be loaded (don't have data for current search)
337
+ const missingFilters = active.filter(filter => {
338
+ const filterData = currentData === null || currentData === void 0 ? void 0 : currentData[filter];
339
+ // If no data or data is from a different search, we need to load it
340
+ return !filterData || filterData.searchString !== search;
341
+ });
342
+ if (missingFilters.length === 0) return;
343
+ if (uacFilter || entries) return;
344
+ if (active !== null && active !== void 0 && active.includes(_personFinder.PersonFinderFilterTypes.UAC)) return;
345
+
346
+ // Load only the missing filters
347
+ latestArgsRef.current = {
348
+ search,
349
+ filter: missingFilters
350
+ };
351
+ throttledRequest.current();
352
+ }, [activeFilter, search, uacFilter, entries, filterTypes]);
309
353
  (0, _react.useEffect)(() => () => {
310
- throttledRequest.cancel();
311
- }, [throttledRequest]);
354
+ var _throttledRequest$cur;
355
+ (_throttledRequest$cur = throttledRequest.current) === null || _throttledRequest$cur === void 0 || _throttledRequest$cur.cancel();
356
+ }, []);
312
357
 
313
358
  // load initial data
314
359
  (0, _react.useEffect)(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"PersonFinderProvider.js","names":["_react","_interopRequireWildcard","require","_lodash","_interopRequireDefault","_personFinder","_get","_post","_delete","_personFinder2","_uac","_textstring","_textStrings","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","THROTTLE_INTERVAL","PAGE_SIZE","PersonFinderContext","exports","createContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","relationMode","displayName","usePersonFinder","useContext","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","getPagedUsersByGroups","useCallback","getUsersByGroups","setData","useState","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PersonFinderFilterTypes","PERSON","LoadingState","None","SITE","dataRef","useRef","filter","key","newData","prevState","appendData","_prevState$key","_prevState$key2","oldEntries","state","prev","value","Pending","current","Error","RelationMode","groupId","skip","take","then","result","users","count","length","searchString","finally","Success","loadData","skipMap","personId","postFriends","firstName","lastName","verificationState","isVerified","commonSites","type","deleteFriends","wasSuccessful","useEffect","includes","getFriends","latestArgsRef","latestHandledRequestRef","throttledRequest","throttle","args","requestTimestamp","Date","now","forEach","keyString","Priority","HIGH","friendIds","Set","serverFriendEntries","entry","serverFriendIds","missingFriends","_f$firstName","_f$lastName","toLowerCase","otherEntries","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","searchLocal","searchedUsers","entriesToSearch","_entry$firstName","_entry$lastName","Boolean","join","trim","push","active","UAC","cancel","person","getUACGroups","uac","providerValue","useMemo","filterDataByKeys","createElement","Provider","TextstringProvider","libraryName","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","_default"],"sources":["../../../src/components/PersonFinderProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n Dispatch,\n FC,\n ReactNode,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport throttle from 'lodash.throttle';\nimport {\n DefaultEntry,\n LoadingState,\n LoadingStateMap,\n PersonEntry,\n PersonFinderData,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n ThrottledFunction,\n UACEntry,\n UACFilter,\n} from '../types/personFinder';\nimport { getFriends } from '../api/friends/get';\nimport { postFriends } from '../api/friends/post';\nimport { deleteFriends } from '../api/friends/delete';\nimport { filterDataByKeys, loadData } from '../utils/personFinder';\nimport { Tag } from '@chayns-components/core/lib/types/types/tagInput';\nimport { getUACGroups, getUsersByGroups } from '../utils/uac';\nimport { TextstringProvider } from '@chayns-components/textstring';\nimport { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\nconst THROTTLE_INTERVAL = 500;\nconst PAGE_SIZE = 20;\n\ntype GetUsersByGroupsResult = {\n users: PersonEntry[];\n count: number;\n};\n\nexport interface IPersonFinderContext {\n // Data\n data?: { [key: string]: PersonFinderData };\n updateData?: (key: PersonFinderFilterTypes, personFinderData: PersonFinderData) => void;\n\n // Tags\n tags?: Tag[];\n setTags?: Dispatch<SetStateAction<Tag[]>>;\n\n // Friends\n friends?: PersonEntry[];\n addFriend?: (personId: string) => void;\n removeFriend?: (personId: string) => void;\n\n // Filter\n activeFilter?: PersonFinderFilterTypes[];\n updateActiveFilter?: (filter: PersonFinderFilterTypes[]) => void;\n\n // Search\n search?: string;\n updateSearch?: (value: string) => void;\n\n // Loading\n loadMore?: (key: PersonFinderFilterTypes) => void;\n loadingState?: LoadingStateMap;\n updateLoadingState?: (key: PersonFinderFilterTypes, state: LoadingState) => void;\n\n relationMode?: RelationMode;\n}\n\nexport const PersonFinderContext = createContext<IPersonFinderContext>({\n data: undefined,\n updateData: undefined,\n friends: undefined,\n addFriend: undefined,\n removeFriend: undefined,\n activeFilter: undefined,\n updateActiveFilter: undefined,\n search: undefined,\n updateSearch: undefined,\n loadMore: undefined,\n loadingState: undefined,\n updateLoadingState: undefined,\n tags: undefined,\n setTags: undefined,\n relationMode: undefined,\n});\n\nPersonFinderContext.displayName = 'PersonFinderContext';\n\nexport const usePersonFinder = () => useContext(PersonFinderContext);\n\ntype PersonFinderProviderProps = {\n children: ReactNode;\n friendsPriority: Priority;\n filterTypes: PersonFinderFilterTypes[];\n defaultEntries?: DefaultEntry[];\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n uacFilter?: UACFilter[];\n entries?: PersonEntry[];\n relationMode?: RelationMode;\n};\n\nconst PersonFinderProvider: FC<PersonFinderProviderProps> = ({\n children,\n friendsPriority,\n filterTypes,\n defaultEntries,\n excludedEntryIds,\n shouldShowOwnUser = false,\n uacFilter,\n entries,\n relationMode,\n}) => {\n const getPagedUsersByGroups = useCallback(\n getUsersByGroups as unknown as (\n uacFilter: UACFilter[],\n options?: { skip?: number; take?: number },\n ) => Promise<GetUsersByGroupsResult>,\n [],\n );\n\n const [data, setData] = useState<IPersonFinderContext['data']>();\n const [friends, setFriends] = useState<PersonEntry[]>();\n const [uacUsers, setUacUsers] = useState<PersonEntry[]>();\n const [activeFilter, setActiveFilter] = useState<IPersonFinderContext['activeFilter']>();\n const [search, setSearch] = useState('');\n const [tags, setTags] = useState<Tag[]>(\n defaultEntries?.map(({ id, name }) => ({ id, text: name })) ?? [],\n );\n const [loadingState, setLoadingState] = useState<LoadingStateMap>({\n [PersonFinderFilterTypes.PERSON]: LoadingState.None,\n [PersonFinderFilterTypes.SITE]: LoadingState.None,\n });\n\n const dataRef = useRef<IPersonFinderContext['data']>();\n\n const updateActiveFilter = useCallback((filter: IPersonFinderContext['activeFilter']) => {\n setActiveFilter(filter);\n }, []);\n\n const updateData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => ({ ...prevState, [key]: newData }));\n }, []);\n\n const appendData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => {\n const oldEntries = prevState && prevState[key]?.entries ? prevState[key]?.entries : [];\n\n return {\n ...prevState,\n [key]: {\n ...newData,\n entries: [...oldEntries, ...newData.entries],\n },\n };\n });\n }, []);\n\n const updateLoadingState = useCallback((key: PersonFinderFilterTypes, state: LoadingState) => {\n setLoadingState((prev) => ({\n ...prev,\n [key]: state,\n }));\n }, []);\n\n const updateSearch = useCallback((value: string) => {\n setSearch(value);\n }, []);\n\n const loadMore = useCallback(\n (key: PersonFinderFilterTypes) => {\n updateLoadingState(key, LoadingState.Pending);\n\n const current = data?.[key];\n\n if (!current) {\n updateLoadingState(key, LoadingState.Error);\n\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n key === PersonFinderFilterTypes.PERSON &&\n search === ''\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], {\n skip: current.skip,\n take: PAGE_SIZE,\n })\n .then((result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n if (users.length > 0) {\n appendData(key, {\n entries: users,\n searchString: '',\n skip: current.skip + users.length,\n count,\n });\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n\n return;\n }\n\n void loadData({\n searchString: search ?? '',\n filter: [key],\n skipMap: { [key]: current.skip },\n relationMode,\n })\n .then((result) => {\n const newData = result?.[key];\n\n if (newData) {\n appendData(key, newData);\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n },\n [appendData, data, getPagedUsersByGroups, relationMode, search, updateLoadingState],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n relationMode,\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n ).current;\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter ?? filterTypes;\n\n if (uacFilter || entries) {\n searchLocal();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchData({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n latestArgsRef.current = { search, filter: active };\n\n throttledRequest();\n }\n }, [\n filterTypes,\n search,\n activeFilter,\n friends,\n friendsPriority,\n updateData,\n updateLoadingState,\n throttledRequest,\n searchData,\n uacFilter,\n searchLocal,\n entries,\n ]);\n\n useEffect(\n () => () => {\n throttledRequest.cancel();\n },\n [throttledRequest],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON)\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], { skip: 0, take: PAGE_SIZE }).then(\n (result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n setData({\n person: {\n entries: users,\n searchString: '',\n skip: users.length,\n count,\n },\n });\n },\n );\n }\n\n if (uacFilter) {\n void getPagedUsersByGroups(uacFilter).then((result: GetUsersByGroupsResult) => {\n const { users } = result;\n\n setUacUsers(users);\n });\n\n return;\n }\n\n if (filterTypes.includes(PersonFinderFilterTypes.UAC) && search === '') {\n void getUACGroups().then((result) => {\n setData({\n uac: {\n entries: result,\n searchString: '',\n skip: result.length,\n count: result.length,\n },\n });\n });\n }\n\n if (\n friendsPriority === Priority.HIGH &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friends &&\n search === ''\n ) {\n setData({\n person: {\n entries: friends,\n searchString: '',\n skip: friends.length,\n count: friends.length,\n },\n });\n }\n }, [\n entries,\n filterTypes,\n friends,\n friendsPriority,\n getPagedUsersByGroups,\n relationMode,\n search,\n uacFilter,\n ]);\n\n const providerValue = useMemo<IPersonFinderContext>(\n () => ({\n data: filterDataByKeys(data, activeFilter, {\n excludedEntryIds,\n shouldShowOwnUser: uacFilter ? false : shouldShowOwnUser,\n }),\n updateData,\n activeFilter,\n updateActiveFilter,\n friends,\n addFriend,\n removeFriend,\n search,\n updateSearch,\n loadMore,\n loadingState,\n updateLoadingState,\n setTags,\n tags,\n relationMode,\n }),\n [\n activeFilter,\n addFriend,\n data,\n excludedEntryIds,\n friends,\n loadMore,\n loadingState,\n removeFriend,\n search,\n shouldShowOwnUser,\n tags,\n uacFilter,\n updateActiveFilter,\n updateData,\n updateLoadingState,\n updateSearch,\n relationMode,\n ],\n );\n\n return (\n <PersonFinderContext.Provider value={providerValue}>\n <TextstringProvider libraryName={PERSON_FINDER_TEXTSTRING_LIBRARY_NAME}>\n {children}\n </TextstringProvider>\n </PersonFinderContext.Provider>\n );\n};\n\nPersonFinderProvider.displayName = 'PersonFinderProvider';\n\nexport default PersonFinderProvider;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PersonFinderProvider.js","names":["_react","_interopRequireWildcard","require","_lodash","_interopRequireDefault","_personFinder","_get","_post","_delete","_personFinder2","_uac","_textstring","_textStrings","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","THROTTLE_INTERVAL","PAGE_SIZE","PersonFinderContext","exports","createContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","relationMode","displayName","usePersonFinder","useContext","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","shouldUseQa","uacFilter","entries","getPagedUsersByGroups","useCallback","getUsersByGroups","setData","useState","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PersonFinderFilterTypes","PERSON","LoadingState","None","SITE","dataRef","useRef","filter","key","newData","prevState","appendData","_prevState$key","_prevState$key2","oldEntries","state","prev","value","Pending","current","Error","RelationMode","groupId","skip","take","then","result","users","count","length","searchString","finally","Success","loadData","skipMap","personId","postFriends","firstName","lastName","verificationState","isVerified","commonSites","type","deleteFriends","wasSuccessful","useEffect","includes","getFriends","latestArgsRef","latestHandledRequestRef","searchLocalRef","searchDataRef","throttledRequest","throttle","args","requestTimestamp","Date","now","forEach","keyString","Priority","HIGH","friendIds","Set","serverFriendEntries","entry","serverFriendIds","missingFriends","_f$firstName","_f$lastName","toLowerCase","otherEntries","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","searchLocal","searchedUsers","entriesToSearch","_entry$firstName","_entry$lastName","Boolean","join","trim","push","active","currentData","UAC","filtersToLoad","filterData","filterList","missingFilters","_throttledRequest$cur","cancel","person","getUACGroups","uac","providerValue","useMemo","filterDataByKeys","createElement","Provider","TextstringProvider","libraryName","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","_default"],"sources":["../../../src/components/PersonFinderProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n Dispatch,\n FC,\n ReactNode,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport throttle from 'lodash.throttle';\nimport {\n DefaultEntry,\n LoadingState,\n LoadingStateMap,\n PersonEntry,\n PersonFinderData,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n ThrottledFunction,\n UACEntry,\n UACFilter,\n} from '../types/personFinder';\nimport { getFriends } from '../api/friends/get';\nimport { postFriends } from '../api/friends/post';\nimport { deleteFriends } from '../api/friends/delete';\nimport { filterDataByKeys, loadData } from '../utils/personFinder';\nimport { Tag } from '@chayns-components/core/lib/types/types/tagInput';\nimport { getUACGroups, getUsersByGroups } from '../utils/uac';\nimport { TextstringProvider } from '@chayns-components/textstring';\nimport { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\nconst THROTTLE_INTERVAL = 500;\nconst PAGE_SIZE = 20;\n\ntype GetUsersByGroupsResult = {\n users: PersonEntry[];\n count: number;\n};\n\nexport interface IPersonFinderContext {\n // Data\n data?: { [key: string]: PersonFinderData };\n updateData?: (key: PersonFinderFilterTypes, personFinderData: PersonFinderData) => void;\n\n // Tags\n tags?: Tag[];\n setTags?: Dispatch<SetStateAction<Tag[]>>;\n\n // Friends\n friends?: PersonEntry[];\n addFriend?: (personId: string) => void;\n removeFriend?: (personId: string) => void;\n\n // Filter\n activeFilter?: PersonFinderFilterTypes[];\n updateActiveFilter?: (filter: PersonFinderFilterTypes[]) => void;\n\n // Search\n search?: string;\n updateSearch?: (value: string) => void;\n\n // Loading\n loadMore?: (key: PersonFinderFilterTypes) => void;\n loadingState?: LoadingStateMap;\n updateLoadingState?: (key: PersonFinderFilterTypes, state: LoadingState) => void;\n\n relationMode?: RelationMode;\n}\n\nexport const PersonFinderContext = createContext<IPersonFinderContext>({\n data: undefined,\n updateData: undefined,\n friends: undefined,\n addFriend: undefined,\n removeFriend: undefined,\n activeFilter: undefined,\n updateActiveFilter: undefined,\n search: undefined,\n updateSearch: undefined,\n loadMore: undefined,\n loadingState: undefined,\n updateLoadingState: undefined,\n tags: undefined,\n setTags: undefined,\n relationMode: undefined,\n});\n\nPersonFinderContext.displayName = 'PersonFinderContext';\n\nexport const usePersonFinder = () => useContext(PersonFinderContext);\n\ntype PersonFinderProviderProps = {\n children: ReactNode;\n friendsPriority: Priority;\n filterTypes: PersonFinderFilterTypes[];\n defaultEntries?: DefaultEntry[];\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n uacFilter?: UACFilter[];\n entries?: PersonEntry[];\n relationMode?: RelationMode;\n shouldUseQa: boolean;\n};\n\nconst PersonFinderProvider: FC<PersonFinderProviderProps> = ({\n children,\n friendsPriority,\n filterTypes,\n defaultEntries,\n excludedEntryIds,\n shouldShowOwnUser = false,\n shouldUseQa,\n uacFilter,\n entries,\n relationMode,\n}) => {\n const getPagedUsersByGroups = useCallback(\n getUsersByGroups as unknown as (\n uacFilter: UACFilter[],\n options?: { skip?: number; take?: number },\n ) => Promise<GetUsersByGroupsResult>,\n [],\n );\n\n const [data, setData] = useState<IPersonFinderContext['data']>();\n const [friends, setFriends] = useState<PersonEntry[]>();\n const [uacUsers, setUacUsers] = useState<PersonEntry[]>();\n const [activeFilter, setActiveFilter] = useState<IPersonFinderContext['activeFilter']>();\n const [search, setSearch] = useState('');\n const [tags, setTags] = useState<Tag[]>(\n defaultEntries?.map(({ id, name }) => ({ id, text: name })) ?? [],\n );\n const [loadingState, setLoadingState] = useState<LoadingStateMap>({\n [PersonFinderFilterTypes.PERSON]: LoadingState.None,\n [PersonFinderFilterTypes.SITE]: LoadingState.None,\n });\n\n const dataRef = useRef<IPersonFinderContext['data']>();\n\n const updateActiveFilter = useCallback((filter: IPersonFinderContext['activeFilter']) => {\n setActiveFilter(filter);\n }, []);\n\n const updateData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => ({ ...prevState, [key]: newData }));\n }, []);\n\n const appendData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => {\n const oldEntries = prevState && prevState[key]?.entries ? prevState[key]?.entries : [];\n\n return {\n ...prevState,\n [key]: {\n ...newData,\n entries: [...oldEntries, ...newData.entries],\n },\n };\n });\n }, []);\n\n const updateLoadingState = useCallback((key: PersonFinderFilterTypes, state: LoadingState) => {\n setLoadingState((prev) => ({\n ...prev,\n [key]: state,\n }));\n }, []);\n\n const updateSearch = useCallback((value: string) => {\n setSearch(value);\n }, []);\n\n const loadMore = useCallback(\n (key: PersonFinderFilterTypes) => {\n updateLoadingState(key, LoadingState.Pending);\n\n const current = data?.[key];\n\n if (!current) {\n updateLoadingState(key, LoadingState.Error);\n\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n key === PersonFinderFilterTypes.PERSON &&\n search === ''\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], {\n skip: current.skip,\n take: PAGE_SIZE,\n })\n .then((result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n if (users.length > 0) {\n appendData(key, {\n entries: users,\n searchString: '',\n skip: current.skip + users.length,\n count,\n });\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n\n return;\n }\n\n void loadData({\n searchString: search ?? '',\n filter: [key],\n skipMap: { [key]: current.skip },\n relationMode,\n shouldUseQa,\n })\n .then((result) => {\n const newData = result?.[key];\n\n if (newData) {\n appendData(key, newData);\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n },\n [\n appendData,\n data,\n getPagedUsersByGroups,\n relationMode,\n search,\n shouldUseQa,\n updateLoadingState,\n ],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n const searchLocalRef = useRef<() => void>(() => {});\n const searchDataRef = useRef<({ filter }: { filter: PersonFinderFilterTypes[] }) => void>(\n () => {},\n );\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n relationMode,\n shouldUseQa,\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n );\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n useEffect(() => {\n searchLocalRef.current = searchLocal;\n }, [searchLocal]);\n\n useEffect(() => {\n searchDataRef.current = searchData;\n }, [searchData]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;\n const currentData = dataRef.current;\n\n if (uacFilter || entries) {\n searchLocalRef.current();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchDataRef.current({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n // Only load filters that don't have data for this search yet\n const filtersToLoad = active.filter((filter) => {\n const filterData = currentData?.[filter];\n return !filterData || filterData.searchString !== search;\n });\n\n // If we have filters to load, use them; otherwise use all active filters\n const filterList = filtersToLoad.length > 0 ? filtersToLoad : active;\n\n latestArgsRef.current = { search, filter: filterList };\n\n throttledRequest.current();\n }\n }, [search, uacFilter, entries]);\n\n // Handle filter changes - load missing data for newly selected filters\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;\n const currentData = dataRef.current;\n\n // Check which filters need to be loaded (don't have data for current search)\n const missingFilters = active.filter((filter) => {\n const filterData = currentData?.[filter];\n // If no data or data is from a different search, we need to load it\n return !filterData || filterData.searchString !== search;\n });\n\n if (missingFilters.length === 0) return;\n if (uacFilter || entries) return;\n if (active?.includes(PersonFinderFilterTypes.UAC)) return;\n\n // Load only the missing filters\n latestArgsRef.current = { search, filter: missingFilters };\n throttledRequest.current();\n }, [activeFilter, search, uacFilter, entries, filterTypes]);\n\n useEffect(\n () => () => {\n throttledRequest.current?.cancel();\n },\n [],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON)\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], { skip: 0, take: PAGE_SIZE }).then(\n (result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n setData({\n person: {\n entries: users,\n searchString: '',\n skip: users.length,\n count,\n },\n });\n },\n );\n }\n\n if (uacFilter) {\n void getPagedUsersByGroups(uacFilter).then((result: GetUsersByGroupsResult) => {\n const { users } = result;\n\n setUacUsers(users);\n });\n\n return;\n }\n\n if (filterTypes.includes(PersonFinderFilterTypes.UAC) && search === '') {\n void getUACGroups().then((result) => {\n setData({\n uac: {\n entries: result,\n searchString: '',\n skip: result.length,\n count: result.length,\n },\n });\n });\n }\n\n if (\n friendsPriority === Priority.HIGH &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friends &&\n search === ''\n ) {\n setData({\n person: {\n entries: friends,\n searchString: '',\n skip: friends.length,\n count: friends.length,\n },\n });\n }\n }, [\n entries,\n filterTypes,\n friends,\n friendsPriority,\n getPagedUsersByGroups,\n relationMode,\n search,\n uacFilter,\n ]);\n\n const providerValue = useMemo<IPersonFinderContext>(\n () => ({\n data: filterDataByKeys(data, activeFilter, {\n excludedEntryIds,\n shouldShowOwnUser: uacFilter ? false : shouldShowOwnUser,\n }),\n updateData,\n activeFilter,\n updateActiveFilter,\n friends,\n addFriend,\n removeFriend,\n search,\n updateSearch,\n loadMore,\n loadingState,\n updateLoadingState,\n setTags,\n tags,\n relationMode,\n }),\n [\n activeFilter,\n addFriend,\n data,\n excludedEntryIds,\n friends,\n loadMore,\n loadingState,\n removeFriend,\n search,\n shouldShowOwnUser,\n tags,\n uacFilter,\n updateActiveFilter,\n updateData,\n updateLoadingState,\n updateSearch,\n relationMode,\n ],\n );\n\n return (\n <PersonFinderContext.Provider value={providerValue}>\n <TextstringProvider libraryName={PERSON_FINDER_TEXTSTRING_LIBRARY_NAME}>\n {children}\n </TextstringProvider>\n </PersonFinderContext.Provider>\n );\n};\n\nPersonFinderProvider.displayName = 'PersonFinderProvider';\n\nexport default PersonFinderProvider;\n"],"mappings":"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","ignoreList":[]}
@@ -28,6 +28,7 @@ const PersonFinder = /*#__PURE__*/(0, _react.forwardRef)(({
28
28
  onDropdownHide,
29
29
  onDropdownShow,
30
30
  onRemove,
31
+ shouldUseQa = false,
31
32
  placeholder = 'Person oder Site finden',
32
33
  shouldAllowMultiple = true,
33
34
  shouldHideResultsOnAdd = !shouldAllowMultiple || false,
@@ -50,6 +51,7 @@ const PersonFinder = /*#__PURE__*/(0, _react.forwardRef)(({
50
51
  excludedEntryIds: excludedEntryIds,
51
52
  shouldShowOwnUser: shouldShowOwnUser,
52
53
  uacFilter: uacFilter,
54
+ shouldUseQa: shouldUseQa,
53
55
  entries: entries,
54
56
  relationMode: relationMode
55
57
  }, /*#__PURE__*/_react.default.createElement(_core.AreaProvider, {
@@ -1 +1 @@
1
- {"version":3,"file":"PersonFinder.js","names":["_react","_interopRequireWildcard","require","_personFinder","_PersonFinderProvider","_interopRequireDefault","_PersonFinderWrapper","_core","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_FILTER_TYPES","PersonFinderFilterTypes","PERSON","SITE","PersonFinder","forwardRef","container","dropdownDirection","defaultEntries","excludedEntryIds","relationMode","RelationMode","uacFilter","entries","filterTypes","friendsPriority","Priority","NORMAL","HIGH","leftElement","maxEntries","onAdd","onDropdownHide","onDropdownShow","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldShowOwnUser","shouldDisableRemove","shouldRenderInline","ref","personFinderRef","useRef","innerRef","useImperativeHandle","clear","_innerRef$current","current","createElement","AreaProvider","shouldChangeColor","shouldDisableListItemPadding","className","displayName","_default","exports"],"sources":["../../../../src/components/person-finder/PersonFinder.tsx"],"sourcesContent":["import React, { forwardRef, useImperativeHandle, useRef } from 'react';\nimport {\n DefaultEntry,\n PersonEntry,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n UACFilter,\n} from '../../types/personFinder';\nimport PersonFinderProvider from '../PersonFinderProvider';\nimport PersonFinderWrapper, {\n PersonFinderRef,\n PersonFinderWrapperProps,\n} from './person-finder-wrapper/PersonFinderWrapper';\nimport { AreaProvider } from '@chayns-components/core';\n\nconst DEFAULT_FILTER_TYPES = [PersonFinderFilterTypes.PERSON, PersonFinderFilterTypes.SITE];\n\nexport type PersonFinderProps = PersonFinderWrapperProps & {\n /**\n * Sites and persons that are selected by default.\n */\n defaultEntries?: DefaultEntry[];\n /**\n * Entry ids to exclude from the results\n */\n excludedEntryIds?: PersonFinderEntry['id'][];\n /**\n * Whether the own user should be shown in the results. By default, it is not shown.\n */\n shouldShowOwnUser?: boolean;\n /**\n * Optional filter to search member of uac group. Only works with groups of the current Site and if the user is manager.\n */\n uacFilter?: UACFilter[];\n /**\n * A list of entries that should be searched.\n */\n entries?: PersonEntry[];\n};\n\nconst PersonFinder = forwardRef<PersonFinderRef, PersonFinderProps>(\n (\n {\n container,\n dropdownDirection,\n defaultEntries,\n excludedEntryIds,\n relationMode = RelationMode.PERSON,\n uacFilter,\n entries,\n filterTypes = uacFilter || entries\n ? [PersonFinderFilterTypes.PERSON]\n : DEFAULT_FILTER_TYPES,\n friendsPriority = relationMode === RelationMode.SITE ? Priority.NORMAL : Priority.HIGH,\n leftElement,\n maxEntries,\n onAdd,\n onDropdownHide,\n onDropdownShow,\n onRemove,\n placeholder = 'Person oder Site finden',\n shouldAllowMultiple = true,\n shouldHideResultsOnAdd = !shouldAllowMultiple || false,\n shouldShowOwnUser = false,\n shouldDisableRemove = false,\n shouldRenderInline = false,\n },\n ref,\n ) => {\n const personFinderRef = useRef<HTMLDivElement>(null);\n const innerRef = useRef<PersonFinderRef>(null);\n\n useImperativeHandle(ref, () => ({\n clear: () => innerRef.current?.clear(),\n }));\n\n return (\n <PersonFinderProvider\n friendsPriority={friendsPriority}\n defaultEntries={defaultEntries}\n filterTypes={filterTypes}\n excludedEntryIds={excludedEntryIds}\n shouldShowOwnUser={shouldShowOwnUser}\n uacFilter={uacFilter}\n entries={entries}\n relationMode={relationMode}\n >\n <AreaProvider shouldChangeColor={false} shouldDisableListItemPadding>\n <div className=\"beta-chayns-person-finder\" ref={personFinderRef}>\n <PersonFinderWrapper\n ref={innerRef}\n container={container}\n dropdownDirection={dropdownDirection}\n filterTypes={filterTypes}\n maxEntries={maxEntries}\n onAdd={onAdd}\n relationMode={relationMode}\n shouldDisableRemove={shouldDisableRemove}\n onDropdownHide={onDropdownHide}\n onDropdownShow={onDropdownShow}\n leftElement={leftElement}\n onRemove={onRemove}\n placeholder={placeholder}\n shouldAllowMultiple={shouldAllowMultiple}\n shouldHideResultsOnAdd={shouldHideResultsOnAdd}\n shouldRenderInline={shouldRenderInline}\n />\n </div>\n </AreaProvider>\n </PersonFinderProvider>\n );\n },\n);\n\nPersonFinder.displayName = 'PersonFinder';\n\nexport default PersonFinder;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AASA,IAAAE,qBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,oBAAA,GAAAD,sBAAA,CAAAH,OAAA;AAIA,IAAAK,KAAA,GAAAL,OAAA;AAAuD,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAP,wBAAAO,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAX,uBAAA,YAAAA,CAAAO,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAEvD,MAAMgB,oBAAoB,GAAG,CAACC,qCAAuB,CAACC,MAAM,EAAED,qCAAuB,CAACE,IAAI,CAAC;AAyB3F,MAAMC,YAAY,gBAAG,IAAAC,iBAAU,EAC3B,CACI;EACIC,SAAS;EACTC,iBAAiB;EACjBC,cAAc;EACdC,gBAAgB;EAChBC,YAAY,GAAGC,0BAAY,CAACT,MAAM;EAClCU,SAAS;EACTC,OAAO;EACPC,WAAW,GAAGF,SAAS,IAAIC,OAAO,GAC5B,CAACZ,qCAAuB,CAACC,MAAM,CAAC,GAChCF,oBAAoB;EAC1Be,eAAe,GAAGL,YAAY,KAAKC,0BAAY,CAACR,IAAI,GAAGa,sBAAQ,CAACC,MAAM,GAAGD,sBAAQ,CAACE,IAAI;EACtFC,WAAW;EACXC,UAAU;EACVC,KAAK;EACLC,cAAc;EACdC,cAAc;EACdC,QAAQ;EACRC,WAAW,GAAG,yBAAyB;EACvCC,mBAAmB,GAAG,IAAI;EAC1BC,sBAAsB,GAAG,CAACD,mBAAmB,IAAI,KAAK;EACtDE,iBAAiB,GAAG,KAAK;EACzBC,mBAAmB,GAAG,KAAK;EAC3BC,kBAAkB,GAAG;AACzB,CAAC,EACDC,GAAG,KACF;EACD,MAAMC,eAAe,GAAG,IAAAC,aAAM,EAAiB,IAAI,CAAC;EACpD,MAAMC,QAAQ,GAAG,IAAAD,aAAM,EAAkB,IAAI,CAAC;EAE9C,IAAAE,0BAAmB,EAACJ,GAAG,EAAE,OAAO;IAC5BK,KAAK,EAAEA,CAAA;MAAA,IAAAC,iBAAA;MAAA,QAAAA,iBAAA,GAAMH,QAAQ,CAACI,OAAO,cAAAD,iBAAA,uBAAhBA,iBAAA,CAAkBD,KAAK,CAAC,CAAC;IAAA;EAC1C,CAAC,CAAC,CAAC;EAEH,oBACI/D,MAAA,CAAAU,OAAA,CAAAwD,aAAA,CAAC9D,qBAAA,CAAAM,OAAoB;IACjBgC,eAAe,EAAEA,eAAgB;IACjCP,cAAc,EAAEA,cAAe;IAC/BM,WAAW,EAAEA,WAAY;IACzBL,gBAAgB,EAAEA,gBAAiB;IACnCmB,iBAAiB,EAAEA,iBAAkB;IACrChB,SAAS,EAAEA,SAAU;IACrBC,OAAO,EAAEA,OAAQ;IACjBH,YAAY,EAAEA;EAAa,gBAE3BrC,MAAA,CAAAU,OAAA,CAAAwD,aAAA,CAAC3D,KAAA,CAAA4D,YAAY;IAACC,iBAAiB,EAAE,KAAM;IAACC,4BAA4B;EAAA,gBAChErE,MAAA,CAAAU,OAAA,CAAAwD,aAAA;IAAKI,SAAS,EAAC,2BAA2B;IAACZ,GAAG,EAAEC;EAAgB,gBAC5D3D,MAAA,CAAAU,OAAA,CAAAwD,aAAA,CAAC5D,oBAAA,CAAAI,OAAmB;IAChBgD,GAAG,EAAEG,QAAS;IACd5B,SAAS,EAAEA,SAAU;IACrBC,iBAAiB,EAAEA,iBAAkB;IACrCO,WAAW,EAAEA,WAAY;IACzBM,UAAU,EAAEA,UAAW;IACvBC,KAAK,EAAEA,KAAM;IACbX,YAAY,EAAEA,YAAa;IAC3BmB,mBAAmB,EAAEA,mBAAoB;IACzCP,cAAc,EAAEA,cAAe;IAC/BC,cAAc,EAAEA,cAAe;IAC/BJ,WAAW,EAAEA,WAAY;IACzBK,QAAQ,EAAEA,QAAS;IACnBC,WAAW,EAAEA,WAAY;IACzBC,mBAAmB,EAAEA,mBAAoB;IACzCC,sBAAsB,EAAEA,sBAAuB;IAC/CG,kBAAkB,EAAEA;EAAmB,CAC1C,CACA,CACK,CACI,CAAC;AAE/B,CACJ,CAAC;AAED1B,YAAY,CAACwC,WAAW,GAAG,cAAc;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAA/D,OAAA,GAE3BqB,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"PersonFinder.js","names":["_react","_interopRequireWildcard","require","_personFinder","_PersonFinderProvider","_interopRequireDefault","_PersonFinderWrapper","_core","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_FILTER_TYPES","PersonFinderFilterTypes","PERSON","SITE","PersonFinder","forwardRef","container","dropdownDirection","defaultEntries","excludedEntryIds","relationMode","RelationMode","uacFilter","entries","filterTypes","friendsPriority","Priority","NORMAL","HIGH","leftElement","maxEntries","onAdd","onDropdownHide","onDropdownShow","onRemove","shouldUseQa","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldShowOwnUser","shouldDisableRemove","shouldRenderInline","ref","personFinderRef","useRef","innerRef","useImperativeHandle","clear","_innerRef$current","current","createElement","AreaProvider","shouldChangeColor","shouldDisableListItemPadding","className","displayName","_default","exports"],"sources":["../../../../src/components/person-finder/PersonFinder.tsx"],"sourcesContent":["import React, { forwardRef, useImperativeHandle, useRef } from 'react';\nimport {\n DefaultEntry,\n PersonEntry,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n UACFilter,\n} from '../../types/personFinder';\nimport PersonFinderProvider from '../PersonFinderProvider';\nimport PersonFinderWrapper, {\n PersonFinderRef,\n PersonFinderWrapperProps,\n} from './person-finder-wrapper/PersonFinderWrapper';\nimport { AreaProvider } from '@chayns-components/core';\n\nconst DEFAULT_FILTER_TYPES = [PersonFinderFilterTypes.PERSON, PersonFinderFilterTypes.SITE];\n\nexport type PersonFinderProps = PersonFinderWrapperProps & {\n /**\n * Sites and persons that are selected by default.\n */\n defaultEntries?: DefaultEntry[];\n /**\n * Entry ids to exclude from the results\n */\n excludedEntryIds?: PersonFinderEntry['id'][];\n /**\n * Whether the own user should be shown in the results. By default, it is not shown.\n */\n shouldShowOwnUser?: boolean;\n /**\n * Whether the qa relations should be used.\n */\n shouldUseQa?: boolean;\n /**\n * Optional filter to search member of uac group. Only works with groups of the current Site and if the user is manager.\n */\n uacFilter?: UACFilter[];\n /**\n * A list of entries that should be searched.\n */\n entries?: PersonEntry[];\n};\n\nconst PersonFinder = forwardRef<PersonFinderRef, PersonFinderProps>(\n (\n {\n container,\n dropdownDirection,\n defaultEntries,\n excludedEntryIds,\n relationMode = RelationMode.PERSON,\n uacFilter,\n entries,\n filterTypes = uacFilter || entries\n ? [PersonFinderFilterTypes.PERSON]\n : DEFAULT_FILTER_TYPES,\n friendsPriority = relationMode === RelationMode.SITE ? Priority.NORMAL : Priority.HIGH,\n leftElement,\n maxEntries,\n onAdd,\n onDropdownHide,\n onDropdownShow,\n onRemove,\n shouldUseQa = false,\n placeholder = 'Person oder Site finden',\n shouldAllowMultiple = true,\n shouldHideResultsOnAdd = !shouldAllowMultiple || false,\n shouldShowOwnUser = false,\n shouldDisableRemove = false,\n shouldRenderInline = false,\n },\n ref,\n ) => {\n const personFinderRef = useRef<HTMLDivElement>(null);\n const innerRef = useRef<PersonFinderRef>(null);\n\n useImperativeHandle(ref, () => ({\n clear: () => innerRef.current?.clear(),\n }));\n\n return (\n <PersonFinderProvider\n friendsPriority={friendsPriority}\n defaultEntries={defaultEntries}\n filterTypes={filterTypes}\n excludedEntryIds={excludedEntryIds}\n shouldShowOwnUser={shouldShowOwnUser}\n uacFilter={uacFilter}\n shouldUseQa={shouldUseQa}\n entries={entries}\n relationMode={relationMode}\n >\n <AreaProvider shouldChangeColor={false} shouldDisableListItemPadding>\n <div className=\"beta-chayns-person-finder\" ref={personFinderRef}>\n <PersonFinderWrapper\n ref={innerRef}\n container={container}\n dropdownDirection={dropdownDirection}\n filterTypes={filterTypes}\n maxEntries={maxEntries}\n onAdd={onAdd}\n relationMode={relationMode}\n shouldDisableRemove={shouldDisableRemove}\n onDropdownHide={onDropdownHide}\n onDropdownShow={onDropdownShow}\n leftElement={leftElement}\n onRemove={onRemove}\n placeholder={placeholder}\n shouldAllowMultiple={shouldAllowMultiple}\n shouldHideResultsOnAdd={shouldHideResultsOnAdd}\n shouldRenderInline={shouldRenderInline}\n />\n </div>\n </AreaProvider>\n </PersonFinderProvider>\n );\n },\n);\n\nPersonFinder.displayName = 'PersonFinder';\n\nexport default PersonFinder;\n"],"mappings":"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","ignoreList":[]}
@@ -45,6 +45,7 @@ const PersonFinderWrapper = /*#__PURE__*/(0, _react.forwardRef)(({
45
45
  const contentRef = (0, _react.useRef)(null);
46
46
  const keyRef = (0, _react.useRef)(`person-finder-${(0, _uuid.v4)()}`);
47
47
  const tagInputRef = (0, _react.useRef)(null);
48
+ const hasFocusRef = (0, _react.useRef)(false);
48
49
  const {
49
50
  isTouch
50
51
  } = (0, _chaynsApi.useDevice)();
@@ -52,9 +53,11 @@ const PersonFinderWrapper = /*#__PURE__*/(0, _react.forwardRef)(({
52
53
  icons: ['fa fa-search']
53
54
  }));
54
55
  const handleTagInputBlur = (0, _react.useCallback)(() => {
56
+ hasFocusRef.current = false;
55
57
  setIsFocused(false);
56
58
  }, []);
57
59
  const handleTagInputFocus = (0, _react.useCallback)(() => {
60
+ hasFocusRef.current = true;
58
61
  setIsFocused(true);
59
62
  }, []);
60
63
  const handleRemove = (0, _react.useCallback)(id => {
@@ -83,8 +86,8 @@ const PersonFinderWrapper = /*#__PURE__*/(0, _react.forwardRef)(({
83
86
  const handleDropdownOutsideClick = (0, _react.useCallback)(() => {
84
87
  var _tagInputRef$current2;
85
88
  (_tagInputRef$current2 = tagInputRef.current) === null || _tagInputRef$current2 === void 0 || _tagInputRef$current2.blur();
86
- return isFocused && isTouch;
87
- }, [isFocused, isTouch]);
89
+ return hasFocusRef.current && isTouch;
90
+ }, [isTouch]);
88
91
  const handleAdd = (0, _react.useCallback)(id => {
89
92
  if (typeof setTags !== 'function') {
90
93
  return;
@@ -137,8 +140,7 @@ const PersonFinderWrapper = /*#__PURE__*/(0, _react.forwardRef)(({
137
140
  }
138
141
  }, [onDropdownHide, onDropdownShow, shouldShowBody]);
139
142
  const showBody = (0, _react.useMemo)(() => {
140
- const extraMobileCheck = isTouch ? isFocused : true;
141
- const check = shouldShowBody && extraMobileCheck;
143
+ const check = shouldShowBody;
142
144
  if (relationMode === _personFinder.RelationMode.SITE) {
143
145
  return check;
144
146
  }
@@ -146,7 +148,7 @@ const PersonFinderWrapper = /*#__PURE__*/(0, _react.forwardRef)(({
146
148
  return check && !!search && (search === null || search === void 0 ? void 0 : search.length) > 2;
147
149
  }
148
150
  return check;
149
- }, [filterTypes, friendsPriority, isFocused, isTouch, search, shouldShowBody, relationMode]);
151
+ }, [filterTypes, friendsPriority, search, shouldShowBody, relationMode]);
150
152
  const content = (0, _react.useMemo)(() => {
151
153
  const body = /*#__PURE__*/_react.default.createElement(_PersonFinderBody.default, {
152
154
  filterTypes: filterTypes,