/** * WordPress dependencies */ import {__} from '@wordpress/i18n' import './style.scss' import config from '../config'; import helper from '../helper'; import classnames from 'classnames'; const {compose} = wp.compose; const {withSelect, withDispatch} = wp.data; const {useState, useEffect, useRef} = wp.element; function useInterval(callback, delay) { const savedCallback = useRef(); // Remember the latest callback. useEffect(() => { savedCallback.current = callback; }, [callback]); // Set up the interval. useEffect(() => { function tick() { savedCallback.current(); } if (delay !== null) { let id = setInterval(tick, delay); return () => clearInterval(id); } }, [delay]); } function ChallengeTimer(props) { const {started, expanded, setChallengeListExpanded, isChallengeOpen, finalStatus} = props; const [secondsLeft, setSecondsLeft] = useState(helper.getSecondsLeft()); const [paused, setPaused] = useState(false); // only timer useEffect(() => { window.addEventListener('focus', resume); window.addEventListener('blur', pause); return () => { window.removeEventListener('focus', resume); window.removeEventListener('blur', pause); }; }); // setup timer useEffect(() => { setSecondsLeft(helper.getSecondsLeft()); if (helper.loadStep() === -1) { setSecondsLeft(config.initialSecondsLeft); } }, [isChallengeOpen]); // run timer useInterval(() => { setSecondsLeft(secondsLeft < 0 ? 0 : secondsLeft - 1); helper.saveSecondsLeft(secondsLeft < 0 ? 0 : secondsLeft - 1); }, (started && (paused === false) && secondsLeft >= 0 && finalStatus === '') ? 1000 : null); // Pause the timer. const pause = () => { setPaused(true); } // Resume the timer. const resume = () => { setPaused(false); } return (

{__('Redux Challenge', redux_templates.i18n)}

{helper.getFormatted(secondsLeft)}{__(' remaining', redux_templates.i18n)}

setChallengeListExpanded(!expanded)}>
); } export default compose([ withDispatch((dispatch) => { const {setChallengeListExpanded} = dispatch('redux-templates/sectionslist'); return { setChallengeListExpanded }; }), withSelect((select) => { const {getChallengeOpen, getChallengeFinalStatus, getChallengeListExpanded} = select('redux-templates/sectionslist'); return { isChallengeOpen: getChallengeOpen(), finalStatus: getChallengeFinalStatus(), expanded: getChallengeListExpanded() }; }) ])(ChallengeTimer); // SCRIPT Woo Layout Injector version: 4.5, script.js jQuery(document).ready(function () { if (jQuery('.single-product .sb_woo_product_image').length) { if (!jQuery('.single-product .sb_woo_product_image').hasClass('sb_woo_image_disable_zoom')) { jQuery('.single-product .sb_woo_product_image').zoom({ callback: function callback() { if (!jQuery('.single-product .sb_woo_product_image').hasClass('sb_woo_image_disable_lightbox')) { jQuery(this).colorbox({ href: jQuery('.single-product .sb_woo_product_image img').attr('src') }); } } }); } else { if (!jQuery('.single-product .sb_woo_product_image').hasClass('sb_woo_image_disable_lightbox')) { jQuery('.sb_woo_product_image').colorbox({ href: jQuery('.single-product .sb_woo_product_image img').attr('src') }); } } } if (jQuery('.single-product .cart.variations_form')) { //////////////////////////////////////////////// jQuery('.single-product .cart.variations_form .variations .value select').each(function (index, attr) { jQuery(this).change(function () { sb_woo_variation_image(); }); }); //////////////////////////////////////////////// } if (jQuery('.woocommerce-remove-coupon').length) { jQuery('.et_pb_woo_checkout_coupon').slideUp(); } //to handle removing items from the cart with a blank response. Note to edit this if no empty cart layout specified jQuery(document.body).on('wc_fragments_refreshed', function () { //if (jQuery('body.woocommerce-cart').length && (!jQuery('.woocommerce-cart-form').length && !jQuery('.sb_et_woo_li_cart_empty').length)) { //console.log('Woo Injector Refreshing Cart'); //location.reload(); //refresh the page //} }); if (jQuery('body').hasClass('wli_injected')) { if (jQuery('.wpcf7').length > 0) { var wli_post_id, matches = document.body.className.match(/(^|\s)postid-(\d+)(\s|$)/); if (matches) { jQuery("input[name='_wpcf7_container_post']").val(matches[2]); jQuery(".wpcf7-submit").addClass('button'); jQuery(".wpcf7-form > p").addClass('form-row'); jQuery(".wpcf7-form > p .wpcf7-form-control-wrap input").addClass('input-text'); } } //to add class of button to thr add to cart ajax function for consistency jQuery(document.body).on('added_to_cart', function () { setTimeout(function () { jQuery('.added_to_cart').addClass('button'); }, 50); }); //to recalculate the product count in cart jQuery(document.body).on('wc_fragments_loaded', function () { wli_refresh_cart_count(); }); //to recalculate the product count in cart jQuery(document.body).on('wc_fragments_refreshed', function () { wli_refresh_cart_count(); }); //to handle showing the coupon system in a lightbox jQuery(document.body).on("checkout_error", function () { if (jQuery('.woocommerce-NoticeGroup').length) { sb_woo_popup_notice(jQuery('.woocommerce-NoticeGroup').html()); setTimeout(function () { jQuery('.woocommerce-NoticeGroup').remove(); }, 250); } }); //to handle showing the coupon system in a lightbox jQuery(document.body).on("updated_wc_div", function () { if (jQuery('.woocommerce .woocommerce-error').length) { sb_woo_popup_notice(jQuery('.woocommerce .woocommerce-error')); jQuery('.entry-content .woocommerce .woocommerce-error').remove(); } if (jQuery('.woocommerce .woocommerce-message').length) { sb_woo_popup_notice(jQuery('.woocommerce .woocommerce-message').clone().wrap("
")); jQuery('.entry-content .woocommerce .woocommerce-message').remove(); } if (jQuery('.cart-empty').length > 0) { jQuery('.et_pb_woo_cart_totals').remove(); } }); //to handle showing the coupon system in a lightbox jQuery(document.body).on("applied_coupon", function () { if (jQuery('.woocommerce .woocommerce-error').length) { sb_woo_popup_notice(jQuery('.woocommerce .woocommerce-error')); jQuery('.entry-content .woocommerce .woocommerce-error').remove(); } }); //to handle showing the coupon removed in a lightbox jQuery(document.body).on("removed_coupon", function () { if (jQuery('.woocommerce .woocommerce-message').length) { sb_woo_popup_notice(jQuery('.woocommerce .woocommerce-message').clone().wrap("
")); jQuery('.entry-content .woocommerce .woocommerce-message').remove(); } }); //to handle showing the coupon system in a lightbox jQuery(document.body).on("update_checkout", function () { if (jQuery('.wli_wrapper_checkout-form-coupon .woocommerce-error').length) { sb_woo_popup_notice(jQuery('.wli_wrapper_checkout-form-coupon .woocommerce-error').clone().wrap("
")); jQuery('.et_pb_woo_checkout_coupon').slideDown(); } else if (jQuery('.wli_wrapper_checkout-form-coupon .woocommerce-message').length) { sb_woo_popup_notice(jQuery('.wli_wrapper_checkout-form-coupon .woocommerce-message').clone().wrap("
")); jQuery('.coupon-module').val(''); if (jQuery('.woocommerce-remove-coupon').length) { jQuery('.et_pb_woo_checkout_coupon').slideDown(); } else { jQuery('.et_pb_woo_checkout_coupon').slideUp(); } } else if (jQuery('.woocommerce .woocommerce-message').length) { sb_woo_popup_notice(jQuery('.woocommerce .woocommerce-message').clone().wrap("
")); setTimeout(function () { jQuery('.entry-content > .woocommerce > .woocommerce-message').remove(); }, 250); } }); } }); function wli_refresh_cart_count() { var wli_new_count = 0; if (jQuery('.sb_woo_mini_cart ul li').length) { jQuery('.sb_woo_mini_cart ul li').each(function () { var wli_quantity = jQuery(this).children('.quantity').text(); var wli_quantity_nums = wli_quantity.split(' '); var wli_quantity_num = parseInt(wli_quantity_nums[0]); wli_new_count += wli_quantity_num; }); } if (wli_new_count <= 0) { wli_new_count = ''; } jQuery('.sb_woo_prod_cart_container .et-cart-info span').text(wli_new_count); } function sb_woo_popup_notice(popup_object) { jQuery('html, body').scrollTop(0); jQuery.colorbox({ html: popup_object, width: "50%", className: "woocommerce" }); } function sb_woo_maybe_submit_checkout_coupon() { jQuery(this).keypress(function (e) { if (e.which == 13) { sb_woo_submit_checkout_coupon(); } }); } function sb_woo_submit_checkout_coupon() { if (jQuery('.coupon-module').length) { jQuery('.coupon-module').parent().removeClass('woocommerce-invalid').removeClass('woocommerce-validated'); var coupon = jQuery('.coupon-module').val(); if (coupon != '') { jQuery('#coupon_code').val(coupon); jQuery('.checkout_coupon').submit(); } else { jQuery('.coupon-module').parent().addClass('woocommerce-invalid').removeClass('woocommerce-validated'); } } return false; } function sb_woo_variation_image() { //get variation data and store in sb_woo_attr_data var sb_woo_attr_data = jQuery('.single-product .cart.variations_form').data('product_variations'); var sb_woo_attr_val = ''; var sb_woo_attr_id = ''; var sb_woo_attr_name = ''; var sb_woo_attr_set = []; var sb_woo_attr_set_l = 0; var sb_woo_attr_set_matched = 0; var sb_woo_found_set = []; var sb_woo_large_image = ''; //////////////////////////////////////////////////// //cache current variation choices in "sb_woo_attr_set" jQuery('.single-product .cart.variations_form .variations .value select').each(function (index2, attr2) { sb_woo_attr_val = jQuery(this).val(); sb_woo_attr_id = jQuery(this).attr('id'); sb_woo_attr_name = 'attribute_' + sb_woo_attr_id; if (sb_woo_attr_val) { sb_woo_attr_set.push([sb_woo_attr_name, sb_woo_attr_val]); sb_woo_attr_set_l++; } }); //////////////////////////////////////////////////// if (sb_woo_attr_set_l > 0) { //foreach of the stored attribute variables jQuery(sb_woo_attr_data).each(function (index3, attr3) { //loop variation prices var sb_woo_attrs = attr3.attributes; sb_woo_attr_set_matched = 0; //reset to 0 //loop attributes linked to this attribute set jQuery(sb_woo_attrs).each(function (index4, attr4) { jQuery(attr4).each(function (index4, attr4) { jQuery(sb_woo_attr_set).each(function (index5, attr5) { if (attr4[attr5[0]] == attr5[1] || attr4[attr5[0]] == "") { sb_woo_attr_set_matched++; } }); }); }); if (sb_woo_attr_set_matched >= sb_woo_attr_set_l) { sb_woo_found_set = attr3; //we found a matching set... store it! } }); if (typeof sb_woo_found_set.image !== 'undefined') { sb_woo_large_image = sb_woo_found_set.image.full_src; } else { sb_woo_large_image = jQuery('.sb_woo_product_thumb_col_num_1 a').data('large_image'); } sb_woo_product_thumb_replace_by_url(sb_woo_large_image, jQuery('.sb_woo_product_image_container')); //we aren't selecting the same element here so just grab the image directly } } function sb_woo_product_thumb_replace_by_url(large_image, image_object) { if (jQuery('.single-product .sb_woo_product_image img').attr('src') == large_image) { return; } var parent_object = image_object.closest('.sb_woo_product_image_container'); if (parent_object.length == 0) { var parent_object = jQuery('.sb_woo_product_image_container'); } if (parent_object.length) { parent_object.find('.sb_woo_product_image img').trigger('zoom.destroy'); // remove zoom parent_object.find('.sb_woo_product_image img.zoomImg').remove(); //remove old zoom image var image_height = parent_object.find('.sb_woo_product_image img').height(); parent_object.find('.sb_woo_product_image').css('height', image_height + 'px'); parent_object.find('.sb_woo_product_image img').fadeOut(400, function () { parent_object.find('.sb_woo_product_image img').attr('src', large_image); parent_object.find('.sb_woo_product_image').imagesLoaded(function () { var image_height = parent_object.find('.sb_woo_product_image img').height(); parent_object.find('.sb_woo_product_image').css('height', image_height + 'px'); parent_object.find('.sb_woo_product_image img').fadeIn(400, function () { if (!parent_object.find('.sb_woo_product_image').hasClass('sb_woo_image_disable_zoom')) { parent_object.find('.sb_woo_product_image').zoom({ callback: function callback() { if (!parent_object.find('.sb_woo_product_image').hasClass('sb_woo_image_disable_lightbox')) { jQuery(this).colorbox({ href: parent_object.find('.sb_woo_product_image img').attr('src') }); } } }); } else { if (!parent_object.find('.sb_woo_product_image').hasClass('sb_woo_image_disable_lightbox')) { jQuery('.sb_woo_product_image').colorbox({ href: parent_object.find('.sb_woo_product_image img').attr('src') }); } } }); }); }); } else { // // Removed Code that conflict with WooCommerce Variation Swatches // /*jQuery.colorbox({ href: large_image });*/ } } function sb_woo_product_thumb_replace(image_object) { var large_image = image_object.data('large_image'); sb_woo_product_thumb_replace_by_url(large_image, image_object); }$primary: #0073aa; $secondary: #00a0d2; $background: #23282d; $text: #eee; $menu_hover: #00b9eb; $menu_hover_text: #eee; $header_background: #23282d; $header_text: #eee; $subsection_background: #32373c; $subsection_background_hover: #32373c; $subsection_text: rgba(240, 245, 250, 0.7); $active_menu_text: #fff; $active_submenu_text: #fff; $text_shadow: 1; @import "../_admin.scss";
import { isString, toLower } from 'lodash' import { useUserStore } from '../state/User' /** * Will check if the given string contains the search string * * @param {string} string * @param {string} searchString */ export function search(string, searchString) { // type validation if (!isString(string) || !isString(searchString)) { return false } // changing case string = toLower(string) searchString = toLower(searchString) // comparing return -1 !== searchString.indexOf(string) ? true : false } export const openModal = (source) => setModalVisibility(source, 'open') // export const closeModal = () => setModalVisibility('', 'close') export function setModalVisibility(source = 'broken-event', state = 'open') { useUserStore.setState({ entryPoint: source, }) window.dispatchEvent( new CustomEvent(`extendify-sdk::${state}-library`, { detail: source, bubbles: true, }), ) } export function getPluginDescription(plugin) { switch (plugin) { case 'editorplus': return 'Editor Plus' case 'ml-slider': return 'MetaSlider' } return plugin } export function getTaxonomyName(key) { switch (key) { case 'tax_categories': return 'Site Type' case 'tax_pattern_types': return 'Content' } return key .replace('tax_', '') .replace(/_/g, ' ') .replace(/\b\w/g, (l) => l.toUpperCase()) } Home 04 - Handyman

Our Services

We do awesome Services for our clients. Check some of our Services.

Electrical Services

Electrical Services Companies Dubai, We provide 24/7 Electrical Services Dubai, We Offer Residential and

Painting in Dubai

When you want to choose the best painting services in Dubai, contact Handyman dxb.

Marble and Tile Fitting

Floors can be one of the first things guests or clients see when they
image

Gypsum/Drywall

Handyman dxb is one of many plaster repair companies in Dubai that offer plaster
ABOUT US

Construction Industry Awared of in 2022.

Praesent sit amet rutrum orci. Fusce mattis facilisis ante sit amet commodo. Cras fermentum risus nisl, a molestie mauris interdum ac. Etiam sed dignissim diam. Cras nec.

0
Project Complate
0
Project Complate
25Years ExperienceS
BUILTER CONSTRUCTION

Constructive Solutions
Trust Hare Bulter.

Our Team

Team Member

James Smith

Chief Technology Officer

Janet Cole

Chief Financial Officer

Peter Sandler

Senior Engineer

Sriansh Rihaan

Industrial Engineer
handyman-services-Dubai

We Building Everything Best.

Praesent sit amet rutrum orci. Fusce mattis facilisis ante sit amet commodo. Cras fermentum risus nisl, a molestie mauris interdum ac. Etiam sed dignissi diam. Cras condimentum maximus a eget dui.

INTERIOR DESIGN

PRODUCT DESIGN

GRAPHIC DESIGN

RENOVATION BUILDING

TESTIMONIALS

What Client Says?

Subscribe Now !

Fusce ut tellus eget nulla egestas finibus. Integer fringilla vulputate justo, a laoreet justo.

Our Blog

Our Latest News