UNPKG

@chayns-components/person-finder

Version:

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

161 lines (160 loc) 6.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadData = exports.isSiteEntry = exports.getGroupName = exports.filterDataByKeys = exports.destructureData = exports.capitalizeFirstLetter = void 0; var _personFinder = require("../types/personFinder"); var _get = require("../api/person/get"); var _get2 = require("../api/site/get"); var _convert = require("./convert"); var _chaynsApi = require("chayns-api"); const getGroupName = key => { const names = { person: 'Personen', site: 'Sites', uac: 'UAC Gruppen' }; return names[key]; }; exports.getGroupName = getGroupName; const isSiteEntry = entry => 'name' in entry && !('firstName' in entry); exports.isSiteEntry = isSiteEntry; const filterDataByKeys = (data = {}, keys = [], options = {}) => { const filterSingle = entry => { let filteredEntries = entry.entries; const { excludedEntryIds } = options; if (Array.isArray(excludedEntryIds) && excludedEntryIds.length > 0) { filteredEntries = filteredEntries.filter(e => !excludedEntryIds.includes(e.id)); } const excludedCount = entry.entries.length - filteredEntries.length; return { ...entry, entries: filteredEntries, count: Math.max(0, entry.count - excludedCount) }; }; const relevantKeys = keys.length > 0 ? keys : Object.keys(data); return relevantKeys.reduce((acc, key) => { const original = data[key] ?? { searchString: '', count: 0, skip: 0, entries: [] }; const filteredEntry = filterSingle(original); if (options.shouldShowOwnUser && key === _personFinder.PersonFinderFilterTypes.PERSON) { const user = (0, _chaynsApi.getUser)(); if (typeof (user === null || user === void 0 ? void 0 : user.personId) === 'string') { // Ensure that the own user is always included in the person filter const ownUserEntry = { commonSites: 0, firstName: user.firstName ?? '', id: user.personId, isVerified: false, lastName: user.lastName ?? '', type: _personFinder.PersonFinderFilterTypes.PERSON }; const fullName = `${ownUserEntry.firstName} ${ownUserEntry.lastName}`.trim(); if (original.searchString.length < 3 || fullName.toLowerCase().includes(original.searchString.toLowerCase())) { filteredEntry.entries = [ownUserEntry, ...filteredEntry.entries]; filteredEntry.count += 1; // Increment count to account for the own user } } } return { ...acc, [key]: filteredEntry }; }, {}); }; exports.filterDataByKeys = filterDataByKeys; const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); exports.capitalizeFirstLetter = capitalizeFirstLetter; const destructureData = (data, filterType) => { var _data$filterType, _data$filterType2, _data$filterType3, _data$filterType4; return { count: (data === null || data === void 0 || (_data$filterType = data[filterType]) === null || _data$filterType === void 0 ? void 0 : _data$filterType.count) ?? 0, skip: (data === null || data === void 0 || (_data$filterType2 = data[filterType]) === null || _data$filterType2 === void 0 ? void 0 : _data$filterType2.skip) ?? 0, searchString: (data === null || data === void 0 || (_data$filterType3 = data[filterType]) === null || _data$filterType3 === void 0 ? void 0 : _data$filterType3.searchString) ?? '', entries: (data === null || data === void 0 || (_data$filterType4 = data[filterType]) === null || _data$filterType4 === void 0 ? void 0 : _data$filterType4.entries) ?? [] }; }; exports.destructureData = destructureData; const loadData = async ({ skipMap, searchString, filter }) => { const promises = filter.map(async filterType => { const skip = skipMap[filterType] ?? 0; if (filterType === _personFinder.PersonFinderFilterTypes.PERSON) { var _data$list; if (searchString.length <= 2) { return { key: _personFinder.PersonFinderFilterTypes.PERSON, value: { searchString, count: 0, skip: 0, entries: [] } }; } const data = await (0, _get.getPersons)({ search: searchString, skip }); return { key: _personFinder.PersonFinderFilterTypes.PERSON, value: { searchString, count: (data === null || data === void 0 ? void 0 : data.count) ?? 0, skip: skip + ((data === null || data === void 0 || (_data$list = data.list) === null || _data$list === void 0 ? void 0 : _data$list.length) ?? 0), entries: (0, _convert.convertPersonEntry)((data === null || data === void 0 ? void 0 : data.list) ?? []) } }; } if (filterType === _personFinder.PersonFinderFilterTypes.SITE) { if (searchString.length <= 2) { return { key: _personFinder.PersonFinderFilterTypes.SITE, value: { searchString, count: 0, skip: 0, entries: [] } }; } const data = await (0, _get2.getSites)({ search: searchString, skip }); const filteredList = data === null || data === void 0 ? void 0 : data.list.filter(({ siteId }) => siteId !== null); return { key: _personFinder.PersonFinderFilterTypes.SITE, value: { searchString, count: (data === null || data === void 0 ? void 0 : data.count) ?? 0, skip: skip + ((filteredList === null || filteredList === void 0 ? void 0 : filteredList.length) ?? 0), entries: (0, _convert.convertSiteEntry)(filteredList ?? []) } }; } return null; }); const results = await Promise.all(promises); return results.reduce((acc, item) => { if (!item) return acc; return { ...acc, [item.key]: item.value }; }, {}); }; exports.loadData = loadData; //# sourceMappingURL=personFinder.js.map