summaryrefslogtreecommitdiff
path: root/client/js/controllers/pool_list_controller.js
diff options
context:
space:
mode:
authorRuin0x11 <ipickering2@gmail.com>2020-05-03 19:53:28 -0700
committerRuin0x11 <ipickering2@gmail.com>2020-05-03 19:53:28 -0700
commitd59ecb8e230a55e6875076824723580bd3f4419b (patch)
tree34121668a4abb61fdeff0639d0c9567d0c398692 /client/js/controllers/pool_list_controller.js
parent6a95a66f12a5407cfd8ffa7e373f756236bf0bce (diff)
Add pool CRUD operations/pages
Diffstat (limited to 'client/js/controllers/pool_list_controller.js')
-rw-r--r--client/js/controllers/pool_list_controller.js105
1 files changed, 105 insertions, 0 deletions
diff --git a/client/js/controllers/pool_list_controller.js b/client/js/controllers/pool_list_controller.js
new file mode 100644
index 0000000..626dc1e
--- /dev/null
+++ b/client/js/controllers/pool_list_controller.js
@@ -0,0 +1,105 @@
+'use strict';
+
+const router = require('../router.js');
+const api = require('../api.js');
+const uri = require('../util/uri.js');
+const PoolList = require('../models/pool_list.js');
+const topNavigation = require('../models/top_navigation.js');
+const PageController = require('../controllers/page_controller.js');
+const PoolsHeaderView = require('../views/pools_header_view.js');
+const PoolsPageView = require('../views/pools_page_view.js');
+const EmptyView = require('../views/empty_view.js');
+
+const fields = [
+ 'id',
+ 'names',
+ /* 'suggestions',
+ * 'implications', */
+ 'creationTime',
+ 'postCount',
+ 'category'];
+
+class PoolListController {
+ constructor(ctx) {
+ if (!api.hasPrivilege('pools:list')) {
+ this._view = new EmptyView();
+ this._view.showError('You don\'t have privileges to view pools.');
+ return;
+ }
+
+ topNavigation.activate('pools');
+ topNavigation.setTitle('Listing pools');
+
+ this._ctx = ctx;
+ this._pageController = new PageController();
+
+ this._headerView = new PoolsHeaderView({
+ hostNode: this._pageController.view.pageHeaderHolderNode,
+ parameters: ctx.parameters,
+ canCreate: api.hasPrivilege('pools:create'),
+ canEditPoolCategories: api.hasPrivilege('poolCategories:edit'),
+ });
+ this._headerView.addEventListener(
+ 'submit', e => this._evtSubmit(e),
+ 'navigate', e => this._evtNavigate(e));
+
+ this._syncPageController();
+ }
+
+ showSuccess(message) {
+ this._pageController.showSuccess(message);
+ }
+
+ showError(message) {
+ this._pageController.showError(message);
+ }
+
+ _evtSubmit(e) {
+ this._view.clearMessages();
+ this._view.disableForm();
+ e.detail.pool.save()
+ .then(() => {
+ this._installView(e.detail.pool, 'edit');
+ this._view.showSuccess('Pool created.');
+ router.replace(
+ uri.formatClientLink(
+ 'pool', e.detail.pool.id, 'edit'),
+ null, false);
+ }, error => {
+ this._view.showError(error.message);
+ this._view.enableForm();
+ });
+ }
+
+ _evtNavigate(e) {
+ router.showNoDispatch(
+ uri.formatClientLink('pools', e.detail.parameters));
+ Object.assign(this._ctx.parameters, e.detail.parameters);
+ this._syncPageController();
+ }
+
+ _syncPageController() {
+ this._pageController.run({
+ parameters: this._ctx.parameters,
+ defaultLimit: 50,
+ getClientUrlForPage: (offset, limit) => {
+ const parameters = Object.assign(
+ {}, this._ctx.parameters, {offset: offset, limit: limit});
+ return uri.formatClientLink('pools', parameters);
+ },
+ requestPage: (offset, limit) => {
+ return PoolList.search(
+ this._ctx.parameters.query, offset, limit, fields);
+ },
+ pageRenderer: pageCtx => {
+ return new PoolsPageView(pageCtx);
+ },
+ });
+ }
+}
+
+module.exports = router => {
+ router.enter(
+ ['pools'],
+ (ctx, next) => { ctx.controller = new PoolListController(ctx); });
+};