docs: function dataLayer_updateBasket(thisID, thisBtnPos, type) {
        var thisParagraph = allRows[thisID];
        var thisAmount = '';
        var isBtn = true;
  
        // Construct generic ecommerce object for all use cases
        // TODO: handle currency changes
        var ecommerceObj = {
          'ecommerce': {'currencyCode': 'GBP',},
          'event': type ===  'add' ? 'addToBasket' : 'removeFromBasket'
        };
  
        lastBtnPos = thisBtnPos;
  
        // Change our 'amount' source depending on the input type
        if (thisBtnPos == 0) {
          isBtn = false;
          thisAmount = $('#' + thisID).data('current-amount');
        } else {
          thisAmount = allRows[thisID]['buttons'][thisBtnPos]['amount'];
        }
  
        submitNameID = isBtn ? 'moneybuy-' + thisAmount : 'manual-entry';
  
        // Parse this to a 2-decimal place float, need to re-parse after toFixed
        thisAmount = parseFloat(thisAmount).toFixed(2);
        thisAmount = parseFloat(thisAmount);
  
        // Switch the values based on the input type
        ecommerceObj['ecommerce'][type] = {
          'actionField': {'list': thisParagraph['client_id'] + '_' + thisID },
          'products': [{
            id: submitNameID,
            name: submitNameID,
            price: thisAmount,      
            brand: allRows[thisID]['giving_type'],  
            category: allRows[thisID]['cart_id'], 
            quantity: 1,
            dimenstion10: allRows[thisID]['giving_type']
          }],
        };
  
        dataLayer.push(ecommerceObj);
  
        // If this is our 'add' event triggered via submission, add the new cookie
        if ( type === 'add' ){
          updateCookie(thisID, thisBtnPos, 'add');
        }
      }