d2-ui
Version:
256 lines (235 loc) • 7.58 kB
JavaScript
export function getSideBarConfig() {
return {
all: {
items: [],
},
categorySection: {
items: [
'categoryOption',
'category',
'categoryCombo',
'categoryOptionCombo',
'categoryOptionGroup',
'categoryOptionGroupSet',
],
},
dataElementSection: {
items: [
'dataElement',
'dataElementGroup',
'dataElementGroupSet',
],
},
dataSetSection: {
items: [
'dataSet',
],
},
indicatorSection: {
items: [
'indicator',
'indicatorType',
'indicatorGroup',
'indicatorGroupSet',
'programIndicator',
'programIndicatorGroup',
],
},
organisationUnitSection: {
items: [
'organisationUnit',
'organisationUnitGroup',
'organisationUnitGroupSet',
'organisationUnitLevel',
],
},
programSection: {
items: [
'program',
'trackedEntityAttribute',
'trackedEntityAttributeGroup',
'relationshipType',
'trackedEntity',
'programRule',
'programRuleVariable',
],
},
validationSection: {
items: [
'validationRule',
'validationRuleGroup',
'validationNotificationTemplate',
],
},
otherSection: {
items: [
'constant',
'attribute',
'optionSet',
'legendSet',
'predictor',
'pushAnalysis',
'externalMapLayer',
'dataApprovalLevel',
'dataApprovalWorkflow',
],
},
};
}
export function getSectionForType(modelType) {
const config = getSideBarConfig();
return Object
.keys(config)
.find(section => config[section] &&
config[section].items &&
config[section].items.indexOf(modelType) >= 0);
}
/**
* Type details:
*
* - filters: Add controls for filtering the model list on these properties
* - columns: Override the default columns in the data table
*/
const typeDetails = {
category: {
filters: ['dataDimensionType'],
columns: ['displayName', 'dataDimensionType', 'publicAccess', 'lastUpdated'],
},
categoryCombo: {
filters: ['dataDimensionType'],
columns: ['displayName', 'dataDimensionType', 'publicAccess', 'lastUpdated'],
},
categoryOptionGroup: {
filters: ['dataDimensionType'],
columns: ['displayName', 'dataDimensionType', 'publicAccess', 'lastUpdated'],
},
categoryOptionGroupSet: {
filters: ['dataDimensionType'],
columns: ['displayName', 'dataDimensionType', 'publicAccess', 'lastUpdated'],
},
dataElement: {
filters: ['domainType', 'valueType', 'categoryCombo'],
columns: ['displayName', 'domainType', 'valueType', 'categoryCombo[displayName]', 'lastUpdated'],
},
dataElementGroupSet: {
columns: ['displayName', 'compulsory', 'publicAccess', 'lastUpdated'],
},
dataSet: {
filters: ['formType'],
columns: ['displayName', 'formType', 'periodType', 'publicAccess', 'lastUpdated'],
},
indicator: {
filters: ['indicatorType'],
columns: ['displayName', 'indicatorType[displayName]', 'publicAccess', 'lastUpdated'],
},
indicatorType: {
columns: ['displayName', 'factor', 'publicAccess', 'lastUpdated'],
},
indicatorGroupSet: {
columns: ['displayName', 'compulsory', 'publicAccess', 'lastUpdated'],
},
organisationUnit: {
columns: ['displayName', 'level', 'lastUpdated'],
},
organisationUnitGroupSet: {
columns: ['displayName', 'compulsory', 'dataDimension', 'publicAccess', 'lastUpdated'],
},
trackedEntityAttribute: {
filters: ['valueType', 'aggregationType'],
columns: ['displayName', 'valueType', 'aggregationType', 'unique', 'confidential', 'lastUpdated'],
},
program: {
columns: ['displayName', 'publicAccess', 'lastUpdated'],
defaultFilters: [
['programType', 'WITHOUT_REGISTRATION'],
],
},
programIndicator: {
filters: ['program'],
columns: ['displayName', 'program[displayName]', 'lastUpdated'],
},
programRule: {
filters: ['program'],
columns: ['displayName', 'program[displayName]', 'lastUpdated'],
},
programRuleVariable: {
filters: ['program', 'programRuleVariableSourceType'],
columns: ['displayName', 'program[displayName]', 'programRuleVariableSourceType', 'lastUpdated'],
},
validationRule: {
columns: ['displayName', 'importance', 'periodType', 'publicAccess', 'lastUpdated'],
},
constant: {
columns: ['displayName', 'value', 'lastUpdated'],
},
attribute: {
columns: ['displayName', 'valueType', 'mandatory', 'unique', 'publicAccess', 'lastUpdated'],
},
optionSet: {
columns: ['displayName', 'valueType', 'lastUpdated'],
},
predictor: {
columns: ['displayName', 'output[displayName]', 'periodType', 'lastUpdated'],
},
pushAnalysis: {
columns: ['displayName', 'dashboard[displayName]', 'lastUpdated'],
},
externalMapLayer: {
columns: ['displayName', 'mapLayerPosition', 'mapService', 'lastUpdated'],
},
dataApprovalLevel: {
columns: [
'displayName',
'level',
'orgUnitLevel',
'categoryOptionGroupSet[displayName]',
'publicAccess',
'lastUpdated',
],
},
dataApprovalWorkflow: {
columns: [
'displayName',
'periodType',
'publicAccess',
'lastUpdated',
],
},
};
export function getFilterFieldsForType(modelType) {
if (typeDetails.hasOwnProperty(modelType) && typeDetails[modelType].hasOwnProperty('filters')) {
return typeDetails[modelType].filters;
}
return [];
}
export function getFiltersForType(modelType) {
if (typeDetails.hasOwnProperty(modelType) && typeDetails[modelType].hasOwnProperty('filters')) {
return typeDetails[modelType]
.filters
.reduce((f, filters) => {
f[filters] = null;
return f;
}, {});
}
return [];
}
export function getTableColumnsForType(modelType, preservePropNames = false) {
if (typeDetails.hasOwnProperty(modelType) && typeDetails[modelType].hasOwnProperty('columns')) {
return typeDetails[modelType].columns
.map(col => preservePropNames ? col : col.replace(/(\w*)\[(\w*)]/, '$1___$2'));
}
// Default columns:
return ['displayName', 'publicAccess', 'lastUpdated'];
}
export function getDefaultFiltersForType(modelType) {
if (typeDetails.hasOwnProperty(modelType) &&
typeDetails[modelType].hasOwnProperty('defaultFilters') &&
Array.isArray(typeDetails[modelType].defaultFilters)
) {
return typeDetails[modelType].defaultFilters;
}
return [];
}
export default {
getSideBarConfig,
};