@chayns-components/person-finder 5.3.0 → 5.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/api/person/get.js +5 -3
- package/lib/cjs/api/person/get.js.map +1 -1
- package/lib/cjs/components/PersonFinderProvider.js +12 -5
- package/lib/cjs/components/PersonFinderProvider.js.map +1 -1
- package/lib/cjs/components/person-finder/PersonFinder.js +4 -2
- package/lib/cjs/components/person-finder/PersonFinder.js.map +1 -1
- package/lib/cjs/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js.map +1 -1
- package/lib/cjs/components/person-finder/person-finder-wrapper/person-finder-body/PersonFinderBody.js +1 -3
- package/lib/cjs/components/person-finder/person-finder-wrapper/person-finder-body/PersonFinderBody.js.map +1 -1
- package/lib/cjs/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.js +3 -6
- package/lib/cjs/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.js.map +1 -1
- package/lib/cjs/constants/textStrings.js +70 -1
- package/lib/cjs/constants/textStrings.js.map +1 -1
- package/lib/cjs/hooks/personFinder.js +43 -7
- package/lib/cjs/hooks/personFinder.js.map +1 -1
- package/lib/cjs/index.js +6 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/types/personFinder.js +6 -1
- package/lib/cjs/types/personFinder.js.map +1 -1
- package/lib/cjs/utils/convert.js +5 -2
- package/lib/cjs/utils/convert.js.map +1 -1
- package/lib/cjs/utils/personFinder.js +110 -9
- package/lib/cjs/utils/personFinder.js.map +1 -1
- package/lib/esm/api/person/get.js +5 -3
- package/lib/esm/api/person/get.js.map +1 -1
- package/lib/esm/components/PersonFinderProvider.js +12 -5
- package/lib/esm/components/PersonFinderProvider.js.map +1 -1
- package/lib/esm/components/person-finder/PersonFinder.js +5 -3
- package/lib/esm/components/person-finder/PersonFinder.js.map +1 -1
- package/lib/esm/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js.map +1 -1
- package/lib/esm/components/person-finder/person-finder-wrapper/person-finder-body/PersonFinderBody.js +1 -3
- package/lib/esm/components/person-finder/person-finder-wrapper/person-finder-body/PersonFinderBody.js.map +1 -1
- package/lib/esm/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.js +4 -7
- package/lib/esm/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.js.map +1 -1
- package/lib/esm/constants/textStrings.js +69 -0
- package/lib/esm/constants/textStrings.js.map +1 -1
- package/lib/esm/hooks/personFinder.js +43 -8
- package/lib/esm/hooks/personFinder.js.map +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/types/personFinder.js +5 -0
- package/lib/esm/types/personFinder.js.map +1 -1
- package/lib/esm/utils/convert.js +5 -2
- package/lib/esm/utils/convert.js.map +1 -1
- package/lib/esm/utils/personFinder.js +107 -9
- package/lib/esm/utils/personFinder.js.map +1 -1
- package/lib/types/api/person/get.d.ts +3 -2
- package/lib/types/components/PersonFinderProvider.d.ts +2 -1
- package/lib/types/components/person-finder/PersonFinder.d.ts +9 -1
- package/lib/types/components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.d.ts +0 -1
- package/lib/types/constants/textStrings.d.ts +69 -0
- package/lib/types/index.d.ts +1 -1
- package/lib/types/types/personFinder.d.ts +5 -0
- package/lib/types/utils/convert.d.ts +5 -1
- package/lib/types/utils/personFinder.d.ts +13 -3
- package/package.json +2 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export const PERSON_FINDER_TEXTSTRING_LIBRARY_NAME = '@chayns-components-person-finder';
|
|
1
2
|
export default {
|
|
2
3
|
components: {
|
|
3
4
|
personFinder: {
|
|
@@ -7,8 +8,76 @@ export default {
|
|
|
7
8
|
loadMore: {
|
|
8
9
|
stringName: 'txt_chayns_components_person_finder_components_personFinder_wrapper_body_group_loadMore',
|
|
9
10
|
fallback: 'Mehr'
|
|
11
|
+
},
|
|
12
|
+
errorMessage: {
|
|
13
|
+
minSearchLength: {
|
|
14
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_wrapper_body_group_errorMessage_minSearchLength',
|
|
15
|
+
fallback: 'Gib einen Suchbegriff mit mindestens drei Zeichen ein.'
|
|
16
|
+
},
|
|
17
|
+
noResults: {
|
|
18
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_wrapper_body_group_errorMessage_noResults',
|
|
19
|
+
fallback: 'Es konnten keine ##groupName## zu der Suche "##search##" gefunden werden.'
|
|
20
|
+
},
|
|
21
|
+
emptySearch: {
|
|
22
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_wrapper_body_group_errorMessage_emptySearch',
|
|
23
|
+
fallback: 'Gib einen Suchbegriff ein, um nach ##groupName## zu suchen.'
|
|
24
|
+
}
|
|
10
25
|
}
|
|
11
26
|
}
|
|
27
|
+
},
|
|
28
|
+
item: {
|
|
29
|
+
chaynsId: {
|
|
30
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_wrapper_item_chaynsId',
|
|
31
|
+
fallback: 'chaynsID: ##id##'
|
|
32
|
+
},
|
|
33
|
+
commonSites: {
|
|
34
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_wrapper_item_commonSites',
|
|
35
|
+
fallback: '##count## gemeinsame Sites'
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
groupName: {
|
|
40
|
+
person: {
|
|
41
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_groupName_person',
|
|
42
|
+
fallback: 'Personen'
|
|
43
|
+
},
|
|
44
|
+
site: {
|
|
45
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_groupName_site',
|
|
46
|
+
fallback: 'Sites'
|
|
47
|
+
},
|
|
48
|
+
uac: {
|
|
49
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_groupName_uac',
|
|
50
|
+
fallback: 'UAC Gruppen'
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
lastOnline: {
|
|
54
|
+
fewMinutes: {
|
|
55
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_lastOnline_fewMinutes',
|
|
56
|
+
fallback: 'zul. online vor wenigen Minuten'
|
|
57
|
+
},
|
|
58
|
+
minutes: {
|
|
59
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_lastOnline_minutes',
|
|
60
|
+
fallback: 'zul. online vor ##minutes## Minuten'
|
|
61
|
+
},
|
|
62
|
+
today: {
|
|
63
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_lastOnline_today',
|
|
64
|
+
fallback: 'zul. online heute um ##time## Uhr'
|
|
65
|
+
},
|
|
66
|
+
yesterday: {
|
|
67
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_lastOnline_yesterday',
|
|
68
|
+
fallback: 'zul. online gestern um ##time## Uhr'
|
|
69
|
+
},
|
|
70
|
+
days: {
|
|
71
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_lastOnline_days',
|
|
72
|
+
fallback: 'zul. online vor ##days## Tagen'
|
|
73
|
+
},
|
|
74
|
+
months: {
|
|
75
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_lastOnline_months',
|
|
76
|
+
fallback: 'zul. online vor ##months## Monaten'
|
|
77
|
+
},
|
|
78
|
+
years: {
|
|
79
|
+
stringName: 'txt_chayns_components_person_finder_components_personFinder_lastOnline_years',
|
|
80
|
+
fallback: 'zul. online vor ##years## Jahren'
|
|
12
81
|
}
|
|
13
82
|
}
|
|
14
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textStrings.js","names":["components","personFinder","wrapper","body","group","loadMore","stringName","fallback"],"sources":["../../../src/constants/textStrings.ts"],"sourcesContent":["export default {\n components: {\n personFinder: {\n wrapper: {\n body: {\n group: {\n loadMore: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_wrapper_body_group_loadMore',\n fallback: 'Mehr',\n },\n },\n },\n },\n },\n },\n} as const;\n"],"mappings":"AAAA,eAAe;
|
|
1
|
+
{"version":3,"file":"textStrings.js","names":["PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","components","personFinder","wrapper","body","group","loadMore","stringName","fallback","errorMessage","minSearchLength","noResults","emptySearch","item","chaynsId","commonSites","groupName","person","site","uac","lastOnline","fewMinutes","minutes","today","yesterday","days","months","years"],"sources":["../../../src/constants/textStrings.ts"],"sourcesContent":["export const PERSON_FINDER_TEXTSTRING_LIBRARY_NAME = '@chayns-components-person-finder';\n\nexport default {\n components: {\n personFinder: {\n wrapper: {\n body: {\n group: {\n loadMore: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_wrapper_body_group_loadMore',\n fallback: 'Mehr',\n },\n errorMessage: {\n minSearchLength: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_wrapper_body_group_errorMessage_minSearchLength',\n fallback: 'Gib einen Suchbegriff mit mindestens drei Zeichen ein.',\n },\n noResults: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_wrapper_body_group_errorMessage_noResults',\n fallback:\n 'Es konnten keine ##groupName## zu der Suche \"##search##\" gefunden werden.',\n },\n emptySearch: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_wrapper_body_group_errorMessage_emptySearch',\n fallback:\n 'Gib einen Suchbegriff ein, um nach ##groupName## zu suchen.',\n },\n },\n },\n },\n item: {\n chaynsId: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_wrapper_item_chaynsId',\n fallback: 'chaynsID: ##id##',\n },\n commonSites: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_wrapper_item_commonSites',\n fallback: '##count## gemeinsame Sites',\n },\n },\n },\n groupName: {\n person: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_groupName_person',\n fallback: 'Personen',\n },\n site: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_groupName_site',\n fallback: 'Sites',\n },\n uac: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_groupName_uac',\n fallback: 'UAC Gruppen',\n },\n },\n lastOnline: {\n fewMinutes: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_lastOnline_fewMinutes',\n fallback: 'zul. online vor wenigen Minuten',\n },\n minutes: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_lastOnline_minutes',\n fallback: 'zul. online vor ##minutes## Minuten',\n },\n today: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_lastOnline_today',\n fallback: 'zul. online heute um ##time## Uhr',\n },\n yesterday: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_lastOnline_yesterday',\n fallback: 'zul. online gestern um ##time## Uhr',\n },\n days: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_lastOnline_days',\n fallback: 'zul. online vor ##days## Tagen',\n },\n months: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_lastOnline_months',\n fallback: 'zul. online vor ##months## Monaten',\n },\n years: {\n stringName:\n 'txt_chayns_components_person_finder_components_personFinder_lastOnline_years',\n fallback: 'zul. online vor ##years## Jahren',\n },\n },\n },\n },\n} as const;\n"],"mappings":"AAAA,OAAO,MAAMA,qCAAqC,GAAG,kCAAkC;AAEvF,eAAe;EACXC,UAAU,EAAE;IACRC,YAAY,EAAE;MACVC,OAAO,EAAE;QACLC,IAAI,EAAE;UACFC,KAAK,EAAE;YACHC,QAAQ,EAAE;cACNC,UAAU,EACN,yFAAyF;cAC7FC,QAAQ,EAAE;YACd,CAAC;YACDC,YAAY,EAAE;cACVC,eAAe,EAAE;gBACbH,UAAU,EACN,6GAA6G;gBACjHC,QAAQ,EAAE;cACd,CAAC;cACDG,SAAS,EAAE;gBACPJ,UAAU,EACN,uGAAuG;gBAC3GC,QAAQ,EACJ;cACR,CAAC;cACDI,WAAW,EAAE;gBACTL,UAAU,EACN,yGAAyG;gBAC7GC,QAAQ,EACJ;cACR;YACJ;UACJ;QACJ,CAAC;QACDK,IAAI,EAAE;UACFC,QAAQ,EAAE;YACNP,UAAU,EACN,mFAAmF;YACvFC,QAAQ,EAAE;UACd,CAAC;UACDO,WAAW,EAAE;YACTR,UAAU,EACN,sFAAsF;YAC1FC,QAAQ,EAAE;UACd;QACJ;MACJ,CAAC;MACDQ,SAAS,EAAE;QACPC,MAAM,EAAE;UACJV,UAAU,EACN,8EAA8E;UAClFC,QAAQ,EAAE;QACd,CAAC;QACDU,IAAI,EAAE;UACFX,UAAU,EACN,4EAA4E;UAChFC,QAAQ,EAAE;QACd,CAAC;QACDW,GAAG,EAAE;UACDZ,UAAU,EACN,2EAA2E;UAC/EC,QAAQ,EAAE;QACd;MACJ,CAAC;MACDY,UAAU,EAAE;QACRC,UAAU,EAAE;UACRd,UAAU,EACN,mFAAmF;UACvFC,QAAQ,EAAE;QACd,CAAC;QACDc,OAAO,EAAE;UACLf,UAAU,EACN,gFAAgF;UACpFC,QAAQ,EAAE;QACd,CAAC;QACDe,KAAK,EAAE;UACHhB,UAAU,EACN,8EAA8E;UAClFC,QAAQ,EAAE;QACd,CAAC;QACDgB,SAAS,EAAE;UACPjB,UAAU,EACN,kFAAkF;UACtFC,QAAQ,EAAE;QACd,CAAC;QACDiB,IAAI,EAAE;UACFlB,UAAU,EACN,6EAA6E;UACjFC,QAAQ,EAAE;QACd,CAAC;QACDkB,MAAM,EAAE;UACJnB,UAAU,EACN,+EAA+E;UACnFC,QAAQ,EAAE;QACd,CAAC;QACDmB,KAAK,EAAE;UACHpB,UAAU,EACN,8EAA8E;UAClFC,QAAQ,EAAE;QACd;MACJ;IACJ;EACJ;AACJ,CAAC","ignoreList":[]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React, { useEffect, useMemo, useState } from 'react';
|
|
2
2
|
import { LoadingState } from '../types/personFinder';
|
|
3
|
-
import { isSiteEntry } from '../utils/personFinder';
|
|
3
|
+
import { formatLastOnline, getPersonFinderTextstringValue, isSiteEntry } from '../utils/personFinder';
|
|
4
4
|
import { VerificationBadge } from '@chayns-components/core';
|
|
5
5
|
import { usePersonFinder } from '../components/PersonFinderProvider';
|
|
6
6
|
import { StyledPersonFinderGroupErrorMessage } from '../components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.styles';
|
|
7
|
+
import textStrings from '../constants/textStrings';
|
|
7
8
|
export const useClosestElementAbove = (containerRef, itemClass) => {
|
|
8
9
|
const [closestElement, setClosestElement] = useState(null);
|
|
9
10
|
useEffect(() => {
|
|
@@ -37,6 +38,7 @@ export const useClosestElementAbove = (containerRef, itemClass) => {
|
|
|
37
38
|
};
|
|
38
39
|
export const usePersonFinderItem = entry => {
|
|
39
40
|
const isSite = isSiteEntry(entry);
|
|
41
|
+
const ts = textStrings.components.personFinder;
|
|
40
42
|
const {
|
|
41
43
|
url,
|
|
42
44
|
commonSites,
|
|
@@ -44,12 +46,31 @@ export const usePersonFinderItem = entry => {
|
|
|
44
46
|
firstName,
|
|
45
47
|
lastName,
|
|
46
48
|
id,
|
|
47
|
-
isVerified
|
|
49
|
+
isVerified,
|
|
50
|
+
lastOnlineTime
|
|
48
51
|
} = entry;
|
|
49
52
|
const imageUrl = `https://sub60.tobit.com/${isSite ? 'l' : 'u'}/${id}?size=120`;
|
|
50
53
|
const titleElement = isVerified && /*#__PURE__*/React.createElement(VerificationBadge, null);
|
|
51
54
|
const title = isSite ? name : `${firstName ?? ''} ${lastName ?? ''}`;
|
|
52
|
-
|
|
55
|
+
let subtitle = getPersonFinderTextstringValue({
|
|
56
|
+
textstring: ts.wrapper.item.chaynsId,
|
|
57
|
+
replacements: {
|
|
58
|
+
id: id
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
if (lastOnlineTime) {
|
|
62
|
+
subtitle += ` - ${formatLastOnline(new Date(lastOnlineTime))}`;
|
|
63
|
+
} else if (commonSites) {
|
|
64
|
+
subtitle += ` - ${getPersonFinderTextstringValue({
|
|
65
|
+
textstring: ts.wrapper.item.commonSites,
|
|
66
|
+
replacements: {
|
|
67
|
+
count: commonSites
|
|
68
|
+
}
|
|
69
|
+
})}`;
|
|
70
|
+
}
|
|
71
|
+
if (isSite) {
|
|
72
|
+
subtitle = url;
|
|
73
|
+
}
|
|
53
74
|
return {
|
|
54
75
|
isSite,
|
|
55
76
|
title,
|
|
@@ -96,18 +117,32 @@ export const useErrorMessage = ({
|
|
|
96
117
|
entries,
|
|
97
118
|
groupName,
|
|
98
119
|
areOnlyFriendsGiven
|
|
99
|
-
}) =>
|
|
120
|
+
}) => {
|
|
121
|
+
const ts = textStrings.components.personFinder.wrapper.body.group.errorMessage;
|
|
100
122
|
if (search.length <= 2 && !areOnlyFriendsGiven) {
|
|
101
|
-
return /*#__PURE__*/React.createElement(StyledPersonFinderGroupErrorMessage, null,
|
|
123
|
+
return /*#__PURE__*/React.createElement(StyledPersonFinderGroupErrorMessage, null, getPersonFinderTextstringValue({
|
|
124
|
+
textstring: ts.minSearchLength
|
|
125
|
+
}));
|
|
102
126
|
}
|
|
103
127
|
if (entries.length === 0) {
|
|
104
128
|
if (loadingState === LoadingState.Error && search.length) {
|
|
105
|
-
return /*#__PURE__*/React.createElement(StyledPersonFinderGroupErrorMessage, null,
|
|
129
|
+
return /*#__PURE__*/React.createElement(StyledPersonFinderGroupErrorMessage, null, getPersonFinderTextstringValue({
|
|
130
|
+
textstring: ts.noResults,
|
|
131
|
+
replacements: {
|
|
132
|
+
groupName,
|
|
133
|
+
search
|
|
134
|
+
}
|
|
135
|
+
}));
|
|
106
136
|
}
|
|
107
137
|
if (search.length === 0) {
|
|
108
|
-
return /*#__PURE__*/React.createElement(StyledPersonFinderGroupErrorMessage, null,
|
|
138
|
+
return /*#__PURE__*/React.createElement(StyledPersonFinderGroupErrorMessage, null, getPersonFinderTextstringValue({
|
|
139
|
+
textstring: ts.emptySearch,
|
|
140
|
+
replacements: {
|
|
141
|
+
groupName
|
|
142
|
+
}
|
|
143
|
+
}));
|
|
109
144
|
}
|
|
110
145
|
}
|
|
111
146
|
return null;
|
|
112
|
-
}
|
|
147
|
+
};
|
|
113
148
|
//# sourceMappingURL=personFinder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personFinder.js","names":["React","useEffect","useMemo","useState","LoadingState","isSiteEntry","VerificationBadge","usePersonFinder","StyledPersonFinderGroupErrorMessage","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","url","commonSites","name","firstName","lastName","id","isVerified","imageUrl","titleElement","createElement","title","subtitle","usePersonFinderSmallItem","useFriends","personId","friends","removeFriend","addFriend","isFriend","map","includes","useOnlyFriends","entries","length","friendIds","Set","friend","every","has","useErrorMessage","loadingState","search","groupName","areOnlyFriendsGiven","Error"],"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 { isSiteEntry } 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';\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\n const { url, commonSites, name, firstName, lastName, id, isVerified } = entry as PersonEntry &\n 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 const subtitle = isSite\n ? url\n : `chaynsID: ${id as string}${commonSites ? ` - ${commonSites as number} gemeinsame Sites` : ''}`;\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 useMemo(() => {\n if (search.length <= 2 && !areOnlyFriendsGiven) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n Gib einen Suchbegriff mit mindestens drei Zeichen ein.\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n\n if (entries.length === 0) {\n if (loadingState === LoadingState.Error && search.length) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n Es konnten keine {groupName} zu der Suche "\n {search}" gefunden werden.\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n\n if (search.length === 0) {\n return (\n <StyledPersonFinderGroupErrorMessage>\n Gib einen Suchbegriff ein, um nach {groupName} zu suchen.\n </StyledPersonFinderGroupErrorMessage>\n );\n }\n }\n\n return null;\n }, [areOnlyFriendsGiven, entries.length, groupName, loadingState, search]);\n"],"mappings":"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","ignoreList":[]}
|
|
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":[]}
|
package/lib/esm/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { default as PersonFinder } from './components/person-finder/PersonFinder';
|
|
2
|
-
export { PersonFinderFilterTypes, Priority } from './types/personFinder';
|
|
2
|
+
export { PersonFinderFilterTypes, Priority, RelationMode } from './types/personFinder';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["default","PersonFinder","PersonFinderFilterTypes","Priority"],"sources":["../../src/index.ts"],"sourcesContent":["export { default as PersonFinder } from './components/person-finder/PersonFinder';\nexport { type PersonFinderRef } from './components/person-finder/person-finder-wrapper/PersonFinderWrapper';\nexport {\n PersonFinderFilterTypes,\n Priority,\n type PersonEntry,\n type DefaultEntry,\n type SiteEntry,\n type PersonFinderEntry,\n type UACFilter,\n type UACEntry,\n} from './types/personFinder';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,YAAY,QAAQ,yCAAyC;AAEjF,SACIC,uBAAuB,EACvBC,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","PersonFinder","PersonFinderFilterTypes","Priority","RelationMode"],"sources":["../../src/index.ts"],"sourcesContent":["export { default as PersonFinder } from './components/person-finder/PersonFinder';\nexport { type PersonFinderRef } from './components/person-finder/person-finder-wrapper/PersonFinderWrapper';\nexport {\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n type PersonEntry,\n type DefaultEntry,\n type SiteEntry,\n type PersonFinderEntry,\n type UACFilter,\n type UACEntry,\n} from './types/personFinder';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,YAAY,QAAQ,yCAAyC;AAEjF,SACIC,uBAAuB,EACvBC,QAAQ,EACRC,YAAY,QAOT,sBAAsB","ignoreList":[]}
|
|
@@ -9,6 +9,11 @@ export let Priority = /*#__PURE__*/function (Priority) {
|
|
|
9
9
|
Priority[Priority["NORMAL"] = 1] = "NORMAL";
|
|
10
10
|
return Priority;
|
|
11
11
|
}({});
|
|
12
|
+
export let RelationMode = /*#__PURE__*/function (RelationMode) {
|
|
13
|
+
RelationMode["PERSON"] = "person";
|
|
14
|
+
RelationMode["SITE"] = "site";
|
|
15
|
+
return RelationMode;
|
|
16
|
+
}({});
|
|
12
17
|
export let LoadingState = /*#__PURE__*/function (LoadingState) {
|
|
13
18
|
LoadingState["None"] = "none";
|
|
14
19
|
LoadingState["Pending"] = "pending";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personFinder.js","names":["PersonFinderFilterTypes","Priority","LoadingState"],"sources":["../../../src/types/personFinder.ts"],"sourcesContent":["export enum PersonFinderFilterTypes {\n PERSON = 'person',\n SITE = 'site',\n UAC = 'uac',\n}\n\nexport enum Priority {\n HIGH,\n NORMAL,\n}\n\nexport interface PersonFinderData {\n searchString: string;\n count: number;\n skip: number;\n entries: PersonFinderEntry[];\n}\n\nexport type PersonFinderDataMap = {\n [K in PersonFinderFilterTypes]?: PersonFinderData;\n};\n\nexport interface UACFilter {\n groupId: number;\n}\n\nexport enum LoadingState {\n None = 'none',\n Pending = 'pending',\n Success = 'success',\n Error = 'error',\n}\n\nexport type LoadingStateMap = { [K in PersonFinderFilterTypes]?: LoadingState };\n\nexport interface DefaultEntry {\n id: string;\n name: string;\n}\n\nexport type PersonFinderEntry = PersonEntry | SiteEntry | UACEntry;\n\nexport interface PersonEntry {\n id: string;\n firstName: string;\n lastName: string;\n commonSites: number;\n isVerified: boolean;\n type: PersonFinderFilterTypes.PERSON;\n}\n\nexport interface SiteEntry {\n id: string;\n url: string;\n name: string;\n type: PersonFinderFilterTypes.SITE;\n}\n\nexport interface UACEntry {\n id: number;\n name: string;\n isSystemGroup: boolean;\n}\n\nexport interface SiteEntryResult {\n name: string;\n siteId: string;\n locationId: number;\n lastLogin: number | null;\n score: number;\n domain: string;\n}\n\nexport interface PersonEntryResult {\n personId: string;\n userId: number;\n firstName: string;\n lastName: string;\n relationCount: number;\n score: number;\n signOfLife: Date;\n verified: boolean;\n}\n\nexport type ThrottledFunction<T extends (...args: any[]) => any> = {\n (...args: Parameters<T>): ReturnType<T>;\n cancel: () => void;\n flush: () => void;\n};\n"],"mappings":"AAAA,WAAYA,uBAAuB,0BAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAA,OAAvBA,uBAAuB;AAAA;AAMnC,WAAYC,QAAQ,0BAARA,QAAQ;EAARA,QAAQ,CAARA,QAAQ;EAARA,QAAQ,CAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA;
|
|
1
|
+
{"version":3,"file":"personFinder.js","names":["PersonFinderFilterTypes","Priority","RelationMode","LoadingState"],"sources":["../../../src/types/personFinder.ts"],"sourcesContent":["export enum PersonFinderFilterTypes {\n PERSON = 'person',\n SITE = 'site',\n UAC = 'uac',\n}\n\nexport enum Priority {\n HIGH,\n NORMAL,\n}\n\nexport enum RelationMode {\n PERSON = 'person',\n SITE = 'site',\n}\n\nexport interface PersonFinderData {\n searchString: string;\n count: number;\n skip: number;\n entries: PersonFinderEntry[];\n}\n\nexport type PersonFinderDataMap = {\n [K in PersonFinderFilterTypes]?: PersonFinderData;\n};\n\nexport interface UACFilter {\n groupId: number;\n}\n\nexport enum LoadingState {\n None = 'none',\n Pending = 'pending',\n Success = 'success',\n Error = 'error',\n}\n\nexport type LoadingStateMap = { [K in PersonFinderFilterTypes]?: LoadingState };\n\nexport interface DefaultEntry {\n id: string;\n name: string;\n}\n\nexport type PersonFinderEntry = PersonEntry | SiteEntry | UACEntry;\n\nexport interface PersonEntry {\n id: string;\n firstName: string;\n lastName: string;\n commonSites: number;\n isVerified: boolean;\n type: PersonFinderFilterTypes.PERSON;\n lastOnlineTime?: Date;\n}\n\nexport interface SiteEntry {\n id: string;\n url: string;\n name: string;\n type: PersonFinderFilterTypes.SITE;\n}\n\nexport interface UACEntry {\n id: number;\n name: string;\n isSystemGroup: boolean;\n}\n\nexport interface SiteEntryResult {\n name: string;\n siteId: string;\n locationId: number;\n lastLogin: number | null;\n score: number;\n domain: string;\n}\n\nexport interface PersonEntryResult {\n personId: string;\n userId: number;\n firstName: string;\n lastName: string;\n relationCount: number;\n score: number;\n signOfLife: Date;\n verified: boolean;\n}\n\nexport type ThrottledFunction<T extends (...args: any[]) => any> = {\n (...args: Parameters<T>): ReturnType<T>;\n cancel: () => void;\n flush: () => void;\n};\n"],"mappings":"AAAA,WAAYA,uBAAuB,0BAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAA,OAAvBA,uBAAuB;AAAA;AAMnC,WAAYC,QAAQ,0BAARA,QAAQ;EAARA,QAAQ,CAARA,QAAQ;EAARA,QAAQ,CAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA;AAKpB,WAAYC,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAoBxB,WAAYC,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA","ignoreList":[]}
|
package/lib/esm/utils/convert.js
CHANGED
|
@@ -5,12 +5,15 @@ export const convertSiteEntry = entries => entries.map(entry => ({
|
|
|
5
5
|
url: `https://${entry.domain}`,
|
|
6
6
|
type: PersonFinderFilterTypes.SITE
|
|
7
7
|
}));
|
|
8
|
-
export const convertPersonEntry = entries
|
|
8
|
+
export const convertPersonEntry = (entries, {
|
|
9
|
+
shouldShowLastOnlineTime
|
|
10
|
+
} = {}) => entries.map(entry => ({
|
|
9
11
|
id: entry.personId,
|
|
10
12
|
firstName: entry.firstName,
|
|
11
13
|
lastName: entry.lastName,
|
|
12
14
|
commonSites: entry.relationCount,
|
|
13
15
|
isVerified: entry.verified,
|
|
14
|
-
type: PersonFinderFilterTypes.PERSON
|
|
16
|
+
type: PersonFinderFilterTypes.PERSON,
|
|
17
|
+
lastOnlineTime: shouldShowLastOnlineTime ? entry.signOfLife : undefined
|
|
15
18
|
}));
|
|
16
19
|
//# sourceMappingURL=convert.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","names":["PersonFinderFilterTypes","convertSiteEntry","entries","map","entry","id","siteId","name","url","domain","type","SITE","convertPersonEntry","personId","firstName","lastName","commonSites","relationCount","isVerified","verified","PERSON"],"sources":["../../../src/utils/convert.ts"],"sourcesContent":["import {\n PersonEntry,\n PersonEntryResult,\n PersonFinderFilterTypes,\n SiteEntry,\n SiteEntryResult,\n} from '../types/personFinder';\n\nexport const convertSiteEntry = (entries: SiteEntryResult[]): SiteEntry[] =>\n entries.map((entry) => ({\n id: entry.siteId,\n name: entry.name,\n url: `https://${entry.domain}`,\n type: PersonFinderFilterTypes.SITE,\n }));\n\nexport const convertPersonEntry = (entries: PersonEntryResult[]): PersonEntry[] =>\n entries.map((entry) => ({\n id: entry.personId,\n firstName: entry.firstName,\n lastName: entry.lastName,\n commonSites: entry.relationCount,\n isVerified: entry.verified,\n type: PersonFinderFilterTypes.PERSON,\n }));\n"],"mappings":"AAAA,SAGIA,uBAAuB,QAGpB,uBAAuB;AAE9B,OAAO,MAAMC,gBAAgB,GAAIC,OAA0B,IACvDA,OAAO,CAACC,GAAG,CAAEC,KAAK,KAAM;EACpBC,EAAE,EAAED,KAAK,CAACE,MAAM;EAChBC,IAAI,EAAEH,KAAK,CAACG,IAAI;EAChBC,GAAG,EAAE,WAAWJ,KAAK,CAACK,MAAM,EAAE;EAC9BC,IAAI,EAAEV,uBAAuB,CAACW;AAClC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"convert.js","names":["PersonFinderFilterTypes","convertSiteEntry","entries","map","entry","id","siteId","name","url","domain","type","SITE","convertPersonEntry","shouldShowLastOnlineTime","personId","firstName","lastName","commonSites","relationCount","isVerified","verified","PERSON","lastOnlineTime","signOfLife","undefined"],"sources":["../../../src/utils/convert.ts"],"sourcesContent":["import {\n PersonEntry,\n PersonEntryResult,\n PersonFinderFilterTypes,\n SiteEntry,\n SiteEntryResult,\n} from '../types/personFinder';\n\nexport const convertSiteEntry = (entries: SiteEntryResult[]): SiteEntry[] =>\n entries.map((entry) => ({\n id: entry.siteId,\n name: entry.name,\n url: `https://${entry.domain}`,\n type: PersonFinderFilterTypes.SITE,\n }));\n\ninterface ConvertPersonEntryOptions {\n shouldShowLastOnlineTime?: boolean;\n}\n\nexport const convertPersonEntry = (\n entries: PersonEntryResult[],\n { shouldShowLastOnlineTime }: ConvertPersonEntryOptions = {},\n): PersonEntry[] =>\n entries.map((entry) => ({\n id: entry.personId,\n firstName: entry.firstName,\n lastName: entry.lastName,\n commonSites: entry.relationCount,\n isVerified: entry.verified,\n type: PersonFinderFilterTypes.PERSON,\n lastOnlineTime: shouldShowLastOnlineTime ? entry.signOfLife : undefined,\n }));\n"],"mappings":"AAAA,SAGIA,uBAAuB,QAGpB,uBAAuB;AAE9B,OAAO,MAAMC,gBAAgB,GAAIC,OAA0B,IACvDA,OAAO,CAACC,GAAG,CAAEC,KAAK,KAAM;EACpBC,EAAE,EAAED,KAAK,CAACE,MAAM;EAChBC,IAAI,EAAEH,KAAK,CAACG,IAAI;EAChBC,GAAG,EAAE,WAAWJ,KAAK,CAACK,MAAM,EAAE;EAC9BC,IAAI,EAAEV,uBAAuB,CAACW;AAClC,CAAC,CAAC,CAAC;AAMP,OAAO,MAAMC,kBAAkB,GAAGA,CAC9BV,OAA4B,EAC5B;EAAEW;AAAoD,CAAC,GAAG,CAAC,CAAC,KAE5DX,OAAO,CAACC,GAAG,CAAEC,KAAK,KAAM;EACpBC,EAAE,EAAED,KAAK,CAACU,QAAQ;EAClBC,SAAS,EAAEX,KAAK,CAACW,SAAS;EAC1BC,QAAQ,EAAEZ,KAAK,CAACY,QAAQ;EACxBC,WAAW,EAAEb,KAAK,CAACc,aAAa;EAChCC,UAAU,EAAEf,KAAK,CAACgB,QAAQ;EAC1BV,IAAI,EAAEV,uBAAuB,CAACqB,MAAM;EACpCC,cAAc,EAAET,wBAAwB,GAAGT,KAAK,CAACmB,UAAU,GAAGC;AAClE,CAAC,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,15 +1,40 @@
|
|
|
1
|
-
import { PersonFinderFilterTypes } from '../types/personFinder';
|
|
1
|
+
import { PersonFinderFilterTypes, RelationMode } from '../types/personFinder';
|
|
2
|
+
import { getTextstringValue, ttsToITextString } from '@chayns-components/textstring';
|
|
2
3
|
import { getPersons } from '../api/person/get';
|
|
3
4
|
import { getSites } from '../api/site/get';
|
|
4
5
|
import { convertPersonEntry, convertSiteEntry } from './convert';
|
|
5
6
|
import { getUser } from 'chayns-api';
|
|
7
|
+
import textStrings, { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';
|
|
8
|
+
const normalizeTextstringReplacements = replacements => {
|
|
9
|
+
if (!replacements) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
return Object.entries(replacements).reduce((acc, [key, value]) => {
|
|
13
|
+
acc[`##${key}##`] = value?.toString() ?? '';
|
|
14
|
+
return acc;
|
|
15
|
+
}, {});
|
|
16
|
+
};
|
|
17
|
+
export const getPersonFinderTextstringValue = ({
|
|
18
|
+
textstring,
|
|
19
|
+
replacements
|
|
20
|
+
}) => getTextstringValue({
|
|
21
|
+
libraryName: PERSON_FINDER_TEXTSTRING_LIBRARY_NAME,
|
|
22
|
+
textstring: ttsToITextString(textstring),
|
|
23
|
+
replacements: normalizeTextstringReplacements(replacements)
|
|
24
|
+
});
|
|
6
25
|
export const getGroupName = key => {
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
26
|
+
const groupNames = {
|
|
27
|
+
[PersonFinderFilterTypes.PERSON]: textStrings.components.personFinder.groupName.person,
|
|
28
|
+
[PersonFinderFilterTypes.SITE]: textStrings.components.personFinder.groupName.site,
|
|
29
|
+
[PersonFinderFilterTypes.UAC]: textStrings.components.personFinder.groupName.uac
|
|
11
30
|
};
|
|
12
|
-
|
|
31
|
+
const textstring = groupNames[key];
|
|
32
|
+
if (!textstring) {
|
|
33
|
+
return key;
|
|
34
|
+
}
|
|
35
|
+
return getPersonFinderTextstringValue({
|
|
36
|
+
textstring
|
|
37
|
+
});
|
|
13
38
|
};
|
|
14
39
|
export const isSiteEntry = entry => 'name' in entry && !('firstName' in entry);
|
|
15
40
|
export const filterDataByKeys = (data = {}, keys = [], options = {}) => {
|
|
@@ -72,7 +97,8 @@ export const destructureData = (data, filterType) => ({
|
|
|
72
97
|
export const loadData = async ({
|
|
73
98
|
skipMap,
|
|
74
99
|
searchString,
|
|
75
|
-
filter
|
|
100
|
+
filter,
|
|
101
|
+
relationMode
|
|
76
102
|
}) => {
|
|
77
103
|
const promises = filter.map(async filterType => {
|
|
78
104
|
const skip = skipMap[filterType] ?? 0;
|
|
@@ -90,7 +116,8 @@ export const loadData = async ({
|
|
|
90
116
|
}
|
|
91
117
|
const data = await getPersons({
|
|
92
118
|
search: searchString,
|
|
93
|
-
skip
|
|
119
|
+
skip,
|
|
120
|
+
relationMode
|
|
94
121
|
});
|
|
95
122
|
return {
|
|
96
123
|
key: PersonFinderFilterTypes.PERSON,
|
|
@@ -98,7 +125,9 @@ export const loadData = async ({
|
|
|
98
125
|
searchString,
|
|
99
126
|
count: data?.count ?? 0,
|
|
100
127
|
skip: skip + (data?.list?.length ?? 0),
|
|
101
|
-
entries: convertPersonEntry(data?.list ?? []
|
|
128
|
+
entries: convertPersonEntry(data?.list ?? [], {
|
|
129
|
+
shouldShowLastOnlineTime: relationMode === RelationMode.SITE
|
|
130
|
+
})
|
|
102
131
|
}
|
|
103
132
|
};
|
|
104
133
|
}
|
|
@@ -142,4 +171,73 @@ export const loadData = async ({
|
|
|
142
171
|
};
|
|
143
172
|
}, {});
|
|
144
173
|
};
|
|
174
|
+
export const formatLastOnline = date => {
|
|
175
|
+
const ts = textStrings.components.personFinder.lastOnline;
|
|
176
|
+
const now = new Date();
|
|
177
|
+
const diffMs = now.getTime() - date.getTime();
|
|
178
|
+
const minutes = Math.floor(diffMs / 1000 / 60);
|
|
179
|
+
const hours = Math.floor(minutes / 60);
|
|
180
|
+
const days = Math.floor(hours / 24);
|
|
181
|
+
const months = Math.floor(days / 30);
|
|
182
|
+
const years = Math.floor(days / 365);
|
|
183
|
+
const isSameDay = date.getDate() === now.getDate() && date.getMonth() === now.getMonth() && date.getFullYear() === now.getFullYear();
|
|
184
|
+
const yesterday = new Date(now);
|
|
185
|
+
yesterday.setDate(now.getDate() - 1);
|
|
186
|
+
const isYesterday = date.getDate() === yesterday.getDate() && date.getMonth() === yesterday.getMonth() && date.getFullYear() === yesterday.getFullYear();
|
|
187
|
+
const time = date.toLocaleTimeString('de-DE', {
|
|
188
|
+
hour: '2-digit',
|
|
189
|
+
minute: '2-digit'
|
|
190
|
+
});
|
|
191
|
+
if (minutes < 5) {
|
|
192
|
+
return getPersonFinderTextstringValue({
|
|
193
|
+
textstring: ts.fewMinutes
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
if (minutes < 60) {
|
|
197
|
+
return getPersonFinderTextstringValue({
|
|
198
|
+
textstring: ts.minutes,
|
|
199
|
+
replacements: {
|
|
200
|
+
minutes
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
if (hours < 24 && isSameDay) {
|
|
205
|
+
return getPersonFinderTextstringValue({
|
|
206
|
+
textstring: ts.today,
|
|
207
|
+
replacements: {
|
|
208
|
+
time
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
if (isYesterday) {
|
|
213
|
+
return getPersonFinderTextstringValue({
|
|
214
|
+
textstring: ts.yesterday,
|
|
215
|
+
replacements: {
|
|
216
|
+
time
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
if (days < 30) {
|
|
221
|
+
return getPersonFinderTextstringValue({
|
|
222
|
+
textstring: ts.days,
|
|
223
|
+
replacements: {
|
|
224
|
+
days
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
if (months < 12) {
|
|
229
|
+
return getPersonFinderTextstringValue({
|
|
230
|
+
textstring: ts.months,
|
|
231
|
+
replacements: {
|
|
232
|
+
months
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
return getPersonFinderTextstringValue({
|
|
237
|
+
textstring: ts.years,
|
|
238
|
+
replacements: {
|
|
239
|
+
years
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
};
|
|
145
243
|
//# sourceMappingURL=personFinder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personFinder.js","names":["PersonFinderFilterTypes","getPersons","getSites","convertPersonEntry","convertSiteEntry","getUser","getGroupName","key","names","person","site","uac","isSiteEntry","entry","filterDataByKeys","data","keys","options","filterSingle","filteredEntries","entries","excludedEntryIds","Array","isArray","length","filter","e","includes","id","excludedCount","count","Math","max","relevantKeys","Object","reduce","acc","original","searchString","skip","filteredEntry","shouldShowOwnUser","PERSON","user","personId","ownUserEntry","commonSites","firstName","isVerified","lastName","type","fullName","Boolean","join","trim","toLowerCase","capitalizeFirstLetter","str","charAt","toUpperCase","slice","destructureData","filterType","loadData","skipMap","promises","map","value","search","list","SITE","filteredList","siteId","results","Promise","all","item"],"sources":["../../../src/utils/personFinder.ts"],"sourcesContent":["import {\n PersonEntry,\n PersonFinderData,\n PersonFinderDataMap,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n SiteEntry,\n} from '../types/personFinder';\nimport { getPersons } from '../api/person/get';\nimport { getSites } from '../api/site/get';\nimport { convertPersonEntry, convertSiteEntry } from './convert';\nimport { getUser } from 'chayns-api';\n\nexport const getGroupName = (key: string) => {\n const names: { [key: string]: string } = {\n person: 'Personen',\n site: 'Sites',\n uac: 'UAC Gruppen',\n };\n\n return names[key];\n};\n\nexport const isSiteEntry = (entry: PersonEntry | SiteEntry): entry is SiteEntry =>\n 'name' in entry && !('firstName' in entry);\n\ninterface FilterDataByKeysOptions {\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n}\n\nexport const filterDataByKeys = (\n data: { [key: string]: PersonFinderData } = {},\n keys: PersonFinderFilterTypes[] = [],\n options: FilterDataByKeysOptions = {},\n): { [key: string]: PersonFinderData } => {\n const filterSingle = (entry: PersonFinderData): PersonFinderData => {\n let filteredEntries = entry.entries;\n\n const { excludedEntryIds } = options;\n\n if (Array.isArray(excludedEntryIds) && excludedEntryIds.length > 0) {\n filteredEntries = filteredEntries.filter((e) => !excludedEntryIds.includes(e.id));\n }\n\n const excludedCount = entry.entries.length - filteredEntries.length;\n\n return {\n ...entry,\n entries: filteredEntries,\n count: Math.max(0, entry.count - excludedCount),\n };\n };\n\n const relevantKeys = keys.length > 0 ? keys : Object.keys(data);\n\n return relevantKeys.reduce((acc, key) => {\n const original = data[key] ?? { searchString: '', count: 0, skip: 0, entries: [] };\n\n const filteredEntry = filterSingle(original);\n\n if (options.shouldShowOwnUser && key === PersonFinderFilterTypes.PERSON) {\n const user = getUser();\n\n if (typeof user?.personId === 'string') {\n // Ensure that the own user is always included in the person filter\n const ownUserEntry: PersonEntry = {\n commonSites: 0,\n firstName: user.firstName ?? '',\n id: user.personId,\n isVerified: false,\n lastName: user.lastName ?? '',\n type: PersonFinderFilterTypes.PERSON,\n };\n\n const fullName = [ownUserEntry.firstName, ownUserEntry.lastName]\n .filter(Boolean)\n .join(' ')\n .trim();\n\n if (\n original.searchString.length < 3 ||\n fullName.toLowerCase().includes(original.searchString.toLowerCase())\n ) {\n filteredEntry.entries = [ownUserEntry, ...filteredEntry.entries];\n filteredEntry.count += 1; // Increment count to account for the own user\n }\n }\n }\n\n return { ...acc, [key]: filteredEntry };\n }, {});\n};\n\nexport const capitalizeFirstLetter = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);\n\nexport const destructureData = (\n data: Record<string, PersonFinderData> | undefined,\n filterType: string,\n) => ({\n count: data?.[filterType]?.count ?? 0,\n skip: data?.[filterType]?.skip ?? 0,\n searchString: data?.[filterType]?.searchString ?? '',\n entries: data?.[filterType]?.entries ?? [],\n});\n\ninterface LoadDataOptions {\n searchString: string;\n filter: PersonFinderFilterTypes[];\n skipMap: Partial<Record<PersonFinderFilterTypes, number>>;\n}\n\nexport const loadData = async ({\n skipMap,\n searchString,\n filter,\n}: LoadDataOptions): Promise<PersonFinderDataMap> => {\n const promises = filter.map(async (filterType) => {\n const skip = skipMap[filterType] ?? 0;\n\n if (filterType === PersonFinderFilterTypes.PERSON) {\n if (searchString.length <= 2) {\n return {\n key: PersonFinderFilterTypes.PERSON,\n value: {\n searchString,\n count: 0,\n skip: 0,\n entries: [],\n },\n };\n }\n\n const data = await getPersons({ search: searchString, skip });\n\n return {\n key: PersonFinderFilterTypes.PERSON,\n value: {\n searchString,\n count: data?.count ?? 0,\n skip: skip + (data?.list?.length ?? 0),\n entries: convertPersonEntry(data?.list ?? []),\n },\n };\n }\n\n if (filterType === PersonFinderFilterTypes.SITE) {\n if (searchString.length <= 2) {\n return {\n key: PersonFinderFilterTypes.SITE,\n value: {\n searchString,\n count: 0,\n skip: 0,\n entries: [],\n },\n };\n }\n\n const data = await getSites({ search: searchString, skip });\n\n const filteredList = data?.list.filter(({ siteId }) => siteId !== null);\n\n return {\n key: PersonFinderFilterTypes.SITE,\n value: {\n searchString,\n count: data?.count ?? 0,\n skip: skip + (filteredList?.length ?? 0),\n entries: convertSiteEntry(filteredList ?? []),\n },\n };\n }\n\n return null;\n });\n\n const results = await Promise.all(promises);\n\n return results.reduce<PersonFinderDataMap>((acc, item) => {\n if (!item) return acc;\n\n return {\n ...acc,\n [item.key]: item.value,\n };\n }, {});\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"personFinder.js","names":["PersonFinderFilterTypes","RelationMode","getTextstringValue","ttsToITextString","getPersons","getSites","convertPersonEntry","convertSiteEntry","getUser","textStrings","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","normalizeTextstringReplacements","replacements","undefined","Object","entries","reduce","acc","key","value","toString","getPersonFinderTextstringValue","textstring","libraryName","getGroupName","groupNames","PERSON","components","personFinder","groupName","person","SITE","site","UAC","uac","isSiteEntry","entry","filterDataByKeys","data","keys","options","filterSingle","filteredEntries","excludedEntryIds","Array","isArray","length","filter","e","includes","id","excludedCount","count","Math","max","relevantKeys","original","searchString","skip","filteredEntry","shouldShowOwnUser","user","personId","ownUserEntry","commonSites","firstName","isVerified","lastName","type","fullName","Boolean","join","trim","toLowerCase","capitalizeFirstLetter","str","charAt","toUpperCase","slice","destructureData","filterType","loadData","skipMap","relationMode","promises","map","search","list","shouldShowLastOnlineTime","filteredList","siteId","results","Promise","all","item","formatLastOnline","date","ts","lastOnline","now","Date","diffMs","getTime","minutes","floor","hours","days","months","years","isSameDay","getDate","getMonth","getFullYear","yesterday","setDate","isYesterday","time","toLocaleTimeString","hour","minute","fewMinutes","today"],"sources":["../../../src/utils/personFinder.ts"],"sourcesContent":["import {\n PersonEntry,\n PersonFinderData,\n PersonFinderDataMap,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n RelationMode,\n SiteEntry,\n} from '../types/personFinder';\nimport { getTextstringValue, ttsToITextString } from '@chayns-components/textstring';\nimport { getPersons } from '../api/person/get';\nimport { getSites } from '../api/site/get';\nimport { convertPersonEntry, convertSiteEntry } from './convert';\nimport { getUser } from 'chayns-api';\nimport textStrings, { PERSON_FINDER_TEXTSTRING_LIBRARY_NAME } from '../constants/textStrings';\n\ninterface GetPersonFinderTextstringValueOptions {\n textstring: {\n stringName: string;\n fallback: string;\n };\n replacements?: Record<string, number | string | undefined>;\n}\n\nconst normalizeTextstringReplacements = (\n replacements?: GetPersonFinderTextstringValueOptions['replacements'],\n) => {\n if (!replacements) {\n return undefined;\n }\n\n return Object.entries(replacements).reduce<Record<string, string>>((acc, [key, value]) => {\n acc[`##${key}##`] = value?.toString() ?? '';\n\n return acc;\n }, {});\n};\n\nexport const getPersonFinderTextstringValue = ({\n textstring,\n replacements,\n}: GetPersonFinderTextstringValueOptions) =>\n getTextstringValue({\n libraryName: PERSON_FINDER_TEXTSTRING_LIBRARY_NAME,\n textstring: ttsToITextString(textstring),\n replacements: normalizeTextstringReplacements(replacements),\n });\n\nexport const getGroupName = (key: string) => {\n const groupNames: Partial<\n Record<PersonFinderFilterTypes, { stringName: string; fallback: string }>\n > = {\n [PersonFinderFilterTypes.PERSON]: textStrings.components.personFinder.groupName.person,\n [PersonFinderFilterTypes.SITE]: textStrings.components.personFinder.groupName.site,\n [PersonFinderFilterTypes.UAC]: textStrings.components.personFinder.groupName.uac,\n };\n\n const textstring = groupNames[key as PersonFinderFilterTypes];\n\n if (!textstring) {\n return key;\n }\n\n return getPersonFinderTextstringValue({ textstring });\n};\n\nexport const isSiteEntry = (entry: PersonEntry | SiteEntry): entry is SiteEntry =>\n 'name' in entry && !('firstName' in entry);\n\ninterface FilterDataByKeysOptions {\n excludedEntryIds?: PersonFinderEntry['id'][];\n shouldShowOwnUser?: boolean;\n}\n\nexport const filterDataByKeys = (\n data: { [key: string]: PersonFinderData } = {},\n keys: PersonFinderFilterTypes[] = [],\n options: FilterDataByKeysOptions = {},\n): { [key: string]: PersonFinderData } => {\n const filterSingle = (entry: PersonFinderData): PersonFinderData => {\n let filteredEntries = entry.entries;\n\n const { excludedEntryIds } = options;\n\n if (Array.isArray(excludedEntryIds) && excludedEntryIds.length > 0) {\n filteredEntries = filteredEntries.filter((e) => !excludedEntryIds.includes(e.id));\n }\n\n const excludedCount = entry.entries.length - filteredEntries.length;\n\n return {\n ...entry,\n entries: filteredEntries,\n count: Math.max(0, entry.count - excludedCount),\n };\n };\n\n const relevantKeys = keys.length > 0 ? keys : Object.keys(data);\n\n return relevantKeys.reduce((acc, key) => {\n const original = data[key] ?? { searchString: '', count: 0, skip: 0, entries: [] };\n\n const filteredEntry = filterSingle(original);\n\n if (options.shouldShowOwnUser && key === PersonFinderFilterTypes.PERSON) {\n const user = getUser();\n\n if (typeof user?.personId === 'string') {\n // Ensure that the own user is always included in the person filter\n const ownUserEntry: PersonEntry = {\n commonSites: 0,\n firstName: user.firstName ?? '',\n id: user.personId,\n isVerified: false,\n lastName: user.lastName ?? '',\n type: PersonFinderFilterTypes.PERSON,\n };\n\n const fullName = [ownUserEntry.firstName, ownUserEntry.lastName]\n .filter(Boolean)\n .join(' ')\n .trim();\n\n if (\n original.searchString.length < 3 ||\n fullName.toLowerCase().includes(original.searchString.toLowerCase())\n ) {\n filteredEntry.entries = [ownUserEntry, ...filteredEntry.entries];\n filteredEntry.count += 1; // Increment count to account for the own user\n }\n }\n }\n\n return { ...acc, [key]: filteredEntry };\n }, {});\n};\n\nexport const capitalizeFirstLetter = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);\n\nexport const destructureData = (\n data: Record<string, PersonFinderData> | undefined,\n filterType: string,\n) => ({\n count: data?.[filterType]?.count ?? 0,\n skip: data?.[filterType]?.skip ?? 0,\n searchString: data?.[filterType]?.searchString ?? '',\n entries: data?.[filterType]?.entries ?? [],\n});\n\ninterface LoadDataOptions {\n searchString: string;\n filter: PersonFinderFilterTypes[];\n skipMap: Partial<Record<PersonFinderFilterTypes, number>>;\n relationMode?: RelationMode;\n}\n\nexport const loadData = async ({\n skipMap,\n searchString,\n filter,\n relationMode,\n}: LoadDataOptions): Promise<PersonFinderDataMap> => {\n const promises = filter.map(async (filterType) => {\n const skip = skipMap[filterType] ?? 0;\n\n if (filterType === PersonFinderFilterTypes.PERSON) {\n if (searchString.length <= 2) {\n return {\n key: PersonFinderFilterTypes.PERSON,\n value: {\n searchString,\n count: 0,\n skip: 0,\n entries: [],\n },\n };\n }\n\n const data = await getPersons({ search: searchString, skip, relationMode });\n\n return {\n key: PersonFinderFilterTypes.PERSON,\n value: {\n searchString,\n count: data?.count ?? 0,\n skip: skip + (data?.list?.length ?? 0),\n entries: convertPersonEntry(data?.list ?? [], {\n shouldShowLastOnlineTime: relationMode === RelationMode.SITE,\n }),\n },\n };\n }\n\n if (filterType === PersonFinderFilterTypes.SITE) {\n if (searchString.length <= 2) {\n return {\n key: PersonFinderFilterTypes.SITE,\n value: {\n searchString,\n count: 0,\n skip: 0,\n entries: [],\n },\n };\n }\n\n const data = await getSites({ search: searchString, skip });\n\n const filteredList = data?.list.filter(({ siteId }) => siteId !== null);\n\n return {\n key: PersonFinderFilterTypes.SITE,\n value: {\n searchString,\n count: data?.count ?? 0,\n skip: skip + (filteredList?.length ?? 0),\n entries: convertSiteEntry(filteredList ?? []),\n },\n };\n }\n\n return null;\n });\n\n const results = await Promise.all(promises);\n\n return results.reduce<PersonFinderDataMap>((acc, item) => {\n if (!item) return acc;\n\n return {\n ...acc,\n [item.key]: item.value,\n };\n }, {});\n};\n\nexport const formatLastOnline = (date: Date): string => {\n const ts = textStrings.components.personFinder.lastOnline;\n const now = new Date();\n\n const diffMs = now.getTime() - date.getTime();\n\n const minutes = Math.floor(diffMs / 1000 / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const months = Math.floor(days / 30);\n const years = Math.floor(days / 365);\n\n const isSameDay =\n date.getDate() === now.getDate() &&\n date.getMonth() === now.getMonth() &&\n date.getFullYear() === now.getFullYear();\n\n const yesterday = new Date(now);\n yesterday.setDate(now.getDate() - 1);\n\n const isYesterday =\n date.getDate() === yesterday.getDate() &&\n date.getMonth() === yesterday.getMonth() &&\n date.getFullYear() === yesterday.getFullYear();\n\n const time = date.toLocaleTimeString('de-DE', {\n hour: '2-digit',\n minute: '2-digit',\n });\n\n if (minutes < 5) {\n return getPersonFinderTextstringValue({ textstring: ts.fewMinutes });\n }\n\n if (minutes < 60) {\n return getPersonFinderTextstringValue({\n textstring: ts.minutes,\n replacements: { minutes },\n });\n }\n\n if (hours < 24 && isSameDay) {\n return getPersonFinderTextstringValue({\n textstring: ts.today,\n replacements: { time },\n });\n }\n\n if (isYesterday) {\n return getPersonFinderTextstringValue({\n textstring: ts.yesterday,\n replacements: { time },\n });\n }\n\n if (days < 30) {\n return getPersonFinderTextstringValue({\n textstring: ts.days,\n replacements: { days },\n });\n }\n\n if (months < 12) {\n return getPersonFinderTextstringValue({\n textstring: ts.months,\n replacements: { months },\n });\n }\n\n return getPersonFinderTextstringValue({\n textstring: ts.years,\n replacements: { years },\n });\n};\n"],"mappings":"AAAA,SAKIA,uBAAuB,EACvBC,YAAY,QAET,uBAAuB;AAC9B,SAASC,kBAAkB,EAAEC,gBAAgB,QAAQ,+BAA+B;AACpF,SAASC,UAAU,QAAQ,mBAAmB;AAC9C,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,kBAAkB,EAAEC,gBAAgB,QAAQ,WAAW;AAChE,SAASC,OAAO,QAAQ,YAAY;AACpC,OAAOC,WAAW,IAAIC,qCAAqC,QAAQ,0BAA0B;AAU7F,MAAMC,+BAA+B,GACjCC,YAAoE,IACnE;EACD,IAAI,CAACA,YAAY,EAAE;IACf,OAAOC,SAAS;EACpB;EAEA,OAAOC,MAAM,CAACC,OAAO,CAACH,YAAY,CAAC,CAACI,MAAM,CAAyB,CAACC,GAAG,EAAE,CAACC,GAAG,EAAEC,KAAK,CAAC,KAAK;IACtFF,GAAG,CAAC,KAAKC,GAAG,IAAI,CAAC,GAAGC,KAAK,EAAEC,QAAQ,CAAC,CAAC,IAAI,EAAE;IAE3C,OAAOH,GAAG;EACd,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,CAAC;AAED,OAAO,MAAMI,8BAA8B,GAAGA,CAAC;EAC3CC,UAAU;EACVV;AACmC,CAAC,KACpCV,kBAAkB,CAAC;EACfqB,WAAW,EAAEb,qCAAqC;EAClDY,UAAU,EAAEnB,gBAAgB,CAACmB,UAAU,CAAC;EACxCV,YAAY,EAAED,+BAA+B,CAACC,YAAY;AAC9D,CAAC,CAAC;AAEN,OAAO,MAAMY,YAAY,GAAIN,GAAW,IAAK;EACzC,MAAMO,UAEL,GAAG;IACA,CAACzB,uBAAuB,CAAC0B,MAAM,GAAGjB,WAAW,CAACkB,UAAU,CAACC,YAAY,CAACC,SAAS,CAACC,MAAM;IACtF,CAAC9B,uBAAuB,CAAC+B,IAAI,GAAGtB,WAAW,CAACkB,UAAU,CAACC,YAAY,CAACC,SAAS,CAACG,IAAI;IAClF,CAAChC,uBAAuB,CAACiC,GAAG,GAAGxB,WAAW,CAACkB,UAAU,CAACC,YAAY,CAACC,SAAS,CAACK;EACjF,CAAC;EAED,MAAMZ,UAAU,GAAGG,UAAU,CAACP,GAAG,CAA4B;EAE7D,IAAI,CAACI,UAAU,EAAE;IACb,OAAOJ,GAAG;EACd;EAEA,OAAOG,8BAA8B,CAAC;IAAEC;EAAW,CAAC,CAAC;AACzD,CAAC;AAED,OAAO,MAAMa,WAAW,GAAIC,KAA8B,IACtD,MAAM,IAAIA,KAAK,IAAI,EAAE,WAAW,IAAIA,KAAK,CAAC;AAO9C,OAAO,MAAMC,gBAAgB,GAAGA,CAC5BC,IAAyC,GAAG,CAAC,CAAC,EAC9CC,IAA+B,GAAG,EAAE,EACpCC,OAAgC,GAAG,CAAC,CAAC,KACC;EACtC,MAAMC,YAAY,GAAIL,KAAuB,IAAuB;IAChE,IAAIM,eAAe,GAAGN,KAAK,CAACrB,OAAO;IAEnC,MAAM;MAAE4B;IAAiB,CAAC,GAAGH,OAAO;IAEpC,IAAII,KAAK,CAACC,OAAO,CAACF,gBAAgB,CAAC,IAAIA,gBAAgB,CAACG,MAAM,GAAG,CAAC,EAAE;MAChEJ,eAAe,GAAGA,eAAe,CAACK,MAAM,CAAEC,CAAC,IAAK,CAACL,gBAAgB,CAACM,QAAQ,CAACD,CAAC,CAACE,EAAE,CAAC,CAAC;IACrF;IAEA,MAAMC,aAAa,GAAGf,KAAK,CAACrB,OAAO,CAAC+B,MAAM,GAAGJ,eAAe,CAACI,MAAM;IAEnE,OAAO;MACH,GAAGV,KAAK;MACRrB,OAAO,EAAE2B,eAAe;MACxBU,KAAK,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAElB,KAAK,CAACgB,KAAK,GAAGD,aAAa;IAClD,CAAC;EACL,CAAC;EAED,MAAMI,YAAY,GAAGhB,IAAI,CAACO,MAAM,GAAG,CAAC,GAAGP,IAAI,GAAGzB,MAAM,CAACyB,IAAI,CAACD,IAAI,CAAC;EAE/D,OAAOiB,YAAY,CAACvC,MAAM,CAAC,CAACC,GAAG,EAAEC,GAAG,KAAK;IACrC,MAAMsC,QAAQ,GAAGlB,IAAI,CAACpB,GAAG,CAAC,IAAI;MAAEuC,YAAY,EAAE,EAAE;MAAEL,KAAK,EAAE,CAAC;MAAEM,IAAI,EAAE,CAAC;MAAE3C,OAAO,EAAE;IAAG,CAAC;IAElF,MAAM4C,aAAa,GAAGlB,YAAY,CAACe,QAAQ,CAAC;IAE5C,IAAIhB,OAAO,CAACoB,iBAAiB,IAAI1C,GAAG,KAAKlB,uBAAuB,CAAC0B,MAAM,EAAE;MACrE,MAAMmC,IAAI,GAAGrD,OAAO,CAAC,CAAC;MAEtB,IAAI,OAAOqD,IAAI,EAAEC,QAAQ,KAAK,QAAQ,EAAE;QACpC;QACA,MAAMC,YAAyB,GAAG;UAC9BC,WAAW,EAAE,CAAC;UACdC,SAAS,EAAEJ,IAAI,CAACI,SAAS,IAAI,EAAE;UAC/Bf,EAAE,EAAEW,IAAI,CAACC,QAAQ;UACjBI,UAAU,EAAE,KAAK;UACjBC,QAAQ,EAAEN,IAAI,CAACM,QAAQ,IAAI,EAAE;UAC7BC,IAAI,EAAEpE,uBAAuB,CAAC0B;QAClC,CAAC;QAED,MAAM2C,QAAQ,GAAG,CAACN,YAAY,CAACE,SAAS,EAAEF,YAAY,CAACI,QAAQ,CAAC,CAC3DpB,MAAM,CAACuB,OAAO,CAAC,CACfC,IAAI,CAAC,GAAG,CAAC,CACTC,IAAI,CAAC,CAAC;QAEX,IACIhB,QAAQ,CAACC,YAAY,CAACX,MAAM,GAAG,CAAC,IAChCuB,QAAQ,CAACI,WAAW,CAAC,CAAC,CAACxB,QAAQ,CAACO,QAAQ,CAACC,YAAY,CAACgB,WAAW,CAAC,CAAC,CAAC,EACtE;UACEd,aAAa,CAAC5C,OAAO,GAAG,CAACgD,YAAY,EAAE,GAAGJ,aAAa,CAAC5C,OAAO,CAAC;UAChE4C,aAAa,CAACP,KAAK,IAAI,CAAC,CAAC,CAAC;QAC9B;MACJ;IACJ;IAEA,OAAO;MAAE,GAAGnC,GAAG;MAAE,CAACC,GAAG,GAAGyC;IAAc,CAAC;EAC3C,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,CAAC;AAED,OAAO,MAAMe,qBAAqB,GAAIC,GAAW,IAAKA,GAAG,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGF,GAAG,CAACG,KAAK,CAAC,CAAC,CAAC;AAEhG,OAAO,MAAMC,eAAe,GAAGA,CAC3BzC,IAAkD,EAClD0C,UAAkB,MAChB;EACF5B,KAAK,EAAEd,IAAI,GAAG0C,UAAU,CAAC,EAAE5B,KAAK,IAAI,CAAC;EACrCM,IAAI,EAAEpB,IAAI,GAAG0C,UAAU,CAAC,EAAEtB,IAAI,IAAI,CAAC;EACnCD,YAAY,EAAEnB,IAAI,GAAG0C,UAAU,CAAC,EAAEvB,YAAY,IAAI,EAAE;EACpD1C,OAAO,EAAEuB,IAAI,GAAG0C,UAAU,CAAC,EAAEjE,OAAO,IAAI;AAC5C,CAAC,CAAC;AASF,OAAO,MAAMkE,QAAQ,GAAG,MAAAA,CAAO;EAC3BC,OAAO;EACPzB,YAAY;EACZV,MAAM;EACNoC;AACa,CAAC,KAAmC;EACjD,MAAMC,QAAQ,GAAGrC,MAAM,CAACsC,GAAG,CAAC,MAAOL,UAAU,IAAK;IAC9C,MAAMtB,IAAI,GAAGwB,OAAO,CAACF,UAAU,CAAC,IAAI,CAAC;IAErC,IAAIA,UAAU,KAAKhF,uBAAuB,CAAC0B,MAAM,EAAE;MAC/C,IAAI+B,YAAY,CAACX,MAAM,IAAI,CAAC,EAAE;QAC1B,OAAO;UACH5B,GAAG,EAAElB,uBAAuB,CAAC0B,MAAM;UACnCP,KAAK,EAAE;YACHsC,YAAY;YACZL,KAAK,EAAE,CAAC;YACRM,IAAI,EAAE,CAAC;YACP3C,OAAO,EAAE;UACb;QACJ,CAAC;MACL;MAEA,MAAMuB,IAAI,GAAG,MAAMlC,UAAU,CAAC;QAAEkF,MAAM,EAAE7B,YAAY;QAAEC,IAAI;QAAEyB;MAAa,CAAC,CAAC;MAE3E,OAAO;QACHjE,GAAG,EAAElB,uBAAuB,CAAC0B,MAAM;QACnCP,KAAK,EAAE;UACHsC,YAAY;UACZL,KAAK,EAAEd,IAAI,EAAEc,KAAK,IAAI,CAAC;UACvBM,IAAI,EAAEA,IAAI,IAAIpB,IAAI,EAAEiD,IAAI,EAAEzC,MAAM,IAAI,CAAC,CAAC;UACtC/B,OAAO,EAAET,kBAAkB,CAACgC,IAAI,EAAEiD,IAAI,IAAI,EAAE,EAAE;YAC1CC,wBAAwB,EAAEL,YAAY,KAAKlF,YAAY,CAAC8B;UAC5D,CAAC;QACL;MACJ,CAAC;IACL;IAEA,IAAIiD,UAAU,KAAKhF,uBAAuB,CAAC+B,IAAI,EAAE;MAC7C,IAAI0B,YAAY,CAACX,MAAM,IAAI,CAAC,EAAE;QAC1B,OAAO;UACH5B,GAAG,EAAElB,uBAAuB,CAAC+B,IAAI;UACjCZ,KAAK,EAAE;YACHsC,YAAY;YACZL,KAAK,EAAE,CAAC;YACRM,IAAI,EAAE,CAAC;YACP3C,OAAO,EAAE;UACb;QACJ,CAAC;MACL;MAEA,MAAMuB,IAAI,GAAG,MAAMjC,QAAQ,CAAC;QAAEiF,MAAM,EAAE7B,YAAY;QAAEC;MAAK,CAAC,CAAC;MAE3D,MAAM+B,YAAY,GAAGnD,IAAI,EAAEiD,IAAI,CAACxC,MAAM,CAAC,CAAC;QAAE2C;MAAO,CAAC,KAAKA,MAAM,KAAK,IAAI,CAAC;MAEvE,OAAO;QACHxE,GAAG,EAAElB,uBAAuB,CAAC+B,IAAI;QACjCZ,KAAK,EAAE;UACHsC,YAAY;UACZL,KAAK,EAAEd,IAAI,EAAEc,KAAK,IAAI,CAAC;UACvBM,IAAI,EAAEA,IAAI,IAAI+B,YAAY,EAAE3C,MAAM,IAAI,CAAC,CAAC;UACxC/B,OAAO,EAAER,gBAAgB,CAACkF,YAAY,IAAI,EAAE;QAChD;MACJ,CAAC;IACL;IAEA,OAAO,IAAI;EACf,CAAC,CAAC;EAEF,MAAME,OAAO,GAAG,MAAMC,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;EAE3C,OAAOO,OAAO,CAAC3E,MAAM,CAAsB,CAACC,GAAG,EAAE6E,IAAI,KAAK;IACtD,IAAI,CAACA,IAAI,EAAE,OAAO7E,GAAG;IAErB,OAAO;MACH,GAAGA,GAAG;MACN,CAAC6E,IAAI,CAAC5E,GAAG,GAAG4E,IAAI,CAAC3E;IACrB,CAAC;EACL,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,CAAC;AAED,OAAO,MAAM4E,gBAAgB,GAAIC,IAAU,IAAa;EACpD,MAAMC,EAAE,GAAGxF,WAAW,CAACkB,UAAU,CAACC,YAAY,CAACsE,UAAU;EACzD,MAAMC,GAAG,GAAG,IAAIC,IAAI,CAAC,CAAC;EAEtB,MAAMC,MAAM,GAAGF,GAAG,CAACG,OAAO,CAAC,CAAC,GAAGN,IAAI,CAACM,OAAO,CAAC,CAAC;EAE7C,MAAMC,OAAO,GAAGlD,IAAI,CAACmD,KAAK,CAACH,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;EAC9C,MAAMI,KAAK,GAAGpD,IAAI,CAACmD,KAAK,CAACD,OAAO,GAAG,EAAE,CAAC;EACtC,MAAMG,IAAI,GAAGrD,IAAI,CAACmD,KAAK,CAACC,KAAK,GAAG,EAAE,CAAC;EACnC,MAAME,MAAM,GAAGtD,IAAI,CAACmD,KAAK,CAACE,IAAI,GAAG,EAAE,CAAC;EACpC,MAAME,KAAK,GAAGvD,IAAI,CAACmD,KAAK,CAACE,IAAI,GAAG,GAAG,CAAC;EAEpC,MAAMG,SAAS,GACXb,IAAI,CAACc,OAAO,CAAC,CAAC,KAAKX,GAAG,CAACW,OAAO,CAAC,CAAC,IAChCd,IAAI,CAACe,QAAQ,CAAC,CAAC,KAAKZ,GAAG,CAACY,QAAQ,CAAC,CAAC,IAClCf,IAAI,CAACgB,WAAW,CAAC,CAAC,KAAKb,GAAG,CAACa,WAAW,CAAC,CAAC;EAE5C,MAAMC,SAAS,GAAG,IAAIb,IAAI,CAACD,GAAG,CAAC;EAC/Bc,SAAS,CAACC,OAAO,CAACf,GAAG,CAACW,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;EAEpC,MAAMK,WAAW,GACbnB,IAAI,CAACc,OAAO,CAAC,CAAC,KAAKG,SAAS,CAACH,OAAO,CAAC,CAAC,IACtCd,IAAI,CAACe,QAAQ,CAAC,CAAC,KAAKE,SAAS,CAACF,QAAQ,CAAC,CAAC,IACxCf,IAAI,CAACgB,WAAW,CAAC,CAAC,KAAKC,SAAS,CAACD,WAAW,CAAC,CAAC;EAElD,MAAMI,IAAI,GAAGpB,IAAI,CAACqB,kBAAkB,CAAC,OAAO,EAAE;IAC1CC,IAAI,EAAE,SAAS;IACfC,MAAM,EAAE;EACZ,CAAC,CAAC;EAEF,IAAIhB,OAAO,GAAG,CAAC,EAAE;IACb,OAAOlF,8BAA8B,CAAC;MAAEC,UAAU,EAAE2E,EAAE,CAACuB;IAAW,CAAC,CAAC;EACxE;EAEA,IAAIjB,OAAO,GAAG,EAAE,EAAE;IACd,OAAOlF,8BAA8B,CAAC;MAClCC,UAAU,EAAE2E,EAAE,CAACM,OAAO;MACtB3F,YAAY,EAAE;QAAE2F;MAAQ;IAC5B,CAAC,CAAC;EACN;EAEA,IAAIE,KAAK,GAAG,EAAE,IAAII,SAAS,EAAE;IACzB,OAAOxF,8BAA8B,CAAC;MAClCC,UAAU,EAAE2E,EAAE,CAACwB,KAAK;MACpB7G,YAAY,EAAE;QAAEwG;MAAK;IACzB,CAAC,CAAC;EACN;EAEA,IAAID,WAAW,EAAE;IACb,OAAO9F,8BAA8B,CAAC;MAClCC,UAAU,EAAE2E,EAAE,CAACgB,SAAS;MACxBrG,YAAY,EAAE;QAAEwG;MAAK;IACzB,CAAC,CAAC;EACN;EAEA,IAAIV,IAAI,GAAG,EAAE,EAAE;IACX,OAAOrF,8BAA8B,CAAC;MAClCC,UAAU,EAAE2E,EAAE,CAACS,IAAI;MACnB9F,YAAY,EAAE;QAAE8F;MAAK;IACzB,CAAC,CAAC;EACN;EAEA,IAAIC,MAAM,GAAG,EAAE,EAAE;IACb,OAAOtF,8BAA8B,CAAC;MAClCC,UAAU,EAAE2E,EAAE,CAACU,MAAM;MACrB/F,YAAY,EAAE;QAAE+F;MAAO;IAC3B,CAAC,CAAC;EACN;EAEA,OAAOtF,8BAA8B,CAAC;IAClCC,UAAU,EAAE2E,EAAE,CAACW,KAAK;IACpBhG,YAAY,EAAE;MAAEgG;IAAM;EAC1B,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PersonEntryResult } from '../../types/personFinder';
|
|
1
|
+
import { PersonEntryResult, RelationMode } from '../../types/personFinder';
|
|
2
2
|
interface GetPersonResult {
|
|
3
3
|
list: PersonEntryResult[];
|
|
4
4
|
count: number;
|
|
@@ -7,6 +7,7 @@ interface GetPersonsOptions {
|
|
|
7
7
|
search: string;
|
|
8
8
|
skip: number;
|
|
9
9
|
take?: number;
|
|
10
|
+
relationMode?: RelationMode;
|
|
10
11
|
}
|
|
11
|
-
export declare const getPersons: ({ search, skip, take }: GetPersonsOptions) => Promise<GetPersonResult | undefined>;
|
|
12
|
+
export declare const getPersons: ({ search, skip, take, relationMode, }: GetPersonsOptions) => Promise<GetPersonResult | undefined>;
|
|
12
13
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { Dispatch, FC, ReactNode, SetStateAction } from 'react';
|
|
2
|
-
import { DefaultEntry, LoadingState, LoadingStateMap, PersonEntry, PersonFinderData, PersonFinderEntry, PersonFinderFilterTypes, Priority, UACFilter } from '../types/personFinder';
|
|
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
4
|
interface IPersonFinderContext {
|
|
5
5
|
data?: {
|
|
@@ -30,6 +30,7 @@ type PersonFinderProviderProps = {
|
|
|
30
30
|
shouldShowOwnUser?: boolean;
|
|
31
31
|
uacFilter?: UACFilter[];
|
|
32
32
|
entries?: PersonEntry[];
|
|
33
|
+
relationMode?: RelationMode;
|
|
33
34
|
};
|
|
34
35
|
declare const PersonFinderProvider: FC<PersonFinderProviderProps>;
|
|
35
36
|
export default PersonFinderProvider;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { DefaultEntry, PersonEntry, PersonFinderEntry, UACFilter } from '../../types/personFinder';
|
|
2
|
+
import { DefaultEntry, PersonEntry, PersonFinderEntry, RelationMode, UACFilter } from '../../types/personFinder';
|
|
3
3
|
import { PersonFinderWrapperProps, PersonFinderRef } from './person-finder-wrapper/PersonFinderWrapper';
|
|
4
4
|
export type PersonFinderProps = PersonFinderWrapperProps & {
|
|
5
5
|
/**
|
|
@@ -22,6 +22,10 @@ export type PersonFinderProps = PersonFinderWrapperProps & {
|
|
|
22
22
|
* A list of entries that should be searched.
|
|
23
23
|
*/
|
|
24
24
|
entries?: PersonEntry[];
|
|
25
|
+
/**
|
|
26
|
+
* Determines whether persons are searched and sorted from the user's perspective or from a site's perspective.
|
|
27
|
+
*/
|
|
28
|
+
relationMode?: RelationMode;
|
|
25
29
|
};
|
|
26
30
|
declare const PersonFinder: React.ForwardRefExoticComponent<PersonFinderWrapperProps & {
|
|
27
31
|
/**
|
|
@@ -44,5 +48,9 @@ declare const PersonFinder: React.ForwardRefExoticComponent<PersonFinderWrapperP
|
|
|
44
48
|
* A list of entries that should be searched.
|
|
45
49
|
*/
|
|
46
50
|
entries?: PersonEntry[];
|
|
51
|
+
/**
|
|
52
|
+
* Determines whether persons are searched and sorted from the user's perspective or from a site's perspective.
|
|
53
|
+
*/
|
|
54
|
+
relationMode?: RelationMode;
|
|
47
55
|
} & React.RefAttributes<PersonFinderRef>>;
|
|
48
56
|
export default PersonFinder;
|