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>
This commit is contained in:
30
db/migrate/20230405104405_update_position_for_articles.rb
Normal file
30
db/migrate/20230405104405_update_position_for_articles.rb
Normal file
@@ -0,0 +1,30 @@
|
||||
class UpdatePositionForArticles < ActiveRecord::Migration[6.1]
|
||||
def change
|
||||
# Get the unique combinations of account_id and category_id
|
||||
groups = Article.select(:account_id, :category_id).distinct
|
||||
|
||||
# Iterate through the groups
|
||||
groups.each do |group|
|
||||
# Get articles belonging to the current group
|
||||
articles = Article.where(account_id: group.account_id, category_id: group.category_id)
|
||||
|
||||
# Separate articles with a position set and those without
|
||||
articles_with_position = articles.where.not(position: nil).order(:position, :updated_at)
|
||||
articles_without_position = articles.where(position: nil).order(:updated_at)
|
||||
|
||||
# Set the position for articles with a position set, in multiples of 10
|
||||
# why multiples of 10? because we want to leave room for articles which can be added in between in case we are editing the order from the DB
|
||||
position_counter = 0
|
||||
articles_with_position.each do |article|
|
||||
position_counter += 10
|
||||
article.update(position: position_counter)
|
||||
end
|
||||
|
||||
# Set the position for articles without a position, starting from where the last position ended
|
||||
articles_without_position.each do |article|
|
||||
position_counter += 10
|
||||
article.update(position: position_counter)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -437,7 +437,7 @@ ActiveRecord::Schema.define(version: 2023_04_07_191457) do
|
||||
t.datetime "agent_last_seen_at"
|
||||
t.jsonb "additional_attributes", default: {}
|
||||
t.bigint "contact_inbox_id"
|
||||
t.uuid "uuid", default: -> { "public.gen_random_uuid()" }, null: false
|
||||
t.uuid "uuid", default: -> { "gen_random_uuid()" }, null: false
|
||||
t.string "identifier"
|
||||
t.datetime "last_activity_at", default: -> { "CURRENT_TIMESTAMP" }, null: false
|
||||
t.bigint "team_id"
|
||||
|
||||
Reference in New Issue
Block a user