If you’re looking for a comforting dish that warms the soul, this Beef Stew Recipe is just what you need! There’s something magical about the way beef becomes tender and flavorful when it simmers slowly with hearty vegetables. This stew is not just delicious; it’s perfect for busy weeknights or family gatherings where everyone can gather around the table and enjoy a hearty meal. Trust me, once you try it, it’ll become a beloved staple in your home too!

Why You’ll Love This Recipe
- Hearty and Filling: This stew is loaded with beef, carrots, and potatoes, making it a complete meal that satisfies even the biggest appetites.
- Easy to Prepare: With simple steps and easy-to-find ingredients, you’ll have a delicious dinner without spending all day in the kitchen.
- Family-Friendly: Kids and adults alike will love this comforting dish. It’s perfect for picky eaters who enjoy tasty bites of tender beef and veggies.
- Make-Ahead Friendly: This stew keeps well! Make it ahead of time, and it tastes even better the next day as the flavors meld together beautifully.
Ingredients You’ll Need
Let’s gather some simple, wholesome ingredients to create this delightful stew. You might already have many of these in your pantry!

For the Stew
- 2 pounds (about 900g) beef stew meat, cut into bite-sized pieces
- 2 tablespoons all-purpose flour
- Salt and black pepper (to taste)
- 2 tablespoons vegetable oil
- 1 onion, chopped
- 3 cloves garlic, minced
- 4 cups beef broth
- 1 cup apple vinegar (optional)
- 2 bay leaves
- 1 teaspoon dried thyme
- 4 large carrots, peeled and cut into chunks
- 4 medium potatoes, peeled and cut into chunks
- Chopped fresh parsley, for garnish (optional)
Variations
This Beef Stew Recipe is quite flexible! Here are some fun ideas to customize it to your liking:

