FxaProductButton.updateProductLinks = function()

in media/js/base/fxa-product-button.es6.js [105:156]


FxaProductButton.updateProductLinks = function (
    buttons,
    flowParams,
    overwrite
) {
    // if flowParams are undefined (e.g. blocked by CORS), then do nothing.
    if (!flowParams) {
        return;
    }

    // applies url to all buttons and adds cta position
    for (let i = 0; i < buttons.length; i++) {
        const href = buttons[i].href;
        const hostName = FxaProductButton.getHostName(href);
        // check if link is in the FxA referral allowedListDomains.
        if (hostName && allowedList.indexOf(hostName) !== -1) {
            // Only add flow params if they do not already exist,
            // unless `overwrite` is true.
            if (
                !overwrite &&
                href.indexOf('flow_id') === -1 &&
                href.indexOf('flow_begin_time') === -1 &&
                href.indexOf('device_id') === -1
            ) {
                buttons[i].href += flowParams;
            } else if (overwrite) {
                const buttonParams = window._SearchParams.queryStringToObject(
                    href.split('?')[1]
                );
                const updated =
                    window._SearchParams.queryStringToObject(flowParams);

                if (buttonParams.flow_id) {
                    buttonParams.flow_id = updated.flow_id;
                }

                if (buttonParams.flow_begin_time) {
                    buttonParams.flow_begin_time = updated.flow_begin_time;
                }

                if (buttonParams.device_id) {
                    buttonParams.device_id = updated.device_id;
                }

                const newParams =
                    window._SearchParams.objectToQueryString(buttonParams);

                buttons[i].href = `${href.split('?')[0]}?${newParams}`;
            }
        }
    }
};