All Downloads are FREE. Search and download functionalities are using the official Maven repository.

components.controls.Slider.utils.jsx Maven / Gradle / Ivy

There is a newer version: 7.28.3
Show newest version
import React from 'react'
import omit from 'lodash/omit'
import pick from 'lodash/pick'
import isEmpty from 'lodash/isEmpty'
import forEach from 'lodash/forEach'
import isString from 'lodash/isString'
import isArray from 'lodash/isArray'
import isNaN from 'lodash/isNaN'
import map from 'lodash/map'
import merge from 'lodash/merge'

export const parseToFloat = value => (!isNaN(parseFloat(value)) ? parseFloat(value) : undefined)

export const parseToInt = value => (!isNaN(parseInt(value, 10)) ? parseInt(value, 10) : undefined)

const convertStrToFloatOrInt = (value) => {
    if (isString(value)) {
        if (value.includes('.')) {
            return parseToFloat(value)
        }

        return parseToInt(value)
    }

    return value
}

/**
 * HOC для преобразования заданных пропсов из строки в число
 * @param convertProps - список свойств
 * @return {function}
 */
export const stringConverter = (convertProps = []) => WrapperComponent => ({
    // eslint-disable-next-line react/prop-types
    stringMode,
    ...rest
}) => {
    const convertPropsObj = pick(rest, stringMode ? convertProps : [])

    const resultConverted = {}

    if (!isEmpty(convertPropsObj)) {
        forEach(convertPropsObj, (value, key) => {
            if (isString(value)) {
                resultConverted[key] = convertStrToFloatOrInt(value)
            } else if (isArray(value)) {
                resultConverted[key] = map(value, convertStrToFloatOrInt)
            } else {
                resultConverted[key] = value
            }
        })
    }

    return (
        
    )
}

/**
 * Кастомный стиль если vertical=true
 * @param vertical - установлен ли вертикальный режим
 * @param style - стили для мерджа
 * @return {*}
 */
export const prepareStyle = (vertical = false, style = {}) => {
    const fromVerticalStyle = {
        float: 'left',
        height: 400,
        marginLeft: 50,
    }

    if (vertical) {
        return merge(fromVerticalStyle, style)
    }

    return style
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy