Skip to content

Commit 61770f0

Browse files
author
Neeraj Singh
committed
Add missing imports
1 parent aa7d660 commit 61770f0

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

packages/vue-native-template-compiler/build.js

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ function _interopDefault(ex) {
99
var deindent = _interopDefault(require("de-indent"));
1010
var he = require("he");
1111
var changeCase = _interopDefault(require("change-case"));
12+
var _ = require('lodash');
1213

1314
/* */
1415

@@ -2001,6 +2002,7 @@ function processAttrs(el, options, customSlot = false) {
20012002
//
20022003
var renderer = new ReactNativeRenderGenerator(el, options);
20032004
let customRenderer = renderer.generateRender();
2005+
let customImport = renderer.generateImport();
20042006
customRenderer = customRenderer.replace(/render \(vm\)/, 'render (slotProps)')
20052007

20062008
if (name === 'render-prop') {
@@ -2022,6 +2024,15 @@ function processAttrs(el, options, customSlot = false) {
20222024
}
20232025
}
20242026
addAttr(el.parent, value, `${customRenderer}`);
2027+
let vueNativeCoreImport = customImport.split(splitRE);
2028+
if (vueNativeCoreImport && vueNativeCoreImport[0]) {
2029+
let imports = vueNativeCoreImport[0];
2030+
imports = imports.replace(/import \{/g, '')
2031+
imports = imports.replace(/\} from 'vue-native-helper'/g, '');
2032+
return imports.split(',').map(function (item) {
2033+
return item.trim();
2034+
});
2035+
}
20252036
} else {
20262037
addAttr(el, name, JSON.stringify(value));
20272038
}
@@ -5320,12 +5331,25 @@ function nativeCompiler(template, options) {
53205331
template = template.trim();
53215332
if (template) {
53225333
ast = parse(template, options);
5323-
traverse(ast, options);
5334+
let importObj = { imports: [] };
5335+
traverse(ast, options, importObj);
5336+
let imports = importObj.imports;
53245337
var renderer = new ReactNativeRenderGenerator(ast, options);
53255338
importCode = renderer.generateImport();
53265339
renderCode = renderer.generateRender();
53275340
// Remove extra commas
53285341
renderCode = renderCode.replace(/\},{2,}/g, "}");
5342+
// Add imports of the render props missing from main import
5343+
let requiredImports = [];
5344+
imports.forEach((customImport) => {
5345+
if (importCode.indexOf(customImport) === -1) {
5346+
requiredImports.push(customImport)
5347+
}
5348+
})
5349+
let requiredImportsString = requiredImports.join(',')
5350+
if (requiredImportsString) {
5351+
importCode = importCode.replace(/\} from 'vue-native-helper'/g, `, ${requiredImportsString} } from 'vue-native-helper'`)
5352+
}
53295353
}
53305354
return {
53315355
ast: ast,
@@ -5334,7 +5358,7 @@ function nativeCompiler(template, options) {
53345358
};
53355359
}
53365360

5337-
function traverse(ast, options, parent = null, childIndex) {
5361+
function traverse(ast, options, importObj, parent = null, childIndex) {
53385362
// Check for render-prop and render-prop-fn within child, if yes then add that as a prop
53395363
//
53405364
if (ast.attrsMap && (ast.attrsMap['render-prop'] || ast.attrsMap['render-prop-fn']) && ast.parent) {
@@ -5343,15 +5367,17 @@ function traverse(ast, options, parent = null, childIndex) {
53435367
slotname &&
53445368
ast.parent
53455369
) {
5346-
processAttrs(ast, options, true);
5370+
// Get modules imported for slots
5371+
let importModules = processAttrs(ast, options, true);
5372+
importObj.imports = _.union(importObj.imports, importModules)
53475373
if (parent) {
53485374
delete parent.children[childIndex]
53495375
}
53505376
}
53515377
}
53525378
if (ast.children) {
53535379
ast.children.forEach((child, index) => {
5354-
traverse(child, options, ast, index);
5380+
traverse(child, options, importObj, ast, index);
53555381
});
53565382
}
53575383
}

packages/vue-native-template-compiler/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"dependencies": {
2323
"he": "^1.1.0",
2424
"de-indent": "^1.0.2",
25-
"change-case": "^3.0.1"
25+
"change-case": "^3.0.1",
26+
"lodash": "^4.17.10"
2627
}
27-
}
28+
}

0 commit comments

Comments
 (0)