/* Need a function, which creates string of numbers * @param input: nubmer * @return number[] */ interface IGetArrayOfNumber { number: number | string numberformat: boolean } function getArrayOfSimpleNumber (input: number): { isNegative: boolean, numbers: string[] } { const string = input.toString() const isNegative = string.startsWith('-') return { isNegative, numbers: isNegative ? string.split('').slice(1) : string.split('') } } function getArrayOfNumber ({ number, numberformat }: IGetArrayOfNumber): { isNegative: boolean, numbers: string[] } { if (!numberformat) return getArrayOfSimpleNumber(number as number) const n = typeof number === 'string' ? Number(number) : number const isNegative = n < 0 const localeFormatted = (isNegative ? '-' : '') + Math.abs(n).toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) return { isNegative, numbers: localeFormatted.split('') } } const getLength = ({ prevValue, value, isIncreasing, isLevelChanging }) => { if ( ((prevValue - value < 0 && isIncreasing) || prevValue - value > 0) && !isLevelChanging ) { return Math.abs(prevValue - value) } else { return Math.abs( (isIncreasing ? prevValue : prevValue + 10) - (isIncreasing ? value + 10 : value) ) } } // 1, 3, true => [1, 2, 3] ✅ // 1, 3, true, true => [1, 2, 3, 4, 5, ..., 3] (1->13) ✅ // 1, 3, false => [1, 0, 9, 8, 7, 6, 5, 4, 3] (11->3) ✅ // 5, 2, false => [4, 3, 2] ✅ // 5, 2, false, true => [4, 3, 2, 1, 0, 9, 8, ..., 2] ✅ // 3, 0, true, true => [4, 5, 6, 7, 8, 9, 0] (3->10) ✅ // 2, 8, false => [1, 0, 9, 8] (12->8) ✅ // 9, 9 => [9] function getDiskNumbers ( prevValue, value, isIncreasing, isLevelChanging = false ) { if (prevValue === value) { return [value] } const length = getLength({ prevValue, value, isIncreasing, isLevelChanging }) const range = Array(length) .fill('') .map((_, i) => { if (isIncreasing) { const val = prevValue + 1 + i return val >= 10 ? Math.abs(10 - val) : val } const val = prevValue - 1 - i return val < 0 ? Math.abs(-val - 10) : val }) const returnValue = [prevValue, ...range] return isIncreasing ? returnValue : returnValue.reverse() } export default { getArrayOfNumber, getDiskNumbers }