@chayns-components/person-finder 5.4.0 → 5.4.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.
@@ -197,6 +197,8 @@ const PersonFinderProvider = ({
197
197
  }, [filterTypes]);
198
198
  const latestArgsRef = (0, _react.useRef)(null);
199
199
  const latestHandledRequestRef = (0, _react.useRef)(0);
200
+ const searchLocalRef = (0, _react.useRef)(() => {});
201
+ const searchDataRef = (0, _react.useRef)(() => {});
200
202
  const throttledRequest = (0, _react.useRef)((0, _lodash.default)(async () => {
201
203
  const args = latestArgsRef.current;
202
204
  if (!args) return;
@@ -242,10 +244,7 @@ const PersonFinderProvider = ({
242
244
  }, THROTTLE_INTERVAL, {
243
245
  leading: false,
244
246
  trailing: true
245
- })).current;
246
- (0, _react.useEffect)(() => {
247
- dataRef.current = data;
248
- }, [data]);
247
+ }));
249
248
  const searchData = (0, _react.useCallback)(({
250
249
  filter
251
250
  }) => {
@@ -289,26 +288,69 @@ const PersonFinderProvider = ({
289
288
  });
290
289
  updateLoadingState(_personFinder.PersonFinderFilterTypes.PERSON, searchedUsers.length === 0 ? _personFinder.LoadingState.Error : _personFinder.LoadingState.Success);
291
290
  }, [entries, search, uacUsers, updateData, updateLoadingState]);
291
+ (0, _react.useEffect)(() => {
292
+ dataRef.current = data;
293
+ }, [data]);
294
+ (0, _react.useEffect)(() => {
295
+ searchLocalRef.current = searchLocal;
296
+ }, [searchLocal]);
297
+ (0, _react.useEffect)(() => {
298
+ searchDataRef.current = searchData;
299
+ }, [searchData]);
292
300
  (0, _react.useEffect)(() => {
293
301
  if (!search) return;
294
- const active = activeFilter ?? filterTypes;
302
+ const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;
303
+ const currentData = dataRef.current;
295
304
  if (uacFilter || entries) {
296
- searchLocal();
305
+ searchLocalRef.current();
297
306
  } else if (active !== null && active !== void 0 && active.includes(_personFinder.PersonFinderFilterTypes.UAC)) {
298
- searchData({
307
+ searchDataRef.current({
299
308
  filter: [_personFinder.PersonFinderFilterTypes.UAC]
300
309
  });
301
310
  } else {
311
+ // Only load filters that don't have data for this search yet
312
+ const filtersToLoad = active.filter(filter => {
313
+ const filterData = currentData === null || currentData === void 0 ? void 0 : currentData[filter];
314
+ return !filterData || filterData.searchString !== search;
315
+ });
316
+
317
+ // If we have filters to load, use them; otherwise use all active filters
318
+ const filterList = filtersToLoad.length > 0 ? filtersToLoad : active;
302
319
  latestArgsRef.current = {
303
320
  search,
304
- filter: active
321
+ filter: filterList
305
322
  };
306
- throttledRequest();
323
+ throttledRequest.current();
307
324
  }
308
- }, [filterTypes, search, activeFilter, friends, friendsPriority, updateData, updateLoadingState, throttledRequest, searchData, uacFilter, searchLocal, entries]);
325
+ }, [search, uacFilter, entries]);
326
+
327
+ // Handle filter changes - load missing data for newly selected filters
328
+ (0, _react.useEffect)(() => {
329
+ if (!search) return;
330
+ const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;
331
+ const currentData = dataRef.current;
332
+
333
+ // Check which filters need to be loaded (don't have data for current search)
334
+ const missingFilters = active.filter(filter => {
335
+ const filterData = currentData === null || currentData === void 0 ? void 0 : currentData[filter];
336
+ // If no data or data is from a different search, we need to load it
337
+ return !filterData || filterData.searchString !== search;
338
+ });
339
+ if (missingFilters.length === 0) return;
340
+ if (uacFilter || entries) return;
341
+ if (active !== null && active !== void 0 && active.includes(_personFinder.PersonFinderFilterTypes.UAC)) return;
342
+
343
+ // Load only the missing filters
344
+ latestArgsRef.current = {
345
+ search,
346
+ filter: missingFilters
347
+ };
348
+ throttledRequest.current();
349
+ }, [activeFilter, search, uacFilter, entries, filterTypes]);
309
350
  (0, _react.useEffect)(() => () => {
310
- throttledRequest.cancel();
311
- }, [throttledRequest]);
351
+ var _throttledRequest$cur;
352
+ (_throttledRequest$cur = throttledRequest.current) === null || _throttledRequest$cur === void 0 || _throttledRequest$cur.cancel();
353
+ }, []);
312
354
 
313
355
  // load initial data
