diff options
| author | Shyam Sunder <sgsunder1@gmail.com> | 2020-06-04 21:01:28 -0400 |
|---|---|---|
| committer | Shyam Sunder <sgsunder1@gmail.com> | 2020-06-04 21:01:28 -0400 |
| commit | c5358f7f83ef49f51d5ba557dde1b16ce2c83d1d (patch) | |
| tree | 253e0be234540c266202993567d998a5c951947d /client/js/controllers/pool_create_controller.js | |
| parent | 4329b1620fe38c2a7bf44615cfb176daa2837590 (diff) | |
| parent | b0f1b8c2309277a7b170972d463b4e8d16a79ecc (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.js | 58 |
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'); + }); +}; |