@chayns-components/person-finder 5.4.0 → 5.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/api/person/get.js +5 -3
- package/lib/cjs/api/person/get.js.map +1 -1
- package/lib/cjs/api/site/get.js +5 -3
- package/lib/cjs/api/site/get.js.map +1 -1
- package/lib/cjs/components/PersonFinderProvider.js +60 -15
- package/lib/cjs/components/PersonFinderProvider.js.map +1 -1
- package/lib/cjs/components/person-finder/PersonFinder.js +2 -0
- package/lib/cjs/components/person-finder/PersonFinder.js.map +1 -1
- package/lib/cjs/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js +7 -5
- package/lib/cjs/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js.map +1 -1
- package/lib/cjs/constants/url.js +9 -0
- package/lib/cjs/constants/url.js.map +1 -0
- package/lib/cjs/utils/personFinder.js +6 -3
- 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/api/site/get.js +5 -3
- package/lib/esm/api/site/get.js.map +1 -1
- package/lib/esm/components/PersonFinderProvider.js +59 -15
- package/lib/esm/components/PersonFinderProvider.js.map +1 -1
- package/lib/esm/components/person-finder/PersonFinder.js +2 -0
- package/lib/esm/components/person-finder/PersonFinder.js.map +1 -1
- package/lib/esm/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js +7 -5
- package/lib/esm/components/person-finder/person-finder-wrapper/PersonFinderWrapper.js.map +1 -1
- package/lib/esm/constants/url.js +3 -0
- package/lib/esm/constants/url.js.map +1 -0
- package/lib/esm/utils/personFinder.js +6 -3
- package/lib/esm/utils/personFinder.js.map +1 -1
- package/lib/types/api/person/get.d.ts +2 -1
- package/lib/types/api/site/get.d.ts +2 -1
- package/lib/types/components/PersonFinderProvider.d.ts +1 -0
- package/lib/types/components/person-finder/PersonFinder.d.ts +8 -0
- package/lib/types/constants/url.d.ts +2 -0
- package/lib/types/utils/personFinder.d.ts +2 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersonFinderWrapper.js","names":["_core","require","_chaynsApi","_react","_interopRequireWildcard","_uuid","_personFinder","_PersonFinderWrapper","_PersonFinderBody","_interopRequireDefault","_PersonFinderProvider","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","PersonFinderWrapper","forwardRef","container","dropdownDirection","filterTypes","friendsPriority","leftElement","leftElementProp","maxEntries","Infinity","onAdd","onDropdownHide","onDropdownShow","shouldDisableRemove","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldRenderInline","relationMode","ref","data","updateSearch","setTags","tags","search","usePersonFinder","isFocused","setIsFocused","useState","shouldShowBody","setShouldShowBody","boxRef","useRef","contentRef","keyRef","uuidV4","tagInputRef","isTouch","useDevice","createElement","StyledPersonFinderLeftElement","Icon","icons","handleTagInputBlur","useCallback","handleTagInputFocus","handleRemove","id","prevState","filter","entry","handleClose","handleOpen","handleClear","_tagInputRef$current","current","resetValue","handleDropdownOutsideClick","_tagInputRef$current2","blur","handleAdd","selectedEntry","values","flat","map","entries","find","toString","name","firstName","lastName","tag","text","_tagInputRef$current3","some","length","handleChange","event","target","value","useImperativeHandle","clear","useEffect","showBody","useMemo","extraMobileCheck","check","RelationMode","SITE","includes","PersonFinderFilterTypes","PERSON","Priority","HIGH","content","body","DropdownBodyWrapper","anchorElement","direction","onClose","onOutsideClick","shouldShowDropdown","StyledPersonFinder","onFocus","key","TagInput","onBlur","onChange","shouldPreventEnter","displayName","_default","exports"],"sources":["../../../../../src/components/person-finder/person-finder-wrapper/PersonFinderWrapper.tsx"],"sourcesContent":["import {\n DropdownBodyWrapper,\n DropdownDirection,\n Icon,\n type Tag,\n TagInput,\n type TagInputRef,\n} from '@chayns-components/core';\nimport { useDevice } from 'chayns-api';\nimport React, {\n type ChangeEvent,\n forwardRef,\n type ReactElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { v4 as uuidV4 } from 'uuid';\nimport {\n PersonEntry,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n SiteEntry,\n} from '../../../types/personFinder';\nimport { StyledPersonFinder, StyledPersonFinderLeftElement } from './PersonFinderWrapper.styles';\nimport PersonFinderBody from './person-finder-body/PersonFinderBody';\nimport { usePersonFinder } from '../../PersonFinderProvider';\n\nexport type PersonFinderRef = {\n clear: () => void;\n};\n\nexport type PersonFinderWrapperProps = {\n /**\n * The element where the content of the `PersonFinder` should be rendered via React Portal.\n */\n container?: Element;\n /**\n * The direction in which the dropdown should be displayed. By default, it is displayed below the input.\n */\n dropdownDirection?: DropdownDirection;\n /**\n * The filter options of the component.\n */\n filterTypes?: PersonFinderFilterTypes[];\n /**\n * Determines the priority level for displaying friends in search results.\n */\n friendsPriority?: Priority;\n /**\n * An element that should be displayed on the left side of the input.\n */\n leftElement?: ReactElement;\n /**\n * The maximum number of entries that can be selected.\n */\n maxEntries?: number;\n /**\n * Function to be executed if a person or site is added.\n */\n onAdd?: (entry: PersonFinderEntry) => void;\n /**\n * Function to be executed if the dropdown is hidden.\n */\n onDropdownHide?: () => void;\n /**\n * Function to be executed if the dropdown is shown.\n */\n onDropdownShow?: () => void;\n /**\n * Function to be executed if a person or site is removed.\n */\n onRemove?: (id: PersonFinderEntry['id']) => void;\n /**\n * The placeholder that should be displayed.\n */\n placeholder?: string;\n /**\n * Whether multiple persons and sites should be selected.\n */\n shouldAllowMultiple?: boolean;\n /**\n * Whether the dropdown should be hidden after adding an entry. By default, it is not hidden.\n */\n shouldHideResultsOnAdd?: boolean;\n /**\n * Whether the `PersonFinder` should be rendered inline without a dropdown.\n * @description\n * If set to `true`, the `PersonFinder` will display the results below the input field, without\n * using a dropdown. This is useful for scenarios where the `PersonFinder` is part of a larger\n * form and should always be visible.\n * @default false\n * @example\n * <PersonFinder shouldRenderInline />\n * @optional\n */\n shouldRenderInline?: boolean;\n /**\n * Whether the remove action should be disabled.\n */\n shouldDisableRemove?: boolean;\n /**\n * Determines whether persons are searched and sorted from the user's perspective or from a site's perspective.\n */\n relationMode?: RelationMode;\n};\n\nconst PersonFinderWrapper = forwardRef<PersonFinderRef, PersonFinderWrapperProps>(\n (\n {\n container,\n dropdownDirection,\n filterTypes,\n friendsPriority,\n leftElement: leftElementProp,\n maxEntries = Infinity,\n onAdd,\n onDropdownHide,\n onDropdownShow,\n shouldDisableRemove,\n onRemove,\n placeholder,\n shouldAllowMultiple,\n shouldHideResultsOnAdd,\n shouldRenderInline,\n relationMode,\n },\n ref,\n ) => {\n const { data, updateSearch, setTags, tags, search } = usePersonFinder();\n\n const [isFocused, setIsFocused] = useState(false);\n const [shouldShowBody, setShouldShowBody] = useState(false);\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const keyRef = useRef(`person-finder-${uuidV4()}`);\n const tagInputRef = useRef<TagInputRef>(null);\n\n const { isTouch } = useDevice();\n\n const leftElement = leftElementProp ?? (\n <StyledPersonFinderLeftElement>\n <Icon icons={['fa fa-search']} />\n </StyledPersonFinderLeftElement>\n );\n\n const handleTagInputBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const handleTagInputFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const handleRemove = useCallback(\n (id: string) => {\n if (typeof setTags !== 'function' || shouldDisableRemove) {\n return;\n }\n\n setTags((prevState) => prevState.filter((entry) => entry.id !== id));\n\n if (typeof onRemove === 'function') {\n onRemove(id);\n }\n },\n [onRemove, setTags, shouldDisableRemove],\n );\n\n const handleClose = useCallback(() => {\n setShouldShowBody(false);\n }, []);\n\n const handleOpen = useCallback(() => {\n setShouldShowBody(true);\n }, []);\n\n const handleClear = useCallback(() => {\n if (typeof setTags !== 'function' || shouldDisableRemove) {\n return;\n }\n\n tagInputRef.current?.resetValue();\n\n setTags([]);\n }, [setTags, shouldDisableRemove]);\n\n const handleDropdownOutsideClick = useCallback(() => {\n tagInputRef.current?.blur();\n\n return isFocused && isTouch;\n }, [isFocused, isTouch]);\n\n const handleAdd = useCallback(\n (id: string) => {\n if (typeof setTags !== 'function') {\n return;\n }\n\n const selectedEntry = Object.values(data ?? {})\n .flat()\n .map(({ entries }) => entries)\n .flat()\n .find(\n (entry) =>\n (typeof entry.id === 'string' ? entry.id : entry.id.toString()) === id,\n );\n\n if (!selectedEntry) {\n return;\n }\n\n const { name, firstName, lastName } = selectedEntry as PersonEntry & SiteEntry;\n\n const tag: Tag = {\n id,\n text: name ?? `${(firstName as string) ?? ''} ${(lastName as string) ?? ''}`,\n };\n\n setTags((prevState) => {\n if (prevState.some((t) => t.id === id) || prevState.length >= maxEntries) {\n return prevState;\n }\n\n tagInputRef.current?.resetValue();\n\n if (typeof onAdd === 'function') {\n onAdd(selectedEntry);\n }\n\n if (shouldHideResultsOnAdd) {\n setShouldShowBody(false);\n }\n\n return [...prevState, tag];\n });\n },\n [data, maxEntries, onAdd, setTags, shouldHideResultsOnAdd],\n );\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (typeof updateSearch === 'function') {\n updateSearch(event.target.value);\n }\n },\n [updateSearch],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => handleClear(),\n }),\n [handleClear],\n );\n\n useEffect(() => {\n if (shouldShowBody) {\n if (typeof onDropdownShow === 'function') {\n onDropdownShow();\n }\n } else if (typeof onDropdownHide === 'function') {\n onDropdownHide();\n }\n }, [onDropdownHide, onDropdownShow, shouldShowBody]);\n\n const showBody = useMemo(() => {\n const extraMobileCheck = isTouch ? isFocused : true;\n\n const check = shouldShowBody && extraMobileCheck;\n\n if (relationMode === RelationMode.SITE) {\n return check;\n }\n\n if (\n filterTypes?.length === 1 &&\n (filterTypes.includes(PersonFinderFilterTypes.SITE) ||\n (filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friendsPriority !== Priority.HIGH))\n ) {\n return check && !!search && search?.length > 2;\n }\n\n return check;\n }, [\n filterTypes,\n friendsPriority,\n isFocused,\n isTouch,\n search,\n shouldShowBody,\n relationMode,\n ]);\n\n const content = useMemo(() => {\n const body = (\n <PersonFinderBody\n filterTypes={filterTypes}\n onAdd={handleAdd}\n onRemove={handleRemove}\n ref={contentRef}\n shouldRenderInline={shouldRenderInline}\n />\n );\n\n if (shouldRenderInline) {\n return body;\n }\n\n if (boxRef.current) {\n return (\n <DropdownBodyWrapper\n anchorElement={boxRef.current}\n container={container}\n direction={dropdownDirection}\n onClose={handleClose}\n onOutsideClick={handleDropdownOutsideClick}\n shouldShowDropdown={showBody}\n >\n {body}\n </DropdownBodyWrapper>\n );\n }\n\n return null;\n }, [\n container,\n dropdownDirection,\n filterTypes,\n handleAdd,\n handleClose,\n handleDropdownOutsideClick,\n handleRemove,\n shouldRenderInline,\n showBody,\n ]);\n\n return (\n <StyledPersonFinder ref={boxRef} onFocus={handleOpen} key={keyRef.current}>\n <TagInput\n leftElement={leftElement}\n onBlur={handleTagInputBlur}\n onChange={handleChange}\n onFocus={handleTagInputFocus}\n onRemove={handleRemove}\n placeholder={placeholder}\n ref={tagInputRef}\n shouldAllowMultiple={shouldAllowMultiple}\n shouldPreventEnter\n tags={tags}\n />\n {content}\n </StyledPersonFinder>\n );\n },\n);\n\nPersonFinderWrapper.displayName = 'PersonFinderWrapper';\n\nexport default PersonFinderWrapper;\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAQA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAC,uBAAA,CAAAH,OAAA;AAWA,IAAAI,KAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AAQA,IAAAM,oBAAA,GAAAN,OAAA;AACA,IAAAO,iBAAA,GAAAC,sBAAA,CAAAR,OAAA;AACA,IAAAS,qBAAA,GAAAT,OAAA;AAA6D,SAAAQ,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAP,wBAAAO,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAX,uBAAA,YAAAA,CAAAO,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAiF7D,MAAMgB,mBAAmB,gBAAG,IAAAC,iBAAU,EAClC,CACI;EACIC,SAAS;EACTC,iBAAiB;EACjBC,WAAW;EACXC,eAAe;EACfC,WAAW,EAAEC,eAAe;EAC5BC,UAAU,GAAGC,QAAQ;EACrBC,KAAK;EACLC,cAAc;EACdC,cAAc;EACdC,mBAAmB;EACnBC,QAAQ;EACRC,WAAW;EACXC,mBAAmB;EACnBC,sBAAsB;EACtBC,kBAAkB;EAClBC;AACJ,CAAC,EACDC,GAAG,KACF;EACD,MAAM;IAAEC,IAAI;IAAEC,YAAY;IAAEC,OAAO;IAAEC,IAAI;IAAEC;EAAO,CAAC,GAAG,IAAAC,qCAAe,EAAC,CAAC;EAEvE,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAC,eAAQ,EAAC,KAAK,CAAC;EACjD,MAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAG,IAAAF,eAAQ,EAAC,KAAK,CAAC;EAE3D,MAAMG,MAAM,GAAG,IAAAC,aAAM,EAAiB,IAAI,CAAC;EAC3C,MAAMC,UAAU,GAAG,IAAAD,aAAM,EAAiB,IAAI,CAAC;EAC/C,MAAME,MAAM,GAAG,IAAAF,aAAM,EAAC,iBAAiB,IAAAG,QAAM,EAAC,CAAC,EAAE,CAAC;EAClD,MAAMC,WAAW,GAAG,IAAAJ,aAAM,EAAc,IAAI,CAAC;EAE7C,MAAM;IAAEK;EAAQ,CAAC,GAAG,IAAAC,oBAAS,EAAC,CAAC;EAE/B,MAAMjC,WAAW,GAAGC,eAAe,iBAC/BlC,MAAA,CAAAU,OAAA,CAAAyD,aAAA,CAAC/D,oBAAA,CAAAgE,6BAA6B,qBAC1BpE,MAAA,CAAAU,OAAA,CAAAyD,aAAA,CAACtE,KAAA,CAAAwE,IAAI;IAACC,KAAK,EAAE,CAAC,cAAc;EAAE,CAAE,CACL,CAClC;EAED,MAAMC,kBAAkB,GAAG,IAAAC,kBAAW,EAAC,MAAM;IACzCjB,YAAY,CAAC,KAAK,CAAC;EACvB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMkB,mBAAmB,GAAG,IAAAD,kBAAW,EAAC,MAAM;IAC1CjB,YAAY,CAAC,IAAI,CAAC;EACtB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMmB,YAAY,GAAG,IAAAF,kBAAW,EAC3BG,EAAU,IAAK;IACZ,IAAI,OAAOzB,OAAO,KAAK,UAAU,IAAIV,mBAAmB,EAAE;MACtD;IACJ;IAEAU,OAAO,CAAE0B,SAAS,IAAKA,SAAS,CAACC,MAAM,CAAEC,KAAK,IAAKA,KAAK,CAACH,EAAE,KAAKA,EAAE,CAAC,CAAC;IAEpE,IAAI,OAAOlC,QAAQ,KAAK,UAAU,EAAE;MAChCA,QAAQ,CAACkC,EAAE,CAAC;IAChB;EACJ,CAAC,EACD,CAAClC,QAAQ,EAAES,OAAO,EAAEV,mBAAmB,CAC3C,CAAC;EAED,MAAMuC,WAAW,GAAG,IAAAP,kBAAW,EAAC,MAAM;IAClCd,iBAAiB,CAAC,KAAK,CAAC;EAC5B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMsB,UAAU,GAAG,IAAAR,kBAAW,EAAC,MAAM;IACjCd,iBAAiB,CAAC,IAAI,CAAC;EAC3B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMuB,WAAW,GAAG,IAAAT,kBAAW,EAAC,MAAM;IAAA,IAAAU,oBAAA;IAClC,IAAI,OAAOhC,OAAO,KAAK,UAAU,IAAIV,mBAAmB,EAAE;MACtD;IACJ;IAEA,CAAA0C,oBAAA,GAAAlB,WAAW,CAACmB,OAAO,cAAAD,oBAAA,eAAnBA,oBAAA,CAAqBE,UAAU,CAAC,CAAC;IAEjClC,OAAO,CAAC,EAAE,CAAC;EACf,CAAC,EAAE,CAACA,OAAO,EAAEV,mBAAmB,CAAC,CAAC;EAElC,MAAM6C,0BAA0B,GAAG,IAAAb,kBAAW,EAAC,MAAM;IAAA,IAAAc,qBAAA;IACjD,CAAAA,qBAAA,GAAAtB,WAAW,CAACmB,OAAO,cAAAG,qBAAA,eAAnBA,qBAAA,CAAqBC,IAAI,CAAC,CAAC;IAE3B,OAAOjC,SAAS,IAAIW,OAAO;EAC/B,CAAC,EAAE,CAACX,SAAS,EAAEW,OAAO,CAAC,CAAC;EAExB,MAAMuB,SAAS,GAAG,IAAAhB,kBAAW,EACxBG,EAAU,IAAK;IACZ,IAAI,OAAOzB,OAAO,KAAK,UAAU,EAAE;MAC/B;IACJ;IAEA,MAAMuC,aAAa,GAAGjE,MAAM,CAACkE,MAAM,CAAC1C,IAAI,IAAI,CAAC,CAAC,CAAC,CAC1C2C,IAAI,CAAC,CAAC,CACNC,GAAG,CAAC,CAAC;MAAEC;IAAQ,CAAC,KAAKA,OAAO,CAAC,CAC7BF,IAAI,CAAC,CAAC,CACNG,IAAI,CACAhB,KAAK,IACF,CAAC,OAAOA,KAAK,CAACH,EAAE,KAAK,QAAQ,GAAGG,KAAK,CAACH,EAAE,GAAGG,KAAK,CAACH,EAAE,CAACoB,QAAQ,CAAC,CAAC,MAAMpB,EAC5E,CAAC;IAEL,IAAI,CAACc,aAAa,EAAE;MAChB;IACJ;IAEA,MAAM;MAAEO,IAAI;MAAEC,SAAS;MAAEC;IAAS,CAAC,GAAGT,aAAwC;IAE9E,MAAMU,GAAQ,GAAG;MACbxB,EAAE;MACFyB,IAAI,EAAEJ,IAAI,IAAI,GAAIC,SAAS,IAAe,EAAE,IAAKC,QAAQ,IAAe,EAAE;IAC9E,CAAC;IAEDhD,OAAO,CAAE0B,SAAS,IAAK;MAAA,IAAAyB,qBAAA;MACnB,IAAIzB,SAAS,CAAC0B,IAAI,CAAE3F,CAAC,IAAKA,CAAC,CAACgE,EAAE,KAAKA,EAAE,CAAC,IAAIC,SAAS,CAAC2B,MAAM,IAAIpE,UAAU,EAAE;QACtE,OAAOyC,SAAS;MACpB;MAEA,CAAAyB,qBAAA,GAAArC,WAAW,CAACmB,OAAO,cAAAkB,qBAAA,eAAnBA,qBAAA,CAAqBjB,UAAU,CAAC,CAAC;MAEjC,IAAI,OAAO/C,KAAK,KAAK,UAAU,EAAE;QAC7BA,KAAK,CAACoD,aAAa,CAAC;MACxB;MAEA,IAAI7C,sBAAsB,EAAE;QACxBc,iBAAiB,CAAC,KAAK,CAAC;MAC5B;MAEA,OAAO,CAAC,GAAGkB,SAAS,EAAEuB,GAAG,CAAC;IAC9B,CAAC,CAAC;EACN,CAAC,EACD,CAACnD,IAAI,EAAEb,UAAU,EAAEE,KAAK,EAAEa,OAAO,EAAEN,sBAAsB,CAC7D,CAAC;EAED,MAAM4D,YAAY,GAAG,IAAAhC,kBAAW,EAC3BiC,KAAoC,IAAK;IACtC,IAAI,OAAOxD,YAAY,KAAK,UAAU,EAAE;MACpCA,YAAY,CAACwD,KAAK,CAACC,MAAM,CAACC,KAAK,CAAC;IACpC;EACJ,CAAC,EACD,CAAC1D,YAAY,CACjB,CAAC;EAED,IAAA2D,0BAAmB,EACf7D,GAAG,EACH,OAAO;IACH8D,KAAK,EAAEA,CAAA,KAAM5B,WAAW,CAAC;EAC7B,CAAC,CAAC,EACF,CAACA,WAAW,CAChB,CAAC;EAED,IAAA6B,gBAAS,EAAC,MAAM;IACZ,IAAIrD,cAAc,EAAE;MAChB,IAAI,OAAOlB,cAAc,KAAK,UAAU,EAAE;QACtCA,cAAc,CAAC,CAAC;MACpB;IACJ,CAAC,MAAM,IAAI,OAAOD,cAAc,KAAK,UAAU,EAAE;MAC7CA,cAAc,CAAC,CAAC;IACpB;EACJ,CAAC,EAAE,CAACA,cAAc,EAAEC,cAAc,EAAEkB,cAAc,CAAC,CAAC;EAEpD,MAAMsD,QAAQ,GAAG,IAAAC,cAAO,EAAC,MAAM;IAC3B,MAAMC,gBAAgB,GAAGhD,OAAO,GAAGX,SAAS,GAAG,IAAI;IAEnD,MAAM4D,KAAK,GAAGzD,cAAc,IAAIwD,gBAAgB;IAEhD,IAAInE,YAAY,KAAKqE,0BAAY,CAACC,IAAI,EAAE;MACpC,OAAOF,KAAK;IAChB;IAEA,IACI,CAAAnF,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEwE,MAAM,MAAK,CAAC,KACxBxE,WAAW,CAACsF,QAAQ,CAACC,qCAAuB,CAACF,IAAI,CAAC,IAC9CrF,WAAW,CAACsF,QAAQ,CAACC,qCAAuB,CAACC,MAAM,CAAC,IACjDvF,eAAe,KAAKwF,sBAAQ,CAACC,IAAK,CAAC,EAC7C;MACE,OAAOP,KAAK,IAAI,CAAC,CAAC9D,MAAM,IAAI,CAAAA,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEmD,MAAM,IAAG,CAAC;IAClD;IAEA,OAAOW,KAAK;EAChB,CAAC,EAAE,CACCnF,WAAW,EACXC,eAAe,EACfsB,SAAS,EACTW,OAAO,EACPb,MAAM,EACNK,cAAc,EACdX,YAAY,CACf,CAAC;EAEF,MAAM4E,OAAO,GAAG,IAAAV,cAAO,EAAC,MAAM;IAC1B,MAAMW,IAAI,gBACN3H,MAAA,CAAAU,OAAA,CAAAyD,aAAA,CAAC9D,iBAAA,CAAAK,OAAgB;MACbqB,WAAW,EAAEA,WAAY;MACzBM,KAAK,EAAEmD,SAAU;MACjB/C,QAAQ,EAAEiC,YAAa;MACvB3B,GAAG,EAAEc,UAAW;MAChBhB,kBAAkB,EAAEA;IAAmB,CAC1C,CACJ;IAED,IAAIA,kBAAkB,EAAE;MACpB,OAAO8E,IAAI;IACf;IAEA,IAAIhE,MAAM,CAACwB,OAAO,EAAE;MAChB,oBACInF,MAAA,CAAAU,OAAA,CAAAyD,aAAA,CAACtE,KAAA,CAAA+H,mBAAmB;QAChBC,aAAa,EAAElE,MAAM,CAACwB,OAAQ;QAC9BtD,SAAS,EAAEA,SAAU;QACrBiG,SAAS,EAAEhG,iBAAkB;QAC7BiG,OAAO,EAAEhD,WAAY;QACrBiD,cAAc,EAAE3C,0BAA2B;QAC3C4C,kBAAkB,EAAElB;MAAS,GAE5BY,IACgB,CAAC;IAE9B;IAEA,OAAO,IAAI;EACf,CAAC,EAAE,CACC9F,SAAS,EACTC,iBAAiB,EACjBC,WAAW,EACXyD,SAAS,EACTT,WAAW,EACXM,0BAA0B,EAC1BX,YAAY,EACZ7B,kBAAkB,EAClBkE,QAAQ,CACX,CAAC;EAEF,oBACI/G,MAAA,CAAAU,OAAA,CAAAyD,aAAA,CAAC/D,oBAAA,CAAA8H,kBAAkB;IAACnF,GAAG,EAAEY,MAAO;IAACwE,OAAO,EAAEnD,UAAW;IAACoD,GAAG,EAAEtE,MAAM,CAACqB;EAAQ,gBACtEnF,MAAA,CAAAU,OAAA,CAAAyD,aAAA,CAACtE,KAAA,CAAAwI,QAAQ;IACLpG,WAAW,EAAEA,WAAY;IACzBqG,MAAM,EAAE/D,kBAAmB;IAC3BgE,QAAQ,EAAE/B,YAAa;IACvB2B,OAAO,EAAE1D,mBAAoB;IAC7BhC,QAAQ,EAAEiC,YAAa;IACvBhC,WAAW,EAAEA,WAAY;IACzBK,GAAG,EAAEiB,WAAY;IACjBrB,mBAAmB,EAAEA,mBAAoB;IACzC6F,kBAAkB;IAClBrF,IAAI,EAAEA;EAAK,CACd,CAAC,EACDuE,OACe,CAAC;AAE7B,CACJ,CAAC;AAED/F,mBAAmB,CAAC8G,WAAW,GAAG,qBAAqB;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAjI,OAAA,GAEzCiB,mBAAmB","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"PersonFinderWrapper.js","names":["_core","require","_chaynsApi","_react","_interopRequireWildcard","_uuid","_personFinder","_PersonFinderWrapper","_PersonFinderBody","_interopRequireDefault","_PersonFinderProvider","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","PersonFinderWrapper","forwardRef","container","dropdownDirection","filterTypes","friendsPriority","leftElement","leftElementProp","maxEntries","Infinity","onAdd","onDropdownHide","onDropdownShow","shouldDisableRemove","onRemove","placeholder","shouldAllowMultiple","shouldHideResultsOnAdd","shouldRenderInline","relationMode","ref","data","updateSearch","setTags","tags","search","usePersonFinder","isFocused","setIsFocused","useState","shouldShowBody","setShouldShowBody","boxRef","useRef","contentRef","keyRef","uuidV4","tagInputRef","hasFocusRef","isTouch","useDevice","createElement","StyledPersonFinderLeftElement","Icon","icons","handleTagInputBlur","useCallback","current","handleTagInputFocus","handleRemove","id","prevState","filter","entry","handleClose","handleOpen","handleClear","_tagInputRef$current","resetValue","handleDropdownOutsideClick","_tagInputRef$current2","blur","handleAdd","selectedEntry","values","flat","map","entries","find","toString","name","firstName","lastName","tag","text","_tagInputRef$current3","some","length","handleChange","event","target","value","useImperativeHandle","clear","useEffect","showBody","useMemo","check","RelationMode","SITE","includes","PersonFinderFilterTypes","PERSON","Priority","HIGH","content","body","DropdownBodyWrapper","anchorElement","direction","onClose","onOutsideClick","shouldShowDropdown","StyledPersonFinder","onFocus","key","TagInput","onBlur","onChange","shouldPreventEnter","displayName","_default","exports"],"sources":["../../../../../src/components/person-finder/person-finder-wrapper/PersonFinderWrapper.tsx"],"sourcesContent":["import {\n DropdownBodyWrapper,\n DropdownDirection,\n Icon,\n type Tag,\n TagInput,\n type TagInputRef,\n} from '@chayns-components/core';\nimport { useDevice } from 'chayns-api';\nimport React, {\n type ChangeEvent,\n forwardRef,\n type ReactElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { v4 as uuidV4 } from 'uuid';\nimport {\n PersonEntry,\n PersonFinderEntry,\n PersonFinderFilterTypes,\n Priority,\n RelationMode,\n SiteEntry,\n} from '../../../types/personFinder';\nimport { StyledPersonFinder, StyledPersonFinderLeftElement } from './PersonFinderWrapper.styles';\nimport PersonFinderBody from './person-finder-body/PersonFinderBody';\nimport { usePersonFinder } from '../../PersonFinderProvider';\n\nexport type PersonFinderRef = {\n clear: () => void;\n};\n\nexport type PersonFinderWrapperProps = {\n /**\n * The element where the content of the `PersonFinder` should be rendered via React Portal.\n */\n container?: Element;\n /**\n * The direction in which the dropdown should be displayed. By default, it is displayed below the input.\n */\n dropdownDirection?: DropdownDirection;\n /**\n * The filter options of the component.\n */\n filterTypes?: PersonFinderFilterTypes[];\n /**\n * Determines the priority level for displaying friends in search results.\n */\n friendsPriority?: Priority;\n /**\n * An element that should be displayed on the left side of the input.\n */\n leftElement?: ReactElement;\n /**\n * The maximum number of entries that can be selected.\n */\n maxEntries?: number;\n /**\n * Function to be executed if a person or site is added.\n */\n onAdd?: (entry: PersonFinderEntry) => void;\n /**\n * Function to be executed if the dropdown is hidden.\n */\n onDropdownHide?: () => void;\n /**\n * Function to be executed if the dropdown is shown.\n */\n onDropdownShow?: () => void;\n /**\n * Function to be executed if a person or site is removed.\n */\n onRemove?: (id: PersonFinderEntry['id']) => void;\n /**\n * The placeholder that should be displayed.\n */\n placeholder?: string;\n /**\n * Whether multiple persons and sites should be selected.\n */\n shouldAllowMultiple?: boolean;\n /**\n * Whether the dropdown should be hidden after adding an entry. By default, it is not hidden.\n */\n shouldHideResultsOnAdd?: boolean;\n /**\n * Whether the `PersonFinder` should be rendered inline without a dropdown.\n * @description\n * If set to `true`, the `PersonFinder` will display the results below the input field, without\n * using a dropdown. This is useful for scenarios where the `PersonFinder` is part of a larger\n * form and should always be visible.\n * @default false\n * @example\n * <PersonFinder shouldRenderInline />\n * @optional\n */\n shouldRenderInline?: boolean;\n /**\n * Whether the remove action should be disabled.\n */\n shouldDisableRemove?: boolean;\n /**\n * Determines whether persons are searched and sorted from the user's perspective or from a site's perspective.\n */\n relationMode?: RelationMode;\n};\n\nconst PersonFinderWrapper = forwardRef<PersonFinderRef, PersonFinderWrapperProps>(\n (\n {\n container,\n dropdownDirection,\n filterTypes,\n friendsPriority,\n leftElement: leftElementProp,\n maxEntries = Infinity,\n onAdd,\n onDropdownHide,\n onDropdownShow,\n shouldDisableRemove,\n onRemove,\n placeholder,\n shouldAllowMultiple,\n shouldHideResultsOnAdd,\n shouldRenderInline,\n relationMode,\n },\n ref,\n ) => {\n const { data, updateSearch, setTags, tags, search } = usePersonFinder();\n\n const [isFocused, setIsFocused] = useState(false);\n const [shouldShowBody, setShouldShowBody] = useState(false);\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const keyRef = useRef(`person-finder-${uuidV4()}`);\n const tagInputRef = useRef<TagInputRef>(null);\n const hasFocusRef = useRef<boolean>(false);\n\n const { isTouch } = useDevice();\n\n const leftElement = leftElementProp ?? (\n <StyledPersonFinderLeftElement>\n <Icon icons={['fa fa-search']} />\n </StyledPersonFinderLeftElement>\n );\n\n const handleTagInputBlur = useCallback(() => {\n hasFocusRef.current = false;\n\n setIsFocused(false);\n }, []);\n\n const handleTagInputFocus = useCallback(() => {\n hasFocusRef.current = true;\n\n setIsFocused(true);\n }, []);\n\n const handleRemove = useCallback(\n (id: string) => {\n if (typeof setTags !== 'function' || shouldDisableRemove) {\n return;\n }\n\n setTags((prevState) => prevState.filter((entry) => entry.id !== id));\n\n if (typeof onRemove === 'function') {\n onRemove(id);\n }\n },\n [onRemove, setTags, shouldDisableRemove],\n );\n\n const handleClose = useCallback(() => {\n setShouldShowBody(false);\n }, []);\n\n const handleOpen = useCallback(() => {\n setShouldShowBody(true);\n }, []);\n\n const handleClear = useCallback(() => {\n if (typeof setTags !== 'function' || shouldDisableRemove) {\n return;\n }\n\n tagInputRef.current?.resetValue();\n\n setTags([]);\n }, [setTags, shouldDisableRemove]);\n\n const handleDropdownOutsideClick = useCallback(() => {\n tagInputRef.current?.blur();\n\n return hasFocusRef.current && isTouch;\n }, [isTouch]);\n\n const handleAdd = useCallback(\n (id: string) => {\n if (typeof setTags !== 'function') {\n return;\n }\n\n const selectedEntry = Object.values(data ?? {})\n .flat()\n .map(({ entries }) => entries)\n .flat()\n .find(\n (entry) =>\n (typeof entry.id === 'string' ? entry.id : entry.id.toString()) === id,\n );\n\n if (!selectedEntry) {\n return;\n }\n\n const { name, firstName, lastName } = selectedEntry as PersonEntry & SiteEntry;\n\n const tag: Tag = {\n id,\n text: name ?? `${(firstName as string) ?? ''} ${(lastName as string) ?? ''}`,\n };\n\n setTags((prevState) => {\n if (prevState.some((t) => t.id === id) || prevState.length >= maxEntries) {\n return prevState;\n }\n\n tagInputRef.current?.resetValue();\n\n if (typeof onAdd === 'function') {\n onAdd(selectedEntry);\n }\n\n if (shouldHideResultsOnAdd) {\n setShouldShowBody(false);\n }\n\n return [...prevState, tag];\n });\n },\n [data, maxEntries, onAdd, setTags, shouldHideResultsOnAdd],\n );\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (typeof updateSearch === 'function') {\n updateSearch(event.target.value);\n }\n },\n [updateSearch],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => handleClear(),\n }),\n [handleClear],\n );\n\n useEffect(() => {\n if (shouldShowBody) {\n if (typeof onDropdownShow === 'function') {\n onDropdownShow();\n }\n } else if (typeof onDropdownHide === 'function') {\n onDropdownHide();\n }\n }, [onDropdownHide, onDropdownShow, shouldShowBody]);\n\n const showBody = useMemo(() => {\n const check = shouldShowBody;\n\n if (relationMode === RelationMode.SITE) {\n return check;\n }\n\n if (\n filterTypes?.length === 1 &&\n (filterTypes.includes(PersonFinderFilterTypes.SITE) ||\n (filterTypes.includes(PersonFinderFilterTypes.PERSON) &&\n friendsPriority !== Priority.HIGH))\n ) {\n return check && !!search && search?.length > 2;\n }\n\n return check;\n }, [filterTypes, friendsPriority, search, shouldShowBody, relationMode]);\n\n const content = useMemo(() => {\n const body = (\n <PersonFinderBody\n filterTypes={filterTypes}\n onAdd={handleAdd}\n onRemove={handleRemove}\n ref={contentRef}\n shouldRenderInline={shouldRenderInline}\n />\n );\n\n if (shouldRenderInline) {\n return body;\n }\n\n if (boxRef.current) {\n return (\n <DropdownBodyWrapper\n anchorElement={boxRef.current}\n container={container}\n direction={dropdownDirection}\n onClose={handleClose}\n onOutsideClick={handleDropdownOutsideClick}\n shouldShowDropdown={showBody}\n >\n {body}\n </DropdownBodyWrapper>\n );\n }\n\n return null;\n }, [\n container,\n dropdownDirection,\n filterTypes,\n handleAdd,\n handleClose,\n handleDropdownOutsideClick,\n handleRemove,\n shouldRenderInline,\n showBody,\n ]);\n\n return (\n <StyledPersonFinder ref={boxRef} onFocus={handleOpen} key={keyRef.current}>\n <TagInput\n leftElement={leftElement}\n onBlur={handleTagInputBlur}\n onChange={handleChange}\n onFocus={handleTagInputFocus}\n onRemove={handleRemove}\n placeholder={placeholder}\n ref={tagInputRef}\n shouldAllowMultiple={shouldAllowMultiple}\n shouldPreventEnter\n tags={tags}\n />\n {content}\n </StyledPersonFinder>\n );\n },\n);\n\nPersonFinderWrapper.displayName = 'PersonFinderWrapper';\n\nexport default PersonFinderWrapper;\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAQA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAC,uBAAA,CAAAH,OAAA;AAWA,IAAAI,KAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AAQA,IAAAM,oBAAA,GAAAN,OAAA;AACA,IAAAO,iBAAA,GAAAC,sBAAA,CAAAR,OAAA;AACA,IAAAS,qBAAA,GAAAT,OAAA;AAA6D,SAAAQ,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAP,wBAAAO,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAX,uBAAA,YAAAA,CAAAO,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAiF7D,MAAMgB,mBAAmB,gBAAG,IAAAC,iBAAU,EAClC,CACI;EACIC,SAAS;EACTC,iBAAiB;EACjBC,WAAW;EACXC,eAAe;EACfC,WAAW,EAAEC,eAAe;EAC5BC,UAAU,GAAGC,QAAQ;EACrBC,KAAK;EACLC,cAAc;EACdC,cAAc;EACdC,mBAAmB;EACnBC,QAAQ;EACRC,WAAW;EACXC,mBAAmB;EACnBC,sBAAsB;EACtBC,kBAAkB;EAClBC;AACJ,CAAC,EACDC,GAAG,KACF;EACD,MAAM;IAAEC,IAAI;IAAEC,YAAY;IAAEC,OAAO;IAAEC,IAAI;IAAEC;EAAO,CAAC,GAAG,IAAAC,qCAAe,EAAC,CAAC;EAEvE,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAC,eAAQ,EAAC,KAAK,CAAC;EACjD,MAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAG,IAAAF,eAAQ,EAAC,KAAK,CAAC;EAE3D,MAAMG,MAAM,GAAG,IAAAC,aAAM,EAAiB,IAAI,CAAC;EAC3C,MAAMC,UAAU,GAAG,IAAAD,aAAM,EAAiB,IAAI,CAAC;EAC/C,MAAME,MAAM,GAAG,IAAAF,aAAM,EAAC,iBAAiB,IAAAG,QAAM,EAAC,CAAC,EAAE,CAAC;EAClD,MAAMC,WAAW,GAAG,IAAAJ,aAAM,EAAc,IAAI,CAAC;EAC7C,MAAMK,WAAW,GAAG,IAAAL,aAAM,EAAU,KAAK,CAAC;EAE1C,MAAM;IAAEM;EAAQ,CAAC,GAAG,IAAAC,oBAAS,EAAC,CAAC;EAE/B,MAAMlC,WAAW,GAAGC,eAAe,iBAC/BlC,MAAA,CAAAU,OAAA,CAAA0D,aAAA,CAAChE,oBAAA,CAAAiE,6BAA6B,qBAC1BrE,MAAA,CAAAU,OAAA,CAAA0D,aAAA,CAACvE,KAAA,CAAAyE,IAAI;IAACC,KAAK,EAAE,CAAC,cAAc;EAAE,CAAE,CACL,CAClC;EAED,MAAMC,kBAAkB,GAAG,IAAAC,kBAAW,EAAC,MAAM;IACzCR,WAAW,CAACS,OAAO,GAAG,KAAK;IAE3BnB,YAAY,CAAC,KAAK,CAAC;EACvB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMoB,mBAAmB,GAAG,IAAAF,kBAAW,EAAC,MAAM;IAC1CR,WAAW,CAACS,OAAO,GAAG,IAAI;IAE1BnB,YAAY,CAAC,IAAI,CAAC;EACtB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMqB,YAAY,GAAG,IAAAH,kBAAW,EAC3BI,EAAU,IAAK;IACZ,IAAI,OAAO3B,OAAO,KAAK,UAAU,IAAIV,mBAAmB,EAAE;MACtD;IACJ;IAEAU,OAAO,CAAE4B,SAAS,IAAKA,SAAS,CAACC,MAAM,CAAEC,KAAK,IAAKA,KAAK,CAACH,EAAE,KAAKA,EAAE,CAAC,CAAC;IAEpE,IAAI,OAAOpC,QAAQ,KAAK,UAAU,EAAE;MAChCA,QAAQ,CAACoC,EAAE,CAAC;IAChB;EACJ,CAAC,EACD,CAACpC,QAAQ,EAAES,OAAO,EAAEV,mBAAmB,CAC3C,CAAC;EAED,MAAMyC,WAAW,GAAG,IAAAR,kBAAW,EAAC,MAAM;IAClCf,iBAAiB,CAAC,KAAK,CAAC;EAC5B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMwB,UAAU,GAAG,IAAAT,kBAAW,EAAC,MAAM;IACjCf,iBAAiB,CAAC,IAAI,CAAC;EAC3B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMyB,WAAW,GAAG,IAAAV,kBAAW,EAAC,MAAM;IAAA,IAAAW,oBAAA;IAClC,IAAI,OAAOlC,OAAO,KAAK,UAAU,IAAIV,mBAAmB,EAAE;MACtD;IACJ;IAEA,CAAA4C,oBAAA,GAAApB,WAAW,CAACU,OAAO,cAAAU,oBAAA,eAAnBA,oBAAA,CAAqBC,UAAU,CAAC,CAAC;IAEjCnC,OAAO,CAAC,EAAE,CAAC;EACf,CAAC,EAAE,CAACA,OAAO,EAAEV,mBAAmB,CAAC,CAAC;EAElC,MAAM8C,0BAA0B,GAAG,IAAAb,kBAAW,EAAC,MAAM;IAAA,IAAAc,qBAAA;IACjD,CAAAA,qBAAA,GAAAvB,WAAW,CAACU,OAAO,cAAAa,qBAAA,eAAnBA,qBAAA,CAAqBC,IAAI,CAAC,CAAC;IAE3B,OAAOvB,WAAW,CAACS,OAAO,IAAIR,OAAO;EACzC,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEb,MAAMuB,SAAS,GAAG,IAAAhB,kBAAW,EACxBI,EAAU,IAAK;IACZ,IAAI,OAAO3B,OAAO,KAAK,UAAU,EAAE;MAC/B;IACJ;IAEA,MAAMwC,aAAa,GAAGlE,MAAM,CAACmE,MAAM,CAAC3C,IAAI,IAAI,CAAC,CAAC,CAAC,CAC1C4C,IAAI,CAAC,CAAC,CACNC,GAAG,CAAC,CAAC;MAAEC;IAAQ,CAAC,KAAKA,OAAO,CAAC,CAC7BF,IAAI,CAAC,CAAC,CACNG,IAAI,CACAf,KAAK,IACF,CAAC,OAAOA,KAAK,CAACH,EAAE,KAAK,QAAQ,GAAGG,KAAK,CAACH,EAAE,GAAGG,KAAK,CAACH,EAAE,CAACmB,QAAQ,CAAC,CAAC,MAAMnB,EAC5E,CAAC;IAEL,IAAI,CAACa,aAAa,EAAE;MAChB;IACJ;IAEA,MAAM;MAAEO,IAAI;MAAEC,SAAS;MAAEC;IAAS,CAAC,GAAGT,aAAwC;IAE9E,MAAMU,GAAQ,GAAG;MACbvB,EAAE;MACFwB,IAAI,EAAEJ,IAAI,IAAI,GAAIC,SAAS,IAAe,EAAE,IAAKC,QAAQ,IAAe,EAAE;IAC9E,CAAC;IAEDjD,OAAO,CAAE4B,SAAS,IAAK;MAAA,IAAAwB,qBAAA;MACnB,IAAIxB,SAAS,CAACyB,IAAI,CAAE5F,CAAC,IAAKA,CAAC,CAACkE,EAAE,KAAKA,EAAE,CAAC,IAAIC,SAAS,CAAC0B,MAAM,IAAIrE,UAAU,EAAE;QACtE,OAAO2C,SAAS;MACpB;MAEA,CAAAwB,qBAAA,GAAAtC,WAAW,CAACU,OAAO,cAAA4B,qBAAA,eAAnBA,qBAAA,CAAqBjB,UAAU,CAAC,CAAC;MAEjC,IAAI,OAAOhD,KAAK,KAAK,UAAU,EAAE;QAC7BA,KAAK,CAACqD,aAAa,CAAC;MACxB;MAEA,IAAI9C,sBAAsB,EAAE;QACxBc,iBAAiB,CAAC,KAAK,CAAC;MAC5B;MAEA,OAAO,CAAC,GAAGoB,SAAS,EAAEsB,GAAG,CAAC;IAC9B,CAAC,CAAC;EACN,CAAC,EACD,CAACpD,IAAI,EAAEb,UAAU,EAAEE,KAAK,EAAEa,OAAO,EAAEN,sBAAsB,CAC7D,CAAC;EAED,MAAM6D,YAAY,GAAG,IAAAhC,kBAAW,EAC3BiC,KAAoC,IAAK;IACtC,IAAI,OAAOzD,YAAY,KAAK,UAAU,EAAE;MACpCA,YAAY,CAACyD,KAAK,CAACC,MAAM,CAACC,KAAK,CAAC;IACpC;EACJ,CAAC,EACD,CAAC3D,YAAY,CACjB,CAAC;EAED,IAAA4D,0BAAmB,EACf9D,GAAG,EACH,OAAO;IACH+D,KAAK,EAAEA,CAAA,KAAM3B,WAAW,CAAC;EAC7B,CAAC,CAAC,EACF,CAACA,WAAW,CAChB,CAAC;EAED,IAAA4B,gBAAS,EAAC,MAAM;IACZ,IAAItD,cAAc,EAAE;MAChB,IAAI,OAAOlB,cAAc,KAAK,UAAU,EAAE;QACtCA,cAAc,CAAC,CAAC;MACpB;IACJ,CAAC,MAAM,IAAI,OAAOD,cAAc,KAAK,UAAU,EAAE;MAC7CA,cAAc,CAAC,CAAC;IACpB;EACJ,CAAC,EAAE,CAACA,cAAc,EAAEC,cAAc,EAAEkB,cAAc,CAAC,CAAC;EAEpD,MAAMuD,QAAQ,GAAG,IAAAC,cAAO,EAAC,MAAM;IAC3B,MAAMC,KAAK,GAAGzD,cAAc;IAE5B,IAAIX,YAAY,KAAKqE,0BAAY,CAACC,IAAI,EAAE;MACpC,OAAOF,KAAK;IAChB;IAEA,IACI,CAAAnF,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEyE,MAAM,MAAK,CAAC,KACxBzE,WAAW,CAACsF,QAAQ,CAACC,qCAAuB,CAACF,IAAI,CAAC,IAC9CrF,WAAW,CAACsF,QAAQ,CAACC,qCAAuB,CAACC,MAAM,CAAC,IACjDvF,eAAe,KAAKwF,sBAAQ,CAACC,IAAK,CAAC,EAC7C;MACE,OAAOP,KAAK,IAAI,CAAC,CAAC9D,MAAM,IAAI,CAAAA,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEoD,MAAM,IAAG,CAAC;IAClD;IAEA,OAAOU,KAAK;EAChB,CAAC,EAAE,CAACnF,WAAW,EAAEC,eAAe,EAAEoB,MAAM,EAAEK,cAAc,EAAEX,YAAY,CAAC,CAAC;EAExE,MAAM4E,OAAO,GAAG,IAAAT,cAAO,EAAC,MAAM;IAC1B,MAAMU,IAAI,gBACN3H,MAAA,CAAAU,OAAA,CAAA0D,aAAA,CAAC/D,iBAAA,CAAAK,OAAgB;MACbqB,WAAW,EAAEA,WAAY;MACzBM,KAAK,EAAEoD,SAAU;MACjBhD,QAAQ,EAAEmC,YAAa;MACvB7B,GAAG,EAAEc,UAAW;MAChBhB,kBAAkB,EAAEA;IAAmB,CAC1C,CACJ;IAED,IAAIA,kBAAkB,EAAE;MACpB,OAAO8E,IAAI;IACf;IAEA,IAAIhE,MAAM,CAACe,OAAO,EAAE;MAChB,oBACI1E,MAAA,CAAAU,OAAA,CAAA0D,aAAA,CAACvE,KAAA,CAAA+H,mBAAmB;QAChBC,aAAa,EAAElE,MAAM,CAACe,OAAQ;QAC9B7C,SAAS,EAAEA,SAAU;QACrBiG,SAAS,EAAEhG,iBAAkB;QAC7BiG,OAAO,EAAE9C,WAAY;QACrB+C,cAAc,EAAE1C,0BAA2B;QAC3C2C,kBAAkB,EAAEjB;MAAS,GAE5BW,IACgB,CAAC;IAE9B;IAEA,OAAO,IAAI;EACf,CAAC,EAAE,CACC9F,SAAS,EACTC,iBAAiB,EACjBC,WAAW,EACX0D,SAAS,EACTR,WAAW,EACXK,0BAA0B,EAC1BV,YAAY,EACZ/B,kBAAkB,EAClBmE,QAAQ,CACX,CAAC;EAEF,oBACIhH,MAAA,CAAAU,OAAA,CAAA0D,aAAA,CAAChE,oBAAA,CAAA8H,kBAAkB;IAACnF,GAAG,EAAEY,MAAO;IAACwE,OAAO,EAAEjD,UAAW;IAACkD,GAAG,EAAEtE,MAAM,CAACY;EAAQ,gBACtE1E,MAAA,CAAAU,OAAA,CAAA0D,aAAA,CAACvE,KAAA,CAAAwI,QAAQ;IACLpG,WAAW,EAAEA,WAAY;IACzBqG,MAAM,EAAE9D,kBAAmB;IAC3B+D,QAAQ,EAAE9B,YAAa;IACvB0B,OAAO,EAAExD,mBAAoB;IAC7BlC,QAAQ,EAAEmC,YAAa;IACvBlC,WAAW,EAAEA,WAAY;IACzBK,GAAG,EAAEiB,WAAY;IACjBrB,mBAAmB,EAAEA,mBAAoB;IACzC6F,kBAAkB;IAClBrF,IAAI,EAAEA;EAAK,CACd,CAAC,EACDuE,OACe,CAAC;AAE7B,CACJ,CAAC;AAED/F,mBAAmB,CAAC8G,WAAW,GAAG,qBAAqB;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAjI,OAAA,GAEzCiB,mBAAmB","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RELATIONS_BASE_URL = exports.QA_RELATIONS_BASE_URL = void 0;
|
|
7
|
+
const QA_RELATIONS_BASE_URL = exports.QA_RELATIONS_BASE_URL = 'https://cube-dev.tobit.com/relations-gateway/relations/';
|
|
8
|
+
const RELATIONS_BASE_URL = exports.RELATIONS_BASE_URL = 'https://relations.chayns.net/relations/';
|
|
9
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","names":["QA_RELATIONS_BASE_URL","exports","RELATIONS_BASE_URL"],"sources":["../../../src/constants/url.ts"],"sourcesContent":["export const QA_RELATIONS_BASE_URL = 'https://cube-dev.tobit.com/relations-gateway/relations/';\nexport const RELATIONS_BASE_URL = 'https://relations.chayns.net/relations/';\n"],"mappings":";;;;;;AAAO,MAAMA,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG,yDAAyD;AACvF,MAAME,kBAAkB,GAAAD,OAAA,CAAAC,kBAAA,GAAG,yCAAyC","ignoreList":[]}
|
|
@@ -114,7 +114,8 @@ const loadData = async ({
|
|
|
114
114
|
skipMap,
|
|
115
115
|
searchString,
|
|
116
116
|
filter,
|
|
117
|
-
relationMode
|
|
117
|
+
relationMode,
|
|
118
|
+
shouldUseQa
|
|
118
119
|
}) => {
|
|
119
120
|
const promises = filter.map(async filterType => {
|
|
120
121
|
const skip = skipMap[filterType] ?? 0;
|
|
@@ -134,7 +135,8 @@ const loadData = async ({
|
|
|
134
135
|
const data = await (0, _get.getPersons)({
|
|
135
136
|
search: searchString,
|
|
136
137
|
skip,
|
|
137
|
-
relationMode
|
|
138
|
+
relationMode,
|
|
139
|
+
shouldUseQa
|
|
138
140
|
});
|
|
139
141
|
return {
|
|
140
142
|
key: _personFinder.PersonFinderFilterTypes.PERSON,
|
|
@@ -162,7 +164,8 @@ const loadData = async ({
|
|
|
162
164
|
}
|
|
163
165
|
const data = await (0, _get2.getSites)({
|
|
164
166
|
search: searchString,
|
|
165
|
-
skip
|
|
167
|
+
skip,
|
|
168
|
+
shouldUseQa
|
|
166
169
|
});
|
|
167
170
|
const filteredList = data === null || data === void 0 ? void 0 : data.list.filter(({
|
|
168
171
|
siteId
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personFinder.js","names":["_personFinder","require","_textstring","_get","_get2","_convert","_chaynsApi","_textStrings","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","normalizeTextstringReplacements","replacements","undefined","entries","reduce","acc","key","value","toString","getPersonFinderTextstringValue","textstring","getTextstringValue","libraryName","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","ttsToITextString","exports","getGroupName","groupNames","PersonFinderFilterTypes","PERSON","textStrings","components","personFinder","groupName","person","SITE","site","UAC","uac","isSiteEntry","entry","filterDataByKeys","data","keys","options","filterSingle","filteredEntries","excludedEntryIds","Array","isArray","length","filter","includes","id","excludedCount","count","Math","max","relevantKeys","original","searchString","skip","filteredEntry","shouldShowOwnUser","user","getUser","personId","ownUserEntry","commonSites","firstName","isVerified","lastName","type","fullName","Boolean","join","trim","toLowerCase","capitalizeFirstLetter","str","charAt","toUpperCase","slice","destructureData","filterType","_data$filterType","_data$filterType2","_data$filterType3","_data$filterType4","loadData","skipMap","relationMode","promises","map","_data$list","getPersons","search","list","convertPersonEntry","shouldShowLastOnlineTime","RelationMode","getSites","filteredList","siteId","convertSiteEntry","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":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"personFinder.js","names":["_personFinder","require","_textstring","_get","_get2","_convert","_chaynsApi","_textStrings","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","normalizeTextstringReplacements","replacements","undefined","entries","reduce","acc","key","value","toString","getPersonFinderTextstringValue","textstring","getTextstringValue","libraryName","PERSON_FINDER_TEXTSTRING_LIBRARY_NAME","ttsToITextString","exports","getGroupName","groupNames","PersonFinderFilterTypes","PERSON","textStrings","components","personFinder","groupName","person","SITE","site","UAC","uac","isSiteEntry","entry","filterDataByKeys","data","keys","options","filterSingle","filteredEntries","excludedEntryIds","Array","isArray","length","filter","includes","id","excludedCount","count","Math","max","relevantKeys","original","searchString","skip","filteredEntry","shouldShowOwnUser","user","getUser","personId","ownUserEntry","commonSites","firstName","isVerified","lastName","type","fullName","Boolean","join","trim","toLowerCase","capitalizeFirstLetter","str","charAt","toUpperCase","slice","destructureData","filterType","_data$filterType","_data$filterType2","_data$filterType3","_data$filterType4","loadData","skipMap","relationMode","shouldUseQa","promises","map","_data$list","getPersons","search","list","convertPersonEntry","shouldShowLastOnlineTime","RelationMode","getSites","filteredList","siteId","convertSiteEntry","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 shouldUseQa: boolean;\n}\n\nexport const loadData = async ({\n skipMap,\n searchString,\n filter,\n relationMode,\n shouldUseQa,\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({\n search: searchString,\n skip,\n relationMode,\n shouldUseQa,\n });\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, shouldUseQa });\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":"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","ignoreList":[]}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { getAccessToken } from 'chayns-api';
|
|
2
2
|
import { RelationMode } from '../../types/personFinder';
|
|
3
|
-
|
|
3
|
+
import { QA_RELATIONS_BASE_URL, RELATIONS_BASE_URL } from '../../constants/url';
|
|
4
4
|
export const getPersons = async ({
|
|
5
5
|
search,
|
|
6
6
|
skip,
|
|
7
7
|
take = 20,
|
|
8
|
-
relationMode = RelationMode.PERSON
|
|
8
|
+
relationMode = RelationMode.PERSON,
|
|
9
|
+
shouldUseQa
|
|
9
10
|
}) => {
|
|
10
11
|
const {
|
|
11
12
|
accessToken
|
|
@@ -19,7 +20,8 @@ export const getPersons = async ({
|
|
|
19
20
|
},
|
|
20
21
|
method: 'GET'
|
|
21
22
|
};
|
|
22
|
-
const
|
|
23
|
+
const url = `${shouldUseQa ? QA_RELATIONS_BASE_URL : RELATIONS_BASE_URL}v2/person?skip=##skip##&take=##take##&query=##search##&scoreForSite=##scoreForSite##`;
|
|
24
|
+
const response = await fetch(url.replace('##search##', search).replace('##skip##', skip.toString()).replace('##take##', take?.toString()).replace('##scoreForSite##', relationMode === RelationMode.SITE ? '1' : '0'), requestInit);
|
|
23
25
|
if (response.status === 200) {
|
|
24
26
|
return await response.json();
|
|
25
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","names":["getAccessToken","RelationMode","
|
|
1
|
+
{"version":3,"file":"get.js","names":["getAccessToken","RelationMode","QA_RELATIONS_BASE_URL","RELATIONS_BASE_URL","getPersons","search","skip","take","relationMode","PERSON","shouldUseQa","accessToken","undefined","requestInit","headers","Authorization","method","url","response","fetch","replace","toString","SITE","status","json"],"sources":["../../../../src/api/person/get.ts"],"sourcesContent":["import { getAccessToken } from 'chayns-api';\nimport { PersonEntryResult, RelationMode } from '../../types/personFinder';\nimport { QA_RELATIONS_BASE_URL, RELATIONS_BASE_URL } from '../../constants/url';\n\ninterface GetPersonResult {\n list: PersonEntryResult[];\n count: number;\n}\n\ninterface GetPersonsOptions {\n search: string;\n skip: number;\n take?: number;\n relationMode?: RelationMode;\n shouldUseQa: boolean;\n}\n\nexport const getPersons = async ({\n search,\n skip,\n take = 20,\n relationMode = RelationMode.PERSON,\n shouldUseQa,\n}: GetPersonsOptions) => {\n const { accessToken } = await getAccessToken();\n\n if (!accessToken) {\n return undefined;\n }\n\n const requestInit: RequestInit = {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n method: 'GET',\n };\n\n const url = `${shouldUseQa ? QA_RELATIONS_BASE_URL : RELATIONS_BASE_URL}v2/person?skip=##skip##&take=##take##&query=##search##&scoreForSite=##scoreForSite##`;\n\n const response = await fetch(\n url\n .replace('##search##', search)\n .replace('##skip##', skip.toString())\n .replace('##take##', take?.toString())\n .replace('##scoreForSite##', relationMode === RelationMode.SITE ? '1' : '0'),\n requestInit,\n );\n\n if (response.status === 200) {\n return (await response.json()) as GetPersonResult;\n }\n\n return undefined;\n};\n"],"mappings":"AAAA,SAASA,cAAc,QAAQ,YAAY;AAC3C,SAA4BC,YAAY,QAAQ,0BAA0B;AAC1E,SAASC,qBAAqB,EAAEC,kBAAkB,QAAQ,qBAAqB;AAe/E,OAAO,MAAMC,UAAU,GAAG,MAAAA,CAAO;EAC7BC,MAAM;EACNC,IAAI;EACJC,IAAI,GAAG,EAAE;EACTC,YAAY,GAAGP,YAAY,CAACQ,MAAM;EAClCC;AACe,CAAC,KAAK;EACrB,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAMX,cAAc,CAAC,CAAC;EAE9C,IAAI,CAACW,WAAW,EAAE;IACd,OAAOC,SAAS;EACpB;EAEA,MAAMC,WAAwB,GAAG;IAC7BC,OAAO,EAAE;MACLC,aAAa,EAAE,UAAUJ,WAAW;IACxC,CAAC;IACDK,MAAM,EAAE;EACZ,CAAC;EAED,MAAMC,GAAG,GAAG,GAAGP,WAAW,GAAGR,qBAAqB,GAAGC,kBAAkB,sFAAsF;EAE7J,MAAMe,QAAQ,GAAG,MAAMC,KAAK,CACxBF,GAAG,CACEG,OAAO,CAAC,YAAY,EAAEf,MAAM,CAAC,CAC7Be,OAAO,CAAC,UAAU,EAAEd,IAAI,CAACe,QAAQ,CAAC,CAAC,CAAC,CACpCD,OAAO,CAAC,UAAU,EAAEb,IAAI,EAAEc,QAAQ,CAAC,CAAC,CAAC,CACrCD,OAAO,CAAC,kBAAkB,EAAEZ,YAAY,KAAKP,YAAY,CAACqB,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,EAChFT,WACJ,CAAC;EAED,IAAIK,QAAQ,CAACK,MAAM,KAAK,GAAG,EAAE;IACzB,OAAQ,MAAML,QAAQ,CAACM,IAAI,CAAC,CAAC;EACjC;EAEA,OAAOZ,SAAS;AACpB,CAAC","ignoreList":[]}
|
package/lib/esm/api/site/get.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { getAccessToken } from 'chayns-api';
|
|
2
|
-
|
|
2
|
+
import { QA_RELATIONS_BASE_URL, RELATIONS_BASE_URL } from '../../constants/url';
|
|
3
3
|
export const getSites = async ({
|
|
4
4
|
search,
|
|
5
5
|
skip,
|
|
6
|
-
take = 20
|
|
6
|
+
take = 20,
|
|
7
|
+
shouldUseQa
|
|
7
8
|
}) => {
|
|
8
9
|
const {
|
|
9
10
|
accessToken
|
|
@@ -17,7 +18,8 @@ export const getSites = async ({
|
|
|
17
18
|
},
|
|
18
19
|
method: 'GET'
|
|
19
20
|
};
|
|
20
|
-
const
|
|
21
|
+
const url = `${shouldUseQa ? QA_RELATIONS_BASE_URL : RELATIONS_BASE_URL}location/?query=##search##&skip=##skip##&take=##take##&includeDomains=true`;
|
|
22
|
+
const response = await fetch(url.replace('##search##', search).replace('##skip##', skip.toString()).replace('##take##', take?.toString()), requestInit);
|
|
21
23
|
if (response.status === 200) {
|
|
22
24
|
return await response.json();
|
|
23
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","names":["getAccessToken","
|
|
1
|
+
{"version":3,"file":"get.js","names":["getAccessToken","QA_RELATIONS_BASE_URL","RELATIONS_BASE_URL","getSites","search","skip","take","shouldUseQa","accessToken","undefined","requestInit","headers","Authorization","method","url","response","fetch","replace","toString","status","json"],"sources":["../../../../src/api/site/get.ts"],"sourcesContent":["import { getAccessToken } from 'chayns-api';\nimport { SiteEntryResult } from '../../types/personFinder';\nimport { QA_RELATIONS_BASE_URL, RELATIONS_BASE_URL } from '../../constants/url';\n\ninterface GetSiteResult {\n count: number;\n list: SiteEntryResult[];\n}\n\ninterface GetSitesOptions {\n search: string;\n skip: number;\n take?: number;\n shouldUseQa: boolean;\n}\n\nexport const getSites = async ({ search, skip, take = 20, shouldUseQa }: GetSitesOptions) => {\n const { accessToken } = await getAccessToken();\n\n if (!accessToken) {\n return undefined;\n }\n\n const requestInit: RequestInit = {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n method: 'GET',\n };\n\n const url = `${shouldUseQa ? QA_RELATIONS_BASE_URL : RELATIONS_BASE_URL}location/?query=##search##&skip=##skip##&take=##take##&includeDomains=true`;\n\n const response = await fetch(\n url\n .replace('##search##', search)\n .replace('##skip##', skip.toString())\n .replace('##take##', take?.toString()),\n requestInit,\n );\n\n if (response.status === 200) {\n return (await response.json()) as GetSiteResult;\n }\n\n return undefined;\n};\n"],"mappings":"AAAA,SAASA,cAAc,QAAQ,YAAY;AAE3C,SAASC,qBAAqB,EAAEC,kBAAkB,QAAQ,qBAAqB;AAc/E,OAAO,MAAMC,QAAQ,GAAG,MAAAA,CAAO;EAAEC,MAAM;EAAEC,IAAI;EAAEC,IAAI,GAAG,EAAE;EAAEC;AAA6B,CAAC,KAAK;EACzF,MAAM;IAAEC;EAAY,CAAC,GAAG,MAAMR,cAAc,CAAC,CAAC;EAE9C,IAAI,CAACQ,WAAW,EAAE;IACd,OAAOC,SAAS;EACpB;EAEA,MAAMC,WAAwB,GAAG;IAC7BC,OAAO,EAAE;MACLC,aAAa,EAAE,UAAUJ,WAAW;IACxC,CAAC;IACDK,MAAM,EAAE;EACZ,CAAC;EAED,MAAMC,GAAG,GAAG,GAAGP,WAAW,GAAGN,qBAAqB,GAAGC,kBAAkB,4EAA4E;EAEnJ,MAAMa,QAAQ,GAAG,MAAMC,KAAK,CACxBF,GAAG,CACEG,OAAO,CAAC,YAAY,EAAEb,MAAM,CAAC,CAC7Ba,OAAO,CAAC,UAAU,EAAEZ,IAAI,CAACa,QAAQ,CAAC,CAAC,CAAC,CACpCD,OAAO,CAAC,UAAU,EAAEX,IAAI,EAAEY,QAAQ,CAAC,CAAC,CAAC,EAC1CR,WACJ,CAAC;EAED,IAAIK,QAAQ,CAACI,MAAM,KAAK,GAAG,EAAE;IACzB,OAAQ,MAAMJ,QAAQ,CAACK,IAAI,CAAC,CAAC;EACjC;EAEA,OAAOX,SAAS;AACpB,CAAC","ignoreList":[]}
|
|
@@ -36,6 +36,7 @@ const PersonFinderProvider = ({
|
|
|
36
36
|
defaultEntries,
|
|
37
37
|
excludedEntryIds,
|
|
38
38
|
shouldShowOwnUser = false,
|
|
39
|
+
shouldUseQa,
|
|
39
40
|
uacFilter,
|
|
40
41
|
entries,
|
|
41
42
|
relationMode
|
|
@@ -125,7 +126,8 @@ const PersonFinderProvider = ({
|
|
|
125
126
|
skipMap: {
|
|
126
127
|
[key]: current.skip
|
|
127
128
|
},
|
|
128
|
-
relationMode
|
|
129
|
+
relationMode,
|
|
130
|
+
shouldUseQa
|
|
129
131
|
}).then(result => {
|
|
130
132
|
const newData = result?.[key];
|
|
131
133
|
if (newData) {
|
|
@@ -134,7 +136,7 @@ const PersonFinderProvider = ({
|
|
|
134
136
|
}).finally(() => {
|
|
135
137
|
updateLoadingState(key, LoadingState.Success);
|
|
136
138
|
});
|
|
137
|
-
}, [appendData, data, getPagedUsersByGroups, relationMode, search, updateLoadingState]);
|
|
139
|
+
}, [appendData, data, getPagedUsersByGroups, relationMode, search, shouldUseQa, updateLoadingState]);
|
|
138
140
|
const addFriend = useCallback(personId => {
|
|
139
141
|
void postFriends(personId).then(result => {
|
|
140
142
|
if (result) {
|
|
@@ -187,6 +189,8 @@ const PersonFinderProvider = ({
|
|
|
187
189
|
}, [filterTypes]);
|
|
188
190
|
const latestArgsRef = useRef(null);
|
|
189
191
|
const latestHandledRequestRef = useRef(0);
|
|
192
|
+
const searchLocalRef = useRef(() => {});
|
|
193
|
+
const searchDataRef = useRef(() => {});
|
|
190
194
|
const throttledRequest = useRef(throttle(async () => {
|
|
191
195
|
const args = latestArgsRef.current;
|
|
192
196
|
if (!args) return;
|
|
@@ -202,7 +206,8 @@ const PersonFinderProvider = ({
|
|
|
202
206
|
searchString,
|
|
203
207
|
filter,
|
|
204
208
|
skipMap: {},
|
|
205
|
-
relationMode
|
|
209
|
+
relationMode,
|
|
210
|
+
shouldUseQa
|
|
206
211
|
});
|
|
207
212
|
if (requestTimestamp < latestHandledRequestRef.current) {
|
|
208
213
|
return;
|
|
@@ -229,10 +234,7 @@ const PersonFinderProvider = ({
|
|
|
229
234
|
}, THROTTLE_INTERVAL, {
|
|
230
235
|
leading: false,
|
|
231
236
|
trailing: true
|
|
232
|
-
}))
|
|
233
|
-
useEffect(() => {
|
|
234
|
-
dataRef.current = data;
|
|
235
|
-
}, [data]);
|
|
237
|
+
}));
|
|
236
238
|
const searchData = useCallback(({
|
|
237
239
|
filter
|
|
238
240
|
}) => {
|
|
@@ -275,26 +277,68 @@ const PersonFinderProvider = ({
|
|
|
275
277
|
});
|
|
276
278
|
updateLoadingState(PersonFinderFilterTypes.PERSON, searchedUsers.length === 0 ? LoadingState.Error : LoadingState.Success);
|
|
277
279
|
}, [entries, search, uacUsers, updateData, updateLoadingState]);
|
|
280
|
+
useEffect(() => {
|
|
281
|
+
dataRef.current = data;
|
|
282
|
+
}, [data]);
|
|
283
|
+
useEffect(() => {
|
|
284
|
+
searchLocalRef.current = searchLocal;
|
|
285
|
+
}, [searchLocal]);
|
|
286
|
+
useEffect(() => {
|
|
287
|
+
searchDataRef.current = searchData;
|
|
288
|
+
}, [searchData]);
|
|
278
289
|
useEffect(() => {
|
|
279
290
|
if (!search) return;
|
|
280
|
-
const active = activeFilter
|
|
291
|
+
const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;
|
|
292
|
+
const currentData = dataRef.current;
|
|
281
293
|
if (uacFilter || entries) {
|
|
282
|
-
|
|
294
|
+
searchLocalRef.current();
|
|
283
295
|
} else if (active?.includes(PersonFinderFilterTypes.UAC)) {
|
|
284
|
-
|
|
296
|
+
searchDataRef.current({
|
|
285
297
|
filter: [PersonFinderFilterTypes.UAC]
|
|
286
298
|
});
|
|
287
299
|
} else {
|
|
300
|
+
// Only load filters that don't have data for this search yet
|
|
301
|
+
const filtersToLoad = active.filter(filter => {
|
|
302
|
+
const filterData = currentData?.[filter];
|
|
303
|
+
return !filterData || filterData.searchString !== search;
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
// If we have filters to load, use them; otherwise use all active filters
|
|
307
|
+
const filterList = filtersToLoad.length > 0 ? filtersToLoad : active;
|
|
288
308
|
latestArgsRef.current = {
|
|
289
309
|
search,
|
|
290
|
-
filter:
|
|
310
|
+
filter: filterList
|
|
291
311
|
};
|
|
292
|
-
throttledRequest();
|
|
312
|
+
throttledRequest.current();
|
|
293
313
|
}
|
|
294
|
-
}, [
|
|
314
|
+
}, [search, uacFilter, entries]);
|
|
315
|
+
|
|
316
|
+
// Handle filter changes - load missing data for newly selected filters
|
|
317
|
+
useEffect(() => {
|
|
318
|
+
if (!search) return;
|
|
319
|
+
const active = activeFilter && activeFilter.length > 0 ? activeFilter : filterTypes;
|
|
320
|
+
const currentData = dataRef.current;
|
|
321
|
+
|
|
322
|
+
// Check which filters need to be loaded (don't have data for current search)
|
|
323
|
+
const missingFilters = active.filter(filter => {
|
|
324
|
+
const filterData = currentData?.[filter];
|
|
325
|
+
// If no data or data is from a different search, we need to load it
|
|
326
|
+
return !filterData || filterData.searchString !== search;
|
|
327
|
+
});
|
|
328
|
+
if (missingFilters.length === 0) return;
|
|
329
|
+
if (uacFilter || entries) return;
|
|
330
|
+
if (active?.includes(PersonFinderFilterTypes.UAC)) return;
|
|
331
|
+
|
|
332
|
+
// Load only the missing filters
|
|
333
|
+
latestArgsRef.current = {
|
|
334
|
+
search,
|
|
335
|
+
filter: missingFilters
|
|
336
|
+
};
|
|
337
|
+
throttledRequest.current();
|
|
338
|
+
}, [activeFilter, search, uacFilter, entries, filterTypes]);
|
|
295
339
|
useEffect(() => () => {
|
|
296
|
-
throttledRequest.cancel();
|
|
297
|
-
}, [
|
|
340
|
+
throttledRequest.current?.cancel();
|
|
341
|
+
}, []);
|
|
298
342
|
|
|
299
343
|
// load initial data
|
|
300
344
|
useEffect(() => {
|