From ca2506a94165b37a357d950938b09cea94898471 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Mon, 17 Apr 2023 14:43:10 +0530 Subject: [PATCH] feat: allow sorting of articles (#6833) * feat: sort by position * chore: whitespace change * feat: add border bottom color to list item * feat: allow dragging articles * feat: add migration to reorder all articles * feat: add onsort method * feat: finish UI sorting * feat: show 50 per page in articles list * feat: add article sorting methods * feat: patch up reorder action with the API * refactor: better naming * chore: add comments * feat: attach position to article before create * feat: move article to end if moved between categories * chore: add comments * chore: update version * fix: don't change position if previous category was nil * fix: condition to trigger update on category change * refactor: store new_position * refactor: use grid instead of table * feat: add snug spacing * feat: add grab-icon * feat: add grab icon to list * refactor: show draggable only for category page * feat: add update_positions as a class method --------- Co-authored-by: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com> --- .../api/v1/accounts/articles_controller.rb | 14 +- .../dashboard/api/helpCenter/articles.js | 7 + .../helpcenter/components/ArticleItem.vue | 142 +++++++++---- .../helpcenter/components/ArticleTable.vue | 188 ++++++++++++++---- .../pages/articles/ListAllArticles.vue | 8 + .../modules/helpCenterArticles/actions.js | 16 ++ .../shared/assets/stylesheets/spacing.scss | 2 + .../FluentIcon/dashboard-icons.json | 10 +- app/models/article.rb | 47 +++++ app/policies/article_policy.rb | 4 + config/routes.rb | 1 + ...0405104405_update_position_for_articles.rb | 30 +++ db/schema.rb | 2 +- 13 files changed, 393 insertions(+), 78 deletions(-) create mode 100644 db/migrate/20230405104405_update_position_for_articles.rb diff --git a/app/controllers/api/v1/accounts/articles_controller.rb b/app/controllers/api/v1/accounts/articles_controller.rb index f1689d918..cc0976375 100644 --- a/app/controllers/api/v1/accounts/articles_controller.rb +++ b/app/controllers/api/v1/accounts/articles_controller.rb @@ -1,14 +1,19 @@ class Api::V1::Accounts::ArticlesController < Api::V1::Accounts::BaseController before_action :portal before_action :check_authorization - before_action :fetch_article, except: [:index, :create, :attach_file] + before_action :fetch_article, except: [:index, :create, :attach_file, :reorder] before_action :set_current_page, only: [:index] def index @portal_articles = @portal.articles @all_articles = @portal_articles.search(list_params) @articles_count = @all_articles.count - @articles = @all_articles.order_by_updated_at.page(@current_page) + + @articles = if list_params[:category_slug].present? + @all_articles.order_by_position.page(@current_page).per(50) + else + @all_articles.order_by_updated_at.page(@current_page) + end end def create @@ -43,6 +48,11 @@ class Api::V1::Accounts::ArticlesController < Api::V1::Accounts::BaseController render json: { file_url: url_for(file_blob) } end + def reorder + Article.update_positions(params[:positions_hash]) + head :ok + end + private def fetch_article diff --git a/app/javascript/dashboard/api/helpCenter/articles.js b/app/javascript/dashboard/api/helpCenter/articles.js index bcbb4dc5b..5423b1de2 100644 --- a/app/javascript/dashboard/api/helpCenter/articles.js +++ b/app/javascript/dashboard/api/helpCenter/articles.js @@ -60,6 +60,13 @@ class ArticlesAPI extends PortalsAPI { } ); } + + reorderArticles({ portalSlug, reorderedGroup, categorySlug }) { + return axios.post(`${this.url}/${portalSlug}/articles/reorder`, { + positions_hash: reorderedGroup, + category_slug: categorySlug, + }); + } } export default new ArticlesAPI(); diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleItem.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleItem.vue index 00dba9eb8..e6851bb60 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleItem.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleItem.vue @@ -1,21 +1,20 @@ diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleTable.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleTable.vue index 515570195..11e916844 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleTable.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleTable.vue @@ -1,32 +1,48 @@