Neovici/cosmoz-omnitable

View on GitHub
demo/table-demo-helper.js

Summary

Maintainability
A
3 hrs
Test Coverage
A
100%
const leftPad = (stro, leno, cho) => {
        let str = String(stro),
            i = -1;
        const ch = !cho && cho !== 0 ? ' ' : cho,
            len = leno - str.length;

        while (++i < len) {
            str = ch + str;
        }
        return str;
    },
    getRandomInt = (min, max) =>
        Math.floor(Math.random() * (max - min + 1)) + min,
    getRandomDateJSON = () =>
        '2015-' +
        leftPad(getRandomInt(1, 12), 2, '0') +
        '-' +
        leftPad(getRandomInt(1, 28), 2, '0'),
    getRandomDate = () => {
        // return some equal dates to test grouping
        const i = getRandomInt(0, 20);
        if (i === 1) {
            return new Date(2015, 3, 2, 14, 26, 10, 299);
        }
        if (i === 2) {
            return new Date(2016, 4, 2, 10, 9, 10, 444);
        }
        if (i === 3) {
            return new Date(2016, 4, 2, 10, 9, 10, 443);
        }
        if (i === 4) {
            return new Date(2016, 4, 2, 10, 9, 10, 442);
        }
        return new Date(
            getRandomInt(2014, 2017),
            getRandomInt(1, 12),
            getRandomInt(1, 28),
            getRandomInt(0, 23),
            getRandomInt(0, 59),
            getRandomInt(0, 59),
            getRandomInt(0, 999),
        );
    };

/* eslint-disable-next-line max-lines-per-function */
export const generateTableDemoData = (min, max, maxRandomString) => {
    const groupsCount = getRandomInt(min, max),
        data = [],
        descriptions = [
            'Lorem ipsum dolor sit amet',
            'Nunc tristique',
            'Curabitur vestibulum',
            'Cras laoreet',
            'Himenaeos',
            'maximus diam purus at mauris',
        ],
        currencies = ['SEK', 'USD', 'EUR', 'AUD'];

    let n = 0;

    for (let i = 0; i < groupsCount; i += 1) {
        const group = 'Group ' + i,
            itemsCount = i * 2 + 1;
        for (let j = 0; j < itemsCount; j += 1) {
            const listValue = [],
                objectListValue = [],
                listValueCount = n % 10;
            for (let k = 0; k < listValueCount; k += 1) {
                listValue.push('Item ' + k);
                objectListValue.push({
                    name: 'Item ' + k,
                    value: 'item-value-' + k,
                });
            }
            data.push({
                id: n,
                name: group + ' item ' + j,
                value: getRandomInt(0, 10000),
                bool: getRandomInt(0, 100) > 50,
                object: {
                    value: getRandomInt(0, 10000),
                    label: 'Random string ' + getRandomInt(1, maxRandomString),
                },
                sub: {
                    subProp: descriptions[n % descriptions.length],
                },
                randomString: 'Random string ' + getRandomInt(1, maxRandomString),
                randomString2: 'Random string 2 ' + getRandomInt(1, maxRandomString),
                randomString3: 'Random string 3 ' + getRandomInt(1, maxRandomString),
                randomString4: 'Random string 4 ' + getRandomInt(1, maxRandomString),
                date: getRandomDate(),
                dateJSON: getRandomDateJSON(),
                amount: {
                    amount: getRandomInt(10, 100),
                    currency: currencies[n % currencies.length],
                },
                group,
                list: listValue,
                objectList: objectListValue,
            });
            n += 1;
        }
    }
    return data;
};