@polls-platform/core
Version:
Polls Platform core library
173 lines (172 loc) • 5.56 kB
JavaScript
;
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