mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 21:43:21 +00:00
drafts: Save stream_id along with stream names for drafts.
This commit changes snapshot_message to store stream_id for
drafts along with stream names. The stream_id field is
undefined if draft is for empty or invalid stream name.
After this change:
- If draft has a valid stream_id stored and it maps to
a stream, then we display the stream name from the
obtained stream object.
- If draft.stream_id is undefined or doesn't map to a stream,
then we display the name stored in draft.stream, which can
be invalid (no stream of this name existed ever), can be
empty and can also be name of a deactivated stream.
This change helps us to show correct stream-name for drafts
in case of renaming a stream.
Fixes #15155.
This commit is contained in:
@@ -32,7 +32,12 @@ mock_esm("../../static/js/stream_data", {
|
|||||||
get_color() {
|
get_color() {
|
||||||
return "#FFFFFF";
|
return "#FFFFFF";
|
||||||
},
|
},
|
||||||
|
get_sub(stream_name) {
|
||||||
|
assert.equal(stream_name, "stream");
|
||||||
|
return {stream_id: 30};
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
const sub_store = mock_esm("../../static/js/sub_store");
|
||||||
user_settings.twenty_four_hour_time = false;
|
user_settings.twenty_four_hour_time = false;
|
||||||
|
|
||||||
const {localstorage} = zrequire("localstorage");
|
const {localstorage} = zrequire("localstorage");
|
||||||
@@ -55,6 +60,7 @@ const compose_args_for_legacy_draft = {
|
|||||||
|
|
||||||
const draft_1 = {
|
const draft_1 = {
|
||||||
stream: "stream",
|
stream: "stream",
|
||||||
|
stream_id: 30,
|
||||||
topic: "topic",
|
topic: "topic",
|
||||||
type: "stream",
|
type: "stream",
|
||||||
content: "Test stream message",
|
content: "Test stream message",
|
||||||
@@ -214,6 +220,7 @@ test("format_drafts", ({override, mock_template}) => {
|
|||||||
topic: "topic",
|
topic: "topic",
|
||||||
type: "stream",
|
type: "stream",
|
||||||
content: "Test stream message",
|
content: "Test stream message",
|
||||||
|
stream_id: 30,
|
||||||
updatedAt: feb12().getTime(),
|
updatedAt: feb12().getTime(),
|
||||||
};
|
};
|
||||||
const draft_2 = {
|
const draft_2 = {
|
||||||
@@ -300,6 +307,11 @@ test("format_drafts", ({override, mock_template}) => {
|
|||||||
const stub_render_now = timerender.render_now;
|
const stub_render_now = timerender.render_now;
|
||||||
override(timerender, "render_now", (time) => stub_render_now(time, new Date(1549958107000)));
|
override(timerender, "render_now", (time) => stub_render_now(time, new Date(1549958107000)));
|
||||||
|
|
||||||
|
sub_store.get = function (stream_id) {
|
||||||
|
assert.equal(stream_id, 30);
|
||||||
|
return {name: "stream"};
|
||||||
|
};
|
||||||
|
|
||||||
mock_template("draft_table_body.hbs", false, (data) => {
|
mock_template("draft_table_body.hbs", false, (data) => {
|
||||||
// Tests formatting and sorting of drafts
|
// Tests formatting and sorting of drafts
|
||||||
assert.deepEqual(data.drafts, expected);
|
assert.deepEqual(data.drafts, expected);
|
||||||
@@ -310,6 +322,19 @@ test("format_drafts", ({override, mock_template}) => {
|
|||||||
override(drafts, "set_initial_element", noop);
|
override(drafts, "set_initial_element", noop);
|
||||||
|
|
||||||
$.create("#drafts_table .draft-row", {children: []});
|
$.create("#drafts_table .draft-row", {children: []});
|
||||||
|
drafts.launch();
|
||||||
|
|
||||||
|
$.clear_all_elements();
|
||||||
|
$.create("#drafts_table .draft-row", {children: []});
|
||||||
|
$("#draft_overlay").css = () => {};
|
||||||
|
|
||||||
|
sub_store.get = function (stream_id) {
|
||||||
|
assert.equal(stream_id, 30);
|
||||||
|
return {name: "stream-rename"};
|
||||||
|
};
|
||||||
|
|
||||||
|
expected[0].stream = "stream-rename";
|
||||||
|
|
||||||
drafts.launch();
|
drafts.launch();
|
||||||
timerender.__Rewire__("render_now", stub_render_now);
|
timerender.__Rewire__("render_now", stub_render_now);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import * as narrow from "./narrow";
|
|||||||
import * as overlays from "./overlays";
|
import * as overlays from "./overlays";
|
||||||
import * as people from "./people";
|
import * as people from "./people";
|
||||||
import * as stream_data from "./stream_data";
|
import * as stream_data from "./stream_data";
|
||||||
|
import * as sub_store from "./sub_store";
|
||||||
import * as timerender from "./timerender";
|
import * as timerender from "./timerender";
|
||||||
import * as util from "./util";
|
import * as util from "./util";
|
||||||
|
|
||||||
@@ -107,6 +108,10 @@ export function snapshot_message() {
|
|||||||
message.private_message_recipient = recipient;
|
message.private_message_recipient = recipient;
|
||||||
} else {
|
} else {
|
||||||
message.stream = compose_state.stream_name();
|
message.stream = compose_state.stream_name();
|
||||||
|
const sub = stream_data.get_sub(message.stream);
|
||||||
|
if (sub) {
|
||||||
|
message.stream_id = sub.stream_id;
|
||||||
|
}
|
||||||
message.topic = compose_state.topic();
|
message.topic = compose_state.topic();
|
||||||
}
|
}
|
||||||
return message;
|
return message;
|
||||||
@@ -241,9 +246,17 @@ export function format_draft(draft) {
|
|||||||
// In case there is no stream for the draft, we need a
|
// In case there is no stream for the draft, we need a
|
||||||
// single space char for proper rendering of the stream label
|
// single space char for proper rendering of the stream label
|
||||||
const space_string = new Handlebars.SafeString(" ");
|
const space_string = new Handlebars.SafeString(" ");
|
||||||
const stream = draft.stream.length > 0 ? draft.stream : space_string;
|
let stream = draft.stream.length > 0 ? draft.stream : space_string;
|
||||||
|
if (draft.stream_id) {
|
||||||
|
const sub = sub_store.get(draft.stream_id);
|
||||||
|
if (sub && sub.name !== stream) {
|
||||||
|
stream = sub.name;
|
||||||
|
draft.stream = stream;
|
||||||
|
draft_model.editDraft(id, draft);
|
||||||
|
}
|
||||||
|
}
|
||||||
let draft_topic = util.get_draft_topic(draft);
|
let draft_topic = util.get_draft_topic(draft);
|
||||||
const draft_stream_color = stream_data.get_color(draft.stream);
|
const draft_stream_color = stream_data.get_color(stream);
|
||||||
|
|
||||||
if (draft_topic === "") {
|
if (draft_topic === "") {
|
||||||
draft_topic = compose.empty_topic_placeholder();
|
draft_topic = compose.empty_topic_placeholder();
|
||||||
|
|||||||
Reference in New Issue
Block a user