UNPKG

@chayns-components/person-finder

Version:

A set of beautiful React components for developing your own applications with chayns.

126 lines (125 loc) 5.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.usePersonFinderSmallItem = exports.usePersonFinderItem = exports.useOnlyFriends = exports.useFriends = exports.useErrorMessage = exports.useClosestElementAbove = void 0; var _react = _interopRequireWildcard(require("react")); var _personFinder = require("../types/personFinder"); var _personFinder2 = require("../utils/personFinder"); var _core = require("@chayns-components/core"); var _PersonFinderProvider = require("../components/PersonFinderProvider"); var _PersonFinderGroup = require("../components/person-finder/person-finder-wrapper/person-finder-body/person-finder-group/PersonFinderGroup.styles"); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } const useClosestElementAbove = (containerRef, itemClass) => { const [closestElement, setClosestElement] = (0, _react.useState)(null); (0, _react.useEffect)(() => { const updateClosestElement = () => { if (!containerRef.current) return; const container = containerRef.current; const items = Array.from(container.getElementsByClassName(itemClass)); const containerRect = container.getBoundingClientRect(); let closest = null; let minDistance = Infinity; items.forEach(item => { const rect = item.getBoundingClientRect(); const distance = Math.abs(rect.bottom - containerRect.top); if (rect.bottom < containerRect.top && distance < minDistance) { minDistance = distance; closest = item; } }); setClosestElement(closest); }; const container = containerRef.current; if (container) { container.addEventListener('scroll', updateClosestElement); updateClosestElement(); } return () => { container === null || container === void 0 || container.removeEventListener('scroll', updateClosestElement); }; }, [containerRef, itemClass]); return closestElement === null || closestElement === void 0 ? void 0 : closestElement.textContent; }; exports.useClosestElementAbove = useClosestElementAbove; const usePersonFinderItem = entry => { const isSite = (0, _personFinder2.isSiteEntry)(entry); const { url, commonSites, name, firstName, lastName, id, isVerified } = entry; const imageUrl = `https://sub60.tobit.com/${isSite ? 'l' : 'u'}/${id}?size=120`; const titleElement = isVerified && /*#__PURE__*/_react.default.createElement(_core.VerificationBadge, null); const title = isSite ? name : `${firstName ?? ''} ${lastName ?? ''}`; const subtitle = isSite ? url : `chaynsID: ${id}${commonSites ? ` - ${commonSites} gemeinsame Sites` : ''}`; return { isSite, title, subtitle, imageUrl, titleElement }; }; exports.usePersonFinderItem = usePersonFinderItem; const usePersonFinderSmallItem = entry => { const { name } = entry; return { title: name }; }; exports.usePersonFinderSmallItem = usePersonFinderSmallItem; const useFriends = personId => { const { friends, removeFriend, addFriend } = (0, _PersonFinderProvider.usePersonFinder)(); const isFriend = friends === null || friends === void 0 ? void 0 : friends.map(entry => entry.id).includes(personId); return { isFriend, addFriend, removeFriend }; }; exports.useFriends = useFriends; const useOnlyFriends = entries => { const { friends } = (0, _PersonFinderProvider.usePersonFinder)(); return (0, _react.useMemo)(() => { if (!(entries !== null && entries !== void 0 && entries.length)) return false; if (!(friends !== null && friends !== void 0 && friends.length)) return false; const friendIds = new Set(friends.map(friend => friend.id)); return entries.every(entry => friendIds.has(entry.id)); }, [entries, friends]); }; exports.useOnlyFriends = useOnlyFriends; const useErrorMessage = ({ loadingState, search, entries, groupName, areOnlyFriendsGiven }) => (0, _react.useMemo)(() => { if (search.length <= 2 && !areOnlyFriendsGiven) { return /*#__PURE__*/_react.default.createElement(_PersonFinderGroup.StyledPersonFinderGroupErrorMessage, null, "Gib einen Suchbegriff mit mindestens drei Zeichen ein."); } if (entries.length === 0) { if (loadingState === _personFinder.LoadingState.Error && search.length) { return /*#__PURE__*/_react.default.createElement(_PersonFinderGroup.StyledPersonFinderGroupErrorMessage, null, "Es konnten keine ", groupName, " zu der Suche \"", search, "\" gefunden werden."); } if (search.length === 0) { return /*#__PURE__*/_react.default.createElement(_PersonFinderGroup.StyledPersonFinderGroupErrorMessage, null, "Gib einen Suchbegriff ein, um nach ", groupName, " zu suchen."); } } return null; }, [areOnlyFriendsGiven, entries.length, groupName, loadingState, search]); exports.useErrorMessage = useErrorMessage; //# sourceMappingURL=personFinder.js.map