input_pill: Move group and stream logic to add_subscribers module.

This is part of a larger effort to refactor input_pill to
remove custom logic and move it into relevant modules.

This commit completely removes group_id from all modules, but
there's another module that uses stream that must be refactored
before that can be removed from input_pill.
This commit is contained in:
evykassirer 2024-07-29 15:47:47 -07:00 committed by Tim Abbott
parent 443e24390b
commit 0d52ced27a
2 changed files with 23 additions and 6 deletions

View File

@ -1,5 +1,10 @@
import assert from "minimalistic-assert";
import render_input_pill from "../templates/input_pill.hbs";
import * as blueslip from "./blueslip";
import * as input_pill from "./input_pill";
import type {InputPillItem} from "./input_pill";
import * as keydown_util from "./keydown_util";
import type {User} from "./people";
import * as pill_typeahead from "./pill_typeahead";
@ -61,6 +66,22 @@ function set_up_pill_typeahead({
pill_typeahead.set_up_combined($pill_container.find(".input"), pill_widget, opts);
}
function generate_pill_html(item: InputPillItem<CombinedPill>): string {
if (item.type === "user_group") {
return render_input_pill({
display_value: item.display_value,
group_id: item.group_id,
});
} else if (item.type === "user") {
return user_pill.generate_pill_html(item);
}
assert(item.type === "stream");
return render_input_pill({
...item,
has_stream: true,
});
}
export function create({
$pill_container,
get_potential_subscribers,
@ -72,6 +93,7 @@ export function create({
$container: $pill_container,
create_item_from_text,
get_text_from_item,
generate_pill_html,
});
function get_users(): User[] {
const potential_subscribers = get_potential_subscribers();
@ -116,6 +138,7 @@ export function create_without_add_button({
$container: $pill_container,
create_item_from_text,
get_text_from_item,
generate_pill_html,
});
function get_users(): User[] {
const potential_subscribers = get_potential_subscribers();

View File

@ -16,7 +16,6 @@ import * as ui_util from "./ui_util";
export type InputPillItem<ItemType> = {
display_value: string;
type: string;
group_id?: number;
// Used for search pills
operator?: string;
stream?: StreamSubscription;
@ -63,7 +62,6 @@ type InputPillStore<ItemType> = {
type InputPillRenderingDetails = {
display_value: string;
group_id?: number | undefined;
has_stream?: boolean;
stream?: StreamSubscription;
};
@ -168,10 +166,6 @@ export function create<ItemType>(
display_value: item.display_value,
};
if (item.group_id) {
opts.group_id = item.group_id;
}
if (item.type === "stream" && item.stream) {
opts.has_stream = true;
opts.stream = item.stream;