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