@chayns-components/person-finder 5.4.1 → 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 (31) 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 +6 -3
  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/constants/url.js +9 -0
  10. package/lib/cjs/constants/url.js.map +1 -0
  11. package/lib/cjs/utils/personFinder.js +6 -3
  12. package/lib/cjs/utils/personFinder.js.map +1 -1
  13. package/lib/esm/api/person/get.js +5 -3
  14. package/lib/esm/api/person/get.js.map +1 -1
  15. package/lib/esm/api/site/get.js +5 -3
  16. package/lib/esm/api/site/get.js.map +1 -1
  17. package/lib/esm/components/PersonFinderProvider.js +6 -3
  18. package/lib/esm/components/PersonFinderProvider.js.map +1 -1
  19. package/lib/esm/components/person-finder/PersonFinder.js +2 -0
  20. package/lib/esm/components/person-finder/PersonFinder.js.map +1 -1
  21. package/lib/esm/constants/url.js +3 -0
  22. package/lib/esm/constants/url.js.map +1 -0
  23. package/lib/esm/utils/personFinder.js +6 -3
  24. package/lib/esm/utils/personFinder.js.map +1 -1
  25. package/lib/types/api/person/get.d.ts +2 -1
  26. package/lib/types/api/site/get.d.ts +2 -1
  27. package/lib/types/components/PersonFinderProvider.d.ts +1 -0
  28. package/lib/types/components/person-finder/PersonFinder.d.ts +8 -0
  29. package/lib/types/constants/url.d.ts +2 -0
  30. package/lib/types/utils/personFinder.d.ts +2 -1
  31. 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) {
@@ -214,7 +216,8 @@ const PersonFinderProvider = ({
214
216
  searchString,
215
217
  filter,
216
218
  skipMap: {},
217
- relationMode
219
+ relationMode,
220
+ shouldUseQa
218
221
  });
219
222
  if (requestTimestamp < latestHandledRequestRef.current) {
220
223
  return;
@@ -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","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};\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 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 });\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":[]}
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":"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","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":[]}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.RELATIONS_BASE_URL = exports.QA_RELATIONS_BASE_URL = void 0;
7
+ const QA_RELATIONS_BASE_URL = exports.QA_RELATIONS_BASE_URL = 'https://cube-dev.tobit.com/relations-gateway/relations/';
8
+ const RELATIONS_BASE_URL = exports.RELATIONS_BASE_URL = 'https://relations.chayns.net/relations/';
9
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","names":["QA_RELATIONS_BASE_URL","exports","RELATIONS_BASE_URL"],"sources":["../../../src/constants/url.ts"],"sourcesContent":["export const QA_RELATIONS_BASE_URL = 'https://cube-dev.tobit.com/relations-gateway/relations/';\nexport const RELATIONS_BASE_URL = 'https://relations.chayns.net/relations/';\n"],"mappings":";;;;;;AAAO,MAAMA,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG,yDAAyD;AACvF,MAAME,kBAAkB,GAAAD,OAAA,CAAAC,kBAAA,GAAG,yCAAyC","ignoreList":[]}
@@ -114,7 +114,8 @@ const loadData = async ({
114
114
  skipMap,
115
115
  searchString,
116
116
  filter,
117
- relationMode
117
+ relationMode,
118
+ shouldUseQa
118
119
  }) => {
119
120
  const promises = filter.map(async filterType => {
120
121
  const skip = skipMap[filterType] ?? 0;
@@ -134,7 +135,8 @@ const loadData = async ({
134
135
  const data = await (0, _get.getPersons)({
135
136
  search: searchString,
136
137
  skip,
137
- relationMode
138
+ relationMode,
139
+ shouldUseQa
138
140
  });
139
141
  return {
140
142
  key: _personFinder.PersonFinderFilterTypes.PERSON,
@@ -162,7 +164,8 @@ const loadData = async ({
162
164
  }
163
165
  const data = await (0, _get2.getSites)({
164
166
  search: searchString,
165
- skip
167
+ skip,
168
+ shouldUseQa
166
169
  });
167
170
  const filteredList = data === null || data === void 0 ? void 0 : data.list.filter(({
168
171
  siteId
@@ -1 +1 @@
1
- {"version":3,"file":"personFinder.js","names":["_personFinder","require","_textstring","_get","_get2","_convert","_chaynsApi","_textStrings","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","normalizeTextstringReplacements","replacements","undefined","entries","reduce","acc","key","value","toString","getPersonFinderTextstringValue","textstring","getTextstringValue","libraryName","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","ttsToITextString","exports","getGroupName","groupNames","PersonFinderFilterTypes","PERSON","textStrings","components","personFinder","groupName","person","SITE","site","UAC","uac","isSiteEntry","entry","filterDataByKeys","data","keys","options","filterSingle","filteredEntries","excludedEntryIds","Array","isArray","length","filter","includes","id","excludedCount","count","Math","max","relevantKeys","original","searchString","skip","filteredEntry","shouldShowOwnUser","user","getUser","personId","ownUserEntry","commonSites","firstName","isVerified","lastName","type","fullName","Boolean","join","trim","toLowerCase","capitalizeFirstLetter","str","charAt","toUpperCase","slice","destructureData","filterType","_data$filterType","_data$filterType2","_data$filterType3","_data$filterType4","loadData","skipMap","relationMode","promises","map","_data$list","getPersons","search","list","convertPersonEntry","shouldShowLastOnlineTime","RelationMode","getSites","filteredList","siteId","convertSiteEntry","results","Promise","all","item","formatLastOnline","date","ts","lastOnline","now","Date","diffMs","getTime","minutes","floor","hours","days","months","years","isSameDay","getDate","getMonth","getFullYear","yesterday","setDate","isYesterday","time","toLocaleTimeString","hour","minute","fewMinutes","today"],"sources":["../../../src/utils/personFinder.ts"],"sourcesContent":["import {\n PersonEntry,\n PersonFinderData,\n PersonFinderDataMap,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n RelationMode,\n SiteEntry,\n} from '../types/personFinder';\nimport { getTextstringValue, ttsToITextString } from '@chayns-components/textstring';\nimport { getPersons } from '../api/person/get';\nimport { getSites } from '../api/site/get';\nimport { convertPersonEntry, convertSiteEntry } from './convert';\nimport { getUser } from 'chayns-api';\nimport textStrings, { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\ninterface GetPersonFinderTextstringValueOptions {\n textstring: {\n stringName: string;\n fallback: string;\n };\n replacements?: Record<string, number | string | undefined>;\n}\n\nconst normalizeTextstringReplacements = (\n replacements?: GetPersonFinderTextstringValueOptions['replacements'],\n) => {\n if (!replacements) {\n return undefined;\n }\n\n return Object.entries(replacements).reduce<Record<string, string>>((acc, [key, value]) => {\n acc[`##${key}##`] = value?.toString() ?? '';\n\n return acc;\n }, {});\n};\n\nexport const getPersonFinderTextstringValue = ({\n textstring,\n replacements,\n}: GetPersonFinderTextstringValueOptions) =>\n getTextstringValue({\n libraryName: PERSON_FINDER_TEXTSTRING_LIBRARY_NAME,\n textstring: ttsToITextString(textstring),\n replacements: normalizeTextstringReplacements(replacements),\n });\n\nexport const getGroupName = (key: string) => {\n const groupNames: Partial<\n Record<PersonFinderFilterTypes, { stringName: string; fallback: string }>\n > = {\n [PersonFinderFilterTypes.PERSON]: textStrings.components.personFinder.groupName.person,\n [PersonFinderFilterTypes.SITE]: textStrings.components.personFinder.groupName.site,\n [PersonFinderFilterTypes.UAC]: textStrings.components.personFinder.groupName.uac,\n };\n\n const textstring = groupNames[key as PersonFinderFilterTypes];\n\n if (!textstring) {\n return key;\n }\n\n return getPersonFinderTextstringValue({ textstring });\n};\n\nexport const isSiteEntry = (entry: PersonEntry | SiteEntry): entry is SiteEntry =>\n 'name' in entry && !('firstName' in entry);\n\ninterface FilterDataByKeysOptions {\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n}\n\nexport const filterDataByKeys = (\n data: { [key: string]: PersonFinderData } = {},\n keys: PersonFinderFilterTypes[] = [],\n options: FilterDataByKeysOptions = {},\n): { [key: string]: PersonFinderData } => {\n const filterSingle = (entry: PersonFinderData): PersonFinderData => {\n let filteredEntries = entry.entries;\n\n const { excludedEntryIds } = options;\n\n if (Array.isArray(excludedEntryIds) && excludedEntryIds.length > 0) {\n filteredEntries = filteredEntries.filter((e) => !excludedEntryIds.includes(e.id));\n }\n\n const excludedCount = entry.entries.length - filteredEntries.length;\n\n return {\n ...entry,\n entries: filteredEntries,\n count: Math.max(0, entry.count - excludedCount),\n };\n };\n\n const relevantKeys = keys.length > 0 ? keys : Object.keys(data);\n\n return relevantKeys.reduce((acc, key) => {\n const original = data[key] ?? { searchString: '', count: 0, skip: 0, entries: [] };\n\n const filteredEntry = filterSingle(original);\n\n if (options.shouldShowOwnUser && key === PersonFinderFilterTypes.PERSON) {\n const user = getUser();\n\n if (typeof user?.personId === 'string') {\n // Ensure that the own user is always included in the person filter\n const ownUserEntry: PersonEntry = {\n commonSites: 0,\n firstName: user.firstName ?? '',\n id: user.personId,\n isVerified: false,\n lastName: user.lastName ?? '',\n type: PersonFinderFilterTypes.PERSON,\n };\n\n const fullName = [ownUserEntry.firstName, ownUserEntry.lastName]\n .filter(Boolean)\n .join(' ')\n .trim();\n\n if (\n original.searchString.length < 3 ||\n fullName.toLowerCase().includes(original.searchString.toLowerCase())\n ) {\n filteredEntry.entries = [ownUserEntry, ...filteredEntry.entries];\n filteredEntry.count += 1; // Increment count to account for the own user\n }\n }\n }\n\n return { ...acc, [key]: filteredEntry };\n }, {});\n};\n\nexport const capitalizeFirstLetter = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);\n\nexport const destructureData = (\n data: Record<string, PersonFinderData> | undefined,\n filterType: string,\n) => ({\n count: data?.[filterType]?.count ?? 0,\n skip: data?.[filterType]?.skip ?? 0,\n searchString: data?.[filterType]?.searchString ?? '',\n entries: data?.[filterType]?.entries ?? [],\n});\n\ninterface LoadDataOptions {\n searchString: string;\n filter: PersonFinderFilterTypes[];\n skipMap: Partial<Record<PersonFinderFilterTypes, number>>;\n relationMode?: RelationMode;\n}\n\nexport const loadData = async ({\n skipMap,\n searchString,\n filter,\n relationMode,\n}: LoadDataOptions): Promise<PersonFinderDataMap> => {\n const promises = filter.map(async (filterType) => {\n const skip = skipMap[filterType] ?? 0;\n\n if (filterType === PersonFinderFilterTypes.PERSON) {\n if (searchString.length <= 2) {\n return {\n key: PersonFinderFilterTypes.PERSON,\n value: {\n searchString,\n count: 0,\n skip: 0,\n entries: [],\n },\n };\n }\n\n const data = await getPersons({ search: searchString, skip, relationMode });\n\n return {\n key: PersonFinderFilterTypes.PERSON,\n value: {\n searchString,\n count: data?.count ?? 0,\n skip: skip + (data?.list?.length ?? 0),\n entries: convertPersonEntry(data?.list ?? [], {\n shouldShowLastOnlineTime: relationMode === RelationMode.SITE,\n }),\n },\n };\n }\n\n if (filterType === PersonFinderFilterTypes.SITE) {\n if (searchString.length <= 2) {\n return {\n key: PersonFinderFilterTypes.SITE,\n value: {\n searchString,\n count: 0,\n skip: 0,\n entries: [],\n },\n };\n }\n\n const data = await getSites({ search: searchString, skip });\n\n const filteredList = data?.list.filter(({ siteId }) => siteId !== null);\n\n return {\n key: PersonFinderFilterTypes.SITE,\n value: {\n searchString,\n count: data?.count ?? 0,\n skip: skip + (filteredList?.length ?? 0),\n entries: convertSiteEntry(filteredList ?? []),\n },\n };\n }\n\n return null;\n });\n\n const results = await Promise.all(promises);\n\n return results.reduce<PersonFinderDataMap>((acc, item) => {\n if (!item) return acc;\n\n return {\n ...acc,\n [item.key]: item.value,\n };\n }, {});\n};\n\nexport const formatLastOnline = (date: Date): string => {\n const ts = textStrings.components.personFinder.lastOnline;\n const now = new Date();\n\n const diffMs = now.getTime() - date.getTime();\n\n const minutes = Math.floor(diffMs / 1000 / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const months = Math.floor(days / 30);\n const years = Math.floor(days / 365);\n\n const isSameDay =\n date.getDate() === now.getDate() &&\n date.getMonth() === now.getMonth() &&\n date.getFullYear() === now.getFullYear();\n\n const yesterday = new Date(now);\n yesterday.setDate(now.getDate() - 1);\n\n const isYesterday =\n date.getDate() === yesterday.getDate() &&\n date.getMonth() === yesterday.getMonth() &&\n date.getFullYear() === yesterday.getFullYear();\n\n const time = date.toLocaleTimeString('de-DE', {\n hour: '2-digit',\n minute: '2-digit',\n });\n\n if (minutes < 5) {\n return getPersonFinderTextstringValue({ textstring: ts.fewMinutes });\n }\n\n if (minutes < 60) {\n return getPersonFinderTextstringValue({\n textstring: ts.minutes,\n replacements: { minutes },\n });\n }\n\n if (hours < 24 && isSameDay) {\n return getPersonFinderTextstringValue({\n textstring: ts.today,\n replacements: { time },\n });\n }\n\n if (isYesterday) {\n return getPersonFinderTextstringValue({\n textstring: ts.yesterday,\n replacements: { time },\n });\n }\n\n if (days < 30) {\n return getPersonFinderTextstringValue({\n textstring: ts.days,\n replacements: { days },\n });\n }\n\n if (months < 12) {\n return getPersonFinderTextstringValue({\n textstring: ts.months,\n replacements: { months },\n });\n }\n\n return getPersonFinderTextstringValue({\n textstring: ts.years,\n replacements: { years },\n });\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"personFinder.js","names":["_personFinder","require","_textstring","_get","_get2","_convert","_chaynsApi","_textStrings","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","normalizeTextstringReplacements","replacements","undefined","entries","reduce","acc","key","value","toString","getPersonFinderTextstringValue","textstring","getTextstringValue","libraryName","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","ttsToITextString","exports","getGroupName","groupNames","PersonFinderFilterTypes","PERSON","textStrings","components","personFinder","groupName","person","SITE","site","UAC","uac","isSiteEntry","entry","filterDataByKeys","data","keys","options","filterSingle","filteredEntries","excludedEntryIds","Array","isArray","length","filter","includes","id","excludedCount","count","Math","max","relevantKeys","original","searchString","skip","filteredEntry","shouldShowOwnUser","user","getUser","personId","ownUserEntry","commonSites","firstName","isVerified","lastName","type","fullName","Boolean","join","trim","toLowerCase","capitalizeFirstLetter","str","charAt","toUpperCase","slice","destructureData","filterType","_data$filterType","_data$filterType2","_data$filterType3","_data$filterType4","loadData","skipMap","relationMode","shouldUseQa","promises","map","_data$list","getPersons","search","list","convertPersonEntry","shouldShowLastOnlineTime","RelationMode","getSites","filteredList","siteId","convertSiteEntry","results","Promise","all","item","formatLastOnline","date","ts","lastOnline","now","Date","diffMs","getTime","minutes","floor","hours","days","months","years","isSameDay","getDate","getMonth","getFullYear","yesterday","setDate","isYesterday","time","toLocaleTimeString","hour","minute","fewMinutes","today"],"sources":["../../../src/utils/personFinder.ts"],"sourcesContent":["import {\n PersonEntry,\n PersonFinderData,\n PersonFinderDataMap,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n RelationMode,\n SiteEntry,\n} from '../types/personFinder';\nimport { getTextstringValue, ttsToITextString } from '@chayns-components/textstring';\nimport { getPersons } from '../api/person/get';\nimport { getSites } from '../api/site/get';\nimport { convertPersonEntry, convertSiteEntry } from './convert';\nimport { getUser } from 'chayns-api';\nimport textStrings, { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\ninterface GetPersonFinderTextstringValueOptions {\n textstring: {\n stringName: string;\n fallback: string;\n };\n replacements?: Record<string, number | string | undefined>;\n}\n\nconst normalizeTextstringReplacements = (\n replacements?: GetPersonFinderTextstringValueOptions['replacements'],\n) => {\n if (!replacements) {\n return undefined;\n }\n\n return Object.entries(replacements).reduce<Record<string, string>>((acc, [key, value]) => {\n acc[`##${key}##`] = value?.toString() ?? '';\n\n return acc;\n }, {});\n};\n\nexport const getPersonFinderTextstringValue = ({\n textstring,\n replacements,\n}: GetPersonFinderTextstringValueOptions) =>\n getTextstringValue({\n libraryName: PERSON_FINDER_TEXTSTRING_LIBRARY_NAME,\n textstring: ttsToITextString(textstring),\n replacements: normalizeTextstringReplacements(replacements),\n });\n\nexport const getGroupName = (key: string) => {\n const groupNames: Partial<\n Record<PersonFinderFilterTypes, { stringName: string; fallback: string }>\n > = {\n [PersonFinderFilterTypes.PERSON]: textStrings.components.personFinder.groupName.person,\n [PersonFinderFilterTypes.SITE]: textStrings.components.personFinder.groupName.site,\n [PersonFinderFilterTypes.UAC]: textStrings.components.personFinder.groupName.uac,\n };\n\n const textstring = groupNames[key as PersonFinderFilterTypes];\n\n if (!textstring) {\n return key;\n }\n\n return getPersonFinderTextstringValue({ textstring });\n};\n\nexport const isSiteEntry = (entry: PersonEntry | SiteEntry): entry is SiteEntry =>\n 'name' in entry && !('firstName' in entry);\n\ninterface FilterDataByKeysOptions {\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n}\n\nexport const filterDataByKeys = (\n data: { [key: string]: PersonFinderData } = {},\n keys: PersonFinderFilterTypes[] = [],\n options: FilterDataByKeysOptions = {},\n): { [key: string]: PersonFinderData } => {\n const filterSingle = (entry: PersonFinderData): PersonFinderData => {\n let filteredEntries = entry.entries;\n\n const { excludedEntryIds } = options;\n\n if (Array.isArray(excludedEntryIds) && excludedEntryIds.length > 0) {\n filteredEntries = filteredEntries.filter((e) => !excludedEntryIds.includes(e.id));\n }\n\n const excludedCount = entry.entries.length - filteredEntries.length;\n\n return {\n ...entry,\n entries: filteredEntries,\n count: Math.max(0, entry.count - excludedCount),\n };\n };\n\n const relevantKeys = keys.length > 0 ? keys : Object.keys(data);\n\n return relevantKeys.reduce((acc, key) => {\n const original = data[key] ?? { searchString: '', count: 0, skip: 0, entries: [] };\n\n const filteredEntry = filterSingle(original);\n\n if (options.shouldShowOwnUser && key === PersonFinderFilterTypes.PERSON) {\n const user = getUser();\n\n if (typeof user?.personId === 'string') {\n // Ensure that the own user is always included in the person filter\n const ownUserEntry: PersonEntry = {\n commonSites: 0,\n firstName: user.firstName ?? '',\n id: user.personId,\n isVerified: false,\n lastName: user.lastName ?? '',\n type: PersonFinderFilterTypes.PERSON,\n };\n\n const fullName = [ownUserEntry.firstName, ownUserEntry.lastName]\n .filter(Boolean)\n .join(' ')\n .trim();\n\n if (\n original.searchString.length < 3 ||\n fullName.toLowerCase().includes(original.searchString.toLowerCase())\n ) {\n filteredEntry.entries = [ownUserEntry, ...filteredEntry.entries];\n filteredEntry.count += 1; // Increment count to account for the own user\n }\n }\n }\n\n return { ...acc, [key]: filteredEntry };\n }, {});\n};\n\nexport const capitalizeFirstLetter = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);\n\nexport const destructureData = (\n data: Record<string, PersonFinderData> | undefined,\n filterType: string,\n) => ({\n count: data?.[filterType]?.count ?? 0,\n skip: data?.[filterType]?.skip ?? 0,\n searchString: data?.[filterType]?.searchString ?? '',\n entries: data?.[filterType]?.entries ?? [],\n});\n\ninterface LoadDataOptions {\n searchString: string;\n filter: PersonFinderFilterTypes[];\n skipMap: Partial<Record<PersonFinderFilterTypes, number>>;\n relationMode?: RelationMode;\n shouldUseQa: boolean;\n}\n\nexport const loadData = async ({\n skipMap,\n searchString,\n filter,\n relationMode,\n shouldUseQa,\n}: LoadDataOptions): Promise<PersonFinderDataMap> => {\n const promises = filter.map(async (filterType) => {\n const skip = skipMap[filterType] ?? 0;\n\n if (filterType === PersonFinderFilterTypes.PERSON) {\n if (searchString.length <= 2) {\n return {\n key: PersonFinderFilterTypes.PERSON,\n value: {\n searchString,\n count: 0,\n skip: 0,\n entries: [],\n },\n };\n }\n\n const data = await getPersons({\n search: searchString,\n skip,\n relationMode,\n shouldUseQa,\n });\n\n return {\n key: PersonFinderFilterTypes.PERSON,\n value: {\n searchString,\n count: data?.count ?? 0,\n skip: skip + (data?.list?.length ?? 0),\n entries: convertPersonEntry(data?.list ?? [], {\n shouldShowLastOnlineTime: relationMode === RelationMode.SITE,\n }),\n },\n };\n }\n\n if (filterType === PersonFinderFilterTypes.SITE) {\n if (searchString.length <= 2) {\n return {\n key: PersonFinderFilterTypes.SITE,\n value: {\n searchString,\n count: 0,\n skip: 0,\n entries: [],\n },\n };\n }\n\n const data = await getSites({ search: searchString, skip, shouldUseQa });\n\n const filteredList = data?.list.filter(({ siteId }) => siteId !== null);\n\n return {\n key: PersonFinderFilterTypes.SITE,\n value: {\n searchString,\n count: data?.count ?? 0,\n skip: skip + (filteredList?.length ?? 0),\n entries: convertSiteEntry(filteredList ?? []),\n },\n };\n }\n\n return null;\n });\n\n const results = await Promise.all(promises);\n\n return results.reduce<PersonFinderDataMap>((acc, item) => {\n if (!item) return acc;\n\n return {\n ...acc,\n [item.key]: item.value,\n };\n }, {});\n};\n\nexport const formatLastOnline = (date: Date): string => {\n const ts = textStrings.components.personFinder.lastOnline;\n const now = new Date();\n\n const diffMs = now.getTime() - date.getTime();\n\n const minutes = Math.floor(diffMs / 1000 / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const months = Math.floor(days / 30);\n const years = Math.floor(days / 365);\n\n const isSameDay =\n date.getDate() === now.getDate() &&\n date.getMonth() === now.getMonth() &&\n date.getFullYear() === now.getFullYear();\n\n const yesterday = new Date(now);\n yesterday.setDate(now.getDate() - 1);\n\n const isYesterday =\n date.getDate() === yesterday.getDate() &&\n date.getMonth() === yesterday.getMonth() &&\n date.getFullYear() === yesterday.getFullYear();\n\n const time = date.toLocaleTimeString('de-DE', {\n hour: '2-digit',\n minute: '2-digit',\n });\n\n if (minutes < 5) {\n return getPersonFinderTextstringValue({ textstring: ts.fewMinutes });\n }\n\n if (minutes < 60) {\n return getPersonFinderTextstringValue({\n textstring: ts.minutes,\n replacements: { minutes },\n });\n }\n\n if (hours < 24 && isSameDay) {\n return getPersonFinderTextstringValue({\n textstring: ts.today,\n replacements: { time },\n });\n }\n\n if (isYesterday) {\n return getPersonFinderTextstringValue({\n textstring: ts.yesterday,\n replacements: { time },\n });\n }\n\n if (days < 30) {\n return getPersonFinderTextstringValue({\n textstring: ts.days,\n replacements: { days },\n });\n }\n\n if (months < 12) {\n return getPersonFinderTextstringValue({\n textstring: ts.months,\n replacements: { months },\n });\n }\n\n return getPersonFinderTextstringValue({\n textstring: ts.years,\n replacements: { years },\n });\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,11 +1,12 @@
1
1
  import { getAccessToken } from 'chayns-api';
2
2
  import { RelationMode } from '../../types/personFinder';
3
- const URL = 'https://relations.chayns.net/relations/v2/person?skip=##skip##&take=##take##&query=##search##&scoreForSite=##scoreForSite##';
3
+ import { QA_RELATIONS_BASE_URL, RELATIONS_BASE_URL } from '../../constants/url';
4
4
  export const getPersons = async ({
5
5
  search,
6
6
  skip,
7
7
  take = 20,
8
- relationMode = RelationMode.PERSON
8
+ relationMode = RelationMode.PERSON,
9
+ shouldUseQa
9
10
  }) => {
10
11
  const {
11
12
  accessToken
@@ -19,7 +20,8 @@ export const getPersons = async ({
19
20
  },
20
21
  method: 'GET'
21
22
  };
22
- const response = await fetch(URL.replace('##search##', search).replace('##skip##', skip.toString()).replace('##take##', take?.toString()).replace('##scoreForSite##', relationMode === RelationMode.SITE ? '1' : '0'), requestInit);
23
+ const url = `${shouldUseQa ? QA_RELATIONS_BASE_URL : RELATIONS_BASE_URL}v2/person?skip=##skip##&take=##take##&query=##search##&scoreForSite=##scoreForSite##`;
24
+ const response = await fetch(url.replace('##search##', search).replace('##skip##', skip.toString()).replace('##take##', take?.toString()).replace('##scoreForSite##', relationMode === RelationMode.SITE ? '1' : '0'), requestInit);
23
25
  if (response.status === 200) {
24
26
  return await response.json();
25
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","names":["getAccessToken","RelationMode","URL","getPersons","search","skip","take","relationMode","PERSON","accessToken","undefined","requestInit","headers","Authorization","method","response","fetch","replace","toString","SITE","status","json"],"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,SAASA,cAAc,QAAQ,YAAY;AAC3C,SAA4BC,YAAY,QAAQ,0BAA0B;AAE1E,MAAMC,GAAG,GACL,6HAA6H;AAcjI,OAAO,MAAMC,UAAU,GAAG,MAAAA,CAAO;EAC7BC,MAAM;EACNC,IAAI;EACJC,IAAI,GAAG,EAAE;EACTC,YAAY,GAAGN,YAAY,CAACO;AACb,CAAC,KAAK;EACrB,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAMT,cAAc,CAAC,CAAC;EAE9C,IAAI,CAACS,WAAW,EAAE;IACd,OAAOC,SAAS;EACpB;EAEA,MAAMC,WAAwB,GAAG;IAC7BC,OAAO,EAAE;MACLC,aAAa,EAAE,UAAUJ,WAAW;IACxC,CAAC;IACDK,MAAM,EAAE;EACZ,CAAC;EAED,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CACxBd,GAAG,CAACe,OAAO,CAAC,YAAY,EAAEb,MAAM,CAAC,CAC5Ba,OAAO,CAAC,UAAU,EAAEZ,IAAI,CAACa,QAAQ,CAAC,CAAC,CAAC,CACpCD,OAAO,CAAC,UAAU,EAAEX,IAAI,EAAEY,QAAQ,CAAC,CAAC,CAAC,CACrCD,OAAO,CAAC,kBAAkB,EAAEV,YAAY,KAAKN,YAAY,CAACkB,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","ignoreList":[]}
1
+ {"version":3,"file":"get.js","names":["getAccessToken","RelationMode","QA_RELATIONS_BASE_URL","RELATIONS_BASE_URL","getPersons","search","skip","take","relationMode","PERSON","shouldUseQa","accessToken","undefined","requestInit","headers","Authorization","method","url","response","fetch","replace","toString","SITE","status","json"],"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,SAASA,cAAc,QAAQ,YAAY;AAC3C,SAA4BC,YAAY,QAAQ,0BAA0B;AAC1E,SAASC,qBAAqB,EAAEC,kBAAkB,QAAQ,qBAAqB;AAe/E,OAAO,MAAMC,UAAU,GAAG,MAAAA,CAAO;EAC7BC,MAAM;EACNC,IAAI;EACJC,IAAI,GAAG,EAAE;EACTC,YAAY,GAAGP,YAAY,CAACQ,MAAM;EAClCC;AACe,CAAC,KAAK;EACrB,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAMX,cAAc,CAAC,CAAC;EAE9C,IAAI,CAACW,WAAW,EAAE;IACd,OAAOC,SAAS;EACpB;EAEA,MAAMC,WAAwB,GAAG;IAC7BC,OAAO,EAAE;MACLC,aAAa,EAAE,UAAUJ,WAAW;IACxC,CAAC;IACDK,MAAM,EAAE;EACZ,CAAC;EAED,MAAMC,GAAG,GAAG,GAAGP,WAAW,GAAGR,qBAAqB,GAAGC,kBAAkB,sFAAsF;EAE7J,MAAMe,QAAQ,GAAG,MAAMC,KAAK,CACxBF,GAAG,CACEG,OAAO,CAAC,YAAY,EAAEf,MAAM,CAAC,CAC7Be,OAAO,CAAC,UAAU,EAAEd,IAAI,CAACe,QAAQ,CAAC,CAAC,CAAC,CACpCD,OAAO,CAAC,UAAU,EAAEb,IAAI,EAAEc,QAAQ,CAAC,CAAC,CAAC,CACrCD,OAAO,CAAC,kBAAkB,EAAEZ,YAAY,KAAKP,YAAY,CAACqB,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,EAChFT,WACJ,CAAC;EAED,IAAIK,QAAQ,CAACK,MAAM,KAAK,GAAG,EAAE;IACzB,OAAQ,MAAML,QAAQ,CAACM,IAAI,CAAC,CAAC;EACjC;EAEA,OAAOZ,SAAS;AACpB,CAAC","ignoreList":[]}
@@ -1,9 +1,10 @@
1
1
  import { getAccessToken } from 'chayns-api';
2
- const URL = 'https://relations.chayns.net/relations/location/?query=##search##&skip=##skip##&take=##take##&includeDomains=true';
2
+ import { QA_RELATIONS_BASE_URL, RELATIONS_BASE_URL } from '../../constants/url';
3
3
  export const getSites = async ({
4
4
  search,
5
5
  skip,
6
- take = 20
6
+ take = 20,
7
+ shouldUseQa
7
8
  }) => {
8
9
  const {
9
10
  accessToken
@@ -17,7 +18,8 @@ export const getSites = async ({
17
18
  },
18
19
  method: 'GET'
19
20
  };
20
- const response = await fetch(URL.replace('##search##', search).replace('##skip##', skip.toString()).replace('##take##', take?.toString()), requestInit);
21
+ const url = `${shouldUseQa ? QA_RELATIONS_BASE_URL : RELATIONS_BASE_URL}location/?query=##search##&skip=##skip##&take=##take##&includeDomains=true`;
22
+ const response = await fetch(url.replace('##search##', search).replace('##skip##', skip.toString()).replace('##take##', take?.toString()), requestInit);
21
23
  if (response.status === 200) {
22
24
  return await response.json();
23
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","names":["getAccessToken","URL","getSites","search","skip","take","accessToken","undefined","requestInit","headers","Authorization","method","response","fetch","replace","toString","status","json"],"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,SAASA,cAAc,QAAQ,YAAY;AAG3C,MAAMC,GAAG,GACL,mHAAmH;AAavH,OAAO,MAAMC,QAAQ,GAAG,MAAAA,CAAO;EAAEC,MAAM;EAAEC,IAAI;EAAEC,IAAI,GAAG;AAAoB,CAAC,KAAK;EAC5E,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAMN,cAAc,CAAC,CAAC;EAE9C,IAAI,CAACM,WAAW,EAAE;IACd,OAAOC,SAAS;EACpB;EAEA,MAAMC,WAAwB,GAAG;IAC7BC,OAAO,EAAE;MACLC,aAAa,EAAE,UAAUJ,WAAW;IACxC,CAAC;IACDK,MAAM,EAAE;EACZ,CAAC;EAED,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CACxBZ,GAAG,CAACa,OAAO,CAAC,YAAY,EAAEX,MAAM,CAAC,CAC5BW,OAAO,CAAC,UAAU,EAAEV,IAAI,CAACW,QAAQ,CAAC,CAAC,CAAC,CACpCD,OAAO,CAAC,UAAU,EAAET,IAAI,EAAEU,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","ignoreList":[]}
1
+ {"version":3,"file":"get.js","names":["getAccessToken","QA_RELATIONS_BASE_URL","RELATIONS_BASE_URL","getSites","search","skip","take","shouldUseQa","accessToken","undefined","requestInit","headers","Authorization","method","url","response","fetch","replace","toString","status","json"],"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,SAASA,cAAc,QAAQ,YAAY;AAE3C,SAASC,qBAAqB,EAAEC,kBAAkB,QAAQ,qBAAqB;AAc/E,OAAO,MAAMC,QAAQ,GAAG,MAAAA,CAAO;EAAEC,MAAM;EAAEC,IAAI;EAAEC,IAAI,GAAG,EAAE;EAAEC;AAA6B,CAAC,KAAK;EACzF,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAMR,cAAc,CAAC,CAAC;EAE9C,IAAI,CAACQ,WAAW,EAAE;IACd,OAAOC,SAAS;EACpB;EAEA,MAAMC,WAAwB,GAAG;IAC7BC,OAAO,EAAE;MACLC,aAAa,EAAE,UAAUJ,WAAW;IACxC,CAAC;IACDK,MAAM,EAAE;EACZ,CAAC;EAED,MAAMC,GAAG,GAAG,GAAGP,WAAW,GAAGN,qBAAqB,GAAGC,kBAAkB,4EAA4E;EAEnJ,MAAMa,QAAQ,GAAG,MAAMC,KAAK,CACxBF,GAAG,CACEG,OAAO,CAAC,YAAY,EAAEb,MAAM,CAAC,CAC7Ba,OAAO,CAAC,UAAU,EAAEZ,IAAI,CAACa,QAAQ,CAAC,CAAC,CAAC,CACpCD,OAAO,CAAC,UAAU,EAAEX,IAAI,EAAEY,QAAQ,CAAC,CAAC,CAAC,EAC1CR,WACJ,CAAC;EAED,IAAIK,QAAQ,CAACI,MAAM,KAAK,GAAG,EAAE;IACzB,OAAQ,MAAMJ,QAAQ,CAACK,IAAI,CAAC,CAAC;EACjC;EAEA,OAAOX,SAAS;AACpB,CAAC","ignoreList":[]}
@@ -36,6 +36,7 @@ const PersonFinderProvider = ({
36
36
  defaultEntries,
37
37
  excludedEntryIds,
38
38
  shouldShowOwnUser = false,
39
+ shouldUseQa,
39
40
  uacFilter,
40
41
  entries,
41
42
  relationMode
@@ -125,7 +126,8 @@ const PersonFinderProvider = ({
125
126
  skipMap: {
126
127
  [key]: current.skip
127
128
  },
128
- relationMode
129
+ relationMode,
130
+ shouldUseQa
129
131
  }).then(result => {
130
132
  const newData = result?.[key];
131
133
  if (newData) {
@@ -134,7 +136,7 @@ const PersonFinderProvider = ({
134
136
  }).finally(() => {
135
137
  updateLoadingState(key, LoadingState.Success);
136
138
  });
137
- }, [appendData, data, getPagedUsersByGroups, relationMode, search, updateLoadingState]);
139
+ }, [appendData, data, getPagedUsersByGroups, relationMode, search, shouldUseQa, updateLoadingState]);
138
140
  const addFriend = useCallback(personId => {
139
141
  void postFriends(personId).then(result => {
140
142
  if (result) {
@@ -204,7 +206,8 @@ const PersonFinderProvider = ({
204
206
  searchString,
205
207
  filter,
206
208
  skipMap: {},
207
- relationMode
209
+ relationMode,
210
+ shouldUseQa
208
211
  });
209
212
  if (requestTimestamp < latestHandledRequestRef.current) {
210
213
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"PersonFinderProvider.js","names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","throttle","LoadingState","PersonFinderFilterTypes","Priority","RelationMode","getFriends","postFriends","deleteFriends","filterDataByKeys","loadData","getUACGroups","getUsersByGroups","TextstringProvider","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","THROTTLE_INTERVAL","PAGE_SIZE","PersonFinderContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","relationMode","displayName","usePersonFinder","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","getPagedUsersByGroups","setData","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PERSON","None","SITE","dataRef","filter","key","newData","prevState","appendData","oldEntries","state","prev","value","Pending","current","Error","groupId","skip","take","then","result","users","count","length","searchString","finally","Success","skipMap","personId","firstName","lastName","verificationState","isVerified","commonSites","type","wasSuccessful","includes","latestArgsRef","latestHandledRequestRef","searchLocalRef","searchDataRef","throttledRequest","args","requestTimestamp","Date","now","forEach","Object","keyString","HIGH","friendIds","Set","f","serverFriendEntries","entry","has","serverFriendIds","missingFriends","toLowerCase","otherEntries","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","searchLocal","searchedUsers","entriesToSearch","Boolean","join","trim","push","active","currentData","UAC","filtersToLoad","filterData","filterList","missingFilters","cancel","person","uac","providerValue","createElement","Provider","libraryName"],"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 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 });\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":[]}
1
+ {"version":3,"file":"PersonFinderProvider.js","names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","throttle","LoadingState","PersonFinderFilterTypes","Priority","RelationMode","getFriends","postFriends","deleteFriends","filterDataByKeys","loadData","getUACGroups","getUsersByGroups","TextstringProvider","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","THROTTLE_INTERVAL","PAGE_SIZE","PersonFinderContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","relationMode","displayName","usePersonFinder","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","shouldUseQa","uacFilter","entries","getPagedUsersByGroups","setData","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PERSON","None","SITE","dataRef","filter","key","newData","prevState","appendData","oldEntries","state","prev","value","Pending","current","Error","groupId","skip","take","then","result","users","count","length","searchString","finally","Success","skipMap","personId","firstName","lastName","verificationState","isVerified","commonSites","type","wasSuccessful","includes","latestArgsRef","latestHandledRequestRef","searchLocalRef","searchDataRef","throttledRequest","args","requestTimestamp","Date","now","forEach","Object","keyString","HIGH","friendIds","Set","f","serverFriendEntries","entry","has","serverFriendIds","missingFriends","toLowerCase","otherEntries","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","searchLocal","searchedUsers","entriesToSearch","Boolean","join","trim","push","active","currentData","UAC","filtersToLoad","filterData","filterList","missingFilters","cancel","person","uac","providerValue","createElement","Provider","libraryName"],"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":[]}
@@ -20,6 +20,7 @@ const PersonFinder = /*#__PURE__*/forwardRef(({
20
20
  onDropdownHide,
21
21
  onDropdownShow,
22
22
  onRemove,
23
+ shouldUseQa = false,
23
24
  placeholder = 'Person oder Site finden',
24
25
  shouldAllowMultiple = true,
25
26
  shouldHideResultsOnAdd = !shouldAllowMultiple || false,
@@ -39,6 +40,7 @@ const PersonFinder = /*#__PURE__*/forwardRef(({
39
40
  excludedEntryIds: excludedEntryIds,
40
41
  shouldShowOwnUser: shouldShowOwnUser,
41
42
  uacFilter: uacFilter,
43
+ shouldUseQa: shouldUseQa,
42
44
  entries: entries,
43
45
  relationMode: relationMode
44
46
  }, /*#__PURE__*/React.createElement(AreaProvider, {
@@ -1 +1 @@
1
- {"version":3,"file":"PersonFinder.js","names":["React","forwardRef","useImperativeHandle","useRef","PersonFinderFilterTypes","Priority","RelationMode","PersonFinderProvider","PersonFinderWrapper","AreaProvider","DEFAULT_FILTER_TYPES","PERSON","SITE","PersonFinder","container","dropdownDirection","defaultEntries","excludedEntryIds","relationMode","uacFilter","entries","filterTypes","friendsPriority","NORMAL","HIGH","leftElement","maxEntries","onAdd","onDropdownHide","onDropdownShow","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldShowOwnUser","shouldDisableRemove","shouldRenderInline","ref","personFinderRef","innerRef","clear","current","createElement","shouldChangeColor","shouldDisableListItemPadding","className","displayName"],"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,OAAOA,KAAK,IAAIC,UAAU,EAAEC,mBAAmB,EAAEC,MAAM,QAAQ,OAAO;AACtE,SAIIC,uBAAuB,EACvBC,QAAQ,EACRC,YAAY,QAET,0BAA0B;AACjC,OAAOC,oBAAoB,MAAM,yBAAyB;AAC1D,OAAOC,mBAAmB,MAGnB,6CAA6C;AACpD,SAASC,YAAY,QAAQ,yBAAyB;AAEtD,MAAMC,oBAAoB,GAAG,CAACN,uBAAuB,CAACO,MAAM,EAAEP,uBAAuB,CAACQ,IAAI,CAAC;AAyB3F,MAAMC,YAAY,gBAAGZ,UAAU,CAC3B,CACI;EACIa,SAAS;EACTC,iBAAiB;EACjBC,cAAc;EACdC,gBAAgB;EAChBC,YAAY,GAAGZ,YAAY,CAACK,MAAM;EAClCQ,SAAS;EACTC,OAAO;EACPC,WAAW,GAAGF,SAAS,IAAIC,OAAO,GAC5B,CAAChB,uBAAuB,CAACO,MAAM,CAAC,GAChCD,oBAAoB;EAC1BY,eAAe,GAAGJ,YAAY,KAAKZ,YAAY,CAACM,IAAI,GAAGP,QAAQ,CAACkB,MAAM,GAAGlB,QAAQ,CAACmB,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,GAAGnC,MAAM,CAAiB,IAAI,CAAC;EACpD,MAAMoC,QAAQ,GAAGpC,MAAM,CAAkB,IAAI,CAAC;EAE9CD,mBAAmB,CAACmC,GAAG,EAAE,OAAO;IAC5BG,KAAK,EAAEA,CAAA,KAAMD,QAAQ,CAACE,OAAO,EAAED,KAAK,CAAC;EACzC,CAAC,CAAC,CAAC;EAEH,oBACIxC,KAAA,CAAA0C,aAAA,CAACnC,oBAAoB;IACjBe,eAAe,EAAEA,eAAgB;IACjCN,cAAc,EAAEA,cAAe;IAC/BK,WAAW,EAAEA,WAAY;IACzBJ,gBAAgB,EAAEA,gBAAiB;IACnCiB,iBAAiB,EAAEA,iBAAkB;IACrCf,SAAS,EAAEA,SAAU;IACrBC,OAAO,EAAEA,OAAQ;IACjBF,YAAY,EAAEA;EAAa,gBAE3BlB,KAAA,CAAA0C,aAAA,CAACjC,YAAY;IAACkC,iBAAiB,EAAE,KAAM;IAACC,4BAA4B;EAAA,gBAChE5C,KAAA,CAAA0C,aAAA;IAAKG,SAAS,EAAC,2BAA2B;IAACR,GAAG,EAAEC;EAAgB,gBAC5DtC,KAAA,CAAA0C,aAAA,CAAClC,mBAAmB;IAChB6B,GAAG,EAAEE,QAAS;IACdzB,SAAS,EAAEA,SAAU;IACrBC,iBAAiB,EAAEA,iBAAkB;IACrCM,WAAW,EAAEA,WAAY;IACzBK,UAAU,EAAEA,UAAW;IACvBC,KAAK,EAAEA,KAAM;IACbT,YAAY,EAAEA,YAAa;IAC3BiB,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;AAEDvB,YAAY,CAACiC,WAAW,GAAG,cAAc;AAEzC,eAAejC,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"PersonFinder.js","names":["React","forwardRef","useImperativeHandle","useRef","PersonFinderFilterTypes","Priority","RelationMode","PersonFinderProvider","PersonFinderWrapper","AreaProvider","DEFAULT_FILTER_TYPES","PERSON","SITE","PersonFinder","container","dropdownDirection","defaultEntries","excludedEntryIds","relationMode","uacFilter","entries","filterTypes","friendsPriority","NORMAL","HIGH","leftElement","maxEntries","onAdd","onDropdownHide","onDropdownShow","onRemove","shouldUseQa","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldShowOwnUser","shouldDisableRemove","shouldRenderInline","ref","personFinderRef","innerRef","clear","current","createElement","shouldChangeColor","shouldDisableListItemPadding","className","displayName"],"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":[]}
@@ -0,0 +1,3 @@
1
+ export const QA_RELATIONS_BASE_URL = 'https://cube-dev.tobit.com/relations-gateway/relations/';
2
+ export const RELATIONS_BASE_URL = 'https://relations.chayns.net/relations/';
3
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","names":["QA_RELATIONS_BASE_URL","RELATIONS_BASE_URL"],"sources":["../../../src/constants/url.ts"],"sourcesContent":["export const QA_RELATIONS_BASE_URL = 'https://cube-dev.tobit.com/relations-gateway/relations/';\nexport const RELATIONS_BASE_URL = 'https://relations.chayns.net/relations/';\n"],"mappings":"AAAA,OAAO,MAAMA,qBAAqB,GAAG,yDAAyD;AAC9F,OAAO,MAAMC,kBAAkB,GAAG,yCAAyC","ignoreList":[]}
@@ -98,7 +98,8 @@ export const loadData = async ({
98
98
  skipMap,
99
99
  searchString,
100
100
  filter,
101
- relationMode
101
+ relationMode,
102
+ shouldUseQa
102
103
  }) => {
103
104
  const promises = filter.map(async filterType => {
104
105
  const skip = skipMap[filterType] ?? 0;
@@ -117,7 +118,8 @@ export const loadData = async ({
117
118
  const data = await getPersons({
118
119
  search: searchString,
119
120
  skip,
120
- relationMode
121
+ relationMode,
122
+ shouldUseQa
121
123
  });
122
124
  return {
123
125
  key: PersonFinderFilterTypes.PERSON,
@@ -145,7 +147,8 @@ export const loadData = async ({
145
147
  }
146
148
  const data = await getSites({
147
149
  search: searchString,
148
- skip
150
+ skip,
151
+ shouldUseQa
149
152
  });
150
153
  const filteredList = data?.list.filter(({
151
154
  siteId
@@ -1 +1 @@
1
- {"version":3,"file":"personFinder.js","names":["PersonFinderFilterTypes","RelationMode","getTextstringValue","ttsToITextString","getPersons","getSites","convertPersonEntry","convertSiteEntry","getUser","textStrings","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","normalizeTextstringReplacements","replacements","undefined","Object","entries","reduce","acc","key","value","toString","getPersonFinderTextstringValue","textstring","libraryName","getGroupName","groupNames","PERSON","components","personFinder","groupName","person","SITE","site","UAC","uac","isSiteEntry","entry","filterDataByKeys","data","keys","options","filterSingle","filteredEntries","excludedEntryIds","Array","isArray","length","filter","e","includes","id","excludedCount","count","Math","max","relevantKeys","original","searchString","skip","filteredEntry","shouldShowOwnUser","user","personId","ownUserEntry","commonSites","firstName","isVerified","lastName","type","fullName","Boolean","join","trim","toLowerCase","capitalizeFirstLetter","str","charAt","toUpperCase","slice","destructureData","filterType","loadData","skipMap","relationMode","promises","map","search","list","shouldShowLastOnlineTime","filteredList","siteId","results","Promise","all","item","formatLastOnline","date","ts","lastOnline","now","Date","diffMs","getTime","minutes","floor","hours","days","months","years","isSameDay","getDate","getMonth","getFullYear","yesterday","setDate","isYesterday","time","toLocaleTimeString","hour","minute","fewMinutes","today"],"sources":["../../../src/utils/personFinder.ts"],"sourcesContent":["import {\n PersonEntry,\n PersonFinderData,\n PersonFinderDataMap,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n RelationMode,\n SiteEntry,\n} from '../types/personFinder';\nimport { getTextstringValue, ttsToITextString } from '@chayns-components/textstring';\nimport { getPersons } from '../api/person/get';\nimport { getSites } from '../api/site/get';\nimport { convertPersonEntry, convertSiteEntry } from './convert';\nimport { getUser } from 'chayns-api';\nimport textStrings, { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\ninterface GetPersonFinderTextstringValueOptions {\n textstring: {\n stringName: string;\n fallback: string;\n };\n replacements?: Record<string, number | string | undefined>;\n}\n\nconst normalizeTextstringReplacements = (\n replacements?: GetPersonFinderTextstringValueOptions['replacements'],\n) => {\n if (!replacements) {\n return undefined;\n }\n\n return Object.entries(replacements).reduce<Record<string, string>>((acc, [key, value]) => {\n acc[`##${key}##`] = value?.toString() ?? '';\n\n return acc;\n }, {});\n};\n\nexport const getPersonFinderTextstringValue = ({\n textstring,\n replacements,\n}: GetPersonFinderTextstringValueOptions) =>\n getTextstringValue({\n libraryName: PERSON_FINDER_TEXTSTRING_LIBRARY_NAME,\n textstring: ttsToITextString(textstring),\n replacements: normalizeTextstringReplacements(replacements),\n });\n\nexport const getGroupName = (key: string) => {\n const groupNames: Partial<\n Record<PersonFinderFilterTypes, { stringName: string; fallback: string }>\n > = {\n [PersonFinderFilterTypes.PERSON]: textStrings.components.personFinder.groupName.person,\n [PersonFinderFilterTypes.SITE]: textStrings.components.personFinder.groupName.site,\n [PersonFinderFilterTypes.UAC]: textStrings.components.personFinder.groupName.uac,\n };\n\n const textstring = groupNames[key as PersonFinderFilterTypes];\n\n if (!textstring) {\n return key;\n }\n\n return getPersonFinderTextstringValue({ textstring });\n};\n\nexport const isSiteEntry = (entry: PersonEntry | SiteEntry): entry is SiteEntry =>\n 'name' in entry && !('firstName' in entry);\n\ninterface FilterDataByKeysOptions {\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n}\n\nexport const filterDataByKeys = (\n data: { [key: string]: PersonFinderData } = {},\n keys: PersonFinderFilterTypes[] = [],\n options: FilterDataByKeysOptions = {},\n): { [key: string]: PersonFinderData } => {\n const filterSingle = (entry: PersonFinderData): PersonFinderData => {\n let filteredEntries = entry.entries;\n\n const { excludedEntryIds } = options;\n\n if (Array.isArray(excludedEntryIds) && excludedEntryIds.length > 0) {\n filteredEntries = filteredEntries.filter((e) => !excludedEntryIds.includes(e.id));\n }\n\n const excludedCount = entry.entries.length - filteredEntries.length;\n\n return {\n ...entry,\n entries: filteredEntries,\n count: Math.max(0, entry.count - excludedCount),\n };\n };\n\n const relevantKeys = keys.length > 0 ? keys : Object.keys(data);\n\n return relevantKeys.reduce((acc, key) => {\n const original = data[key] ?? { searchString: '', count: 0, skip: 0, entries: [] };\n\n const filteredEntry = filterSingle(original);\n\n if (options.shouldShowOwnUser && key === PersonFinderFilterTypes.PERSON) {\n const user = getUser();\n\n if (typeof user?.personId === 'string') {\n // Ensure that the own user is always included in the person filter\n const ownUserEntry: PersonEntry = {\n commonSites: 0,\n firstName: user.firstName ?? '',\n id: user.personId,\n isVerified: false,\n lastName: user.lastName ?? '',\n type: PersonFinderFilterTypes.PERSON,\n };\n\n const fullName = [ownUserEntry.firstName, ownUserEntry.lastName]\n .filter(Boolean)\n .join(' ')\n .trim();\n\n if (\n original.searchString.length < 3 ||\n fullName.toLowerCase().includes(original.searchString.toLowerCase())\n ) {\n filteredEntry.entries = [ownUserEntry, ...filteredEntry.entries];\n filteredEntry.count += 1; // Increment count to account for the own user\n }\n }\n }\n\n return { ...acc, [key]: filteredEntry };\n }, {});\n};\n\nexport const capitalizeFirstLetter = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);\n\nexport const destructureData = (\n data: Record<string, PersonFinderData> | undefined,\n filterType: string,\n) => ({\n count: data?.[filterType]?.count ?? 0,\n skip: data?.[filterType]?.skip ?? 0,\n searchString: data?.[filterType]?.searchString ?? '',\n entries: data?.[filterType]?.entries ?? [],\n});\n\ninterface LoadDataOptions {\n searchString: string;\n filter: PersonFinderFilterTypes[];\n skipMap: Partial<Record<PersonFinderFilterTypes, number>>;\n relationMode?: RelationMode;\n}\n\nexport const loadData = async ({\n skipMap,\n searchString,\n filter,\n relationMode,\n}: LoadDataOptions): Promise<PersonFinderDataMap> => {\n const promises = filter.map(async (filterType) => {\n const skip = skipMap[filterType] ?? 0;\n\n if (filterType === PersonFinderFilterTypes.PERSON) {\n if (searchString.length <= 2) {\n return {\n key: PersonFinderFilterTypes.PERSON,\n value: {\n searchString,\n count: 0,\n skip: 0,\n entries: [],\n },\n };\n }\n\n const data = await getPersons({ search: searchString, skip, relationMode });\n\n return {\n key: PersonFinderFilterTypes.PERSON,\n value: {\n searchString,\n count: data?.count ?? 0,\n skip: skip + (data?.list?.length ?? 0),\n entries: convertPersonEntry(data?.list ?? [], {\n shouldShowLastOnlineTime: relationMode === RelationMode.SITE,\n }),\n },\n };\n }\n\n if (filterType === PersonFinderFilterTypes.SITE) {\n if (searchString.length <= 2) {\n return {\n key: PersonFinderFilterTypes.SITE,\n value: {\n searchString,\n count: 0,\n skip: 0,\n entries: [],\n },\n };\n }\n\n const data = await getSites({ search: searchString, skip });\n\n const filteredList = data?.list.filter(({ siteId }) => siteId !== null);\n\n return {\n key: PersonFinderFilterTypes.SITE,\n value: {\n searchString,\n count: data?.count ?? 0,\n skip: skip + (filteredList?.length ?? 0),\n entries: convertSiteEntry(filteredList ?? []),\n },\n };\n }\n\n return null;\n });\n\n const results = await Promise.all(promises);\n\n return results.reduce<PersonFinderDataMap>((acc, item) => {\n if (!item) return acc;\n\n return {\n ...acc,\n [item.key]: item.value,\n };\n }, {});\n};\n\nexport const formatLastOnline = (date: Date): string => {\n const ts = textStrings.components.personFinder.lastOnline;\n const now = new Date();\n\n const diffMs = now.getTime() - date.getTime();\n\n const minutes = Math.floor(diffMs / 1000 / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const months = Math.floor(days / 30);\n const years = Math.floor(days / 365);\n\n const isSameDay =\n date.getDate() === now.getDate() &&\n date.getMonth() === now.getMonth() &&\n date.getFullYear() === now.getFullYear();\n\n const yesterday = new Date(now);\n yesterday.setDate(now.getDate() - 1);\n\n const isYesterday =\n date.getDate() === yesterday.getDate() &&\n date.getMonth() === yesterday.getMonth() &&\n date.getFullYear() === yesterday.getFullYear();\n\n const time = date.toLocaleTimeString('de-DE', {\n hour: '2-digit',\n minute: '2-digit',\n });\n\n if (minutes < 5) {\n return getPersonFinderTextstringValue({ textstring: ts.fewMinutes });\n }\n\n if (minutes < 60) {\n return getPersonFinderTextstringValue({\n textstring: ts.minutes,\n replacements: { minutes },\n });\n }\n\n if (hours < 24 && isSameDay) {\n return getPersonFinderTextstringValue({\n textstring: ts.today,\n replacements: { time },\n });\n }\n\n if (isYesterday) {\n return getPersonFinderTextstringValue({\n textstring: ts.yesterday,\n replacements: { time },\n });\n }\n\n if (days < 30) {\n return getPersonFinderTextstringValue({\n textstring: ts.days,\n replacements: { days },\n });\n }\n\n if (months < 12) {\n return getPersonFinderTextstringValue({\n textstring: ts.months,\n replacements: { months },\n });\n }\n\n return getPersonFinderTextstringValue({\n textstring: ts.years,\n replacements: { years },\n });\n};\n"],"mappings":"AAAA,SAKIA,uBAAuB,EACvBC,YAAY,QAET,uBAAuB;AAC9B,SAASC,kBAAkB,EAAEC,gBAAgB,QAAQ,+BAA+B;AACpF,SAASC,UAAU,QAAQ,mBAAmB;AAC9C,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,kBAAkB,EAAEC,gBAAgB,QAAQ,WAAW;AAChE,SAASC,OAAO,QAAQ,YAAY;AACpC,OAAOC,WAAW,IAAIC,qCAAqC,QAAQ,0BAA0B;AAU7F,MAAMC,+BAA+B,GACjCC,YAAoE,IACnE;EACD,IAAI,CAACA,YAAY,EAAE;IACf,OAAOC,SAAS;EACpB;EAEA,OAAOC,MAAM,CAACC,OAAO,CAACH,YAAY,CAAC,CAACI,MAAM,CAAyB,CAACC,GAAG,EAAE,CAACC,GAAG,EAAEC,KAAK,CAAC,KAAK;IACtFF,GAAG,CAAC,KAAKC,GAAG,IAAI,CAAC,GAAGC,KAAK,EAAEC,QAAQ,CAAC,CAAC,IAAI,EAAE;IAE3C,OAAOH,GAAG;EACd,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,CAAC;AAED,OAAO,MAAMI,8BAA8B,GAAGA,CAAC;EAC3CC,UAAU;EACVV;AACmC,CAAC,KACpCV,kBAAkB,CAAC;EACfqB,WAAW,EAAEb,qCAAqC;EAClDY,UAAU,EAAEnB,gBAAgB,CAACmB,UAAU,CAAC;EACxCV,YAAY,EAAED,+BAA+B,CAACC,YAAY;AAC9D,CAAC,CAAC;AAEN,OAAO,MAAMY,YAAY,GAAIN,GAAW,IAAK;EACzC,MAAMO,UAEL,GAAG;IACA,CAACzB,uBAAuB,CAAC0B,MAAM,GAAGjB,WAAW,CAACkB,UAAU,CAACC,YAAY,CAACC,SAAS,CAACC,MAAM;IACtF,CAAC9B,uBAAuB,CAAC+B,IAAI,GAAGtB,WAAW,CAACkB,UAAU,CAACC,YAAY,CAACC,SAAS,CAACG,IAAI;IAClF,CAAChC,uBAAuB,CAACiC,GAAG,GAAGxB,WAAW,CAACkB,UAAU,CAACC,YAAY,CAACC,SAAS,CAACK;EACjF,CAAC;EAED,MAAMZ,UAAU,GAAGG,UAAU,CAACP,GAAG,CAA4B;EAE7D,IAAI,CAACI,UAAU,EAAE;IACb,OAAOJ,GAAG;EACd;EAEA,OAAOG,8BAA8B,CAAC;IAAEC;EAAW,CAAC,CAAC;AACzD,CAAC;AAED,OAAO,MAAMa,WAAW,GAAIC,KAA8B,IACtD,MAAM,IAAIA,KAAK,IAAI,EAAE,WAAW,IAAIA,KAAK,CAAC;AAO9C,OAAO,MAAMC,gBAAgB,GAAGA,CAC5BC,IAAyC,GAAG,CAAC,CAAC,EAC9CC,IAA+B,GAAG,EAAE,EACpCC,OAAgC,GAAG,CAAC,CAAC,KACC;EACtC,MAAMC,YAAY,GAAIL,KAAuB,IAAuB;IAChE,IAAIM,eAAe,GAAGN,KAAK,CAACrB,OAAO;IAEnC,MAAM;MAAE4B;IAAiB,CAAC,GAAGH,OAAO;IAEpC,IAAII,KAAK,CAACC,OAAO,CAACF,gBAAgB,CAAC,IAAIA,gBAAgB,CAACG,MAAM,GAAG,CAAC,EAAE;MAChEJ,eAAe,GAAGA,eAAe,CAACK,MAAM,CAAEC,CAAC,IAAK,CAACL,gBAAgB,CAACM,QAAQ,CAACD,CAAC,CAACE,EAAE,CAAC,CAAC;IACrF;IAEA,MAAMC,aAAa,GAAGf,KAAK,CAACrB,OAAO,CAAC+B,MAAM,GAAGJ,eAAe,CAACI,MAAM;IAEnE,OAAO;MACH,GAAGV,KAAK;MACRrB,OAAO,EAAE2B,eAAe;MACxBU,KAAK,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAElB,KAAK,CAACgB,KAAK,GAAGD,aAAa;IAClD,CAAC;EACL,CAAC;EAED,MAAMI,YAAY,GAAGhB,IAAI,CAACO,MAAM,GAAG,CAAC,GAAGP,IAAI,GAAGzB,MAAM,CAACyB,IAAI,CAACD,IAAI,CAAC;EAE/D,OAAOiB,YAAY,CAACvC,MAAM,CAAC,CAACC,GAAG,EAAEC,GAAG,KAAK;IACrC,MAAMsC,QAAQ,GAAGlB,IAAI,CAACpB,GAAG,CAAC,IAAI;MAAEuC,YAAY,EAAE,EAAE;MAAEL,KAAK,EAAE,CAAC;MAAEM,IAAI,EAAE,CAAC;MAAE3C,OAAO,EAAE;IAAG,CAAC;IAElF,MAAM4C,aAAa,GAAGlB,YAAY,CAACe,QAAQ,CAAC;IAE5C,IAAIhB,OAAO,CAACoB,iBAAiB,IAAI1C,GAAG,KAAKlB,uBAAuB,CAAC0B,MAAM,EAAE;MACrE,MAAMmC,IAAI,GAAGrD,OAAO,CAAC,CAAC;MAEtB,IAAI,OAAOqD,IAAI,EAAEC,QAAQ,KAAK,QAAQ,EAAE;QACpC;QACA,MAAMC,YAAyB,GAAG;UAC9BC,WAAW,EAAE,CAAC;UACdC,SAAS,EAAEJ,IAAI,CAACI,SAAS,IAAI,EAAE;UAC/Bf,EAAE,EAAEW,IAAI,CAACC,QAAQ;UACjBI,UAAU,EAAE,KAAK;UACjBC,QAAQ,EAAEN,IAAI,CAACM,QAAQ,IAAI,EAAE;UAC7BC,IAAI,EAAEpE,uBAAuB,CAAC0B;QAClC,CAAC;QAED,MAAM2C,QAAQ,GAAG,CAACN,YAAY,CAACE,SAAS,EAAEF,YAAY,CAACI,QAAQ,CAAC,CAC3DpB,MAAM,CAACuB,OAAO,CAAC,CACfC,IAAI,CAAC,GAAG,CAAC,CACTC,IAAI,CAAC,CAAC;QAEX,IACIhB,QAAQ,CAACC,YAAY,CAACX,MAAM,GAAG,CAAC,IAChCuB,QAAQ,CAACI,WAAW,CAAC,CAAC,CAACxB,QAAQ,CAACO,QAAQ,CAACC,YAAY,CAACgB,WAAW,CAAC,CAAC,CAAC,EACtE;UACEd,aAAa,CAAC5C,OAAO,GAAG,CAACgD,YAAY,EAAE,GAAGJ,aAAa,CAAC5C,OAAO,CAAC;UAChE4C,aAAa,CAACP,KAAK,IAAI,CAAC,CAAC,CAAC;QAC9B;MACJ;IACJ;IAEA,OAAO;MAAE,GAAGnC,GAAG;MAAE,CAACC,GAAG,GAAGyC;IAAc,CAAC;EAC3C,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,CAAC;AAED,OAAO,MAAMe,qBAAqB,GAAIC,GAAW,IAAKA,GAAG,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGF,GAAG,CAACG,KAAK,CAAC,CAAC,CAAC;AAEhG,OAAO,MAAMC,eAAe,GAAGA,CAC3BzC,IAAkD,EAClD0C,UAAkB,MAChB;EACF5B,KAAK,EAAEd,IAAI,GAAG0C,UAAU,CAAC,EAAE5B,KAAK,IAAI,CAAC;EACrCM,IAAI,EAAEpB,IAAI,GAAG0C,UAAU,CAAC,EAAEtB,IAAI,IAAI,CAAC;EACnCD,YAAY,EAAEnB,IAAI,GAAG0C,UAAU,CAAC,EAAEvB,YAAY,IAAI,EAAE;EACpD1C,OAAO,EAAEuB,IAAI,GAAG0C,UAAU,CAAC,EAAEjE,OAAO,IAAI;AAC5C,CAAC,CAAC;AASF,OAAO,MAAMkE,QAAQ,GAAG,MAAAA,CAAO;EAC3BC,OAAO;EACPzB,YAAY;EACZV,MAAM;EACNoC;AACa,CAAC,KAAmC;EACjD,MAAMC,QAAQ,GAAGrC,MAAM,CAACsC,GAAG,CAAC,MAAOL,UAAU,IAAK;IAC9C,MAAMtB,IAAI,GAAGwB,OAAO,CAACF,UAAU,CAAC,IAAI,CAAC;IAErC,IAAIA,UAAU,KAAKhF,uBAAuB,CAAC0B,MAAM,EAAE;MAC/C,IAAI+B,YAAY,CAACX,MAAM,IAAI,CAAC,EAAE;QAC1B,OAAO;UACH5B,GAAG,EAAElB,uBAAuB,CAAC0B,MAAM;UACnCP,KAAK,EAAE;YACHsC,YAAY;YACZL,KAAK,EAAE,CAAC;YACRM,IAAI,EAAE,CAAC;YACP3C,OAAO,EAAE;UACb;QACJ,CAAC;MACL;MAEA,MAAMuB,IAAI,GAAG,MAAMlC,UAAU,CAAC;QAAEkF,MAAM,EAAE7B,YAAY;QAAEC,IAAI;QAAEyB;MAAa,CAAC,CAAC;MAE3E,OAAO;QACHjE,GAAG,EAAElB,uBAAuB,CAAC0B,MAAM;QACnCP,KAAK,EAAE;UACHsC,YAAY;UACZL,KAAK,EAAEd,IAAI,EAAEc,KAAK,IAAI,CAAC;UACvBM,IAAI,EAAEA,IAAI,IAAIpB,IAAI,EAAEiD,IAAI,EAAEzC,MAAM,IAAI,CAAC,CAAC;UACtC/B,OAAO,EAAET,kBAAkB,CAACgC,IAAI,EAAEiD,IAAI,IAAI,EAAE,EAAE;YAC1CC,wBAAwB,EAAEL,YAAY,KAAKlF,YAAY,CAAC8B;UAC5D,CAAC;QACL;MACJ,CAAC;IACL;IAEA,IAAIiD,UAAU,KAAKhF,uBAAuB,CAAC+B,IAAI,EAAE;MAC7C,IAAI0B,YAAY,CAACX,MAAM,IAAI,CAAC,EAAE;QAC1B,OAAO;UACH5B,GAAG,EAAElB,uBAAuB,CAAC+B,IAAI;UACjCZ,KAAK,EAAE;YACHsC,YAAY;YACZL,KAAK,EAAE,CAAC;YACRM,IAAI,EAAE,CAAC;YACP3C,OAAO,EAAE;UACb;QACJ,CAAC;MACL;MAEA,MAAMuB,IAAI,GAAG,MAAMjC,QAAQ,CAAC;QAAEiF,MAAM,EAAE7B,YAAY;QAAEC;MAAK,CAAC,CAAC;MAE3D,MAAM+B,YAAY,GAAGnD,IAAI,EAAEiD,IAAI,CAACxC,MAAM,CAAC,CAAC;QAAE2C;MAAO,CAAC,KAAKA,MAAM,KAAK,IAAI,CAAC;MAEvE,OAAO;QACHxE,GAAG,EAAElB,uBAAuB,CAAC+B,IAAI;QACjCZ,KAAK,EAAE;UACHsC,YAAY;UACZL,KAAK,EAAEd,IAAI,EAAEc,KAAK,IAAI,CAAC;UACvBM,IAAI,EAAEA,IAAI,IAAI+B,YAAY,EAAE3C,MAAM,IAAI,CAAC,CAAC;UACxC/B,OAAO,EAAER,gBAAgB,CAACkF,YAAY,IAAI,EAAE;QAChD;MACJ,CAAC;IACL;IAEA,OAAO,IAAI;EACf,CAAC,CAAC;EAEF,MAAME,OAAO,GAAG,MAAMC,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;EAE3C,OAAOO,OAAO,CAAC3E,MAAM,CAAsB,CAACC,GAAG,EAAE6E,IAAI,KAAK;IACtD,IAAI,CAACA,IAAI,EAAE,OAAO7E,GAAG;IAErB,OAAO;MACH,GAAGA,GAAG;MACN,CAAC6E,IAAI,CAAC5E,GAAG,GAAG4E,IAAI,CAAC3E;IACrB,CAAC;EACL,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,CAAC;AAED,OAAO,MAAM4E,gBAAgB,GAAIC,IAAU,IAAa;EACpD,MAAMC,EAAE,GAAGxF,WAAW,CAACkB,UAAU,CAACC,YAAY,CAACsE,UAAU;EACzD,MAAMC,GAAG,GAAG,IAAIC,IAAI,CAAC,CAAC;EAEtB,MAAMC,MAAM,GAAGF,GAAG,CAACG,OAAO,CAAC,CAAC,GAAGN,IAAI,CAACM,OAAO,CAAC,CAAC;EAE7C,MAAMC,OAAO,GAAGlD,IAAI,CAACmD,KAAK,CAACH,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;EAC9C,MAAMI,KAAK,GAAGpD,IAAI,CAACmD,KAAK,CAACD,OAAO,GAAG,EAAE,CAAC;EACtC,MAAMG,IAAI,GAAGrD,IAAI,CAACmD,KAAK,CAACC,KAAK,GAAG,EAAE,CAAC;EACnC,MAAME,MAAM,GAAGtD,IAAI,CAACmD,KAAK,CAACE,IAAI,GAAG,EAAE,CAAC;EACpC,MAAME,KAAK,GAAGvD,IAAI,CAACmD,KAAK,CAACE,IAAI,GAAG,GAAG,CAAC;EAEpC,MAAMG,SAAS,GACXb,IAAI,CAACc,OAAO,CAAC,CAAC,KAAKX,GAAG,CAACW,OAAO,CAAC,CAAC,IAChCd,IAAI,CAACe,QAAQ,CAAC,CAAC,KAAKZ,GAAG,CAACY,QAAQ,CAAC,CAAC,IAClCf,IAAI,CAACgB,WAAW,CAAC,CAAC,KAAKb,GAAG,CAACa,WAAW,CAAC,CAAC;EAE5C,MAAMC,SAAS,GAAG,IAAIb,IAAI,CAACD,GAAG,CAAC;EAC/Bc,SAAS,CAACC,OAAO,CAACf,GAAG,CAACW,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;EAEpC,MAAMK,WAAW,GACbnB,IAAI,CAACc,OAAO,CAAC,CAAC,KAAKG,SAAS,CAACH,OAAO,CAAC,CAAC,IACtCd,IAAI,CAACe,QAAQ,CAAC,CAAC,KAAKE,SAAS,CAACF,QAAQ,CAAC,CAAC,IACxCf,IAAI,CAACgB,WAAW,CAAC,CAAC,KAAKC,SAAS,CAACD,WAAW,CAAC,CAAC;EAElD,MAAMI,IAAI,GAAGpB,IAAI,CAACqB,kBAAkB,CAAC,OAAO,EAAE;IAC1CC,IAAI,EAAE,SAAS;IACfC,MAAM,EAAE;EACZ,CAAC,CAAC;EAEF,IAAIhB,OAAO,GAAG,CAAC,EAAE;IACb,OAAOlF,8BAA8B,CAAC;MAAEC,UAAU,EAAE2E,EAAE,CAACuB;IAAW,CAAC,CAAC;EACxE;EAEA,IAAIjB,OAAO,GAAG,EAAE,EAAE;IACd,OAAOlF,8BAA8B,CAAC;MAClCC,UAAU,EAAE2E,EAAE,CAACM,OAAO;MACtB3F,YAAY,EAAE;QAAE2F;MAAQ;IAC5B,CAAC,CAAC;EACN;EAEA,IAAIE,KAAK,GAAG,EAAE,IAAII,SAAS,EAAE;IACzB,OAAOxF,8BAA8B,CAAC;MAClCC,UAAU,EAAE2E,EAAE,CAACwB,KAAK;MACpB7G,YAAY,EAAE;QAAEwG;MAAK;IACzB,CAAC,CAAC;EACN;EAEA,IAAID,WAAW,EAAE;IACb,OAAO9F,8BAA8B,CAAC;MAClCC,UAAU,EAAE2E,EAAE,CAACgB,SAAS;MACxBrG,YAAY,EAAE;QAAEwG;MAAK;IACzB,CAAC,CAAC;EACN;EAEA,IAAIV,IAAI,GAAG,EAAE,EAAE;IACX,OAAOrF,8BAA8B,CAAC;MAClCC,UAAU,EAAE2E,EAAE,CAACS,IAAI;MACnB9F,YAAY,EAAE;QAAE8F;MAAK;IACzB,CAAC,CAAC;EACN;EAEA,IAAIC,MAAM,GAAG,EAAE,EAAE;IACb,OAAOtF,8BAA8B,CAAC;MAClCC,UAAU,EAAE2E,EAAE,CAACU,MAAM;MACrB/F,YAAY,EAAE;QAAE+F;MAAO;IAC3B,CAAC,CAAC;EACN;EAEA,OAAOtF,8BAA8B,CAAC;IAClCC,UAAU,EAAE2E,EAAE,CAACW,KAAK;IACpBhG,YAAY,EAAE;MAAEgG;IAAM;EAC1B,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"personFinder.js","names":["PersonFinderFilterTypes","RelationMode","getTextstringValue","ttsToITextString","getPersons","getSites","convertPersonEntry","convertSiteEntry","getUser","textStrings","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","normalizeTextstringReplacements","replacements","undefined","Object","entries","reduce","acc","key","value","toString","getPersonFinderTextstringValue","textstring","libraryName","getGroupName","groupNames","PERSON","components","personFinder","groupName","person","SITE","site","UAC","uac","isSiteEntry","entry","filterDataByKeys","data","keys","options","filterSingle","filteredEntries","excludedEntryIds","Array","isArray","length","filter","e","includes","id","excludedCount","count","Math","max","relevantKeys","original","searchString","skip","filteredEntry","shouldShowOwnUser","user","personId","ownUserEntry","commonSites","firstName","isVerified","lastName","type","fullName","Boolean","join","trim","toLowerCase","capitalizeFirstLetter","str","charAt","toUpperCase","slice","destructureData","filterType","loadData","skipMap","relationMode","shouldUseQa","promises","map","search","list","shouldShowLastOnlineTime","filteredList","siteId","results","Promise","all","item","formatLastOnline","date","ts","lastOnline","now","Date","diffMs","getTime","minutes","floor","hours","days","months","years","isSameDay","getDate","getMonth","getFullYear","yesterday","setDate","isYesterday","time","toLocaleTimeString","hour","minute","fewMinutes","today"],"sources":["../../../src/utils/personFinder.ts"],"sourcesContent":["import {\n PersonEntry,\n PersonFinderData,\n PersonFinderDataMap,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n RelationMode,\n SiteEntry,\n} from '../types/personFinder';\nimport { getTextstringValue, ttsToITextString } from '@chayns-components/textstring';\nimport { getPersons } from '../api/person/get';\nimport { getSites } from '../api/site/get';\nimport { convertPersonEntry, convertSiteEntry } from './convert';\nimport { getUser } from 'chayns-api';\nimport textStrings, { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\ninterface GetPersonFinderTextstringValueOptions {\n textstring: {\n stringName: string;\n fallback: string;\n };\n replacements?: Record<string, number | string | undefined>;\n}\n\nconst normalizeTextstringReplacements = (\n replacements?: GetPersonFinderTextstringValueOptions['replacements'],\n) => {\n if (!replacements) {\n return undefined;\n }\n\n return Object.entries(replacements).reduce<Record<string, string>>((acc, [key, value]) => {\n acc[`##${key}##`] = value?.toString() ?? '';\n\n return acc;\n }, {});\n};\n\nexport const getPersonFinderTextstringValue = ({\n textstring,\n replacements,\n}: GetPersonFinderTextstringValueOptions) =>\n getTextstringValue({\n libraryName: PERSON_FINDER_TEXTSTRING_LIBRARY_NAME,\n textstring: ttsToITextString(textstring),\n replacements: normalizeTextstringReplacements(replacements),\n });\n\nexport const getGroupName = (key: string) => {\n const groupNames: Partial<\n Record<PersonFinderFilterTypes, { stringName: string; fallback: string }>\n > = {\n [PersonFinderFilterTypes.PERSON]: textStrings.components.personFinder.groupName.person,\n [PersonFinderFilterTypes.SITE]: textStrings.components.personFinder.groupName.site,\n [PersonFinderFilterTypes.UAC]: textStrings.components.personFinder.groupName.uac,\n };\n\n const textstring = groupNames[key as PersonFinderFilterTypes];\n\n if (!textstring) {\n return key;\n }\n\n return getPersonFinderTextstringValue({ textstring });\n};\n\nexport const isSiteEntry = (entry: PersonEntry | SiteEntry): entry is SiteEntry =>\n 'name' in entry && !('firstName' in entry);\n\ninterface FilterDataByKeysOptions {\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n}\n\nexport const filterDataByKeys = (\n data: { [key: string]: PersonFinderData } = {},\n keys: PersonFinderFilterTypes[] = [],\n options: FilterDataByKeysOptions = {},\n): { [key: string]: PersonFinderData } => {\n const filterSingle = (entry: PersonFinderData): PersonFinderData => {\n let filteredEntries = entry.entries;\n\n const { excludedEntryIds } = options;\n\n if (Array.isArray(excludedEntryIds) && excludedEntryIds.length > 0) {\n filteredEntries = filteredEntries.filter((e) => !excludedEntryIds.includes(e.id));\n }\n\n const excludedCount = entry.entries.length - filteredEntries.length;\n\n return {\n ...entry,\n entries: filteredEntries,\n count: Math.max(0, entry.count - excludedCount),\n };\n };\n\n const relevantKeys = keys.length > 0 ? keys : Object.keys(data);\n\n return relevantKeys.reduce((acc, key) => {\n const original = data[key] ?? { searchString: '', count: 0, skip: 0, entries: [] };\n\n const filteredEntry = filterSingle(original);\n\n if (options.shouldShowOwnUser && key === PersonFinderFilterTypes.PERSON) {\n const user = getUser();\n\n if (typeof user?.personId === 'string') {\n // Ensure that the own user is always included in the person filter\n const ownUserEntry: PersonEntry = {\n commonSites: 0,\n firstName: user.firstName ?? '',\n id: user.personId,\n isVerified: false,\n lastName: user.lastName ?? '',\n type: PersonFinderFilterTypes.PERSON,\n };\n\n const fullName = [ownUserEntry.firstName, ownUserEntry.lastName]\n .filter(Boolean)\n .join(' ')\n .trim();\n\n if (\n original.searchString.length < 3 ||\n fullName.toLowerCase().includes(original.searchString.toLowerCase())\n ) {\n filteredEntry.entries = [ownUserEntry, ...filteredEntry.entries];\n filteredEntry.count += 1; // Increment count to account for the own user\n }\n }\n }\n\n return { ...acc, [key]: filteredEntry };\n }, {});\n};\n\nexport const capitalizeFirstLetter = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);\n\nexport const destructureData = (\n data: Record<string, PersonFinderData> | undefined,\n filterType: string,\n) => ({\n count: data?.[filterType]?.count ?? 0,\n skip: data?.[filterType]?.skip ?? 0,\n searchString: data?.[filterType]?.searchString ?? '',\n entries: data?.[filterType]?.entries ?? [],\n});\n\ninterface LoadDataOptions {\n searchString: string;\n filter: PersonFinderFilterTypes[];\n skipMap: Partial<Record<PersonFinderFilterTypes, number>>;\n relationMode?: RelationMode;\n shouldUseQa: boolean;\n}\n\nexport const loadData = async ({\n skipMap,\n searchString,\n filter,\n relationMode,\n shouldUseQa,\n}: LoadDataOptions): Promise<PersonFinderDataMap> => {\n const promises = filter.map(async (filterType) => {\n const skip = skipMap[filterType] ?? 0;\n\n if (filterType === PersonFinderFilterTypes.PERSON) {\n if (searchString.length <= 2) {\n return {\n key: PersonFinderFilterTypes.PERSON,\n value: {\n searchString,\n count: 0,\n skip: 0,\n entries: [],\n },\n };\n }\n\n const data = await getPersons({\n search: searchString,\n skip,\n relationMode,\n shouldUseQa,\n });\n\n return {\n key: PersonFinderFilterTypes.PERSON,\n value: {\n searchString,\n count: data?.count ?? 0,\n skip: skip + (data?.list?.length ?? 0),\n entries: convertPersonEntry(data?.list ?? [], {\n shouldShowLastOnlineTime: relationMode === RelationMode.SITE,\n }),\n },\n };\n }\n\n if (filterType === PersonFinderFilterTypes.SITE) {\n if (searchString.length <= 2) {\n return {\n key: PersonFinderFilterTypes.SITE,\n value: {\n searchString,\n count: 0,\n skip: 0,\n entries: [],\n },\n };\n }\n\n const data = await getSites({ search: searchString, skip, shouldUseQa });\n\n const filteredList = data?.list.filter(({ siteId }) => siteId !== null);\n\n return {\n key: PersonFinderFilterTypes.SITE,\n value: {\n searchString,\n count: data?.count ?? 0,\n skip: skip + (filteredList?.length ?? 0),\n entries: convertSiteEntry(filteredList ?? []),\n },\n };\n }\n\n return null;\n });\n\n const results = await Promise.all(promises);\n\n return results.reduce<PersonFinderDataMap>((acc, item) => {\n if (!item) return acc;\n\n return {\n ...acc,\n [item.key]: item.value,\n };\n }, {});\n};\n\nexport const formatLastOnline = (date: Date): string => {\n const ts = textStrings.components.personFinder.lastOnline;\n const now = new Date();\n\n const diffMs = now.getTime() - date.getTime();\n\n const minutes = Math.floor(diffMs / 1000 / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const months = Math.floor(days / 30);\n const years = Math.floor(days / 365);\n\n const isSameDay =\n date.getDate() === now.getDate() &&\n date.getMonth() === now.getMonth() &&\n date.getFullYear() === now.getFullYear();\n\n const yesterday = new Date(now);\n yesterday.setDate(now.getDate() - 1);\n\n const isYesterday =\n date.getDate() === yesterday.getDate() &&\n date.getMonth() === yesterday.getMonth() &&\n date.getFullYear() === yesterday.getFullYear();\n\n const time = date.toLocaleTimeString('de-DE', {\n hour: '2-digit',\n minute: '2-digit',\n });\n\n if (minutes < 5) {\n return getPersonFinderTextstringValue({ textstring: ts.fewMinutes });\n }\n\n if (minutes < 60) {\n return getPersonFinderTextstringValue({\n textstring: ts.minutes,\n replacements: { minutes },\n });\n }\n\n if (hours < 24 && isSameDay) {\n return getPersonFinderTextstringValue({\n textstring: ts.today,\n replacements: { time },\n });\n }\n\n if (isYesterday) {\n return getPersonFinderTextstringValue({\n textstring: ts.yesterday,\n replacements: { time },\n });\n }\n\n if (days < 30) {\n return getPersonFinderTextstringValue({\n textstring: ts.days,\n replacements: { days },\n });\n }\n\n if (months < 12) {\n return getPersonFinderTextstringValue({\n textstring: ts.months,\n replacements: { months },\n });\n }\n\n return getPersonFinderTextstringValue({\n textstring: ts.years,\n replacements: { years },\n });\n};\n"],"mappings":"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","ignoreList":[]}
@@ -8,6 +8,7 @@ interface GetPersonsOptions {
8
8
  skip: number;
9
9
  take?: number;
10
10
  relationMode?: RelationMode;
11
+ shouldUseQa: boolean;
11
12
  }
12
- export declare const getPersons: ({ search, skip, take, relationMode, }: GetPersonsOptions) => Promise<GetPersonResult | undefined>;
13
+ export declare const getPersons: ({ search, skip, take, relationMode, shouldUseQa, }: GetPersonsOptions) => Promise<GetPersonResult | undefined>;
13
14
  export {};
@@ -7,6 +7,7 @@ interface GetSitesOptions {
7
7
  search: string;
8
8
  skip: number;
9
9
  take?: number;
10
+ shouldUseQa: boolean;
10
11
  }
11
- export declare const getSites: ({ search, skip, take }: GetSitesOptions) => Promise<GetSiteResult | undefined>;
12
+ export declare const getSites: ({ search, skip, take, shouldUseQa }: GetSitesOptions) => Promise<GetSiteResult | undefined>;
12
13
  export {};
@@ -32,6 +32,7 @@ type PersonFinderProviderProps = {
32
32
  uacFilter?: UACFilter[];
33
33
  entries?: PersonEntry[];
34
34
  relationMode?: RelationMode;
35
+ shouldUseQa: boolean;
35
36
  };
36
37
  declare const PersonFinderProvider: FC<PersonFinderProviderProps>;
37
38
  export default PersonFinderProvider;
@@ -14,6 +14,10 @@ export type PersonFinderProps = PersonFinderWrapperProps & {
14
14
  * Whether the own user should be shown in the results. By default, it is not shown.
15
15
  */
16
16
  shouldShowOwnUser?: boolean;
17
+ /**
18
+ * Whether the qa relations should be used.
19
+ */
20
+ shouldUseQa?: boolean;
17
21
  /**
18
22
  * Optional filter to search member of uac group. Only works with groups of the current Site and if the user is manager.
19
23
  */
@@ -36,6 +40,10 @@ declare const PersonFinder: React.ForwardRefExoticComponent<PersonFinderWrapperP
36
40
  * Whether the own user should be shown in the results. By default, it is not shown.
37
41
  */
38
42
  shouldShowOwnUser?: boolean;
43
+ /**
44
+ * Whether the qa relations should be used.
45
+ */
46
+ shouldUseQa?: boolean;
39
47
  /**
40
48
  * Optional filter to search member of uac group. Only works with groups of the current Site and if the user is manager.
41
49
  */
@@ -0,0 +1,2 @@
1
+ export declare const QA_RELATIONS_BASE_URL = "https://cube-dev.tobit.com/relations-gateway/relations/";
2
+ export declare const RELATIONS_BASE_URL = "https://relations.chayns.net/relations/";
@@ -30,7 +30,8 @@ interface LoadDataOptions {
30
30
  filter: PersonFinderFilterTypes[];
31
31
  skipMap: Partial<Record<PersonFinderFilterTypes, number>>;
32
32
  relationMode?: RelationMode;
33
+ shouldUseQa: boolean;
33
34
  }
34
- export declare const loadData: ({ skipMap, searchString, filter, relationMode, }: LoadDataOptions) => Promise<PersonFinderDataMap>;
35
+ export declare const loadData: ({ skipMap, searchString, filter, relationMode, shouldUseQa, }: LoadDataOptions) => Promise<PersonFinderDataMap>;
35
36
  export declare const formatLastOnline: (date: Date) => string;
36
37
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/person-finder",
3
- "version": "5.4.1",
3
+ "version": "5.4.4",
4
4
  "description": "A set of beautiful React components for developing your own applications with chayns.",
5
5
  "sideEffects": false,
6
6
  "browserslist": [
@@ -88,5 +88,5 @@
88
88
  "publishConfig": {
89
89
  "access": "public"
90
90
  },
91
- "gitHead": "0e2c5f3b83a3bf1153bfe3319a4dba60e3b275b7"
91
+ "gitHead": "9890af90580d996d5c09c5a1fa1deb0213d57cd2"
92
92
  }