浏览代码

HUE-9207 [frontend] Improve instantiation of optimizer strategies

Johan Ahlen 5 年之前
父节点
当前提交
1199c6480d
共有 1 个文件被更改,包括 15 次插入12 次删除
  1. 15 12
      desktop/core/src/desktop/js/catalog/optimizer/optimizer.js

+ 15 - 12
desktop/core/src/desktop/js/catalog/optimizer/optimizer.js

@@ -18,19 +18,22 @@ import ApiStrategy from './apiStrategy';
 import BaseStrategy from './baseStrategy';
 import LocalStrategy from './localStrategy';
 
-const OPTIMIZER_STRATEGIES = {
-  api: ApiStrategy,
-  off: BaseStrategy,
-  local: LocalStrategy
+const optimizerInstances = {};
+
+const createOptimizer = connector => {
+  // TODO: Remove window.OPTIMIZER_MODE and hardcoded { optimizer: 'api' } when 'connector.optimizer_mode' works.
+  if (window.OPTIMIZER_MODE === 'local') {
+    return new LocalStrategy(connector);
+  }
+  if (window.OPTIMIZER_MODE === 'api') {
+    return new ApiStrategy(connector);
+  }
+  return new BaseStrategy(connector);
 };
 
 export const getOptimizer = connector => {
-  // Can remove window.OPTIMIZER_MODE and hardcoded { optimizer: 'api' } when 'connector.optimizer_mode' works.
-  const strategy =
-    window.OPTIMIZER_MODE && OPTIMIZER_STRATEGIES[window.OPTIMIZER_MODE]
-      ? OPTIMIZER_STRATEGIES[window.OPTIMIZER_MODE]
-      : OPTIMIZER_STRATEGIES.off;
-
-  // Connector should contain proper 'sourceType' so that dataCatalog.getEntry works in localStrategy
-  return new strategy(connector);
+  if (!optimizerInstances[connector.id]) {
+    optimizerInstances[connector.id] = createOptimizer(connector);
+  }
+  return optimizerInstances[connector.id];
 };