You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.8 KiB

  1. /* Copyright 2020 Denis Mudarisov <https://github.com/trojikman>
  2. * License MIT (https://opensource.org/licenses/MIT). */
  3. odoo.define("mail_archives.archives", function (require) {
  4. "use strict";
  5. var core = require("web.core");
  6. var session = require("web.session");
  7. var chat_manager = require("mail_base.base").chat_manager;
  8. var _lt = core._lt;
  9. var ChatAction = core.action_registry.get("mail.chat.instant_messaging");
  10. ChatAction.include({
  11. init: function (parent, action, options) {
  12. this._super.apply(this, arguments);
  13. var channel_name = "channel_archive";
  14. // Add channel Archive for enable "display_subject" option
  15. this.channels_display_subject.push(channel_name);
  16. },
  17. update_message_on_current_channel: function (current_channel_id, message) {
  18. var result = this._super.apply(this, arguments);
  19. var archive =
  20. current_channel_id === "channel_archive" && !message.is_archive;
  21. return archive || result;
  22. },
  23. });
  24. chat_manager.is_ready.then(function () {
  25. // Inherit class and override methods
  26. var chat_manager_super = _.clone(chat_manager);
  27. chat_manager.get_properties = function (msg) {
  28. var properties = chat_manager_super.get_properties.apply(this, arguments);
  29. properties.is_archive = this.property_descr("channel_archive", msg, this);
  30. return properties;
  31. };
  32. chat_manager.set_channel_flags = function (data, msg) {
  33. chat_manager_super.set_channel_flags.apply(this, arguments);
  34. // Get recipients ids
  35. var recipients_ids = [];
  36. for (var i = 0; i < (data.partner_ids || []).length; i++) {
  37. recipients_ids.push(data.partner_ids[i][0]);
  38. }
  39. // If author or recipient
  40. if (
  41. data.author_id[0] === session.partner_id ||
  42. recipients_ids.indexOf(session.partner_id) !== -1
  43. ) {
  44. msg.is_archive = true;
  45. }
  46. return msg;
  47. };
  48. chat_manager.get_channel_array = function (msg) {
  49. var arr = chat_manager_super.get_channel_array.apply(this, arguments);
  50. return arr.concat("channel_archive");
  51. };
  52. chat_manager.get_domain = function (channel) {
  53. return channel.id === "channel_archive"
  54. ? [
  55. "|",
  56. ["partner_ids", "in", [session.partner_id]],
  57. ["author_id", "in", [session.partner_id]],
  58. ]
  59. : chat_manager_super.get_domain.apply(this, arguments);
  60. };
  61. chat_manager.add_channel({
  62. id: "channel_archive",
  63. name: _lt("Archive"),
  64. type: "static",
  65. });
  66. });
  67. return chat_manager;
  68. });