UNPKG

@lifi/widget

Version:

LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.

54 lines (53 loc) 2.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createChainOrderStore = exports.maxChainToOrder = void 0; const middleware_1 = require("zustand/middleware"); const traditional_1 = require("zustand/traditional"); exports.maxChainToOrder = 9; const createChainOrderStore = ({ namePrefix }) => (0, traditional_1.createWithEqualityFn)((0, middleware_1.persist)((set, get) => ({ chainOrder: [], availableChains: [], initializeChains: (chainIds) => { set((state) => { const chainOrder = state.chainOrder.filter((chainId) => chainIds.includes(chainId)); const chainsToAdd = chainIds.filter((chainId) => !chainOrder.includes(chainId)); if (chainOrder.length === exports.maxChainToOrder || !chainsToAdd.length) { return { availableChains: chainIds, chainOrder, }; } const chainsToAddLength = exports.maxChainToOrder - chainOrder.length; for (let index = 0; index < chainsToAddLength; index++) { chainOrder.push(chainsToAdd[index]); } return { availableChains: chainIds, chainOrder, }; }); return get().chainOrder; }, setChain: (chainId) => { const state = get(); if (state.chainOrder.includes(chainId) || !state.availableChains.includes(chainId)) { return; } set((state) => { const chainOrder = state.chainOrder.slice(); chainOrder.unshift(chainId); if (chainOrder.length > exports.maxChainToOrder) { chainOrder.pop(); } return { chainOrder, }; }); }, }), { name: `${namePrefix || 'li.fi'}-widget-chains-order`, version: 0, partialize: (state) => ({ chainOrder: state.chainOrder }), }), Object.is); exports.createChainOrderStore = createChainOrderStore;