mirror of
https://github.com/elastic/kibana.git
synced 2025-06-27 18:51:07 -04:00
implement baseFeatureConfigModifier()
for ProductFeatures
This commit is contained in:
parent
bff5fc3748
commit
de05a3b167
3 changed files with 64 additions and 3 deletions
|
@ -35,6 +35,15 @@ export type ProductFeatureKibanaConfig<T extends string = string> =
|
|||
RecursivePartial<BaseKibanaFeatureConfig> & {
|
||||
subFeatureIds?: T[];
|
||||
subFeaturesPrivileges?: SubFeaturesPrivileges[];
|
||||
|
||||
/** An option for product features to modify the base kibana feature.
|
||||
*
|
||||
* @param baseFeatureConfig
|
||||
* @returns modified baseFeatureConfig
|
||||
*/
|
||||
baseFeatureConfigModifier?: (
|
||||
baseFeatureConfig: BaseKibanaFeatureConfig
|
||||
) => BaseKibanaFeatureConfig;
|
||||
};
|
||||
export type ProductFeaturesConfig<T extends string = string> = Map<
|
||||
ProductFeatureKeyType,
|
||||
|
|
|
@ -352,6 +352,50 @@ describe('ProductFeaturesConfigMerger', () => {
|
|||
});
|
||||
});
|
||||
|
||||
it('should call baseFeatureConfigModifier() for all product features', () => {
|
||||
const enabledProductFeaturesConfigs: ProductFeatureKibanaConfig[] = [
|
||||
{
|
||||
subFeatureIds: ['subFeature3', 'subFeature1'],
|
||||
baseFeatureConfigModifier: jest
|
||||
.fn()
|
||||
.mockImplementation((baseConfig: KibanaFeatureConfig): KibanaFeatureConfig => {
|
||||
return { ...baseConfig, name: 'NEW NAME' };
|
||||
}),
|
||||
},
|
||||
{
|
||||
baseFeatureConfigModifier: jest
|
||||
.fn()
|
||||
.mockImplementation((baseConfig: KibanaFeatureConfig): KibanaFeatureConfig => {
|
||||
return { ...baseConfig, order: 666 };
|
||||
}),
|
||||
},
|
||||
];
|
||||
|
||||
const merged = merger.mergeProductFeatureConfigs(
|
||||
baseKibanaFeature,
|
||||
[],
|
||||
enabledProductFeaturesConfigs
|
||||
);
|
||||
|
||||
expect(enabledProductFeaturesConfigs[0].baseFeatureConfigModifier).toBeCalledWith(
|
||||
baseKibanaFeature
|
||||
);
|
||||
expect(enabledProductFeaturesConfigs[1].baseFeatureConfigModifier).toBeCalledWith({
|
||||
...baseKibanaFeature,
|
||||
name: 'NEW NAME',
|
||||
});
|
||||
|
||||
expect(merged).toEqual({
|
||||
...baseKibanaFeature,
|
||||
|
||||
// modifications:
|
||||
name: 'NEW NAME',
|
||||
order: 666,
|
||||
|
||||
subFeatures: [subFeature1, subFeature3],
|
||||
});
|
||||
});
|
||||
|
||||
it('should merge everything at the same time', () => {
|
||||
const enabledProductFeaturesConfigs: ProductFeatureKibanaConfig[] = [
|
||||
{
|
||||
|
|
|
@ -32,20 +32,28 @@ export class ProductFeaturesConfigMerger<T extends string = string> {
|
|||
kibanaSubFeatureIds: T[],
|
||||
productFeaturesConfigs: ProductFeatureKibanaConfig[]
|
||||
): KibanaFeatureConfig {
|
||||
const mergedKibanaFeatureConfig = cloneDeep(kibanaFeatureConfig) as KibanaFeatureConfig;
|
||||
let mergedKibanaFeatureConfig = cloneDeep(kibanaFeatureConfig) as KibanaFeatureConfig;
|
||||
const subFeaturesPrivilegesToMerge: SubFeaturesPrivileges[] = [];
|
||||
const enabledSubFeaturesIndexed = Object.fromEntries(
|
||||
kibanaSubFeatureIds.map((id) => [id, true])
|
||||
);
|
||||
|
||||
productFeaturesConfigs.forEach((productFeatureConfig) => {
|
||||
const { subFeaturesPrivileges, subFeatureIds, ...productFeatureConfigToMerge } =
|
||||
cloneDeep(productFeatureConfig);
|
||||
const {
|
||||
subFeaturesPrivileges,
|
||||
subFeatureIds,
|
||||
baseFeatureConfigModifier,
|
||||
...productFeatureConfigToMerge
|
||||
} = cloneDeep(productFeatureConfig);
|
||||
|
||||
subFeatureIds?.forEach((subFeatureId) => {
|
||||
enabledSubFeaturesIndexed[subFeatureId] = true;
|
||||
});
|
||||
|
||||
if (baseFeatureConfigModifier) {
|
||||
mergedKibanaFeatureConfig = baseFeatureConfigModifier(mergedKibanaFeatureConfig);
|
||||
}
|
||||
|
||||
if (subFeaturesPrivileges) {
|
||||
subFeaturesPrivilegesToMerge.push(...subFeaturesPrivileges);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue