FEATURE: Add invite link to the sidebar (#29448)

This commit adds a new "Invite" link to the sidebar for all users who can invite to the site. Clicking the link opens the invite modal without changing the current route the user is on. Admins can customize the new link or remove it entirely if they wish by editing the sidebar section.

Internal topic: t/129752.
This commit is contained in:
Osama Sayegh
2024-10-30 05:31:14 +03:00
committed by GitHub
parent fc8fff88f6
commit 19672faba6
16 changed files with 219 additions and 11 deletions

View File

@@ -0,0 +1,55 @@
# frozen_string_literal: true
class AddInvitesLinkToSidebar < ActiveRecord::Migration[7.1]
def up
community_section_id = DB.query_single(<<~SQL).first
SELECT id
FROM sidebar_sections
WHERE section_type = 0
SQL
return if !community_section_id
max_position = DB.query_single(<<~SQL, section_id: community_section_id).first
SELECT MAX(ssl.position)
FROM sidebar_urls su
JOIN sidebar_section_links ssl ON su.id = ssl.linkable_id
WHERE ssl.linkable_type = 'SidebarUrl'
AND ssl.sidebar_section_id = :section_id
AND su.segment = 0
SQL
updated_rows = DB.query_hash(<<~SQL, position: max_position, section_id: community_section_id)
DELETE FROM sidebar_section_links
WHERE position > :position
AND sidebar_section_id = :section_id
AND linkable_type = 'SidebarUrl'
RETURNING user_id, linkable_id, linkable_type, sidebar_section_id, position + 1 AS position, created_at, updated_at
SQL
updated_rows.each { |row| DB.exec(<<~SQL, **row.symbolize_keys) }
INSERT INTO sidebar_section_links
(user_id, linkable_id, linkable_type, sidebar_section_id, position, created_at, updated_at)
VALUES
(:user_id, :linkable_id, :linkable_type, :sidebar_section_id, :position, :created_at, :updated_at)
SQL
link_id = DB.query_single(<<~SQL).first
INSERT INTO sidebar_urls
(name, value, icon, external, segment, created_at, updated_at)
VALUES
('Invite', '/new-invite', 'paper-plane', false, 0, now(), now())
RETURNING sidebar_urls.id
SQL
DB.exec(<<~SQL, link_id:, section_id: community_section_id, position: max_position + 1)
INSERT INTO sidebar_section_links
(user_id, linkable_id, linkable_type, sidebar_section_id, position, created_at, updated_at)
VALUES
(-1, :link_id, 'SidebarUrl', :section_id, :position, now(), now())
SQL
end
def down
raise ActiveRecord::IrreversibleMigration
end
end