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); }
var _excluded = ["id", "product_name", "balance", "code", "encoded", "expire_date", "shop", "limit_status", "product_cover", "unified_available_status", "unified_messages", "par_value", "tag"];
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
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); }
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
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; }
import React, { useEffect, useMemo, useState } from 'react';
import classNames from 'classnames';
import { useRequest, useInfiniteScroll } from 'ahooks';
import { Button, Col, Row, Typography } from 'antd';
import { Icon, PisellModal, PisellInformationEntry, PisellToast, Tabs, PisellWalletPassCard } from '@pisell/materials';
import { locales } from '@pisell/utils';
import { getWalletPassList, getUnbindList, bindCodeToCustomer, getWalletDetail, getWalletPassDetail, updateWalletPassHolder } from "./serve";
import localeTexts from "./locales";
import { request } from "../../utils";
import useEngineContext from "../../hooks/useEngineContext";
import PassList from "./components/passList";
import PassDetail from "./components/passDetail";
import TempHolderSelector from "../../components/walletList/tempHolderSelector";
import "./index.less";
var Title = Typography.Title;
var KEYS = {
  available: 'available',
  unavailable: 'unavailable'
};

// 解决在当前类型环境下 Row/Col 的 children 类型不兼容问题
var ARow = Row;
var ACol = Col;
var TAGS = ['gift_card', 'point_card', 'product_discount_card', 'good_pass', 'product_voucher'];
var WalletPassGallery = function WalletPassGallery(props) {
  var _context$appHelper, _context$appHelper2, _context$engine, _utils$translation, _getWalletDetail$data;
  var hideAddButton = props.hideAddButton,
    hideTitle = props.hideTitle,
    customer = props.customer,
    platformProp = props.platform;
  var _useState = useState('available'),
    _useState2 = _slicedToArray(_useState, 2),
    activeKey = _useState2[0],
    setActiveKey = _useState2[1];
  var _useState3 = useState(undefined),
    _useState4 = _slicedToArray(_useState3, 2),
    currentItemId = _useState4[0],
    setCurrentItemId = _useState4[1];
  var _useState5 = useState(false),
    _useState6 = _slicedToArray(_useState5, 2),
    isOpenAddModal = _useState6[0],
    setIsOpenAddModal = _useState6[1];
  var _useState7 = useState(null),
    _useState8 = _slicedToArray(_useState7, 2),
    currentUnbindItem = _useState8[0],
    setCurrentUnbindItem = _useState8[1];

  // holder 绑定相关
  var _useState9 = useState(null),
    _useState10 = _slicedToArray(_useState9, 2),
    editHolderData = _useState10[0],
    setEditHolderData = _useState10[1];
  var _useState11 = useState(false),
    _useState12 = _slicedToArray(_useState11, 2),
    updateHolderLoading = _useState12[0],
    setUpdateHolderLoading = _useState12[1];
  var context = useEngineContext();
  var utils = (context === null || context === void 0 || (_context$appHelper = context.appHelper) === null || _context$appHelper === void 0 ? void 0 : _context$appHelper.utils) || {};
  var _ref = ((_context$appHelper2 = context.appHelper) === null || _context$appHelper2 === void 0 ? void 0 : _context$appHelper2.constants) || {
      apiPrefix: '/h5'
    },
    apiPrefix = _ref.apiPrefix;
  var isTerminal = utils.isTerminal,
    isApp = utils.isApp,
    interaction = utils.interaction;
  var isTerminalEnv = (typeof isTerminal === 'function' ? isTerminal() : !!isTerminal) || (isApp === null || isApp === void 0 ? void 0 : isApp());
  var platform = useMemo(function () {
    if (platformProp) return platformProp;
    if (utils.isMobile) {
      return utils.isMobile() ? 'h5' : 'pc';
    }
    if (typeof window !== 'undefined') {
      return window.innerWidth <= 768 ? 'h5' : 'pc';
    }
    return 'pc';
  }, [utils, platformProp]);
  locales.init(localeTexts, (context === null || context === void 0 || (_context$engine = context.engine) === null || _context$engine === void 0 || (_context$engine = _context$engine.props) === null || _context$engine === void 0 ? void 0 : _context$engine.locale) || 'en');
  request.setRequest(utils === null || utils === void 0 ? void 0 : utils.request);
  var _getWalletDetail = useRequest(getWalletDetail, {
    manual: true
  });
  var _getAvailableList = useInfiniteScroll( /*#__PURE__*/function () {
    var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(d) {
      var _searchParams, walletId, holderId, res;
      return _regeneratorRuntime().wrap(function _callee$(_context) {
        while (1) switch (_context.prev = _context.next) {
          case 0:
            _searchParams = new URLSearchParams(window.location.search);
            walletId = _searchParams.get('id');
            holderId = _searchParams.get('holder_id');
            _context.next = 5;
            return getWalletPassList({
              available: 1,
              num: 20,
              skip: (d === null || d === void 0 ? void 0 : d.nextId) || 1,
              tags: TAGS,
              filter_wallet_id: walletId || undefined,
              filter_holder_id: holderId || undefined,
              with: ['customScheduleSnapshot', 'holder.detail'],
              customer_id: customer === null || customer === void 0 ? void 0 : customer.id
            }, {
              apiPrefix: apiPrefix
            });
          case 5:
            res = _context.sent;
            return _context.abrupt("return", {
              list: (res === null || res === void 0 ? void 0 : res.list) || [],
              count: (res === null || res === void 0 ? void 0 : res.count) || 0,
              nextId: (res === null || res === void 0 ? void 0 : res.skip) || 1
            });
          case 7:
          case "end":
            return _context.stop();
        }
      }, _callee);
    }));
    return function (_x) {
      return _ref2.apply(this, arguments);
    };
  }(), {
    manual: true,
    onSuccess: function onSuccess(data) {},
    isNoMore: function isNoMore(d) {
      if (!(d !== null && d !== void 0 && d.list)) return false;
      return d.list.length >= (d.count || 0);
    }
  });
  var _getUnavailableList = useInfiniteScroll( /*#__PURE__*/function () {
    var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(d) {
      var _searchParams, walletId, holderId, res;
      return _regeneratorRuntime().wrap(function _callee2$(_context2) {
        while (1) switch (_context2.prev = _context2.next) {
          case 0:
            _searchParams = new URLSearchParams(window.location.search);
            walletId = _searchParams.get('id');
            holderId = _searchParams.get('holder_id');
            _context2.next = 5;
            return getWalletPassList({
              available: 0,
              num: 20,
              skip: (d === null || d === void 0 ? void 0 : d.nextId) || 1,
              tags: TAGS,
              filter_wallet_id: walletId || undefined,
              filter_holder_id: holderId || undefined,
              with: ['customScheduleSnapshot', 'holder.detail'],
              customer_id: customer === null || customer === void 0 ? void 0 : customer.id
            }, {
              apiPrefix: apiPrefix
            });
          case 5:
            res = _context2.sent;
            return _context2.abrupt("return", {
              list: (res === null || res === void 0 ? void 0 : res.list) || [],
              count: (res === null || res === void 0 ? void 0 : res.count) || 0,
              nextId: (res === null || res === void 0 ? void 0 : res.skip) || 1
            });
          case 7:
          case "end":
            return _context2.stop();
        }
      }, _callee2);
    }));
    return function (_x2) {
      return _ref3.apply(this, arguments);
    };
  }(), {
    manual: true,
    isNoMore: function isNoMore(d) {
      if (!(d !== null && d !== void 0 && d.list)) return false;
      return d.list.length >= (d.count || 0);
    }
  });
  useEffect(function () {
    var walletId = new URLSearchParams(window.location.search).get('id');
    var passId = new URLSearchParams(window.location.search).get('wallet_pass_detail_id');
    if (walletId) {
      _getWalletDetail.runAsync(walletId);
    }
    var req1 = _getAvailableList.reloadAsync();
    var req2 = _getUnavailableList.reloadAsync();
    var req3 = passId ? getWalletPassDetail(passId, {
      with: ['holder.detail']
    }) : Promise.resolve();
    Promise.all([req1, req2, req3]).then(function (_ref4) {
      var _ref5 = _slicedToArray(_ref4, 3),
        data1 = _ref5[0],
        data2 = _ref5[1],
        data3 = _ref5[2];
      if (platform !== 'h5') {
        var list1 = (data1 === null || data1 === void 0 ? void 0 : data1.list) || [];
        var list2 = (data2 === null || data2 === void 0 ? void 0 : data2.list) || [];

        // 如果 passId 不为空，按照 passId 逻辑处理
        if (passId) {
          var _data3$holder, _data3$holder2;
          // 检查是否在列表中匹配到
          var matchedInList1 = list1.find(function (item) {
            return String(item.id) === passId;
          });
          var matchedInList2 = list2.find(function (item) {
            return String(item.id) === passId;
          });
          if (matchedInList1 || matchedInList2) {
            // 匹配到了，设置 currentItemId 为 passId
            setCurrentItemId(Number(passId));
            if (matchedInList2) {
              setActiveKey('unavailable');
            }
          } else {
            // 没有匹配到
            // 如果 data3 存在，根据 unified_available_status 将其加入列表首位
            if (data3) {
              if (data3.unified_available_status === 1) {
                // 加入 data1.list 首位
                _getAvailableList.mutate(function (data) {
                  return _objectSpread(_objectSpread({}, data), {}, {
                    list: [data3].concat(_toConsumableArray((data === null || data === void 0 ? void 0 : data.list) || []))
                  });
                });
                setCurrentItemId(data3.id);
              } else {
                // 加入 data2.list 首位
                _getUnavailableList.mutate(function (data) {
                  return _objectSpread(_objectSpread({}, data), {}, {
                    list: [data3].concat(_toConsumableArray((data === null || data === void 0 ? void 0 : data.list) || []))
                  });
                });
                setCurrentItemId(data3.id);
                setActiveKey('unavailable');
              }
            } else {
              // data3 不存在，按原有逻辑取下标为0的item
              var firstAvailable = list1[0];
              if (firstAvailable) {
                setCurrentItemId(firstAvailable.id);
              } else {
                var firstUnavailable = list2[0];
                if (firstUnavailable) {
                  setCurrentItemId(firstUnavailable.id);
                  setActiveKey('unavailable');
                }
              }
            }
          }

          // setEditHolderData 逻辑是独立的，不管是否匹配到，只要满足条件就执行
          if (data3 && ((_data3$holder = data3.holder) === null || _data3$holder === void 0 ? void 0 : _data3$holder.holder_type) === 'form' && !((_data3$holder2 = data3.holder) !== null && _data3$holder2 !== void 0 && _data3$holder2.holder_id)) {
            var _data3$holder3, _data3$holder4;
            setEditHolderData({
              wallet_pass_detail_id: passId,
              customer_id: (_data3$holder3 = data3.holder) === null || _data3$holder3 === void 0 ? void 0 : _data3$holder3.customer_id,
              form_id: (_data3$holder4 = data3.holder) === null || _data3$holder4 === void 0 || (_data3$holder4 = _data3$holder4.metadata) === null || _data3$holder4 === void 0 ? void 0 : _data3$holder4.custom_id
            });
          }
        } else {
          // passId 为空时，设置默认选中项
          var _firstAvailable = list1[0];
          if (_firstAvailable) {
            setCurrentItemId(_firstAvailable.id);
          } else {
            var _firstUnavailable = list2[0];
            if (_firstUnavailable) {
              setCurrentItemId(_firstUnavailable.id);
              setActiveKey('unavailable');
            }
          }
        }
      }
    });
  }, [customer]);
  useEffect(function () {
    var _interaction$utils, _interaction$utils$mo;
    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, 'customer', 'new', function () {
      try {
        _getAvailableList.reloadAsync();
        _getUnavailableList.reloadAsync();
      } catch (err) {
        console.error(err);
      }
    });
  }, []);
  var listReload = function listReload() {
    _getAvailableList.reloadAsync();
    _getUnavailableList.reloadAsync();
  };
  var _getUnbindList = useRequest(getUnbindList, {
    manual: true,
    onSuccess: function onSuccess(data) {
      // 默认选中首个
      if (data !== null && data !== void 0 && data.length) {
        setCurrentUnbindItem(data[0]);
      } else {
        setCurrentUnbindItem(null);
        PisellToast({
          content: locales.getText('wallet-pass-gallery.searchNoFound'),
          duration: 2
        });
      }
    },
    onError: function onError(e) {
      console.log('get unbind list error', e);
      setCurrentUnbindItem(null);
      PisellToast({
        content: locales.getText('wallet-pass-gallery.searchNoFound'),
        duration: 2
      });
    }
  });
  useEffect(function () {
    document.body.id = 'body';
  }, []);
  var _avaliable = useMemo(function () {
    var _getAvailableList$dat;
    return ((_getAvailableList$dat = _getAvailableList.data) === null || _getAvailableList$dat === void 0 ? void 0 : _getAvailableList$dat.list) || [];
  }, [_getAvailableList.data]);
  var _unavailable = useMemo(function () {
    var _getUnavailableList$d;
    return ((_getUnavailableList$d = _getUnavailableList.data) === null || _getUnavailableList$d === void 0 ? void 0 : _getUnavailableList$d.list) || [];
  }, [_getUnavailableList.data]);
  var _handleTabChange = function _handleTabChange(key) {
    var _unavailable$, _avaliable$;
    setActiveKey(key);
    if (platform === 'h5') {
      setCurrentItemId(undefined);
      return;
    }
    var newId = key === KEYS.unavailable ? (_unavailable$ = _unavailable[0]) === null || _unavailable$ === void 0 ? void 0 : _unavailable$.id : (_avaliable$ = _avaliable[0]) === null || _avaliable$ === void 0 ? void 0 : _avaliable$.id;
    setCurrentItemId(newId);
  };
  var handleAddClick = function handleAddClick() {
    if (isTerminalEnv) {
      var _interaction$utils2, _interaction$utils2$p;
      interaction === null || interaction === void 0 || (_interaction$utils2 = interaction.utils) === null || _interaction$utils2 === void 0 || (_interaction$utils2$p = _interaction$utils2.postMessageToApp) === null || _interaction$utils2$p === void 0 || _interaction$utils2$p.call(_interaction$utils2, {
        module: 'customer',
        key: 'new',
        data: {
          customer_id: String((customer === null || customer === void 0 ? void 0 : customer.id) || '')
        }
      });
      return;
    }
    setIsOpenAddModal(true);
  };
  var _resetSearchState = function _resetSearchState() {
    setCurrentUnbindItem(null);
    _getUnbindList.mutate([]);
  };

  // 卡片点击处理：同步 URL 并根据平台选择 push/replace
  var _handleCardClick = function _handleCardClick(id) {
    setCurrentItemId(id);
    // 不再更新 URL 中的 card_id
  };

  // 通过code搜索卡券
  var _handleSearchByCode = /*#__PURE__*/function () {
    var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(code) {
      return _regeneratorRuntime().wrap(function _callee3$(_context3) {
        while (1) switch (_context3.prev = _context3.next) {
          case 0:
            if (!(!code || !code.trim())) {
              _context3.next = 3;
              break;
            }
            _resetSearchState();
            return _context3.abrupt("return");
          case 3:
            _context3.prev = 3;
            _context3.next = 6;
            return _getUnbindList.run({
              code: code
            });
          case 6:
            _context3.next = 12;
            break;
          case 8:
            _context3.prev = 8;
            _context3.t0 = _context3["catch"](3);
            _resetSearchState();
            PisellToast({
              content: locales.getText('wallet-pass-gallery.searchNoFound'),
              duration: 2
            });
          case 12:
          case "end":
            return _context3.stop();
        }
      }, _callee3, null, [[3, 8]]);
    }));
    return function _handleSearchByCode(_x3) {
      return _ref6.apply(this, arguments);
    };
  }();
  var _handleBind = /*#__PURE__*/function () {
    var _ref7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
      var data;
      return _regeneratorRuntime().wrap(function _callee4$(_context4) {
        while (1) switch (_context4.prev = _context4.next) {
          case 0:
            if (currentUnbindItem !== null && currentUnbindItem !== void 0 && currentUnbindItem.code) {
              _context4.next = 2;
              break;
            }
            return _context4.abrupt("return");
          case 2:
            _context4.prev = 2;
            _context4.next = 5;
            return bindCodeToCustomer({
              code: currentUnbindItem.code
            });
          case 5:
            data = _context4.sent;
            console.log('bind result', data);
            if (data) {
              PisellToast({
                content: locales.getText('wallet-pass-gallery.addSuccess'),
                duration: 2
              });

              // 重新获取列表
              _getAvailableList.reloadAsync();
              _getUnavailableList.reloadAsync();
            }
            // 关闭弹窗 清空搜索结果
            setIsOpenAddModal(false);
            _resetSearchState();
            _context4.next = 15;
            break;
          case 12:
            _context4.prev = 12;
            _context4.t0 = _context4["catch"](2);
            PisellToast({
              content: locales.getText('wallet-pass-gallery.addError'),
              duration: 2
            });
          case 15:
          case "end":
            return _context4.stop();
        }
      }, _callee4, null, [[2, 12]]);
    }));
    return function _handleBind() {
      return _ref7.apply(this, arguments);
    };
  }();
  var _handleHolderChange = function _handleHolderChange(passId, holder) {
    // 查找所属列表，手动精准更新
    if (_avaliable.find(function (item) {
      return item.id === passId;
    })) {
      _getAvailableList.mutate(function (data) {
        var newList = data.list.map(function (item) {
          return item.id === passId ? _objectSpread(_objectSpread({}, item), {}, {
            holder: holder
          }) : item;
        });
        return _objectSpread(_objectSpread({}, data), {}, {
          list: newList
        });
      });
    } else if (_unavailable.find(function (item) {
      return item.id === passId;
    })) {
      _getUnavailableList.mutate(function (data) {
        var newList = data.list.map(function (item) {
          return item.id === passId ? _objectSpread(_objectSpread({}, item), {}, {
            holder: holder
          }) : item;
        });
        return _objectSpread(_objectSpread({}, data), {}, {
          list: newList
        });
      });
    } else {
      console.log('pass not found', passId);
    }
  };
  var _handleBindHolder = /*#__PURE__*/function () {
    var _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(holderId) {
      var passId, res;
      return _regeneratorRuntime().wrap(function _callee5$(_context5) {
        while (1) switch (_context5.prev = _context5.next) {
          case 0:
            setUpdateHolderLoading(true);
            passId = editHolderData.wallet_pass_detail_id;
            _context5.prev = 2;
            _context5.next = 5;
            return updateWalletPassHolder(passId, {
              holder_type: 'form',
              holder_id: holderId
            });
          case 5:
            res = _context5.sent;
            setEditHolderData(null);
            if (holderId) {
              if (res) {
                _handleHolderChange === null || _handleHolderChange === void 0 || _handleHolderChange(Number(passId), res);
              }
            } else {
              _handleHolderChange === null || _handleHolderChange === void 0 || _handleHolderChange(Number(passId), null);
            }
            _context5.next = 13;
            break;
          case 10:
            _context5.prev = 10;
            _context5.t0 = _context5["catch"](2);
            console.error('Error updating wallet pass holder:', _context5.t0);
          case 13:
            _context5.prev = 13;
            setUpdateHolderLoading(false);
            return _context5.finish(13);
          case 16:
          case "end":
            return _context5.stop();
        }
      }, _callee5, null, [[2, 10, 13, 16]]);
    }));
    return function _handleBindHolder(_x4) {
      return _ref8.apply(this, arguments);
    };
  }();
  var _currentItem = useMemo(function () {
    if (!currentItemId) return null;
    var found1 = _avaliable.find(function (item) {
      return item.id === currentItemId;
    });
    if (found1) return found1;
    var found2 = _unavailable.find(function (item) {
      return item.id === currentItemId;
    });
    return found2;
  }, [currentItemId, _avaliable, _unavailable]);
  var _pcTitle = /*#__PURE__*/React.createElement("div", {
    className: "pisell-wallet-pass-gallery_title"
  }, hideTitle ? null : /*#__PURE__*/React.createElement(Title, null, (utils === null || utils === void 0 || (_utils$translation = utils.translation) === null || _utils$translation === void 0 ? void 0 : _utils$translation.call(utils, (_getWalletDetail$data = _getWalletDetail.data) === null || _getWalletDetail$data === void 0 || (_getWalletDetail$data = _getWalletDetail$data.data) === null || _getWalletDetail$data === void 0 ? void 0 : _getWalletDetail$data.name)) || locales.getText('wallet-pass-gallery.wallet')));
  var renderAvaliableList = function renderAvaliableList() {
    if (platform === 'h5') {
      return /*#__PURE__*/React.createElement(PassList, {
        onLoadMore: function onLoadMore() {
          return _getAvailableList.loadMoreAsync();
        },
        loading: _getAvailableList.loadingMore,
        hasMore: !_getAvailableList.noMore,
        dataSource: _avaliable,
        value: currentItemId,
        onChange: _handleCardClick,
        onEditHolder: setEditHolderData
      });
    }
    return /*#__PURE__*/React.createElement(ARow, {
      gutter: 20,
      wrap: false
    }, /*#__PURE__*/React.createElement(ACol, {
      flex: "367px"
    }, /*#__PURE__*/React.createElement(PassList, {
      onLoadMore: function onLoadMore() {
        return _getAvailableList.loadMoreAsync();
      },
      loading: _getAvailableList.loadingMore,
      hasMore: !_getAvailableList.noMore,
      dataSource: _avaliable,
      value: currentItemId,
      onChange: _handleCardClick,
      onEditHolder: setEditHolderData
    })), /*#__PURE__*/React.createElement(ACol, {
      flex: "auto"
    }, /*#__PURE__*/React.createElement(PassDetail, {
      dataSource: _currentItem,
      platform: platform,
      onListRefresh: listReload
    })));
  };
  var renderUnavailableList = function renderUnavailableList() {
    if (platform === 'h5') {
      return /*#__PURE__*/React.createElement(PassList, {
        onLoadMore: function onLoadMore() {
          return _getUnavailableList.loadMoreAsync();
        },
        hasMore: !_getUnavailableList.noMore,
        loading: _getUnavailableList.loadingMore,
        dataSource: _unavailable,
        value: currentItemId,
        onChange: _handleCardClick,
        onEditHolder: setEditHolderData
      });
    }
    return /*#__PURE__*/React.createElement(ARow, {
      gutter: 20,
      wrap: false
    }, /*#__PURE__*/React.createElement(ACol, {
      flex: "367px"
    }, /*#__PURE__*/React.createElement(PassList, {
      onLoadMore: function onLoadMore() {
        return _getUnavailableList.loadMoreAsync();
      },
      hasMore: !_getUnavailableList.noMore,
      loading: _getUnavailableList.loadingMore,
      dataSource: _unavailable,
      value: currentItemId,
      onChange: _handleCardClick,
      onEditHolder: setEditHolderData
    })), /*#__PURE__*/React.createElement(ACol, {
      flex: "auto"
    }, /*#__PURE__*/React.createElement(PassDetail, {
      dataSource: _currentItem,
      platform: platform,
      onListRefresh: listReload
    })));
  };
  var renderTabBar = function renderTabBar(props, DefaultTabBar) {
    return /*#__PURE__*/React.createElement("div", {
      style: {
        zIndex: 99,
        position: 'sticky',
        top: 0
      }
    }, /*#__PURE__*/React.createElement(DefaultTabBar, _extends({}, props, {
      style: {
        background: 'white'
      }
    })));
  };
  var renderContent = function renderContent() {
    var _getAvailableList$dat2, _getUnavailableList$d2;
    return /*#__PURE__*/React.createElement("div", {
      className: "pisell-wallet-pass-gallery_content"
    }, /*#__PURE__*/React.createElement(Tabs, {
      defaultActiveKey: "available",
      activeKey: activeKey,
      type: "line",
      onChange: _handleTabChange,
      renderTabBar: platform === 'h5' ? renderTabBar : undefined,
      items: [{
        key: KEYS.available,
        label: locales.getText('wallet-pass-gallery.available'),
        children: renderAvaliableList(),
        badge: ((_getAvailableList$dat2 = _getAvailableList.data) === null || _getAvailableList$dat2 === void 0 ? void 0 : _getAvailableList$dat2.count) || 0
      }, {
        key: KEYS.unavailable,
        label: locales.getText('wallet-pass-gallery.unavailable'),
        children: renderUnavailableList(),
        badge: ((_getUnavailableList$d2 = _getUnavailableList.data) === null || _getUnavailableList$d2 === void 0 ? void 0 : _getUnavailableList$d2.count) || 0
      }],
      tabBarExtraContent: platform === 'pc' && !hideAddButton ? /*#__PURE__*/React.createElement(Button, {
        icon: /*#__PURE__*/React.createElement(Icon, {
          type: "pisell2-plus"
        }),
        size: "large",
        onClick: handleAddClick
      }, locales.getText('wallet-pass-gallery.add')) : null
    }));
  };
  var renderPcContent = function renderPcContent() {
    return /*#__PURE__*/React.createElement("div", null, _pcTitle, renderContent());
  };
  var renderSearchCard = function renderSearchCard(item, index) {
    var id = item.id,
      _item$product_name = item.product_name,
      product_name = _item$product_name === void 0 ? '' : _item$product_name,
      _item$balance = item.balance,
      balance = _item$balance === void 0 ? 0 : _item$balance,
      _item$code = item.code,
      code = _item$code === void 0 ? '' : _item$code,
      _item$encoded = item.encoded,
      encoded = _item$encoded === void 0 ? '' : _item$encoded,
      _item$expire_date = item.expire_date,
      expire_date = _item$expire_date === void 0 ? '' : _item$expire_date,
      shop = item.shop,
      limit_status = item.limit_status,
      _item$product_cover = item.product_cover,
      product_cover = _item$product_cover === void 0 ? '' : _item$product_cover,
      unified_available_status = item.unified_available_status,
      _item$unified_message = item.unified_messages,
      unified_messages = _item$unified_message === void 0 ? {} : _item$unified_message,
      _item$par_value = item.par_value,
      par_value = _item$par_value === void 0 ? '' : _item$par_value,
      _item$tag = item.tag,
      tag = _item$tag === void 0 ? '' : _item$tag,
      rest = _objectWithoutProperties(item, _excluded);
    var _unified_messages$tit = unified_messages.title,
      title = _unified_messages$tit === void 0 ? '' : _unified_messages$tit;
    var _shop$name = shop.name,
      name = _shop$name === void 0 ? '' : _shop$name;
    var isActive = id === (currentUnbindItem === null || currentUnbindItem === void 0 ? void 0 : currentUnbindItem.id) && platform === 'pc';
    var isDisabled = unified_available_status === 0;
    var isDiscountCard = tag === 'product_discount_card';
    var getBalanceTitle = function getBalanceTitle() {
      if (tag === 'point_card') {
        return locales.getText('wallet-pass-gallery.points');
      } else if (tag === 'good_pass') {
        return locales.getText('wallet-pass-gallery.goodPass');
      }
      return undefined;
    };
    return /*#__PURE__*/React.createElement(PisellWalletPassCard, _extends({}, rest, {
      id: id,
      type: tag,
      key: id,
      balanceTitle: getBalanceTitle(),
      showDetail: false,
      showRedeem: false,
      showQrCode: false,
      cover: product_cover,
      disabled: isDisabled,
      showDisabledReason: isDisabled,
      disabledReason: title,
      propStyle: {
        marginBottom: 10
      },
      showBalanceSymbol: !['point_card', 'good_pass'].includes(tag),
      showBalance: tag !== 'product_discount_card',
      active: isActive,
      name: product_name,
      qrCode: code,
      storeName: name,
      balance: Number(balance),
      code: encoded,
      discount: Number(par_value),
      showDiscount: isDiscountCard,
      validDate: expire_date,
      onClick: function onClick() {
        return setCurrentUnbindItem(item);
      },
      style: {
        cursor: 'pointer',
        width: '100%',
        marginTop: 8
      }
    }));
  };
  var renderH5Content = function renderH5Content() {
    var _utils$isApp, _utils$translation2, _getWalletDetail$data2;
    var _walletBar = !(utils !== null && utils !== void 0 && (_utils$isApp = utils.isApp) !== null && _utils$isApp !== void 0 && _utils$isApp.call(utils)) && /*#__PURE__*/React.createElement("div", {
      className: "pisell-wallet-pass-gallery-bar"
    }, /*#__PURE__*/React.createElement("div", {
      className: "pisell-wallet-pass-gallery-header-bar-arrow",
      onClick: function onClick() {
        history.back();
      }
    }, /*#__PURE__*/React.createElement(Icon, {
      type: "pisell2-chevron-left"
    })), /*#__PURE__*/React.createElement("span", {
      className: "header-title"
    }, (utils === null || utils === void 0 || (_utils$translation2 = utils.translation) === null || _utils$translation2 === void 0 ? void 0 : _utils$translation2.call(utils, (_getWalletDetail$data2 = _getWalletDetail.data) === null || _getWalletDetail$data2 === void 0 || (_getWalletDetail$data2 = _getWalletDetail$data2.data) === null || _getWalletDetail$data2 === void 0 ? void 0 : _getWalletDetail$data2.name)) || locales.getText('wallet-pass-gallery.wallet')));
    return /*#__PURE__*/React.createElement(React.Fragment, null, _walletBar, renderContent(), hideAddButton ? null : /*#__PURE__*/React.createElement("div", {
      style: {
        padding: 24
      }
    }, /*#__PURE__*/React.createElement(Button, {
      size: "large",
      onClick: handleAddClick,
      block: true
    }, locales.getText('wallet-pass-gallery.button.add'))), /*#__PURE__*/React.createElement(PisellModal, {
      zIndex: 997,
      destroyOnClose: true,
      platform: platform,
      visible: !!_currentItem,
      onCancel: function onCancel() {
        return setCurrentItemId('');
      },
      footer: null,
      title: locales.getText('wallet-pass-gallery.details')
    }, /*#__PURE__*/React.createElement(PassDetail, {
      dataSource: _currentItem,
      platform: platform,
      onListRefresh: listReload
    })));
  };
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
    className: classNames('pisell-wallet-pass-gallery', "pisell-wallet-pass-gallery-".concat(platform))
  }, platform === 'pc' ? renderPcContent() : renderH5Content()), /*#__PURE__*/React.createElement(PisellModal, {
    title: locales.getText('wallet-pass-gallery.add'),
    platform: platform === 'pc' ? 'pc' : 'h5',
    mobileModalHeight: "auto",
    open: isOpenAddModal,
    onCancel: function onCancel() {
      return setIsOpenAddModal(false);
    },
    cancelVisible: false,
    destroyOnClose: true,
    okText: locales.getText('wallet-pass-gallery.confirm'),
    okButtonProps: {
      disabled: !(currentUnbindItem !== null && currentUnbindItem !== void 0 && currentUnbindItem.code)
    },
    onOk: _handleBind
  }, /*#__PURE__*/React.createElement("div", {
    style: {
      margin: '24px 0'
    }
  }, /*#__PURE__*/React.createElement(PisellInformationEntry, {
    title: locales.getText('wallet-pass-gallery.addModalTitle'),
    entryModes: [{
      type: 'scanCode',
      name: locales.getText('wallet-pass-gallery.scanBarQrCode')
    }, {
      type: 'input',
      name: locales.getText('wallet-pass-gallery.enterCodes')
    }],
    searchDescribe: locales.getText('wallet-pass-gallery.searchDescribe'),
    onChange: _handleSearchByCode,
    onChangeType: _resetSearchState
  }), (_getUnbindList.data || []).map(renderSearchCard))), !!editHolderData && /*#__PURE__*/React.createElement(TempHolderSelector, {
    visible: true,
    onCancel: function onCancel() {
      setEditHolderData(null);
    },
    onConfirm: _handleBindHolder,
    confirmLoading: updateHolderLoading,
    formId: editHolderData === null || editHolderData === void 0 ? void 0 : editHolderData.form_id,
    customerId: editHolderData === null || editHolderData === void 0 ? void 0 : editHolderData.customer_id,
    value: editHolderData === null || editHolderData === void 0 ? void 0 : editHolderData.holder_id
  }));
};
export default WalletPassGallery;