@rpg-engine/long-bow 0.8.226 → 0.8.228

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,28 @@
1
+ import { ICharacter, ICharacterListing } from '@rpg-engine/shared';
2
+ import React from 'react';
3
+ export interface ICharacterTradePanelProps {
4
+ characterListings: ICharacterListing[];
5
+ characterListingsTotal: number;
6
+ characterListingsPage: number;
7
+ characterListingsItemsPerPage: number;
8
+ onCharacterListingsPageChange: (page: number) => void;
9
+ onCharacterBuy: (listingId: string) => void;
10
+ characterNameFilter?: string;
11
+ onCharacterNameFilterChange?: (name: string) => void;
12
+ characterListingsLoading?: boolean;
13
+ myCharacterListings: ICharacterListing[];
14
+ myCharacterListingsTotal: number;
15
+ myCharacterListingsPage: number;
16
+ onMyCharacterListingsPageChange: (page: number) => void;
17
+ onCharacterDelist: (listingId: string) => void;
18
+ accountCharacters: ICharacter[];
19
+ onCharacterList: (characterId: string, price: number) => void;
20
+ activeCharacterId?: string;
21
+ atlasJSON: any;
22
+ atlasIMG: any;
23
+ characterAtlasJSON?: any;
24
+ characterAtlasIMG?: any;
25
+ enableHotkeys?: () => void;
26
+ disableHotkeys?: () => void;
27
+ }
28
+ export declare const CharacterTradePanel: React.FC<ICharacterTradePanelProps>;
@@ -0,0 +1,3 @@
1
+ import { ICharacter } from '@rpg-engine/shared';
2
+ export declare const isCharacterEligibleForListing: (character: ICharacter) => boolean;
3
+ export declare const getEligibleCharactersForListing: (accountCharacters: ICharacter[], activeCharacterId?: string | undefined) => ICharacter[];
@@ -7,6 +7,7 @@ export interface ISpellProps {
7
7
  charMagicLevel: number;
8
8
  charSkillLevels?: Record<string, number>;
9
9
  onPointerUp?: (spellKey: string) => void;
10
+ onClick?: (spellKey: string) => void;
10
11
  isSettingShortcut?: boolean;
11
12
  spellKey: string;
12
13
  spell: ISpell;
@@ -9,7 +9,7 @@ interface IUseStoreCart {
9
9
  isCartOpen: boolean;
10
10
  handleAddToCart: (item: IProductBlueprint, quantity: number, metadata?: Record<string, any>) => void;
11
11
  handleRemoveFromCart: (itemKey: string) => void;
12
- handlePurchase: (onPurchase: (purchase: IPurchase) => void) => void;
12
+ handlePurchase: (onPurchase: (purchase: IPurchase) => Promise<boolean>) => Promise<boolean>;
13
13
  openCart: () => void;
14
14
  closeCart: () => void;
15
15
  getTotalItems: () => number;
package/dist/index.d.ts CHANGED
@@ -46,6 +46,7 @@ export * from './components/Marketplace/HistoryPanel';
46
46
  export * from './components/Marketplace/BlueprintSearchModal';
47
47
  export * from './components/Marketplace/CharacterMarketplacePanel';
48
48
  export * from './components/Marketplace/CharacterMarketplaceRows';
49
+ export * from './components/Marketplace/CharacterTradePanel';
49
50
  export * from './components/Marketplace/CharacterDetailModal';
50
51
  export * from './components/Marketplace/CharacterListingForm';
51
52
  export * from './components/Marketplace/CharacterListingModal';
@@ -13889,6 +13889,29 @@ var EmptyText = /*#__PURE__*/styled__default.span.withConfig({
13889
13889
  componentId: "sc-1aiauep-17"
13890
13890
  })(["font-family:'Press Start 2P',cursive !important;font-size:0.48rem !important;color:#71717a !important;text-transform:uppercase;letter-spacing:1px;"]);
13891
13891
 
13892
+ var toTimestamp = function toTimestamp(value) {
13893
+ if (!value) return 0;
13894
+ var timestamp = new Date(value).getTime();
13895
+ return Number.isFinite(timestamp) ? timestamp : 0;
13896
+ };
13897
+ var isCharacterEligibleForListing = function isCharacterEligibleForListing(character) {
13898
+ return !character.isListedForSale;
13899
+ };
13900
+ var getEligibleCharactersForListing = function getEligibleCharactersForListing(accountCharacters, activeCharacterId) {
13901
+ return accountCharacters.filter(isCharacterEligibleForListing).sort(function (left, right) {
13902
+ var leftIsActive = !!activeCharacterId && left._id === activeCharacterId;
13903
+ var rightIsActive = !!activeCharacterId && right._id === activeCharacterId;
13904
+ if (leftIsActive !== rightIsActive) {
13905
+ return leftIsActive ? 1 : -1;
13906
+ }
13907
+ var tradedAtDiff = toTimestamp(right.tradedAt) - toTimestamp(left.tradedAt);
13908
+ if (tradedAtDiff !== 0) {
13909
+ return tradedAtDiff;
13910
+ }
13911
+ return 0;
13912
+ });
13913
+ };
13914
+
13892
13915
  var CharacterListingModal = function CharacterListingModal(_ref) {
13893
13916
  var isOpen = _ref.isOpen,
13894
13917
  onClose = _ref.onClose,
@@ -13913,10 +13936,10 @@ var CharacterListingModal = function CharacterListingModal(_ref) {
13913
13936
  var stopPropagation = React.useCallback(function (e) {
13914
13937
  e.stopPropagation();
13915
13938
  }, []);
13939
+ var eligibleCharacters = React.useMemo(function () {
13940
+ return getEligibleCharactersForListing(accountCharacters, activeCharacterId);
13941
+ }, [accountCharacters, activeCharacterId]);
13916
13942
  if (!isOpen) return null;
13917
- var eligibleCharacters = accountCharacters.filter(function (c) {
13918
- return !c.isListedForSale;
13919
- });
13920
13943
  var isActiveCharacter = function isActiveCharacter(c) {
13921
13944
  return !!activeCharacterId && c._id === activeCharacterId;
13922
13945
  };
@@ -14176,9 +14199,7 @@ var MyCharacterListingsPanel = function MyCharacterListingsPanel(_ref) {
14176
14199
  enableHotkeys == null ? void 0 : enableHotkeys();
14177
14200
  }
14178
14201
  };
14179
- var eligibleCount = accountCharacters.filter(function (c) {
14180
- return !c.isListedForSale && !c.tradedAt;
14181
- }).length;
14202
+ var eligibleCount = getEligibleCharactersForListing(accountCharacters).length;
14182
14203
  return React__default.createElement(React__default.Fragment, null, delistingId && React__default.createElement(ConfirmModal, {
14183
14204
  onClose: function onClose() {
14184
14205
  setDelistingId(null);
@@ -14338,6 +14359,103 @@ var EmptySubtext = /*#__PURE__*/styled__default.span.withConfig({
14338
14359
  componentId: "sc-su21a6-17"
14339
14360
  })(["font-family:'Press Start 2P',cursive !important;font-size:0.38rem !important;color:#52525b !important;text-align:center;max-width:260px;line-height:1.6;"]);
14340
14361
 
14362
+ var CharacterTradePanel = function CharacterTradePanel(_ref) {
14363
+ var characterListings = _ref.characterListings,
14364
+ characterListingsTotal = _ref.characterListingsTotal,
14365
+ characterListingsPage = _ref.characterListingsPage,
14366
+ characterListingsItemsPerPage = _ref.characterListingsItemsPerPage,
14367
+ onCharacterListingsPageChange = _ref.onCharacterListingsPageChange,
14368
+ onCharacterBuy = _ref.onCharacterBuy,
14369
+ characterNameFilter = _ref.characterNameFilter,
14370
+ onCharacterNameFilterChange = _ref.onCharacterNameFilterChange,
14371
+ characterListingsLoading = _ref.characterListingsLoading,
14372
+ myCharacterListings = _ref.myCharacterListings,
14373
+ myCharacterListingsTotal = _ref.myCharacterListingsTotal,
14374
+ myCharacterListingsPage = _ref.myCharacterListingsPage,
14375
+ onMyCharacterListingsPageChange = _ref.onMyCharacterListingsPageChange,
14376
+ onCharacterDelist = _ref.onCharacterDelist,
14377
+ accountCharacters = _ref.accountCharacters,
14378
+ onCharacterList = _ref.onCharacterList,
14379
+ activeCharacterId = _ref.activeCharacterId,
14380
+ atlasJSON = _ref.atlasJSON,
14381
+ atlasIMG = _ref.atlasIMG,
14382
+ characterAtlasJSON = _ref.characterAtlasJSON,
14383
+ characterAtlasIMG = _ref.characterAtlasIMG,
14384
+ enableHotkeys = _ref.enableHotkeys,
14385
+ disableHotkeys = _ref.disableHotkeys;
14386
+ var _useState = React.useState('browse'),
14387
+ subTab = _useState[0],
14388
+ setSubTab = _useState[1];
14389
+ return React__default.createElement(React__default.Fragment, null, React__default.createElement(CharacterSubTabs, null, React__default.createElement(CharacterSubTab, {
14390
+ "$active": subTab === 'browse',
14391
+ onClick: function onClick() {
14392
+ return setSubTab('browse');
14393
+ },
14394
+ type: "button"
14395
+ }, "Browse"), React__default.createElement(CharacterSubTab, {
14396
+ "$active": subTab === 'my-listings',
14397
+ onClick: function onClick() {
14398
+ return setSubTab('my-listings');
14399
+ },
14400
+ type: "button"
14401
+ }, "My Listings")), subTab === 'browse' && React__default.createElement(CharacterMarketplacePanel, {
14402
+ characterListings: characterListings,
14403
+ totalCount: characterListingsTotal,
14404
+ currentPage: characterListingsPage,
14405
+ itemsPerPage: characterListingsItemsPerPage,
14406
+ onPageChange: onCharacterListingsPageChange,
14407
+ onCharacterBuy: onCharacterBuy,
14408
+ atlasJSON: atlasJSON,
14409
+ atlasIMG: atlasIMG,
14410
+ characterAtlasJSON: characterAtlasJSON != null ? characterAtlasJSON : atlasJSON,
14411
+ characterAtlasIMG: characterAtlasIMG != null ? characterAtlasIMG : atlasIMG,
14412
+ enableHotkeys: enableHotkeys,
14413
+ disableHotkeys: disableHotkeys,
14414
+ nameFilter: characterNameFilter,
14415
+ onNameFilterChange: onCharacterNameFilterChange,
14416
+ isLoading: characterListingsLoading
14417
+ }), subTab === 'my-listings' && React__default.createElement(MyCharacterListingsPanel, {
14418
+ myCharacterListings: myCharacterListings,
14419
+ totalCount: myCharacterListingsTotal,
14420
+ currentPage: myCharacterListingsPage,
14421
+ itemsPerPage: 10,
14422
+ onPageChange: onMyCharacterListingsPageChange,
14423
+ onCharacterDelist: onCharacterDelist,
14424
+ accountCharacters: accountCharacters,
14425
+ onCharacterList: onCharacterList,
14426
+ activeCharacterId: activeCharacterId,
14427
+ atlasJSON: atlasJSON,
14428
+ atlasIMG: atlasIMG,
14429
+ characterAtlasJSON: characterAtlasJSON != null ? characterAtlasJSON : atlasJSON,
14430
+ characterAtlasIMG: characterAtlasIMG != null ? characterAtlasIMG : atlasIMG,
14431
+ enableHotkeys: enableHotkeys,
14432
+ disableHotkeys: disableHotkeys
14433
+ }));
14434
+ };
14435
+ var CharacterSubTabs = /*#__PURE__*/styled__default.div.withConfig({
14436
+ displayName: "CharacterTradePanel__CharacterSubTabs",
14437
+ componentId: "sc-qjqvzx-0"
14438
+ })(["display:flex;gap:8px;width:95%;margin:10px auto 0 auto;padding:8px;background:rgba(0,0,0,0.2);border-radius:4px;border:1px solid rgba(255,255,255,0.05);"]);
14439
+ var CharacterSubTab = /*#__PURE__*/styled__default.button.withConfig({
14440
+ displayName: "CharacterTradePanel__CharacterSubTab",
14441
+ componentId: "sc-qjqvzx-1"
14442
+ })(["flex:1;padding:8px 12px;font-family:'Press Start 2P',cursive;font-size:0.45rem;border-radius:4px;border:1px solid ", ";background:", ";color:", ";cursor:pointer;transition:border-color 0.15s,background 0.15s,color 0.15s;text-transform:uppercase;letter-spacing:0.5px;&:hover{border-color:", ";color:", ";}"], function (_ref2) {
14443
+ var $active = _ref2.$active;
14444
+ return $active ? '#f59e0b' : 'rgba(255,255,255,0.12)';
14445
+ }, function (_ref3) {
14446
+ var $active = _ref3.$active;
14447
+ return $active ? 'rgba(245,158,11,0.15)' : 'rgba(0,0,0,0.3)';
14448
+ }, function (_ref4) {
14449
+ var $active = _ref4.$active;
14450
+ return $active ? '#f59e0b' : '#777';
14451
+ }, function (_ref5) {
14452
+ var $active = _ref5.$active;
14453
+ return $active ? '#f59e0b' : 'rgba(255,255,255,0.3)';
14454
+ }, function (_ref6) {
14455
+ var $active = _ref6.$active;
14456
+ return $active ? '#f59e0b' : '#bbb';
14457
+ });
14458
+
14341
14459
  var Marketplace = function Marketplace(props) {
14342
14460
  var onClose = props.onClose,
14343
14461
  scale = props.scale,
@@ -14429,9 +14547,6 @@ var Marketplace = function Marketplace(props) {
14429
14547
  var _useState3 = React.useState(false),
14430
14548
  isBlueprintSearchOpen = _useState3[0],
14431
14549
  setIsBlueprintSearchOpen = _useState3[1];
14432
- var _useState4 = React.useState('browse'),
14433
- characterSubTab = _useState4[0],
14434
- setCharacterSubTab = _useState4[1];
14435
14550
  var handleCurrencyChange = function handleCurrencyChange(value) {
14436
14551
  setAcceptedCurrency(value);
14437
14552
  onAcceptedCurrencyChange == null ? void 0 : onAcceptedCurrencyChange(value);
@@ -14511,51 +14626,31 @@ var Marketplace = function Marketplace(props) {
14511
14626
  }]),
14512
14627
  activeTabId: activeTab,
14513
14628
  onTabChange: handleTabChange
14514
- }), activeTab === 'marketplace' && React__default.createElement(BuyPanel, Object.assign({}, props)), activeTab === 'characters' && React__default.createElement(React__default.Fragment, null, React__default.createElement(CharacterSubTabs, null, React__default.createElement(CharacterSubTab, {
14515
- "$active": characterSubTab === 'browse',
14516
- onClick: function onClick() {
14517
- return setCharacterSubTab('browse');
14518
- },
14519
- type: "button"
14520
- }, "Browse"), React__default.createElement(CharacterSubTab, {
14521
- "$active": characterSubTab === 'my-listings',
14522
- onClick: function onClick() {
14523
- return setCharacterSubTab('my-listings');
14524
- },
14525
- type: "button"
14526
- }, "My Listings")), characterSubTab === 'browse' && React__default.createElement(CharacterMarketplacePanel, {
14629
+ }), activeTab === 'marketplace' && React__default.createElement(BuyPanel, Object.assign({}, props)), activeTab === 'characters' && React__default.createElement(CharacterTradePanel, {
14527
14630
  characterListings: characterListings != null ? characterListings : [],
14528
- totalCount: characterListingsTotal != null ? characterListingsTotal : 0,
14529
- currentPage: characterListingsPage != null ? characterListingsPage : 1,
14530
- itemsPerPage: characterListingsItemsPerPage != null ? characterListingsItemsPerPage : 10,
14531
- onPageChange: onCharacterListingsPageChange != null ? onCharacterListingsPageChange : function () {},
14631
+ characterListingsTotal: characterListingsTotal != null ? characterListingsTotal : 0,
14632
+ characterListingsPage: characterListingsPage != null ? characterListingsPage : 1,
14633
+ characterListingsItemsPerPage: characterListingsItemsPerPage != null ? characterListingsItemsPerPage : 10,
14634
+ onCharacterListingsPageChange: onCharacterListingsPageChange != null ? onCharacterListingsPageChange : function () {},
14532
14635
  onCharacterBuy: onCharacterBuy != null ? onCharacterBuy : function () {},
14533
- atlasJSON: props.atlasJSON,
14534
- atlasIMG: props.atlasIMG,
14535
- characterAtlasJSON: characterAtlasJSON != null ? characterAtlasJSON : props.atlasJSON,
14536
- characterAtlasIMG: characterAtlasIMG != null ? characterAtlasIMG : props.atlasIMG,
14537
- enableHotkeys: props.enableHotkeys,
14538
- disableHotkeys: props.disableHotkeys,
14539
- nameFilter: characterNameFilter,
14540
- onNameFilterChange: onCharacterNameFilterChange,
14541
- isLoading: characterListingsLoading
14542
- }), characterSubTab === 'my-listings' && React__default.createElement(MyCharacterListingsPanel, {
14636
+ characterNameFilter: characterNameFilter,
14637
+ onCharacterNameFilterChange: onCharacterNameFilterChange,
14638
+ characterListingsLoading: characterListingsLoading,
14543
14639
  myCharacterListings: myCharacterListings != null ? myCharacterListings : [],
14544
- totalCount: myCharacterListingsTotal != null ? myCharacterListingsTotal : 0,
14545
- currentPage: myCharacterListingsPage != null ? myCharacterListingsPage : 1,
14546
- itemsPerPage: 10,
14547
- onPageChange: onMyCharacterListingsPageChange != null ? onMyCharacterListingsPageChange : function () {},
14640
+ myCharacterListingsTotal: myCharacterListingsTotal != null ? myCharacterListingsTotal : 0,
14641
+ myCharacterListingsPage: myCharacterListingsPage != null ? myCharacterListingsPage : 1,
14642
+ onMyCharacterListingsPageChange: onMyCharacterListingsPageChange != null ? onMyCharacterListingsPageChange : function () {},
14548
14643
  onCharacterDelist: onCharacterDelist != null ? onCharacterDelist : function () {},
14549
14644
  accountCharacters: accountCharacters != null ? accountCharacters : [],
14550
14645
  onCharacterList: onCharacterList != null ? onCharacterList : function () {},
14551
14646
  activeCharacterId: props.characterId,
14552
14647
  atlasJSON: props.atlasJSON,
14553
14648
  atlasIMG: props.atlasIMG,
14554
- characterAtlasJSON: characterAtlasJSON != null ? characterAtlasJSON : props.atlasJSON,
14555
- characterAtlasIMG: characterAtlasIMG != null ? characterAtlasIMG : props.atlasIMG,
14649
+ characterAtlasJSON: characterAtlasJSON,
14650
+ characterAtlasIMG: characterAtlasIMG,
14556
14651
  enableHotkeys: props.enableHotkeys,
14557
14652
  disableHotkeys: props.disableHotkeys
14558
- })), activeTab === 'sell' && React__default.createElement(ManagmentPanel, Object.assign({}, props, {
14653
+ }), activeTab === 'sell' && React__default.createElement(ManagmentPanel, Object.assign({}, props, {
14559
14654
  acceptedCurrency: acceptedCurrency
14560
14655
  })), activeTab === 'buy-orders' && React__default.createElement(React__default.Fragment, null, React__default.createElement(BuyOrderPanel, {
14561
14656
  atlasJSON: props.atlasJSON,
@@ -14616,29 +14711,6 @@ var PagerContainer$2 = /*#__PURE__*/styled__default.div.withConfig({
14616
14711
  displayName: "Marketplace__PagerContainer",
14617
14712
  componentId: "sc-h904b1-0"
14618
14713
  })(["display:flex;justify-content:center;align-items:center;width:95%;margin:6px auto 0 auto;padding:4px 10px;"]);
14619
- var CharacterSubTabs = /*#__PURE__*/styled__default.div.withConfig({
14620
- displayName: "Marketplace__CharacterSubTabs",
14621
- componentId: "sc-h904b1-1"
14622
- })(["display:flex;gap:8px;width:95%;margin:10px auto 0 auto;padding:8px;background:rgba(0,0,0,0.2);border-radius:4px;border:1px solid rgba(255,255,255,0.05);"]);
14623
- var CharacterSubTab = /*#__PURE__*/styled__default.button.withConfig({
14624
- displayName: "Marketplace__CharacterSubTab",
14625
- componentId: "sc-h904b1-2"
14626
- })(["flex:1;padding:8px 12px;font-family:'Press Start 2P',cursive;font-size:0.45rem;border-radius:4px;border:1px solid ", ";background:", ";color:", ";cursor:pointer;transition:border-color 0.15s,background 0.15s,color 0.15s;text-transform:uppercase;letter-spacing:0.5px;&:hover{border-color:", ";color:", ";}"], function (_ref) {
14627
- var $active = _ref.$active;
14628
- return $active ? '#f59e0b' : 'rgba(255,255,255,0.12)';
14629
- }, function (_ref2) {
14630
- var $active = _ref2.$active;
14631
- return $active ? 'rgba(245,158,11,0.15)' : 'rgba(0,0,0,0.3)';
14632
- }, function (_ref3) {
14633
- var $active = _ref3.$active;
14634
- return $active ? '#f59e0b' : '#777';
14635
- }, function (_ref4) {
14636
- var $active = _ref4.$active;
14637
- return $active ? '#f59e0b' : 'rgba(255,255,255,0.3)';
14638
- }, function (_ref5) {
14639
- var $active = _ref5.$active;
14640
- return $active ? '#f59e0b' : '#bbb';
14641
- });
14642
14714
 
14643
14715
  var CharacterMarketplaceRows = function CharacterMarketplaceRows(_ref) {
14644
14716
  var listing = _ref.listing,
@@ -14795,9 +14867,7 @@ var CharacterListingForm = function CharacterListingForm(_ref) {
14795
14867
  var _useState = React.useState(false),
14796
14868
  isModalOpen = _useState[0],
14797
14869
  setIsModalOpen = _useState[1];
14798
- var eligibleCount = accountCharacters.filter(function (c) {
14799
- return !c.isListedForSale && !c.tradedAt;
14800
- }).length;
14870
+ var eligibleCount = getEligibleCharactersForListing(accountCharacters).length;
14801
14871
  return React__default.createElement(Wrapper$2, null, React__default.createElement(CharacterListingModal, {
14802
14872
  isOpen: isModalOpen,
14803
14873
  onClose: function onClose() {
@@ -16865,6 +16935,7 @@ var Spell = function Spell(_ref) {
16865
16935
  charMagicLevel = _ref.charMagicLevel,
16866
16936
  charSkillLevels = _ref.charSkillLevels,
16867
16937
  onPointerUp = _ref.onPointerUp,
16938
+ onClick = _ref.onClick,
16868
16939
  isSettingShortcut = _ref.isSettingShortcut,
16869
16940
  spell = _ref.spell,
16870
16941
  activeCooldown = _ref.activeCooldown;
@@ -16893,10 +16964,11 @@ var Spell = function Spell(_ref) {
16893
16964
  height: '32px'
16894
16965
  };
16895
16966
  var IMAGE_SCALE = 2;
16967
+ var handleClick = onClick != null ? onClick : onPointerUp;
16896
16968
  return React__default.createElement(SpellInfoWrapper, {
16897
16969
  spell: spell
16898
16970
  }, React__default.createElement(Container$J, {
16899
- onPointerUp: onPointerUp == null ? void 0 : onPointerUp.bind(null, spellKey),
16971
+ onClick: handleClick == null ? void 0 : handleClick.bind(null, spellKey),
16900
16972
  isSettingShortcut: isSettingShortcut && !disabled,
16901
16973
  className: "spell"
16902
16974
  }, disabled && React__default.createElement(Overlay$a, null, characterSkillLevel < requiredLevel ? "Low " + getSkillName(attribute || 'magic level') + " level" : manaCost > charMana && 'No mana'), React__default.createElement(SpellImage, null, activeCooldown && activeCooldown > 0 ? React__default.createElement("span", {
@@ -38159,30 +38231,48 @@ var useStoreCart = function useStoreCart() {
38159
38231
  });
38160
38232
  });
38161
38233
  };
38162
- var handlePurchase = function handlePurchase(onPurchase) {
38163
- var purchaseUnits = cartItems.map(function (cartItem) {
38164
- return {
38165
- purchaseKey: cartItem.item.key,
38166
- qty: cartItem.quantity,
38167
- type: getPurchaseType(cartItem.item),
38168
- name: cartItem.item.name,
38169
- metadata: cartItem.metadata || cartItem.item.metadataConfig
38170
- };
38171
- });
38172
- var purchase = {
38173
- _id: uuidv4(),
38174
- userId: '1',
38175
- status: 'pending',
38176
- createdAt: new Date().toISOString(),
38177
- updatedAt: new Date().toISOString(),
38178
- purchases: purchaseUnits
38234
+ var handlePurchase = /*#__PURE__*/function () {
38235
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(onPurchase) {
38236
+ var purchaseUnits, purchase, success;
38237
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
38238
+ while (1) switch (_context2.prev = _context2.next) {
38239
+ case 0:
38240
+ purchaseUnits = cartItems.map(function (cartItem) {
38241
+ return {
38242
+ purchaseKey: cartItem.item.key,
38243
+ qty: cartItem.quantity,
38244
+ type: getPurchaseType(cartItem.item),
38245
+ name: cartItem.item.name,
38246
+ metadata: cartItem.metadata || cartItem.item.metadataConfig
38247
+ };
38248
+ });
38249
+ purchase = {
38250
+ _id: uuidv4(),
38251
+ userId: '1',
38252
+ status: 'pending',
38253
+ createdAt: new Date().toISOString(),
38254
+ updatedAt: new Date().toISOString(),
38255
+ purchases: purchaseUnits
38256
+ };
38257
+ _context2.next = 4;
38258
+ return onPurchase(purchase);
38259
+ case 4:
38260
+ success = _context2.sent;
38261
+ if (success && isMounted.current) {
38262
+ setCartItems([]);
38263
+ setIsCartOpen(false);
38264
+ }
38265
+ return _context2.abrupt("return", success);
38266
+ case 7:
38267
+ case "end":
38268
+ return _context2.stop();
38269
+ }
38270
+ }, _callee2);
38271
+ }));
38272
+ return function handlePurchase(_x4) {
38273
+ return _ref2.apply(this, arguments);
38179
38274
  };
38180
- onPurchase(purchase);
38181
- if (isMounted.current) {
38182
- setCartItems([]);
38183
- setIsCartOpen(false);
38184
- }
38185
- };
38275
+ }();
38186
38276
  var openCart = function openCart() {
38187
38277
  return setIsCartOpen(true);
38188
38278
  };
@@ -40108,24 +40198,9 @@ var Store = function Store(_ref) {
40108
40198
  cartItems: cartItems,
40109
40199
  onRemoveFromCart: handleRemoveFromCartTracked,
40110
40200
  onClose: closeCart,
40111
- onPurchase: function () {
40112
- var _onPurchase2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
40113
- return _regeneratorRuntime().wrap(function _callee$(_context) {
40114
- while (1) switch (_context.prev = _context.next) {
40115
- case 0:
40116
- handleCartPurchase(_onPurchase);
40117
- return _context.abrupt("return", true);
40118
- case 2:
40119
- case "end":
40120
- return _context.stop();
40121
- }
40122
- }, _callee);
40123
- }));
40124
- function onPurchase() {
40125
- return _onPurchase2.apply(this, arguments);
40126
- }
40127
- return onPurchase;
40128
- }(),
40201
+ onPurchase: function onPurchase() {
40202
+ return handleCartPurchase(_onPurchase);
40203
+ },
40129
40204
  atlasJSON: atlasJSON,
40130
40205
  atlasIMG: atlasIMG,
40131
40206
  onCheckoutStart: onCheckoutStart,
@@ -40796,6 +40871,7 @@ exports.CharacterMarketplacePanel = CharacterMarketplacePanel;
40796
40871
  exports.CharacterMarketplaceRows = CharacterMarketplaceRows;
40797
40872
  exports.CharacterSelection = CharacterSelection;
40798
40873
  exports.CharacterSkinSelectionModal = CharacterSkinSelectionModal;
40874
+ exports.CharacterTradePanel = CharacterTradePanel;
40799
40875
  exports.Chat = Chat;
40800
40876
  exports.ChatDeprecated = ChatDeprecated;
40801
40877
  exports.ChatRevamp = ChatRevamp;