function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
// 实现对原生的摄像头和扫码枪的监听，需要监听类管理所有的监听事件，最新挂载的监听事件为active，当组件卸载时需要销毁这个监听事件
// 监听事件的key如果重复，则需要覆盖原来的监听事件
var ScanListener = /*#__PURE__*/function () {
  function ScanListener() {
    _classCallCheck(this, ScanListener);
    _defineProperty(this, "isInitialized", false);
    _defineProperty(this, "listeners", []);
    this.listeners = [];
  }

  /**
   * 初始化外设扫码结果监听
   */
  _createClass(ScanListener, [{
    key: "initPeripheralsListener",
    value: function initPeripheralsListener(interaction) {
      var _interaction$utils,
        _interaction$utils$mo,
        _this = this;
      if (this.isInitialized) {
        return;
      }
      this.isInitialized = true;
      interaction === null || interaction === void 0 || (_interaction$utils = interaction.utils) === null || _interaction$utils === void 0 || (_interaction$utils$mo = _interaction$utils.mountFunction) === null || _interaction$utils$mo === void 0 || _interaction$utils$mo.call(_interaction$utils, 'global', 'peripheralsResult', function (strVal) {
        try {
          var _result = JSON.parse(strVal || '{}');
          // 直接获取数组首位的 listener（最新添加的）
          var activeListener = _this.listeners[0];
          if (activeListener) {
            activeListener.callback(_result);
          }
        } catch (err) {
          console.error(err);
        }
      });
    }
  }, {
    key: "addListener",
    value: function addListener(interaction, key, callback) {
      // 如果已存在相同 key 的 listener，先删除
      var existingIndex = this.listeners.findIndex(function (item) {
        return item.key === key;
      });
      if (existingIndex !== -1) {
        this.listeners.splice(existingIndex, 1);
      }
      // 将新的 listener 添加到数组首位
      this.listeners.unshift({
        key: key,
        callback: callback
      });
      this.initPeripheralsListener(interaction);
    }
  }, {
    key: "removeListener",
    value: function removeListener(key) {
      var index = this.listeners.findIndex(function (item) {
        return item.key === key;
      });
      if (index !== -1) {
        this.listeners.splice(index, 1);
      }
    }
  }, {
    key: "getActiveListener",
    value: function getActiveListener() {
      var _this$listeners$;
      return ((_this$listeners$ = this.listeners[0]) === null || _this$listeners$ === void 0 ? void 0 : _this$listeners$.key) || null;
    }
  }, {
    key: "setActiveListener",
    value: function setActiveListener(key) {
      var index = this.listeners.findIndex(function (item) {
        return item.key === key;
      });
      if (index === -1 || index === 0) {
        return;
      }
      // 将指定 key 的 listener 移到数组首位
      var _this$listeners$splic = this.listeners.splice(index, 1),
        _this$listeners$splic2 = _slicedToArray(_this$listeners$splic, 1),
        listener = _this$listeners$splic2[0];
      this.listeners.unshift(listener);
    }
  }, {
    key: "destroy",
    value: function destroy() {
      this.listeners = [];
    }
  }]);
  return ScanListener;
}();
var scanListener = new ScanListener();
export default scanListener;