Reputation: 16501
I have a toggleClass
function that basically reverses the classes in an if..else
depending on whether the state is a delete or reset. Can anyone offer any suggestions on how I can improve this to make it better?
JS
/**
* Uses the click events currentTarget as the element and a state string
* to work out how the required classes should be toggled.
*
* @param $el - jQuery click event
* @param state - string `reset` or `delete`
*/
toggleClass: function($el, state) {
console.log('toggleClass', state);
if(state === 'delete') {
$el.toggleClass('js-delete-session js-reset-session');
$el.toggleClass('fa-times fa-undo');
} else {
$el.toggleClass('js-reset-session js-delete-session');
$el.toggleClass('fa-undo fa-times');
}
},
Upvotes: 2
Views: 72
Reputation: 87213
The first statement to toggle class js-delete-session
and js-reset-session
is common in both if
and else
block, it can be moved outside of if else
.
toggleClass: function($el, state) {
// Common to both delete and reset
$el.toggleClass('js-delete-session js-reset-session');
if(state === 'delete') {
$el.toggleClass('fa-times fa-undo');
} else {
$el.toggleClass('fa-undo fa-times');
}
},
Also, ternary operator can be used as option to if...else
toggleClass: function($el, state) {
$el.toggleClass('js-delete-session js-reset-session');
state === 'delete' ? $el.toggleClass('fa-times fa-undo') : $el.toggleClass('fa-undo fa-times');
},
OR,
toggleClass: function($el) {
$el.toggleClass('js-delete-session js-reset-session fa-times fa-undo');
},
Upvotes: 2
Reputation: 700630
As you are toggling the same classes in both states, you don't need separate code for the states. You can even put the classes in the same call:
toggleClass: function($el) {
$el.toggleClass('js-delete-session js-reset-session fa-times fa-undo');
},
Upvotes: 4