mirror of
https://github.com/zulip/zulip.git
synced 2025-11-17 04:12:02 +00:00
user status: Add frontend data layer for "status_text".
This sets up the frontend to handle "status_text" data like "out to lunch" or "in a meeting".
This commit is contained in:
@@ -4,7 +4,7 @@ zrequire('user_status');
|
|||||||
|
|
||||||
function initialize() {
|
function initialize() {
|
||||||
page_params.user_status = {
|
page_params.user_status = {
|
||||||
1: {away: true},
|
1: {away: true, status_text: 'in a meeting'},
|
||||||
2: {away: true},
|
2: {away: true},
|
||||||
3: {away: true},
|
3: {away: true},
|
||||||
};
|
};
|
||||||
@@ -21,23 +21,38 @@ run_test('basics', () => {
|
|||||||
assert(user_status.is_away(4));
|
assert(user_status.is_away(4));
|
||||||
user_status.revoke_away(4);
|
user_status.revoke_away(4);
|
||||||
assert(!user_status.is_away(4));
|
assert(!user_status.is_away(4));
|
||||||
|
|
||||||
|
// use value from page_params
|
||||||
|
assert.equal(user_status.get_status_text(1), 'in a meeting');
|
||||||
|
|
||||||
|
user_status.set_status_text({
|
||||||
|
user_id: 2,
|
||||||
|
status_text: 'out to lunch',
|
||||||
|
});
|
||||||
|
assert.equal(user_status.get_status_text(2), 'out to lunch');
|
||||||
|
|
||||||
|
user_status.set_status_text({
|
||||||
|
user_id: 2,
|
||||||
|
status_text: '',
|
||||||
|
});
|
||||||
|
assert.equal(user_status.get_status_text(2), undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
run_test('server', () => {
|
run_test('server', () => {
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
var away_arg;
|
var sent_data;
|
||||||
|
|
||||||
channel.post = (opts) => {
|
channel.post = (opts) => {
|
||||||
away_arg = opts.data.away;
|
sent_data = opts.data;
|
||||||
assert.equal(opts.url, '/json/users/me/status');
|
assert.equal(opts.url, '/json/users/me/status');
|
||||||
};
|
};
|
||||||
|
|
||||||
assert.equal(away_arg, undefined);
|
assert.equal(sent_data, undefined);
|
||||||
|
|
||||||
user_status.server_set_away();
|
user_status.server_set_away();
|
||||||
assert.equal(away_arg, true);
|
assert.deepEqual(sent_data, {away: true, status_text: undefined});
|
||||||
|
|
||||||
user_status.server_revoke_away();
|
user_status.server_revoke_away();
|
||||||
assert.equal(away_arg, false);
|
assert.deepEqual(sent_data, {away: false, status_text: undefined});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -458,11 +458,20 @@ exports.dispatch_normal_event = function dispatch_normal_event(event) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'user_status':
|
case 'user_status':
|
||||||
|
if (event.away !== undefined) {
|
||||||
if (event.away) {
|
if (event.away) {
|
||||||
activity.on_set_away(event.user_id);
|
activity.on_set_away(event.user_id);
|
||||||
} else {
|
} else {
|
||||||
activity.on_revoke_away(event.user_id);
|
activity.on_revoke_away(event.user_id);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.info !== undefined) {
|
||||||
|
user_status.set_status_text({
|
||||||
|
user_id: event.user_id,
|
||||||
|
status_text: event.info,
|
||||||
|
});
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,21 +3,25 @@ var user_status = (function () {
|
|||||||
var exports = {};
|
var exports = {};
|
||||||
|
|
||||||
var away_user_ids = new Dict();
|
var away_user_ids = new Dict();
|
||||||
|
var user_info = new Dict();
|
||||||
|
|
||||||
exports.server_set_away = function () {
|
exports.server_update = function (opts) {
|
||||||
channel.post({
|
channel.post({
|
||||||
url: '/json/users/me/status',
|
url: '/json/users/me/status',
|
||||||
data: {away: true},
|
data: {
|
||||||
|
away: opts.away,
|
||||||
|
status_text: opts.status_text,
|
||||||
|
},
|
||||||
idempotent: true,
|
idempotent: true,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.server_set_away = function () {
|
||||||
|
exports.server_update({away: true});
|
||||||
|
};
|
||||||
|
|
||||||
exports.server_revoke_away = function () {
|
exports.server_revoke_away = function () {
|
||||||
channel.post({
|
exports.server_update({away: false});
|
||||||
url: '/json/users/me/status',
|
|
||||||
data: {away: false},
|
|
||||||
idempotent: true,
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.set_away = function (user_id) {
|
exports.set_away = function (user_id) {
|
||||||
@@ -32,11 +36,28 @@ exports.is_away = function (user_id) {
|
|||||||
return away_user_ids.has(user_id);
|
return away_user_ids.has(user_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.get_status_text = function (user_id) {
|
||||||
|
return user_info.get(user_id);
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.set_status_text = function (opts) {
|
||||||
|
if (!opts.status_text) {
|
||||||
|
user_info.del(opts.user_id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
user_info.set(opts.user_id, opts.status_text);
|
||||||
|
};
|
||||||
|
|
||||||
exports.initialize = function () {
|
exports.initialize = function () {
|
||||||
_.each(page_params.user_status, function (dct, user_id) {
|
_.each(page_params.user_status, function (dct, user_id) {
|
||||||
if (dct.away) {
|
if (dct.away) {
|
||||||
away_user_ids.set(user_id, true);
|
away_user_ids.set(user_id, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dct.status_text) {
|
||||||
|
user_info.set(user_id, dct.status_text);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
delete page_params.user_status;
|
delete page_params.user_status;
|
||||||
|
|||||||
Reference in New Issue
Block a user