@chayns-components/person-finder 5.3.2 → 5.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +9 -0
- package/lib/cjs/components/PersonFinderProvider.js +15 -1
- package/lib/cjs/components/PersonFinderProvider.js.map +1 -1
- package/lib/cjs/components/person-finder/PersonFinder.js +4 -3
- package/lib/cjs/components/person-finder/PersonFinder.js.map +1 -1
- package/lib/cjs/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js +9 -4
- package/lib/cjs/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js.map +1 -1
- package/lib/esm/components/PersonFinderProvider.js +16 -2
- package/lib/esm/components/PersonFinderProvider.js.map +1 -1
- package/lib/esm/components/person-finder/PersonFinder.js +4 -3
- package/lib/esm/components/person-finder/PersonFinder.js.map +1 -1
- package/lib/esm/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js +10 -5
- package/lib/esm/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js.map +1 -1
- package/lib/types/components/person-finder/PersonFinder.d.ts +2 -10
- package/lib/types/components/person-finder/person-finder-wrapper/PersonFinderWrapper.d.ts +5 -1
- package/package.json +2 -2
package/AGENTS.md
CHANGED
|
@@ -91,6 +91,15 @@ import { PersonFinder } from '@chayns-components/person-finder';
|
|
|
91
91
|
/>
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
+
#### Site Mode
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
<PersonFinder
|
|
98
|
+
filterTypes={[PersonFinderFilterTypes.PERSON]}
|
|
99
|
+
relationMode={RelationMode.SITE}
|
|
100
|
+
/>
|
|
101
|
+
```
|
|
102
|
+
|
|
94
103
|
### Props
|
|
95
104
|
|
|
96
105
|
No prop documentation available.
|
|
@@ -288,6 +288,20 @@ const PersonFinderProvider = ({
|
|
|
288
288
|
if (entries) {
|
|
289
289
|
return;
|
|
290
290
|
}
|
|
291
|
+
if (relationMode === _personFinder.RelationMode.SITE && filterTypes.includes(_personFinder.PersonFinderFilterTypes.PERSON)) {
|
|
292
|
+
void (0, _uac.getUsersByGroups)([{
|
|
293
|
+
groupId: -1
|
|
294
|
+
}]).then(users => {
|
|
295
|
+
setData({
|
|
296
|
+
person: {
|
|
297
|
+
entries: users,
|
|
298
|
+
searchString: '',
|
|
299
|
+
skip: users.length,
|
|
300
|
+
count: users.length
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
}
|
|
291
305
|
if (uacFilter) {
|
|
292
306
|
void (0, _uac.getUsersByGroups)(uacFilter).then(users => {
|
|
293
307
|
setUacUsers(users);
|
|
@@ -316,7 +330,7 @@ const PersonFinderProvider = ({
|
|
|
316
330
|
}
|
|
317
331
|
});
|
|
318
332
|
}
|
|
319
|
-
}, [entries, filterTypes, friends, friendsPriority, search, uacFilter]);
|
|
333
|
+
}, [entries, filterTypes, friends, friendsPriority, relationMode, search, uacFilter]);
|
|
320
334
|
const providerValue = (0, _react.useMemo)(() => ({
|
|
321
335
|
data: (0, _personFinder2.filterDataByKeys)(data, activeFilter, {
|
|
322
336
|
excludedEntryIds,
|
|
@@ -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","PersonFinderContext","exports","createContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","displayName","usePersonFinder","useContext","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","relationMode","setData","useState","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PersonFinderFilterTypes","PERSON","LoadingState","None","SITE","dataRef","useRef","useCallback","filter","key","newData","prevState","appendData","_prevState$key","_prevState$key2","oldEntries","state","prev","value","Pending","current","Error","loadData","searchString","skipMap","skip","then","result","finally","Success","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","length","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","count","searchLocal","searchedUsers","entriesToSearch","_entry$firstName","_entry$lastName","Boolean","join","trim","push","active","UAC","cancel","getUsersByGroups","users","getUACGroups","uac","person","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;\n\ninterface IPersonFinderContext {\n // Data\n data?: { [key: string]: PersonFinderData };\n updateData?: (key: PersonFinderFilterTypes, personFinderData: PersonFinderData) => void;\n\n // Tags\n tags?: Tag[];\n setTags?: Dispatch<SetStateAction<Tag[]>>;\n\n // Friends\n friends?: PersonEntry[];\n addFriend?: (personId: string) => void;\n removeFriend?: (personId: string) => void;\n\n // Filter\n activeFilter?: PersonFinderFilterTypes[];\n updateActiveFilter?: (filter: PersonFinderFilterTypes[]) => void;\n\n // Search\n search?: string;\n updateSearch?: (value: string) => void;\n\n // Loading\n loadMore?: (key: PersonFinderFilterTypes) => void;\n loadingState?: LoadingStateMap;\n updateLoadingState?: (key: PersonFinderFilterTypes, state: LoadingState) => void;\n}\n\nexport const PersonFinderContext = createContext<IPersonFinderContext>({\n data: undefined,\n updateData: undefined,\n friends: undefined,\n addFriend: undefined,\n removeFriend: undefined,\n activeFilter: undefined,\n updateActiveFilter: undefined,\n search: undefined,\n updateSearch: undefined,\n loadMore: undefined,\n loadingState: undefined,\n updateLoadingState: undefined,\n tags: undefined,\n setTags: undefined,\n});\n\nPersonFinderContext.displayName = 'PersonFinderContext';\n\nexport const usePersonFinder = () => useContext(PersonFinderContext);\n\ntype PersonFinderProviderProps = {\n children: ReactNode;\n friendsPriority: Priority;\n filterTypes: PersonFinderFilterTypes[];\n defaultEntries?: DefaultEntry[];\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n uacFilter?: UACFilter[];\n entries?: PersonEntry[];\n relationMode?: RelationMode;\n};\n\nconst PersonFinderProvider: FC<PersonFinderProviderProps> = ({\n children,\n friendsPriority,\n filterTypes,\n defaultEntries,\n excludedEntryIds,\n shouldShowOwnUser = false,\n uacFilter,\n entries,\n relationMode,\n}) => {\n const [data, setData] = useState<IPersonFinderContext['data']>();\n const [friends, setFriends] = useState<PersonEntry[]>();\n const [uacUsers, setUacUsers] = useState<PersonEntry[]>();\n const [activeFilter, setActiveFilter] = useState<IPersonFinderContext['activeFilter']>();\n const [search, setSearch] = useState('');\n const [tags, setTags] = useState<Tag[]>(\n defaultEntries?.map(({ id, name }) => ({ id, text: name })) ?? [],\n );\n const [loadingState, setLoadingState] = useState<LoadingStateMap>({\n [PersonFinderFilterTypes.PERSON]: LoadingState.None,\n [PersonFinderFilterTypes.SITE]: LoadingState.None,\n });\n\n const dataRef = useRef<IPersonFinderContext['data']>();\n\n const updateActiveFilter = useCallback((filter: IPersonFinderContext['activeFilter']) => {\n setActiveFilter(filter);\n }, []);\n\n const updateData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => ({ ...prevState, [key]: newData }));\n }, []);\n\n const appendData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => {\n const oldEntries = prevState && prevState[key]?.entries ? prevState[key]?.entries : [];\n\n return {\n ...prevState,\n [key]: {\n ...newData,\n entries: [...oldEntries, ...newData.entries],\n },\n };\n });\n }, []);\n\n const updateLoadingState = useCallback((key: PersonFinderFilterTypes, state: LoadingState) => {\n setLoadingState((prev) => ({\n ...prev,\n [key]: state,\n }));\n }, []);\n\n const updateSearch = useCallback((value: string) => {\n setSearch(value);\n }, []);\n\n const loadMore = useCallback(\n (key: PersonFinderFilterTypes) => {\n updateLoadingState(key, LoadingState.Pending);\n\n const current = data?.[key];\n\n if (!current) {\n updateLoadingState(key, LoadingState.Error);\n\n return;\n }\n\n void loadData({\n searchString: search ?? '',\n filter: [key],\n skipMap: { [key]: current.skip },\n relationMode,\n })\n .then((result) => {\n const newData = result?.[key];\n\n if (newData) {\n appendData(key, newData);\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n },\n [updateLoadingState, data, search, relationMode, appendData],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n relationMode,\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n ).current;\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter ?? filterTypes;\n\n if (uacFilter || entries) {\n searchLocal();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchData({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n latestArgsRef.current = { search, filter: active };\n\n throttledRequest();\n }\n }, [\n filterTypes,\n search,\n activeFilter,\n friends,\n friendsPriority,\n updateData,\n updateLoadingState,\n throttledRequest,\n searchData,\n uacFilter,\n searchLocal,\n entries,\n ]);\n\n useEffect(\n () => () => {\n throttledRequest.cancel();\n },\n [throttledRequest],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (uacFilter) {\n void getUsersByGroups(uacFilter).then((users) => {\n setUacUsers(users);\n });\n\n return;\n }\n\n if (filterTypes.includes(PersonFinderFilterTypes.UAC) && search === '') {\n void getUACGroups().then((result) => {\n setData({\n uac: {\n entries: result,\n searchString: '',\n skip: result.length,\n count: result.length,\n },\n });\n });\n }\n\n if (\n friendsPriority === Priority.HIGH &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friends &&\n search === ''\n ) {\n setData({\n person: {\n entries: friends,\n searchString: '',\n skip: friends.length,\n count: friends.length,\n },\n });\n }\n }, [entries, filterTypes, friends, friendsPriority, search, uacFilter]);\n\n const providerValue = useMemo<IPersonFinderContext>(\n () => ({\n data: filterDataByKeys(data, activeFilter, {\n excludedEntryIds,\n shouldShowOwnUser: uacFilter ? false : shouldShowOwnUser,\n }),\n updateData,\n activeFilter,\n updateActiveFilter,\n friends,\n addFriend,\n removeFriend,\n search,\n updateSearch,\n loadMore,\n loadingState,\n updateLoadingState,\n setTags,\n tags,\n }),\n [\n activeFilter,\n addFriend,\n data,\n excludedEntryIds,\n friends,\n loadMore,\n loadingState,\n removeFriend,\n search,\n shouldShowOwnUser,\n tags,\n uacFilter,\n updateActiveFilter,\n updateData,\n updateLoadingState,\n updateSearch,\n ],\n );\n\n return (\n <PersonFinderContext.Provider value={providerValue}>\n <TextstringProvider libraryName={PERSON_FINDER_TEXTSTRING_LIBRARY_NAME}>\n {children}\n </TextstringProvider>\n </PersonFinderContext.Provider>\n );\n};\n\nPersonFinderProvider.displayName = 'PersonFinderProvider';\n\nexport default PersonFinderProvider;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"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","PersonFinderContext","exports","createContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","displayName","usePersonFinder","useContext","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","relationMode","setData","useState","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PersonFinderFilterTypes","PERSON","LoadingState","None","SITE","dataRef","useRef","useCallback","filter","key","newData","prevState","appendData","_prevState$key","_prevState$key2","oldEntries","state","prev","value","Pending","current","Error","loadData","searchString","skipMap","skip","then","result","finally","Success","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","length","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","count","searchLocal","searchedUsers","entriesToSearch","_entry$firstName","_entry$lastName","Boolean","join","trim","push","active","UAC","cancel","RelationMode","getUsersByGroups","groupId","users","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;\n\ninterface IPersonFinderContext {\n // Data\n data?: { [key: string]: PersonFinderData };\n updateData?: (key: PersonFinderFilterTypes, personFinderData: PersonFinderData) => void;\n\n // Tags\n tags?: Tag[];\n setTags?: Dispatch<SetStateAction<Tag[]>>;\n\n // Friends\n friends?: PersonEntry[];\n addFriend?: (personId: string) => void;\n removeFriend?: (personId: string) => void;\n\n // Filter\n activeFilter?: PersonFinderFilterTypes[];\n updateActiveFilter?: (filter: PersonFinderFilterTypes[]) => void;\n\n // Search\n search?: string;\n updateSearch?: (value: string) => void;\n\n // Loading\n loadMore?: (key: PersonFinderFilterTypes) => void;\n loadingState?: LoadingStateMap;\n updateLoadingState?: (key: PersonFinderFilterTypes, state: LoadingState) => void;\n}\n\nexport const PersonFinderContext = createContext<IPersonFinderContext>({\n data: undefined,\n updateData: undefined,\n friends: undefined,\n addFriend: undefined,\n removeFriend: undefined,\n activeFilter: undefined,\n updateActiveFilter: undefined,\n search: undefined,\n updateSearch: undefined,\n loadMore: undefined,\n loadingState: undefined,\n updateLoadingState: undefined,\n tags: undefined,\n setTags: undefined,\n});\n\nPersonFinderContext.displayName = 'PersonFinderContext';\n\nexport const usePersonFinder = () => useContext(PersonFinderContext);\n\ntype PersonFinderProviderProps = {\n children: ReactNode;\n friendsPriority: Priority;\n filterTypes: PersonFinderFilterTypes[];\n defaultEntries?: DefaultEntry[];\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n uacFilter?: UACFilter[];\n entries?: PersonEntry[];\n relationMode?: RelationMode;\n};\n\nconst PersonFinderProvider: FC<PersonFinderProviderProps> = ({\n children,\n friendsPriority,\n filterTypes,\n defaultEntries,\n excludedEntryIds,\n shouldShowOwnUser = false,\n uacFilter,\n entries,\n relationMode,\n}) => {\n const [data, setData] = useState<IPersonFinderContext['data']>();\n const [friends, setFriends] = useState<PersonEntry[]>();\n const [uacUsers, setUacUsers] = useState<PersonEntry[]>();\n const [activeFilter, setActiveFilter] = useState<IPersonFinderContext['activeFilter']>();\n const [search, setSearch] = useState('');\n const [tags, setTags] = useState<Tag[]>(\n defaultEntries?.map(({ id, name }) => ({ id, text: name })) ?? [],\n );\n const [loadingState, setLoadingState] = useState<LoadingStateMap>({\n [PersonFinderFilterTypes.PERSON]: LoadingState.None,\n [PersonFinderFilterTypes.SITE]: LoadingState.None,\n });\n\n const dataRef = useRef<IPersonFinderContext['data']>();\n\n const updateActiveFilter = useCallback((filter: IPersonFinderContext['activeFilter']) => {\n setActiveFilter(filter);\n }, []);\n\n const updateData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => ({ ...prevState, [key]: newData }));\n }, []);\n\n const appendData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => {\n const oldEntries = prevState && prevState[key]?.entries ? prevState[key]?.entries : [];\n\n return {\n ...prevState,\n [key]: {\n ...newData,\n entries: [...oldEntries, ...newData.entries],\n },\n };\n });\n }, []);\n\n const updateLoadingState = useCallback((key: PersonFinderFilterTypes, state: LoadingState) => {\n setLoadingState((prev) => ({\n ...prev,\n [key]: state,\n }));\n }, []);\n\n const updateSearch = useCallback((value: string) => {\n setSearch(value);\n }, []);\n\n const loadMore = useCallback(\n (key: PersonFinderFilterTypes) => {\n updateLoadingState(key, LoadingState.Pending);\n\n const current = data?.[key];\n\n if (!current) {\n updateLoadingState(key, LoadingState.Error);\n\n return;\n }\n\n void loadData({\n searchString: search ?? '',\n filter: [key],\n skipMap: { [key]: current.skip },\n relationMode,\n })\n .then((result) => {\n const newData = result?.[key];\n\n if (newData) {\n appendData(key, newData);\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n },\n [updateLoadingState, data, search, relationMode, appendData],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n relationMode,\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n ).current;\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter ?? filterTypes;\n\n if (uacFilter || entries) {\n searchLocal();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchData({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n latestArgsRef.current = { search, filter: active };\n\n throttledRequest();\n }\n }, [\n filterTypes,\n search,\n activeFilter,\n friends,\n friendsPriority,\n updateData,\n updateLoadingState,\n throttledRequest,\n searchData,\n uacFilter,\n searchLocal,\n entries,\n ]);\n\n useEffect(\n () => () => {\n throttledRequest.cancel();\n },\n [throttledRequest],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON)\n ) {\n void getUsersByGroups([{ groupId: -1 }]).then((users) => {\n setData({\n person: {\n entries: users,\n searchString: '',\n skip: users.length,\n count: users.length,\n },\n });\n });\n }\n\n if (uacFilter) {\n void getUsersByGroups(uacFilter).then((users) => {\n setUacUsers(users);\n });\n\n return;\n }\n\n if (filterTypes.includes(PersonFinderFilterTypes.UAC) && search === '') {\n void getUACGroups().then((result) => {\n setData({\n uac: {\n entries: result,\n searchString: '',\n skip: result.length,\n count: result.length,\n },\n });\n });\n }\n\n if (\n friendsPriority === Priority.HIGH &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friends &&\n search === ''\n ) {\n setData({\n person: {\n entries: friends,\n searchString: '',\n skip: friends.length,\n count: friends.length,\n },\n });\n }\n }, [entries, filterTypes, friends, friendsPriority, relationMode, search, uacFilter]);\n\n const providerValue = useMemo<IPersonFinderContext>(\n () => ({\n data: filterDataByKeys(data, activeFilter, {\n excludedEntryIds,\n shouldShowOwnUser: uacFilter ? false : shouldShowOwnUser,\n }),\n updateData,\n activeFilter,\n updateActiveFilter,\n friends,\n addFriend,\n removeFriend,\n search,\n updateSearch,\n loadMore,\n loadingState,\n updateLoadingState,\n setTags,\n tags,\n }),\n [\n activeFilter,\n addFriend,\n data,\n excludedEntryIds,\n friends,\n loadMore,\n loadingState,\n removeFriend,\n search,\n shouldShowOwnUser,\n tags,\n uacFilter,\n updateActiveFilter,\n updateData,\n updateLoadingState,\n updateSearch,\n ],\n );\n\n return (\n <PersonFinderContext.Provider value={providerValue}>\n <TextstringProvider libraryName={PERSON_FINDER_TEXTSTRING_LIBRARY_NAME}>\n {children}\n </TextstringProvider>\n </PersonFinderContext.Provider>\n );\n};\n\nPersonFinderProvider.displayName = 'PersonFinderProvider';\n\nexport default PersonFinderProvider;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -17,10 +17,11 @@ const PersonFinder = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
|
17
17
|
dropdownDirection,
|
|
18
18
|
defaultEntries,
|
|
19
19
|
excludedEntryIds,
|
|
20
|
+
relationMode = _personFinder.RelationMode.PERSON,
|
|
20
21
|
uacFilter,
|
|
21
22
|
entries,
|
|
22
23
|
filterTypes = uacFilter || entries ? [_personFinder.PersonFinderFilterTypes.PERSON] : DEFAULT_FILTER_TYPES,
|
|
23
|
-
friendsPriority = _personFinder.Priority.HIGH,
|
|
24
|
+
friendsPriority = relationMode === _personFinder.RelationMode.SITE ? _personFinder.Priority.NORMAL : _personFinder.Priority.HIGH,
|
|
24
25
|
leftElement,
|
|
25
26
|
maxEntries,
|
|
26
27
|
onAdd,
|
|
@@ -32,8 +33,7 @@ const PersonFinder = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
|
32
33
|
shouldHideResultsOnAdd = !shouldAllowMultiple || false,
|
|
33
34
|
shouldShowOwnUser = false,
|
|
34
35
|
shouldDisableRemove = false,
|
|
35
|
-
shouldRenderInline = false
|
|
36
|
-
relationMode = _personFinder.RelationMode.PERSON
|
|
36
|
+
shouldRenderInline = false
|
|
37
37
|
}, ref) => {
|
|
38
38
|
const personFinderRef = (0, _react.useRef)(null);
|
|
39
39
|
const innerRef = (0, _react.useRef)(null);
|
|
@@ -65,6 +65,7 @@ const PersonFinder = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
|
65
65
|
filterTypes: filterTypes,
|
|
66
66
|
maxEntries: maxEntries,
|
|
67
67
|
onAdd: onAdd,
|
|
68
|
+
relationMode: relationMode,
|
|
68
69
|
shouldDisableRemove: shouldDisableRemove,
|
|
69
70
|
onDropdownHide: onDropdownHide,
|
|
70
71
|
onDropdownShow: onDropdownShow,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersonFinder.js","names":["_react","_interopRequireWildcard","require","_personFinder","_PersonFinderProvider","_interopRequireDefault","_PersonFinderWrapper","_core","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_FILTER_TYPES","PersonFinderFilterTypes","PERSON","SITE","PersonFinder","forwardRef","container","dropdownDirection","defaultEntries","excludedEntryIds","uacFilter","entries","filterTypes","friendsPriority","Priority","HIGH","leftElement","maxEntries","onAdd","onDropdownHide","onDropdownShow","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldShowOwnUser","shouldDisableRemove","shouldRenderInline","
|
|
1
|
+
{"version":3,"file":"PersonFinder.js","names":["_react","_interopRequireWildcard","require","_personFinder","_PersonFinderProvider","_interopRequireDefault","_PersonFinderWrapper","_core","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_FILTER_TYPES","PersonFinderFilterTypes","PERSON","SITE","PersonFinder","forwardRef","container","dropdownDirection","defaultEntries","excludedEntryIds","relationMode","RelationMode","uacFilter","entries","filterTypes","friendsPriority","Priority","NORMAL","HIGH","leftElement","maxEntries","onAdd","onDropdownHide","onDropdownShow","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldShowOwnUser","shouldDisableRemove","shouldRenderInline","ref","personFinderRef","useRef","innerRef","useImperativeHandle","clear","_innerRef$current","current","createElement","AreaProvider","shouldChangeColor","shouldDisableListItemPadding","className","displayName","_default","exports"],"sources":["../../../../src/components/person-finder/PersonFinder.tsx"],"sourcesContent":["import React, { forwardRef, useImperativeHandle, useRef } from 'react';\nimport {\n DefaultEntry,\n PersonEntry,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n UACFilter,\n} from '../../types/personFinder';\nimport PersonFinderProvider from '../PersonFinderProvider';\nimport PersonFinderWrapper, {\n PersonFinderRef,\n PersonFinderWrapperProps,\n} from './person-finder-wrapper/PersonFinderWrapper';\nimport { AreaProvider } from '@chayns-components/core';\n\nconst DEFAULT_FILTER_TYPES = [PersonFinderFilterTypes.PERSON, PersonFinderFilterTypes.SITE];\n\nexport type PersonFinderProps = PersonFinderWrapperProps & {\n /**\n * Sites and persons that are selected by default.\n */\n defaultEntries?: DefaultEntry[];\n /**\n * Entry ids to exclude from the results\n */\n excludedEntryIds?: PersonFinderEntry['id'][];\n /**\n * Whether the own user should be shown in the results. By default, it is not shown.\n */\n shouldShowOwnUser?: boolean;\n /**\n * Optional filter to search member of uac group. Only works with groups of the current Site and if the user is manager.\n */\n uacFilter?: UACFilter[];\n /**\n * A list of entries that should be searched.\n */\n entries?: PersonEntry[];\n};\n\nconst PersonFinder = forwardRef<PersonFinderRef, PersonFinderProps>(\n (\n {\n container,\n dropdownDirection,\n defaultEntries,\n excludedEntryIds,\n relationMode = RelationMode.PERSON,\n uacFilter,\n entries,\n filterTypes = uacFilter || entries\n ? [PersonFinderFilterTypes.PERSON]\n : DEFAULT_FILTER_TYPES,\n friendsPriority = relationMode === RelationMode.SITE ? Priority.NORMAL : Priority.HIGH,\n leftElement,\n maxEntries,\n onAdd,\n onDropdownHide,\n onDropdownShow,\n onRemove,\n placeholder = 'Person oder Site finden',\n shouldAllowMultiple = true,\n shouldHideResultsOnAdd = !shouldAllowMultiple || false,\n shouldShowOwnUser = false,\n shouldDisableRemove = false,\n shouldRenderInline = false,\n },\n ref,\n ) => {\n const personFinderRef = useRef<HTMLDivElement>(null);\n const innerRef = useRef<PersonFinderRef>(null);\n\n useImperativeHandle(ref, () => ({\n clear: () => innerRef.current?.clear(),\n }));\n\n return (\n <PersonFinderProvider\n friendsPriority={friendsPriority}\n defaultEntries={defaultEntries}\n filterTypes={filterTypes}\n excludedEntryIds={excludedEntryIds}\n shouldShowOwnUser={shouldShowOwnUser}\n uacFilter={uacFilter}\n entries={entries}\n relationMode={relationMode}\n >\n <AreaProvider shouldChangeColor={false} shouldDisableListItemPadding>\n <div className=\"beta-chayns-person-finder\" ref={personFinderRef}>\n <PersonFinderWrapper\n ref={innerRef}\n container={container}\n dropdownDirection={dropdownDirection}\n filterTypes={filterTypes}\n maxEntries={maxEntries}\n onAdd={onAdd}\n relationMode={relationMode}\n shouldDisableRemove={shouldDisableRemove}\n onDropdownHide={onDropdownHide}\n onDropdownShow={onDropdownShow}\n leftElement={leftElement}\n onRemove={onRemove}\n placeholder={placeholder}\n shouldAllowMultiple={shouldAllowMultiple}\n shouldHideResultsOnAdd={shouldHideResultsOnAdd}\n shouldRenderInline={shouldRenderInline}\n />\n </div>\n </AreaProvider>\n </PersonFinderProvider>\n );\n },\n);\n\nPersonFinder.displayName = 'PersonFinder';\n\nexport default PersonFinder;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -29,7 +29,8 @@ const PersonFinderWrapper = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
|
29
29
|
placeholder,
|
|
30
30
|
shouldAllowMultiple,
|
|
31
31
|
shouldHideResultsOnAdd,
|
|
32
|
-
shouldRenderInline
|
|
32
|
+
shouldRenderInline,
|
|
33
|
+
relationMode
|
|
33
34
|
}, ref) => {
|
|
34
35
|
const {
|
|
35
36
|
data,
|
|
@@ -137,11 +138,15 @@ const PersonFinderWrapper = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
|
137
138
|
}, [onDropdownHide, onDropdownShow, shouldShowBody]);
|
|
138
139
|
const showBody = (0, _react.useMemo)(() => {
|
|
139
140
|
const extraMobileCheck = isTouch ? isFocused : true;
|
|
141
|
+
const check = shouldShowBody && extraMobileCheck;
|
|
142
|
+
if (relationMode === _personFinder.RelationMode.SITE) {
|
|
143
|
+
return check;
|
|
144
|
+
}
|
|
140
145
|
if ((filterTypes === null || filterTypes === void 0 ? void 0 : filterTypes.length) === 1 && (filterTypes.includes(_personFinder.PersonFinderFilterTypes.SITE) || filterTypes.includes(_personFinder.PersonFinderFilterTypes.PERSON) && friendsPriority !== _personFinder.Priority.HIGH)) {
|
|
141
|
-
return
|
|
146
|
+
return check && !!search && (search === null || search === void 0 ? void 0 : search.length) > 2;
|
|
142
147
|
}
|
|
143
|
-
return
|
|
144
|
-
}, [filterTypes, friendsPriority, isFocused, isTouch, search, shouldShowBody]);
|
|
148
|
+
return check;
|
|
149
|
+
}, [filterTypes, friendsPriority, isFocused, isTouch, search, shouldShowBody, relationMode]);
|
|
145
150
|
const content = (0, _react.useMemo)(() => {
|
|
146
151
|
const body = /*#__PURE__*/_react.default.createElement(_PersonFinderBody.default, {
|
|
147
152
|
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","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","includes","PersonFinderFilterTypes","SITE","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\nconst PersonFinderWrapper = forwardRef<PersonFinderRef, PersonFinderWrapperProps>(\n (\n {\n container,\n dropdownDirection,\n filterTypes,\n friendsPriority,\n leftElement: leftElementProp,\n maxEntries = Infinity,\n onAdd,\n onDropdownHide,\n onDropdownShow,\n shouldDisableRemove,\n onRemove,\n placeholder,\n shouldAllowMultiple,\n shouldHideResultsOnAdd,\n shouldRenderInline,\n },\n ref,\n ) => {\n const { data, updateSearch, setTags, tags, search } = usePersonFinder();\n\n const [isFocused, setIsFocused] = useState(false);\n const [shouldShowBody, setShouldShowBody] = useState(false);\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const keyRef = useRef(`person-finder-${uuidV4()}`);\n const tagInputRef = useRef<TagInputRef>(null);\n\n const { isTouch } = useDevice();\n\n const leftElement = leftElementProp ?? (\n <StyledPersonFinderLeftElement>\n <Icon icons={['fa fa-search']} />\n </StyledPersonFinderLeftElement>\n );\n\n const handleTagInputBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const handleTagInputFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const handleRemove = useCallback(\n (id: string) => {\n if (typeof setTags !== 'function' || shouldDisableRemove) {\n return;\n }\n\n setTags((prevState) => prevState.filter((entry) => entry.id !== id));\n\n if (typeof onRemove === 'function') {\n onRemove(id);\n }\n },\n [onRemove, setTags, shouldDisableRemove],\n );\n\n const handleClose = useCallback(() => {\n setShouldShowBody(false);\n }, []);\n\n const handleOpen = useCallback(() => {\n setShouldShowBody(true);\n }, []);\n\n const handleClear = useCallback(() => {\n if (typeof setTags !== 'function' || shouldDisableRemove) {\n return;\n }\n\n tagInputRef.current?.resetValue();\n\n setTags([]);\n }, [setTags, shouldDisableRemove]);\n\n const handleDropdownOutsideClick = useCallback(() => {\n tagInputRef.current?.blur();\n\n return isFocused && isTouch;\n }, [isFocused, isTouch]);\n\n const handleAdd = useCallback(\n (id: string) => {\n if (typeof setTags !== 'function') {\n return;\n }\n\n const selectedEntry = Object.values(data ?? {})\n .flat()\n .map(({ entries }) => entries)\n .flat()\n .find(\n (entry) =>\n (typeof entry.id === 'string' ? entry.id : entry.id.toString()) === id,\n );\n\n if (!selectedEntry) {\n return;\n }\n\n const { name, firstName, lastName } = selectedEntry as PersonEntry & SiteEntry;\n\n const tag: Tag = {\n id,\n text: name ?? `${(firstName as string) ?? ''} ${(lastName as string) ?? ''}`,\n };\n\n setTags((prevState) => {\n if (prevState.some((t) => t.id === id) || prevState.length >= maxEntries) {\n return prevState;\n }\n\n tagInputRef.current?.resetValue();\n\n if (typeof onAdd === 'function') {\n onAdd(selectedEntry);\n }\n\n if (shouldHideResultsOnAdd) {\n setShouldShowBody(false);\n }\n\n return [...prevState, tag];\n });\n },\n [data, maxEntries, onAdd, setTags, shouldHideResultsOnAdd],\n );\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (typeof updateSearch === 'function') {\n updateSearch(event.target.value);\n }\n },\n [updateSearch],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => handleClear(),\n }),\n [handleClear],\n );\n\n useEffect(() => {\n if (shouldShowBody) {\n if (typeof onDropdownShow === 'function') {\n onDropdownShow();\n }\n } else if (typeof onDropdownHide === 'function') {\n onDropdownHide();\n }\n }, [onDropdownHide, onDropdownShow, shouldShowBody]);\n\n const showBody = useMemo(() => {\n const extraMobileCheck = isTouch ? isFocused : true;\n\n if (\n filterTypes?.length === 1 &&\n (filterTypes.includes(PersonFinderFilterTypes.SITE) ||\n (filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friendsPriority !== Priority.HIGH))\n ) {\n return shouldShowBody && extraMobileCheck && !!search && search?.length > 2;\n }\n\n return shouldShowBody && extraMobileCheck;\n }, [filterTypes, friendsPriority, isFocused, isTouch, search, shouldShowBody]);\n\n const content = useMemo(() => {\n const body = (\n <PersonFinderBody\n filterTypes={filterTypes}\n onAdd={handleAdd}\n onRemove={handleRemove}\n ref={contentRef}\n shouldRenderInline={shouldRenderInline}\n />\n );\n\n if (shouldRenderInline) {\n return body;\n }\n\n if (boxRef.current) {\n return (\n <DropdownBodyWrapper\n anchorElement={boxRef.current}\n container={container}\n direction={dropdownDirection}\n onClose={handleClose}\n onOutsideClick={handleDropdownOutsideClick}\n shouldShowDropdown={showBody}\n >\n {body}\n </DropdownBodyWrapper>\n );\n }\n\n return null;\n }, [\n container,\n dropdownDirection,\n filterTypes,\n handleAdd,\n handleClose,\n handleDropdownOutsideClick,\n handleRemove,\n shouldRenderInline,\n showBody,\n ]);\n\n return (\n <StyledPersonFinder ref={boxRef} onFocus={handleOpen} key={keyRef.current}>\n <TagInput\n leftElement={leftElement}\n onBlur={handleTagInputBlur}\n onChange={handleChange}\n onFocus={handleTagInputFocus}\n onRemove={handleRemove}\n placeholder={placeholder}\n ref={tagInputRef}\n shouldAllowMultiple={shouldAllowMultiple}\n shouldPreventEnter\n tags={tags}\n />\n {content}\n </StyledPersonFinder>\n );\n },\n);\n\nPersonFinderWrapper.displayName = 'PersonFinderWrapper';\n\nexport default PersonFinderWrapper;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"PersonFinderWrapper.js","names":["_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,6 +1,6 @@
|
|
|
1
1
|
import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import throttle from 'lodash.throttle';
|
|
3
|
-
import { LoadingState, PersonFinderFilterTypes, Priority } from '../types/personFinder';
|
|
3
|
+
import { LoadingState, PersonFinderFilterTypes, Priority, RelationMode } from '../types/personFinder';
|
|
4
4
|
import { getFriends } from '../api/friends/get';
|
|
5
5
|
import { postFriends } from '../api/friends/post';
|
|
6
6
|
import { deleteFriends } from '../api/friends/delete';
|
|
@@ -274,6 +274,20 @@ const PersonFinderProvider = ({
|
|
|
274
274
|
if (entries) {
|
|
275
275
|
return;
|
|
276
276
|
}
|
|
277
|
+
if (relationMode === RelationMode.SITE && filterTypes.includes(PersonFinderFilterTypes.PERSON)) {
|
|
278
|
+
void getUsersByGroups([{
|
|
279
|
+
groupId: -1
|
|
280
|
+
}]).then(users => {
|
|
281
|
+
setData({
|
|
282
|
+
person: {
|
|
283
|
+
entries: users,
|
|
284
|
+
searchString: '',
|
|
285
|
+
skip: users.length,
|
|
286
|
+
count: users.length
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
}
|
|
277
291
|
if (uacFilter) {
|
|
278
292
|
void getUsersByGroups(uacFilter).then(users => {
|
|
279
293
|
setUacUsers(users);
|
|
@@ -302,7 +316,7 @@ const PersonFinderProvider = ({
|
|
|
302
316
|
}
|
|
303
317
|
});
|
|
304
318
|
}
|
|
305
|
-
}, [entries, filterTypes, friends, friendsPriority, search, uacFilter]);
|
|
319
|
+
}, [entries, filterTypes, friends, friendsPriority, relationMode, search, uacFilter]);
|
|
306
320
|
const providerValue = useMemo(() => ({
|
|
307
321
|
data: filterDataByKeys(data, activeFilter, {
|
|
308
322
|
excludedEntryIds,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersonFinderProvider.js","names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","throttle","LoadingState","PersonFinderFilterTypes","Priority","getFriends","postFriends","deleteFriends","filterDataByKeys","loadData","getUACGroups","getUsersByGroups","TextstringProvider","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","THROTTLE_INTERVAL","PersonFinderContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","displayName","usePersonFinder","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","relationMode","setData","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PERSON","None","SITE","dataRef","filter","key","newData","prevState","appendData","oldEntries","state","prev","value","Pending","current","Error","searchString","skipMap","skip","then","result","finally","Success","personId","firstName","lastName","verificationState","isVerified","commonSites","type","wasSuccessful","includes","latestArgsRef","latestHandledRequestRef","throttledRequest","args","requestTimestamp","Date","now","forEach","Object","keyString","HIGH","friendIds","Set","f","serverFriendEntries","entry","has","serverFriendIds","missingFriends","toLowerCase","otherEntries","length","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","count","searchLocal","searchedUsers","entriesToSearch","Boolean","join","trim","push","active","UAC","cancel","users","uac","person","providerValue","createElement","Provider","libraryName"],"sources":["../../../src/components/PersonFinderProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n Dispatch,\n FC,\n ReactNode,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport throttle from 'lodash.throttle';\nimport {\n DefaultEntry,\n LoadingState,\n LoadingStateMap,\n PersonEntry,\n PersonFinderData,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n ThrottledFunction,\n UACEntry,\n UACFilter,\n} from '../types/personFinder';\nimport { getFriends } from '../api/friends/get';\nimport { postFriends } from '../api/friends/post';\nimport { deleteFriends } from '../api/friends/delete';\nimport { filterDataByKeys, loadData } from '../utils/personFinder';\nimport { Tag } from '@chayns-components/core/lib/types/types/tagInput';\nimport { getUACGroups, getUsersByGroups } from '../utils/uac';\nimport { TextstringProvider } from '@chayns-components/textstring';\nimport { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\nconst THROTTLE_INTERVAL = 500;\n\ninterface IPersonFinderContext {\n // Data\n data?: { [key: string]: PersonFinderData };\n updateData?: (key: PersonFinderFilterTypes, personFinderData: PersonFinderData) => void;\n\n // Tags\n tags?: Tag[];\n setTags?: Dispatch<SetStateAction<Tag[]>>;\n\n // Friends\n friends?: PersonEntry[];\n addFriend?: (personId: string) => void;\n removeFriend?: (personId: string) => void;\n\n // Filter\n activeFilter?: PersonFinderFilterTypes[];\n updateActiveFilter?: (filter: PersonFinderFilterTypes[]) => void;\n\n // Search\n search?: string;\n updateSearch?: (value: string) => void;\n\n // Loading\n loadMore?: (key: PersonFinderFilterTypes) => void;\n loadingState?: LoadingStateMap;\n updateLoadingState?: (key: PersonFinderFilterTypes, state: LoadingState) => void;\n}\n\nexport const PersonFinderContext = createContext<IPersonFinderContext>({\n data: undefined,\n updateData: undefined,\n friends: undefined,\n addFriend: undefined,\n removeFriend: undefined,\n activeFilter: undefined,\n updateActiveFilter: undefined,\n search: undefined,\n updateSearch: undefined,\n loadMore: undefined,\n loadingState: undefined,\n updateLoadingState: undefined,\n tags: undefined,\n setTags: undefined,\n});\n\nPersonFinderContext.displayName = 'PersonFinderContext';\n\nexport const usePersonFinder = () => useContext(PersonFinderContext);\n\ntype PersonFinderProviderProps = {\n children: ReactNode;\n friendsPriority: Priority;\n filterTypes: PersonFinderFilterTypes[];\n defaultEntries?: DefaultEntry[];\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n uacFilter?: UACFilter[];\n entries?: PersonEntry[];\n relationMode?: RelationMode;\n};\n\nconst PersonFinderProvider: FC<PersonFinderProviderProps> = ({\n children,\n friendsPriority,\n filterTypes,\n defaultEntries,\n excludedEntryIds,\n shouldShowOwnUser = false,\n uacFilter,\n entries,\n relationMode,\n}) => {\n const [data, setData] = useState<IPersonFinderContext['data']>();\n const [friends, setFriends] = useState<PersonEntry[]>();\n const [uacUsers, setUacUsers] = useState<PersonEntry[]>();\n const [activeFilter, setActiveFilter] = useState<IPersonFinderContext['activeFilter']>();\n const [search, setSearch] = useState('');\n const [tags, setTags] = useState<Tag[]>(\n defaultEntries?.map(({ id, name }) => ({ id, text: name })) ?? [],\n );\n const [loadingState, setLoadingState] = useState<LoadingStateMap>({\n [PersonFinderFilterTypes.PERSON]: LoadingState.None,\n [PersonFinderFilterTypes.SITE]: LoadingState.None,\n });\n\n const dataRef = useRef<IPersonFinderContext['data']>();\n\n const updateActiveFilter = useCallback((filter: IPersonFinderContext['activeFilter']) => {\n setActiveFilter(filter);\n }, []);\n\n const updateData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => ({ ...prevState, [key]: newData }));\n }, []);\n\n const appendData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => {\n const oldEntries = prevState && prevState[key]?.entries ? prevState[key]?.entries : [];\n\n return {\n ...prevState,\n [key]: {\n ...newData,\n entries: [...oldEntries, ...newData.entries],\n },\n };\n });\n }, []);\n\n const updateLoadingState = useCallback((key: PersonFinderFilterTypes, state: LoadingState) => {\n setLoadingState((prev) => ({\n ...prev,\n [key]: state,\n }));\n }, []);\n\n const updateSearch = useCallback((value: string) => {\n setSearch(value);\n }, []);\n\n const loadMore = useCallback(\n (key: PersonFinderFilterTypes) => {\n updateLoadingState(key, LoadingState.Pending);\n\n const current = data?.[key];\n\n if (!current) {\n updateLoadingState(key, LoadingState.Error);\n\n return;\n }\n\n void loadData({\n searchString: search ?? '',\n filter: [key],\n skipMap: { [key]: current.skip },\n relationMode,\n })\n .then((result) => {\n const newData = result?.[key];\n\n if (newData) {\n appendData(key, newData);\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n },\n [updateLoadingState, data, search, relationMode, appendData],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n relationMode,\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n ).current;\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter ?? filterTypes;\n\n if (uacFilter || entries) {\n searchLocal();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchData({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n latestArgsRef.current = { search, filter: active };\n\n throttledRequest();\n }\n }, [\n filterTypes,\n search,\n activeFilter,\n friends,\n friendsPriority,\n updateData,\n updateLoadingState,\n throttledRequest,\n searchData,\n uacFilter,\n searchLocal,\n entries,\n ]);\n\n useEffect(\n () => () => {\n throttledRequest.cancel();\n },\n [throttledRequest],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (uacFilter) {\n void getUsersByGroups(uacFilter).then((users) => {\n setUacUsers(users);\n });\n\n return;\n }\n\n if (filterTypes.includes(PersonFinderFilterTypes.UAC) && search === '') {\n void getUACGroups().then((result) => {\n setData({\n uac: {\n entries: result,\n searchString: '',\n skip: result.length,\n count: result.length,\n },\n });\n });\n }\n\n if (\n friendsPriority === Priority.HIGH &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friends &&\n search === ''\n ) {\n setData({\n person: {\n entries: friends,\n searchString: '',\n skip: friends.length,\n count: friends.length,\n },\n });\n }\n }, [entries, filterTypes, friends, friendsPriority, search, uacFilter]);\n\n const providerValue = useMemo<IPersonFinderContext>(\n () => ({\n data: filterDataByKeys(data, activeFilter, {\n excludedEntryIds,\n shouldShowOwnUser: uacFilter ? false : shouldShowOwnUser,\n }),\n updateData,\n activeFilter,\n updateActiveFilter,\n friends,\n addFriend,\n removeFriend,\n search,\n updateSearch,\n loadMore,\n loadingState,\n updateLoadingState,\n setTags,\n tags,\n }),\n [\n activeFilter,\n addFriend,\n data,\n excludedEntryIds,\n friends,\n loadMore,\n loadingState,\n removeFriend,\n search,\n shouldShowOwnUser,\n tags,\n uacFilter,\n updateActiveFilter,\n updateData,\n updateLoadingState,\n updateSearch,\n ],\n );\n\n return (\n <PersonFinderContext.Provider value={providerValue}>\n <TextstringProvider libraryName={PERSON_FINDER_TEXTSTRING_LIBRARY_NAME}>\n {children}\n </TextstringProvider>\n </PersonFinderContext.Provider>\n );\n};\n\nPersonFinderProvider.displayName = 'PersonFinderProvider';\n\nexport default PersonFinderProvider;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"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","PersonFinderContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","displayName","usePersonFinder","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","relationMode","setData","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PERSON","None","SITE","dataRef","filter","key","newData","prevState","appendData","oldEntries","state","prev","value","Pending","current","Error","searchString","skipMap","skip","then","result","finally","Success","personId","firstName","lastName","verificationState","isVerified","commonSites","type","wasSuccessful","includes","latestArgsRef","latestHandledRequestRef","throttledRequest","args","requestTimestamp","Date","now","forEach","Object","keyString","HIGH","friendIds","Set","f","serverFriendEntries","entry","has","serverFriendIds","missingFriends","toLowerCase","otherEntries","length","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","count","searchLocal","searchedUsers","entriesToSearch","Boolean","join","trim","push","active","UAC","cancel","groupId","users","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;\n\ninterface IPersonFinderContext {\n // Data\n data?: { [key: string]: PersonFinderData };\n updateData?: (key: PersonFinderFilterTypes, personFinderData: PersonFinderData) => void;\n\n // Tags\n tags?: Tag[];\n setTags?: Dispatch<SetStateAction<Tag[]>>;\n\n // Friends\n friends?: PersonEntry[];\n addFriend?: (personId: string) => void;\n removeFriend?: (personId: string) => void;\n\n // Filter\n activeFilter?: PersonFinderFilterTypes[];\n updateActiveFilter?: (filter: PersonFinderFilterTypes[]) => void;\n\n // Search\n search?: string;\n updateSearch?: (value: string) => void;\n\n // Loading\n loadMore?: (key: PersonFinderFilterTypes) => void;\n loadingState?: LoadingStateMap;\n updateLoadingState?: (key: PersonFinderFilterTypes, state: LoadingState) => void;\n}\n\nexport const PersonFinderContext = createContext<IPersonFinderContext>({\n data: undefined,\n updateData: undefined,\n friends: undefined,\n addFriend: undefined,\n removeFriend: undefined,\n activeFilter: undefined,\n updateActiveFilter: undefined,\n search: undefined,\n updateSearch: undefined,\n loadMore: undefined,\n loadingState: undefined,\n updateLoadingState: undefined,\n tags: undefined,\n setTags: undefined,\n});\n\nPersonFinderContext.displayName = 'PersonFinderContext';\n\nexport const usePersonFinder = () => useContext(PersonFinderContext);\n\ntype PersonFinderProviderProps = {\n children: ReactNode;\n friendsPriority: Priority;\n filterTypes: PersonFinderFilterTypes[];\n defaultEntries?: DefaultEntry[];\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n uacFilter?: UACFilter[];\n entries?: PersonEntry[];\n relationMode?: RelationMode;\n};\n\nconst PersonFinderProvider: FC<PersonFinderProviderProps> = ({\n children,\n friendsPriority,\n filterTypes,\n defaultEntries,\n excludedEntryIds,\n shouldShowOwnUser = false,\n uacFilter,\n entries,\n relationMode,\n}) => {\n const [data, setData] = useState<IPersonFinderContext['data']>();\n const [friends, setFriends] = useState<PersonEntry[]>();\n const [uacUsers, setUacUsers] = useState<PersonEntry[]>();\n const [activeFilter, setActiveFilter] = useState<IPersonFinderContext['activeFilter']>();\n const [search, setSearch] = useState('');\n const [tags, setTags] = useState<Tag[]>(\n defaultEntries?.map(({ id, name }) => ({ id, text: name })) ?? [],\n );\n const [loadingState, setLoadingState] = useState<LoadingStateMap>({\n [PersonFinderFilterTypes.PERSON]: LoadingState.None,\n [PersonFinderFilterTypes.SITE]: LoadingState.None,\n });\n\n const dataRef = useRef<IPersonFinderContext['data']>();\n\n const updateActiveFilter = useCallback((filter: IPersonFinderContext['activeFilter']) => {\n setActiveFilter(filter);\n }, []);\n\n const updateData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => ({ ...prevState, [key]: newData }));\n }, []);\n\n const appendData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => {\n const oldEntries = prevState && prevState[key]?.entries ? prevState[key]?.entries : [];\n\n return {\n ...prevState,\n [key]: {\n ...newData,\n entries: [...oldEntries, ...newData.entries],\n },\n };\n });\n }, []);\n\n const updateLoadingState = useCallback((key: PersonFinderFilterTypes, state: LoadingState) => {\n setLoadingState((prev) => ({\n ...prev,\n [key]: state,\n }));\n }, []);\n\n const updateSearch = useCallback((value: string) => {\n setSearch(value);\n }, []);\n\n const loadMore = useCallback(\n (key: PersonFinderFilterTypes) => {\n updateLoadingState(key, LoadingState.Pending);\n\n const current = data?.[key];\n\n if (!current) {\n updateLoadingState(key, LoadingState.Error);\n\n return;\n }\n\n void loadData({\n searchString: search ?? '',\n filter: [key],\n skipMap: { [key]: current.skip },\n relationMode,\n })\n .then((result) => {\n const newData = result?.[key];\n\n if (newData) {\n appendData(key, newData);\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n },\n [updateLoadingState, data, search, relationMode, appendData],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n relationMode,\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n ).current;\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter ?? filterTypes;\n\n if (uacFilter || entries) {\n searchLocal();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchData({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n latestArgsRef.current = { search, filter: active };\n\n throttledRequest();\n }\n }, [\n filterTypes,\n search,\n activeFilter,\n friends,\n friendsPriority,\n updateData,\n updateLoadingState,\n throttledRequest,\n searchData,\n uacFilter,\n searchLocal,\n entries,\n ]);\n\n useEffect(\n () => () => {\n throttledRequest.cancel();\n },\n [throttledRequest],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON)\n ) {\n void getUsersByGroups([{ groupId: -1 }]).then((users) => {\n setData({\n person: {\n entries: users,\n searchString: '',\n skip: users.length,\n count: users.length,\n },\n });\n });\n }\n\n if (uacFilter) {\n void getUsersByGroups(uacFilter).then((users) => {\n setUacUsers(users);\n });\n\n return;\n }\n\n if (filterTypes.includes(PersonFinderFilterTypes.UAC) && search === '') {\n void getUACGroups().then((result) => {\n setData({\n uac: {\n entries: result,\n searchString: '',\n skip: result.length,\n count: result.length,\n },\n });\n });\n }\n\n if (\n friendsPriority === Priority.HIGH &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friends &&\n search === ''\n ) {\n setData({\n person: {\n entries: friends,\n searchString: '',\n skip: friends.length,\n count: friends.length,\n },\n });\n }\n }, [entries, filterTypes, friends, friendsPriority, relationMode, search, uacFilter]);\n\n const providerValue = useMemo<IPersonFinderContext>(\n () => ({\n data: filterDataByKeys(data, activeFilter, {\n excludedEntryIds,\n shouldShowOwnUser: uacFilter ? false : shouldShowOwnUser,\n }),\n updateData,\n activeFilter,\n updateActiveFilter,\n friends,\n addFriend,\n removeFriend,\n search,\n updateSearch,\n loadMore,\n loadingState,\n updateLoadingState,\n setTags,\n tags,\n }),\n [\n activeFilter,\n addFriend,\n data,\n excludedEntryIds,\n friends,\n loadMore,\n loadingState,\n removeFriend,\n search,\n shouldShowOwnUser,\n tags,\n uacFilter,\n updateActiveFilter,\n updateData,\n updateLoadingState,\n updateSearch,\n ],\n );\n\n return (\n <PersonFinderContext.Provider value={providerValue}>\n <TextstringProvider libraryName={PERSON_FINDER_TEXTSTRING_LIBRARY_NAME}>\n {children}\n </TextstringProvider>\n </PersonFinderContext.Provider>\n );\n};\n\nPersonFinderProvider.displayName = 'PersonFinderProvider';\n\nexport default PersonFinderProvider;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,10 +9,11 @@ const PersonFinder = /*#__PURE__*/forwardRef(({
|
|
|
9
9
|
dropdownDirection,
|
|
10
10
|
defaultEntries,
|
|
11
11
|
excludedEntryIds,
|
|
12
|
+
relationMode = RelationMode.PERSON,
|
|
12
13
|
uacFilter,
|
|
13
14
|
entries,
|
|
14
15
|
filterTypes = uacFilter || entries ? [PersonFinderFilterTypes.PERSON] : DEFAULT_FILTER_TYPES,
|
|
15
|
-
friendsPriority = Priority.HIGH,
|
|
16
|
+
friendsPriority = relationMode === RelationMode.SITE ? Priority.NORMAL : Priority.HIGH,
|
|
16
17
|
leftElement,
|
|
17
18
|
maxEntries,
|
|
18
19
|
onAdd,
|
|
@@ -24,8 +25,7 @@ const PersonFinder = /*#__PURE__*/forwardRef(({
|
|
|
24
25
|
shouldHideResultsOnAdd = !shouldAllowMultiple || false,
|
|
25
26
|
shouldShowOwnUser = false,
|
|
26
27
|
shouldDisableRemove = false,
|
|
27
|
-
shouldRenderInline = false
|
|
28
|
-
relationMode = RelationMode.PERSON
|
|
28
|
+
shouldRenderInline = false
|
|
29
29
|
}, ref) => {
|
|
30
30
|
const personFinderRef = useRef(null);
|
|
31
31
|
const innerRef = useRef(null);
|
|
@@ -54,6 +54,7 @@ const PersonFinder = /*#__PURE__*/forwardRef(({
|
|
|
54
54
|
filterTypes: filterTypes,
|
|
55
55
|
maxEntries: maxEntries,
|
|
56
56
|
onAdd: onAdd,
|
|
57
|
+
relationMode: relationMode,
|
|
57
58
|
shouldDisableRemove: shouldDisableRemove,
|
|
58
59
|
onDropdownHide: onDropdownHide,
|
|
59
60
|
onDropdownShow: onDropdownShow,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersonFinder.js","names":["React","forwardRef","useImperativeHandle","useRef","PersonFinderFilterTypes","Priority","RelationMode","PersonFinderProvider","PersonFinderWrapper","AreaProvider","DEFAULT_FILTER_TYPES","PERSON","SITE","PersonFinder","container","dropdownDirection","defaultEntries","excludedEntryIds","uacFilter","entries","filterTypes","friendsPriority","HIGH","leftElement","maxEntries","onAdd","onDropdownHide","onDropdownShow","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldShowOwnUser","shouldDisableRemove","shouldRenderInline","
|
|
1
|
+
{"version":3,"file":"PersonFinder.js","names":["React","forwardRef","useImperativeHandle","useRef","PersonFinderFilterTypes","Priority","RelationMode","PersonFinderProvider","PersonFinderWrapper","AreaProvider","DEFAULT_FILTER_TYPES","PERSON","SITE","PersonFinder","container","dropdownDirection","defaultEntries","excludedEntryIds","relationMode","uacFilter","entries","filterTypes","friendsPriority","NORMAL","HIGH","leftElement","maxEntries","onAdd","onDropdownHide","onDropdownShow","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldShowOwnUser","shouldDisableRemove","shouldRenderInline","ref","personFinderRef","innerRef","clear","current","createElement","shouldChangeColor","shouldDisableListItemPadding","className","displayName"],"sources":["../../../../src/components/person-finder/PersonFinder.tsx"],"sourcesContent":["import React, { forwardRef, useImperativeHandle, useRef } from 'react';\nimport {\n DefaultEntry,\n PersonEntry,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n UACFilter,\n} from '../../types/personFinder';\nimport PersonFinderProvider from '../PersonFinderProvider';\nimport PersonFinderWrapper, {\n PersonFinderRef,\n PersonFinderWrapperProps,\n} from './person-finder-wrapper/PersonFinderWrapper';\nimport { AreaProvider } from '@chayns-components/core';\n\nconst DEFAULT_FILTER_TYPES = [PersonFinderFilterTypes.PERSON, PersonFinderFilterTypes.SITE];\n\nexport type PersonFinderProps = PersonFinderWrapperProps & {\n /**\n * Sites and persons that are selected by default.\n */\n defaultEntries?: DefaultEntry[];\n /**\n * Entry ids to exclude from the results\n */\n excludedEntryIds?: PersonFinderEntry['id'][];\n /**\n * Whether the own user should be shown in the results. By default, it is not shown.\n */\n shouldShowOwnUser?: boolean;\n /**\n * Optional filter to search member of uac group. Only works with groups of the current Site and if the user is manager.\n */\n uacFilter?: UACFilter[];\n /**\n * A list of entries that should be searched.\n */\n entries?: PersonEntry[];\n};\n\nconst PersonFinder = forwardRef<PersonFinderRef, PersonFinderProps>(\n (\n {\n container,\n dropdownDirection,\n defaultEntries,\n excludedEntryIds,\n relationMode = RelationMode.PERSON,\n uacFilter,\n entries,\n filterTypes = uacFilter || entries\n ? [PersonFinderFilterTypes.PERSON]\n : DEFAULT_FILTER_TYPES,\n friendsPriority = relationMode === RelationMode.SITE ? Priority.NORMAL : Priority.HIGH,\n leftElement,\n maxEntries,\n onAdd,\n onDropdownHide,\n onDropdownShow,\n onRemove,\n placeholder = 'Person oder Site finden',\n shouldAllowMultiple = true,\n shouldHideResultsOnAdd = !shouldAllowMultiple || false,\n shouldShowOwnUser = false,\n shouldDisableRemove = false,\n shouldRenderInline = false,\n },\n ref,\n ) => {\n const personFinderRef = useRef<HTMLDivElement>(null);\n const innerRef = useRef<PersonFinderRef>(null);\n\n useImperativeHandle(ref, () => ({\n clear: () => innerRef.current?.clear(),\n }));\n\n return (\n <PersonFinderProvider\n friendsPriority={friendsPriority}\n defaultEntries={defaultEntries}\n filterTypes={filterTypes}\n excludedEntryIds={excludedEntryIds}\n shouldShowOwnUser={shouldShowOwnUser}\n uacFilter={uacFilter}\n entries={entries}\n relationMode={relationMode}\n >\n <AreaProvider shouldChangeColor={false} shouldDisableListItemPadding>\n <div className=\"beta-chayns-person-finder\" ref={personFinderRef}>\n <PersonFinderWrapper\n ref={innerRef}\n container={container}\n dropdownDirection={dropdownDirection}\n filterTypes={filterTypes}\n maxEntries={maxEntries}\n onAdd={onAdd}\n relationMode={relationMode}\n shouldDisableRemove={shouldDisableRemove}\n onDropdownHide={onDropdownHide}\n onDropdownShow={onDropdownShow}\n leftElement={leftElement}\n onRemove={onRemove}\n placeholder={placeholder}\n shouldAllowMultiple={shouldAllowMultiple}\n shouldHideResultsOnAdd={shouldHideResultsOnAdd}\n shouldRenderInline={shouldRenderInline}\n />\n </div>\n </AreaProvider>\n </PersonFinderProvider>\n );\n },\n);\n\nPersonFinder.displayName = 'PersonFinder';\n\nexport default PersonFinder;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,mBAAmB,EAAEC,MAAM,QAAQ,OAAO;AACtE,SAIIC,uBAAuB,EACvBC,QAAQ,EACRC,YAAY,QAET,0BAA0B;AACjC,OAAOC,oBAAoB,MAAM,yBAAyB;AAC1D,OAAOC,mBAAmB,MAGnB,6CAA6C;AACpD,SAASC,YAAY,QAAQ,yBAAyB;AAEtD,MAAMC,oBAAoB,GAAG,CAACN,uBAAuB,CAACO,MAAM,EAAEP,uBAAuB,CAACQ,IAAI,CAAC;AAyB3F,MAAMC,YAAY,gBAAGZ,UAAU,CAC3B,CACI;EACIa,SAAS;EACTC,iBAAiB;EACjBC,cAAc;EACdC,gBAAgB;EAChBC,YAAY,GAAGZ,YAAY,CAACK,MAAM;EAClCQ,SAAS;EACTC,OAAO;EACPC,WAAW,GAAGF,SAAS,IAAIC,OAAO,GAC5B,CAAChB,uBAAuB,CAACO,MAAM,CAAC,GAChCD,oBAAoB;EAC1BY,eAAe,GAAGJ,YAAY,KAAKZ,YAAY,CAACM,IAAI,GAAGP,QAAQ,CAACkB,MAAM,GAAGlB,QAAQ,CAACmB,IAAI;EACtFC,WAAW;EACXC,UAAU;EACVC,KAAK;EACLC,cAAc;EACdC,cAAc;EACdC,QAAQ;EACRC,WAAW,GAAG,yBAAyB;EACvCC,mBAAmB,GAAG,IAAI;EAC1BC,sBAAsB,GAAG,CAACD,mBAAmB,IAAI,KAAK;EACtDE,iBAAiB,GAAG,KAAK;EACzBC,mBAAmB,GAAG,KAAK;EAC3BC,kBAAkB,GAAG;AACzB,CAAC,EACDC,GAAG,KACF;EACD,MAAMC,eAAe,GAAGnC,MAAM,CAAiB,IAAI,CAAC;EACpD,MAAMoC,QAAQ,GAAGpC,MAAM,CAAkB,IAAI,CAAC;EAE9CD,mBAAmB,CAACmC,GAAG,EAAE,OAAO;IAC5BG,KAAK,EAAEA,CAAA,KAAMD,QAAQ,CAACE,OAAO,EAAED,KAAK,CAAC;EACzC,CAAC,CAAC,CAAC;EAEH,oBACIxC,KAAA,CAAA0C,aAAA,CAACnC,oBAAoB;IACjBe,eAAe,EAAEA,eAAgB;IACjCN,cAAc,EAAEA,cAAe;IAC/BK,WAAW,EAAEA,WAAY;IACzBJ,gBAAgB,EAAEA,gBAAiB;IACnCiB,iBAAiB,EAAEA,iBAAkB;IACrCf,SAAS,EAAEA,SAAU;IACrBC,OAAO,EAAEA,OAAQ;IACjBF,YAAY,EAAEA;EAAa,gBAE3BlB,KAAA,CAAA0C,aAAA,CAACjC,YAAY;IAACkC,iBAAiB,EAAE,KAAM;IAACC,4BAA4B;EAAA,gBAChE5C,KAAA,CAAA0C,aAAA;IAAKG,SAAS,EAAC,2BAA2B;IAACR,GAAG,EAAEC;EAAgB,gBAC5DtC,KAAA,CAAA0C,aAAA,CAAClC,mBAAmB;IAChB6B,GAAG,EAAEE,QAAS;IACdzB,SAAS,EAAEA,SAAU;IACrBC,iBAAiB,EAAEA,iBAAkB;IACrCM,WAAW,EAAEA,WAAY;IACzBK,UAAU,EAAEA,UAAW;IACvBC,KAAK,EAAEA,KAAM;IACbT,YAAY,EAAEA,YAAa;IAC3BiB,mBAAmB,EAAEA,mBAAoB;IACzCP,cAAc,EAAEA,cAAe;IAC/BC,cAAc,EAAEA,cAAe;IAC/BJ,WAAW,EAAEA,WAAY;IACzBK,QAAQ,EAAEA,QAAS;IACnBC,WAAW,EAAEA,WAAY;IACzBC,mBAAmB,EAAEA,mBAAoB;IACzCC,sBAAsB,EAAEA,sBAAuB;IAC/CG,kBAAkB,EAAEA;EAAmB,CAC1C,CACA,CACK,CACI,CAAC;AAE/B,CACJ,CAAC;AAEDvB,YAAY,CAACiC,WAAW,GAAG,cAAc;AAEzC,eAAejC,YAAY","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@ import { DropdownBodyWrapper, Icon, TagInput } from '@chayns-components/core';
|
|
|
2
2
|
import { useDevice } from 'chayns-api';
|
|
3
3
|
import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
|
4
4
|
import { v4 as uuidV4 } from 'uuid';
|
|
5
|
-
import { PersonFinderFilterTypes, Priority } from '../../../types/personFinder';
|
|
5
|
+
import { PersonFinderFilterTypes, Priority, RelationMode } from '../../../types/personFinder';
|
|
6
6
|
import { StyledPersonFinder, StyledPersonFinderLeftElement } from './PersonFinderWrapper.styles';
|
|
7
7
|
import PersonFinderBody from './person-finder-body/PersonFinderBody';
|
|
8
8
|
import { usePersonFinder } from '../../PersonFinderProvider';
|
|
@@ -21,7 +21,8 @@ const PersonFinderWrapper = /*#__PURE__*/forwardRef(({
|
|
|
21
21
|
placeholder,
|
|
22
22
|
shouldAllowMultiple,
|
|
23
23
|
shouldHideResultsOnAdd,
|
|
24
|
-
shouldRenderInline
|
|
24
|
+
shouldRenderInline,
|
|
25
|
+
relationMode
|
|
25
26
|
}, ref) => {
|
|
26
27
|
const {
|
|
27
28
|
data,
|
|
@@ -126,11 +127,15 @@ const PersonFinderWrapper = /*#__PURE__*/forwardRef(({
|
|
|
126
127
|
}, [onDropdownHide, onDropdownShow, shouldShowBody]);
|
|
127
128
|
const showBody = useMemo(() => {
|
|
128
129
|
const extraMobileCheck = isTouch ? isFocused : true;
|
|
130
|
+
const check = shouldShowBody && extraMobileCheck;
|
|
131
|
+
if (relationMode === RelationMode.SITE) {
|
|
132
|
+
return check;
|
|
133
|
+
}
|
|
129
134
|
if (filterTypes?.length === 1 && (filterTypes.includes(PersonFinderFilterTypes.SITE) || filterTypes.includes(PersonFinderFilterTypes.PERSON) && friendsPriority !== Priority.HIGH)) {
|
|
130
|
-
return
|
|
135
|
+
return check && !!search && search?.length > 2;
|
|
131
136
|
}
|
|
132
|
-
return
|
|
133
|
-
}, [filterTypes, friendsPriority, isFocused, isTouch, search, shouldShowBody]);
|
|
137
|
+
return check;
|
|
138
|
+
}, [filterTypes, friendsPriority, isFocused, isTouch, search, shouldShowBody, relationMode]);
|
|
134
139
|
const content = useMemo(() => {
|
|
135
140
|
const body = /*#__PURE__*/React.createElement(PersonFinderBody, {
|
|
136
141
|
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","StyledPersonFinder","StyledPersonFinderLeftElement","PersonFinderBody","usePersonFinder","PersonFinderWrapper","container","dropdownDirection","filterTypes","friendsPriority","leftElement","leftElementProp","maxEntries","Infinity","onAdd","onDropdownHide","onDropdownShow","shouldDisableRemove","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldRenderInline","ref","data","updateSearch","setTags","tags","search","isFocused","setIsFocused","shouldShowBody","setShouldShowBody","boxRef","contentRef","keyRef","tagInputRef","isTouch","createElement","icons","handleTagInputBlur","handleTagInputFocus","handleRemove","id","prevState","filter","entry","handleClose","handleOpen","handleClear","current","resetValue","handleDropdownOutsideClick","blur","handleAdd","selectedEntry","Object","values","flat","map","entries","find","toString","name","firstName","lastName","tag","text","some","t","length","handleChange","event","target","value","clear","showBody","extraMobileCheck","includes","SITE","PERSON","HIGH","content","body","anchorElement","direction","onClose","onOutsideClick","shouldShowDropdown","onFocus","key","onBlur","onChange","shouldPreventEnter","displayName"],"sources":["../../../../../src/components/person-finder/person-finder-wrapper/PersonFinderWrapper.tsx"],"sourcesContent":["import {\n DropdownBodyWrapper,\n DropdownDirection,\n Icon,\n type Tag,\n TagInput,\n type TagInputRef,\n} from '@chayns-components/core';\nimport { useDevice } from 'chayns-api';\nimport React, {\n type ChangeEvent,\n forwardRef,\n type ReactElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { v4 as uuidV4 } from 'uuid';\nimport {\n PersonEntry,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n SiteEntry,\n} from '../../../types/personFinder';\nimport { StyledPersonFinder, StyledPersonFinderLeftElement } from './PersonFinderWrapper.styles';\nimport PersonFinderBody from './person-finder-body/PersonFinderBody';\nimport { usePersonFinder } from '../../PersonFinderProvider';\n\nexport type PersonFinderRef = {\n clear: () => void;\n};\n\nexport type PersonFinderWrapperProps = {\n /**\n * The element where the content of the `PersonFinder` should be rendered via React Portal.\n */\n container?: Element;\n /**\n * The direction in which the dropdown should be displayed. By default, it is displayed below the input.\n */\n dropdownDirection?: DropdownDirection;\n /**\n * The filter options of the component.\n */\n filterTypes?: PersonFinderFilterTypes[];\n /**\n * Determines the priority level for displaying friends in search results.\n */\n friendsPriority?: Priority;\n /**\n * An element that should be displayed on the left side of the input.\n */\n leftElement?: ReactElement;\n /**\n * The maximum number of entries that can be selected.\n */\n maxEntries?: number;\n /**\n * Function to be executed if a person or site is added.\n */\n onAdd?: (entry: PersonFinderEntry) => void;\n /**\n * Function to be executed if the dropdown is hidden.\n */\n onDropdownHide?: () => void;\n /**\n * Function to be executed if the dropdown is shown.\n */\n onDropdownShow?: () => void;\n /**\n * Function to be executed if a person or site is removed.\n */\n onRemove?: (id: PersonFinderEntry['id']) => void;\n /**\n * The placeholder that should be displayed.\n */\n placeholder?: string;\n /**\n * Whether multiple persons and sites should be selected.\n */\n shouldAllowMultiple?: boolean;\n /**\n * Whether the dropdown should be hidden after adding an entry. By default, it is not hidden.\n */\n shouldHideResultsOnAdd?: boolean;\n /**\n * Whether the `PersonFinder` should be rendered inline without a dropdown.\n * @description\n * If set to `true`, the `PersonFinder` will display the results below the input field, without\n * using a dropdown. This is useful for scenarios where the `PersonFinder` is part of a larger\n * form and should always be visible.\n * @default false\n * @example\n * <PersonFinder shouldRenderInline />\n * @optional\n */\n shouldRenderInline?: boolean;\n /**\n * Whether the remove action should be disabled.\n */\n shouldDisableRemove?: boolean;\n};\n\nconst PersonFinderWrapper = forwardRef<PersonFinderRef, PersonFinderWrapperProps>(\n (\n {\n container,\n dropdownDirection,\n filterTypes,\n friendsPriority,\n leftElement: leftElementProp,\n maxEntries = Infinity,\n onAdd,\n onDropdownHide,\n onDropdownShow,\n shouldDisableRemove,\n onRemove,\n placeholder,\n shouldAllowMultiple,\n shouldHideResultsOnAdd,\n shouldRenderInline,\n },\n ref,\n ) => {\n const { data, updateSearch, setTags, tags, search } = usePersonFinder();\n\n const [isFocused, setIsFocused] = useState(false);\n const [shouldShowBody, setShouldShowBody] = useState(false);\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const keyRef = useRef(`person-finder-${uuidV4()}`);\n const tagInputRef = useRef<TagInputRef>(null);\n\n const { isTouch } = useDevice();\n\n const leftElement = leftElementProp ?? (\n <StyledPersonFinderLeftElement>\n <Icon icons={['fa fa-search']} />\n </StyledPersonFinderLeftElement>\n );\n\n const handleTagInputBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const handleTagInputFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const handleRemove = useCallback(\n (id: string) => {\n if (typeof setTags !== 'function' || shouldDisableRemove) {\n return;\n }\n\n setTags((prevState) => prevState.filter((entry) => entry.id !== id));\n\n if (typeof onRemove === 'function') {\n onRemove(id);\n }\n },\n [onRemove, setTags, shouldDisableRemove],\n );\n\n const handleClose = useCallback(() => {\n setShouldShowBody(false);\n }, []);\n\n const handleOpen = useCallback(() => {\n setShouldShowBody(true);\n }, []);\n\n const handleClear = useCallback(() => {\n if (typeof setTags !== 'function' || shouldDisableRemove) {\n return;\n }\n\n tagInputRef.current?.resetValue();\n\n setTags([]);\n }, [setTags, shouldDisableRemove]);\n\n const handleDropdownOutsideClick = useCallback(() => {\n tagInputRef.current?.blur();\n\n return isFocused && isTouch;\n }, [isFocused, isTouch]);\n\n const handleAdd = useCallback(\n (id: string) => {\n if (typeof setTags !== 'function') {\n return;\n }\n\n const selectedEntry = Object.values(data ?? {})\n .flat()\n .map(({ entries }) => entries)\n .flat()\n .find(\n (entry) =>\n (typeof entry.id === 'string' ? entry.id : entry.id.toString()) === id,\n );\n\n if (!selectedEntry) {\n return;\n }\n\n const { name, firstName, lastName } = selectedEntry as PersonEntry & SiteEntry;\n\n const tag: Tag = {\n id,\n text: name ?? `${(firstName as string) ?? ''} ${(lastName as string) ?? ''}`,\n };\n\n setTags((prevState) => {\n if (prevState.some((t) => t.id === id) || prevState.length >= maxEntries) {\n return prevState;\n }\n\n tagInputRef.current?.resetValue();\n\n if (typeof onAdd === 'function') {\n onAdd(selectedEntry);\n }\n\n if (shouldHideResultsOnAdd) {\n setShouldShowBody(false);\n }\n\n return [...prevState, tag];\n });\n },\n [data, maxEntries, onAdd, setTags, shouldHideResultsOnAdd],\n );\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (typeof updateSearch === 'function') {\n updateSearch(event.target.value);\n }\n },\n [updateSearch],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => handleClear(),\n }),\n [handleClear],\n );\n\n useEffect(() => {\n if (shouldShowBody) {\n if (typeof onDropdownShow === 'function') {\n onDropdownShow();\n }\n } else if (typeof onDropdownHide === 'function') {\n onDropdownHide();\n }\n }, [onDropdownHide, onDropdownShow, shouldShowBody]);\n\n const showBody = useMemo(() => {\n const extraMobileCheck = isTouch ? isFocused : true;\n\n if (\n filterTypes?.length === 1 &&\n (filterTypes.includes(PersonFinderFilterTypes.SITE) ||\n (filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friendsPriority !== Priority.HIGH))\n ) {\n return shouldShowBody && extraMobileCheck && !!search && search?.length > 2;\n }\n\n return shouldShowBody && extraMobileCheck;\n }, [filterTypes, friendsPriority, isFocused, isTouch, search, shouldShowBody]);\n\n const content = useMemo(() => {\n const body = (\n <PersonFinderBody\n filterTypes={filterTypes}\n onAdd={handleAdd}\n onRemove={handleRemove}\n ref={contentRef}\n shouldRenderInline={shouldRenderInline}\n />\n );\n\n if (shouldRenderInline) {\n return body;\n }\n\n if (boxRef.current) {\n return (\n <DropdownBodyWrapper\n anchorElement={boxRef.current}\n container={container}\n direction={dropdownDirection}\n onClose={handleClose}\n onOutsideClick={handleDropdownOutsideClick}\n shouldShowDropdown={showBody}\n >\n {body}\n </DropdownBodyWrapper>\n );\n }\n\n return null;\n }, [\n container,\n dropdownDirection,\n filterTypes,\n handleAdd,\n handleClose,\n handleDropdownOutsideClick,\n handleRemove,\n shouldRenderInline,\n showBody,\n ]);\n\n return (\n <StyledPersonFinder ref={boxRef} onFocus={handleOpen} key={keyRef.current}>\n <TagInput\n leftElement={leftElement}\n onBlur={handleTagInputBlur}\n onChange={handleChange}\n onFocus={handleTagInputFocus}\n onRemove={handleRemove}\n placeholder={placeholder}\n ref={tagInputRef}\n shouldAllowMultiple={shouldAllowMultiple}\n shouldPreventEnter\n tags={tags}\n />\n {content}\n </StyledPersonFinder>\n );\n },\n);\n\nPersonFinderWrapper.displayName = 'PersonFinderWrapper';\n\nexport default PersonFinderWrapper;\n"],"mappings":"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","ignoreList":[]}
|
|
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,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { DefaultEntry, PersonEntry, PersonFinderEntry,
|
|
3
|
-
import {
|
|
2
|
+
import { DefaultEntry, PersonEntry, PersonFinderEntry, UACFilter } from '../../types/personFinder';
|
|
3
|
+
import { PersonFinderRef, PersonFinderWrapperProps } from './person-finder-wrapper/PersonFinderWrapper';
|
|
4
4
|
export type PersonFinderProps = PersonFinderWrapperProps & {
|
|
5
5
|
/**
|
|
6
6
|
* Sites and persons that are selected by default.
|
|
@@ -22,10 +22,6 @@ export type PersonFinderProps = PersonFinderWrapperProps & {
|
|
|
22
22
|
* A list of entries that should be searched.
|
|
23
23
|
*/
|
|
24
24
|
entries?: PersonEntry[];
|
|
25
|
-
/**
|
|
26
|
-
* Determines whether persons are searched and sorted from the user's perspective or from a site's perspective.
|
|
27
|
-
*/
|
|
28
|
-
relationMode?: RelationMode;
|
|
29
25
|
};
|
|
30
26
|
declare const PersonFinder: React.ForwardRefExoticComponent<PersonFinderWrapperProps & {
|
|
31
27
|
/**
|
|
@@ -48,9 +44,5 @@ declare const PersonFinder: React.ForwardRefExoticComponent<PersonFinderWrapperP
|
|
|
48
44
|
* A list of entries that should be searched.
|
|
49
45
|
*/
|
|
50
46
|
entries?: PersonEntry[];
|
|
51
|
-
/**
|
|
52
|
-
* Determines whether persons are searched and sorted from the user's perspective or from a site's perspective.
|
|
53
|
-
*/
|
|
54
|
-
relationMode?: RelationMode;
|
|
55
47
|
} & React.RefAttributes<PersonFinderRef>>;
|
|
56
48
|
export default PersonFinder;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DropdownDirection } from '@chayns-components/core';
|
|
2
2
|
import React, { type ReactElement } from 'react';
|
|
3
|
-
import { PersonFinderEntry, PersonFinderFilterTypes, Priority } from '../../../types/personFinder';
|
|
3
|
+
import { PersonFinderEntry, PersonFinderFilterTypes, Priority, RelationMode } from '../../../types/personFinder';
|
|
4
4
|
export type PersonFinderRef = {
|
|
5
5
|
clear: () => void;
|
|
6
6
|
};
|
|
@@ -73,6 +73,10 @@ export type PersonFinderWrapperProps = {
|
|
|
73
73
|
* Whether the remove action should be disabled.
|
|
74
74
|
*/
|
|
75
75
|
shouldDisableRemove?: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Determines whether persons are searched and sorted from the user's perspective or from a site's perspective.
|
|
78
|
+
*/
|
|
79
|
+
relationMode?: RelationMode;
|
|
76
80
|
};
|
|
77
81
|
declare const PersonFinderWrapper: React.ForwardRefExoticComponent<PersonFinderWrapperProps & React.RefAttributes<PersonFinderRef>>;
|
|
78
82
|
export default PersonFinderWrapper;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chayns-components/person-finder",
|
|
3
|
-
"version": "5.3.
|
|
3
|
+
"version": "5.3.4",
|
|
4
4
|
"description": "A set of beautiful React components for developing your own applications with chayns.",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"browserslist": [
|
|
@@ -88,5 +88,5 @@
|
|
|
88
88
|
"publishConfig": {
|
|
89
89
|
"access": "public"
|
|
90
90
|
},
|
|
91
|
-
"gitHead": "
|
|
91
|
+
"gitHead": "d9663c8f03db66d0677c37eb650851614edf376b"
|
|
92
92
|
}
|