@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
JavaScript
;
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