diff --git a/static/js/user_groups_settings_ui.js b/static/js/user_groups_settings_ui.js index 6611687ec2..4fc1ac937d 100644 --- a/static/js/user_groups_settings_ui.js +++ b/static/js/user_groups_settings_ui.js @@ -1,10 +1,14 @@ import $ from "jquery"; +import render_browse_user_groups_list_item from "../templates/user_group_settings/browse_user_groups_list_item.hbs"; import render_user_group_settings_overlay from "../templates/user_group_settings/user_group_settings_overlay.hbs"; import * as browser_history from "./browser_history"; +import * as ListWidget from "./list_widget"; import * as overlays from "./overlays"; +import * as people from "./people"; import * as ui from "./ui"; +import * as user_groups from "./user_groups"; export function setup_page(callback) { function populate_and_fill() { @@ -14,6 +18,21 @@ export function setup_page(callback) { $manage_groups_container.empty(); $manage_groups_container.append(rendered); + const $container = $("#manage_groups_container .user-groups-list"); + const user_groups_list = user_groups.get_realm_user_groups(); + + ListWidget.create($container, user_groups_list, { + name: "user-groups-overlay", + modifier(item) { + item.is_member = user_groups.is_direct_member_of( + people.my_current_user_id(), + item.id, + ); + return render_browse_user_groups_list_item(item); + }, + $simplebar_container: $container, + }); + if (callback) { callback(); } diff --git a/static/styles/dark_theme.css b/static/styles/dark_theme.css index a0fe0edb04..067ac6305f 100644 --- a/static/styles/dark_theme.css +++ b/static/styles/dark_theme.css @@ -655,8 +655,10 @@ body.dark-theme { .subscriptions-container .right .display-type, .stream-row, + .group-row, .subscriptions-container .left .search-container, .subscriptions-container .left, + .user-groups-container .left, .subscriber-list-box, .subscriber-list-box .subscriber_list_container .subscriber-list tr, #subscription_overlay .subsection-parent div, diff --git a/static/styles/subscriptions.css b/static/styles/subscriptions.css index fde2d5299e..e921800249 100644 --- a/static/styles/subscriptions.css +++ b/static/styles/subscriptions.css @@ -454,6 +454,7 @@ h4.stream_setting_subsection_title { border-bottom: 1px solid hsl(0, 0%, 87%); } +.user-groups-list, .streams-list { position: relative; overflow: auto; @@ -462,6 +463,15 @@ h4.stream_setting_subsection_title { width: 100%; } +.user-groups-list { + /* + This height rule is temporary for this preparatory commit and + will be removed as we add other search/filter widgets in groups list + and its styling similar to streams list. + */ + height: 100% !important; +} + #clear_search_stream_name { right: 5px !important; } @@ -486,7 +496,8 @@ h4.stream_setting_subsection_title { } } -.stream-row { +.stream-row, +.group-row { padding: 15px 10px 11px; border-bottom: 1px solid hsl(0, 0%, 93%); cursor: pointer; @@ -561,7 +572,8 @@ h4.stream_setting_subsection_title { } } - .sub-info-box { + .sub-info-box, + .group-info-box { width: calc(100% - 90px); .top-bar, @@ -572,6 +584,7 @@ h4.stream_setting_subsection_title { } .top-bar .stream-name, + .top-bar .group-name, .bottom-bar .description { white-space: nowrap; overflow: hidden; @@ -596,7 +609,8 @@ h4.stream_setting_subsection_title { vertical-align: top; } - .top-bar .stream-name { + .top-bar .stream-name, + .top-bar .group-name { font-weight: 600; } @@ -636,7 +650,8 @@ h4.stream_setting_subsection_title { } } -.stream-row .sub-info-box .description:empty::after { +.stream-row .sub-info-box .description:empty::after, +.group-row .group-info-box .description:empty::after { content: attr(data-no-description); font-style: italic; color: hsl(0, 0%, 67%); diff --git a/static/templates/user_group_settings/browse_user_groups_list_item.hbs b/static/templates/user_group_settings/browse_user_groups_list_item.hbs new file mode 100644 index 0000000000..e082e36340 --- /dev/null +++ b/static/templates/user_group_settings/browse_user_groups_list_item.hbs @@ -0,0 +1,15 @@ +
+
+ + + +
+
+
+
{{name}}
+
+
+
{{description}}
+
+
+
diff --git a/static/templates/user_group_settings/user_group_settings_overlay.hbs b/static/templates/user_group_settings/user_group_settings_overlay.hbs index 609f09d379..d37a9025b0 100644 --- a/static/templates/user_group_settings/user_group_settings_overlay.hbs +++ b/static/templates/user_group_settings/user_group_settings_overlay.hbs @@ -8,6 +8,12 @@ × +
+
+
+
+
+
diff --git a/tools/linter_lib/custom_check.py b/tools/linter_lib/custom_check.py index 278274bacd..a6952d0b0e 100644 --- a/tools/linter_lib/custom_check.py +++ b/tools/linter_lib/custom_check.py @@ -695,6 +695,7 @@ html_rules: List["Rule"] = [ # exclude_pattern above handles color, but have other issues: "static/templates/draft.hbs", "static/templates/stream_settings/browse_streams_list_item.hbs", + "static/templates/user_group_settings/browse_user_groups_list_item.hbs", "static/templates/single_message.hbs", # Old-style email templates need to use inline style # attributes; it should be possible to clean these up