314
356
  (0, _react.useEffect)(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"PersonFinderProvider.js","names":["_react","_interopRequireWildcard","require","_lodash","_interopRequireDefault","_personFinder","_get","_post","_delete","_personFinder2","_uac","_textstring","_textStrings","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","THROTTLE_INTERVAL","PAGE_SIZE","PersonFinderContext","exports","createContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","relationMode","displayName","usePersonFinder","useContext","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","getPagedUsersByGroups","useCallback","getUsersByGroups","setData","useState","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PersonFinderFilterTypes","PERSON","LoadingState","None","SITE","dataRef","useRef","filter","key","newData","prevState","appendData","_prevState$key","_prevState$key2","oldEntries","state","prev","value","Pending","current","Error","RelationMode","groupId","skip","take","then","result","users","count","length","searchString","finally","Success","loadData","skipMap","personId","postFriends","firstName","lastName","verificationState","isVerified","commonSites","type","deleteFriends","wasSuccessful","useEffect","includes","getFriends","latestArgsRef","latestHandledRequestRef","throttledRequest","throttle","args","requestTimestamp","Date","now","forEach","keyString","Priority","HIGH","friendIds","Set","serverFriendEntries","entry","serverFriendIds","missingFriends","_f$firstName","_f$lastName","toLowerCase","otherEntries","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","searchLocal","searchedUsers","entriesToSearch","_entry$firstName","_entry$lastName","Boolean","join","trim","push","active","UAC","cancel","person","getUACGroups","uac","providerValue","useMemo","filterDataByKeys","createElement","Provider","TextstringProvider","libraryName","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","_default"],"sources":["../../../src/components/PersonFinderProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n Dispatch,\n FC,\n ReactNode,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport throttle from 'lodash.throttle';\nimport {\n DefaultEntry,\n LoadingState,\n LoadingStateMap,\n PersonEntry,\n PersonFinderData,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n ThrottledFunction,\n UACEntry,\n UACFilter,\n} from '../types/personFinder';\nimport { getFriends } from '../api/friends/get';\nimport { postFriends } from '../api/friends/post';\nimport { deleteFriends } from '../api/friends/delete';\nimport { filterDataByKeys, loadData } from '../utils/personFinder';\nimport { Tag } from '@chayns-components/core/lib/types/types/tagInput';\nimport { getUACGroups, getUsersByGroups } from '../utils/uac';\nimport { TextstringProvider } from '@chayns-components/textstring';\nimport { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\nconst THROTTLE_INTERVAL = 500;\nconst PAGE_SIZE = 20;\n\ntype GetUsersByGroupsResult = {\n users: PersonEntry[];\n count: number;\n};\n\nexport interface IPersonFinderContext {\n // Data\n data?: { [key: string]: PersonFinderData };\n updateData?: (key: PersonFinderFilterTypes, personFinderData: PersonFinderData) => void;\n\n // Tags\n tags?: Tag[];\n setTags?: Dispatch<SetStateAction<Tag[]>>;\n\n // Friends\n friends?: PersonEntry[];\n addFriend?: (personId: string) => void;\n removeFriend?: (personId: string) => void;\n\n // Filter\n activeFilter?: PersonFinderFilterTypes[];\n updateActiveFilter?: (filter: PersonFinderFilterTypes[]) => void;\n\n // Search\n search?: string;\n updateSearch?: (value: string) => void;\n\n // Loading\n loadMore?: (key: PersonFinderFilterTypes) => void;\n loadingState?: LoadingStateMap;\n updateLoadingState?: (key: PersonFinderFilterTypes, state: LoadingState) => void;\n\n relationMode?: RelationMode;\n}\n\nexport const PersonFinderContext = createContext<IPersonFinderContext>({\n data: undefined,\n updateData: undefined,\n friends: undefined,\n addFriend: undefined,\n removeFriend: undefined,\n activeFilter: undefined,\n updateActiveFilter: undefined,\n search: undefined,\n updateSearch: undefined,\n loadMore: undefined,\n loadingState: undefined,\n updateLoadingState: undefined,\n tags: undefined,\n setTags: undefined,\n relationMode: undefined,\n});\n\nPersonFinderContext.displayName = 'PersonFinderContext';\n\nexport const usePersonFinder = () => useContext(PersonFinderContext);\n\ntype PersonFinderProviderProps = {\n children: ReactNode;\n friendsPriority: Priority;\n filterTypes: PersonFinderFilterTypes[];\n defaultEntries?: DefaultEntry[];\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n uacFilter?: UACFilter[];\n entries?: PersonEntry[];\n relationMode?: RelationMode;\n};\n\nconst PersonFinderProvider: FC<PersonFinderProviderProps> = ({\n children,\n friendsPriority,\n filterTypes,\n defaultEntries,\n excludedEntryIds,\n shouldShowOwnUser = false,\n uacFilter,\n entries,\n relationMode,\n}) => {\n const getPagedUsersByGroups = useCallback(\n getUsersByGroups as unknown as (\n uacFilter: UACFilter[],\n options?: { skip?: number; take?: number },\n ) => Promise<GetUsersByGroupsResult>,\n [],\n );\n\n const [data, setData] = useState<IPersonFinderContext['data']>();\n const [friends, setFriends] = useState<PersonEntry[]>();\n const [uacUsers, setUacUsers] = useState<PersonEntry[]>();\n const [activeFilter, setActiveFilter] = useState<IPersonFinderContext['activeFilter']>();\n const [search, setSearch] = useState('');\n const [tags, setTags] = useState<Tag[]>(\n defaultEntries?.map(({ id, name }) => ({ id, text: name })) ?? [],\n );\n const [loadingState, setLoadingState] = useState<LoadingStateMap>({\n [PersonFinderFilterTypes.PERSON]: LoadingState.None,\n [PersonFinderFilterTypes.SITE]: LoadingState.None,\n });\n\n const dataRef = useRef<IPersonFinderContext['data']>();\n\n const updateActiveFilter = useCallback((filter: IPersonFinderContext['activeFilter']) => {\n setActiveFilter(filter);\n }, []);\n\n const updateData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => ({ ...prevState, [key]: newData }));\n }, []);\n\n const appendData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => {\n const oldEntries = prevState && prevState[key]?.entries ? prevState[key]?.entries : [];\n\n return {\n ...prevState,\n [key]: {\n ...newData,\n entries: [...oldEntries, ...newData.entries],\n },\n };\n });\n }, []);\n\n const updateLoadingState = useCallback((key: PersonFinderFilterTypes, state: LoadingState) => {\n setLoadingState((prev) => ({\n ...prev,\n [key]: state,\n }));\n }, []);\n\n const updateSearch = useCallback((value: string) => {\n setSearch(value);\n }, []);\n\n const loadMore = useCallback(\n (key: PersonFinderFilterTypes) => {\n updateLoadingState(key, LoadingState.Pending);\n\n const current = data?.[key];\n\n if (!current) {\n updateLoadingState(key, LoadingState.Error);\n\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n key === PersonFinderFilterTypes.PERSON &&\n search === ''\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], {\n skip: current.skip,\n take: PAGE_SIZE,\n })\n .then((result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n if (users.length > 0) {\n appendData(key, {\n entries: users,\n searchString: '',\n skip: current.skip + users.length,\n count,\n });\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n\n return;\n }\n\n void loadData({\n searchString: search ?? '',\n filter: [key],\n skipMap: { [key]: current.skip },\n relationMode,\n })\n .then((result) => {\n const newData = result?.[key];\n\n if (newData) {\n appendData(key, newData);\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n },\n [appendData, data, getPagedUsersByGroups, relationMode, search, updateLoadingState],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n relationMode,\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n ).current;\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter ?? filterTypes;\n\n if (uacFilter || entries) {\n searchLocal();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchData({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n latestArgsRef.current = { search, filter: active };\n\n throttledRequest();\n }\n }, [\n filterTypes,\n search,\n activeFilter,\n friends,\n friendsPriority,\n updateData,\n updateLoadingState,\n throttledRequest,\n searchData,\n uacFilter,\n searchLocal,\n entries,\n ]);\n\n useEffect(\n () => () => {\n throttledRequest.cancel();\n },\n [throttledRequest],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON)\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], { skip: 0, take: PAGE_SIZE }).then(\n (result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n setData({\n person: {\n entries: users,\n searchString: '',\n skip: users.length,\n count,\n },\n });\n },\n );\n }\n\n if (uacFilter) {\n void getPagedUsersByGroups(uacFilter).then((result: GetUsersByGroupsResult) => {\n const { users } = result;\n\n setUacUsers(users);\n });\n\n return;\n }\n\n if (filterTypes.includes(PersonFinderFilterTypes.UAC) && search === '') {\n void getUACGroups().then((result) => {\n setData({\n uac: {\n entries: result,\n searchString: '',\n skip: result.length,\n count: result.length,\n },\n });\n });\n }\n\n if (\n friendsPriority === Priority.HIGH &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friends &&\n search === ''\n ) {\n setData({\n person: {\n entries: friends,\n searchString: '',\n skip: friends.length,\n count: friends.length,\n },\n });\n }\n }, [\n entries,\n filterTypes,\n friends,\n friendsPriority,\n getPagedUsersByGroups,\n relationMode,\n search,\n uacFilter,\n ]);\n\n const providerValue = useMemo<IPersonFinderContext>(\n () => ({\n data: filterDataByKeys(data, activeFilter, {\n excludedEntryIds,\n shouldShowOwnUser: uacFilter ? false : shouldShowOwnUser,\n }),\n updateData,\n activeFilter,\n updateActiveFilter,\n friends,\n addFriend,\n removeFriend,\n search,\n updateSearch,\n loadMore,\n loadingState,\n updateLoadingState,\n setTags,\n tags,\n relationMode,\n }),\n [\n activeFilter,\n addFriend,\n data,\n excludedEntryIds,\n friends,\n loadMore,\n loadingState,\n removeFriend,\n search,\n shouldShowOwnUser,\n tags,\n uacFilter,\n updateActiveFilter,\n updateData,\n updateLoadingState,\n updateSearch,\n relationMode,\n ],\n );\n\n return (\n <PersonFinderContext.Provider value={providerValue}>\n <TextstringProvider libraryName={PERSON_FINDER_TEXTSTRING_LIBRARY_NAME}>\n {children}\n </TextstringProvider>\n </PersonFinderContext.Provider>\n );\n};\n\nPersonFinderProvider.displayName = 'PersonFinderProvider';\n\nexport default PersonFinderProvider;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PersonFinderProvider.js","names":["_react","_interopRequireWildcard","require","_lodash","_interopRequireDefault","_personFinder","_get","_post","_delete","_personFinder2","_uac","_textstring","_textStrings","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","THROTTLE_INTERVAL","PAGE_SIZE","PersonFinderContext","exports","createContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","relationMode","displayName","usePersonFinder","useContext","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","getPagedUsersByGroups","useCallback","getUsersByGroups","setData","useState","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PersonFinderFilterTypes","PERSON","LoadingState","None","SITE","dataRef","useRef","filter","key","newData","prevState","appendData","_prevState$key","_prevState$key2","oldEntries","state","prev","value","Pending","current","Error","RelationMode","groupId","skip","take","then","result","users","count","length","searchString","finally","Success","loadData","skipMap","personId","postFriends","firstName","lastName","verificationState","isVerified","commonSites","type","deleteFriends","wasSuccessful","useEffect","includes","getFriends","latestArgsRef","latestHandledRequestRef","searchLocalRef","searchDataRef","throttledRequest","throttle","args","requestTimestamp","Date","now","forEach","keyString","Priority","HIGH","friendIds","Set","serverFriendEntries","entry","serverFriendIds","missingFriends","_f$firstName","_f$lastName","toLowerCase","otherEntries","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","searchLocal","searchedUsers","entriesToSearch","_entry$firstName","_entry$lastName","Boolean","join","trim","push","active","currentData","UAC","filtersToLoad","filterData","filterList","missingFilters","_throttledRequest$cur","cancel","person","getUACGroups","uac","providerValue","useMemo","filterDataByKeys","createElement","Provider","TextstringProvider","libraryName","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","_default"],"sources":["../../../src/components/PersonFinderProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n Dispatch,\n FC,\n ReactNode,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport throttle from 'lodash.throttle';\nimport {\n DefaultEntry,\n LoadingState,\n LoadingStateMap,\n PersonEntry,\n PersonFinderData,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n ThrottledFunction,\n UACEntry,\n UACFilter,\n} from '../types/personFinder';\nimport { getFriends } from '../api/friends/get';\nimport { postFriends } from '../api/friends/post';\nimport { deleteFriends } from '../api/friends/delete';\nimport { filterDataByKeys, loadData } from '../utils/personFinder';\nimport { Tag } from '@chayns-components/core/lib/types/types/tagInput';\nimport { getUACGroups, getUsersByGroups } from '../utils/uac';\nimport { TextstringProvider } from '@chayns-components/textstring';\nimport { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\nconst THROTTLE_INTERVAL = 500;\nconst PAGE_SIZE = 20;\n\ntype GetUsersByGroupsResult = {\n users: PersonEntry[];\n count: number;\n};\n\nexport interface IPersonFinderContext {\n // Data\n data?: { [key: string]: PersonFinderData };\n updateData?: (key: PersonFinderFilterTypes, personFinderData: PersonFinderData) => void;\n\n // Tags\n tags?: Tag[];\n setTags?: Dispatch<SetStateAction<Tag[]>>;\n\n // Friends\n friends?: PersonEntry[];\n addFriend?: (personId: string) => void;\n removeFriend?: (personId: string) => void;\n\n // Filter\n activeFilter?: PersonFinderFilterTypes[];\n updateActiveFilter?: (filter: PersonFinderFilterTypes[]) => void;\n\n // Search\n search?: string;\n updateSearch?: (value: string) => void;\n\n // Loading\n loadMore?: (key: PersonFinderFilterTypes) => void;\n loadingState?: LoadingStateMap;\n updateLoadingState?: (key: PersonFinderFilterTypes, state: LoadingState) => void;\n\n relationMode?: RelationMode;\n}\n\nexport const PersonFinderContext = createContext<IPersonFinderContext>({\n data: undefined,\n updateData: undefined,\n friends: undefined,\n addFriend: undefined,\n removeFriend: undefined,\n activeFilter: undefined,\n updateActiveFilter: undefined,\n search: undefined,\n updateSearch: undefined,\n loadMore: undefined,\n loadingState: undefined,\n updateLoadingState: undefined,\n tags: undefined,\n setTags: undefined,\n relationMode: undefined,\n});\n\nPersonFinderContext.displayName = 'PersonFinderContext';\n\nexport const usePersonFinder = () => useContext(PersonFinderContext);\n\ntype PersonFinderProviderProps = {\n children: ReactNode;\n friendsPriority: Priority;\n filterTypes: PersonFinderFilterTypes[];\n defaultEntries?: DefaultEntry[];\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n uacFilter?: UACFilter[];\n entries?: PersonEntry[];\n relationMode?: RelationMode;\n};\n\nconst PersonFinderProvider: FC<PersonFinderProviderProps> = ({\n children,\n friendsPriority,\n filterTypes,\n defaultEntries,\n excludedEntryIds,\n shouldShowOwnUser = false,\n uacFilter,\n entries,\n relationMode,\n}) => {\n const getPagedUsersByGroups = useCallback(\n getUsersByGroups as unknown as (\n uacFilter: UACFilter[],\n options?: { skip?: number; take?: number },\n ) => Promise<GetUsersByGroupsResult>,\n [],\n );\n\n const [data, setData] = useState<IPersonFinderContext['data']>();\n const [friends, setFriends] = useState<PersonEntry[]>();\n const [uacUsers, setUacUsers] = useState<PersonEntry[]>();\n const [activeFilter, setActiveFilter] = useState<IPersonFinderContext['activeFilter']>();\n const [search, setSearch] = useState('');\n const [tags, setTags] = useState<Tag[]>(\n defaultEntries?.map(({ id, name }) => ({ id, text: name })) ?? [],\n );\n const [loadingState, setLoadingState] = useState<LoadingStateMap>({\n [PersonFinderFilterTypes.PERSON]: LoadingState.None,\n [PersonFinderFilterTypes.SITE]: LoadingState.None,\n });\n\n const dataRef = useRef<IPersonFinderContext['data']>();\n\n const updateActiveFilter = useCallback((filter: IPersonFinderContext['activeFilter']) => {\n setActiveFilter(filter);\n }, []);\n\n const updateData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => ({ ...prevState, [key]: newData }));\n }, []);\n\n const appendData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => {\n const oldEntries = prevState && prevState[key]?.entries ? prevState[key]?.entries : [];\n\n return {\n ...prevState,\n [key]: {\n ...newData,\n entries: [...oldEntries, ...newData.entries],\n },\n };\n });\n }, []);\n\n const updateLoadingState = useCallback((key: PersonFinderFilterTypes, state: LoadingState) => {\n setLoadingState((prev) => ({\n ...prev,\n [key]: state,\n }));\n }, []);\n\n const updateSearch = useCallback((value: string) => {\n setSearch(value);\n }, []);\n\n const loadMore = useCallback(\n (key: PersonFinderFilterTypes) => {\n updateLoadingState(key, LoadingState.Pending);\n\n const current = data?.[key];\n\n if (!current) {\n updateLoadingState(key, LoadingState.Error);\n\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n key === PersonFinderFilterTypes.PERSON &&\n search === ''\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], {\n skip: current.skip,\n take: PAGE_SIZE,\n })\n .then((result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n if (users.length > 0) {\n appendData(key, {\n entries: users,\n searchString: '',\n skip: current.skip + users.length,\n count,\n });\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n\n return;\n }\n\n void loadData({\n searchString: search ?? '',\n filter: [key],\n skipMap: { [key]: current.skip },\n relationMode,\n })\n .then((result) => {\n const newData = result?.[key];\n\n if (newData) {\n appendData(key, newData);\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n },\n [appendData, data, getPagedUsersByGroups, relationMode, search, updateLoadingState],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n const searchLocalRef = useRef<() => void>(() => {});\n const searchDataRef = useRef<({ filter }: { filter: PersonFinderFilterTypes[] }) => void>(\n () => {},\n );\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n relationMode,\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n );\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n useEffect(() => {\n searchLocalRef.current = searchLocal;\n }, [searchLocal]);\n\n useEffect(() => {\n searchDataRef.current = searchData;\n }, [searchData]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;\n const currentData = dataRef.current;\n\n if (uacFilter || entries) {\n searchLocalRef.current();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchDataRef.current({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n // Only load filters that don't have data for this search yet\n const filtersToLoad = active.filter((filter) => {\n const filterData = currentData?.[filter];\n return !filterData || filterData.searchString !== search;\n });\n\n // If we have filters to load, use them; otherwise use all active filters\n const filterList = filtersToLoad.length > 0 ? filtersToLoad : active;\n\n latestArgsRef.current = { search, filter: filterList };\n\n throttledRequest.current();\n }\n }, [search, uacFilter, entries]);\n\n // Handle filter changes - load missing data for newly selected filters\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;\n const currentData = dataRef.current;\n\n // Check which filters need to be loaded (don't have data for current search)\n const missingFilters = active.filter((filter) => {\n const filterData = currentData?.[filter];\n // If no data or data is from a different search, we need to load it\n return !filterData || filterData.searchString !== search;\n });\n\n if (missingFilters.length === 0) return;\n if (uacFilter || entries) return;\n if (active?.includes(PersonFinderFilterTypes.UAC)) return;\n\n // Load only the missing filters\n latestArgsRef.current = { search, filter: missingFilters };\n throttledRequest.current();\n }, [activeFilter, search, uacFilter, entries, filterTypes]);\n\n useEffect(\n () => () => {\n throttledRequest.current?.cancel();\n },\n [],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON)\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], { skip: 0, take: PAGE_SIZE }).then(\n (result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n setData({\n person: {\n entries: users,\n searchString: '',\n skip: users.length,\n count,\n },\n });\n },\n );\n }\n\n if (uacFilter) {\n void getPagedUsersByGroups(uacFilter).then((result: GetUsersByGroupsResult) => {\n const { users } = result;\n\n setUacUsers(users);\n });\n\n return;\n }\n\n if (filterTypes.includes(PersonFinderFilterTypes.UAC) && search === '') {\n void getUACGroups().then((result) => {\n setData({\n uac: {\n entries: result,\n searchString: '',\n skip: result.length,\n count: result.length,\n },\n });\n });\n }\n\n if (\n friendsPriority === Priority.HIGH &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friends &&\n search === ''\n ) {\n setData({\n person: {\n entries: friends,\n searchString: '',\n skip: friends.length,\n count: friends.length,\n },\n });\n }\n }, [\n entries,\n filterTypes,\n friends,\n friendsPriority,\n getPagedUsersByGroups,\n relationMode,\n search,\n uacFilter,\n ]);\n\n const providerValue = useMemo<IPersonFinderContext>(\n () => ({\n data: filterDataByKeys(data, activeFilter, {\n excludedEntryIds,\n shouldShowOwnUser: uacFilter ? false : shouldShowOwnUser,\n }),\n updateData,\n activeFilter,\n updateActiveFilter,\n friends,\n addFriend,\n removeFriend,\n search,\n updateSearch,\n loadMore,\n loadingState,\n updateLoadingState,\n setTags,\n tags,\n relationMode,\n }),\n [\n activeFilter,\n addFriend,\n data,\n excludedEntryIds,\n friends,\n loadMore,\n loadingState,\n removeFriend,\n search,\n shouldShowOwnUser,\n tags,\n uacFilter,\n updateActiveFilter,\n updateData,\n updateLoadingState,\n updateSearch,\n relationMode,\n ],\n );\n\n return (\n <PersonFinderContext.Provider value={providerValue}>\n <TextstringProvider libraryName={PERSON_FINDER_TEXTSTRING_LIBRARY_NAME}>\n {children}\n </TextstringProvider>\n </PersonFinderContext.Provider>\n );\n};\n\nPersonFinderProvider.displayName = 'PersonFinderProvider';\n\nexport default PersonFinderProvider;\n"],"mappings":"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","ignoreList":[]}
@@ -45,6 +45,7 @@ const PersonFinderWrapper = /*#__PURE__*/(0, _react.forwardRef)(({
45
45
  const contentRef = (0, _react.useRef)(null);
46
46
  const keyRef = (0, _react.useRef)(`person-finder-${(0, _uuid.v4)()}`);
47
47
  const tagInputRef = (0, _react.useRef)(null);
48
+ const hasFocusRef = (0, _react.useRef)(false);
48
49
  const {
49
50
  isTouch
50
51
  } = (0, _chaynsApi.useDevice)();
@@ -52,9 +53,11 @@ const PersonFinderWrapper = /*#__PURE__*/(0, _react.forwardRef)(({
52
53
  icons: ['fa fa-search']
53
54
  }));
54
55
  const handleTagInputBlur = (0, _react.useCallback)(() => {
56
+ hasFocusRef.current = false;
55
57
  setIsFocused(false);
56
58
  }, []);
57
59
  const handleTagInputFocus = (0, _react.useCallback)(() => {
60
+ hasFocusRef.current = true;
58
61
  setIsFocused(true);
59
62
  }, []);
60
63
  const handleRemove = (0, _react.useCallback)(id => {
@@ -83,8 +86,8 @@ const PersonFinderWrapper = /*#__PURE__*/(0, _react.forwardRef)(({
83
86
  const handleDropdownOutsideClick = (0, _react.useCallback)(() => {
84
87
  var _tagInputRef$current2;
85
88
  (_tagInputRef$current2 = tagInputRef.current) === null || _tagInputRef$current2 === void 0 || _tagInputRef$current2.blur();
86
- return isFocused && isTouch;
87
- }, [isFocused, isTouch]);
89
+ return hasFocusRef.current && isTouch;
90
+ }, [isTouch]);
88
91
  const handleAdd = (0, _react.useCallback)(id => {
89
92
  if (typeof setTags !== 'function') {
90
93
  return;
@@ -137,8 +140,7 @@ const PersonFinderWrapper = /*#__PURE__*/(0, _react.forwardRef)(({
137
140
  }
138
141
  }, [onDropdownHide, onDropdownShow, shouldShowBody]);
139
142
  const showBody = (0, _react.useMemo)(() => {
140
- const extraMobileCheck = isTouch ? isFocused : true;
141
- const check = shouldShowBody && extraMobileCheck;
143
+ const check = shouldShowBody;
142
144
  if (relationMode === _personFinder.RelationMode.SITE) {
143
145
  return check;
144
146
  }
@@ -146,7 +148,7 @@ const PersonFinderWrapper = /*#__PURE__*/(0, _react.forwardRef)(({
146
148
  return check && !!search && (search === null || search === void 0 ? void 0 : search.length) > 2;
147
149
  }
148
150
  return check;
149
- }, [filterTypes, friendsPriority, isFocused, isTouch, search, shouldShowBody, relationMode]);
151
+ }, [filterTypes, friendsPriority, search, shouldShowBody, relationMode]);
150
152
  const content = (0, _react.useMemo)(() => {
151
153
  const body = /*#__PURE__*/_react.default.createElement(_PersonFinderBody.default, {
152
154
  filterTypes: filterTypes,
@@ -1 +1 @@
1
- {"version":3,"file":"PersonFinderWrapper.js","names":["_core","require","_chaynsApi","_react","_interopRequireWildcard","_uuid","_personFinder","_PersonFinderWrapper","_PersonFinderBody","_interopRequireDefault","_PersonFinderProvider","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","PersonFinderWrapper","forwardRef","container","dropdownDirection","filterTypes","friendsPriority","leftElement","leftElementProp","maxEntries","Infinity","onAdd","onDropdownHide","onDropdownShow","shouldDisableRemove","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldRenderInline","relationMode","ref","data","updateSearch","setTags","tags","search","usePersonFinder","isFocused","setIsFocused","useState","shouldShowBody","setShouldShowBody","boxRef","useRef","contentRef","keyRef","uuidV4","tagInputRef","isTouch","useDevice","createElement","StyledPersonFinderLeftElement","Icon","icons","handleTagInputBlur","useCallback","handleTagInputFocus","handleRemove","id","prevState","filter","entry","handleClose","handleOpen","handleClear","_tagInputRef$current","current","resetValue","handleDropdownOutsideClick","_tagInputRef$current2","blur","handleAdd","selectedEntry","values","flat","map","entries","find","toString","name","firstName","lastName","tag","text","_tagInputRef$current3","some","length","handleChange","event","target","value","useImperativeHandle","clear","useEffect","showBody","useMemo","extraMobileCheck","check","RelationMode","SITE","includes","PersonFinderFilterTypes","PERSON","Priority","HIGH","content","body","DropdownBodyWrapper","anchorElement","direction","onClose","onOutsideClick","shouldShowDropdown","StyledPersonFinder","onFocus","key","TagInput","onBlur","onChange","shouldPreventEnter","displayName","_default","exports"],"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 * 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 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 relationMode,\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 const check = shouldShowBody && extraMobileCheck;\n\n if (relationMode === RelationMode.SITE) {\n return check;\n }\n\n if (\n filterTypes?.length === 1 &&\n (filterTypes.includes(PersonFinderFilterTypes.SITE) ||\n (filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friendsPriority !== Priority.HIGH))\n ) {\n return check && !!search && search?.length > 2;\n }\n\n return check;\n }, [\n filterTypes,\n friendsPriority,\n isFocused,\n isTouch,\n search,\n shouldShowBody,\n relationMode,\n ]);\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":["_core","require","_chaynsApi","_react","_interopRequireWildcard","_uuid","_personFinder","_PersonFinderWrapper","_PersonFinderBody","_interopRequireDefault","_PersonFinderProvider","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","PersonFinderWrapper","forwardRef","container","dropdownDirection","filterTypes","friendsPriority","leftElement","leftElementProp","maxEntries","Infinity","onAdd","onDropdownHide","onDropdownShow","shouldDisableRemove","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldRenderInline","relationMode","ref","data","updateSearch","setTags","tags","search","usePersonFinder","isFocused","setIsFocused","useState","shouldShowBody","setShouldShowBody","boxRef","useRef","contentRef","keyRef","uuidV4","tagInputRef","hasFocusRef","isTouch","useDevice","createElement","StyledPersonFinderLeftElement","Icon","icons","handleTagInputBlur","useCallback","current","handleTagInputFocus","handleRemove","id","prevState","filter","entry","handleClose","handleOpen","handleClear","_tagInputRef$current","resetValue","handleDropdownOutsideClick","_tagInputRef$current2","blur","handleAdd","selectedEntry","values","flat","map","entries","find","toString","name","firstName","lastName","tag","text","_tagInputRef$current3","some","length","handleChange","event","target","value","useImperativeHandle","clear","useEffect","showBody","useMemo","check","RelationMode","SITE","includes","PersonFinderFilterTypes","PERSON","Priority","HIGH","content","body","DropdownBodyWrapper","anchorElement","direction","onClose","onOutsideClick","shouldShowDropdown","StyledPersonFinder","onFocus","key","TagInput","onBlur","onChange","shouldPreventEnter","displayName","_default","exports"],"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 * 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 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 relationMode,\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 const hasFocusRef = useRef<boolean>(false);\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 hasFocusRef.current = false;\n\n setIsFocused(false);\n }, []);\n\n const handleTagInputFocus = useCallback(() => {\n hasFocusRef.current = true;\n\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 hasFocusRef.current && isTouch;\n }, [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 check = shouldShowBody;\n\n if (relationMode === RelationMode.SITE) {\n return check;\n }\n\n if (\n filterTypes?.length === 1 &&\n (filterTypes.includes(PersonFinderFilterTypes.SITE) ||\n (filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friendsPriority !== Priority.HIGH))\n ) {\n return check && !!search && search?.length > 2;\n }\n\n return check;\n }, [filterTypes, friendsPriority, search, shouldShowBody, relationMode]);\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":[]}
@@ -187,6 +187,8 @@ const PersonFinderProvider = ({
187
187
  }, [filterTypes]);
188
188
  const latestArgsRef = useRef(null);
189
189
  const latestHandledRequestRef = useRef(0);
190
+ const searchLocalRef = useRef(() => {});
191
+ const searchDataRef = useRef(() => {});
190
192
  const throttledRequest = useRef(throttle(async () => {
191
193
  const args = latestArgsRef.current;
192
194
  if (!args) return;
@@ -229,10 +231,7 @@ const PersonFinderProvider = ({
229
231
  }, THROTTLE_INTERVAL, {
230
232
  leading: false,
231
233
  trailing: true
232
- })).current;
233
- useEffect(() => {
234
- dataRef.current = data;
235
- }, [data]);
234
+ }));
236
235
  const searchData = useCallback(({
237
236
  filter
238
237
  }) => {
@@ -275,26 +274,68 @@ const PersonFinderProvider = ({
275
274
  });
276
275
  updateLoadingState(PersonFinderFilterTypes.PERSON, searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success);
277
276
  }, [entries, search, uacUsers, updateData, updateLoadingState]);
277
+ useEffect(() => {
278
+ dataRef.current = data;
279
+ }, [data]);
280
+ useEffect(() => {
281
+ searchLocalRef.current = searchLocal;
282
+ }, [searchLocal]);
283
+ useEffect(() => {
284
+ searchDataRef.current = searchData;
285
+ }, [searchData]);
278
286
  useEffect(() => {
279
287
  if (!search) return;
280
- const active = activeFilter ?? filterTypes;
288
+ const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;
289
+ const currentData = dataRef.current;
281
290
  if (uacFilter || entries) {
282
- searchLocal();
291
+ searchLocalRef.current();
283
292
  } else if (active?.includes(PersonFinderFilterTypes.UAC)) {
284
- searchData({
293
+ searchDataRef.current({
285
294
  filter: [PersonFinderFilterTypes.UAC]
286
295
  });
287
296
  } else {
297
+ // Only load filters that don't have data for this search yet
298
+ const filtersToLoad = active.filter(filter => {
299
+ const filterData = currentData?.[filter];
300
+ return !filterData || filterData.searchString !== search;
301
+ });
302
+
303
+ // If we have filters to load, use them; otherwise use all active filters
304
+ const filterList = filtersToLoad.length > 0 ? filtersToLoad : active;
288
305
  latestArgsRef.current = {
289
306
  search,
290
- filter: active
307
+ filter: filterList
291
308
  };
292
- throttledRequest();
309
+ throttledRequest.current();
293
310
  }
294
- }, [filterTypes, search, activeFilter, friends, friendsPriority, updateData, updateLoadingState, throttledRequest, searchData, uacFilter, searchLocal, entries]);
311
+ }, [search, uacFilter, entries]);
312
+
313
+ // Handle filter changes - load missing data for newly selected filters
314
+ useEffect(() => {
315
+ if (!search) return;
316
+ const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;
317
+ const currentData = dataRef.current;
318
+
319
+ // Check which filters need to be loaded (don't have data for current search)
320
+ const missingFilters = active.filter(filter => {
321
+ const filterData = currentData?.[filter];
322
+ // If no data or data is from a different search, we need to load it
323
+ return !filterData || filterData.searchString !== search;
324
+ });
325
+ if (missingFilters.length === 0) return;
326
+ if (uacFilter || entries) return;
327
+ if (active?.includes(PersonFinderFilterTypes.UAC)) return;
328
+
329
+ // Load only the missing filters
330
+ latestArgsRef.current = {
331
+ search,
332
+ filter: missingFilters
333
+ };
334
+ throttledRequest.current();
335
+ }, [activeFilter, search, uacFilter, entries, filterTypes]);
295
336
  useEffect(() => () => {
296
- throttledRequest.cancel();
297
- }, [throttledRequest]);
337
+ throttledRequest.current?.cancel();
338
+ }, []);
298
339
 
299
340
  // load initial data
300
341
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"PersonFinderProvider.js","names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","throttle","LoadingState","PersonFinderFilterTypes","Priority","RelationMode","getFriends","postFriends","deleteFriends","filterDataByKeys","loadData","getUACGroups","getUsersByGroups","TextstringProvider","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","THROTTLE_INTERVAL","PAGE_SIZE","PersonFinderContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","relationMode","displayName","usePersonFinder","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","getPagedUsersByGroups","setData","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PERSON","None","SITE","dataRef","filter","key","newData","prevState","appendData","oldEntries","state","prev","value","Pending","current","Error","groupId","skip","take","then","result","users","count","length","searchString","finally","Success","skipMap","personId","firstName","lastName","verificationState","isVerified","commonSites","type","wasSuccessful","includes","latestArgsRef","latestHandledRequestRef","throttledRequest","args","requestTimestamp","Date","now","forEach","Object","keyString","HIGH","friendIds","Set","f","serverFriendEntries","entry","has","serverFriendIds","missingFriends","toLowerCase","otherEntries","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","searchLocal","searchedUsers","entriesToSearch","Boolean","join","trim","push","active","UAC","cancel","person","uac","providerValue","createElement","Provider","libraryName"],"sources":["../../../src/components/PersonFinderProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n Dispatch,\n FC,\n ReactNode,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport throttle from 'lodash.throttle';\nimport {\n DefaultEntry,\n LoadingState,\n LoadingStateMap,\n PersonEntry,\n PersonFinderData,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n ThrottledFunction,\n UACEntry,\n UACFilter,\n} from '../types/personFinder';\nimport { getFriends } from '../api/friends/get';\nimport { postFriends } from '../api/friends/post';\nimport { deleteFriends } from '../api/friends/delete';\nimport { filterDataByKeys, loadData } from '../utils/personFinder';\nimport { Tag } from '@chayns-components/core/lib/types/types/tagInput';\nimport { getUACGroups, getUsersByGroups } from '../utils/uac';\nimport { TextstringProvider } from '@chayns-components/textstring';\nimport { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\nconst THROTTLE_INTERVAL = 500;\nconst PAGE_SIZE = 20;\n\ntype GetUsersByGroupsResult = {\n users: PersonEntry[];\n count: number;\n};\n\nexport interface IPersonFinderContext {\n // Data\n data?: { [key: string]: PersonFinderData };\n updateData?: (key: PersonFinderFilterTypes, personFinderData: PersonFinderData) => void;\n\n // Tags\n tags?: Tag[];\n setTags?: Dispatch<SetStateAction<Tag[]>>;\n\n // Friends\n friends?: PersonEntry[];\n addFriend?: (personId: string) => void;\n removeFriend?: (personId: string) => void;\n\n // Filter\n activeFilter?: PersonFinderFilterTypes[];\n updateActiveFilter?: (filter: PersonFinderFilterTypes[]) => void;\n\n // Search\n search?: string;\n updateSearch?: (value: string) => void;\n\n // Loading\n loadMore?: (key: PersonFinderFilterTypes) => void;\n loadingState?: LoadingStateMap;\n updateLoadingState?: (key: PersonFinderFilterTypes, state: LoadingState) => void;\n\n relationMode?: RelationMode;\n}\n\nexport const PersonFinderContext = createContext<IPersonFinderContext>({\n data: undefined,\n updateData: undefined,\n friends: undefined,\n addFriend: undefined,\n removeFriend: undefined,\n activeFilter: undefined,\n updateActiveFilter: undefined,\n search: undefined,\n updateSearch: undefined,\n loadMore: undefined,\n loadingState: undefined,\n updateLoadingState: undefined,\n tags: undefined,\n setTags: undefined,\n relationMode: undefined,\n});\n\nPersonFinderContext.displayName = 'PersonFinderContext';\n\nexport const usePersonFinder = () => useContext(PersonFinderContext);\n\ntype PersonFinderProviderProps = {\n children: ReactNode;\n friendsPriority: Priority;\n filterTypes: PersonFinderFilterTypes[];\n defaultEntries?: DefaultEntry[];\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n uacFilter?: UACFilter[];\n entries?: PersonEntry[];\n relationMode?: RelationMode;\n};\n\nconst PersonFinderProvider: FC<PersonFinderProviderProps> = ({\n children,\n friendsPriority,\n filterTypes,\n defaultEntries,\n excludedEntryIds,\n shouldShowOwnUser = false,\n uacFilter,\n entries,\n relationMode,\n}) => {\n const getPagedUsersByGroups = useCallback(\n getUsersByGroups as unknown as (\n uacFilter: UACFilter[],\n options?: { skip?: number; take?: number },\n ) => Promise<GetUsersByGroupsResult>,\n [],\n );\n\n const [data, setData] = useState<IPersonFinderContext['data']>();\n const [friends, setFriends] = useState<PersonEntry[]>();\n const [uacUsers, setUacUsers] = useState<PersonEntry[]>();\n const [activeFilter, setActiveFilter] = useState<IPersonFinderContext['activeFilter']>();\n const [search, setSearch] = useState('');\n const [tags, setTags] = useState<Tag[]>(\n defaultEntries?.map(({ id, name }) => ({ id, text: name })) ?? [],\n );\n const [loadingState, setLoadingState] = useState<LoadingStateMap>({\n [PersonFinderFilterTypes.PERSON]: LoadingState.None,\n [PersonFinderFilterTypes.SITE]: LoadingState.None,\n });\n\n const dataRef = useRef<IPersonFinderContext['data']>();\n\n const updateActiveFilter = useCallback((filter: IPersonFinderContext['activeFilter']) => {\n setActiveFilter(filter);\n }, []);\n\n const updateData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => ({ ...prevState, [key]: newData }));\n }, []);\n\n const appendData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => {\n const oldEntries = prevState && prevState[key]?.entries ? prevState[key]?.entries : [];\n\n return {\n ...prevState,\n [key]: {\n ...newData,\n entries: [...oldEntries, ...newData.entries],\n },\n };\n });\n }, []);\n\n const updateLoadingState = useCallback((key: PersonFinderFilterTypes, state: LoadingState) => {\n setLoadingState((prev) => ({\n ...prev,\n [key]: state,\n }));\n }, []);\n\n const updateSearch = useCallback((value: string) => {\n setSearch(value);\n }, []);\n\n const loadMore = useCallback(\n (key: PersonFinderFilterTypes) => {\n updateLoadingState(key, LoadingState.Pending);\n\n const current = data?.[key];\n\n if (!current) {\n updateLoadingState(key, LoadingState.Error);\n\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n key === PersonFinderFilterTypes.PERSON &&\n search === ''\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], {\n skip: current.skip,\n take: PAGE_SIZE,\n })\n .then((result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n if (users.length > 0) {\n appendData(key, {\n entries: users,\n searchString: '',\n skip: current.skip + users.length,\n count,\n });\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n\n return;\n }\n\n void loadData({\n searchString: search ?? '',\n filter: [key],\n skipMap: { [key]: current.skip },\n relationMode,\n })\n .then((result) => {\n const newData = result?.[key];\n\n if (newData) {\n appendData(key, newData);\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n },\n [appendData, data, getPagedUsersByGroups, relationMode, search, updateLoadingState],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n relationMode,\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n ).current;\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter ?? filterTypes;\n\n if (uacFilter || entries) {\n searchLocal();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchData({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n latestArgsRef.current = { search, filter: active };\n\n throttledRequest();\n }\n }, [\n filterTypes,\n search,\n activeFilter,\n friends,\n friendsPriority,\n updateData,\n updateLoadingState,\n throttledRequest,\n searchData,\n uacFilter,\n searchLocal,\n entries,\n ]);\n\n useEffect(\n () => () => {\n throttledRequest.cancel();\n },\n [throttledRequest],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON)\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], { skip: 0, take: PAGE_SIZE }).then(\n (result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n setData({\n person: {\n entries: users,\n searchString: '',\n skip: users.length,\n count,\n },\n });\n },\n );\n }\n\n if (uacFilter) {\n void getPagedUsersByGroups(uacFilter).then((result: GetUsersByGroupsResult) => {\n const { users } = result;\n\n setUacUsers(users);\n });\n\n return;\n }\n\n if (filterTypes.includes(PersonFinderFilterTypes.UAC) && search === '') {\n void getUACGroups().then((result) => {\n setData({\n uac: {\n entries: result,\n searchString: '',\n skip: result.length,\n count: result.length,\n },\n });\n });\n }\n\n if (\n friendsPriority === Priority.HIGH &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friends &&\n search === ''\n ) {\n setData({\n person: {\n entries: friends,\n searchString: '',\n skip: friends.length,\n count: friends.length,\n },\n });\n }\n }, [\n entries,\n filterTypes,\n friends,\n friendsPriority,\n getPagedUsersByGroups,\n relationMode,\n search,\n uacFilter,\n ]);\n\n const providerValue = useMemo<IPersonFinderContext>(\n () => ({\n data: filterDataByKeys(data, activeFilter, {\n excludedEntryIds,\n shouldShowOwnUser: uacFilter ? false : shouldShowOwnUser,\n }),\n updateData,\n activeFilter,\n updateActiveFilter,\n friends,\n addFriend,\n removeFriend,\n search,\n updateSearch,\n loadMore,\n loadingState,\n updateLoadingState,\n setTags,\n tags,\n relationMode,\n }),\n [\n activeFilter,\n addFriend,\n data,\n excludedEntryIds,\n friends,\n loadMore,\n loadingState,\n removeFriend,\n search,\n shouldShowOwnUser,\n tags,\n uacFilter,\n updateActiveFilter,\n updateData,\n updateLoadingState,\n updateSearch,\n relationMode,\n ],\n );\n\n return (\n <PersonFinderContext.Provider value={providerValue}>\n <TextstringProvider libraryName={PERSON_FINDER_TEXTSTRING_LIBRARY_NAME}>\n {children}\n </TextstringProvider>\n </PersonFinderContext.Provider>\n );\n};\n\nPersonFinderProvider.displayName = 'PersonFinderProvider';\n\nexport default PersonFinderProvider;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PersonFinderProvider.js","names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","throttle","LoadingState","PersonFinderFilterTypes","Priority","RelationMode","getFriends","postFriends","deleteFriends","filterDataByKeys","loadData","getUACGroups","getUsersByGroups","TextstringProvider","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","THROTTLE_INTERVAL","PAGE_SIZE","PersonFinderContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","relationMode","displayName","usePersonFinder","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","getPagedUsersByGroups","setData","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PERSON","None","SITE","dataRef","filter","key","newData","prevState","appendData","oldEntries","state","prev","value","Pending","current","Error","groupId","skip","take","then","result","users","count","length","searchString","finally","Success","skipMap","personId","firstName","lastName","verificationState","isVerified","commonSites","type","wasSuccessful","includes","latestArgsRef","latestHandledRequestRef","searchLocalRef","searchDataRef","throttledRequest","args","requestTimestamp","Date","now","forEach","Object","keyString","HIGH","friendIds","Set","f","serverFriendEntries","entry","has","serverFriendIds","missingFriends","toLowerCase","otherEntries","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","searchLocal","searchedUsers","entriesToSearch","Boolean","join","trim","push","active","currentData","UAC","filtersToLoad","filterData","filterList","missingFilters","cancel","person","uac","providerValue","createElement","Provider","libraryName"],"sources":["../../../src/components/PersonFinderProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n Dispatch,\n FC,\n ReactNode,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport throttle from 'lodash.throttle';\nimport {\n DefaultEntry,\n LoadingState,\n LoadingStateMap,\n PersonEntry,\n PersonFinderData,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n ThrottledFunction,\n UACEntry,\n UACFilter,\n} from '../types/personFinder';\nimport { getFriends } from '../api/friends/get';\nimport { postFriends } from '../api/friends/post';\nimport { deleteFriends } from '../api/friends/delete';\nimport { filterDataByKeys, loadData } from '../utils/personFinder';\nimport { Tag } from '@chayns-components/core/lib/types/types/tagInput';\nimport { getUACGroups, getUsersByGroups } from '../utils/uac';\nimport { TextstringProvider } from '@chayns-components/textstring';\nimport { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\nconst THROTTLE_INTERVAL = 500;\nconst PAGE_SIZE = 20;\n\ntype GetUsersByGroupsResult = {\n users: PersonEntry[];\n count: number;\n};\n\nexport interface IPersonFinderContext {\n // Data\n data?: { [key: string]: PersonFinderData };\n updateData?: (key: PersonFinderFilterTypes, personFinderData: PersonFinderData) => void;\n\n // Tags\n tags?: Tag[];\n setTags?: Dispatch<SetStateAction<Tag[]>>;\n\n // Friends\n friends?: PersonEntry[];\n addFriend?: (personId: string) => void;\n removeFriend?: (personId: string) => void;\n\n // Filter\n activeFilter?: PersonFinderFilterTypes[];\n updateActiveFilter?: (filter: PersonFinderFilterTypes[]) => void;\n\n // Search\n search?: string;\n updateSearch?: (value: string) => void;\n\n // Loading\n loadMore?: (key: PersonFinderFilterTypes) => void;\n loadingState?: LoadingStateMap;\n updateLoadingState?: (key: PersonFinderFilterTypes, state: LoadingState) => void;\n\n relationMode?: RelationMode;\n}\n\nexport const PersonFinderContext = createContext<IPersonFinderContext>({\n data: undefined,\n updateData: undefined,\n friends: undefined,\n addFriend: undefined,\n removeFriend: undefined,\n activeFilter: undefined,\n updateActiveFilter: undefined,\n search: undefined,\n updateSearch: undefined,\n loadMore: undefined,\n loadingState: undefined,\n updateLoadingState: undefined,\n tags: undefined,\n setTags: undefined,\n relationMode: undefined,\n});\n\nPersonFinderContext.displayName = 'PersonFinderContext';\n\nexport const usePersonFinder = () => useContext(PersonFinderContext);\n\ntype PersonFinderProviderProps = {\n children: ReactNode;\n friendsPriority: Priority;\n filterTypes: PersonFinderFilterTypes[];\n defaultEntries?: DefaultEntry[];\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n uacFilter?: UACFilter[];\n entries?: PersonEntry[];\n relationMode?: RelationMode;\n};\n\nconst PersonFinderProvider: FC<PersonFinderProviderProps> = ({\n children,\n friendsPriority,\n filterTypes,\n defaultEntries,\n excludedEntryIds,\n shouldShowOwnUser = false,\n uacFilter,\n entries,\n relationMode,\n}) => {\n const getPagedUsersByGroups = useCallback(\n getUsersByGroups as unknown as (\n uacFilter: UACFilter[],\n options?: { skip?: number; take?: number },\n ) => Promise<GetUsersByGroupsResult>,\n [],\n );\n\n const [data, setData] = useState<IPersonFinderContext['data']>();\n const [friends, setFriends] = useState<PersonEntry[]>();\n const [uacUsers, setUacUsers] = useState<PersonEntry[]>();\n const [activeFilter, setActiveFilter] = useState<IPersonFinderContext['activeFilter']>();\n const [search, setSearch] = useState('');\n const [tags, setTags] = useState<Tag[]>(\n defaultEntries?.map(({ id, name }) => ({ id, text: name })) ?? [],\n );\n const [loadingState, setLoadingState] = useState<LoadingStateMap>({\n [PersonFinderFilterTypes.PERSON]: LoadingState.None,\n [PersonFinderFilterTypes.SITE]: LoadingState.None,\n });\n\n const dataRef = useRef<IPersonFinderContext['data']>();\n\n const updateActiveFilter = useCallback((filter: IPersonFinderContext['activeFilter']) => {\n setActiveFilter(filter);\n }, []);\n\n const updateData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => ({ ...prevState, [key]: newData }));\n }, []);\n\n const appendData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => {\n const oldEntries = prevState && prevState[key]?.entries ? prevState[key]?.entries : [];\n\n return {\n ...prevState,\n [key]: {\n ...newData,\n entries: [...oldEntries, ...newData.entries],\n },\n };\n });\n }, []);\n\n const updateLoadingState = useCallback((key: PersonFinderFilterTypes, state: LoadingState) => {\n setLoadingState((prev) => ({\n ...prev,\n [key]: state,\n }));\n }, []);\n\n const updateSearch = useCallback((value: string) => {\n setSearch(value);\n }, []);\n\n const loadMore = useCallback(\n (key: PersonFinderFilterTypes) => {\n updateLoadingState(key, LoadingState.Pending);\n\n const current = data?.[key];\n\n if (!current) {\n updateLoadingState(key, LoadingState.Error);\n\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n key === PersonFinderFilterTypes.PERSON &&\n search === ''\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], {\n skip: current.skip,\n take: PAGE_SIZE,\n })\n .then((result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n if (users.length > 0) {\n appendData(key, {\n entries: users,\n searchString: '',\n skip: current.skip + users.length,\n count,\n });\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n\n return;\n }\n\n void loadData({\n searchString: search ?? '',\n filter: [key],\n skipMap: { [key]: current.skip },\n relationMode,\n })\n .then((result) => {\n const newData = result?.[key];\n\n if (newData) {\n appendData(key, newData);\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n },\n [appendData, data, getPagedUsersByGroups, relationMode, search, updateLoadingState],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n const searchLocalRef = useRef<() => void>(() => {});\n const searchDataRef = useRef<({ filter }: { filter: PersonFinderFilterTypes[] }) => void>(\n () => {},\n );\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n relationMode,\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n );\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n useEffect(() => {\n searchLocalRef.current = searchLocal;\n }, [searchLocal]);\n\n useEffect(() => {\n searchDataRef.current = searchData;\n }, [searchData]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;\n const currentData = dataRef.current;\n\n if (uacFilter || entries) {\n searchLocalRef.current();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchDataRef.current({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n // Only load filters that don't have data for this search yet\n const filtersToLoad = active.filter((filter) => {\n const filterData = currentData?.[filter];\n return !filterData || filterData.searchString !== search;\n });\n\n // If we have filters to load, use them; otherwise use all active filters\n const filterList = filtersToLoad.length > 0 ? filtersToLoad : active;\n\n latestArgsRef.current = { search, filter: filterList };\n\n throttledRequest.current();\n }\n }, [search, uacFilter, entries]);\n\n // Handle filter changes - load missing data for newly selected filters\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;\n const currentData = dataRef.current;\n\n // Check which filters need to be loaded (don't have data for current search)\n const missingFilters = active.filter((filter) => {\n const filterData = currentData?.[filter];\n // If no data or data is from a different search, we need to load it\n return !filterData || filterData.searchString !== search;\n });\n\n if (missingFilters.length === 0) return;\n if (uacFilter || entries) return;\n if (active?.includes(PersonFinderFilterTypes.UAC)) return;\n\n // Load only the missing filters\n latestArgsRef.current = { search, filter: missingFilters };\n throttledRequest.current();\n }, [activeFilter, search, uacFilter, entries, filterTypes]);\n\n useEffect(\n () => () => {\n throttledRequest.current?.cancel();\n },\n [],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON)\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], { skip: 0, take: PAGE_SIZE }).then(\n (result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n setData({\n person: {\n entries: users,\n searchString: '',\n skip: users.length,\n count,\n },\n });\n },\n );\n }\n\n if (uacFilter) {\n void getPagedUsersByGroups(uacFilter).then((result: GetUsersByGroupsResult) => {\n const { users } = result;\n\n setUacUsers(users);\n });\n\n return;\n }\n\n if (filterTypes.includes(PersonFinderFilterTypes.UAC) && search === '') {\n void getUACGroups().then((result) => {\n setData({\n uac: {\n entries: result,\n searchString: '',\n skip: result.length,\n count: result.length,\n },\n });\n });\n }\n\n if (\n friendsPriority === Priority.HIGH &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friends &&\n search === ''\n ) {\n setData({\n person: {\n entries: friends,\n searchString: '',\n skip: friends.length,\n count: friends.length,\n },\n });\n }\n }, [\n entries,\n filterTypes,\n friends,\n friendsPriority,\n getPagedUsersByGroups,\n relationMode,\n search,\n uacFilter,\n ]);\n\n const providerValue = useMemo<IPersonFinderContext>(\n () => ({\n data: filterDataByKeys(data, activeFilter, {\n excludedEntryIds,\n shouldShowOwnUser: uacFilter ? false : shouldShowOwnUser,\n }),\n updateData,\n activeFilter,\n updateActiveFilter,\n friends,\n addFriend,\n removeFriend,\n search,\n updateSearch,\n loadMore,\n loadingState,\n updateLoadingState,\n setTags,\n tags,\n relationMode,\n }),\n [\n activeFilter,\n addFriend,\n data,\n excludedEntryIds,\n friends,\n loadMore,\n loadingState,\n removeFriend,\n search,\n shouldShowOwnUser,\n tags,\n uacFilter,\n updateActiveFilter,\n updateData,\n updateLoadingState,\n updateSearch,\n relationMode,\n ],\n );\n\n return (\n <PersonFinderContext.Provider value={providerValue}>\n <TextstringProvider libraryName={PERSON_FINDER_TEXTSTRING_LIBRARY_NAME}>\n {children}\n </TextstringProvider>\n </PersonFinderContext.Provider>\n );\n};\n\nPersonFinderProvider.displayName = 'PersonFinderProvider';\n\nexport default PersonFinderProvider;\n"],"mappings":"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","ignoreList":[]}
@@ -37,6 +37,7 @@ const PersonFinderWrapper = /*#__PURE__*/forwardRef(({
37
37
  const contentRef = useRef(null);
38
38
  const keyRef = useRef(`person-finder-${uuidV4()}`);
39
39
  const tagInputRef = useRef(null);
40
+ const hasFocusRef = useRef(false);
40
41
  const {
41
42
  isTouch
42
43
  } = useDevice();
@@ -44,9 +45,11 @@ const PersonFinderWrapper = /*#__PURE__*/forwardRef(({
44
45
  icons: ['fa fa-search']
45
46
  }));
46
47
  const handleTagInputBlur = useCallback(() => {
48
+ hasFocusRef.current = false;
47
49
  setIsFocused(false);
48
50
  }, []);
49
51
  const handleTagInputFocus = useCallback(() => {
52
+ hasFocusRef.current = true;
50
53
  setIsFocused(true);
51
54
  }, []);
52
55
  const handleRemove = useCallback(id => {
@@ -73,8 +76,8 @@ const PersonFinderWrapper = /*#__PURE__*/forwardRef(({
73
76
  }, [setTags, shouldDisableRemove]);
74
77
  const handleDropdownOutsideClick = useCallback(() => {
75
78
  tagInputRef.current?.blur();
76
- return isFocused && isTouch;
77
- }, [isFocused, isTouch]);
79
+ return hasFocusRef.current && isTouch;
80
+ }, [isTouch]);
78
81
  const handleAdd = useCallback(id => {
79
82
  if (typeof setTags !== 'function') {
80
83
  return;
@@ -126,8 +129,7 @@ const PersonFinderWrapper = /*#__PURE__*/forwardRef(({
126
129
  }
127
130
  }, [onDropdownHide, onDropdownShow, shouldShowBody]);
128
131
  const showBody = useMemo(() => {
129
- const extraMobileCheck = isTouch ? isFocused : true;
130
- const check = shouldShowBody && extraMobileCheck;
132
+ const check = shouldShowBody;
131
133
  if (relationMode === RelationMode.SITE) {
132
134
  return check;
133
135
  }
@@ -135,7 +137,7 @@ const PersonFinderWrapper = /*#__PURE__*/forwardRef(({
135
137
  return check && !!search && search?.length > 2;
136
138
  }
137
139
  return check;
138
- }, [filterTypes, friendsPriority, isFocused, isTouch, search, shouldShowBody, relationMode]);
140
+ }, [filterTypes, friendsPriority, search, shouldShowBody, relationMode]);
139
141
  const content = useMemo(() => {
140
142
  const body = /*#__PURE__*/React.createElement(PersonFinderBody, {
141
143
  filterTypes: filterTypes,
@@ -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","RelationMode","StyledPersonFinder","StyledPersonFinderLeftElement","PersonFinderBody","usePersonFinder","PersonFinderWrapper","container","dropdownDirection","filterTypes","friendsPriority","leftElement","leftElementProp","maxEntries","Infinity","onAdd","onDropdownHide","onDropdownShow","shouldDisableRemove","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldRenderInline","relationMode","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","check","SITE","includes","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 * 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 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 relationMode,\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 const check = shouldShowBody && extraMobileCheck;\n\n if (relationMode === RelationMode.SITE) {\n return check;\n }\n\n if (\n filterTypes?.length === 1 &&\n (filterTypes.includes(PersonFinderFilterTypes.SITE) ||\n (filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friendsPriority !== Priority.HIGH))\n ) {\n return check && !!search && search?.length > 2;\n }\n\n return check;\n }, [\n filterTypes,\n friendsPriority,\n isFocused,\n isTouch,\n search,\n shouldShowBody,\n relationMode,\n ]);\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","RelationMode","StyledPersonFinder","StyledPersonFinderLeftElement","PersonFinderBody","usePersonFinder","PersonFinderWrapper","container","dropdownDirection","filterTypes","friendsPriority","leftElement","leftElementProp","maxEntries","Infinity","onAdd","onDropdownHide","onDropdownShow","shouldDisableRemove","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldRenderInline","relationMode","ref","data","updateSearch","setTags","tags","search","isFocused","setIsFocused","shouldShowBody","setShouldShowBody","boxRef","contentRef","keyRef","tagInputRef","hasFocusRef","isTouch","createElement","icons","handleTagInputBlur","current","handleTagInputFocus","handleRemove","id","prevState","filter","entry","handleClose","handleOpen","handleClear","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","check","SITE","includes","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 * 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 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 relationMode,\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 const hasFocusRef = useRef<boolean>(false);\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 hasFocusRef.current = false;\n\n setIsFocused(false);\n }, []);\n\n const handleTagInputFocus = useCallback(() => {\n hasFocusRef.current = true;\n\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 hasFocusRef.current && isTouch;\n }, [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 check = shouldShowBody;\n\n if (relationMode === RelationMode.SITE) {\n return check;\n }\n\n if (\n filterTypes?.length === 1 &&\n (filterTypes.includes(PersonFinderFilterTypes.SITE) ||\n (filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friendsPriority !== Priority.HIGH))\n ) {\n return check && !!search && search?.length > 2;\n }\n\n return check;\n }, [filterTypes, friendsPriority, search, shouldShowBody, relationMode]);\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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/person-finder",
3
- "version": "5.4.0",
3
+ "version": "5.4.1",
4
4
  "description": "A set of beautiful React components for developing your own applications with chayns.",
5
5
  "sideEffects": false,
6
6
  "browserslist": [
@@ -88,5 +88,5 @@
88
88
  "publishConfig": {
89
89
  "access": "public"
90
90
  },
91
- "gitHead": "268fe6206aaa39c903ac7dcd68b3eb237c0e8308"
91
+ "gitHead": "0e2c5f3b83a3bf1153bfe3319a4dba60e3b275b7"
92
92
  }