DEV: Setup experimental sidebar skeleton (#16575)

* hidden siteSetting to enable experimental sidebar
* user preference to enable experimental sidebar
* `experimental_sidebar_enabled` attribute for current user
* Empty glimmer component for Sidebar
This commit is contained in:
Alan Guo Xiang Tan 2022-04-28 15:27:06 +08:00 committed by GitHub
parent 9f9131efbe
commit 98c49acad5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 76 additions and 2 deletions

View File

@ -0,0 +1,3 @@
import GlimmerComponent from "discourse/components/glimmer";
export default class Sidebar extends GlimmerComponent {}

View File

@ -58,6 +58,7 @@ export default Controller.extend({
"skip_new_user_tips",
"color_scheme_id",
"dark_scheme_id",
"enable_experimental_sidebar",
];
if (makeThemeDefault) {

View File

@ -99,6 +99,7 @@ let userOptionFields = [
"skip_new_user_tips",
"default_calendar",
"bookmark_auto_delete_preference",
"enable_experimental_sidebar",
];
export function addSaveableUserOptionField(fieldName) {

View File

@ -25,6 +25,11 @@
{{create-topics-notice}}
{{plugin-outlet name="top-notices" connectorTagName="div" args=(hash currentPath=router._router.currentPath)}}
</div>
{{#if currentUser.experimental_sidebar_enabled}}
<Sidebar />
{{/if}}
{{outlet}}
{{outlet "user-card"}}
</div>

View File

@ -133,6 +133,10 @@
<fieldset class="control-group other">
<legend class="control-label">{{i18n "user.other_settings"}}</legend>
{{#if siteSettings.enable_experimental_sidebar}}
{{preference-checkbox labelKey="user.enable_experimental_sidebar" checked=model.user_option.enable_experimental_sidebar class="pref-external-links"}}
{{/if}}
{{preference-checkbox labelKey="user.external_links_in_new_tab" checked=model.user_option.external_links_in_new_tab class="pref-external-links"}}
{{preference-checkbox labelKey="user.enable_quoting" checked=model.user_option.enable_quoting class="pref-enable-quoting"}}
{{preference-checkbox labelKey="user.enable_defer" checked=model.user_option.enable_defer class="pref-defer-undread"}}

View File

@ -261,6 +261,7 @@ end
# default_calendar :integer default("none_selected"), not null
# oldest_search_log_date :datetime
# bookmark_auto_delete_preference :integer default(3), not null
# enable_experimental_sidebar :boolean default(FALSE)
#
# Indexes
#

View File

@ -69,7 +69,8 @@ class CurrentUserSerializer < BasicUserSerializer
:draft_count,
:default_calendar,
:bookmark_auto_delete_preference,
:pending_posts_count
:pending_posts_count,
:experimental_sidebar_enabled
delegate :user_stat, to: :object, private: true
delegate :any_posts, :draft_count, :pending_posts_count, :read_faq?, to: :user_stat
@ -327,4 +328,12 @@ class CurrentUserSerializer < BasicUserSerializer
def include_has_topic_draft?
Draft.has_topic_draft(object)
end
def experimental_sidebar_enabled
object.user_option.enable_experimental_sidebar
end
def include_experimental_sidebar_enabled?
SiteSetting.enable_experimental_sidebar
end
end

View File

@ -35,6 +35,7 @@ class UserOptionSerializer < ApplicationSerializer
:skip_new_user_tips,
:default_calendar,
:oldest_search_log_date,
:enable_experimental_sidebar
def auto_track_topics_after_msecs
object.auto_track_topics_after_msecs || SiteSetting.default_other_auto_track_topics_after_msecs
@ -52,4 +53,8 @@ class UserOptionSerializer < ApplicationSerializer
object.theme_ids.presence || [SiteSetting.default_theme_id]
end
def include_enable_experimental_sidebar?
SiteSetting.enable_experimental_sidebar
end
end

View File

@ -47,7 +47,8 @@ class UserUpdater
:title_count_mode,
:timezone,
:skip_new_user_tips,
:default_calendar
:default_calendar,
:enable_experimental_sidebar
]
NOTIFICATION_SCHEDULE_ATTRS = -> {

View File

@ -1156,6 +1156,7 @@ en:
external_links_in_new_tab: "Open all external links in a new tab"
enable_quoting: "Enable quote reply for highlighted text"
enable_defer: "Enable defer to mark topics unread"
enable_experimental_sidebar: "Enable experimental sidebar"
change: "change"
featured_topic: "Featured Topic"
moderator: "%{user} is a moderator"

View File

@ -1957,6 +1957,10 @@ developer:
enable_safe_mode:
default: true
client: true
enable_experimental_sidebar:
default: false
client: true
hidden: true
embedding:
embed_by_username:

View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
class AddEnableExperimentalSidebarToUserOptions < ActiveRecord::Migration[6.1]
def change
add_column :user_options, :enable_experimental_sidebar, :boolean, default: false
end
end

View File

@ -2309,6 +2309,21 @@ describe UsersController do
expect(response).to be_forbidden
expect(user.reload.name).not_to eq 'Jim Tom'
end
context 'enabling experimental sidebar' do
before do
sign_in(user)
end
it "should be able to update UserOption#enable_experimental_sidebar" do
SiteSetting.enable_experimental_sidebar = true
put "/u/#{user.username}.json", params: { enable_experimental_sidebar: 'true' }
expect(response.status).to eq(200)
expect(user.user_option.enable_experimental_sidebar).to eq(true)
end
end
end
end
@ -3882,6 +3897,23 @@ describe UsersController do
expect(topic_post_count[topic.id.to_s]).to eq(2)
end
end
it "includes UserOption#enable_experimental_sidebar when SiteSetting.enable_experimental_sidebar is true" do
SiteSetting.enable_experimental_sidebar = true
user1.user_option.update!(enable_experimental_sidebar: true)
get "/u/#{user1.username}.json"
expect(response.status).to eq(200)
expect(response.parsed_body["user"]["user_option"]["enable_experimental_sidebar"]).to eq(true)
end
it "does not include UserOption#enable_experimental_sidebar when SiteSetting.enable_experimental_sidebar is false" do
get "/u/#{user1.username}.json"
expect(response.status).to eq(200)
expect(response.parsed_body["user"]["user_option"]["enable_experimental_sidebar"]).to eq(nil)
end
end
it "should be able to view a user" do