Синхронизация задач

Если виджет предоставляет возможность синхронизации задач amoCRM с другими сервисами управления задачами, то он может встроиться в модальное окно синхронизации.

Для этого необходимо указать локейшны задач в manifest.json:

{
  ...

  "locations": [
    "tlist",
    "tline",
    "tcalendar"
  ],

  ...
}

В колбэках виджета также есть специальный колбэк “calendarSync”, который выполнится при открытии данного модального окна, он обязательно должен возвращать объект с определенного вида, что описан в примере ниже.

this.callbacks: {
  calendarSync: function() {
    var load_promise = new Promise(function(resolve, reject) {
      // Запрос на бэк-энд для получения статуса виджета
      setTimeout(resolve, 2000);
    }
  
    return {
      // {String} Заголовок виджета в модалке синхронизации
      name: this.langs.widget.name,

      // {String} Описание виджета в модалке синхронизации
      description: this.langs.widget.description,

      // {Boolean|Promise} Состояние синхронизации.
      // Если Boolean, то виджет сразу примет это состояние,
      // но обычно нужно сделать запрос на back-end, 
      // поэтому можно вернуть promise, где resolve(true|false)
      // задаст состояние синхронизации виджета после получения ответа,
      // А reject([error_msg]) выведет сообщение об ошибке.
      enabled: load_promise || false,

      // {Function} Callback на нажатие кнопки "Включить".
      // Должен вернуть Promise
      onEnable: function() {
        return new Promise(function(resolve, reject) {
          if (confirm('Вы действительно хотите установить виджет')) {
            resolve();
          } else {
            reject('Вы отказались от установки виджета')
          }
      },

      // {Function} Callback на нажатие кнопки "Отключить".
      // Должен вернуть Promise
      onDisable: function() {
        return new Promise(function(resolve, reject) {
          var answer = prompt('Введите секретный ключ для подтверждения отключения:');
          
          if (answer === 'Super manager!') {
            resolve();
          } else {
            reject('Неверный секретный ключ.')
          }
      },

      // {Function} - Необязательный Callback на нажатие кнопки настроек.
      // Когда есть, в правом углу виджета появляется шестеренка с настройками.
      // На нажатие по ней можно написать свою логику.
      // Функция может ничего не возвращать.
      onSetup: function() {
        // Ваш код
      },
    };
  }
}