Creating Custom Provider and Overriding from outside applications

Task:
dmn-js-decision-table, table head - input expression --> Change this to Dropdown list and populate dynamically from rest api

Approach:

  1. dmn-js-shared, features/added a new probiver (rule-fact-provider), contains getRuleFacts() returns empty array
  2. from my application, while creating a modeler, provided overridden rule-fact-provider using additional modules
    3.InputCellContextMenuExt retrived rule-fact-provider using context.inject.get(‘rule-fact-provider’)

Issue:
Returning empty from default provider instead of overridden rule-fact-provider that is given while creating modeler using additional modules

code

import RuleFactsProvider from './RuleFactsProvider';
export default {
  __init__: [ 'ruleFactsProvider' ],
  ruleFactsProvider: [ 'type', RuleFactsProvider ]
};
'use strict';


function RuleFactsProvider() {

  this.getRuleFacts = function() {
    console.log('RuleFactsProvider');
    return [{
      label: 'POTATO',
      value: 'potato'
    }];
  };
}

export default RuleFactsProvider;

from my application

this.dmnDiagramModeler = new DmnModelerExt({
      keyboard: { bindTo: window },
      drd: {
        additionalModules: [ ruleFactsProviderExt  ]
      }});

ruleFactsProviderExt in my application

export default function RuleFactsProviderExt() {

  this.getRuleFacts = function() {
    console.log('RuleFactsProviderExt');
    return [{
      label: 'TOMATO',
      value: 'tomato'
    }];
  };
}

I’m expecting TOMATO but POTATO is appearing in the dropdown

Implementation of InputCellContextMenuExt in dmn-js-decition-table

constructor(props, context) {
    super(props, context);
    this.state = {};
    inject(this);
    this.persistChanges = this.debounceInput(this.persistChanges);
    this._expressionLanguages = context.injector.get('expressionLanguages');
    this._ruleFactsService = context.injector.get('ruleFactsProvider');
    console.log('this._ruleFactsService.getRuleFacts()', this._ruleFactsService.getRuleFacts());
  }

I found the root cause

Changed from

this.dmnDiagramModeler = new DmnModelerExt({
      keyboard: { bindTo: window },
      drd: {
        additionalModules: [ ruleFactsProviderExt  ]
      }});

To

this.dmnDiagramModeler = new DmnModelerExt({
      keyboard: { bindTo: window },
      decisionTable: {
        additionalModules: [ ruleFactsProviderExt  ]
      }});