UNPKG

@polls-platform/core

Version:

Polls Platform core library

173 lines (172 loc) 5.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getThemeFromPollUrl = exports.setPollUrlParams = void 0; const types_1 = require("../types"); /* ****************************************************************************************************************** */ // region: Helpers /* ****************************************************************************************************************** */ function setQueryParam(options) { let { urlString } = options; const { key, value } = options; if (!urlString.includes('?')) { // does not include query string, // e.g. https://example.com/ urlString = `${urlString}?`; // updated to https://example.com/? } else if (!urlString.endsWith('?')) { // includes query string and parameters // e.g. https://example.com/?key=value urlString = `${urlString}&`; // updated to https://example.com/?key=value& } else { // includes empty query string // e.g. https://example.com/? // ready to go } // TODO: we are not encoding these for now since they are only used // internally with safe keys and values urlString = `${urlString}${key}=${value}`; return urlString; } function getQueryParam(options) { const { urlString, key } = options; if (urlString.includes('?')) { // get query string const queryString = urlString.split('?')[1]; // split into pairs let queryParamPairs; if (queryString.includes('&')) { queryParamPairs = queryString.split('&'); } else { queryParamPairs = [queryString]; } // check each pair for (const queryParamPair of queryParamPairs) { if (queryParamPair.includes('=')) { const [paramKey, value] = queryParamPair.split('='); if (paramKey === key) { // found param return value !== null && value !== void 0 ? value : null; } } else { continue; } } // return null if not found return null; } else { return null; } } // endregion /* ****************************************************************************************************************** */ // region: Utils /* ****************************************************************************************************************** */ function setPollUrlParams(urlString, options) { const { share, pending, theme, embeddedState, flow, storeId } = options; // pending if (pending === undefined) { // do nothing if not provided } else if (pending) { urlString = setQueryParam({ urlString, key: types_1.PollUrlParams.pending, value: 'true', }); } else { // TODO: delete param just to be safe // url.searchParams.delete(PollUrlParams.pending); } // share if (share === undefined) { // do nothing if not provided } else if (share) { urlString = setQueryParam({ urlString, key: types_1.PollUrlParams.share, value: 'true', }); } else { // TODO: delete param just to be safe // url.searchParams.delete(PollUrlParams.share); } // theme if (theme === undefined) { // do nothing if not provided } else if (theme) { urlString = setQueryParam({ urlString, key: types_1.PollUrlParams.theme, value: theme, }); } else { // TODO: delete param just to be safe // url.searchParams.delete(PollUrlParams.theme); } // embeddedState if (embeddedState === undefined) { // do nothing if not provided } else if (embeddedState === types_1.EmbeddedState.NONE || embeddedState === null) { // TODO: delete param just to be safe // url.searchParams.set(PollUrlParams.embeddedState, embeddedState); } else { urlString = setQueryParam({ urlString, key: types_1.PollUrlParams.embeddedState, value: embeddedState, }); } // open poll flow if (flow === undefined) { // do nothing if not provided } else if (flow) { urlString = setQueryParam({ urlString, key: types_1.PollUrlParams.flow, value: flow, }); } else { // TODO: delete param just to be safe // url.searchParams.delete(PollUrlParams.pending); } // storeId if (storeId === undefined) { // do nothing if not provided } else if (storeId) { urlString = setQueryParam({ urlString, key: types_1.PollUrlParams.storeId, // TODO: this may not work on react native, // but we should not be using shopify store id on react native anyways value: encodeURIComponent(storeId), }); } else { // TODO: delete param just to be safe // url.searchParams.delete(PollUrlParams.storeId); } return urlString; } exports.setPollUrlParams = setPollUrlParams; function getThemeFromPollUrl(url) { return getQueryParam({ urlString: url, key: types_1.PollUrlParams.theme }); // return new URL(url).searchParams.get(PollUrlParams.theme); } exports.getThemeFromPollUrl = getThemeFromPollUrl; // endregion