mirror of
https://github.com/luxfi/explore.git
synced 2026-07-27 05:54:15 +00:00
* context for storing subchain config and tx view for subchain * address page and block page for subchain * address aggregated page: local txs tab * connect MultichainSelect to context * home page placeholder * refactor subchain select state * envs for demo * fix ts * clear value for l2 review * subchain widgets on home page * csp policies * sockets, duck and goose * fix socket on subchain address page * link builder for subchain views * update home widget * fix time increment * enable tx interpretator and metadata service * generate multichain config based on every chain app config * Fix the multichain config to work in Docker * multichain socket test * rename subchain-id to subchain-slug path param * refactoring * update chain icons on entities * home page: latest local txs * latest cross-chain txs * minor improvements * renaming, pt. 1 * rename chain routes * enable blockchain interaction * add loading state to icon shield * fix build * fix tests * update types package
31 lines
1.2 KiB
TypeScript
31 lines
1.2 KiB
TypeScript
import { compile } from 'path-to-regexp';
|
|
|
|
import type { ChainConfig } from 'types/multichain';
|
|
|
|
import config from 'configs/app';
|
|
|
|
import getResourceParams from './getResourceParams';
|
|
import isNeedProxy from './isNeedProxy';
|
|
import type { ResourceName, ResourcePathParams } from './resources';
|
|
|
|
export default function buildUrl<R extends ResourceName>(
|
|
resourceFullName: R,
|
|
pathParams?: ResourcePathParams<R>,
|
|
queryParams?: Record<string, string | Array<string> | number | boolean | null | undefined>,
|
|
noProxy?: boolean,
|
|
chain?: ChainConfig,
|
|
): string {
|
|
const { api, resource } = getResourceParams(resourceFullName, chain);
|
|
const baseUrl = !noProxy && isNeedProxy() ? config.app.baseUrl : api.endpoint;
|
|
const basePath = api.basePath ?? '';
|
|
const path = !noProxy && isNeedProxy() ? '/node-api/proxy' + basePath + resource.path : basePath + resource.path;
|
|
const url = new URL(compile(path)(pathParams), baseUrl);
|
|
|
|
queryParams && Object.entries(queryParams).forEach(([ key, value ]) => {
|
|
// there are some pagination params that can be null or false for the next page
|
|
value !== undefined && value !== '' && url.searchParams.append(key, String(value));
|
|
});
|
|
|
|
return url.toString();
|
|
}
|