summaryrefslogtreecommitdiff
path: root/client/js/controllers/pool_create_controller.js
diff options
context:
space:
mode:
authorShyam Sunder <sgsunder1@gmail.com>2020-06-04 21:01:28 -0400
committerShyam Sunder <sgsunder1@gmail.com>2020-06-04 21:01:28 -0400
commitc5358f7f83ef49f51d5ba557dde1b16ce2c83d1d (patch)
tree253e0be234540c266202993567d998a5c951947d /client/js/controllers/pool_create_controller.js
parent4329b1620fe38c2a7bf44615cfb176daa2837590 (diff)
parentb0f1b8c2309277a7b170972d463b4e8d16a79ecc (diff)
client+server: add post pools feature
Diffstat (limited to 'client/js/controllers/pool_create_controller.js')
-rw-r--r--client/js/controllers/pool_create_controller.js58
1 files changed, 58 insertions, 0 deletions
diff --git a/client/js/controllers/pool_create_controller.js b/client/js/controllers/pool_create_controller.js
new file mode 100644
index 0000000..2b8e7e6
--- /dev/null
+++ b/client/js/controllers/pool_create_controller.js
@@ -0,0 +1,58 @@
+'use strict';
+
+const router = require('../router.js');
+const api = require('../api.js');
+const misc = require('../util/misc.js');
+const uri = require('../util/uri.js');
+const PoolCategoryList = require('../models/pool_category_list.js');
+const PoolCreateView = require('../views/pool_create_view.js');
+const EmptyView = require('../views/empty_view.js');
+
+class PoolCreateController {
+ constructor(ctx) {
+ if (!api.hasPrivilege('pools:create')) {
+ this._view = new EmptyView();
+ this._view.showError('You don\'t have privileges to create pools.');
+ return;
+ }
+
+ PoolCategoryList.get().then(poolCategoriesResponse => {
+ const categories = {};
+ for (let category of poolCategoriesResponse.results) {
+ categories[category.name] = category.name;
+ }
+
+ this._view = new PoolCreateView({
+ canCreate: api.hasPrivilege('pools:create'),
+ categories: categories,
+ escapeColons: uri.escapeColons,
+ });
+
+ this._view.addEventListener('submit', e => this._evtCreate(e));
+ }, error => {
+ this._view = new EmptyView();
+ this._view.showError(error.message);
+ });
+ }
+
+ _evtCreate(e) {
+ this._view.clearMessages();
+ this._view.disableForm();
+ api.post(uri.formatApiLink('pool'), e.detail)
+ .then(() => {
+ this._view.clearMessages();
+ misc.disableExitConfirmation();
+ const ctx = router.show(uri.formatClientLink('pools'));
+ ctx.controller.showSuccess('Pool created.');
+ }, error => {
+ this._view.showError(error.message);
+ this._view.enableForm();
+ });
+ }
+}
+
+module.exports = router => {
+ router.enter(['pool', 'create'], (ctx, next) => {
+ ctx.controller = new PoolCreateController(ctx, 'create');
+ });
+};