@chayns-components/person-finder 5.3.8 → 5.3.10
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/lib/cjs/components/PersonFinderProvider.js +47 -9
- package/lib/cjs/components/PersonFinderProvider.js.map +1 -1
- package/lib/cjs/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.js +1 -0
- package/lib/cjs/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.js.map +1 -1
- package/lib/cjs/hooks/personFinder.js +6 -1
- package/lib/cjs/hooks/personFinder.js.map +1 -1
- package/lib/cjs/utils/uac.js +23 -3
- package/lib/cjs/utils/uac.js.map +1 -1
- package/lib/esm/components/PersonFinderProvider.js +47 -9
- package/lib/esm/components/PersonFinderProvider.js.map +1 -1
- package/lib/esm/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.js +1 -0
- package/lib/esm/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.js.map +1 -1
- package/lib/esm/hooks/personFinder.js +7 -2
- package/lib/esm/hooks/personFinder.js.map +1 -1
- package/lib/esm/utils/uac.js +23 -3
- package/lib/esm/utils/uac.js.map +1 -1
- package/lib/types/components/PersonFinderProvider.d.ts +2 -1
- package/lib/types/hooks/personFinder.d.ts +3 -2
- package/lib/types/utils/uac.d.ts +10 -1
- package/package.json +3 -3
|
@@ -17,6 +17,7 @@ var _textStrings = require("../constants/textStrings");
|
|
|
17
17
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
18
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
19
19
|
const THROTTLE_INTERVAL = 500;
|
|
20
|
+
const PAGE_SIZE = 20;
|
|
20
21
|
const PersonFinderContext = exports.PersonFinderContext = /*#__PURE__*/(0, _react.createContext)({
|
|
21
22
|
data: undefined,
|
|
22
23
|
updateData: undefined,
|
|
@@ -31,7 +32,8 @@ const PersonFinderContext = exports.PersonFinderContext = /*#__PURE__*/(0, _reac
|
|
|
31
32
|
loadingState: undefined,
|
|
32
33
|
updateLoadingState: undefined,
|
|
33
34
|
tags: undefined,
|
|
34
|
-
setTags: undefined
|
|
35
|
+
setTags: undefined,
|
|
36
|
+
relationMode: undefined
|
|
35
37
|
});
|
|
36
38
|
PersonFinderContext.displayName = 'PersonFinderContext';
|
|
37
39
|
const usePersonFinder = () => (0, _react.useContext)(PersonFinderContext);
|
|
@@ -47,6 +49,7 @@ const PersonFinderProvider = ({
|
|
|
47
49
|
entries,
|
|
48
50
|
relationMode
|
|
49
51
|
}) => {
|
|
52
|
+
const getPagedUsersByGroups = (0, _react.useCallback)(_uac.getUsersByGroups, []);
|
|
50
53
|
const [data, setData] = (0, _react.useState)();
|
|
51
54
|
const [friends, setFriends] = (0, _react.useState)();
|
|
52
55
|
const [uacUsers, setUacUsers] = (0, _react.useState)();
|
|
@@ -102,6 +105,30 @@ const PersonFinderProvider = ({
|
|
|
102
105
|
updateLoadingState(key, _personFinder.LoadingState.Error);
|
|
103
106
|
return;
|
|
104
107
|
}
|
|
108
|
+
if (relationMode === _personFinder.RelationMode.SITE && key === _personFinder.PersonFinderFilterTypes.PERSON && search === '') {
|
|
109
|
+
void getPagedUsersByGroups([{
|
|
110
|
+
groupId: -1
|
|
111
|
+
}], {
|
|
112
|
+
skip: current.skip,
|
|
113
|
+
take: PAGE_SIZE
|
|
114
|
+
}).then(result => {
|
|
115
|
+
const {
|
|
116
|
+
users,
|
|
117
|
+
count
|
|
118
|
+
} = result;
|
|
119
|
+
if (users.length > 0) {
|
|
120
|
+
appendData(key, {
|
|
121
|
+
entries: users,
|
|
122
|
+
searchString: '',
|
|
123
|
+
skip: current.skip + users.length,
|
|
124
|
+
count
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}).finally(() => {
|
|
128
|
+
updateLoadingState(key, _personFinder.LoadingState.Success);
|
|
129
|
+
});
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
105
132
|
void (0, _personFinder2.loadData)({
|
|
106
133
|
searchString: search ?? '',
|
|
107
134
|
filter: [key],
|
|
@@ -117,7 +144,7 @@ const PersonFinderProvider = ({
|
|
|
117
144
|
}).finally(() => {
|
|
118
145
|
updateLoadingState(key, _personFinder.LoadingState.Success);
|
|
119
146
|
});
|
|
120
|
-
}, [
|
|
147
|
+
}, [appendData, data, getPagedUsersByGroups, relationMode, search, updateLoadingState]);
|
|
121
148
|
const addFriend = (0, _react.useCallback)(personId => {
|
|
122
149
|
void (0, _post.postFriends)(personId).then(result => {
|
|
123
150
|
if (result) {
|
|
@@ -289,21 +316,31 @@ const PersonFinderProvider = ({
|
|
|
289
316
|
return;
|
|
290
317
|
}
|
|
291
318
|
if (relationMode === _personFinder.RelationMode.SITE && filterTypes.includes(_personFinder.PersonFinderFilterTypes.PERSON)) {
|
|
292
|
-
void (
|
|
319
|
+
void getPagedUsersByGroups([{
|
|
293
320
|
groupId: -1
|
|
294
|
-
}]
|
|
321
|
+
}], {
|
|
322
|
+
skip: 0,
|
|
323
|
+
take: PAGE_SIZE
|
|
324
|
+
}).then(result => {
|
|
325
|
+
const {
|
|
326
|
+
users,
|
|
327
|
+
count
|
|
328
|
+
} = result;
|
|
295
329
|
setData({
|
|
296
330
|
person: {
|
|
297
331
|
entries: users,
|
|
298
332
|
searchString: '',
|
|
299
333
|
skip: users.length,
|
|
300
|
-
count
|
|
334
|
+
count
|
|
301
335
|
}
|
|
302
336
|
});
|
|
303
337
|
});
|
|
304
338
|
}
|
|
305
339
|
if (uacFilter) {
|
|
306
|
-
void (
|
|
340
|
+
void getPagedUsersByGroups(uacFilter).then(result => {
|
|
341
|
+
const {
|
|
342
|
+
users
|
|
343
|
+
} = result;
|
|
307
344
|
setUacUsers(users);
|
|
308
345
|
});
|
|
309
346
|
return;
|
|
@@ -330,7 +367,7 @@ const PersonFinderProvider = ({
|
|
|
330
367
|
}
|
|
331
368
|
});
|
|
332
369
|
}
|
|
333
|
-
}, [entries, filterTypes, friends, friendsPriority, relationMode, search, uacFilter]);
|
|
370
|
+
}, [entries, filterTypes, friends, friendsPriority, getPagedUsersByGroups, relationMode, search, uacFilter]);
|
|
334
371
|
const providerValue = (0, _react.useMemo)(() => ({
|
|
335
372
|
data: (0, _personFinder2.filterDataByKeys)(data, activeFilter, {
|
|
336
373
|
excludedEntryIds,
|
|
@@ -348,8 +385,9 @@ const PersonFinderProvider = ({
|
|
|
348
385
|
loadingState,
|
|
349
386
|
updateLoadingState,
|
|
350
387
|
setTags,
|
|
351
|
-
tags
|
|
352
|
-
|
|
388
|
+
tags,
|
|
389
|
+
relationMode
|
|
390
|
+
}), [activeFilter, addFriend, data, excludedEntryIds, friends, loadMore, loadingState, removeFriend, search, shouldShowOwnUser, tags, uacFilter, updateActiveFilter, updateData, updateLoadingState, updateSearch, relationMode]);
|
|
353
391
|
return /*#__PURE__*/_react.default.createElement(PersonFinderContext.Provider, {
|
|
354
392
|
value: providerValue
|
|
355
393
|
}, /*#__PURE__*/_react.default.createElement(_textstring.TextstringProvider, {
|
|
@@ -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","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":[]}
|
|
1
|
+
{"version":3,"file":"PersonFinderProvider.js","names":["_react","_interopRequireWildcard","require","_lodash","_interopRequireDefault","_personFinder","_get","_post","_delete","_personFinder2","_uac","_textstring","_textStrings","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","THROTTLE_INTERVAL","PAGE_SIZE","PersonFinderContext","exports","createContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","relationMode","displayName","usePersonFinder","useContext","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","getPagedUsersByGroups","useCallback","getUsersByGroups","setData","useState","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PersonFinderFilterTypes","PERSON","LoadingState","None","SITE","dataRef","useRef","filter","key","newData","prevState","appendData","_prevState$key","_prevState$key2","oldEntries","state","prev","value","Pending","current","Error","RelationMode","groupId","skip","take","then","result","users","count","length","searchString","finally","Success","loadData","skipMap","personId","postFriends","firstName","lastName","verificationState","isVerified","commonSites","type","deleteFriends","wasSuccessful","useEffect","includes","getFriends","latestArgsRef","latestHandledRequestRef","throttledRequest","throttle","args","requestTimestamp","Date","now","forEach","keyString","Priority","HIGH","friendIds","Set","serverFriendEntries","entry","serverFriendIds","missingFriends","_f$firstName","_f$lastName","toLowerCase","otherEntries","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","searchLocal","searchedUsers","entriesToSearch","_entry$firstName","_entry$lastName","Boolean","join","trim","push","active","UAC","cancel","person","getUACGroups","uac","providerValue","useMemo","filterDataByKeys","createElement","Provider","TextstringProvider","libraryName","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","_default"],"sources":["../../../src/components/PersonFinderProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n Dispatch,\n FC,\n ReactNode,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport throttle from 'lodash.throttle';\nimport {\n DefaultEntry,\n LoadingState,\n LoadingStateMap,\n PersonEntry,\n PersonFinderData,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n ThrottledFunction,\n UACEntry,\n UACFilter,\n} from '../types/personFinder';\nimport { getFriends } from '../api/friends/get';\nimport { postFriends } from '../api/friends/post';\nimport { deleteFriends } from '../api/friends/delete';\nimport { filterDataByKeys, loadData } from '../utils/personFinder';\nimport { Tag } from '@chayns-components/core/lib/types/types/tagInput';\nimport { getUACGroups, getUsersByGroups } from '../utils/uac';\nimport { TextstringProvider } from '@chayns-components/textstring';\nimport { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\nconst THROTTLE_INTERVAL = 500;\nconst PAGE_SIZE = 20;\n\ntype GetUsersByGroupsResult = {\n users: PersonEntry[];\n count: number;\n};\n\nexport interface IPersonFinderContext {\n // Data\n data?: { [key: string]: PersonFinderData };\n updateData?: (key: PersonFinderFilterTypes, personFinderData: PersonFinderData) => void;\n\n // Tags\n tags?: Tag[];\n setTags?: Dispatch<SetStateAction<Tag[]>>;\n\n // Friends\n friends?: PersonEntry[];\n addFriend?: (personId: string) => void;\n removeFriend?: (personId: string) => void;\n\n // Filter\n activeFilter?: PersonFinderFilterTypes[];\n updateActiveFilter?: (filter: PersonFinderFilterTypes[]) => void;\n\n // Search\n search?: string;\n updateSearch?: (value: string) => void;\n\n // Loading\n loadMore?: (key: PersonFinderFilterTypes) => void;\n loadingState?: LoadingStateMap;\n updateLoadingState?: (key: PersonFinderFilterTypes, state: LoadingState) => void;\n\n relationMode?: RelationMode;\n}\n\nexport const PersonFinderContext = createContext<IPersonFinderContext>({\n data: undefined,\n updateData: undefined,\n friends: undefined,\n addFriend: undefined,\n removeFriend: undefined,\n activeFilter: undefined,\n updateActiveFilter: undefined,\n search: undefined,\n updateSearch: undefined,\n loadMore: undefined,\n loadingState: undefined,\n updateLoadingState: undefined,\n tags: undefined,\n setTags: undefined,\n relationMode: undefined,\n});\n\nPersonFinderContext.displayName = 'PersonFinderContext';\n\nexport const usePersonFinder = () => useContext(PersonFinderContext);\n\ntype PersonFinderProviderProps = {\n children: ReactNode;\n friendsPriority: Priority;\n filterTypes: PersonFinderFilterTypes[];\n defaultEntries?: DefaultEntry[];\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n uacFilter?: UACFilter[];\n entries?: PersonEntry[];\n relationMode?: RelationMode;\n};\n\nconst PersonFinderProvider: FC<PersonFinderProviderProps> = ({\n children,\n friendsPriority,\n filterTypes,\n defaultEntries,\n excludedEntryIds,\n shouldShowOwnUser = false,\n uacFilter,\n entries,\n relationMode,\n}) => {\n const getPagedUsersByGroups = useCallback(\n getUsersByGroups as unknown as (\n uacFilter: UACFilter[],\n options?: { skip?: number; take?: number },\n ) => Promise<GetUsersByGroupsResult>,\n [],\n );\n\n const [data, setData] = useState<IPersonFinderContext['data']>();\n const [friends, setFriends] = useState<PersonEntry[]>();\n const [uacUsers, setUacUsers] = useState<PersonEntry[]>();\n const [activeFilter, setActiveFilter] = useState<IPersonFinderContext['activeFilter']>();\n const [search, setSearch] = useState('');\n const [tags, setTags] = useState<Tag[]>(\n defaultEntries?.map(({ id, name }) => ({ id, text: name })) ?? [],\n );\n const [loadingState, setLoadingState] = useState<LoadingStateMap>({\n [PersonFinderFilterTypes.PERSON]: LoadingState.None,\n [PersonFinderFilterTypes.SITE]: LoadingState.None,\n });\n\n const dataRef = useRef<IPersonFinderContext['data']>();\n\n const updateActiveFilter = useCallback((filter: IPersonFinderContext['activeFilter']) => {\n setActiveFilter(filter);\n }, []);\n\n const updateData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => ({ ...prevState, [key]: newData }));\n }, []);\n\n const appendData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => {\n const oldEntries = prevState && prevState[key]?.entries ? prevState[key]?.entries : [];\n\n return {\n ...prevState,\n [key]: {\n ...newData,\n entries: [...oldEntries, ...newData.entries],\n },\n };\n });\n }, []);\n\n const updateLoadingState = useCallback((key: PersonFinderFilterTypes, state: LoadingState) => {\n setLoadingState((prev) => ({\n ...prev,\n [key]: state,\n }));\n }, []);\n\n const updateSearch = useCallback((value: string) => {\n setSearch(value);\n }, []);\n\n const loadMore = useCallback(\n (key: PersonFinderFilterTypes) => {\n updateLoadingState(key, LoadingState.Pending);\n\n const current = data?.[key];\n\n if (!current) {\n updateLoadingState(key, LoadingState.Error);\n\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n key === PersonFinderFilterTypes.PERSON &&\n search === ''\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], {\n skip: current.skip,\n take: PAGE_SIZE,\n })\n .then((result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n if (users.length > 0) {\n appendData(key, {\n entries: users,\n searchString: '',\n skip: current.skip + users.length,\n count,\n });\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n\n return;\n }\n\n void loadData({\n searchString: search ?? '',\n filter: [key],\n skipMap: { [key]: current.skip },\n relationMode,\n })\n .then((result) => {\n const newData = result?.[key];\n\n if (newData) {\n appendData(key, newData);\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n },\n [appendData, data, getPagedUsersByGroups, relationMode, search, updateLoadingState],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n relationMode,\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n ).current;\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter ?? filterTypes;\n\n if (uacFilter || entries) {\n searchLocal();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchData({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n latestArgsRef.current = { search, filter: active };\n\n throttledRequest();\n }\n }, [\n filterTypes,\n search,\n activeFilter,\n friends,\n friendsPriority,\n updateData,\n updateLoadingState,\n throttledRequest,\n searchData,\n uacFilter,\n searchLocal,\n entries,\n ]);\n\n useEffect(\n () => () => {\n throttledRequest.cancel();\n },\n [throttledRequest],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON)\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], { skip: 0, take: PAGE_SIZE }).then(\n (result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n setData({\n person: {\n entries: users,\n searchString: '',\n skip: users.length,\n count,\n },\n });\n },\n );\n }\n\n if (uacFilter) {\n void getPagedUsersByGroups(uacFilter).then((result: GetUsersByGroupsResult) => {\n const { users } = result;\n\n setUacUsers(users);\n });\n\n return;\n }\n\n if (filterTypes.includes(PersonFinderFilterTypes.UAC) && search === '') {\n void getUACGroups().then((result) => {\n setData({\n uac: {\n entries: result,\n searchString: '',\n skip: result.length,\n count: result.length,\n },\n });\n });\n }\n\n if (\n friendsPriority === Priority.HIGH &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friends &&\n search === ''\n ) {\n setData({\n person: {\n entries: friends,\n searchString: '',\n skip: friends.length,\n count: friends.length,\n },\n });\n }\n }, [\n entries,\n filterTypes,\n friends,\n friendsPriority,\n getPagedUsersByGroups,\n relationMode,\n search,\n uacFilter,\n ]);\n\n const providerValue = useMemo<IPersonFinderContext>(\n () => ({\n data: filterDataByKeys(data, activeFilter, {\n excludedEntryIds,\n shouldShowOwnUser: uacFilter ? false : shouldShowOwnUser,\n }),\n updateData,\n activeFilter,\n updateActiveFilter,\n friends,\n addFriend,\n removeFriend,\n search,\n updateSearch,\n loadMore,\n loadingState,\n updateLoadingState,\n setTags,\n tags,\n relationMode,\n }),\n [\n activeFilter,\n addFriend,\n data,\n excludedEntryIds,\n friends,\n loadMore,\n loadingState,\n removeFriend,\n search,\n shouldShowOwnUser,\n tags,\n uacFilter,\n updateActiveFilter,\n updateData,\n updateLoadingState,\n updateSearch,\n relationMode,\n ],\n );\n\n return (\n <PersonFinderContext.Provider value={providerValue}>\n <TextstringProvider libraryName={PERSON_FINDER_TEXTSTRING_LIBRARY_NAME}>\n {children}\n </TextstringProvider>\n </PersonFinderContext.Provider>\n );\n};\n\nPersonFinderProvider.displayName = 'PersonFinderProvider';\n\nexport default PersonFinderProvider;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersonFinderGroup.js","names":["_react","_interopRequireWildcard","require","_core","_personFinder","_personFinder2","_PersonFinderGroup","_PersonFinderProvider","_PersonFinderItem","_interopRequireDefault","_personFinder3","_PersonFinderSmallItem","_textStrings","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","PersonFinderGroup","entries","filterKey","count","shouldShowGroupName","onAdd","onRemove","loadMore","loadingState","loadingStateFromState","search","usePersonFinder","areOnlyFriendsGiven","useOnlyFriends","PersonFinderFilterTypes","UAC","groupName","getGroupName","LoadingState","None","shouldShowLoadMoreButton","length","waitCursor","Pending","createElement","StyledPersonFinderGroupWaitCursor","SmallWaitCursor","shouldHideBackground","errorMessage","useErrorMessage","handleLoadMore","useCallback","handlePreventDefault","event","preventDefault","stopPropagation","ts","textStrings","components","personFinder","wrapper","body","group","StyledPersonFinderGroup","onClick","StyledPersonFinderGroupName","className","List","map","entry","id","key","StyledPersonFinderGroupButtonWrapper","Button","shouldShowWaitCursor","getPersonFinderTextstringValue","textstring","displayName","_default","exports"],"sources":["../../../../../../../src/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.tsx"],"sourcesContent":["import React, { FC, MouseEvent, useCallback } from 'react';\nimport { Button, List, SmallWaitCursor } from '@chayns-components/core';\nimport {\n LoadingState,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n} from '../../../../../types/personFinder';\nimport { getGroupName, getPersonFinderTextstringValue } from '../../../../../utils/personFinder';\nimport {\n StyledPersonFinderGroup,\n StyledPersonFinderGroupButtonWrapper,\n StyledPersonFinderGroupName,\n StyledPersonFinderGroupWaitCursor,\n} from './PersonFinderGroup.styles';\nimport { usePersonFinder } from '../../../../PersonFinderProvider';\nimport PersonFinderItem from './person-finder-item/PersonFinderItem';\nimport { useErrorMessage, useOnlyFriends } from '../../../../../hooks/personFinder';\nimport PersonFinderSmallItem from './person-finder-small-item/PersonFinderSmallItem';\nimport textStrings from '../../../../../constants/textStrings';\n\nexport type PersonFinderGroupProps = {\n filterKey: PersonFinderFilterTypes;\n entries: PersonFinderEntry[];\n count: number;\n shouldShowGroupName: boolean;\n onAdd: (id: string) => void;\n onRemove: (id: string) => void;\n};\n\nconst PersonFinderGroup: FC<PersonFinderGroupProps> = ({\n entries,\n filterKey,\n count,\n shouldShowGroupName,\n onAdd,\n onRemove,\n}) => {\n const { loadMore, loadingState: loadingStateFromState, search } = usePersonFinder();\n const areOnlyFriendsGiven =\n useOnlyFriends(entries) || filterKey === PersonFinderFilterTypes.UAC;\n\n const groupName = getGroupName(filterKey);\n\n const loadingState = loadingStateFromState\n ? (loadingStateFromState[filterKey] ?? LoadingState.None)\n : LoadingState.None;\n\n const shouldShowLoadMoreButton = entries.length < count;\n\n const waitCursor =\n (entries.length === 0 || areOnlyFriendsGiven) && loadingState === LoadingState.Pending ? (\n <StyledPersonFinderGroupWaitCursor>\n <SmallWaitCursor shouldHideBackground />\n </StyledPersonFinderGroupWaitCursor>\n ) : null;\n\n const errorMessage = useErrorMessage({\n areOnlyFriendsGiven,\n entries,\n loadingState,\n search: search ?? '',\n groupName,\n });\n\n const handleLoadMore = useCallback(() => {\n if (typeof loadMore === 'function') {\n loadMore(filterKey);\n }\n }, [filterKey, loadMore]);\n\n const handlePreventDefault = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const ts = textStrings.components.personFinder.wrapper.body.group;\n\n return (\n <StyledPersonFinderGroup onClick={handlePreventDefault}>\n {shouldShowGroupName && (\n <StyledPersonFinderGroupName className=\"person-finder-group-name\">\n {groupName}\n </StyledPersonFinderGroupName>\n )}\n {entries.length > 0 && (\n <List>\n {entries.map((entry) =>\n typeof entry.id === 'number' ? (\n <PersonFinderSmallItem\n key={`person-finder-entry--${entry.id}`}\n entry={entry}\n onAdd={onAdd}\n onRemove={onRemove}\n />\n ) : (\n <PersonFinderItem\n key={`person-finder-entry--${entry.id}`}\n entry={entry}\n onAdd={onAdd}\n onRemove={onRemove}\n />\n ),\n )}\n </List>\n )}\n {waitCursor}\n {errorMessage}\n {shouldShowLoadMoreButton && (\n <StyledPersonFinderGroupButtonWrapper key={`more-button-wrapper--${filterKey}`}>\n <Button\n key={`more-button--${filterKey}`}\n shouldShowWaitCursor={loadingState === LoadingState.Pending}\n onClick={handleLoadMore}\n >\n {getPersonFinderTextstringValue({ textstring: ts.loadMore })} {groupName}\n </Button>\n </StyledPersonFinderGroupButtonWrapper>\n )}\n </StyledPersonFinderGroup>\n );\n};\n\nPersonFinderGroup.displayName = 'PersonFinderGroup';\n\nexport default PersonFinderGroup;\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PersonFinderGroup.js","names":["_react","_interopRequireWildcard","require","_core","_personFinder","_personFinder2","_PersonFinderGroup","_PersonFinderProvider","_PersonFinderItem","_interopRequireDefault","_personFinder3","_PersonFinderSmallItem","_textStrings","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","PersonFinderGroup","entries","filterKey","count","shouldShowGroupName","onAdd","onRemove","loadMore","loadingState","loadingStateFromState","search","usePersonFinder","areOnlyFriendsGiven","useOnlyFriends","PersonFinderFilterTypes","UAC","groupName","getGroupName","LoadingState","None","shouldShowLoadMoreButton","length","waitCursor","Pending","createElement","StyledPersonFinderGroupWaitCursor","SmallWaitCursor","shouldHideBackground","errorMessage","useErrorMessage","handleLoadMore","useCallback","handlePreventDefault","event","preventDefault","stopPropagation","ts","textStrings","components","personFinder","wrapper","body","group","StyledPersonFinderGroup","onClick","StyledPersonFinderGroupName","className","List","map","entry","id","key","StyledPersonFinderGroupButtonWrapper","Button","shouldShowWaitCursor","getPersonFinderTextstringValue","textstring","displayName","_default","exports"],"sources":["../../../../../../../src/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.tsx"],"sourcesContent":["import React, { FC, MouseEvent, useCallback } from 'react';\nimport { Button, List, SmallWaitCursor } from '@chayns-components/core';\nimport {\n LoadingState,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n} from '../../../../../types/personFinder';\nimport { getGroupName, getPersonFinderTextstringValue } from '../../../../../utils/personFinder';\nimport {\n StyledPersonFinderGroup,\n StyledPersonFinderGroupButtonWrapper,\n StyledPersonFinderGroupName,\n StyledPersonFinderGroupWaitCursor,\n} from './PersonFinderGroup.styles';\nimport { usePersonFinder } from '../../../../PersonFinderProvider';\nimport PersonFinderItem from './person-finder-item/PersonFinderItem';\nimport { useErrorMessage, useOnlyFriends } from '../../../../../hooks/personFinder';\nimport PersonFinderSmallItem from './person-finder-small-item/PersonFinderSmallItem';\nimport textStrings from '../../../../../constants/textStrings';\n\nexport type PersonFinderGroupProps = {\n filterKey: PersonFinderFilterTypes;\n entries: PersonFinderEntry[];\n count: number;\n shouldShowGroupName: boolean;\n onAdd: (id: string) => void;\n onRemove: (id: string) => void;\n};\n\nconst PersonFinderGroup: FC<PersonFinderGroupProps> = ({\n entries,\n filterKey,\n count,\n shouldShowGroupName,\n onAdd,\n onRemove,\n}) => {\n const { loadMore, loadingState: loadingStateFromState, search } = usePersonFinder();\n const areOnlyFriendsGiven =\n useOnlyFriends(entries) || filterKey === PersonFinderFilterTypes.UAC;\n\n const groupName = getGroupName(filterKey);\n\n const loadingState = loadingStateFromState\n ? (loadingStateFromState[filterKey] ?? LoadingState.None)\n : LoadingState.None;\n\n const shouldShowLoadMoreButton = entries.length < count;\n\n const waitCursor =\n (entries.length === 0 || areOnlyFriendsGiven) && loadingState === LoadingState.Pending ? (\n <StyledPersonFinderGroupWaitCursor>\n <SmallWaitCursor shouldHideBackground />\n </StyledPersonFinderGroupWaitCursor>\n ) : null;\n\n const errorMessage = useErrorMessage({\n areOnlyFriendsGiven,\n entries,\n filterKey,\n loadingState,\n search: search ?? '',\n groupName,\n });\n\n const handleLoadMore = useCallback(() => {\n if (typeof loadMore === 'function') {\n loadMore(filterKey);\n }\n }, [filterKey, loadMore]);\n\n const handlePreventDefault = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const ts = textStrings.components.personFinder.wrapper.body.group;\n\n return (\n <StyledPersonFinderGroup onClick={handlePreventDefault}>\n {shouldShowGroupName && (\n <StyledPersonFinderGroupName className=\"person-finder-group-name\">\n {groupName}\n </StyledPersonFinderGroupName>\n )}\n {entries.length > 0 && (\n <List>\n {entries.map((entry) =>\n typeof entry.id === 'number' ? (\n <PersonFinderSmallItem\n key={`person-finder-entry--${entry.id}`}\n entry={entry}\n onAdd={onAdd}\n onRemove={onRemove}\n />\n ) : (\n <PersonFinderItem\n key={`person-finder-entry--${entry.id}`}\n entry={entry}\n onAdd={onAdd}\n onRemove={onRemove}\n />\n ),\n )}\n </List>\n )}\n {waitCursor}\n {errorMessage}\n {shouldShowLoadMoreButton && (\n <StyledPersonFinderGroupButtonWrapper key={`more-button-wrapper--${filterKey}`}>\n <Button\n key={`more-button--${filterKey}`}\n shouldShowWaitCursor={loadingState === LoadingState.Pending}\n onClick={handleLoadMore}\n >\n {getPersonFinderTextstringValue({ textstring: ts.loadMore })} {groupName}\n </Button>\n </StyledPersonFinderGroupButtonWrapper>\n )}\n </StyledPersonFinderGroup>\n );\n};\n\nPersonFinderGroup.displayName = 'PersonFinderGroup';\n\nexport default PersonFinderGroup;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -128,11 +128,16 @@ const useErrorMessage = ({
|
|
|
128
128
|
loadingState,
|
|
129
129
|
search,
|
|
130
130
|
entries,
|
|
131
|
+
filterKey,
|
|
131
132
|
groupName,
|
|
132
133
|
areOnlyFriendsGiven
|
|
133
134
|
}) => {
|
|
134
135
|
const ts = _textStrings.default.components.personFinder.wrapper.body.group.errorMessage;
|
|
135
|
-
|
|
136
|
+
const {
|
|
137
|
+
relationMode
|
|
138
|
+
} = (0, _PersonFinderProvider.usePersonFinder)();
|
|
139
|
+
const shouldHideMinSearchLengthMessage = relationMode === _personFinder.RelationMode.SITE && filterKey === _personFinder.PersonFinderFilterTypes.PERSON && entries.length > 0;
|
|
140
|
+
if (search.length <= 2 && !areOnlyFriendsGiven && !shouldHideMinSearchLengthMessage) {
|
|
136
141
|
return /*#__PURE__*/_react.default.createElement(_PersonFinderGroup.StyledPersonFinderGroupErrorMessage, null, (0, _personFinder2.getPersonFinderTextstringValue)({
|
|
137
142
|
textstring: ts.minSearchLength
|
|
138
143
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personFinder.js","names":["_react","_interopRequireWildcard","require","_personFinder","_personFinder2","_core","_PersonFinderProvider","_PersonFinderGroup","_textStrings","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useClosestElementAbove","containerRef","itemClass","closestElement","setClosestElement","useState","useEffect","updateClosestElement","current","container","items","Array","from","getElementsByClassName","containerRect","getBoundingClientRect","closest","minDistance","Infinity","forEach","item","rect","distance","Math","abs","bottom","top","addEventListener","removeEventListener","textContent","exports","usePersonFinderItem","entry","isSite","isSiteEntry","ts","textStrings","components","personFinder","url","commonSites","name","firstName","lastName","id","isVerified","lastOnlineTime","imageUrl","titleElement","createElement","VerificationBadge","title","subtitle","getPersonFinderTextstringValue","textstring","wrapper","chaynsId","replacements","formatLastOnline","Date","count","usePersonFinderSmallItem","useFriends","personId","friends","removeFriend","addFriend","usePersonFinder","isFriend","map","includes","useOnlyFriends","entries","useMemo","length","friendIds","Set","friend","every","useErrorMessage","loadingState","search","groupName","areOnlyFriendsGiven","body","group","errorMessage","StyledPersonFinderGroupErrorMessage","minSearchLength","LoadingState","Error","noResults","emptySearch"],"sources":["../../../src/hooks/personFinder.tsx"],"sourcesContent":["import React, { RefObject, useEffect, useMemo, useState } from 'react';\nimport {\n LoadingState,\n PersonEntry,\n PersonFinderEntry,\n SiteEntry,\n UACEntry,\n} from '../types/personFinder';\nimport {\n formatLastOnline,\n getPersonFinderTextstringValue,\n isSiteEntry,\n} from '../utils/personFinder';\nimport { VerificationBadge } from '@chayns-components/core';\nimport { usePersonFinder } from '../components/PersonFinderProvider';\nimport { StyledPersonFinderGroupErrorMessage } from '../components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.styles';\nimport textStrings from '../constants/textStrings';\n\nexport const useClosestElementAbove = (containerRef: RefObject<HTMLElement>, itemClass: string) => {\n const [closestElement, setClosestElement] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n const updateClosestElement = () => {\n if (!containerRef.current) return;\n\n const container = containerRef.current;\n const items = Array.from(container.getElementsByClassName(itemClass)) as HTMLElement[];\n const containerRect = container.getBoundingClientRect();\n\n let closest: HTMLElement | null = null;\n let minDistance = Infinity;\n\n items.forEach((item) => {\n const rect = item.getBoundingClientRect();\n const distance = Math.abs(rect.bottom - containerRect.top);\n\n if (rect.bottom < containerRect.top && distance < minDistance) {\n minDistance = distance;\n closest = item;\n }\n });\n\n setClosestElement(closest);\n };\n\n const container = containerRef.current;\n if (container) {\n container.addEventListener('scroll', updateClosestElement);\n updateClosestElement();\n }\n\n return () => {\n container?.removeEventListener('scroll', updateClosestElement);\n };\n }, [containerRef, itemClass]);\n\n return closestElement?.textContent;\n};\n\nexport const usePersonFinderItem = (entry: PersonFinderEntry) => {\n const isSite = isSiteEntry(entry as PersonEntry | SiteEntry);\n const ts = textStrings.components.personFinder;\n\n const { url, commonSites, name, firstName, lastName, id, isVerified, lastOnlineTime } =\n entry as PersonEntry & SiteEntry;\n\n const imageUrl = `https://sub60.tobit.com/${isSite ? 'l' : 'u'}/${id as string}?size=120`;\n const titleElement = isVerified && <VerificationBadge />;\n const title = isSite ? name : `${(firstName as string) ?? ''} ${(lastName as string) ?? ''}`;\n\n let subtitle = getPersonFinderTextstringValue({\n textstring: ts.wrapper.item.chaynsId,\n replacements: { id: id as string },\n });\n\n if (lastOnlineTime) {\n subtitle += ` - ${formatLastOnline(new Date(lastOnlineTime))}`;\n } else if (commonSites) {\n subtitle += ` - ${getPersonFinderTextstringValue({\n textstring: ts.wrapper.item.commonSites,\n replacements: { count: commonSites as number },\n })}`;\n }\n\n if (isSite) {\n subtitle = url;\n }\n\n return {\n isSite,\n title,\n subtitle,\n imageUrl,\n titleElement,\n };\n};\n\nexport const usePersonFinderSmallItem = (entry: PersonFinderEntry) => {\n const { name } = entry as UACEntry;\n\n return {\n title: name,\n };\n};\n\nexport const useFriends = (personId: string) => {\n const { friends, removeFriend, addFriend } = usePersonFinder();\n\n const isFriend = friends?.map((entry) => entry.id).includes(personId);\n\n return {\n isFriend,\n addFriend,\n removeFriend,\n };\n};\n\nexport const useOnlyFriends = (entries: PersonFinderEntry[]) => {\n const { friends } = usePersonFinder();\n\n return useMemo(() => {\n if (!entries?.length) return false;\n if (!friends?.length) return false;\n\n const friendIds = new Set(friends.map((friend) => friend.id));\n\n return entries.every((entry) => friendIds.has(entry.id as string));\n }, [entries, friends]);\n};\n\ninterface UseErrorMessageOptions {\n loadingState: LoadingState;\n search: string;\n entries: PersonFinderEntry[];\n groupName?: string;\n areOnlyFriendsGiven?: boolean;\n}\n\nexport const useErrorMessage = ({\n loadingState,\n search,\n entries,\n groupName,\n areOnlyFriendsGiven,\n}: UseErrorMessageOptions) => {\n const ts = textStrings.components.personFinder.wrapper.body.group.errorMessage;\n\n if (search.length <= 2 && !areOnlyFriendsGiven) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n {getPersonFinderTextstringValue({ textstring: ts.minSearchLength })}\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n\n if (entries.length === 0) {\n if (loadingState === LoadingState.Error && search.length) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n {getPersonFinderTextstringValue({\n textstring: ts.noResults,\n replacements: {\n groupName,\n search,\n },\n })}\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n\n if (search.length === 0) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n {getPersonFinderTextstringValue({\n textstring: ts.emptySearch,\n replacements: { groupName },\n })}\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n }\n\n return null;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"personFinder.js","names":["_react","_interopRequireWildcard","require","_personFinder","_personFinder2","_core","_PersonFinderProvider","_PersonFinderGroup","_textStrings","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useClosestElementAbove","containerRef","itemClass","closestElement","setClosestElement","useState","useEffect","updateClosestElement","current","container","items","Array","from","getElementsByClassName","containerRect","getBoundingClientRect","closest","minDistance","Infinity","forEach","item","rect","distance","Math","abs","bottom","top","addEventListener","removeEventListener","textContent","exports","usePersonFinderItem","entry","isSite","isSiteEntry","ts","textStrings","components","personFinder","url","commonSites","name","firstName","lastName","id","isVerified","lastOnlineTime","imageUrl","titleElement","createElement","VerificationBadge","title","subtitle","getPersonFinderTextstringValue","textstring","wrapper","chaynsId","replacements","formatLastOnline","Date","count","usePersonFinderSmallItem","useFriends","personId","friends","removeFriend","addFriend","usePersonFinder","isFriend","map","includes","useOnlyFriends","entries","useMemo","length","friendIds","Set","friend","every","useErrorMessage","loadingState","search","filterKey","groupName","areOnlyFriendsGiven","body","group","errorMessage","relationMode","shouldHideMinSearchLengthMessage","RelationMode","SITE","PersonFinderFilterTypes","PERSON","StyledPersonFinderGroupErrorMessage","minSearchLength","LoadingState","Error","noResults","emptySearch"],"sources":["../../../src/hooks/personFinder.tsx"],"sourcesContent":["import React, { RefObject, useEffect, useMemo, useState } from 'react';\nimport {\n LoadingState,\n PersonEntry,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n RelationMode,\n SiteEntry,\n UACEntry,\n} from '../types/personFinder';\nimport {\n formatLastOnline,\n getPersonFinderTextstringValue,\n isSiteEntry,\n} from '../utils/personFinder';\nimport { VerificationBadge } from '@chayns-components/core';\nimport { IPersonFinderContext, usePersonFinder } from '../components/PersonFinderProvider';\nimport { StyledPersonFinderGroupErrorMessage } from '../components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.styles';\nimport textStrings from '../constants/textStrings';\n\nexport const useClosestElementAbove = (containerRef: RefObject<HTMLElement>, itemClass: string) => {\n const [closestElement, setClosestElement] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n const updateClosestElement = () => {\n if (!containerRef.current) return;\n\n const container = containerRef.current;\n const items = Array.from(container.getElementsByClassName(itemClass)) as HTMLElement[];\n const containerRect = container.getBoundingClientRect();\n\n let closest: HTMLElement | null = null;\n let minDistance = Infinity;\n\n items.forEach((item) => {\n const rect = item.getBoundingClientRect();\n const distance = Math.abs(rect.bottom - containerRect.top);\n\n if (rect.bottom < containerRect.top && distance < minDistance) {\n minDistance = distance;\n closest = item;\n }\n });\n\n setClosestElement(closest);\n };\n\n const container = containerRef.current;\n if (container) {\n container.addEventListener('scroll', updateClosestElement);\n updateClosestElement();\n }\n\n return () => {\n container?.removeEventListener('scroll', updateClosestElement);\n };\n }, [containerRef, itemClass]);\n\n return closestElement?.textContent;\n};\n\nexport const usePersonFinderItem = (entry: PersonFinderEntry) => {\n const isSite = isSiteEntry(entry as PersonEntry | SiteEntry);\n const ts = textStrings.components.personFinder;\n\n const { url, commonSites, name, firstName, lastName, id, isVerified, lastOnlineTime } =\n entry as PersonEntry & SiteEntry;\n\n const imageUrl = `https://sub60.tobit.com/${isSite ? 'l' : 'u'}/${id as string}?size=120`;\n const titleElement = isVerified && <VerificationBadge />;\n const title = isSite ? name : `${(firstName as string) ?? ''} ${(lastName as string) ?? ''}`;\n\n let subtitle = getPersonFinderTextstringValue({\n textstring: ts.wrapper.item.chaynsId,\n replacements: { id: id as string },\n });\n\n if (lastOnlineTime) {\n subtitle += ` - ${formatLastOnline(new Date(lastOnlineTime))}`;\n } else if (commonSites) {\n subtitle += ` - ${getPersonFinderTextstringValue({\n textstring: ts.wrapper.item.commonSites,\n replacements: { count: commonSites as number },\n })}`;\n }\n\n if (isSite) {\n subtitle = url;\n }\n\n return {\n isSite,\n title,\n subtitle,\n imageUrl,\n titleElement,\n };\n};\n\nexport const usePersonFinderSmallItem = (entry: PersonFinderEntry) => {\n const { name } = entry as UACEntry;\n\n return {\n title: name,\n };\n};\n\nexport const useFriends = (personId: string) => {\n const { friends, removeFriend, addFriend } = usePersonFinder();\n\n const isFriend = friends?.map((entry) => entry.id).includes(personId);\n\n return {\n isFriend,\n addFriend,\n removeFriend,\n };\n};\n\nexport const useOnlyFriends = (entries: PersonFinderEntry[]) => {\n const { friends } = usePersonFinder();\n\n return useMemo(() => {\n if (!entries?.length) return false;\n if (!friends?.length) return false;\n\n const friendIds = new Set(friends.map((friend) => friend.id));\n\n return entries.every((entry) => friendIds.has(entry.id as string));\n }, [entries, friends]);\n};\n\ninterface UseErrorMessageOptions {\n loadingState: LoadingState;\n search: string;\n entries: PersonFinderEntry[];\n filterKey: PersonFinderFilterTypes;\n groupName?: string;\n areOnlyFriendsGiven?: boolean;\n}\n\nexport const useErrorMessage = ({\n loadingState,\n search,\n entries,\n filterKey,\n groupName,\n areOnlyFriendsGiven,\n}: UseErrorMessageOptions) => {\n const ts = textStrings.components.personFinder.wrapper.body.group.errorMessage;\n const { relationMode } = usePersonFinder() as IPersonFinderContext;\n\n const shouldHideMinSearchLengthMessage =\n relationMode === RelationMode.SITE &&\n filterKey === PersonFinderFilterTypes.PERSON &&\n entries.length > 0;\n\n if (search.length <= 2 && !areOnlyFriendsGiven && !shouldHideMinSearchLengthMessage) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n {getPersonFinderTextstringValue({ textstring: ts.minSearchLength })}\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n\n if (entries.length === 0) {\n if (loadingState === LoadingState.Error && search.length) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n {getPersonFinderTextstringValue({\n textstring: ts.noResults,\n replacements: {\n groupName,\n search,\n },\n })}\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n\n if (search.length === 0) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n {getPersonFinderTextstringValue({\n textstring: ts.emptySearch,\n replacements: { groupName },\n })}\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n }\n\n return null;\n};\n"],"mappings":"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","ignoreList":[]}
|
package/lib/cjs/utils/uac.js
CHANGED
|
@@ -31,13 +31,20 @@ const getUACGroups = async () => {
|
|
|
31
31
|
}));
|
|
32
32
|
};
|
|
33
33
|
exports.getUACGroups = getUACGroups;
|
|
34
|
-
const getUsersByGroups = async uacFilter => {
|
|
34
|
+
const getUsersByGroups = async (uacFilter, options = {}) => {
|
|
35
|
+
const siteId = (0, _chaynsApi.getSite)().id;
|
|
36
|
+
const {
|
|
37
|
+
skip,
|
|
38
|
+
take
|
|
39
|
+
} = options;
|
|
35
40
|
const groupResults = await Promise.all(uacFilter.map(async ({
|
|
36
41
|
groupId
|
|
37
42
|
}) => {
|
|
38
43
|
const users = await client.getGroupMembers({
|
|
39
44
|
groupId,
|
|
40
|
-
siteId
|
|
45
|
+
siteId,
|
|
46
|
+
skip,
|
|
47
|
+
take
|
|
41
48
|
});
|
|
42
49
|
return users.map(({
|
|
43
50
|
personId,
|
|
@@ -53,7 +60,20 @@ const getUsersByGroups = async uacFilter => {
|
|
|
53
60
|
}));
|
|
54
61
|
}));
|
|
55
62
|
const unique = groupResults.flat().reduce((map, user) => map.set(user.id, user), new Map());
|
|
56
|
-
|
|
63
|
+
let count = unique.size;
|
|
64
|
+
const firstFilter = uacFilter[0];
|
|
65
|
+
if (firstFilter && (skip !== undefined || take !== undefined) && uacFilter.length === 1) {
|
|
66
|
+
const group = await client.getUserGroup({
|
|
67
|
+
groupId: firstFilter.groupId,
|
|
68
|
+
siteId,
|
|
69
|
+
countUsers: true
|
|
70
|
+
});
|
|
71
|
+
count = group.userCount ?? unique.size;
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
users: [...unique.values()],
|
|
75
|
+
count
|
|
76
|
+
};
|
|
57
77
|
};
|
|
58
78
|
exports.getUsersByGroups = getUsersByGroups;
|
|
59
79
|
//# sourceMappingURL=uac.js.map
|
package/lib/cjs/utils/uac.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uac.js","names":["_chaynsApi","require","_uacService","_personFinder","client","exports","UacServiceClient","getToken","getAccessToken","accessToken","getDefaultSiteId","getSite","id","getDefaultPersonId","_getUser","getUser","personId","getLanguage","active","getUACGroups","result","getUserGroups","countUsers","map","showName","isSystemGroup","name","getUsersByGroups","uacFilter","groupResults","Promise","all","groupId","users","getGroupMembers","
|
|
1
|
+
{"version":3,"file":"uac.js","names":["_chaynsApi","require","_uacService","_personFinder","client","exports","UacServiceClient","getToken","getAccessToken","accessToken","getDefaultSiteId","getSite","id","getDefaultPersonId","_getUser","getUser","personId","getLanguage","active","getUACGroups","result","getUserGroups","countUsers","map","showName","isSystemGroup","name","getUsersByGroups","uacFilter","options","siteId","skip","take","groupResults","Promise","all","groupId","users","getGroupMembers","firstname","lastname","firstName","lastName","type","PersonFinderFilterTypes","PERSON","commonSites","isVerified","unique","flat","reduce","user","set","Map","count","size","firstFilter","undefined","length","group","getUserGroup","userCount","values"],"sources":["../../../src/utils/uac.ts"],"sourcesContent":["import { getAccessToken, getLanguage, getSite, getUser } from 'chayns-api';\nimport { UacServiceClient } from '@chayns/uac-service';\nimport { PersonEntry, PersonFinderFilterTypes, UACEntry, UACFilter } from '../types/personFinder';\n\ninterface GetUsersByGroupsOptions {\n skip?: number;\n take?: number;\n}\n\ninterface GetUsersByGroupsResult {\n users: PersonEntry[];\n count: number;\n}\n\nexport const client = new UacServiceClient({\n getToken: async () => (await getAccessToken()).accessToken || '',\n getDefaultSiteId: () => getSite().id,\n getDefaultPersonId: () => getUser()?.personId || '',\n getLanguage: () => getLanguage().active,\n});\n\nexport const getUACGroups = async (): Promise<UACEntry[]> => {\n const result = await client.getUserGroups({ countUsers: true });\n\n return result.map(({ id, showName, isSystemGroup }) => ({\n id,\n name: showName,\n isSystemGroup,\n }));\n};\n\nexport const getUsersByGroups = async (\n uacFilter: UACFilter[],\n options: GetUsersByGroupsOptions = {},\n): Promise<GetUsersByGroupsResult> => {\n const siteId = getSite().id;\n const { skip, take } = options;\n\n const groupResults = await Promise.all(\n uacFilter.map(async ({ groupId }) => {\n const users = await client.getGroupMembers({\n groupId,\n siteId,\n skip,\n take,\n });\n\n return users.map(({ personId, firstname, lastname }) => ({\n id: personId,\n firstName: firstname,\n lastName: lastname,\n type: PersonFinderFilterTypes.PERSON,\n commonSites: 0,\n isVerified: false,\n })) as PersonEntry[];\n }),\n );\n\n const unique = groupResults\n .flat()\n .reduce<Map<string, PersonEntry>>((map, user) => map.set(user.id, user), new Map());\n\n let count = unique.size;\n\n const firstFilter = uacFilter[0];\n\n if (firstFilter && (skip !== undefined || take !== undefined) && uacFilter.length === 1) {\n const group = await client.getUserGroup({\n groupId: firstFilter.groupId,\n siteId,\n countUsers: true,\n });\n\n count = group.userCount ?? unique.size;\n }\n\n return {\n users: [...(unique.values() as unknown as PersonEntry[])],\n count,\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,6 +9,7 @@ import { getUACGroups, getUsersByGroups } from '../utils/uac';
|
|
|
9
9
|
import { TextstringProvider } from '@chayns-components/textstring';
|
|
10
10
|
import { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';
|
|
11
11
|
const THROTTLE_INTERVAL = 500;
|
|
12
|
+
const PAGE_SIZE = 20;
|
|
12
13
|
export const PersonFinderContext = /*#__PURE__*/createContext({
|
|
13
14
|
data: undefined,
|
|
14
15
|
updateData: undefined,
|
|
@@ -23,7 +24,8 @@ export const PersonFinderContext = /*#__PURE__*/createContext({
|
|
|
23
24
|
loadingState: undefined,
|
|
24
25
|
updateLoadingState: undefined,
|
|
25
26
|
tags: undefined,
|
|
26
|
-
setTags: undefined
|
|
27
|
+
setTags: undefined,
|
|
28
|
+
relationMode: undefined
|
|
27
29
|
});
|
|
28
30
|
PersonFinderContext.displayName = 'PersonFinderContext';
|
|
29
31
|
export const usePersonFinder = () => useContext(PersonFinderContext);
|
|
@@ -38,6 +40,7 @@ const PersonFinderProvider = ({
|
|
|
38
40
|
entries,
|
|
39
41
|
relationMode
|
|
40
42
|
}) => {
|
|
43
|
+
const getPagedUsersByGroups = useCallback(getUsersByGroups, []);
|
|
41
44
|
const [data, setData] = useState();
|
|
42
45
|
const [friends, setFriends] = useState();
|
|
43
46
|
const [uacUsers, setUacUsers] = useState();
|
|
@@ -92,6 +95,30 @@ const PersonFinderProvider = ({
|
|
|
92
95
|
updateLoadingState(key, LoadingState.Error);
|
|
93
96
|
return;
|
|
94
97
|
}
|
|
98
|
+
if (relationMode === RelationMode.SITE && key === PersonFinderFilterTypes.PERSON && search === '') {
|
|
99
|
+
void getPagedUsersByGroups([{
|
|
100
|
+
groupId: -1
|
|
101
|
+
}], {
|
|
102
|
+
skip: current.skip,
|
|
103
|
+
take: PAGE_SIZE
|
|
104
|
+
}).then(result => {
|
|
105
|
+
const {
|
|
106
|
+
users,
|
|
107
|
+
count
|
|
108
|
+
} = result;
|
|
109
|
+
if (users.length > 0) {
|
|
110
|
+
appendData(key, {
|
|
111
|
+
entries: users,
|
|
112
|
+
searchString: '',
|
|
113
|
+
skip: current.skip + users.length,
|
|
114
|
+
count
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}).finally(() => {
|
|
118
|
+
updateLoadingState(key, LoadingState.Success);
|
|
119
|
+
});
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
95
122
|
void loadData({
|
|
96
123
|
searchString: search ?? '',
|
|
97
124
|
filter: [key],
|
|
@@ -107,7 +134,7 @@ const PersonFinderProvider = ({
|
|
|
107
134
|
}).finally(() => {
|
|
108
135
|
updateLoadingState(key, LoadingState.Success);
|
|
109
136
|
});
|
|
110
|
-
}, [
|
|
137
|
+
}, [appendData, data, getPagedUsersByGroups, relationMode, search, updateLoadingState]);
|
|
111
138
|
const addFriend = useCallback(personId => {
|
|
112
139
|
void postFriends(personId).then(result => {
|
|
113
140
|
if (result) {
|
|
@@ -275,21 +302,31 @@ const PersonFinderProvider = ({
|
|
|
275
302
|
return;
|
|
276
303
|
}
|
|
277
304
|
if (relationMode === RelationMode.SITE && filterTypes.includes(PersonFinderFilterTypes.PERSON)) {
|
|
278
|
-
void
|
|
305
|
+
void getPagedUsersByGroups([{
|
|
279
306
|
groupId: -1
|
|
280
|
-
}]
|
|
307
|
+
}], {
|
|
308
|
+
skip: 0,
|
|
309
|
+
take: PAGE_SIZE
|
|
310
|
+
}).then(result => {
|
|
311
|
+
const {
|
|
312
|
+
users,
|
|
313
|
+
count
|
|
314
|
+
} = result;
|
|
281
315
|
setData({
|
|
282
316
|
person: {
|
|
283
317
|
entries: users,
|
|
284
318
|
searchString: '',
|
|
285
319
|
skip: users.length,
|
|
286
|
-
count
|
|
320
|
+
count
|
|
287
321
|
}
|
|
288
322
|
});
|
|
289
323
|
});
|
|
290
324
|
}
|
|
291
325
|
if (uacFilter) {
|
|
292
|
-
void
|
|
326
|
+
void getPagedUsersByGroups(uacFilter).then(result => {
|
|
327
|
+
const {
|
|
328
|
+
users
|
|
329
|
+
} = result;
|
|
293
330
|
setUacUsers(users);
|
|
294
331
|
});
|
|
295
332
|
return;
|
|
@@ -316,7 +353,7 @@ const PersonFinderProvider = ({
|
|
|
316
353
|
}
|
|
317
354
|
});
|
|
318
355
|
}
|
|
319
|
-
}, [entries, filterTypes, friends, friendsPriority, relationMode, search, uacFilter]);
|
|
356
|
+
}, [entries, filterTypes, friends, friendsPriority, getPagedUsersByGroups, relationMode, search, uacFilter]);
|
|
320
357
|
const providerValue = useMemo(() => ({
|
|
321
358
|
data: filterDataByKeys(data, activeFilter, {
|
|
322
359
|
excludedEntryIds,
|
|
@@ -334,8 +371,9 @@ const PersonFinderProvider = ({
|
|
|
334
371
|
loadingState,
|
|
335
372
|
updateLoadingState,
|
|
336
373
|
setTags,
|
|
337
|
-
tags
|
|
338
|
-
|
|
374
|
+
tags,
|
|
375
|
+
relationMode
|
|
376
|
+
}), [activeFilter, addFriend, data, excludedEntryIds, friends, loadMore, loadingState, removeFriend, search, shouldShowOwnUser, tags, uacFilter, updateActiveFilter, updateData, updateLoadingState, updateSearch, relationMode]);
|
|
339
377
|
return /*#__PURE__*/React.createElement(PersonFinderContext.Provider, {
|
|
340
378
|
value: providerValue
|
|
341
379
|
}, /*#__PURE__*/React.createElement(TextstringProvider, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersonFinderProvider.js","names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","throttle","LoadingState","PersonFinderFilterTypes","Priority","RelationMode","getFriends","postFriends","deleteFriends","filterDataByKeys","loadData","getUACGroups","getUsersByGroups","TextstringProvider","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","THROTTLE_INTERVAL","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":[]}
|
|
1
|
+
{"version":3,"file":"PersonFinderProvider.js","names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","throttle","LoadingState","PersonFinderFilterTypes","Priority","RelationMode","getFriends","postFriends","deleteFriends","filterDataByKeys","loadData","getUACGroups","getUsersByGroups","TextstringProvider","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","THROTTLE_INTERVAL","PAGE_SIZE","PersonFinderContext","data","undefined","updateData","friends","addFriend","removeFriend","activeFilter","updateActiveFilter","search","updateSearch","loadMore","loadingState","updateLoadingState","tags","setTags","relationMode","displayName","usePersonFinder","PersonFinderProvider","children","friendsPriority","filterTypes","defaultEntries","excludedEntryIds","shouldShowOwnUser","uacFilter","entries","getPagedUsersByGroups","setData","setFriends","uacUsers","setUacUsers","setActiveFilter","setSearch","map","id","name","text","setLoadingState","PERSON","None","SITE","dataRef","filter","key","newData","prevState","appendData","oldEntries","state","prev","value","Pending","current","Error","groupId","skip","take","then","result","users","count","length","searchString","finally","Success","skipMap","personId","firstName","lastName","verificationState","isVerified","commonSites","type","wasSuccessful","includes","latestArgsRef","latestHandledRequestRef","throttledRequest","args","requestTimestamp","Date","now","forEach","Object","keyString","HIGH","friendIds","Set","f","serverFriendEntries","entry","has","serverFriendIds","missingFriends","toLowerCase","otherEntries","leading","trailing","searchData","tmpData","uacEntries","filteredEntries","searchLocal","searchedUsers","entriesToSearch","Boolean","join","trim","push","active","UAC","cancel","person","uac","providerValue","createElement","Provider","libraryName"],"sources":["../../../src/components/PersonFinderProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n Dispatch,\n FC,\n ReactNode,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport throttle from 'lodash.throttle';\nimport {\n DefaultEntry,\n LoadingState,\n LoadingStateMap,\n PersonEntry,\n PersonFinderData,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n ThrottledFunction,\n UACEntry,\n UACFilter,\n} from '../types/personFinder';\nimport { getFriends } from '../api/friends/get';\nimport { postFriends } from '../api/friends/post';\nimport { deleteFriends } from '../api/friends/delete';\nimport { filterDataByKeys, loadData } from '../utils/personFinder';\nimport { Tag } from '@chayns-components/core/lib/types/types/tagInput';\nimport { getUACGroups, getUsersByGroups } from '../utils/uac';\nimport { TextstringProvider } from '@chayns-components/textstring';\nimport { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\nconst THROTTLE_INTERVAL = 500;\nconst PAGE_SIZE = 20;\n\ntype GetUsersByGroupsResult = {\n users: PersonEntry[];\n count: number;\n};\n\nexport interface IPersonFinderContext {\n // Data\n data?: { [key: string]: PersonFinderData };\n updateData?: (key: PersonFinderFilterTypes, personFinderData: PersonFinderData) => void;\n\n // Tags\n tags?: Tag[];\n setTags?: Dispatch<SetStateAction<Tag[]>>;\n\n // Friends\n friends?: PersonEntry[];\n addFriend?: (personId: string) => void;\n removeFriend?: (personId: string) => void;\n\n // Filter\n activeFilter?: PersonFinderFilterTypes[];\n updateActiveFilter?: (filter: PersonFinderFilterTypes[]) => void;\n\n // Search\n search?: string;\n updateSearch?: (value: string) => void;\n\n // Loading\n loadMore?: (key: PersonFinderFilterTypes) => void;\n loadingState?: LoadingStateMap;\n updateLoadingState?: (key: PersonFinderFilterTypes, state: LoadingState) => void;\n\n relationMode?: RelationMode;\n}\n\nexport const PersonFinderContext = createContext<IPersonFinderContext>({\n data: undefined,\n updateData: undefined,\n friends: undefined,\n addFriend: undefined,\n removeFriend: undefined,\n activeFilter: undefined,\n updateActiveFilter: undefined,\n search: undefined,\n updateSearch: undefined,\n loadMore: undefined,\n loadingState: undefined,\n updateLoadingState: undefined,\n tags: undefined,\n setTags: undefined,\n relationMode: undefined,\n});\n\nPersonFinderContext.displayName = 'PersonFinderContext';\n\nexport const usePersonFinder = () => useContext(PersonFinderContext);\n\ntype PersonFinderProviderProps = {\n children: ReactNode;\n friendsPriority: Priority;\n filterTypes: PersonFinderFilterTypes[];\n defaultEntries?: DefaultEntry[];\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n uacFilter?: UACFilter[];\n entries?: PersonEntry[];\n relationMode?: RelationMode;\n};\n\nconst PersonFinderProvider: FC<PersonFinderProviderProps> = ({\n children,\n friendsPriority,\n filterTypes,\n defaultEntries,\n excludedEntryIds,\n shouldShowOwnUser = false,\n uacFilter,\n entries,\n relationMode,\n}) => {\n const getPagedUsersByGroups = useCallback(\n getUsersByGroups as unknown as (\n uacFilter: UACFilter[],\n options?: { skip?: number; take?: number },\n ) => Promise<GetUsersByGroupsResult>,\n [],\n );\n\n const [data, setData] = useState<IPersonFinderContext['data']>();\n const [friends, setFriends] = useState<PersonEntry[]>();\n const [uacUsers, setUacUsers] = useState<PersonEntry[]>();\n const [activeFilter, setActiveFilter] = useState<IPersonFinderContext['activeFilter']>();\n const [search, setSearch] = useState('');\n const [tags, setTags] = useState<Tag[]>(\n defaultEntries?.map(({ id, name }) => ({ id, text: name })) ?? [],\n );\n const [loadingState, setLoadingState] = useState<LoadingStateMap>({\n [PersonFinderFilterTypes.PERSON]: LoadingState.None,\n [PersonFinderFilterTypes.SITE]: LoadingState.None,\n });\n\n const dataRef = useRef<IPersonFinderContext['data']>();\n\n const updateActiveFilter = useCallback((filter: IPersonFinderContext['activeFilter']) => {\n setActiveFilter(filter);\n }, []);\n\n const updateData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => ({ ...prevState, [key]: newData }));\n }, []);\n\n const appendData = useCallback((key: PersonFinderFilterTypes, newData: PersonFinderData) => {\n setData((prevState) => {\n const oldEntries = prevState && prevState[key]?.entries ? prevState[key]?.entries : [];\n\n return {\n ...prevState,\n [key]: {\n ...newData,\n entries: [...oldEntries, ...newData.entries],\n },\n };\n });\n }, []);\n\n const updateLoadingState = useCallback((key: PersonFinderFilterTypes, state: LoadingState) => {\n setLoadingState((prev) => ({\n ...prev,\n [key]: state,\n }));\n }, []);\n\n const updateSearch = useCallback((value: string) => {\n setSearch(value);\n }, []);\n\n const loadMore = useCallback(\n (key: PersonFinderFilterTypes) => {\n updateLoadingState(key, LoadingState.Pending);\n\n const current = data?.[key];\n\n if (!current) {\n updateLoadingState(key, LoadingState.Error);\n\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n key === PersonFinderFilterTypes.PERSON &&\n search === ''\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], {\n skip: current.skip,\n take: PAGE_SIZE,\n })\n .then((result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n if (users.length > 0) {\n appendData(key, {\n entries: users,\n searchString: '',\n skip: current.skip + users.length,\n count,\n });\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n\n return;\n }\n\n void loadData({\n searchString: search ?? '',\n filter: [key],\n skipMap: { [key]: current.skip },\n relationMode,\n })\n .then((result) => {\n const newData = result?.[key];\n\n if (newData) {\n appendData(key, newData);\n }\n })\n .finally(() => {\n updateLoadingState(key, LoadingState.Success);\n });\n },\n [appendData, data, getPagedUsersByGroups, relationMode, search, updateLoadingState],\n );\n\n const addFriend = useCallback((personId: string) => {\n void postFriends(personId).then((result) => {\n if (result) {\n const { firstName, lastName, verificationState } = result;\n\n setFriends((prev) => [\n ...(prev ?? []),\n {\n id: personId,\n isVerified: verificationState === 1,\n commonSites: 0,\n firstName,\n lastName,\n type: PersonFinderFilterTypes.PERSON,\n },\n ]);\n }\n });\n }, []);\n\n const removeFriend = useCallback((personId: string) => {\n void deleteFriends(personId).then((wasSuccessful) => {\n if (wasSuccessful) {\n setFriends((prev) => prev?.filter(({ id }) => id !== personId));\n }\n });\n }, []);\n\n useEffect(() => {\n if (!filterTypes.includes(PersonFinderFilterTypes.PERSON)) {\n return;\n }\n\n void getFriends().then((result) => {\n if (result) {\n setFriends(\n result.map(({ personId, firstName, lastName, verificationState }) => ({\n lastName,\n firstName,\n id: personId,\n commonSites: 0,\n isVerified: verificationState === 1,\n type: PersonFinderFilterTypes.PERSON,\n })),\n );\n }\n });\n }, [filterTypes]);\n\n const latestArgsRef = useRef<{ search: string; filter: PersonFinderFilterTypes[] } | null>(\n null,\n );\n const latestHandledRequestRef = useRef<number>(0);\n\n const throttledRequest = useRef<ThrottledFunction<() => void>>(\n throttle(\n async () => {\n const args = latestArgsRef.current;\n\n if (!args) return;\n\n const { search: searchString, filter } = args;\n const requestTimestamp = Date.now();\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n });\n\n const result = await loadData({\n searchString,\n filter,\n skipMap: {},\n relationMode,\n });\n\n if (requestTimestamp < latestHandledRequestRef.current) {\n return;\n }\n\n latestHandledRequestRef.current = requestTimestamp;\n\n if (!result) return;\n\n Object.entries(result).forEach(([keyString, value]) => {\n const key = keyString as PersonFinderFilterTypes;\n\n if (\n key === PersonFinderFilterTypes.PERSON &&\n friendsPriority === Priority.HIGH &&\n friends\n ) {\n const friendIds = new Set(friends.map((f) => f.id));\n const serverFriendEntries = value.entries.filter((entry) =>\n friendIds.has(entry.id as string),\n );\n const serverFriendIds = new Set(serverFriendEntries.map((f) => f.id));\n\n const missingFriends = friends\n .filter((f) => !serverFriendIds.has(f.id))\n .filter(\n (f) =>\n f.firstName\n ?.toLowerCase()\n .includes(searchString.toLowerCase()) ||\n f.lastName?.toLowerCase().includes(searchString.toLowerCase()),\n );\n\n const otherEntries = value.entries.filter(\n (entry) => !friendIds.has(entry.id as string),\n );\n\n updateData(key, {\n ...value,\n entries: [...serverFriendEntries, ...missingFriends, ...otherEntries],\n });\n } else {\n updateData(key, value);\n }\n\n updateLoadingState(\n key,\n value.entries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n });\n },\n THROTTLE_INTERVAL,\n { leading: false, trailing: true },\n ),\n ).current;\n\n useEffect(() => {\n dataRef.current = data;\n }, [data]);\n\n const searchData = useCallback(\n ({ filter }: { filter: PersonFinderFilterTypes[] }) => {\n const tmpData = dataRef.current;\n\n filter.forEach((key) => {\n updateLoadingState(key, LoadingState.Pending);\n\n if (tmpData && tmpData[key]) {\n // Add all Types that are not searched by a request\n const uacEntries = tmpData[key].entries as UACEntry[];\n\n const filteredEntries = uacEntries.filter(({ name }) =>\n name.toLowerCase().includes(search.toLowerCase()),\n );\n\n updateData(key, {\n entries: filteredEntries,\n searchString: search,\n count: filteredEntries.length,\n skip: filteredEntries.length,\n });\n\n updateLoadingState(\n key,\n filteredEntries.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }\n });\n },\n [search, updateData, updateLoadingState],\n );\n\n const searchLocal = useCallback(() => {\n if (search.length < 3) {\n return;\n }\n\n updateLoadingState(PersonFinderFilterTypes.PERSON, LoadingState.Pending);\n\n const searchedUsers: PersonEntry[] = [];\n\n const entriesToSearch = entries ?? uacUsers;\n\n entriesToSearch?.forEach((entry) => {\n if (\n entry.firstName?.toLowerCase().includes(search.toLowerCase()) ||\n entry.lastName?.toLowerCase().includes(search.toLowerCase()) ||\n [entry.firstName, entry.lastName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .trim()\n .includes(search.toLowerCase().trim()) ||\n entry.id.toLowerCase().includes(search.toLowerCase())\n ) {\n searchedUsers.push(entry);\n }\n });\n\n updateData(PersonFinderFilterTypes.PERSON, {\n entries: searchedUsers,\n searchString: search,\n count: searchedUsers.length,\n skip: searchedUsers.length,\n });\n\n updateLoadingState(\n PersonFinderFilterTypes.PERSON,\n searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success,\n );\n }, [entries, search, uacUsers, updateData, updateLoadingState]);\n\n useEffect(() => {\n if (!search) return;\n\n const active = activeFilter ?? filterTypes;\n\n if (uacFilter || entries) {\n searchLocal();\n } else if (active?.includes(PersonFinderFilterTypes.UAC)) {\n searchData({ filter: [PersonFinderFilterTypes.UAC] });\n } else {\n latestArgsRef.current = { search, filter: active };\n\n throttledRequest();\n }\n }, [\n filterTypes,\n search,\n activeFilter,\n friends,\n friendsPriority,\n updateData,\n updateLoadingState,\n throttledRequest,\n searchData,\n uacFilter,\n searchLocal,\n entries,\n ]);\n\n useEffect(\n () => () => {\n throttledRequest.cancel();\n },\n [throttledRequest],\n );\n\n // load initial data\n useEffect(() => {\n if (entries) {\n return;\n }\n\n if (\n relationMode === RelationMode.SITE &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON)\n ) {\n void getPagedUsersByGroups([{ groupId: -1 }], { skip: 0, take: PAGE_SIZE }).then(\n (result: GetUsersByGroupsResult) => {\n const { users, count } = result;\n\n setData({\n person: {\n entries: users,\n searchString: '',\n skip: users.length,\n count,\n },\n });\n },\n );\n }\n\n if (uacFilter) {\n void getPagedUsersByGroups(uacFilter).then((result: GetUsersByGroupsResult) => {\n const { users } = result;\n\n setUacUsers(users);\n });\n\n return;\n }\n\n if (filterTypes.includes(PersonFinderFilterTypes.UAC) && search === '') {\n void getUACGroups().then((result) => {\n setData({\n uac: {\n entries: result,\n searchString: '',\n skip: result.length,\n count: result.length,\n },\n });\n });\n }\n\n if (\n friendsPriority === Priority.HIGH &&\n filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friends &&\n search === ''\n ) {\n setData({\n person: {\n entries: friends,\n searchString: '',\n skip: friends.length,\n count: friends.length,\n },\n });\n }\n }, [\n entries,\n filterTypes,\n friends,\n friendsPriority,\n getPagedUsersByGroups,\n relationMode,\n search,\n uacFilter,\n ]);\n\n const providerValue = useMemo<IPersonFinderContext>(\n () => ({\n data: filterDataByKeys(data, activeFilter, {\n excludedEntryIds,\n shouldShowOwnUser: uacFilter ? false : shouldShowOwnUser,\n }),\n updateData,\n activeFilter,\n updateActiveFilter,\n friends,\n addFriend,\n removeFriend,\n search,\n updateSearch,\n loadMore,\n loadingState,\n updateLoadingState,\n setTags,\n tags,\n relationMode,\n }),\n [\n activeFilter,\n addFriend,\n data,\n excludedEntryIds,\n friends,\n loadMore,\n loadingState,\n removeFriend,\n search,\n shouldShowOwnUser,\n tags,\n uacFilter,\n updateActiveFilter,\n updateData,\n updateLoadingState,\n updateSearch,\n relationMode,\n ],\n );\n\n return (\n <PersonFinderContext.Provider value={providerValue}>\n <TextstringProvider libraryName={PERSON_FINDER_TEXTSTRING_LIBRARY_NAME}>\n {children}\n </TextstringProvider>\n </PersonFinderContext.Provider>\n );\n};\n\nPersonFinderProvider.displayName = 'PersonFinderProvider';\n\nexport default PersonFinderProvider;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersonFinderGroup.js","names":["React","useCallback","Button","List","SmallWaitCursor","LoadingState","PersonFinderFilterTypes","getGroupName","getPersonFinderTextstringValue","StyledPersonFinderGroup","StyledPersonFinderGroupButtonWrapper","StyledPersonFinderGroupName","StyledPersonFinderGroupWaitCursor","usePersonFinder","PersonFinderItem","useErrorMessage","useOnlyFriends","PersonFinderSmallItem","textStrings","PersonFinderGroup","entries","filterKey","count","shouldShowGroupName","onAdd","onRemove","loadMore","loadingState","loadingStateFromState","search","areOnlyFriendsGiven","UAC","groupName","None","shouldShowLoadMoreButton","length","waitCursor","Pending","createElement","shouldHideBackground","errorMessage","handleLoadMore","handlePreventDefault","event","preventDefault","stopPropagation","ts","components","personFinder","wrapper","body","group","onClick","className","map","entry","id","key","shouldShowWaitCursor","textstring","displayName"],"sources":["../../../../../../../src/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.tsx"],"sourcesContent":["import React, { FC, MouseEvent, useCallback } from 'react';\nimport { Button, List, SmallWaitCursor } from '@chayns-components/core';\nimport {\n LoadingState,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n} from '../../../../../types/personFinder';\nimport { getGroupName, getPersonFinderTextstringValue } from '../../../../../utils/personFinder';\nimport {\n StyledPersonFinderGroup,\n StyledPersonFinderGroupButtonWrapper,\n StyledPersonFinderGroupName,\n StyledPersonFinderGroupWaitCursor,\n} from './PersonFinderGroup.styles';\nimport { usePersonFinder } from '../../../../PersonFinderProvider';\nimport PersonFinderItem from './person-finder-item/PersonFinderItem';\nimport { useErrorMessage, useOnlyFriends } from '../../../../../hooks/personFinder';\nimport PersonFinderSmallItem from './person-finder-small-item/PersonFinderSmallItem';\nimport textStrings from '../../../../../constants/textStrings';\n\nexport type PersonFinderGroupProps = {\n filterKey: PersonFinderFilterTypes;\n entries: PersonFinderEntry[];\n count: number;\n shouldShowGroupName: boolean;\n onAdd: (id: string) => void;\n onRemove: (id: string) => void;\n};\n\nconst PersonFinderGroup: FC<PersonFinderGroupProps> = ({\n entries,\n filterKey,\n count,\n shouldShowGroupName,\n onAdd,\n onRemove,\n}) => {\n const { loadMore, loadingState: loadingStateFromState, search } = usePersonFinder();\n const areOnlyFriendsGiven =\n useOnlyFriends(entries) || filterKey === PersonFinderFilterTypes.UAC;\n\n const groupName = getGroupName(filterKey);\n\n const loadingState = loadingStateFromState\n ? (loadingStateFromState[filterKey] ?? LoadingState.None)\n : LoadingState.None;\n\n const shouldShowLoadMoreButton = entries.length < count;\n\n const waitCursor =\n (entries.length === 0 || areOnlyFriendsGiven) && loadingState === LoadingState.Pending ? (\n <StyledPersonFinderGroupWaitCursor>\n <SmallWaitCursor shouldHideBackground />\n </StyledPersonFinderGroupWaitCursor>\n ) : null;\n\n const errorMessage = useErrorMessage({\n areOnlyFriendsGiven,\n entries,\n loadingState,\n search: search ?? '',\n groupName,\n });\n\n const handleLoadMore = useCallback(() => {\n if (typeof loadMore === 'function') {\n loadMore(filterKey);\n }\n }, [filterKey, loadMore]);\n\n const handlePreventDefault = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const ts = textStrings.components.personFinder.wrapper.body.group;\n\n return (\n <StyledPersonFinderGroup onClick={handlePreventDefault}>\n {shouldShowGroupName && (\n <StyledPersonFinderGroupName className=\"person-finder-group-name\">\n {groupName}\n </StyledPersonFinderGroupName>\n )}\n {entries.length > 0 && (\n <List>\n {entries.map((entry) =>\n typeof entry.id === 'number' ? (\n <PersonFinderSmallItem\n key={`person-finder-entry--${entry.id}`}\n entry={entry}\n onAdd={onAdd}\n onRemove={onRemove}\n />\n ) : (\n <PersonFinderItem\n key={`person-finder-entry--${entry.id}`}\n entry={entry}\n onAdd={onAdd}\n onRemove={onRemove}\n />\n ),\n )}\n </List>\n )}\n {waitCursor}\n {errorMessage}\n {shouldShowLoadMoreButton && (\n <StyledPersonFinderGroupButtonWrapper key={`more-button-wrapper--${filterKey}`}>\n <Button\n key={`more-button--${filterKey}`}\n shouldShowWaitCursor={loadingState === LoadingState.Pending}\n onClick={handleLoadMore}\n >\n {getPersonFinderTextstringValue({ textstring: ts.loadMore })} {groupName}\n </Button>\n </StyledPersonFinderGroupButtonWrapper>\n )}\n </StyledPersonFinderGroup>\n );\n};\n\nPersonFinderGroup.displayName = 'PersonFinderGroup';\n\nexport default PersonFinderGroup;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAoBC,WAAW,QAAQ,OAAO;AAC1D,SAASC,MAAM,EAAEC,IAAI,EAAEC,eAAe,QAAQ,yBAAyB;AACvE,SACIC,YAAY,EAEZC,uBAAuB,QACpB,mCAAmC;AAC1C,SAASC,YAAY,EAAEC,8BAA8B,QAAQ,mCAAmC;AAChG,SACIC,uBAAuB,EACvBC,oCAAoC,EACpCC,2BAA2B,EAC3BC,iCAAiC,QAC9B,4BAA4B;AACnC,SAASC,eAAe,QAAQ,kCAAkC;AAClE,OAAOC,gBAAgB,MAAM,uCAAuC;AACpE,SAASC,eAAe,EAAEC,cAAc,QAAQ,mCAAmC;AACnF,OAAOC,qBAAqB,MAAM,kDAAkD;AACpF,OAAOC,WAAW,MAAM,sCAAsC;AAW9D,MAAMC,iBAA6C,GAAGA,CAAC;EACnDC,OAAO;EACPC,SAAS;EACTC,KAAK;EACLC,mBAAmB;EACnBC,KAAK;EACLC;AACJ,CAAC,KAAK;EACF,MAAM;IAAEC,QAAQ;IAAEC,YAAY,EAAEC,qBAAqB;IAAEC;EAAO,CAAC,GAAGhB,eAAe,CAAC,CAAC;EACnF,MAAMiB,mBAAmB,GACrBd,cAAc,CAACI,OAAO,CAAC,IAAIC,SAAS,KAAKf,uBAAuB,CAACyB,GAAG;EAExE,MAAMC,SAAS,GAAGzB,YAAY,CAACc,SAAS,CAAC;EAEzC,MAAMM,YAAY,GAAGC,qBAAqB,GACnCA,qBAAqB,CAACP,SAAS,CAAC,IAAIhB,YAAY,CAAC4B,IAAI,GACtD5B,YAAY,CAAC4B,IAAI;EAEvB,MAAMC,wBAAwB,GAAGd,OAAO,CAACe,MAAM,GAAGb,KAAK;EAEvD,MAAMc,UAAU,GACZ,CAAChB,OAAO,CAACe,MAAM,KAAK,CAAC,IAAIL,mBAAmB,KAAKH,YAAY,KAAKtB,YAAY,CAACgC,OAAO,gBAClFrC,KAAA,CAAAsC,aAAA,CAAC1B,iCAAiC,qBAC9BZ,KAAA,CAAAsC,aAAA,CAAClC,eAAe;IAACmC,oBAAoB;EAAA,CAAE,CACR,CAAC,GACpC,IAAI;EAEZ,MAAMC,YAAY,GAAGzB,eAAe,CAAC;IACjCe,mBAAmB;IACnBV,OAAO;
|
|
1
|
+
{"version":3,"file":"PersonFinderGroup.js","names":["React","useCallback","Button","List","SmallWaitCursor","LoadingState","PersonFinderFilterTypes","getGroupName","getPersonFinderTextstringValue","StyledPersonFinderGroup","StyledPersonFinderGroupButtonWrapper","StyledPersonFinderGroupName","StyledPersonFinderGroupWaitCursor","usePersonFinder","PersonFinderItem","useErrorMessage","useOnlyFriends","PersonFinderSmallItem","textStrings","PersonFinderGroup","entries","filterKey","count","shouldShowGroupName","onAdd","onRemove","loadMore","loadingState","loadingStateFromState","search","areOnlyFriendsGiven","UAC","groupName","None","shouldShowLoadMoreButton","length","waitCursor","Pending","createElement","shouldHideBackground","errorMessage","handleLoadMore","handlePreventDefault","event","preventDefault","stopPropagation","ts","components","personFinder","wrapper","body","group","onClick","className","map","entry","id","key","shouldShowWaitCursor","textstring","displayName"],"sources":["../../../../../../../src/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.tsx"],"sourcesContent":["import React, { FC, MouseEvent, useCallback } from 'react';\nimport { Button, List, SmallWaitCursor } from '@chayns-components/core';\nimport {\n LoadingState,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n} from '../../../../../types/personFinder';\nimport { getGroupName, getPersonFinderTextstringValue } from '../../../../../utils/personFinder';\nimport {\n StyledPersonFinderGroup,\n StyledPersonFinderGroupButtonWrapper,\n StyledPersonFinderGroupName,\n StyledPersonFinderGroupWaitCursor,\n} from './PersonFinderGroup.styles';\nimport { usePersonFinder } from '../../../../PersonFinderProvider';\nimport PersonFinderItem from './person-finder-item/PersonFinderItem';\nimport { useErrorMessage, useOnlyFriends } from '../../../../../hooks/personFinder';\nimport PersonFinderSmallItem from './person-finder-small-item/PersonFinderSmallItem';\nimport textStrings from '../../../../../constants/textStrings';\n\nexport type PersonFinderGroupProps = {\n filterKey: PersonFinderFilterTypes;\n entries: PersonFinderEntry[];\n count: number;\n shouldShowGroupName: boolean;\n onAdd: (id: string) => void;\n onRemove: (id: string) => void;\n};\n\nconst PersonFinderGroup: FC<PersonFinderGroupProps> = ({\n entries,\n filterKey,\n count,\n shouldShowGroupName,\n onAdd,\n onRemove,\n}) => {\n const { loadMore, loadingState: loadingStateFromState, search } = usePersonFinder();\n const areOnlyFriendsGiven =\n useOnlyFriends(entries) || filterKey === PersonFinderFilterTypes.UAC;\n\n const groupName = getGroupName(filterKey);\n\n const loadingState = loadingStateFromState\n ? (loadingStateFromState[filterKey] ?? LoadingState.None)\n : LoadingState.None;\n\n const shouldShowLoadMoreButton = entries.length < count;\n\n const waitCursor =\n (entries.length === 0 || areOnlyFriendsGiven) && loadingState === LoadingState.Pending ? (\n <StyledPersonFinderGroupWaitCursor>\n <SmallWaitCursor shouldHideBackground />\n </StyledPersonFinderGroupWaitCursor>\n ) : null;\n\n const errorMessage = useErrorMessage({\n areOnlyFriendsGiven,\n entries,\n filterKey,\n loadingState,\n search: search ?? '',\n groupName,\n });\n\n const handleLoadMore = useCallback(() => {\n if (typeof loadMore === 'function') {\n loadMore(filterKey);\n }\n }, [filterKey, loadMore]);\n\n const handlePreventDefault = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const ts = textStrings.components.personFinder.wrapper.body.group;\n\n return (\n <StyledPersonFinderGroup onClick={handlePreventDefault}>\n {shouldShowGroupName && (\n <StyledPersonFinderGroupName className=\"person-finder-group-name\">\n {groupName}\n </StyledPersonFinderGroupName>\n )}\n {entries.length > 0 && (\n <List>\n {entries.map((entry) =>\n typeof entry.id === 'number' ? (\n <PersonFinderSmallItem\n key={`person-finder-entry--${entry.id}`}\n entry={entry}\n onAdd={onAdd}\n onRemove={onRemove}\n />\n ) : (\n <PersonFinderItem\n key={`person-finder-entry--${entry.id}`}\n entry={entry}\n onAdd={onAdd}\n onRemove={onRemove}\n />\n ),\n )}\n </List>\n )}\n {waitCursor}\n {errorMessage}\n {shouldShowLoadMoreButton && (\n <StyledPersonFinderGroupButtonWrapper key={`more-button-wrapper--${filterKey}`}>\n <Button\n key={`more-button--${filterKey}`}\n shouldShowWaitCursor={loadingState === LoadingState.Pending}\n onClick={handleLoadMore}\n >\n {getPersonFinderTextstringValue({ textstring: ts.loadMore })} {groupName}\n </Button>\n </StyledPersonFinderGroupButtonWrapper>\n )}\n </StyledPersonFinderGroup>\n );\n};\n\nPersonFinderGroup.displayName = 'PersonFinderGroup';\n\nexport default PersonFinderGroup;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAoBC,WAAW,QAAQ,OAAO;AAC1D,SAASC,MAAM,EAAEC,IAAI,EAAEC,eAAe,QAAQ,yBAAyB;AACvE,SACIC,YAAY,EAEZC,uBAAuB,QACpB,mCAAmC;AAC1C,SAASC,YAAY,EAAEC,8BAA8B,QAAQ,mCAAmC;AAChG,SACIC,uBAAuB,EACvBC,oCAAoC,EACpCC,2BAA2B,EAC3BC,iCAAiC,QAC9B,4BAA4B;AACnC,SAASC,eAAe,QAAQ,kCAAkC;AAClE,OAAOC,gBAAgB,MAAM,uCAAuC;AACpE,SAASC,eAAe,EAAEC,cAAc,QAAQ,mCAAmC;AACnF,OAAOC,qBAAqB,MAAM,kDAAkD;AACpF,OAAOC,WAAW,MAAM,sCAAsC;AAW9D,MAAMC,iBAA6C,GAAGA,CAAC;EACnDC,OAAO;EACPC,SAAS;EACTC,KAAK;EACLC,mBAAmB;EACnBC,KAAK;EACLC;AACJ,CAAC,KAAK;EACF,MAAM;IAAEC,QAAQ;IAAEC,YAAY,EAAEC,qBAAqB;IAAEC;EAAO,CAAC,GAAGhB,eAAe,CAAC,CAAC;EACnF,MAAMiB,mBAAmB,GACrBd,cAAc,CAACI,OAAO,CAAC,IAAIC,SAAS,KAAKf,uBAAuB,CAACyB,GAAG;EAExE,MAAMC,SAAS,GAAGzB,YAAY,CAACc,SAAS,CAAC;EAEzC,MAAMM,YAAY,GAAGC,qBAAqB,GACnCA,qBAAqB,CAACP,SAAS,CAAC,IAAIhB,YAAY,CAAC4B,IAAI,GACtD5B,YAAY,CAAC4B,IAAI;EAEvB,MAAMC,wBAAwB,GAAGd,OAAO,CAACe,MAAM,GAAGb,KAAK;EAEvD,MAAMc,UAAU,GACZ,CAAChB,OAAO,CAACe,MAAM,KAAK,CAAC,IAAIL,mBAAmB,KAAKH,YAAY,KAAKtB,YAAY,CAACgC,OAAO,gBAClFrC,KAAA,CAAAsC,aAAA,CAAC1B,iCAAiC,qBAC9BZ,KAAA,CAAAsC,aAAA,CAAClC,eAAe;IAACmC,oBAAoB;EAAA,CAAE,CACR,CAAC,GACpC,IAAI;EAEZ,MAAMC,YAAY,GAAGzB,eAAe,CAAC;IACjCe,mBAAmB;IACnBV,OAAO;IACPC,SAAS;IACTM,YAAY;IACZE,MAAM,EAAEA,MAAM,IAAI,EAAE;IACpBG;EACJ,CAAC,CAAC;EAEF,MAAMS,cAAc,GAAGxC,WAAW,CAAC,MAAM;IACrC,IAAI,OAAOyB,QAAQ,KAAK,UAAU,EAAE;MAChCA,QAAQ,CAACL,SAAS,CAAC;IACvB;EACJ,CAAC,EAAE,CAACA,SAAS,EAAEK,QAAQ,CAAC,CAAC;EAEzB,MAAMgB,oBAAoB,GAAIC,KAAiB,IAAK;IAChDA,KAAK,CAACC,cAAc,CAAC,CAAC;IACtBD,KAAK,CAACE,eAAe,CAAC,CAAC;EAC3B,CAAC;EAED,MAAMC,EAAE,GAAG5B,WAAW,CAAC6B,UAAU,CAACC,YAAY,CAACC,OAAO,CAACC,IAAI,CAACC,KAAK;EAEjE,oBACInD,KAAA,CAAAsC,aAAA,CAAC7B,uBAAuB;IAAC2C,OAAO,EAAEV;EAAqB,GAClDnB,mBAAmB,iBAChBvB,KAAA,CAAAsC,aAAA,CAAC3B,2BAA2B;IAAC0C,SAAS,EAAC;EAA0B,GAC5DrB,SACwB,CAChC,EACAZ,OAAO,CAACe,MAAM,GAAG,CAAC,iBACfnC,KAAA,CAAAsC,aAAA,CAACnC,IAAI,QACAiB,OAAO,CAACkC,GAAG,CAAEC,KAAK,IACf,OAAOA,KAAK,CAACC,EAAE,KAAK,QAAQ,gBACxBxD,KAAA,CAAAsC,aAAA,CAACrB,qBAAqB;IAClBwC,GAAG,EAAE,wBAAwBF,KAAK,CAACC,EAAE,EAAG;IACxCD,KAAK,EAAEA,KAAM;IACb/B,KAAK,EAAEA,KAAM;IACbC,QAAQ,EAAEA;EAAS,CACtB,CAAC,gBAEFzB,KAAA,CAAAsC,aAAA,CAACxB,gBAAgB;IACb2C,GAAG,EAAE,wBAAwBF,KAAK,CAACC,EAAE,EAAG;IACxCD,KAAK,EAAEA,KAAM;IACb/B,KAAK,EAAEA,KAAM;IACbC,QAAQ,EAAEA;EAAS,CACtB,CAET,CACE,CACT,EACAW,UAAU,EACVI,YAAY,EACZN,wBAAwB,iBACrBlC,KAAA,CAAAsC,aAAA,CAAC5B,oCAAoC;IAAC+C,GAAG,EAAE,wBAAwBpC,SAAS;EAAG,gBAC3ErB,KAAA,CAAAsC,aAAA,CAACpC,MAAM;IACHuD,GAAG,EAAE,gBAAgBpC,SAAS,EAAG;IACjCqC,oBAAoB,EAAE/B,YAAY,KAAKtB,YAAY,CAACgC,OAAQ;IAC5De,OAAO,EAAEX;EAAe,GAEvBjC,8BAA8B,CAAC;IAAEmD,UAAU,EAAEb,EAAE,CAACpB;EAAS,CAAC,CAAC,EAAC,GAAC,EAACM,SAC3D,CAC0B,CAErB,CAAC;AAElC,CAAC;AAEDb,iBAAiB,CAACyC,WAAW,GAAG,mBAAmB;AAEnD,eAAezC,iBAAiB","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useEffect, useMemo, useState } from 'react';
|
|
2
|
-
import { LoadingState } from '../types/personFinder';
|
|
2
|
+
import { LoadingState, PersonFinderFilterTypes, RelationMode } from '../types/personFinder';
|
|
3
3
|
import { formatLastOnline, getPersonFinderTextstringValue, isSiteEntry } from '../utils/personFinder';
|
|
4
4
|
import { VerificationBadge } from '@chayns-components/core';
|
|
5
5
|
import { usePersonFinder } from '../components/PersonFinderProvider';
|
|
@@ -115,11 +115,16 @@ export const useErrorMessage = ({
|
|
|
115
115
|
loadingState,
|
|
116
116
|
search,
|
|
117
117
|
entries,
|
|
118
|
+
filterKey,
|
|
118
119
|
groupName,
|
|
119
120
|
areOnlyFriendsGiven
|
|
120
121
|
}) => {
|
|
121
122
|
const ts = textStrings.components.personFinder.wrapper.body.group.errorMessage;
|
|
122
|
-
|
|
123
|
+
const {
|
|
124
|
+
relationMode
|
|
125
|
+
} = usePersonFinder();
|
|
126
|
+
const shouldHideMinSearchLengthMessage = relationMode === RelationMode.SITE && filterKey === PersonFinderFilterTypes.PERSON && entries.length > 0;
|
|
127
|
+
if (search.length <= 2 && !areOnlyFriendsGiven && !shouldHideMinSearchLengthMessage) {
|
|
123
128
|
return /*#__PURE__*/React.createElement(StyledPersonFinderGroupErrorMessage, null, getPersonFinderTextstringValue({
|
|
124
129
|
textstring: ts.minSearchLength
|
|
125
130
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personFinder.js","names":["React","useEffect","useMemo","useState","LoadingState","formatLastOnline","getPersonFinderTextstringValue","isSiteEntry","VerificationBadge","usePersonFinder","StyledPersonFinderGroupErrorMessage","textStrings","useClosestElementAbove","containerRef","itemClass","closestElement","setClosestElement","updateClosestElement","current","container","items","Array","from","getElementsByClassName","containerRect","getBoundingClientRect","closest","minDistance","Infinity","forEach","item","rect","distance","Math","abs","bottom","top","addEventListener","removeEventListener","textContent","usePersonFinderItem","entry","isSite","ts","components","personFinder","url","commonSites","name","firstName","lastName","id","isVerified","lastOnlineTime","imageUrl","titleElement","createElement","title","subtitle","textstring","wrapper","chaynsId","replacements","Date","count","usePersonFinderSmallItem","useFriends","personId","friends","removeFriend","addFriend","isFriend","map","includes","useOnlyFriends","entries","length","friendIds","Set","friend","every","has","useErrorMessage","loadingState","search","groupName","areOnlyFriendsGiven","body","group","errorMessage","minSearchLength","Error","noResults","emptySearch"],"sources":["../../../src/hooks/personFinder.tsx"],"sourcesContent":["import React, { RefObject, useEffect, useMemo, useState } from 'react';\nimport {\n LoadingState,\n PersonEntry,\n PersonFinderEntry,\n SiteEntry,\n UACEntry,\n} from '../types/personFinder';\nimport {\n formatLastOnline,\n getPersonFinderTextstringValue,\n isSiteEntry,\n} from '../utils/personFinder';\nimport { VerificationBadge } from '@chayns-components/core';\nimport { usePersonFinder } from '../components/PersonFinderProvider';\nimport { StyledPersonFinderGroupErrorMessage } from '../components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.styles';\nimport textStrings from '../constants/textStrings';\n\nexport const useClosestElementAbove = (containerRef: RefObject<HTMLElement>, itemClass: string) => {\n const [closestElement, setClosestElement] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n const updateClosestElement = () => {\n if (!containerRef.current) return;\n\n const container = containerRef.current;\n const items = Array.from(container.getElementsByClassName(itemClass)) as HTMLElement[];\n const containerRect = container.getBoundingClientRect();\n\n let closest: HTMLElement | null = null;\n let minDistance = Infinity;\n\n items.forEach((item) => {\n const rect = item.getBoundingClientRect();\n const distance = Math.abs(rect.bottom - containerRect.top);\n\n if (rect.bottom < containerRect.top && distance < minDistance) {\n minDistance = distance;\n closest = item;\n }\n });\n\n setClosestElement(closest);\n };\n\n const container = containerRef.current;\n if (container) {\n container.addEventListener('scroll', updateClosestElement);\n updateClosestElement();\n }\n\n return () => {\n container?.removeEventListener('scroll', updateClosestElement);\n };\n }, [containerRef, itemClass]);\n\n return closestElement?.textContent;\n};\n\nexport const usePersonFinderItem = (entry: PersonFinderEntry) => {\n const isSite = isSiteEntry(entry as PersonEntry | SiteEntry);\n const ts = textStrings.components.personFinder;\n\n const { url, commonSites, name, firstName, lastName, id, isVerified, lastOnlineTime } =\n entry as PersonEntry & SiteEntry;\n\n const imageUrl = `https://sub60.tobit.com/${isSite ? 'l' : 'u'}/${id as string}?size=120`;\n const titleElement = isVerified && <VerificationBadge />;\n const title = isSite ? name : `${(firstName as string) ?? ''} ${(lastName as string) ?? ''}`;\n\n let subtitle = getPersonFinderTextstringValue({\n textstring: ts.wrapper.item.chaynsId,\n replacements: { id: id as string },\n });\n\n if (lastOnlineTime) {\n subtitle += ` - ${formatLastOnline(new Date(lastOnlineTime))}`;\n } else if (commonSites) {\n subtitle += ` - ${getPersonFinderTextstringValue({\n textstring: ts.wrapper.item.commonSites,\n replacements: { count: commonSites as number },\n })}`;\n }\n\n if (isSite) {\n subtitle = url;\n }\n\n return {\n isSite,\n title,\n subtitle,\n imageUrl,\n titleElement,\n };\n};\n\nexport const usePersonFinderSmallItem = (entry: PersonFinderEntry) => {\n const { name } = entry as UACEntry;\n\n return {\n title: name,\n };\n};\n\nexport const useFriends = (personId: string) => {\n const { friends, removeFriend, addFriend } = usePersonFinder();\n\n const isFriend = friends?.map((entry) => entry.id).includes(personId);\n\n return {\n isFriend,\n addFriend,\n removeFriend,\n };\n};\n\nexport const useOnlyFriends = (entries: PersonFinderEntry[]) => {\n const { friends } = usePersonFinder();\n\n return useMemo(() => {\n if (!entries?.length) return false;\n if (!friends?.length) return false;\n\n const friendIds = new Set(friends.map((friend) => friend.id));\n\n return entries.every((entry) => friendIds.has(entry.id as string));\n }, [entries, friends]);\n};\n\ninterface UseErrorMessageOptions {\n loadingState: LoadingState;\n search: string;\n entries: PersonFinderEntry[];\n groupName?: string;\n areOnlyFriendsGiven?: boolean;\n}\n\nexport const useErrorMessage = ({\n loadingState,\n search,\n entries,\n groupName,\n areOnlyFriendsGiven,\n}: UseErrorMessageOptions) => {\n const ts = textStrings.components.personFinder.wrapper.body.group.errorMessage;\n\n if (search.length <= 2 && !areOnlyFriendsGiven) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n {getPersonFinderTextstringValue({ textstring: ts.minSearchLength })}\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n\n if (entries.length === 0) {\n if (loadingState === LoadingState.Error && search.length) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n {getPersonFinderTextstringValue({\n textstring: ts.noResults,\n replacements: {\n groupName,\n search,\n },\n })}\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n\n if (search.length === 0) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n {getPersonFinderTextstringValue({\n textstring: ts.emptySearch,\n replacements: { groupName },\n })}\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n }\n\n return null;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"personFinder.js","names":["React","useEffect","useMemo","useState","LoadingState","PersonFinderFilterTypes","RelationMode","formatLastOnline","getPersonFinderTextstringValue","isSiteEntry","VerificationBadge","usePersonFinder","StyledPersonFinderGroupErrorMessage","textStrings","useClosestElementAbove","containerRef","itemClass","closestElement","setClosestElement","updateClosestElement","current","container","items","Array","from","getElementsByClassName","containerRect","getBoundingClientRect","closest","minDistance","Infinity","forEach","item","rect","distance","Math","abs","bottom","top","addEventListener","removeEventListener","textContent","usePersonFinderItem","entry","isSite","ts","components","personFinder","url","commonSites","name","firstName","lastName","id","isVerified","lastOnlineTime","imageUrl","titleElement","createElement","title","subtitle","textstring","wrapper","chaynsId","replacements","Date","count","usePersonFinderSmallItem","useFriends","personId","friends","removeFriend","addFriend","isFriend","map","includes","useOnlyFriends","entries","length","friendIds","Set","friend","every","has","useErrorMessage","loadingState","search","filterKey","groupName","areOnlyFriendsGiven","body","group","errorMessage","relationMode","shouldHideMinSearchLengthMessage","SITE","PERSON","minSearchLength","Error","noResults","emptySearch"],"sources":["../../../src/hooks/personFinder.tsx"],"sourcesContent":["import React, { RefObject, useEffect, useMemo, useState } from 'react';\nimport {\n LoadingState,\n PersonEntry,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n RelationMode,\n SiteEntry,\n UACEntry,\n} from '../types/personFinder';\nimport {\n formatLastOnline,\n getPersonFinderTextstringValue,\n isSiteEntry,\n} from '../utils/personFinder';\nimport { VerificationBadge } from '@chayns-components/core';\nimport { IPersonFinderContext, usePersonFinder } from '../components/PersonFinderProvider';\nimport { StyledPersonFinderGroupErrorMessage } from '../components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.styles';\nimport textStrings from '../constants/textStrings';\n\nexport const useClosestElementAbove = (containerRef: RefObject<HTMLElement>, itemClass: string) => {\n const [closestElement, setClosestElement] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n const updateClosestElement = () => {\n if (!containerRef.current) return;\n\n const container = containerRef.current;\n const items = Array.from(container.getElementsByClassName(itemClass)) as HTMLElement[];\n const containerRect = container.getBoundingClientRect();\n\n let closest: HTMLElement | null = null;\n let minDistance = Infinity;\n\n items.forEach((item) => {\n const rect = item.getBoundingClientRect();\n const distance = Math.abs(rect.bottom - containerRect.top);\n\n if (rect.bottom < containerRect.top && distance < minDistance) {\n minDistance = distance;\n closest = item;\n }\n });\n\n setClosestElement(closest);\n };\n\n const container = containerRef.current;\n if (container) {\n container.addEventListener('scroll', updateClosestElement);\n updateClosestElement();\n }\n\n return () => {\n container?.removeEventListener('scroll', updateClosestElement);\n };\n }, [containerRef, itemClass]);\n\n return closestElement?.textContent;\n};\n\nexport const usePersonFinderItem = (entry: PersonFinderEntry) => {\n const isSite = isSiteEntry(entry as PersonEntry | SiteEntry);\n const ts = textStrings.components.personFinder;\n\n const { url, commonSites, name, firstName, lastName, id, isVerified, lastOnlineTime } =\n entry as PersonEntry & SiteEntry;\n\n const imageUrl = `https://sub60.tobit.com/${isSite ? 'l' : 'u'}/${id as string}?size=120`;\n const titleElement = isVerified && <VerificationBadge />;\n const title = isSite ? name : `${(firstName as string) ?? ''} ${(lastName as string) ?? ''}`;\n\n let subtitle = getPersonFinderTextstringValue({\n textstring: ts.wrapper.item.chaynsId,\n replacements: { id: id as string },\n });\n\n if (lastOnlineTime) {\n subtitle += ` - ${formatLastOnline(new Date(lastOnlineTime))}`;\n } else if (commonSites) {\n subtitle += ` - ${getPersonFinderTextstringValue({\n textstring: ts.wrapper.item.commonSites,\n replacements: { count: commonSites as number },\n })}`;\n }\n\n if (isSite) {\n subtitle = url;\n }\n\n return {\n isSite,\n title,\n subtitle,\n imageUrl,\n titleElement,\n };\n};\n\nexport const usePersonFinderSmallItem = (entry: PersonFinderEntry) => {\n const { name } = entry as UACEntry;\n\n return {\n title: name,\n };\n};\n\nexport const useFriends = (personId: string) => {\n const { friends, removeFriend, addFriend } = usePersonFinder();\n\n const isFriend = friends?.map((entry) => entry.id).includes(personId);\n\n return {\n isFriend,\n addFriend,\n removeFriend,\n };\n};\n\nexport const useOnlyFriends = (entries: PersonFinderEntry[]) => {\n const { friends } = usePersonFinder();\n\n return useMemo(() => {\n if (!entries?.length) return false;\n if (!friends?.length) return false;\n\n const friendIds = new Set(friends.map((friend) => friend.id));\n\n return entries.every((entry) => friendIds.has(entry.id as string));\n }, [entries, friends]);\n};\n\ninterface UseErrorMessageOptions {\n loadingState: LoadingState;\n search: string;\n entries: PersonFinderEntry[];\n filterKey: PersonFinderFilterTypes;\n groupName?: string;\n areOnlyFriendsGiven?: boolean;\n}\n\nexport const useErrorMessage = ({\n loadingState,\n search,\n entries,\n filterKey,\n groupName,\n areOnlyFriendsGiven,\n}: UseErrorMessageOptions) => {\n const ts = textStrings.components.personFinder.wrapper.body.group.errorMessage;\n const { relationMode } = usePersonFinder() as IPersonFinderContext;\n\n const shouldHideMinSearchLengthMessage =\n relationMode === RelationMode.SITE &&\n filterKey === PersonFinderFilterTypes.PERSON &&\n entries.length > 0;\n\n if (search.length <= 2 && !areOnlyFriendsGiven && !shouldHideMinSearchLengthMessage) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n {getPersonFinderTextstringValue({ textstring: ts.minSearchLength })}\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n\n if (entries.length === 0) {\n if (loadingState === LoadingState.Error && search.length) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n {getPersonFinderTextstringValue({\n textstring: ts.noResults,\n replacements: {\n groupName,\n search,\n },\n })}\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n\n if (search.length === 0) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n {getPersonFinderTextstringValue({\n textstring: ts.emptySearch,\n replacements: { groupName },\n })}\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n }\n\n return null;\n};\n"],"mappings":"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","ignoreList":[]}
|
package/lib/esm/utils/uac.js
CHANGED
|
@@ -21,13 +21,20 @@ export const getUACGroups = async () => {
|
|
|
21
21
|
isSystemGroup
|
|
22
22
|
}));
|
|
23
23
|
};
|
|
24
|
-
export const getUsersByGroups = async uacFilter => {
|
|
24
|
+
export const getUsersByGroups = async (uacFilter, options = {}) => {
|
|
25
|
+
const siteId = getSite().id;
|
|
26
|
+
const {
|
|
27
|
+
skip,
|
|
28
|
+
take
|
|
29
|
+
} = options;
|
|
25
30
|
const groupResults = await Promise.all(uacFilter.map(async ({
|
|
26
31
|
groupId
|
|
27
32
|
}) => {
|
|
28
33
|
const users = await client.getGroupMembers({
|
|
29
34
|
groupId,
|
|
30
|
-
siteId
|
|
35
|
+
siteId,
|
|
36
|
+
skip,
|
|
37
|
+
take
|
|
31
38
|
});
|
|
32
39
|
return users.map(({
|
|
33
40
|
personId,
|
|
@@ -43,6 +50,19 @@ export const getUsersByGroups = async uacFilter => {
|
|
|
43
50
|
}));
|
|
44
51
|
}));
|
|
45
52
|
const unique = groupResults.flat().reduce((map, user) => map.set(user.id, user), new Map());
|
|
46
|
-
|
|
53
|
+
let count = unique.size;
|
|
54
|
+
const firstFilter = uacFilter[0];
|
|
55
|
+
if (firstFilter && (skip !== undefined || take !== undefined) && uacFilter.length === 1) {
|
|
56
|
+
const group = await client.getUserGroup({
|
|
57
|
+
groupId: firstFilter.groupId,
|
|
58
|
+
siteId,
|
|
59
|
+
countUsers: true
|
|
60
|
+
});
|
|
61
|
+
count = group.userCount ?? unique.size;
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
users: [...unique.values()],
|
|
65
|
+
count
|
|
66
|
+
};
|
|
47
67
|
};
|
|
48
68
|
//# sourceMappingURL=uac.js.map
|
package/lib/esm/utils/uac.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uac.js","names":["getAccessToken","getLanguage","getSite","getUser","UacServiceClient","PersonFinderFilterTypes","client","getToken","accessToken","getDefaultSiteId","id","getDefaultPersonId","personId","active","getUACGroups","result","getUserGroups","countUsers","map","showName","isSystemGroup","name","getUsersByGroups","uacFilter","groupResults","Promise","all","groupId","users","getGroupMembers","
|
|
1
|
+
{"version":3,"file":"uac.js","names":["getAccessToken","getLanguage","getSite","getUser","UacServiceClient","PersonFinderFilterTypes","client","getToken","accessToken","getDefaultSiteId","id","getDefaultPersonId","personId","active","getUACGroups","result","getUserGroups","countUsers","map","showName","isSystemGroup","name","getUsersByGroups","uacFilter","options","siteId","skip","take","groupResults","Promise","all","groupId","users","getGroupMembers","firstname","lastname","firstName","lastName","type","PERSON","commonSites","isVerified","unique","flat","reduce","user","set","Map","count","size","firstFilter","undefined","length","group","getUserGroup","userCount","values"],"sources":["../../../src/utils/uac.ts"],"sourcesContent":["import { getAccessToken, getLanguage, getSite, getUser } from 'chayns-api';\nimport { UacServiceClient } from '@chayns/uac-service';\nimport { PersonEntry, PersonFinderFilterTypes, UACEntry, UACFilter } from '../types/personFinder';\n\ninterface GetUsersByGroupsOptions {\n skip?: number;\n take?: number;\n}\n\ninterface GetUsersByGroupsResult {\n users: PersonEntry[];\n count: number;\n}\n\nexport const client = new UacServiceClient({\n getToken: async () => (await getAccessToken()).accessToken || '',\n getDefaultSiteId: () => getSite().id,\n getDefaultPersonId: () => getUser()?.personId || '',\n getLanguage: () => getLanguage().active,\n});\n\nexport const getUACGroups = async (): Promise<UACEntry[]> => {\n const result = await client.getUserGroups({ countUsers: true });\n\n return result.map(({ id, showName, isSystemGroup }) => ({\n id,\n name: showName,\n isSystemGroup,\n }));\n};\n\nexport const getUsersByGroups = async (\n uacFilter: UACFilter[],\n options: GetUsersByGroupsOptions = {},\n): Promise<GetUsersByGroupsResult> => {\n const siteId = getSite().id;\n const { skip, take } = options;\n\n const groupResults = await Promise.all(\n uacFilter.map(async ({ groupId }) => {\n const users = await client.getGroupMembers({\n groupId,\n siteId,\n skip,\n take,\n });\n\n return users.map(({ personId, firstname, lastname }) => ({\n id: personId,\n firstName: firstname,\n lastName: lastname,\n type: PersonFinderFilterTypes.PERSON,\n commonSites: 0,\n isVerified: false,\n })) as PersonEntry[];\n }),\n );\n\n const unique = groupResults\n .flat()\n .reduce<Map<string, PersonEntry>>((map, user) => map.set(user.id, user), new Map());\n\n let count = unique.size;\n\n const firstFilter = uacFilter[0];\n\n if (firstFilter && (skip !== undefined || take !== undefined) && uacFilter.length === 1) {\n const group = await client.getUserGroup({\n groupId: firstFilter.groupId,\n siteId,\n countUsers: true,\n });\n\n count = group.userCount ?? unique.size;\n }\n\n return {\n users: [...(unique.values() as unknown as PersonEntry[])],\n count,\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { Dispatch, FC, ReactNode, SetStateAction } from 'react';
|
|
2
2
|
import { DefaultEntry, LoadingState, LoadingStateMap, PersonEntry, PersonFinderData, PersonFinderEntry, PersonFinderFilterTypes, Priority, RelationMode, UACFilter } from '../types/personFinder';
|
|
3
3
|
import { Tag } from '@chayns-components/core/lib/types/types/tagInput';
|
|
4
|
-
interface IPersonFinderContext {
|
|
4
|
+
export interface IPersonFinderContext {
|
|
5
5
|
data?: {
|
|
6
6
|
[key: string]: PersonFinderData;
|
|
7
7
|
};
|
|
@@ -18,6 +18,7 @@ interface IPersonFinderContext {
|
|
|
18
18
|
loadMore?: (key: PersonFinderFilterTypes) => void;
|
|
19
19
|
loadingState?: LoadingStateMap;
|
|
20
20
|
updateLoadingState?: (key: PersonFinderFilterTypes, state: LoadingState) => void;
|
|
21
|
+
relationMode?: RelationMode;
|
|
21
22
|
}
|
|
22
23
|
export declare const PersonFinderContext: React.Context<IPersonFinderContext>;
|
|
23
24
|
export declare const usePersonFinder: () => IPersonFinderContext;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { RefObject } from 'react';
|
|
2
|
-
import { LoadingState, PersonFinderEntry } from '../types/personFinder';
|
|
2
|
+
import { LoadingState, PersonFinderEntry, PersonFinderFilterTypes } from '../types/personFinder';
|
|
3
3
|
export declare const useClosestElementAbove: (containerRef: RefObject<HTMLElement>, itemClass: string) => string | undefined;
|
|
4
4
|
export declare const usePersonFinderItem: (entry: PersonFinderEntry) => {
|
|
5
5
|
isSite: boolean;
|
|
@@ -21,8 +21,9 @@ interface UseErrorMessageOptions {
|
|
|
21
21
|
loadingState: LoadingState;
|
|
22
22
|
search: string;
|
|
23
23
|
entries: PersonFinderEntry[];
|
|
24
|
+
filterKey: PersonFinderFilterTypes;
|
|
24
25
|
groupName?: string;
|
|
25
26
|
areOnlyFriendsGiven?: boolean;
|
|
26
27
|
}
|
|
27
|
-
export declare const useErrorMessage: ({ loadingState, search, entries, groupName, areOnlyFriendsGiven, }: UseErrorMessageOptions) => React.JSX.Element | null;
|
|
28
|
+
export declare const useErrorMessage: ({ loadingState, search, entries, filterKey, groupName, areOnlyFriendsGiven, }: UseErrorMessageOptions) => React.JSX.Element | null;
|
|
28
29
|
export {};
|
package/lib/types/utils/uac.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { UacServiceClient } from '@chayns/uac-service';
|
|
2
2
|
import { PersonEntry, UACEntry, UACFilter } from '../types/personFinder';
|
|
3
|
+
interface GetUsersByGroupsOptions {
|
|
4
|
+
skip?: number;
|
|
5
|
+
take?: number;
|
|
6
|
+
}
|
|
7
|
+
interface GetUsersByGroupsResult {
|
|
8
|
+
users: PersonEntry[];
|
|
9
|
+
count: number;
|
|
10
|
+
}
|
|
3
11
|
export declare const client: UacServiceClient<{
|
|
4
12
|
getToken: () => Promise<string>;
|
|
5
13
|
getDefaultSiteId: () => string;
|
|
@@ -7,4 +15,5 @@ export declare const client: UacServiceClient<{
|
|
|
7
15
|
getLanguage: () => import("chayns-api").Language;
|
|
8
16
|
}>;
|
|
9
17
|
export declare const getUACGroups: () => Promise<UACEntry[]>;
|
|
10
|
-
export declare const getUsersByGroups: (uacFilter: UACFilter[]) => Promise<
|
|
18
|
+
export declare const getUsersByGroups: (uacFilter: UACFilter[], options?: GetUsersByGroupsOptions) => Promise<GetUsersByGroupsResult>;
|
|
19
|
+
export {};
|
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.10",
|
|
4
4
|
"description": "A set of beautiful React components for developing your own applications with chayns.",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"browserslist": [
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"typescript": "^5.9.3"
|
|
72
72
|
},
|
|
73
73
|
"dependencies": {
|
|
74
|
-
"@chayns-components/core": "^5.3.
|
|
74
|
+
"@chayns-components/core": "^5.3.10",
|
|
75
75
|
"@chayns-components/textstring": "^5.2.5",
|
|
76
76
|
"@chayns/uac-service": "~0.0.62",
|
|
77
77
|
"lodash.throttle": "^4.1.1",
|
|
@@ -88,5 +88,5 @@
|
|
|
88
88
|
"publishConfig": {
|
|
89
89
|
"access": "public"
|
|
90
90
|
},
|
|
91
|
-
"gitHead": "
|
|
91
|
+
"gitHead": "ae538b0fd6f041f55b5b842cb47dc7363fc9511d"
|
|
92
92
|
}
|