@chayns-components/person-finder 5.3.0 → 5.3.1

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 (56) 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/components/PersonFinderProvider.js +12 -5
  4. package/lib/cjs/components/PersonFinderProvider.js.map +1 -1
  5. package/lib/cjs/components/person-finder/PersonFinder.js +4 -2
  6. package/lib/cjs/components/person-finder/PersonFinder.js.map +1 -1
  7. package/lib/cjs/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js.map +1 -1
  8. package/lib/cjs/components/person-finder/person-finder-wrapper/person-finder-body/PersonFinderBody.js +1 -3
  9. package/lib/cjs/components/person-finder/person-finder-wrapper/person-finder-body/PersonFinderBody.js.map +1 -1
  10. package/lib/cjs/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.js +3 -6
  11. package/lib/cjs/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.js.map +1 -1
  12. package/lib/cjs/constants/textStrings.js +70 -1
  13. package/lib/cjs/constants/textStrings.js.map +1 -1
  14. package/lib/cjs/hooks/personFinder.js +43 -7
  15. package/lib/cjs/hooks/personFinder.js.map +1 -1
  16. package/lib/cjs/index.js +6 -0
  17. package/lib/cjs/index.js.map +1 -1
  18. package/lib/cjs/types/personFinder.js +6 -1
  19. package/lib/cjs/types/personFinder.js.map +1 -1
  20. package/lib/cjs/utils/convert.js +5 -2
  21. package/lib/cjs/utils/convert.js.map +1 -1
  22. package/lib/cjs/utils/personFinder.js +110 -9
  23. package/lib/cjs/utils/personFinder.js.map +1 -1
  24. package/lib/esm/api/person/get.js +5 -3
  25. package/lib/esm/api/person/get.js.map +1 -1
  26. package/lib/esm/components/PersonFinderProvider.js +12 -5
  27. package/lib/esm/components/PersonFinderProvider.js.map +1 -1
  28. package/lib/esm/components/person-finder/PersonFinder.js +5 -3
  29. package/lib/esm/components/person-finder/PersonFinder.js.map +1 -1
  30. package/lib/esm/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js.map +1 -1
  31. package/lib/esm/components/person-finder/person-finder-wrapper/person-finder-body/PersonFinderBody.js +1 -3
  32. package/lib/esm/components/person-finder/person-finder-wrapper/person-finder-body/PersonFinderBody.js.map +1 -1
  33. package/lib/esm/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.js +4 -7
  34. package/lib/esm/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.js.map +1 -1
  35. package/lib/esm/constants/textStrings.js +69 -0
  36. package/lib/esm/constants/textStrings.js.map +1 -1
  37. package/lib/esm/hooks/personFinder.js +43 -8
  38. package/lib/esm/hooks/personFinder.js.map +1 -1
  39. package/lib/esm/index.js +1 -1
  40. package/lib/esm/index.js.map +1 -1
  41. package/lib/esm/types/personFinder.js +5 -0
  42. package/lib/esm/types/personFinder.js.map +1 -1
  43. package/lib/esm/utils/convert.js +5 -2
  44. package/lib/esm/utils/convert.js.map +1 -1
  45. package/lib/esm/utils/personFinder.js +107 -9
  46. package/lib/esm/utils/personFinder.js.map +1 -1
  47. package/lib/types/api/person/get.d.ts +3 -2
  48. package/lib/types/components/PersonFinderProvider.d.ts +2 -1
  49. package/lib/types/components/person-finder/PersonFinder.d.ts +9 -1
  50. package/lib/types/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.d.ts +0 -1
  51. package/lib/types/constants/textStrings.d.ts +69 -0
  52. package/lib/types/index.d.ts +1 -1
  53. package/lib/types/types/personFinder.d.ts +5 -0
  54. package/lib/types/utils/convert.d.ts +5 -1
  55. package/lib/types/utils/personFinder.d.ts +13 -3
  56. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","names":["getAccessToken","URL","getPersons","search","skip","take","accessToken","undefined","requestInit","headers","Authorization","method","response","fetch","replace","toString","status","json"],"sources":["../../../../src/api/person/get.ts"],"sourcesContent":["import { getAccessToken } from 'chayns-api';\nimport { PersonEntryResult } from '../../types/personFinder';\n\nconst URL =\n 'https://relations.chayns.net/relations/v2/person?skip=##skip##&take=##take##&query=##search##';\n\ninterface GetPersonResult {\n list: PersonEntryResult[];\n count: number;\n}\n\ninterface GetPersonsOptions {\n search: string;\n skip: number;\n take?: number;\n}\n\nexport const getPersons = async ({ search, skip, take = 20 }: 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 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;AAG3C,MAAMC,GAAG,GACL,+FAA+F;AAanG,OAAO,MAAMC,UAAU,GAAG,MAAAA,CAAO;EAAEC,MAAM;EAAEC,IAAI;EAAEC,IAAI,GAAG;AAAsB,CAAC,KAAK;EAChF,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","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":[]}
@@ -6,6 +6,8 @@ import { postFriends } from '../api/friends/post';
6
6
  import { deleteFriends } from '../api/friends/delete';
7
7
  import { filterDataByKeys, loadData } from '../utils/personFinder';
8
8
  import { getUACGroups, getUsersByGroups } from '../utils/uac';
9
+ import { TextstringProvider } from '@chayns-components/textstring';
10
+ import { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';
9
11
  const THROTTLE_INTERVAL = 500;
10
12
  export const PersonFinderContext = /*#__PURE__*/createContext({
11
13
  data: undefined,
@@ -33,7 +35,8 @@ const PersonFinderProvider = ({
33
35
  excludedEntryIds,
34
36
  shouldShowOwnUser = false,
35
37
  uacFilter,
36
- entries
38
+ entries,
39
+ relationMode
37
40
  }) => {
38
41
  const [data, setData] = useState();
39
42
  const [friends, setFriends] = useState();
@@ -94,7 +97,8 @@ const PersonFinderProvider = ({
94
97
  filter: [key],
95
98
  skipMap: {
96
99
  [key]: current.skip
97
- }
100
+ },
101
+ relationMode
98
102
  }).then(result => {
99
103
  const newData = result?.[key];
100
104
  if (newData) {
@@ -103,7 +107,7 @@ const PersonFinderProvider = ({
103
107
  }).finally(() => {
104
108
  updateLoadingState(key, LoadingState.Success);
105
109
  });
106
- }, [updateLoadingState, data, search, appendData]);
110
+ }, [updateLoadingState, data, search, relationMode, appendData]);
107
111
  const addFriend = useCallback(personId => {
108
112
  void postFriends(personId).then(result => {
109
113
  if (result) {
@@ -170,7 +174,8 @@ const PersonFinderProvider = ({
170
174
  const result = await loadData({
171
175
  searchString,
172
176
  filter,
173
- skipMap: {}
177
+ skipMap: {},
178
+ relationMode
174
179
  });
175
180
  if (requestTimestamp < latestHandledRequestRef.current) {
176
181
  return;
@@ -319,7 +324,9 @@ const PersonFinderProvider = ({
319
324
  }), [activeFilter, addFriend, data, excludedEntryIds, friends, loadMore, loadingState, removeFriend, search, shouldShowOwnUser, tags, uacFilter, updateActiveFilter, updateData, updateLoadingState, updateSearch]);
320
325
  return /*#__PURE__*/React.createElement(PersonFinderContext.Provider, {
321
326
  value: providerValue
322
- }, children);
327
+ }, /*#__PURE__*/React.createElement(TextstringProvider, {
328
+ libraryName: PERSON_FINDER_TEXTSTRING_LIBRARY_NAME
329
+ }, children));
323
330
  };
324
331
  PersonFinderProvider.displayName = 'PersonFinderProvider';
325
332
  export default PersonFinderProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"PersonFinderProvider.js","names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","throttle","LoadingState","PersonFinderFilterTypes","Priority","getFriends","postFriends","deleteFriends","filterDataByKeys","loadData","getUACGroups","getUsersByGroups","THROTTLE_INTERVAL","PersonFinderContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","displayName","usePersonFinder","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","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","searchString","skipMap","skip","then","result","finally","Success","personId","firstName","lastName","verificationState","isVerified","commonSites","type","wasSuccessful","includes","latestArgsRef","latestHandledRequestRef","throttledRequest","args","requestTimestamp","Date","now","forEach","Object","keyString","HIGH","friendIds","Set","f","serverFriendEntries","entry","has","serverFriendIds","missingFriends","toLowerCase","otherEntries","length","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","count","searchLocal","searchedUsers","entriesToSearch","Boolean","join","trim","push","active","UAC","cancel","users","uac","person","providerValue","createElement","Provider"],"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 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';\n\nconst THROTTLE_INTERVAL = 500;\n\ninterface 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\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});\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};\n\nconst PersonFinderProvider: FC<PersonFinderProviderProps> = ({\n children,\n friendsPriority,\n filterTypes,\n defaultEntries,\n excludedEntryIds,\n shouldShowOwnUser = false,\n uacFilter,\n entries,\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 void loadData({\n searchString: search ?? '',\n filter: [key],\n skipMap: { [key]: current.skip },\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 [updateLoadingState, data, search, appendData],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n ).current;\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter ?? filterTypes;\n\n if (uacFilter || entries) {\n searchLocal();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchData({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n latestArgsRef.current = { search, filter: active };\n\n throttledRequest();\n }\n }, [\n filterTypes,\n search,\n activeFilter,\n friends,\n friendsPriority,\n updateData,\n updateLoadingState,\n throttledRequest,\n searchData,\n uacFilter,\n searchLocal,\n entries,\n ]);\n\n useEffect(\n () => () => {\n throttledRequest.cancel();\n },\n [throttledRequest],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (uacFilter) {\n void getUsersByGroups(uacFilter).then((users) => {\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 }, [entries, filterTypes, friends, friendsPriority, search, uacFilter]);\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 }),\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 ],\n );\n\n return (\n <PersonFinderContext.Provider value={providerValue}>\n {children}\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","getFriends","postFriends","deleteFriends","filterDataByKeys","loadData","getUACGroups","getUsersByGroups","TextstringProvider","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","THROTTLE_INTERVAL","PersonFinderContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","displayName","usePersonFinder","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","relationMode","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","searchString","skipMap","skip","then","result","finally","Success","personId","firstName","lastName","verificationState","isVerified","commonSites","type","wasSuccessful","includes","latestArgsRef","latestHandledRequestRef","throttledRequest","args","requestTimestamp","Date","now","forEach","Object","keyString","HIGH","friendIds","Set","f","serverFriendEntries","entry","has","serverFriendIds","missingFriends","toLowerCase","otherEntries","length","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","count","searchLocal","searchedUsers","entriesToSearch","Boolean","join","trim","push","active","UAC","cancel","users","uac","person","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;\n\ninterface 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\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});\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 [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 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 [updateLoadingState, data, search, relationMode, appendData],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n relationMode,\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n ).current;\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter ?? filterTypes;\n\n if (uacFilter || entries) {\n searchLocal();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchData({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n latestArgsRef.current = { search, filter: active };\n\n throttledRequest();\n }\n }, [\n filterTypes,\n search,\n activeFilter,\n friends,\n friendsPriority,\n updateData,\n updateLoadingState,\n throttledRequest,\n searchData,\n uacFilter,\n searchLocal,\n entries,\n ]);\n\n useEffect(\n () => () => {\n throttledRequest.cancel();\n },\n [throttledRequest],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (uacFilter) {\n void getUsersByGroups(uacFilter).then((users) => {\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 }, [entries, filterTypes, friends, friendsPriority, search, uacFilter]);\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 }),\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 ],\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,5 +1,5 @@
1
1
  import React, { forwardRef, useImperativeHandle, useRef } from 'react';
2
- import { PersonFinderFilterTypes, Priority } from '../../types/personFinder';
2
+ import { PersonFinderFilterTypes, Priority, RelationMode } from '../../types/personFinder';
3
3
  import PersonFinderProvider from '../PersonFinderProvider';
4
4
  import PersonFinderWrapper from './person-finder-wrapper/PersonFinderWrapper';
5
5
  import { AreaProvider } from '@chayns-components/core';
@@ -24,7 +24,8 @@ const PersonFinder = /*#__PURE__*/forwardRef(({
24
24
  shouldHideResultsOnAdd = !shouldAllowMultiple || false,
25
25
  shouldShowOwnUser = false,
26
26
  shouldDisableRemove = false,
27
- shouldRenderInline = false
27
+ shouldRenderInline = false,
28
+ relationMode = RelationMode.PERSON
28
29
  }, ref) => {
29
30
  const personFinderRef = useRef(null);
30
31
  const innerRef = useRef(null);
@@ -38,7 +39,8 @@ const PersonFinder = /*#__PURE__*/forwardRef(({
38
39
  excludedEntryIds: excludedEntryIds,
39
40
  shouldShowOwnUser: shouldShowOwnUser,
40
41
  uacFilter: uacFilter,
41
- entries: entries
42
+ entries: entries,
43
+ relationMode: relationMode
42
44
  }, /*#__PURE__*/React.createElement(AreaProvider, {
43
45
  shouldChangeColor: false,
44
46
  shouldDisableListItemPadding: true
@@ -1 +1 @@
1
- {"version":3,"file":"PersonFinder.js","names":["React","forwardRef","useImperativeHandle","useRef","PersonFinderFilterTypes","Priority","PersonFinderProvider","PersonFinderWrapper","AreaProvider","DEFAULT_FILTER_TYPES","PERSON","SITE","PersonFinder","container","dropdownDirection","defaultEntries","excludedEntryIds","uacFilter","entries","filterTypes","friendsPriority","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 UACFilter,\n} from '../../types/personFinder';\nimport PersonFinderProvider from '../PersonFinderProvider';\nimport PersonFinderWrapper, {\n PersonFinderWrapperProps,\n PersonFinderRef,\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 uacFilter,\n entries,\n filterTypes = uacFilter || entries\n ? [PersonFinderFilterTypes.PERSON]\n : DEFAULT_FILTER_TYPES,\n friendsPriority = 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 >\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 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,QAEL,0BAA0B;AACjC,OAAOC,oBAAoB,MAAM,yBAAyB;AAC1D,OAAOC,mBAAmB,MAGnB,6CAA6C;AACpD,SAASC,YAAY,QAAQ,yBAAyB;AAEtD,MAAMC,oBAAoB,GAAG,CAACL,uBAAuB,CAACM,MAAM,EAAEN,uBAAuB,CAACO,IAAI,CAAC;AAyB3F,MAAMC,YAAY,gBAAGX,UAAU,CAC3B,CACI;EACIY,SAAS;EACTC,iBAAiB;EACjBC,cAAc;EACdC,gBAAgB;EAChBC,SAAS;EACTC,OAAO;EACPC,WAAW,GAAGF,SAAS,IAAIC,OAAO,GAC5B,CAACd,uBAAuB,CAACM,MAAM,CAAC,GAChCD,oBAAoB;EAC1BW,eAAe,GAAGf,QAAQ,CAACgB,IAAI;EAC/BC,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,GAAGhC,MAAM,CAAiB,IAAI,CAAC;EACpD,MAAMiC,QAAQ,GAAGjC,MAAM,CAAkB,IAAI,CAAC;EAE9CD,mBAAmB,CAACgC,GAAG,EAAE,OAAO;IAC5BG,KAAK,EAAEA,CAAA,KAAMD,QAAQ,CAACE,OAAO,EAAED,KAAK,CAAC;EACzC,CAAC,CAAC,CAAC;EAEH,oBACIrC,KAAA,CAAAuC,aAAA,CAACjC,oBAAoB;IACjBc,eAAe,EAAEA,eAAgB;IACjCL,cAAc,EAAEA,cAAe;IAC/BI,WAAW,EAAEA,WAAY;IACzBH,gBAAgB,EAAEA,gBAAiB;IACnCe,iBAAiB,EAAEA,iBAAkB;IACrCd,SAAS,EAAEA,SAAU;IACrBC,OAAO,EAAEA;EAAQ,gBAEjBlB,KAAA,CAAAuC,aAAA,CAAC/B,YAAY;IAACgC,iBAAiB,EAAE,KAAM;IAACC,4BAA4B;EAAA,gBAChEzC,KAAA,CAAAuC,aAAA;IAAKG,SAAS,EAAC,2BAA2B;IAACR,GAAG,EAAEC;EAAgB,gBAC5DnC,KAAA,CAAAuC,aAAA,CAAChC,mBAAmB;IAChB2B,GAAG,EAAEE,QAAS;IACdvB,SAAS,EAAEA,SAAU;IACrBC,iBAAiB,EAAEA,iBAAkB;IACrCK,WAAW,EAAEA,WAAY;IACzBI,UAAU,EAAEA,UAAW;IACvBC,KAAK,EAAEA,KAAM;IACbQ,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;AAEDrB,YAAY,CAAC+B,WAAW,GAAG,cAAc;AAEzC,eAAe/B,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","uacFilter","entries","filterTypes","friendsPriority","HIGH","leftElement","maxEntries","onAdd","onDropdownHide","onDropdownShow","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldShowOwnUser","shouldDisableRemove","shouldRenderInline","relationMode","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 PersonFinderWrapperProps,\n PersonFinderRef,\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 * Determines whether persons are searched and sorted from the user's perspective or from a site's perspective.\n */\n relationMode?: RelationMode;\n};\n\nconst PersonFinder = forwardRef<PersonFinderRef, PersonFinderProps>(\n (\n {\n container,\n dropdownDirection,\n defaultEntries,\n excludedEntryIds,\n uacFilter,\n entries,\n filterTypes = uacFilter || entries\n ? [PersonFinderFilterTypes.PERSON]\n : DEFAULT_FILTER_TYPES,\n friendsPriority = 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 relationMode = RelationMode.PERSON,\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 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;AA6B3F,MAAMC,YAAY,gBAAGZ,UAAU,CAC3B,CACI;EACIa,SAAS;EACTC,iBAAiB;EACjBC,cAAc;EACdC,gBAAgB;EAChBC,SAAS;EACTC,OAAO;EACPC,WAAW,GAAGF,SAAS,IAAIC,OAAO,GAC5B,CAACf,uBAAuB,CAACO,MAAM,CAAC,GAChCD,oBAAoB;EAC1BW,eAAe,GAAGhB,QAAQ,CAACiB,IAAI;EAC/BC,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,KAAK;EAC1BC,YAAY,GAAG7B,YAAY,CAACK;AAChC,CAAC,EACDyB,GAAG,KACF;EACD,MAAMC,eAAe,GAAGlC,MAAM,CAAiB,IAAI,CAAC;EACpD,MAAMmC,QAAQ,GAAGnC,MAAM,CAAkB,IAAI,CAAC;EAE9CD,mBAAmB,CAACkC,GAAG,EAAE,OAAO;IAC5BG,KAAK,EAAEA,CAAA,KAAMD,QAAQ,CAACE,OAAO,EAAED,KAAK,CAAC;EACzC,CAAC,CAAC,CAAC;EAEH,oBACIvC,KAAA,CAAAyC,aAAA,CAAClC,oBAAoB;IACjBc,eAAe,EAAEA,eAAgB;IACjCL,cAAc,EAAEA,cAAe;IAC/BI,WAAW,EAAEA,WAAY;IACzBH,gBAAgB,EAAEA,gBAAiB;IACnCe,iBAAiB,EAAEA,iBAAkB;IACrCd,SAAS,EAAEA,SAAU;IACrBC,OAAO,EAAEA,OAAQ;IACjBgB,YAAY,EAAEA;EAAa,gBAE3BnC,KAAA,CAAAyC,aAAA,CAAChC,YAAY;IAACiC,iBAAiB,EAAE,KAAM;IAACC,4BAA4B;EAAA,gBAChE3C,KAAA,CAAAyC,aAAA;IAAKG,SAAS,EAAC,2BAA2B;IAACR,GAAG,EAAEC;EAAgB,gBAC5DrC,KAAA,CAAAyC,aAAA,CAACjC,mBAAmB;IAChB4B,GAAG,EAAEE,QAAS;IACdxB,SAAS,EAAEA,SAAU;IACrBC,iBAAiB,EAAEA,iBAAkB;IACrCK,WAAW,EAAEA,WAAY;IACzBI,UAAU,EAAEA,UAAW;IACvBC,KAAK,EAAEA,KAAM;IACbQ,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;AAEDrB,YAAY,CAACgC,WAAW,GAAG,cAAc;AAEzC,eAAehC,YAAY","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"PersonFinderWrapper.js","names":["DropdownBodyWrapper","Icon","TagInput","useDevice","React","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","v4","uuidV4","PersonFinderFilterTypes","Priority","StyledPersonFinder","StyledPersonFinderLeftElement","PersonFinderBody","usePersonFinder","PersonFinderWrapper","container","dropdownDirection","filterTypes","friendsPriority","leftElement","leftElementProp","maxEntries","Infinity","onAdd","onDropdownHide","onDropdownShow","shouldDisableRemove","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldRenderInline","ref","data","updateSearch","setTags","tags","search","isFocused","setIsFocused","shouldShowBody","setShouldShowBody","boxRef","contentRef","keyRef","tagInputRef","isTouch","createElement","icons","handleTagInputBlur","handleTagInputFocus","handleRemove","id","prevState","filter","entry","handleClose","handleOpen","handleClear","current","resetValue","handleDropdownOutsideClick","blur","handleAdd","selectedEntry","Object","values","flat","map","entries","find","toString","name","firstName","lastName","tag","text","some","t","length","handleChange","event","target","value","clear","showBody","extraMobileCheck","includes","SITE","PERSON","HIGH","content","body","anchorElement","direction","onClose","onOutsideClick","shouldShowDropdown","onFocus","key","onBlur","onChange","shouldPreventEnter","displayName"],"sources":["../../../../../src/components/person-finder/person-finder-wrapper/PersonFinderWrapper.tsx"],"sourcesContent":["import {\n DropdownBodyWrapper,\n DropdownDirection,\n Icon,\n type Tag,\n TagInput,\n type TagInputRef,\n} from '@chayns-components/core';\nimport { useDevice } from 'chayns-api';\nimport React, {\n type ChangeEvent,\n forwardRef,\n type ReactElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { v4 as uuidV4 } from 'uuid';\nimport {\n PersonEntry,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n SiteEntry,\n} from '../../../types/personFinder';\nimport { StyledPersonFinder, StyledPersonFinderLeftElement } from './PersonFinderWrapper.styles';\nimport PersonFinderBody from './person-finder-body/PersonFinderBody';\nimport { usePersonFinder } from '../../PersonFinderProvider';\n\nexport type PersonFinderRef = {\n clear: () => void;\n};\n\nexport type PersonFinderWrapperProps = {\n /**\n * The element where the content of the `PersonFinder` should be rendered via React Portal.\n */\n container?: Element;\n /**\n * The direction in which the dropdown should be displayed. By default, it is displayed below the input.\n */\n dropdownDirection?: DropdownDirection;\n /**\n * The filter options of the component.\n */\n filterTypes?: PersonFinderFilterTypes[];\n /**\n * Determines the priority level for displaying friends in search results.\n */\n friendsPriority?: Priority;\n /**\n * An element that should be displayed on the left side of the input.\n */\n leftElement?: ReactElement;\n /**\n * The maximum number of entries that can be selected.\n */\n maxEntries?: number;\n /**\n * Function to be executed if a person or site is added.\n */\n onAdd?: (entry: PersonFinderEntry) => void;\n /**\n * Function to be executed if the dropdown is hidden.\n */\n onDropdownHide?: () => void;\n /**\n * Function to be executed if the dropdown is shown.\n */\n onDropdownShow?: () => void;\n /**\n * Function to be executed if a person or site is removed.\n */\n onRemove?: (id: PersonFinderEntry['id']) => void;\n /**\n * The placeholder that should be displayed.\n */\n placeholder?: string;\n /**\n * Whether multiple persons and sites should be selected.\n */\n shouldAllowMultiple?: boolean;\n /**\n * Whether the dropdown should be hidden after adding an entry. By default, it is not hidden.\n */\n shouldHideResultsOnAdd?: boolean;\n /**\n * Whether the `PersonFinder` should be rendered inline without a dropdown.\n * @description\n * If set to `true`, the `PersonFinder` will display the results below the input field, without\n * using a dropdown. This is useful for scenarios where the `PersonFinder` is part of a larger\n * form and should always be visible.\n * @default false\n * @example\n * <PersonFinder shouldRenderInline />\n * @optional\n */\n shouldRenderInline?: boolean;\n /**\n * Whether the remove action should be disabled.\n */\n shouldDisableRemove?: boolean;\n};\n\nconst PersonFinderWrapper = forwardRef<PersonFinderRef, PersonFinderWrapperProps>(\n (\n {\n container,\n dropdownDirection,\n filterTypes,\n friendsPriority,\n leftElement: leftElementProp,\n maxEntries = Infinity,\n onAdd,\n onDropdownHide,\n onDropdownShow,\n shouldDisableRemove,\n onRemove,\n placeholder,\n shouldAllowMultiple,\n shouldHideResultsOnAdd,\n shouldRenderInline,\n },\n ref,\n ) => {\n const { data, updateSearch, setTags, tags, search } = usePersonFinder();\n\n const [isFocused, setIsFocused] = useState(false);\n const [shouldShowBody, setShouldShowBody] = useState(false);\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const keyRef = useRef(`person-finder-${uuidV4()}`);\n const tagInputRef = useRef<TagInputRef>(null);\n\n const { isTouch } = useDevice();\n\n const leftElement = leftElementProp ?? (\n <StyledPersonFinderLeftElement>\n <Icon icons={['fa fa-search']} />\n </StyledPersonFinderLeftElement>\n );\n\n const handleTagInputBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const handleTagInputFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const handleRemove = useCallback(\n (id: string) => {\n if (typeof setTags !== 'function' || shouldDisableRemove) {\n return;\n }\n\n setTags((prevState) => prevState.filter((entry) => entry.id !== id));\n\n if (typeof onRemove === 'function') {\n onRemove(id);\n }\n },\n [onRemove, setTags, shouldDisableRemove],\n );\n\n const handleClose = useCallback(() => {\n setShouldShowBody(false);\n }, []);\n\n const handleOpen = useCallback(() => {\n setShouldShowBody(true);\n }, []);\n\n const handleClear = useCallback(() => {\n if (typeof setTags !== 'function' || shouldDisableRemove) {\n return;\n }\n\n tagInputRef.current?.resetValue();\n\n setTags([]);\n }, [setTags, shouldDisableRemove]);\n\n const handleDropdownOutsideClick = useCallback(() => {\n tagInputRef.current?.blur();\n\n return isFocused && isTouch;\n }, [isFocused, isTouch]);\n\n const handleAdd = useCallback(\n (id: string) => {\n if (typeof setTags !== 'function') {\n return;\n }\n\n const selectedEntry = Object.values(data ?? {})\n .flat()\n .map(({ entries }) => entries)\n .flat()\n .find(\n (entry) =>\n (typeof entry.id === 'string' ? entry.id : entry.id.toString()) === id,\n );\n\n if (!selectedEntry) {\n return;\n }\n\n const { name, firstName, lastName } = selectedEntry as PersonEntry & SiteEntry;\n\n const tag: Tag = {\n id,\n text: name ?? `${(firstName as string) ?? ''} ${(lastName as string) ?? ''}`,\n };\n\n setTags((prevState) => {\n if (prevState.some((t) => t.id === id) || prevState.length >= maxEntries) {\n return prevState;\n }\n\n tagInputRef.current?.resetValue();\n\n if (typeof onAdd === 'function') {\n onAdd(selectedEntry);\n }\n\n if (shouldHideResultsOnAdd) {\n setShouldShowBody(false);\n }\n\n return [...prevState, tag];\n });\n },\n [data, maxEntries, onAdd, setTags, shouldHideResultsOnAdd],\n );\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (typeof updateSearch === 'function') {\n updateSearch(event.target.value);\n }\n },\n [updateSearch],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => handleClear(),\n }),\n [handleClear],\n );\n\n useEffect(() => {\n if (shouldShowBody) {\n if (typeof onDropdownShow === 'function') {\n onDropdownShow();\n }\n } else if (typeof onDropdownHide === 'function') {\n onDropdownHide();\n }\n }, [onDropdownHide, onDropdownShow, shouldShowBody]);\n\n const showBody = useMemo(() => {\n const extraMobileCheck = isTouch ? isFocused : true;\n\n if (\n filterTypes?.length === 1 &&\n (filterTypes.includes(PersonFinderFilterTypes.SITE) ||\n (filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friendsPriority !== Priority.HIGH))\n ) {\n return shouldShowBody && extraMobileCheck && !!search && search?.length > 2;\n }\n\n return shouldShowBody && extraMobileCheck;\n }, [filterTypes, friendsPriority, isFocused, isTouch, search, shouldShowBody]);\n\n const content = useMemo(() => {\n const body = (\n <PersonFinderBody\n filterTypes={filterTypes}\n onAdd={handleAdd}\n onRemove={handleRemove}\n ref={contentRef}\n shouldRenderInline={shouldRenderInline}\n />\n );\n\n if (shouldRenderInline) {\n return body;\n }\n\n if (boxRef.current) {\n return (\n <DropdownBodyWrapper\n anchorElement={boxRef.current}\n container={container}\n direction={dropdownDirection}\n onClose={handleClose}\n onOutsideClick={handleDropdownOutsideClick}\n shouldShowDropdown={showBody}\n >\n {body}\n </DropdownBodyWrapper>\n );\n }\n\n return null;\n }, [\n container,\n dropdownDirection,\n filterTypes,\n handleAdd,\n handleClose,\n handleDropdownOutsideClick,\n handleRemove,\n shouldRenderInline,\n showBody,\n ]);\n\n return (\n <StyledPersonFinder ref={boxRef} onFocus={handleOpen} key={keyRef.current}>\n <TagInput\n leftElement={leftElement}\n onBlur={handleTagInputBlur}\n onChange={handleChange}\n onFocus={handleTagInputFocus}\n onRemove={handleRemove}\n placeholder={placeholder}\n ref={tagInputRef}\n shouldAllowMultiple={shouldAllowMultiple}\n shouldPreventEnter\n tags={tags}\n />\n {content}\n </StyledPersonFinder>\n );\n },\n);\n\nPersonFinderWrapper.displayName = 'PersonFinderWrapper';\n\nexport default PersonFinderWrapper;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PersonFinderWrapper.js","names":["DropdownBodyWrapper","Icon","TagInput","useDevice","React","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","v4","uuidV4","PersonFinderFilterTypes","Priority","StyledPersonFinder","StyledPersonFinderLeftElement","PersonFinderBody","usePersonFinder","PersonFinderWrapper","container","dropdownDirection","filterTypes","friendsPriority","leftElement","leftElementProp","maxEntries","Infinity","onAdd","onDropdownHide","onDropdownShow","shouldDisableRemove","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldRenderInline","ref","data","updateSearch","setTags","tags","search","isFocused","setIsFocused","shouldShowBody","setShouldShowBody","boxRef","contentRef","keyRef","tagInputRef","isTouch","createElement","icons","handleTagInputBlur","handleTagInputFocus","handleRemove","id","prevState","filter","entry","handleClose","handleOpen","handleClear","current","resetValue","handleDropdownOutsideClick","blur","handleAdd","selectedEntry","Object","values","flat","map","entries","find","toString","name","firstName","lastName","tag","text","some","t","length","handleChange","event","target","value","clear","showBody","extraMobileCheck","includes","SITE","PERSON","HIGH","content","body","anchorElement","direction","onClose","onOutsideClick","shouldShowDropdown","onFocus","key","onBlur","onChange","shouldPreventEnter","displayName"],"sources":["../../../../../src/components/person-finder/person-finder-wrapper/PersonFinderWrapper.tsx"],"sourcesContent":["import {\n DropdownBodyWrapper,\n DropdownDirection,\n Icon,\n type Tag,\n TagInput,\n type TagInputRef,\n} from '@chayns-components/core';\nimport { useDevice } from 'chayns-api';\nimport React, {\n type ChangeEvent,\n forwardRef,\n type ReactElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { v4 as uuidV4 } from 'uuid';\nimport {\n PersonEntry,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n SiteEntry,\n} from '../../../types/personFinder';\nimport { StyledPersonFinder, StyledPersonFinderLeftElement } from './PersonFinderWrapper.styles';\nimport PersonFinderBody from './person-finder-body/PersonFinderBody';\nimport { usePersonFinder } from '../../PersonFinderProvider';\n\nexport type PersonFinderRef = {\n clear: () => void;\n};\n\nexport type PersonFinderWrapperProps = {\n /**\n * The element where the content of the `PersonFinder` should be rendered via React Portal.\n */\n container?: Element;\n /**\n * The direction in which the dropdown should be displayed. By default, it is displayed below the input.\n */\n dropdownDirection?: DropdownDirection;\n /**\n * The filter options of the component.\n */\n filterTypes?: PersonFinderFilterTypes[];\n /**\n * Determines the priority level for displaying friends in search results.\n */\n friendsPriority?: Priority;\n /**\n * An element that should be displayed on the left side of the input.\n */\n leftElement?: ReactElement;\n /**\n * The maximum number of entries that can be selected.\n */\n maxEntries?: number;\n /**\n * Function to be executed if a person or site is added.\n */\n onAdd?: (entry: PersonFinderEntry) => void;\n /**\n * Function to be executed if the dropdown is hidden.\n */\n onDropdownHide?: () => void;\n /**\n * Function to be executed if the dropdown is shown.\n */\n onDropdownShow?: () => void;\n /**\n * Function to be executed if a person or site is removed.\n */\n onRemove?: (id: PersonFinderEntry['id']) => void;\n /**\n * The placeholder that should be displayed.\n */\n placeholder?: string;\n /**\n * Whether multiple persons and sites should be selected.\n */\n shouldAllowMultiple?: boolean;\n /**\n * Whether the dropdown should be hidden after adding an entry. By default, it is not hidden.\n */\n shouldHideResultsOnAdd?: boolean;\n /**\n * Whether the `PersonFinder` should be rendered inline without a dropdown.\n * @description\n * If set to `true`, the `PersonFinder` will display the results below the input field, without\n * using a dropdown. This is useful for scenarios where the `PersonFinder` is part of a larger\n * form and should always be visible.\n * @default false\n * @example\n * <PersonFinder shouldRenderInline />\n * @optional\n */\n shouldRenderInline?: boolean;\n /**\n * Whether the remove action should be disabled.\n */\n shouldDisableRemove?: boolean;\n};\n\nconst PersonFinderWrapper = forwardRef<PersonFinderRef, PersonFinderWrapperProps>(\n (\n {\n container,\n dropdownDirection,\n filterTypes,\n friendsPriority,\n leftElement: leftElementProp,\n maxEntries = Infinity,\n onAdd,\n onDropdownHide,\n onDropdownShow,\n shouldDisableRemove,\n onRemove,\n placeholder,\n shouldAllowMultiple,\n shouldHideResultsOnAdd,\n shouldRenderInline,\n },\n ref,\n ) => {\n const { data, updateSearch, setTags, tags, search } = usePersonFinder();\n\n const [isFocused, setIsFocused] = useState(false);\n const [shouldShowBody, setShouldShowBody] = useState(false);\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const keyRef = useRef(`person-finder-${uuidV4()}`);\n const tagInputRef = useRef<TagInputRef>(null);\n\n const { isTouch } = useDevice();\n\n const leftElement = leftElementProp ?? (\n <StyledPersonFinderLeftElement>\n <Icon icons={['fa fa-search']} />\n </StyledPersonFinderLeftElement>\n );\n\n const handleTagInputBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const handleTagInputFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const handleRemove = useCallback(\n (id: string) => {\n if (typeof setTags !== 'function' || shouldDisableRemove) {\n return;\n }\n\n setTags((prevState) => prevState.filter((entry) => entry.id !== id));\n\n if (typeof onRemove === 'function') {\n onRemove(id);\n }\n },\n [onRemove, setTags, shouldDisableRemove],\n );\n\n const handleClose = useCallback(() => {\n setShouldShowBody(false);\n }, []);\n\n const handleOpen = useCallback(() => {\n setShouldShowBody(true);\n }, []);\n\n const handleClear = useCallback(() => {\n if (typeof setTags !== 'function' || shouldDisableRemove) {\n return;\n }\n\n tagInputRef.current?.resetValue();\n\n setTags([]);\n }, [setTags, shouldDisableRemove]);\n\n const handleDropdownOutsideClick = useCallback(() => {\n tagInputRef.current?.blur();\n\n return isFocused && isTouch;\n }, [isFocused, isTouch]);\n\n const handleAdd = useCallback(\n (id: string) => {\n if (typeof setTags !== 'function') {\n return;\n }\n\n const selectedEntry = Object.values(data ?? {})\n .flat()\n .map(({ entries }) => entries)\n .flat()\n .find(\n (entry) =>\n (typeof entry.id === 'string' ? entry.id : entry.id.toString()) === id,\n );\n\n if (!selectedEntry) {\n return;\n }\n\n const { name, firstName, lastName } = selectedEntry as PersonEntry & SiteEntry;\n\n const tag: Tag = {\n id,\n text: name ?? `${(firstName as string) ?? ''} ${(lastName as string) ?? ''}`,\n };\n\n setTags((prevState) => {\n if (prevState.some((t) => t.id === id) || prevState.length >= maxEntries) {\n return prevState;\n }\n\n tagInputRef.current?.resetValue();\n\n if (typeof onAdd === 'function') {\n onAdd(selectedEntry);\n }\n\n if (shouldHideResultsOnAdd) {\n setShouldShowBody(false);\n }\n\n return [...prevState, tag];\n });\n },\n [data, maxEntries, onAdd, setTags, shouldHideResultsOnAdd],\n );\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (typeof updateSearch === 'function') {\n updateSearch(event.target.value);\n }\n },\n [updateSearch],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => handleClear(),\n }),\n [handleClear],\n );\n\n useEffect(() => {\n if (shouldShowBody) {\n if (typeof onDropdownShow === 'function') {\n onDropdownShow();\n }\n } else if (typeof onDropdownHide === 'function') {\n onDropdownHide();\n }\n }, [onDropdownHide, onDropdownShow, shouldShowBody]);\n\n const showBody = useMemo(() => {\n const extraMobileCheck = isTouch ? isFocused : true;\n\n if (\n filterTypes?.length === 1 &&\n (filterTypes.includes(PersonFinderFilterTypes.SITE) ||\n (filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friendsPriority !== Priority.HIGH))\n ) {\n return shouldShowBody && extraMobileCheck && !!search && search?.length > 2;\n }\n\n return shouldShowBody && extraMobileCheck;\n }, [filterTypes, friendsPriority, isFocused, isTouch, search, shouldShowBody]);\n\n const content = useMemo(() => {\n const body = (\n <PersonFinderBody\n filterTypes={filterTypes}\n onAdd={handleAdd}\n onRemove={handleRemove}\n ref={contentRef}\n shouldRenderInline={shouldRenderInline}\n />\n );\n\n if (shouldRenderInline) {\n return body;\n }\n\n if (boxRef.current) {\n return (\n <DropdownBodyWrapper\n anchorElement={boxRef.current}\n container={container}\n direction={dropdownDirection}\n onClose={handleClose}\n onOutsideClick={handleDropdownOutsideClick}\n shouldShowDropdown={showBody}\n >\n {body}\n </DropdownBodyWrapper>\n );\n }\n\n return null;\n }, [\n container,\n dropdownDirection,\n filterTypes,\n handleAdd,\n handleClose,\n handleDropdownOutsideClick,\n handleRemove,\n shouldRenderInline,\n showBody,\n ]);\n\n return (\n <StyledPersonFinder ref={boxRef} onFocus={handleOpen} key={keyRef.current}>\n <TagInput\n leftElement={leftElement}\n onBlur={handleTagInputBlur}\n onChange={handleChange}\n onFocus={handleTagInputFocus}\n onRemove={handleRemove}\n placeholder={placeholder}\n ref={tagInputRef}\n shouldAllowMultiple={shouldAllowMultiple}\n shouldPreventEnter\n tags={tags}\n />\n {content}\n </StyledPersonFinder>\n );\n },\n);\n\nPersonFinderWrapper.displayName = 'PersonFinderWrapper';\n\nexport default PersonFinderWrapper;\n"],"mappings":"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","ignoreList":[]}
@@ -26,8 +26,7 @@ const PersonFinderBody = /*#__PURE__*/forwardRef(({
26
26
  const content = useMemo(() => Object.entries(data ?? {}).map(([key, singleData], index) => {
27
27
  const {
28
28
  count,
29
- entries,
30
- searchString
29
+ entries
31
30
  } = singleData;
32
31
  return /*#__PURE__*/React.createElement(PersonFinderGroup, {
33
32
  key: `person-finder-group--${key}`,
@@ -36,7 +35,6 @@ const PersonFinderBody = /*#__PURE__*/forwardRef(({
36
35
  onRemove: onRemove,
37
36
  entries: entries,
38
37
  count: count,
39
- search: searchString,
40
38
  shouldShowGroupName: shouldShowGroupNames && index !== 0
41
39
  });
42
40
  }), [data, onAdd, onRemove, shouldShowGroupNames]);
@@ -1 +1 @@
1
- {"version":3,"file":"PersonFinderBody.js","names":["React","forwardRef","useMemo","useRef","useState","StyledPersonFinderBody","StyledPersonFinderBodyContent","usePersonFinder","getGroupName","useClosestElementAbove","PersonFinderGroup","PersonFinderHeader","PersonFinderBody","onAdd","filterTypes","onRemove","shouldRenderInline","ref","activeFilter","data","isScrollTop","setIsScrollTop","contentRef","currentGroupName","shouldShowGroupNames","length","defaultGroupName","Object","keys","handleContentScroll","event","target","scrollTop","content","entries","map","key","singleData","index","count","searchString","createElement","filterKey","search","shouldShowGroupName","$shouldRenderInline","shouldShowShadow","className","onScroll","displayName"],"sources":["../../../../../../src/components/person-finder/person-finder-wrapper/person-finder-body/PersonFinderBody.tsx"],"sourcesContent":["import React, { forwardRef, UIEvent, useMemo, useRef, useState } from 'react';\nimport { StyledPersonFinderBody, StyledPersonFinderBodyContent } from './PersonFinderBody.styles';\nimport { PersonFinderFilterTypes } from '../../../../types/personFinder';\nimport { usePersonFinder } from '../../../PersonFinderProvider';\nimport { getGroupName } from '../../../../utils/personFinder';\nimport { useClosestElementAbove } from '../../../../hooks/personFinder';\nimport PersonFinderGroup from './person-finder-group/PersonFinderGroup';\nimport PersonFinderHeader from './person-finder-header/PersonFinderHeader';\n\nexport type PersonFinderBodyProps = {\n onAdd: (id: string) => void;\n onRemove: (id: string) => void;\n filterTypes?: PersonFinderFilterTypes[];\n shouldRenderInline?: boolean;\n};\n\nconst PersonFinderBody = forwardRef<HTMLDivElement, PersonFinderBodyProps>(\n ({ onAdd, filterTypes, onRemove, shouldRenderInline }, ref) => {\n const { activeFilter, data } = usePersonFinder();\n\n const [isScrollTop, setIsScrollTop] = useState(true);\n\n const contentRef = useRef<HTMLDivElement>(null);\n\n const currentGroupName = useClosestElementAbove(contentRef, 'person-finder-group-name');\n\n const shouldShowGroupNames = (activeFilter?.length ?? 0) !== 1;\n\n const defaultGroupName = getGroupName(Object.keys(data ?? {})[0] ?? '');\n\n const handleContentScroll = (event: UIEvent<HTMLDivElement>) => {\n setIsScrollTop((event.target as HTMLElement).scrollTop === 0);\n };\n\n const content = useMemo(\n () =>\n Object.entries(data ?? {}).map(([key, singleData], index) => {\n const { count, entries, searchString } = singleData;\n\n return (\n <PersonFinderGroup\n key={`person-finder-group--${key}`}\n filterKey={key as PersonFinderFilterTypes}\n onAdd={onAdd}\n onRemove={onRemove}\n entries={entries}\n count={count}\n search={searchString}\n shouldShowGroupName={shouldShowGroupNames && index !== 0}\n />\n );\n }),\n [data, onAdd, onRemove, shouldShowGroupNames],\n );\n\n return (\n <StyledPersonFinderBody ref={ref} $shouldRenderInline={shouldRenderInline}>\n <PersonFinderHeader\n currentGroupName={currentGroupName}\n defaultGroupName={defaultGroupName}\n filterTypes={filterTypes}\n shouldShowGroupNames={shouldShowGroupNames}\n shouldShowShadow={!isScrollTop && !shouldRenderInline}\n />\n <StyledPersonFinderBodyContent\n ref={contentRef}\n className=\"chayns-scrollbar\"\n onScroll={handleContentScroll}\n >\n {content}\n </StyledPersonFinderBodyContent>\n </StyledPersonFinderBody>\n );\n },\n);\n\nPersonFinderBody.displayName = 'PersonFinderBody';\n\nexport default PersonFinderBody;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAWC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAC7E,SAASC,sBAAsB,EAAEC,6BAA6B,QAAQ,2BAA2B;AAEjG,SAASC,eAAe,QAAQ,+BAA+B;AAC/D,SAASC,YAAY,QAAQ,gCAAgC;AAC7D,SAASC,sBAAsB,QAAQ,gCAAgC;AACvE,OAAOC,iBAAiB,MAAM,yCAAyC;AACvE,OAAOC,kBAAkB,MAAM,2CAA2C;AAS1E,MAAMC,gBAAgB,gBAAGX,UAAU,CAC/B,CAAC;EAAEY,KAAK;EAAEC,WAAW;EAAEC,QAAQ;EAAEC;AAAmB,CAAC,EAAEC,GAAG,KAAK;EAC3D,MAAM;IAAEC,YAAY;IAAEC;EAAK,CAAC,GAAGZ,eAAe,CAAC,CAAC;EAEhD,MAAM,CAACa,WAAW,EAAEC,cAAc,CAAC,GAAGjB,QAAQ,CAAC,IAAI,CAAC;EAEpD,MAAMkB,UAAU,GAAGnB,MAAM,CAAiB,IAAI,CAAC;EAE/C,MAAMoB,gBAAgB,GAAGd,sBAAsB,CAACa,UAAU,EAAE,0BAA0B,CAAC;EAEvF,MAAME,oBAAoB,GAAG,CAACN,YAAY,EAAEO,MAAM,IAAI,CAAC,MAAM,CAAC;EAE9D,MAAMC,gBAAgB,GAAGlB,YAAY,CAACmB,MAAM,CAACC,IAAI,CAACT,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;EAEvE,MAAMU,mBAAmB,GAAIC,KAA8B,IAAK;IAC5DT,cAAc,CAAES,KAAK,CAACC,MAAM,CAAiBC,SAAS,KAAK,CAAC,CAAC;EACjE,CAAC;EAED,MAAMC,OAAO,GAAG/B,OAAO,CACnB,MACIyB,MAAM,CAACO,OAAO,CAACf,IAAI,IAAI,CAAC,CAAC,CAAC,CAACgB,GAAG,CAAC,CAAC,CAACC,GAAG,EAAEC,UAAU,CAAC,EAAEC,KAAK,KAAK;IACzD,MAAM;MAAEC,KAAK;MAAEL,OAAO;MAAEM;IAAa,CAAC,GAAGH,UAAU;IAEnD,oBACIrC,KAAA,CAAAyC,aAAA,CAAC/B,iBAAiB;MACd0B,GAAG,EAAE,wBAAwBA,GAAG,EAAG;MACnCM,SAAS,EAAEN,GAA+B;MAC1CvB,KAAK,EAAEA,KAAM;MACbE,QAAQ,EAAEA,QAAS;MACnBmB,OAAO,EAAEA,OAAQ;MACjBK,KAAK,EAAEA,KAAM;MACbI,MAAM,EAAEH,YAAa;MACrBI,mBAAmB,EAAEpB,oBAAoB,IAAIc,KAAK,KAAK;IAAE,CAC5D,CAAC;EAEV,CAAC,CAAC,EACN,CAACnB,IAAI,EAAEN,KAAK,EAAEE,QAAQ,EAAES,oBAAoB,CAChD,CAAC;EAED,oBACIxB,KAAA,CAAAyC,aAAA,CAACpC,sBAAsB;IAACY,GAAG,EAAEA,GAAI;IAAC4B,mBAAmB,EAAE7B;EAAmB,gBACtEhB,KAAA,CAAAyC,aAAA,CAAC9B,kBAAkB;IACfY,gBAAgB,EAAEA,gBAAiB;IACnCG,gBAAgB,EAAEA,gBAAiB;IACnCZ,WAAW,EAAEA,WAAY;IACzBU,oBAAoB,EAAEA,oBAAqB;IAC3CsB,gBAAgB,EAAE,CAAC1B,WAAW,IAAI,CAACJ;EAAmB,CACzD,CAAC,eACFhB,KAAA,CAAAyC,aAAA,CAACnC,6BAA6B;IAC1BW,GAAG,EAAEK,UAAW;IAChByB,SAAS,EAAC,kBAAkB;IAC5BC,QAAQ,EAAEnB;EAAoB,GAE7BI,OAC0B,CACX,CAAC;AAEjC,CACJ,CAAC;AAEDrB,gBAAgB,CAACqC,WAAW,GAAG,kBAAkB;AAEjD,eAAerC,gBAAgB","ignoreList":[]}
1
+ {"version":3,"file":"PersonFinderBody.js","names":["React","forwardRef","useMemo","useRef","useState","StyledPersonFinderBody","StyledPersonFinderBodyContent","usePersonFinder","getGroupName","useClosestElementAbove","PersonFinderGroup","PersonFinderHeader","PersonFinderBody","onAdd","filterTypes","onRemove","shouldRenderInline","ref","activeFilter","data","isScrollTop","setIsScrollTop","contentRef","currentGroupName","shouldShowGroupNames","length","defaultGroupName","Object","keys","handleContentScroll","event","target","scrollTop","content","entries","map","key","singleData","index","count","createElement","filterKey","shouldShowGroupName","$shouldRenderInline","shouldShowShadow","className","onScroll","displayName"],"sources":["../../../../../../src/components/person-finder/person-finder-wrapper/person-finder-body/PersonFinderBody.tsx"],"sourcesContent":["import React, { forwardRef, UIEvent, useMemo, useRef, useState } from 'react';\nimport { StyledPersonFinderBody, StyledPersonFinderBodyContent } from './PersonFinderBody.styles';\nimport { PersonFinderFilterTypes } from '../../../../types/personFinder';\nimport { usePersonFinder } from '../../../PersonFinderProvider';\nimport { getGroupName } from '../../../../utils/personFinder';\nimport { useClosestElementAbove } from '../../../../hooks/personFinder';\nimport PersonFinderGroup from './person-finder-group/PersonFinderGroup';\nimport PersonFinderHeader from './person-finder-header/PersonFinderHeader';\n\nexport type PersonFinderBodyProps = {\n onAdd: (id: string) => void;\n onRemove: (id: string) => void;\n filterTypes?: PersonFinderFilterTypes[];\n shouldRenderInline?: boolean;\n};\n\nconst PersonFinderBody = forwardRef<HTMLDivElement, PersonFinderBodyProps>(\n ({ onAdd, filterTypes, onRemove, shouldRenderInline }, ref) => {\n const { activeFilter, data } = usePersonFinder();\n\n const [isScrollTop, setIsScrollTop] = useState(true);\n\n const contentRef = useRef<HTMLDivElement>(null);\n\n const currentGroupName = useClosestElementAbove(contentRef, 'person-finder-group-name');\n\n const shouldShowGroupNames = (activeFilter?.length ?? 0) !== 1;\n\n const defaultGroupName = getGroupName(Object.keys(data ?? {})[0] ?? '');\n\n const handleContentScroll = (event: UIEvent<HTMLDivElement>) => {\n setIsScrollTop((event.target as HTMLElement).scrollTop === 0);\n };\n\n const content = useMemo(\n () =>\n Object.entries(data ?? {}).map(([key, singleData], index) => {\n const { count, entries } = singleData;\n\n return (\n <PersonFinderGroup\n key={`person-finder-group--${key}`}\n filterKey={key as PersonFinderFilterTypes}\n onAdd={onAdd}\n onRemove={onRemove}\n entries={entries}\n count={count}\n shouldShowGroupName={shouldShowGroupNames && index !== 0}\n />\n );\n }),\n [data, onAdd, onRemove, shouldShowGroupNames],\n );\n\n return (\n <StyledPersonFinderBody ref={ref} $shouldRenderInline={shouldRenderInline}>\n <PersonFinderHeader\n currentGroupName={currentGroupName}\n defaultGroupName={defaultGroupName}\n filterTypes={filterTypes}\n shouldShowGroupNames={shouldShowGroupNames}\n shouldShowShadow={!isScrollTop && !shouldRenderInline}\n />\n <StyledPersonFinderBodyContent\n ref={contentRef}\n className=\"chayns-scrollbar\"\n onScroll={handleContentScroll}\n >\n {content}\n </StyledPersonFinderBodyContent>\n </StyledPersonFinderBody>\n );\n },\n);\n\nPersonFinderBody.displayName = 'PersonFinderBody';\n\nexport default PersonFinderBody;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAWC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAC7E,SAASC,sBAAsB,EAAEC,6BAA6B,QAAQ,2BAA2B;AAEjG,SAASC,eAAe,QAAQ,+BAA+B;AAC/D,SAASC,YAAY,QAAQ,gCAAgC;AAC7D,SAASC,sBAAsB,QAAQ,gCAAgC;AACvE,OAAOC,iBAAiB,MAAM,yCAAyC;AACvE,OAAOC,kBAAkB,MAAM,2CAA2C;AAS1E,MAAMC,gBAAgB,gBAAGX,UAAU,CAC/B,CAAC;EAAEY,KAAK;EAAEC,WAAW;EAAEC,QAAQ;EAAEC;AAAmB,CAAC,EAAEC,GAAG,KAAK;EAC3D,MAAM;IAAEC,YAAY;IAAEC;EAAK,CAAC,GAAGZ,eAAe,CAAC,CAAC;EAEhD,MAAM,CAACa,WAAW,EAAEC,cAAc,CAAC,GAAGjB,QAAQ,CAAC,IAAI,CAAC;EAEpD,MAAMkB,UAAU,GAAGnB,MAAM,CAAiB,IAAI,CAAC;EAE/C,MAAMoB,gBAAgB,GAAGd,sBAAsB,CAACa,UAAU,EAAE,0BAA0B,CAAC;EAEvF,MAAME,oBAAoB,GAAG,CAACN,YAAY,EAAEO,MAAM,IAAI,CAAC,MAAM,CAAC;EAE9D,MAAMC,gBAAgB,GAAGlB,YAAY,CAACmB,MAAM,CAACC,IAAI,CAACT,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;EAEvE,MAAMU,mBAAmB,GAAIC,KAA8B,IAAK;IAC5DT,cAAc,CAAES,KAAK,CAACC,MAAM,CAAiBC,SAAS,KAAK,CAAC,CAAC;EACjE,CAAC;EAED,MAAMC,OAAO,GAAG/B,OAAO,CACnB,MACIyB,MAAM,CAACO,OAAO,CAACf,IAAI,IAAI,CAAC,CAAC,CAAC,CAACgB,GAAG,CAAC,CAAC,CAACC,GAAG,EAAEC,UAAU,CAAC,EAAEC,KAAK,KAAK;IACzD,MAAM;MAAEC,KAAK;MAAEL;IAAQ,CAAC,GAAGG,UAAU;IAErC,oBACIrC,KAAA,CAAAwC,aAAA,CAAC9B,iBAAiB;MACd0B,GAAG,EAAE,wBAAwBA,GAAG,EAAG;MACnCK,SAAS,EAAEL,GAA+B;MAC1CvB,KAAK,EAAEA,KAAM;MACbE,QAAQ,EAAEA,QAAS;MACnBmB,OAAO,EAAEA,OAAQ;MACjBK,KAAK,EAAEA,KAAM;MACbG,mBAAmB,EAAElB,oBAAoB,IAAIc,KAAK,KAAK;IAAE,CAC5D,CAAC;EAEV,CAAC,CAAC,EACN,CAACnB,IAAI,EAAEN,KAAK,EAAEE,QAAQ,EAAES,oBAAoB,CAChD,CAAC;EAED,oBACIxB,KAAA,CAAAwC,aAAA,CAACnC,sBAAsB;IAACY,GAAG,EAAEA,GAAI;IAAC0B,mBAAmB,EAAE3B;EAAmB,gBACtEhB,KAAA,CAAAwC,aAAA,CAAC7B,kBAAkB;IACfY,gBAAgB,EAAEA,gBAAiB;IACnCG,gBAAgB,EAAEA,gBAAiB;IACnCZ,WAAW,EAAEA,WAAY;IACzBU,oBAAoB,EAAEA,oBAAqB;IAC3CoB,gBAAgB,EAAE,CAACxB,WAAW,IAAI,CAACJ;EAAmB,CACzD,CAAC,eACFhB,KAAA,CAAAwC,aAAA,CAAClC,6BAA6B;IAC1BW,GAAG,EAAEK,UAAW;IAChBuB,SAAS,EAAC,kBAAkB;IAC5BC,QAAQ,EAAEjB;EAAoB,GAE7BI,OAC0B,CACX,CAAC;AAEjC,CACJ,CAAC;AAEDrB,gBAAgB,CAACmC,WAAW,GAAG,kBAAkB;AAEjD,eAAenC,gBAAgB","ignoreList":[]}
@@ -1,13 +1,12 @@
1
1
  import React, { useCallback } from 'react';
2
2
  import { Button, List, SmallWaitCursor } from '@chayns-components/core';
3
3
  import { LoadingState, PersonFinderFilterTypes } from '../../../../../types/personFinder';
4
- import { getGroupName } from '../../../../../utils/personFinder';
4
+ import { getGroupName, getPersonFinderTextstringValue } from '../../../../../utils/personFinder';
5
5
  import { StyledPersonFinderGroup, StyledPersonFinderGroupButtonWrapper, StyledPersonFinderGroupName, StyledPersonFinderGroupWaitCursor } from './PersonFinderGroup.styles';
6
6
  import { usePersonFinder } from '../../../../PersonFinderProvider';
7
7
  import PersonFinderItem from './person-finder-item/PersonFinderItem';
8
8
  import { useErrorMessage, useOnlyFriends } from '../../../../../hooks/personFinder';
9
9
  import PersonFinderSmallItem from './person-finder-small-item/PersonFinderSmallItem';
10
- import { Textstring, TextstringProvider, ttsToITextString } from '@chayns-components/textstring';
11
10
  import textStrings from '../../../../../constants/textStrings';
12
11
  const PersonFinderGroup = ({
13
12
  entries,
@@ -66,11 +65,9 @@ const PersonFinderGroup = ({
66
65
  key: `more-button--${filterKey}`,
67
66
  shouldShowWaitCursor: loadingState === LoadingState.Pending,
68
67
  onClick: handleLoadMore
69
- }, /*#__PURE__*/React.createElement(TextstringProvider, {
70
- libraryName: "@chayns-components-person-finder"
71
- }, /*#__PURE__*/React.createElement(Textstring, {
72
- textstring: ttsToITextString(ts.loadMore)
73
- }), ' ', getGroupName(filterKey)))));
68
+ }, getPersonFinderTextstringValue({
69
+ textstring: ts.loadMore
70
+ }), " ", groupName)));
74
71
  };
75
72
  PersonFinderGroup.displayName = 'PersonFinderGroup';
76
73
  export default PersonFinderGroup;
@@ -1 +1 @@
1
- {"version":3,"file":"PersonFinderGroup.js","names":["React","useCallback","Button","List","SmallWaitCursor","LoadingState","PersonFinderFilterTypes","getGroupName","StyledPersonFinderGroup","StyledPersonFinderGroupButtonWrapper","StyledPersonFinderGroupName","StyledPersonFinderGroupWaitCursor","usePersonFinder","PersonFinderItem","useErrorMessage","useOnlyFriends","PersonFinderSmallItem","Textstring","TextstringProvider","ttsToITextString","textStrings","PersonFinderGroup","entries","filterKey","count","shouldShowGroupName","onAdd","onRemove","loadMore","loadingState","loadingStateFromState","search","areOnlyFriendsGiven","UAC","groupName","None","shouldShowLoadMoreButton","length","waitCursor","Pending","createElement","shouldHideBackground","errorMessage","handleLoadMore","handlePreventDefault","event","preventDefault","stopPropagation","ts","components","personFinder","wrapper","body","group","onClick","className","map","entry","id","key","shouldShowWaitCursor","libraryName","textstring","displayName"],"sources":["../../../../../../../src/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.tsx"],"sourcesContent":["import React, { FC, MouseEvent, useCallback } from 'react';\nimport { Button, List, SmallWaitCursor } from '@chayns-components/core';\nimport {\n LoadingState,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n} from '../../../../../types/personFinder';\nimport { getGroupName } from '../../../../../utils/personFinder';\nimport {\n StyledPersonFinderGroup,\n StyledPersonFinderGroupButtonWrapper,\n StyledPersonFinderGroupName,\n StyledPersonFinderGroupWaitCursor,\n} from './PersonFinderGroup.styles';\nimport { usePersonFinder } from '../../../../PersonFinderProvider';\nimport PersonFinderItem from './person-finder-item/PersonFinderItem';\nimport { useErrorMessage, useOnlyFriends } from '../../../../../hooks/personFinder';\nimport PersonFinderSmallItem from './person-finder-small-item/PersonFinderSmallItem';\nimport { Textstring, TextstringProvider, ttsToITextString } from '@chayns-components/textstring';\nimport textStrings from '../../../../../constants/textStrings';\n\nexport type PersonFinderGroupProps = {\n filterKey: PersonFinderFilterTypes;\n entries: PersonFinderEntry[];\n count: number;\n search: string;\n shouldShowGroupName: boolean;\n onAdd: (id: string) => void;\n onRemove: (id: string) => void;\n};\n\nconst PersonFinderGroup: FC<PersonFinderGroupProps> = ({\n entries,\n filterKey,\n count,\n shouldShowGroupName,\n onAdd,\n onRemove,\n}) => {\n const { loadMore, loadingState: loadingStateFromState, search } = usePersonFinder();\n const areOnlyFriendsGiven =\n useOnlyFriends(entries) || filterKey === PersonFinderFilterTypes.UAC;\n\n const groupName = getGroupName(filterKey);\n\n const loadingState = loadingStateFromState\n ? (loadingStateFromState[filterKey] ?? LoadingState.None)\n : LoadingState.None;\n\n const shouldShowLoadMoreButton = entries.length < count;\n\n const waitCursor =\n (entries.length === 0 || areOnlyFriendsGiven) && loadingState === LoadingState.Pending ? (\n <StyledPersonFinderGroupWaitCursor>\n <SmallWaitCursor shouldHideBackground />\n </StyledPersonFinderGroupWaitCursor>\n ) : null;\n\n const errorMessage = useErrorMessage({\n areOnlyFriendsGiven,\n entries,\n loadingState,\n search: search ?? '',\n groupName,\n });\n\n const handleLoadMore = useCallback(() => {\n if (typeof loadMore === 'function') {\n loadMore(filterKey);\n }\n }, [filterKey, loadMore]);\n\n const handlePreventDefault = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const ts = textStrings.components.personFinder.wrapper.body.group;\n\n return (\n <StyledPersonFinderGroup onClick={handlePreventDefault}>\n {shouldShowGroupName && (\n <StyledPersonFinderGroupName className=\"person-finder-group-name\">\n {groupName}\n </StyledPersonFinderGroupName>\n )}\n {entries.length > 0 && (\n <List>\n {entries.map((entry) =>\n typeof entry.id === 'number' ? (\n <PersonFinderSmallItem\n key={`person-finder-entry--${entry.id}`}\n entry={entry}\n onAdd={onAdd}\n onRemove={onRemove}\n />\n ) : (\n <PersonFinderItem\n key={`person-finder-entry--${entry.id}`}\n entry={entry}\n onAdd={onAdd}\n onRemove={onRemove}\n />\n ),\n )}\n </List>\n )}\n {waitCursor}\n {errorMessage}\n {shouldShowLoadMoreButton && (\n <StyledPersonFinderGroupButtonWrapper key={`more-button-wrapper--${filterKey}`}>\n <Button\n key={`more-button--${filterKey}`}\n shouldShowWaitCursor={loadingState === LoadingState.Pending}\n onClick={handleLoadMore}\n >\n <TextstringProvider libraryName=\"@chayns-components-person-finder\">\n <Textstring textstring={ttsToITextString(ts.loadMore)} />{' '}\n {getGroupName(filterKey)}\n </TextstringProvider>\n </Button>\n </StyledPersonFinderGroupButtonWrapper>\n )}\n </StyledPersonFinderGroup>\n );\n};\n\nPersonFinderGroup.displayName = 'PersonFinderGroup';\n\nexport default PersonFinderGroup;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PersonFinderGroup.js","names":["React","useCallback","Button","List","SmallWaitCursor","LoadingState","PersonFinderFilterTypes","getGroupName","getPersonFinderTextstringValue","StyledPersonFinderGroup","StyledPersonFinderGroupButtonWrapper","StyledPersonFinderGroupName","StyledPersonFinderGroupWaitCursor","usePersonFinder","PersonFinderItem","useErrorMessage","useOnlyFriends","PersonFinderSmallItem","textStrings","PersonFinderGroup","entries","filterKey","count","shouldShowGroupName","onAdd","onRemove","loadMore","loadingState","loadingStateFromState","search","areOnlyFriendsGiven","UAC","groupName","None","shouldShowLoadMoreButton","length","waitCursor","Pending","createElement","shouldHideBackground","errorMessage","handleLoadMore","handlePreventDefault","event","preventDefault","stopPropagation","ts","components","personFinder","wrapper","body","group","onClick","className","map","entry","id","key","shouldShowWaitCursor","textstring","displayName"],"sources":["../../../../../../../src/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.tsx"],"sourcesContent":["import React, { FC, MouseEvent, useCallback } from 'react';\nimport { Button, List, SmallWaitCursor } from '@chayns-components/core';\nimport {\n LoadingState,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n} from '../../../../../types/personFinder';\nimport { getGroupName, getPersonFinderTextstringValue } from '../../../../../utils/personFinder';\nimport {\n StyledPersonFinderGroup,\n StyledPersonFinderGroupButtonWrapper,\n StyledPersonFinderGroupName,\n StyledPersonFinderGroupWaitCursor,\n} from './PersonFinderGroup.styles';\nimport { usePersonFinder } from '../../../../PersonFinderProvider';\nimport PersonFinderItem from './person-finder-item/PersonFinderItem';\nimport { useErrorMessage, useOnlyFriends } from '../../../../../hooks/personFinder';\nimport PersonFinderSmallItem from './person-finder-small-item/PersonFinderSmallItem';\nimport textStrings from '../../../../../constants/textStrings';\n\nexport type PersonFinderGroupProps = {\n filterKey: PersonFinderFilterTypes;\n entries: PersonFinderEntry[];\n count: number;\n shouldShowGroupName: boolean;\n onAdd: (id: string) => void;\n onRemove: (id: string) => void;\n};\n\nconst PersonFinderGroup: FC<PersonFinderGroupProps> = ({\n entries,\n filterKey,\n count,\n shouldShowGroupName,\n onAdd,\n onRemove,\n}) => {\n const { loadMore, loadingState: loadingStateFromState, search } = usePersonFinder();\n const areOnlyFriendsGiven =\n useOnlyFriends(entries) || filterKey === PersonFinderFilterTypes.UAC;\n\n const groupName = getGroupName(filterKey);\n\n const loadingState = loadingStateFromState\n ? (loadingStateFromState[filterKey] ?? LoadingState.None)\n : LoadingState.None;\n\n const shouldShowLoadMoreButton = entries.length < count;\n\n const waitCursor =\n (entries.length === 0 || areOnlyFriendsGiven) && loadingState === LoadingState.Pending ? (\n <StyledPersonFinderGroupWaitCursor>\n <SmallWaitCursor shouldHideBackground />\n </StyledPersonFinderGroupWaitCursor>\n ) : null;\n\n const errorMessage = useErrorMessage({\n areOnlyFriendsGiven,\n entries,\n loadingState,\n search: search ?? '',\n groupName,\n });\n\n const handleLoadMore = useCallback(() => {\n if (typeof loadMore === 'function') {\n loadMore(filterKey);\n }\n }, [filterKey, loadMore]);\n\n const handlePreventDefault = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const ts = textStrings.components.personFinder.wrapper.body.group;\n\n return (\n <StyledPersonFinderGroup onClick={handlePreventDefault}>\n {shouldShowGroupName && (\n <StyledPersonFinderGroupName className=\"person-finder-group-name\">\n {groupName}\n </StyledPersonFinderGroupName>\n )}\n {entries.length > 0 && (\n <List>\n {entries.map((entry) =>\n typeof entry.id === 'number' ? (\n <PersonFinderSmallItem\n key={`person-finder-entry--${entry.id}`}\n entry={entry}\n onAdd={onAdd}\n onRemove={onRemove}\n />\n ) : (\n <PersonFinderItem\n key={`person-finder-entry--${entry.id}`}\n entry={entry}\n onAdd={onAdd}\n onRemove={onRemove}\n />\n ),\n )}\n </List>\n )}\n {waitCursor}\n {errorMessage}\n {shouldShowLoadMoreButton && (\n <StyledPersonFinderGroupButtonWrapper key={`more-button-wrapper--${filterKey}`}>\n <Button\n key={`more-button--${filterKey}`}\n shouldShowWaitCursor={loadingState === LoadingState.Pending}\n onClick={handleLoadMore}\n >\n {getPersonFinderTextstringValue({ textstring: ts.loadMore })} {groupName}\n </Button>\n </StyledPersonFinderGroupButtonWrapper>\n )}\n </StyledPersonFinderGroup>\n );\n};\n\nPersonFinderGroup.displayName = 'PersonFinderGroup';\n\nexport default PersonFinderGroup;\n"],"mappings":"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","ignoreList":[]}