diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/app/index.js b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/app/index.js
index f68db03a514fc..acefd320d4f46 100644
--- a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/app/index.js
+++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/app/index.js
@@ -1,12 +1,45 @@
+/* eslint-disable sort-keys */
+
const Generator = require('yeoman-generator');
+const chalk = require('chalk');
+const yosay = require('yosay');
module.exports = class extends Generator {
- initializing() {
+ async prompting() {
+ // Have Yeoman greet the user.
+ this.log(yosay(`Welcome to the rad ${chalk.red('generator-superset')} generator!`));
+
+ this.option('skipInstall');
+
+ this.answers = await this.prompt([
+ {
+ type: 'list',
+ name: 'subgenerator',
+ message: 'What do you want to do?',
+ choices: [
+ {
+ name: 'Create superset-ui package in the monorepo',
+ value: 'package',
+ },
+ {
+ name: 'Create superset-ui-legacy package in the monorepo',
+ value: 'legacy-plugin-chart',
+ },
+ {
+ name: 'Create superset-ui-legacy chart demo in storybook',
+ value: 'legacy-plugin-chart-demo',
+ },
+ ],
+ },
+ ]);
+ }
+
+ configuring() {
// Redirect the default 'app' generator
// to 'package' subgenerator
// until there are multiple subgenerators
// then this can be changed into a menu to select
// subgenerator.
- this.composeWith(require.resolve('../package'));
+ this.composeWith(require.resolve(`../${this.answers.subgenerator}`));
}
};
diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart-demo/index.js b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart-demo/index.js
new file mode 100644
index 0000000000000..90a708f5274a4
--- /dev/null
+++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart-demo/index.js
@@ -0,0 +1,39 @@
+/* eslint-disable sort-keys */
+
+const Generator = require('yeoman-generator');
+const chalk = require('chalk');
+const yosay = require('yosay');
+const _ = require('lodash');
+
+module.exports = class extends Generator {
+ async prompting() {
+ // Have Yeoman greet the user.
+ this.log(yosay(`Welcome to the rad ${chalk.red('generator-superset')} generator!`));
+
+ this.option('skipInstall');
+
+ this.answers = await this.prompt([
+ {
+ type: 'input',
+ name: 'packageName',
+ message: 'Package name:',
+ default: _.kebabCase(this.appname.replace('legacy plugin chart', '').trim()), // Default to current folder name
+ },
+ {
+ type: 'input',
+ name: 'packageLabel',
+ message: 'Package label:',
+ default: _.capitalize(_.camelCase(this.appname.replace('legacy plugin chart', '').trim())), // Default to current folder name
+ },
+ ]);
+ }
+
+ writing() {
+ this.fs.copyTpl(this.templatePath('index.js'), this.destinationPath('index.js'), this.answers);
+ this.fs.copyTpl(
+ this.templatePath('Stories.jsx'),
+ this.destinationPath('Stories.jsx'),
+ this.answers,
+ );
+ }
+};
diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart-demo/templates/Stories.jsx b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart-demo/templates/Stories.jsx
new file mode 100644
index 0000000000000..a5f1224242409
--- /dev/null
+++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart-demo/templates/Stories.jsx
@@ -0,0 +1,23 @@
+/* eslint-disable no-magic-numbers */
+import React from 'react';
+import { SuperChart } from '@superset-ui/chart';
+
+export default [
+ {
+ renderStory: () => (
+
+ ),
+ storyName: '<%= packageLabel %>ChartPlugin',
+ storyPath: 'plugin-chart-<%= packageName %>',
+ },
+];
diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart-demo/templates/index.js b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart-demo/templates/index.js
new file mode 100644
index 0000000000000..508bb77bfaf35
--- /dev/null
+++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart-demo/templates/index.js
@@ -0,0 +1,8 @@
+import <%= packageLabel %>ChartPlugin from '@superset-ui/legacy-plugin-chart-<%= packageName %>';
+import Stories from './Stories';
+
+new <%= packageLabel %>ChartPlugin().configure({ key: '<%= packageName %>' }).register();
+
+export default {
+ examples: [...Stories],
+};
diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart/index.js b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart/index.js
new file mode 100644
index 0000000000000..7cf0867943ac3
--- /dev/null
+++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart/index.js
@@ -0,0 +1,44 @@
+/* eslint-disable sort-keys */
+
+const Generator = require('yeoman-generator');
+const chalk = require('chalk');
+const yosay = require('yosay');
+const _ = require('lodash');
+
+module.exports = class extends Generator {
+ async prompting() {
+ // Have Yeoman greet the user.
+ this.log(yosay(`Welcome to the rad ${chalk.red('generator-superset')} generator!`));
+
+ this.option('skipInstall');
+
+ this.answers = await this.prompt([
+ {
+ type: 'input',
+ name: 'packageName',
+ message: 'Package name:',
+ default: _.kebabCase(this.appname.replace('superset ui legacy plugin chart', '').trim()), // Default to current folder name
+ },
+ {
+ type: 'input',
+ name: 'description',
+ message: 'Description:',
+ default: _.capitalize(
+ _.startCase(this.appname.replace('superset ui legacy plugin chart', '').trim()),
+ ), // Default to current folder name
+ },
+ ]);
+ }
+
+ writing() {
+ this.fs.copyTpl(
+ this.templatePath('_package.json'),
+ this.destinationPath('package.json'),
+ this.answers,
+ );
+ this.fs.copyTpl(this.templatePath('README.md'), this.destinationPath('README.md'), {
+ ...this.answers,
+ packageLabel: _.capitalize(_.camelCase(this.answers.packageName)),
+ });
+ }
+};
diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart/templates/README.md b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart/templates/README.md
new file mode 100644
index 0000000000000..552bfa41882d2
--- /dev/null
+++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart/templates/README.md
@@ -0,0 +1,34 @@
+## @superset-ui/legacy-plugin-chart-<%= packageName %>
+
+[![Version](https://img.shields.io/npm/v/@superset-ui/legacy-plugin-chart-<%= packageName %>.svg?style=flat-square)](https://img.shields.io/npm/v/@superset-ui/legacy-plugin-chart-<%= packageName %>.svg?style=flat-square)
+[![David (path)](https://img.shields.io/david/apache-superset/superset-ui.svg?path=packages%2Fsuperset-ui-legacy-plugin-chart-<%= packageName %>&style=flat-square)](https://david-dm.org/apache-superset/superset-ui?path=packages/superset-ui-legacy-plugin-chart-<%= packageName %>)
+
+This plugin provides <%= description %> for Superset.
+
+### Usage
+
+Configure `key`, which can be any `string`, and register the plugin. This `key` will be used to lookup this chart throughout the app.
+
+```js
+import <%= packageLabel %>ChartPlugin from '@superset-ui/legacy-plugin-chart-<%= packageName %>';
+
+new <%= packageLabel %>ChartPlugin()
+ .configure({ key: '<%= packageName %>' })
+ .register();
+```
+
+Then use it via `SuperChart`. See [storybook](https://apache-superset.github.io/superset-ui-legacy/?selectedKind=plugin-chart-<%= packageName %>) for more details.
+
+```js
+
+```
\ No newline at end of file
diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart/templates/_package.json b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart/templates/_package.json
new file mode 100644
index 0000000000000..315e34c244ae6
--- /dev/null
+++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/legacy-plugin-chart/templates/_package.json
@@ -0,0 +1,40 @@
+{
+ "name": "@superset-ui/legacy-plugin-chart-<%= packageName %>",
+ "version": "0.0.0",
+ "description": "Superset Legacy Chart - <%= description %>",
+ "sideEffects": false,
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "files": [
+ "esm",
+ "lib"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/apache-superset/superset-ui-legacy.git"
+ },
+ "keywords": [
+ "superset"
+ ],
+ "author": "Superset",
+ "license": "Apache-2.0",
+ "bugs": {
+ "url": "https://github.com/apache-superset/superset-ui-legacy/issues"
+ },
+ "homepage": "https://github.com/apache-superset/superset-ui-legacy#readme",
+ "publishConfig": {
+ "access": "public"
+ },
+ "dependencies": {
+ "@superset-ui/core": "^0.9.0",
+ "prop-types": "^15.6.2"
+ },
+ "devDependencies": {
+ "@superset-ui/chart": "^0.9.0",
+ "@superset-ui/translation": "^0.9.1"
+ },
+ "peerDependencies": {
+ "@superset-ui/chart": "^0.9.0",
+ "@superset-ui/translation": "^0.9.1"
+ }
+}
\ No newline at end of file
diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/package/index.js b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/package/index.js
index f3db7e8dba428..3a70962ed2f86 100644
--- a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/package/index.js
+++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/generators/package/index.js
@@ -3,6 +3,7 @@
const Generator = require('yeoman-generator');
const chalk = require('chalk');
const yosay = require('yosay');
+const _ = require('lodash');
module.exports = class extends Generator {
async prompting() {
@@ -16,7 +17,7 @@ module.exports = class extends Generator {
type: 'input',
name: 'name',
message: 'Package name:',
- default: this.appname.replace('superset ui ', ''), // Default to current folder name
+ default: _.kebabCase(this.appname.replace('superset ui', '').trim()), // Default to current folder name
},
]);
}
diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/package.json b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/package.json
index f6e3cf6907b44..8d351eedddbe7 100644
--- a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/package.json
+++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/package.json
@@ -30,6 +30,7 @@
},
"dependencies": {
"chalk": "^2.4.1",
+ "lodash": "^4.17.11",
"yeoman-generator": "^3.1.1",
"yosay": "^2.0.2"
},
diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/test/app.test.js b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/test/app.test.js
index da81baf29f030..957be64901176 100644
--- a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/test/app.test.js
+++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/test/app.test.js
@@ -8,9 +8,10 @@ describe('generator-superset:app', () => {
beforeAll(() => {
dir = process.cwd();
- return helpers
- .run(path.join(__dirname, '../generators/app'))
- .withPrompts({ name: 'my-package' });
+ return helpers.run(path.join(__dirname, '../generators/app')).withPrompts({
+ subgenerator: 'package',
+ name: 'my-package',
+ });
});
it('creates files', () => {
diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/test/legacy-plugin-chart-demo.test.js b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/test/legacy-plugin-chart-demo.test.js
new file mode 100644
index 0000000000000..46818c9d3fa5c
--- /dev/null
+++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/test/legacy-plugin-chart-demo.test.js
@@ -0,0 +1,35 @@
+const path = require('path');
+const assert = require('yeoman-assert');
+const helpers = require('yeoman-test');
+
+describe('generator-superset:legacy-plugin-chart-demo', () => {
+ let dir;
+
+ beforeAll(() => {
+ dir = process.cwd();
+
+ return helpers
+ .run(path.join(__dirname, '../generators/legacy-plugin-chart-demo'))
+ .withPrompts({ packageName: '4d-pie-chart', packageLabel: '4DPieChart' })
+ .withOptions({ skipInstall: true });
+ });
+
+ it('creates files', () => {
+ assert.file(['index.js', 'Stories.jsx']);
+ });
+
+ /*
+ * Change working directory back to original working directory
+ * after the test has completed.
+ * yeoman tests switch to tmp directory and write files there.
+ * Usually this is fine for solo package.
+ * However, for a monorepo like this one,
+ * it made jest confuses with current directory
+ * (being in tmp directory instead of superset-ui root)
+ * and interferes with other tests in sibling packages
+ * that are run after the yeoman tests.
+ */
+ afterAll(() => {
+ process.chdir(dir);
+ });
+});
diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/test/legacy-plugin-chart.test.js b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/test/legacy-plugin-chart.test.js
new file mode 100644
index 0000000000000..adf22e1f354f8
--- /dev/null
+++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/generator-superset/test/legacy-plugin-chart.test.js
@@ -0,0 +1,35 @@
+const path = require('path');
+const assert = require('yeoman-assert');
+const helpers = require('yeoman-test');
+
+describe('generator-superset:legacy-plugin-chart', () => {
+ let dir;
+
+ beforeAll(() => {
+ dir = process.cwd();
+
+ return helpers
+ .run(path.join(__dirname, '../generators/legacy-plugin-chart'))
+ .withPrompts({ packageName: '4d-pie-chart', description: '4D Pie Chart' })
+ .withOptions({ skipInstall: true });
+ });
+
+ it('creates files', () => {
+ assert.file(['package.json']);
+ });
+
+ /*
+ * Change working directory back to original working directory
+ * after the test has completed.
+ * yeoman tests switch to tmp directory and write files there.
+ * Usually this is fine for solo package.
+ * However, for a monorepo like this one,
+ * it made jest confuses with current directory
+ * (being in tmp directory instead of superset-ui root)
+ * and interferes with other tests in sibling packages
+ * that are run after the yeoman tests.
+ */
+ afterAll(() => {
+ process.chdir(dir);
+ });
+});