- Swap the Protein: Try using chicken or lamb instead of beef for a different flavor profile.
- Add More Veggies: Toss in some peas or green beans during the last few minutes of cooking for added color and nutrition.
- Spice It Up: Add a pinch of red pepper flakes or a dash of your favorite hot sauce to give it an extra kick.
- Make It Creamy: Stir in a splash of coconut milk during the last few minutes for a creamy twist on classic stew.
How to Make Beef Stew Recipe
Step 1: Coat Beef with Flour
In a large bowl, toss the beef stew meat with all-purpose flour until evenly coated. This step not only helps to brown the meat but also thickens the stew later as it cooks. Season generously with salt and black pepper to enhance the flavor.
Step 2: Brown the Beef
Heat vegetable oil in a large pot or Dutch oven over medium-high heat. Add the coated beef in batches, browning on all sides for about 5-6 minutes per batch. Browning adds depth and richness to your stew, creating those lovely caramelized bits at the bottom of the pot.
Step 3: Sauté Onion and Garlic
In that same pot, add chopped onion and minced garlic. Sauté them for 2-3 minutes until they are softened and fragrant. This step builds an aromatic base for your stew that makes every bite irresistible.
Step 4: Deglaze the Pot
Pour in beef broth along with apple vinegar if you’re using it. Scrape up any browned bits from the bottom using a wooden spoon—this is where much of your flavor comes from!
Step 5: Add Seasonings
Return the browned beef back into the pot. Stir in bay leaves and dried thyme; season again with salt and black pepper if needed. These herbs add warmth and complexity to your stew.
Step 6: Simmer
Bring everything to a simmer before reducing heat to low. Cover the pot and let it simmer gently for 1 to 1½ hours until that beef is fall-apart tender. The slow cooking process allows all those wonderful flavors to meld beautifully.
Step 7: Add Vegetables
Once your beef is tender, add chopped carrots and potatoes into the pot. Cover again and continue simmering for another 30-40 minutes until vegetables are fork-tender.
Step 8: Serve
Discard bay leaves before ladling the rich stew into bowls. If you like, sprinkle with chopped fresh parsley for a pop of color! Serve hot alongside crusty bread—you won’t regret having something to soak up all that delicious broth.
Step 9: Optional Thickening
If you prefer a thicker consistency, mix together cornstarch with cold water during those last ten minutes of cooking time—this will give you that perfect hearty texture!
Enjoy your cozy evening with this delicious Beef Stew Recipe—it’s sure to become one of your favorites!
Pro Tips for Making Beef Stew Recipe
Making a delicious beef stew is all about the little details that enhance the flavors and textures. Here are some pro tips to ensure your stew turns out perfect every time!
-
Choose the Right Cut of Meat: Opt for tougher cuts like chuck roast or brisket, as they become tender and flavorful during cooking. These cuts have more connective tissue, which breaks down beautifully in the slow simmer.
-
Brown the Meat Properly: Take the time to brown the beef well before adding other ingredients. This caramelization develops deep, rich flavors that elevate your stew from good to great.
-
Don’t Skip the Deglazing Step: Scraping up those browned bits at the bottom of the pot is essential! They carry intense flavors that will enrich your stew, making it taste incredible.
-
Adjust Seasonings Gradually: Taste as you go! Adding seasonings gradually allows you to control the flavor profile, ensuring your stew isn’t overly salty or bland.
-
Let It Rest: After cooking, let your stew sit for a few minutes before serving. This resting period allows flavors to meld together even more, resulting in a richer taste.
How to Serve Beef Stew Recipe
When it comes to serving beef stew, presentation and accompaniments can make a big difference! Here are some thoughtful ways to bring this hearty dish to your table.
Garnishes
- Chopped Fresh Parsley: A sprinkle of fresh parsley adds color and a hint of freshness that brightens up the rich stew.
- Cracked Black Pepper: A dash of freshly cracked black pepper on top enhances flavor and adds a bit of spice without overwhelming the dish.
- Grated Parmesan Cheese (optional): For an extra layer of flavor, sprinkle some grated Parmesan cheese on top just before serving—though keep in mind any dietary preferences!
Side Dishes
- Crusty Bread: A loaf of warm, crusty bread is perfect for soaking up every last drop of savory broth. It’s a classic companion that never disappoints!
- Simple Green Salad: A light salad with mixed greens, cherry tomatoes, and a vinaigrette dressing provides a refreshing contrast to the hearty stew.
- Steamed Vegetables: Lightly steamed vegetables such as green beans or broccoli add nutrition and color while balancing out the richness of the stew.
- Mashed Potatoes: Creamy mashed potatoes make an excellent base for beef stew if you want something extra comforting. The combination is truly unbeatable!
Enjoy crafting this delightful Beef Stew Recipe and sharing it with friends and family! Each bite brings warmth and satisfaction—perfect for any occasion.
Make Ahead and Storage
This Beef Stew Recipe is not only delicious but also perfect for meal prep! Making a big batch allows you to enjoy hearty, comforting meals throughout the week with minimal effort.
Storing Leftovers
- Store any leftovers in an airtight container.
- Refrigerate within two hours of cooking.
- Enjoy within 3-4 days for the best flavor and quality.
Freezing
- Allow the stew to cool completely before freezing.
- Portion into freezer-safe containers or bags, leaving some space for expansion.
- Freeze for up to 3 months. Label with the date for easy reference.
Reheating
- Thaw overnight in the refrigerator if frozen.
- Reheat in a pot over medium heat until warmed through, stirring occasionally.
- For microwave reheating, place in a microwave-safe dish and cover; heat on medium power, stirring halfway through.
FAQs
Here are some common questions about this comforting Beef Stew Recipe!
Can I use other types of meat for this Beef Stew Recipe?
Yes! You can substitute beef with lamb or even chicken for a different flavor profile. Just adjust cooking times as needed for tenderness.
How can I make this Beef Stew Recipe spicier?
To add some heat, consider adding red pepper flakes or diced jalapeños while sautéing the onion and garlic. Adjust according to your spice preference!
What should I serve with this Beef Stew Recipe?
This stew pairs wonderfully with crusty bread, rice, or even over noodles. A fresh green salad on the side makes for a balanced meal!
Is this Beef Stew Recipe gluten-free?
Yes! Simply replace all-purpose flour with a gluten-free flour blend to coat the beef without compromising on taste.
Final Thoughts
This Beef Stew Recipe is sure to warm your heart and home. With its rich flavors and tender chunks of beef, it’s perfect for chilly evenings or gatherings with loved ones. I hope you enjoy making it as much as I do! Remember, cooking is all about sharing love and great flavors—so don’t hesitate to invite friends over and enjoy this delightful meal together!
Beef Stew Recipe
Warm up with this hearty Beef Stew Recipe, a comforting dish that’s perfect for chilly evenings and family gatherings. Tender chunks of beef simmered with carrots and potatoes create a rich, flavorful stew that warms the soul. This recipe is not only easy to prepare but also makes for great leftovers, as the flavors deepen overnight. Ideal for busy weeknights or cozy weekends, this beef stew will quickly become a beloved staple in your home. Enjoy it with crusty bread or over a bed of fluffy mashed potatoes for an unforgettable meal!
- Prep Time: 20 minutes
- Cook Time: 2 hours
- Total Time: 2 hours 20 minutes
- Yield: Approximately 6 servings 1x
- Category: Dinner
- Method: Simmering
- Cuisine: American
Ingredients
Scale
- 2 pounds beef stew meat (cut into bite-sized pieces)
- 2 tablespoons all-purpose flour
- Salt and black pepper (to taste)
- 2 tablespoons vegetable oil
- 1 onion (chopped)
- 3 cloves garlic (minced)
- 4 cups beef broth
- 1 cup apple vinegar (optional)
- 2 bay leaves
- 1 teaspoon dried thyme
- 4 large carrots (peeled and cut into chunks)
- 4 medium potatoes (peeled and cut into chunks)
- Chopped fresh parsley (for garnish)
Instructions
- In a bowl, coat the beef with flour, salt, and pepper.
- Heat oil in a pot over medium-high heat, browning the beef in batches.
- Sauté onion and garlic until softened.
- Deglaze the pot with beef broth and apple vinegar, scraping up browned bits.
- Add the browned beef back to the pot with bay leaves and thyme; season again if needed.
- Simmer on low for 1 to 1½ hours until tender.
- Stir in carrots and potatoes; cover and simmer for another 30-40 minutes until veggies are fork-tender.
- Discard bay leaves before serving; garnish with parsley if desired.
Nutrition
- Serving Size: 1 serving
- Calories: 350
- Sugar: 4g
- Sodium: 600mg
- Fat: 15g
- Saturated Fat: 5g
- Unsaturated Fat: 8g
- Trans Fat: 0g
- Carbohydrates: 32g
- Fiber: 5g
- Protein: 25g
- Cholesterol: 80mg
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.fullrecipeshub.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”a20791664b”,”postId”:780};
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