If you’re looking for a comforting dish that brings everyone to the table, you’ve found it! Garlic Butter Chicken Bites with Creamy Parmesan Pasta: An Incredible 7-Step Recipe is a family favorite that combines succulent chicken with a luscious creamy sauce. It’s perfect for those busy weeknights when you want something quick yet satisfying, or for family gatherings when you want to impress without spending hours in the kitchen.

This recipe has a special place in my heart because it’s not just delicious; it also brings back memories of cozy dinners with loved ones. The rich flavors and simple ingredients make it accessible for all cooking levels, so you can whip this up even if you’re short on time or experience!


Why You’ll Love This Recipe
- Quick to prepare: Ready in under 30 minutes, making it ideal for busy weekdays.
- Family-friendly: Kids and adults alike will love the creamy pasta and tender chicken bites.
- Make-ahead friendly: Prepare the chicken and sauce in advance, then simply cook the pasta when you’re ready to eat.
- Flavor-packed: The combination of garlic and Parmesan creates a deliciously rich sauce that’s hard to resist.
- Versatile: Enjoy it as is, or get creative with your favorite add-ins!
Ingredients You’ll Need
To create this delightful dish, you’ll only need some simple and wholesome ingredients that you might already have in your kitchen. Here’s what you’ll need:
For the Chicken Bites
- 1 lb boneless, skinless chicken breasts, cut into bite-sized pieces
- 4 tablespoons unsalted butter
- 4 cloves garlic, minced
- 1 teaspoon Italian seasoning
- ½ teaspoon red pepper flakes (optional)
- Salt and pepper, to taste
For the Pasta
- 8 oz fettuccine or pasta of your choice
For the Sauce
- 1 cup heavy cream
- 1 cup grated Parmesan cheese
- Fresh parsley, chopped (for garnish)
Variations
This recipe is wonderfully flexible, allowing you to customize it to suit your taste preferences or dietary needs. Here are some delicious variations to consider:
- Swap the protein: Try using shrimp or tofu instead of chicken for a different flavor profile.
- Make it lighter: Substitute half-and-half or coconut cream for heavy cream for a lighter sauce without sacrificing flavor.
- Add veggies: Toss in some spinach, broccoli, or cherry tomatoes while cooking the chicken for extra nutrition.
- Spice it up: Incorporate some sautéed bell peppers or jalapeños for an extra kick!
How to Make Garlic Butter Chicken Bites with Creamy Parmesan Pasta: An Incredible 7-Step Recipe
Step 1: Cook the Pasta
Begin by boiling a large pot of salted water. Add the fettuccine and cook according to package instructions until al dente. This step is essential as perfectly cooked pasta forms the base of our dish. Once done, drain and set aside.
Step 2: Prepare Chicken Bites
While your pasta is cooking, season the cut chicken pieces with salt, pepper, and Italian seasoning. This seasoning ensures that each bite is flavorful right from the start.
Step 3: Sauté Chicken
In a large skillet over medium heat, melt 2 tablespoons of butter. Add the seasoned chicken bites and cook until they are golden brown and cooked through—this should take about 5-7 minutes. Removing them from the skillet ensures they stay juicy while we prepare our sauce.
Step 4: Make Garlic Butter
In that same skillet, add the remaining butter along with minced garlic. Sauté for 1-2 minutes until the garlic becomes fragrant but be careful not to let it burn; burnt garlic can turn bitter and ruin your sauce!
Step 5: Add Cream
Pour in the heavy cream and bring it to a gentle simmer while stirring frequently for about 3 minutes. This step helps thicken our sauce while mingling those wonderful garlic flavors.
Step 6: Incorporate Cheese
Gradually whisk in the grated Parmesan cheese until melted and smooth. Taste your sauce at this stage—add more salt, pepper, or red pepper flakes if desired! This creates that creamy richness that makes this dish irresistible.
Step 7: Combine Everything
Return the cooked chicken to the skillet along with your drained pasta. Toss everything together until well-coated in that luscious creamy sauce. This final step ensures every piece of pasta and chicken is enveloped in flavor.
Now sit back and enjoy this incredible meal—you’ve earned it!
Pro Tips for Making Garlic Butter Chicken Bites with Creamy Parmesan Pasta: An Incredible 7-Step Recipe
To ensure your Garlic Butter Chicken Bites with Creamy Parmesan Pasta turns out perfectly every time, here are some handy tips!
- Use Fresh Ingredients: Fresh garlic and high-quality Parmesan cheese can significantly enhance the flavor of your dish, making every bite more delicious.
- Don’t Overcook the Chicken: Keep an eye on the chicken while cooking; aim for golden brown and cooked through, which keeps it tender and juicy.
- Adjust the Cream: If you prefer a lighter sauce, you can substitute half of the heavy cream with chicken broth or a plant-based cream alternative to reduce richness.
- Add Veggies: Toss in some sautéed spinach or steamed broccoli for a pop of color and added nutrients; it also complements the flavors beautifully.
- Serve Immediately: This dish is best served fresh; the creamy sauce is at its peak texture right after cooking, ensuring a delightful eating experience.
How to Serve Garlic Butter Chicken Bites with Creamy Parmesan Pasta: An Incredible 7-Step Recipe
Presenting your dish beautifully can elevate any meal. Here are some ideas on how to serve your Garlic Butter Chicken Bites with Creamy Parmesan Pasta.
Garnishes
- Fresh Parsley: A sprinkle of chopped parsley adds a vibrant color and a hint of freshness that brightens up the dish.
- Lemon Zest: A touch of lemon zest can enhance the flavors and provide a refreshing contrast to the richness of the sauce.
Side Dishes
- Garlic Bread: Crispy garlic bread is perfect for soaking up any leftover creamy sauce, complementing the rich flavors of your main dish.
- Caesar Salad: A classic Caesar salad with crisp romaine lettuce and tangy dressing offers a refreshing crunch that balances the creamy pasta.
- Steamed Asparagus: Lightly steamed asparagus adds a crisp texture and a nutritious element that pairs well with both chicken and pasta.
- Roasted Vegetables: A medley of roasted seasonal vegetables provides an earthy sweetness that enhances your meal’s overall flavor profile.
Make Ahead and Storage
This Garlic Butter Chicken Bites with Creamy Parmesan Pasta is perfect for meal prep, making it easy to enjoy a delicious dinner throughout the week.
Storing Leftovers
- Place any leftover chicken bites and pasta in an airtight container.
- Store in the refrigerator for up to 3-4 days.
- Keep the sauce separate if possible to maintain the texture.
Freezing
- Allow the dish to cool completely before freezing.
- Transfer to a freezer-safe container, leaving some space for expansion.
- Freeze for up to 2-3 months. Label with the date for reference.
Reheating
- Thaw overnight in the refrigerator if frozen.
- Reheat in a skillet over low heat, adding a splash of cream if needed to loosen the sauce.
- Stir occasionally until heated through.
FAQs
Can I make Garlic Butter Chicken Bites with Creamy Parmesan Pasta ahead of time?
Yes! You can prepare this dish ahead of time by cooking and storing it as outlined in the Make Ahead and Storage section. Just reheat before serving!
What can I substitute instead of heavy cream in Garlic Butter Chicken Bites with Creamy Parmesan Pasta?
You can use a non-dairy milk alternative, such as almond or cashew cream, or even a combination of half-and-half and non-dairy milk for a lighter option.
How do I make sure my Garlic Butter Chicken Bites are tender?
To ensure your chicken bites are tender, avoid overcooking them. Cook just until golden brown and cooked through, usually about 5-7 minutes.
Can I add vegetables to Garlic Butter Chicken Bites with Creamy Parmesan Pasta?
Absolutely! Feel free to toss in your favorite vegetables like spinach, broccoli, or bell peppers when combining everything together for added nutrition and flavor.
Is this recipe suitable for meal prepping?
Yes! This recipe is ideal for meal prepping. You can store leftovers or make extra portions to enjoy throughout the week.
Final Thoughts
I hope you find joy in making this Garlic Butter Chicken Bites with Creamy Parmesan Pasta! It’s not just a recipe; it’s a comforting dish that brings warmth and happiness to your dining table. Enjoy every bite, share it with loved ones, and don’t hesitate to try new variations. Happy cooking!
Garlic Butter Chicken Bites with Creamy Parmesan Pasta
If you’re craving a cozy, comforting meal that everyone will love, Garlic Butter Chicken Bites with Creamy Parmesan Pasta is your go-to recipe. This dish combines tender chicken bites sautéed in rich garlic butter and served over creamy pasta coated in savory Parmesan cheese. Perfect for busy weeknights or family gatherings, this recipe is not only quick to prepare but also incredibly satisfying. In just seven easy steps, you can whip up a delicious dinner that will impress your loved ones without spending hours in the kitchen.
- Prep Time: 10 minutes
- Cook Time: 20 minutes
- Total Time: 30 minutes
- Yield: Serves approximately 4 people 1x
- Category: Main
- Method: Sautéing
- Cuisine: Italian
Ingredients
Scale
- 1 lb boneless, skinless chicken breasts
- 4 tablespoons unsalted butter
- 4 cloves garlic, minced
- 1 teaspoon Italian seasoning
- ½ teaspoon red pepper flakes (optional)
- Salt and pepper, to taste
- 8 oz fettuccine or pasta of your choice
- 1 cup heavy cream
- 1 cup grated Parmesan cheese
- Fresh parsley, for garnish
Instructions
- Cook the fettuccine according to package instructions until al dente. Drain and set aside.
- Season the chicken with salt, pepper, and Italian seasoning.
- In a skillet over medium heat, melt 2 tablespoons of butter and cook the chicken until golden brown (about 5-7 minutes). Remove from skillet.
- In the same skillet, add remaining butter and minced garlic; sauté until fragrant (1-2 minutes).
- Pour in heavy cream and simmer while stirring for about 3 minutes.
- Gradually whisk in Parmesan cheese until melted and smooth. Adjust seasoning as preferred.
- Combine cooked chicken and pasta into the sauce, tossing until well-coated.
Nutrition
- Serving Size: 1 plate (approximately 300g)
- Calories: 678
- Sugar: 2g
- Sodium: 940mg
- Fat: 36g
- Saturated Fat: 18g
- Unsaturated Fat: 16g
- Trans Fat: 0g
- Carbohydrates: 55g
- Fiber: 3g
- Protein: 34g
- Cholesterol: 129mg
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.kitchenstorydaily.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”5af0999ab0″,”postId”:8497};
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.smoothScroll = {
init() {
document.addEventListener( ‘click’, ( e ) => {
let anchor = e.target;
if ( anchor.tagName !== ‘A’ ) {
anchor = anchor.closest( ‘a.tasty-recipes-scrollto’ );
}
if ( ! anchor || ! anchor.classList.contains( ‘tasty-recipes-scrollto’ ) ) {
return;
}
const elementHref = anchor.getAttribute( ‘href’ );
if ( ! elementHref ) {
return;
}
e.preventDefault();
this.goToSelector( elementHref );
});
},
goToSelector( selector ) {
const element = document.querySelector( selector );
if ( ! element ) {
return;
}
element.scrollIntoView( { behavior: ‘smooth’ } );
}
};
document.addEventListener(
‘DOMContentLoaded’,
() => window.TastyRecipes.smoothScroll.init()
);
(function(){
var bothEquals = function( d1, d2, D ) {
var ret = 0;
if (d1<=D) {
ret++;
}
if (d2<=D) {
ret++;
}
return ret === 2;
};
var frac =function frac(x,D,mixed){var n1=Math.floor(x),d1=1;var n2=n1+1,d2=1;if(x!==n1){while(bothEquals(d1,d2,D)){var m=(n1+n2)/(d1+d2);if(x===m){if(d1+d2d2){d2=D+1;}else {d1=D+1;}break}else if(xD){d1=d2;n1=n2}if(!mixed){return[0,n1,d1];}var q=Math.floor(n1/d1);return[q,n1-q*d1,d1]};frac.cont=function cont(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1<D){A=Math.floor(B);P=A*P_1+P_2;Q=A*Q_1+Q_2;if(B-AD){if(Q_1>D){Q=Q_2;P=P_2}else{Q=Q_1;P=P_1}}if(!mixed){return[0,sgn*P,Q];}var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]};
window.tastyRecipesVulgarFractions = JSON.parse(decodeURIComponent(“%7B%22%C2%BC%22%3A%221%2F4%22%2C%22%C2%BD%22%3A%221%2F2%22%2C%22%C2%BE%22%3A%223%2F4%22%2C%22%E2%85%93%22%3A%221%2F3%22%2C%22%E2%85%94%22%3A%222%2F3%22%2C%22%E2%85%95%22%3A%221%2F5%22%2C%22%E2%85%96%22%3A%222%2F5%22%2C%22%E2%85%97%22%3A%223%2F5%22%2C%22%E2%85%98%22%3A%224%2F5%22%2C%22%E2%85%99%22%3A%221%2F6%22%2C%22%E2%85%9A%22%3A%225%2F6%22%2C%22%E2%85%9B%22%3A%221%2F8%22%2C%22%E2%85%9C%22%3A%223%2F8%22%2C%22%E2%85%9D%22%3A%225%2F8%22%2C%22%E2%85%9E%22%3A%227%2F8%22%7D”));
window.tastyRecipesFormatAmount = function(amount, el) {
if ( parseFloat( amount ) === parseInt( amount ) ) {
return amount;
}
var roundType = ‘frac’;
if (typeof el.dataset.amountShouldRound !== ‘undefined’) {
if (‘false’ !== el.dataset.amountShouldRound) {
if ( ‘number’ === el.dataset.amountShouldRound ) {
roundType = ‘number’;
} else if (‘frac’ === el.dataset.amountShouldRound) {
roundType = ‘frac’;
} else if (‘vulgar’ === el.dataset.amountShouldRound) {
roundType = ‘vulgar’;
} else {
roundType = ‘integer’;
}
}
}
if (‘number’ === roundType) {
amount = Number.parseFloat(amount).toPrecision(2);
} else if (‘integer’ === roundType) {
amount = Math.round(amount);
} else if (‘frac’ === roundType || ‘vulgar’ === roundType) {
var denom = 8;
if (typeof el.dataset.unit !== ‘undefined’) {
var unit = el.dataset.unit;
if ([‘cups’,’cup’,’c’].includes(unit)) {
denom = 4;
if (0.125 === amount) {
denom = 8;
}
if (“0.1667″ === Number.parseFloat( amount ).toPrecision(4)) {
denom = 6;
}
}
if ([‘tablespoons’,’tablespoon’,’tbsp’].includes(unit)) {
denom = 2;
}
if ([‘teaspoons’,’teaspoon’,’tsp’].includes(unit)) {
denom = 8;
}
}
var amountArray = frac.cont( amount, denom, true );
var newAmount = ”;
if ( amountArray[1] !== 0 ) {
newAmount = amountArray[1] + ‘/’ + amountArray[2];
if (‘vulgar’ === roundType) {
Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {
if (newAmount === window.tastyRecipesVulgarFractions[vulgar]) {
newAmount = vulgar;
}
});
}
}
if ( newAmount ) {
newAmount = ‘ ‘ + newAmount;
}
if ( amountArray[0] ) {
newAmount = amountArray[0] + newAmount;
}
amount = newAmount;
}
return amount;
};
window.tastyRecipesUpdatePrintLink = () => {
const printButton = document.querySelector( ‘.tasty-recipes-print-button’ );
if ( ! printButton ) {
return;
}
const printURL = new URL( printButton.href );
const searchParams = new URLSearchParams( printURL.search );
const unitButton = document.querySelector( ‘.tasty-recipes-convert-button-active’ );
const scaleButton = document.querySelector( ‘.tasty-recipes-scale-button-active’ );
let unit = ”;
let scale = ”;
if ( unitButton ) {
unit = unitButton.dataset.unitType;
searchParams.delete(‘unit’);
searchParams.set( ‘unit’, unit );
}
if ( scaleButton ) {
scale = scaleButton.dataset.amount;
searchParams.set( ‘scale’, scale );
}
const paramString = searchParams.toString();
const newURL = ” === paramString ? printURL.href : printURL.origin + printURL.pathname + ‘?’ + paramString;
const printLinks = document.querySelectorAll( ‘.tasty-recipes-print-link’ );
printLinks.forEach( ( el ) => {
el.href = newURL;
});
const printButtons = document.querySelectorAll( ‘.tasty-recipes-print-button’ );
printButtons.forEach( ( el ) => {
el.href = newURL;
});
};
document.addEventListener( ‘DOMContentLoaded’, () => {
if ( ! window.location.href.includes( ‘/print/’ ) ) {
return;
}
const searchParams = new URLSearchParams( window.location.search );
const unit = searchParams.get( ‘unit’ );
const scale = searchParams.get( ‘scale’ );
if ( unit && ( ‘metric’ === unit || ‘usc’ === unit ) ) {
document.querySelector( ‘.tasty-recipes-convert-button[data-unit-type=”‘ + unit + ‘”]’ ).click();
}
if ( scale && Number(scale) > 0 ) {
document.querySelector( ‘.tasty-recipes-scale-button[data-amount=”‘ + Number(scale) + ‘”]’ ).click();
}
});
}());
(function(){
var buttonClass = ‘tasty-recipes-scale-button’,
buttonActiveClass = ‘tasty-recipes-scale-button-active’,
buttons = document.querySelectorAll(‘.tasty-recipes-scale-button’);
if ( ! buttons ) {
return;
}
buttons.forEach(function(button){
button.addEventListener(‘click’, function(event){
event.preventDefault();
var recipe = event.target.closest(‘.tasty-recipes’);
if ( ! recipe ) {
return;
}
var otherButtons = recipe.querySelectorAll(‘.’ + buttonClass);
otherButtons.forEach(function(bt){
bt.classList.remove(buttonActiveClass);
});
button.classList.add(buttonActiveClass);
var scalables = recipe.querySelectorAll(‘span[data-amount]’);
var buttonAmount = parseFloat( button.dataset.amount );
scalables.forEach(function(scalable){
if (typeof scalable.dataset.amountOriginalType === ‘undefined’
&& typeof scalable.dataset.nfOriginal === ‘undefined’) {
if (-1 !== scalable.innerText.indexOf(‘/’)) {
scalable.dataset.amountOriginalType = ‘frac’;
}
if (-1 !== scalable.innerText.indexOf(‘.’)) {
scalable.dataset.amountOriginalType = ‘number’;
}
Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {
if (-1 !== scalable.innerText.indexOf(vulgar)) {
scalable.dataset.amountOriginalType = ‘vulgar’;
}
});
if (typeof scalable.dataset.amountOriginalType !== ‘undefined’) {
scalable.dataset.amountShouldRound = scalable.dataset.amountOriginalType;
}
}
var amount = parseFloat( scalable.dataset.amount ) * buttonAmount;
amount = window.tastyRecipesFormatAmount(amount, scalable);
if ( typeof scalable.dataset.unit !== ‘undefined’ ) {
if ( ! scalable.classList.contains(‘nutrifox-quantity’) ) {
if ( ! scalable.classList.contains(‘nutrifox-second-quantity’) ) {
amount += ‘ ‘ + scalable.dataset.unit;
}
}
}
scalable.innerText = amount;
});
var nonNumerics = recipe.querySelectorAll(‘[data-has-non-numeric-amount]’);
nonNumerics.forEach(function(nonNumeric){
var indicator = nonNumeric.querySelector(‘span[data-non-numeric-label]’);
if ( indicator ) {
nonNumeric.removeChild(indicator);
}
if ( 1 !== buttonAmount ) {
indicator = document.createElement(‘span’);
indicator.setAttribute(‘data-non-numeric-label’, true);
var text = document.createTextNode(‘ (x’ + buttonAmount + ‘)’);
indicator.appendChild(text);
nonNumeric.appendChild(indicator);
}
});
window.tastyRecipesUpdatePrintLink();
});
});
}());
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.cookMode = {
wakeLockApi: false,
wakeLock: false,
cookModeSelector: ‘.tasty-recipes-cook-mode’,
init() {
if (“wakeLock” in navigator && “request” in navigator.wakeLock) {
this.wakeLockApi = navigator.wakeLock;
}
const cookModes = document.querySelectorAll(this.cookModeSelector);
if (cookModes.length > 0) {
for (const cookMode of cookModes) {
if (this.wakeLockApi) {
cookMode.querySelector(‘input[type=”checkbox”]’).addEventListener(“change”, event => {
this.checkboxChange(event.target);
}, false);
} else {
cookMode.style.display = “none”;
}
}
}
},
checkboxChange(checkbox) {
if (checkbox.checked) {
this.lock();
} else {
this.unlock();
}
},
setCheckboxesState(state) {
const checkboxes = document.querySelectorAll(this.cookModeSelector + ‘ input[type=”checkbox”]’);
for (const checkbox of checkboxes) {
checkbox.checked = state;
}
},
async lock() {
try {
this.wakeLock = await this.wakeLockApi.request(“screen”);
this.wakeLock.addEventListener(“release”, () => {
this.wakeLock = false;
this.setCheckboxesState(false);
});
this.setCheckboxesState(true);
} catch (error) {
this.setCheckboxesState(false);
}
},
unlock() {
if (this.wakeLock) {
this.wakeLock.release();
this.wakeLock = false;
}
this.setCheckboxesState(false);
}
};
(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
document.addEventListener(“DOMContentLoaded”, callback);
}
})(() => {
window.TastyRecipes.cookMode.init();
});
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.staticTooltip = {
element: null,
tooltipElement: null,
deleting: false,
init( element ) {
if ( this.deleting ) {
return;
}
this.element = element;
this.buildElements();
},
destroy() {
if ( ! this.tooltipElement || this.deleting ) {
return;
}
this.deleting = true;
this.tooltipElement.classList.remove( ‘opened’ );
setTimeout( () => {
this.tooltipElement.remove();
this.deleting = false;
}, 500 );
},
buildElements() {
const tooltipElement = document.createElement( ‘div’ );
tooltipElement.classList.add( ‘tasty-recipes-static-tooltip’);
tooltipElement.setAttribute( ‘id’, ‘tasty-recipes-tooltip’ );
const currentTooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
if ( currentTooltipElement ) {
document.body.replaceChild( tooltipElement, currentTooltipElement );
} else {
document.body.appendChild( tooltipElement );
}
this.tooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
},
show() {
if ( ! this.tooltipElement ) {
return;
}
const tooltipTop = this.element.getBoundingClientRect().top
+ window.scrollY
– 10 // 10px offset.
– this.tooltipElement.getBoundingClientRect().height;
const tooltipLeft = this.element.getBoundingClientRect().left
– ( this.tooltipElement.getBoundingClientRect().width / 2 )
+ ( this.element.getBoundingClientRect().width / 2 ) – 1;
const posLeft = Math.max( 10, tooltipLeft );
this.maybeRemoveTail( posLeft !== tooltipLeft );
this.tooltipElement.setAttribute( ‘style’, ‘top:’ + tooltipTop + ‘px;left:’ + posLeft + ‘px;’ );
this.tooltipElement.classList.add( ‘opened’ );
},
maybeRemoveTail( removeTail ) {
if ( removeTail ) {
this.tooltipElement.classList.add( ‘tr-hide-tail’ );
} else {
this.tooltipElement.classList.remove( ‘tr-hide-tail’ );
}
},
changeMessage( message ) {
if ( ! this.tooltipElement ) {
return;
}
this.tooltipElement.innerHTML = message;
}
};
window.TastyRecipes.ajax = {
sendPostRequest( url, data, success, failure ) {
const xhr = new XMLHttpRequest();
xhr.open( ‘POST’, url, true );
xhr.send( this.preparePostData( data ) );
xhr.onreadystatechange = () => {
if ( 4 !== xhr.readyState ) {
return;
}
if ( xhr.status === 200 ) {
success( JSON.parse( xhr.responseText ) );
return;
}
failure( xhr );
};
xhr.onerror = () => {
failure( xhr );
};
},
preparePostData( data ) {
const formData = new FormData();
for ( const key in data ) {
formData.append( key, data[key] );
}
return formData;
},
};
window.TastyRecipes.ratings = {
defaultRating: 0,
currentRatingPercentage: 100,
savingRating: false,
init( minRating ) {
this.minRating = minRating;
this.formWatchRating();
this.closeTooltipWhenClickOutside();
this.addBodyClassBasedOnSelectedRating();
this.backwardCompFormRatingPosition();
},
formWatchRating() {
const ratings = document.querySelectorAll(‘.tasty-recipes-no-ratings-buttons [data-rating]’);
if ( ratings.length {
event.preventDefault();
this.defaultRating = event.target.closest( ‘.checked’ ).dataset.rating;
this.setCheckedStar( event.target );
this.maybeSendRating( this.defaultRating, event.target );
this.setRatingInForm( this.defaultRating );
} );
}
},
closeTooltipWhenClickOutside() {
window.addEventListener( ‘click’, e => {
// Bailout (don’t remove the tooltip) when the clicked element is a rating star, or it’s the tooltip itself.
if ( e.target.closest( ‘.tasty-recipes-rating’ ) || e.target.classList.contains( ‘tasty-recipes-static-tooltip’ ) ) {
return;
}
window.TastyRecipes.staticTooltip.destroy();
} );
},
setRatingInForm( rating ) {
const ratingInput = document.querySelector( ‘#respond .tasty-recipes-rating[value=”‘ + rating + ‘”]’ );
if ( ! ratingInput ) {
return;
}
ratingInput.click();
},
addBodyClassBasedOnSelectedRating() {
const ratingInputs = document.querySelectorAll( ‘input.tasty-recipes-rating’ );
if ( ! ratingInputs ) {
return;
}
for ( const ratingInput of ratingInputs ) {
ratingInput.addEventListener( ‘click’, currentEvent => {
const selectedRating = currentEvent.target.getAttribute( ‘value’ );
this.handleBodyClassByRating( selectedRating );
this.toggleCommentTextareaRequired( selectedRating );
} );
}
},
handleBodyClassByRating( rating ) {
if ( rating < this.minRating ) {
document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );
return;
}
document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );
},
toggleCommentTextareaRequired( rating ) {
const commentTextarea = document.getElementById( 'comment' );
if ( ! commentTextarea ) {
return;
}
if ( rating {
window.TastyRecipes.staticTooltip.changeMessage( response.data.message );
window.TastyRecipes.staticTooltip.show();
this.updateAverageText( response.data, recipeCardElement );
this.maybeFillCommentForm( response.data );
// Hide the tooltip after 5 seconds.
setTimeout( () => {
this.maybeResetTooltip( recipeCardElement, response.data, rating );
}, 5000 );
},
() => {
this.resetTooltip( recipeCardElement );
}
);
},
updateAverageText( data, recipeCardElement ) {
if ( ! data.average ) {
return;
}
this.setRatingPercent( data );
if ( ! data.count ) {
return;
}
const quickLink = document.querySelector( ‘.tasty-recipes-rating-link’ );
if ( quickLink ) {
this.setTextInContainer( quickLink, data );
this.setPartialStar( quickLink );
}
const cardStars = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
cardStars.dataset.trDefaultRating = data.average;
this.setTextInContainer( recipeCardElement.querySelector( ‘.tasty-recipes-rating’ ), data );
},
setTextInContainer( container, data ) {
if ( ! container ) {
return;
}
if ( data.label ) {
const ratingLabelElement = container.querySelector( ‘.rating-label’ );
if ( ratingLabelElement ) {
ratingLabelElement.innerHTML = data.label;
}
return;
}
const averageElement = container.querySelector( ‘.average’ );
if ( averageElement ) {
averageElement.textContent = data.average;
}
const countElement = container.querySelector( ‘.count’ );
if ( countElement ) {
countElement.textContent = data.count;
}
},
setPartialStar( container ) {
const highestStar = container.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( highestStar ) {
highestStar.dataset.trClip = this.currentRatingPercentage;
}
},
setRatingPercent( data ) {
this.defaultRating = data.average.toFixed( 1 );
const parts = data.average.toFixed( 2 ).toString().split( ‘.’ );
this.currentRatingPercentage = parts[1] ? parts[1] : 100;
if ( this.currentRatingPercentage === ’00’ ) {
this.currentRatingPercentage = 100;
}
},
setCheckedStar( target ) {
const cardRatingContainer = target.closest( ‘.tasty-recipes-ratings-buttons’ );
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( selectedRatingElement ) {
delete selectedRatingElement.dataset.trChecked;
}
const thisStar = target.closest( ‘.tasty-recipes-rating’ );
thisStar.dataset.trChecked = 1;
thisStar.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = 100;
},
maybeFillCommentForm( data ) {
if ( ! data.comment || ! data.comment.content ) {
return;
}
const commentForm = document.querySelector( ‘#commentform’ );
if ( ! commentForm ) {
return;
}
const commentBox = commentForm.querySelector( ‘[name=comment]’ );
if ( ! commentBox || commentBox.value ) {
return;
}
// Add comment details for editing.
commentBox.innerHTML = data.comment.content;
if ( data.comment.name ) {
commentForm.querySelector( ‘[name=author]’ ).value = data.comment.name;
commentForm.querySelector( ‘[name=email]’ ).value = data.comment.email;
}
},
maybeResetTooltip( recipeCardElement, data, rating ) {
if ( this.savingRating === rating ) {
this.resetTooltip( recipeCardElement, data );
}
},
resetTooltip( recipeCardElement, data ) {
window.TastyRecipes.staticTooltip.destroy();
this.savingRating = false;
// Reset the default rating.
const cardRatingContainer = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
if ( cardRatingContainer ) {
this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;
cardRatingContainer.dataset.trDefaultRating = this.defaultRating;
this.resetSelectedStar( cardRatingContainer, data );
}
},
resetSelectedStar( cardRatingContainer ) {
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( selectedRatingElement ) {
selectedRatingElement.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = this.currentRatingPercentage;
selectedRatingElement.parentNode.dataset.trChecked = 1;
}
const previousSelectedElement= cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( previousSelectedElement ) {
const currentSelectedRating = previousSelectedElement.querySelector(‘[data-rating]’);
if ( currentSelectedRating !== selectedRatingElement ) {
delete previousSelectedElement.dataset.trChecked;
}
}
},
backwardCompFormRatingPosition() {
const ratingsButtons = document.querySelector( ‘#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons’ );
if ( ! ratingsButtons ) {
return;
}
const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);
if ( ! ratingsButtonsStyles.display.includes( ‘flex’ ) ) {
ratingsButtons.style.direction = ‘rtl’;
}
if ( typeof tastyRecipesRating !== ‘undefined’ ) {
// Select the rating that was previously selected in admin.
ratingsButtons.querySelector( ‘.tasty-recipes-rating[value=”‘ + tastyRecipesRating + ‘”]’ ).checked = true;
}
const ratingSpans = ratingsButtons.querySelectorAll( ‘.tasty-recipes-rating’ );
for (const ratingSpan of ratingSpans) {
ratingSpan.addEventListener( ‘click’, event => {
if ( ratingSpan === event.target ) {
return;
}
ratingSpan.previousElementSibling.click();
} );
}
}
};
(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
window.addEventListener( ‘load’, callback );
}
})(() => {
window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );
});



Leave a Comment