box-ui-elements-mlh
Version:
42 lines (37 loc) • 1.61 kB
Flow
// @flow
import type { MetadataTemplateField, MetadataTemplate } from '../../common/types/metadata';
const isHidden = (obj: MetadataTemplate | MetadataTemplateField): boolean => {
return !!obj.isHidden || !!obj.hidden;
};
/**
* Utility function for converting a string or array of strings into a Set object
* @param templateFilters - Array<string> | string
* @returns {Set<T>}
*/
const normalizeTemplateFilters = (templateFilters: Array<string> | string): Set<string> => {
return typeof templateFilters === 'string' ? new Set([templateFilters]) : new Set(templateFilters);
};
/**
* Utility function for cloning an array of metadata templates and filtering the templates and fields if necessary
* @param templates Array<MetadataTemplate>
* @param selectedTemplateKey - string
* @param templateFilters - Array<string> | string
* @returns {Array<T>}
*/
const normalizeTemplates = (
templates: Array<MetadataTemplate>,
selectedTemplateKey?: string,
templateFilters?: Array<string> | string,
): Array<MetadataTemplate> => {
if (!selectedTemplateKey) {
return [...templates];
}
const clonedTemplates = templates.filter(template => template.templateKey === selectedTemplateKey);
const fields = clonedTemplates[0] ? clonedTemplates[0].fields : null;
if (templateFilters && fields) {
const normalizedFilters = normalizeTemplateFilters(templateFilters);
clonedTemplates[0].fields = fields.filter(field => normalizedFilters.has(field.id));
}
return clonedTemplates;
};
export { isHidden, normalizeTemplates, normalizeTemplateFilters };