MOON
Server: Apache
System: Linux vps.erhabenn.com.br 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64
User: machen (1008)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: /disk001/machen/.trash/a1b2c3d4/static/js/0.71c8f52b.chunk.js.map
{"version":3,"sources":["components/Dashboards/Widgets/taskDoneBar.jsx"],"names":["TaskDoneBar","props","db","reduxStore","getState","_useState","useState","index","showQuantity","number","finalIndex","dataStructure","_useState2","_slicedToArray","filter","setFilter","_useState3","_useState4","data","setData","keysRef","useRef","filterRef","hashs","window","location","hash","split","replace","usersUsed","useEffect","tags","current","_toConsumableArray","key","forEach","item","concat","label","timeTasks","updateTaskInfo","dateCard","_timeTasks$monthKey","_timeTasks$monthKey2","monthKey","date","format","_objectSpread","_defineProperty","total","month","includes","planCards","Object","keys","planCard","_db$cards$planCard$co","moment","cards","completed_at","low","_tags","i","startDate","startOf","add","endDate","endOf","isBetween","_filter$tags","length","values","load","console","log","React","createElement","className","style","width","height","alignSelf","borderRadius","backgroundColor","display","flexFlow","overflow","Header","handleSetSelected","value","handleSetFilter","id","filterConfig","filterSelect","filterItems","filterData","tittle","translate","icon","styles","datafilter","indicators","handleRemoveObject","edit","handleSetoption","borderBottom","position","flex","fontSize","Icon","onClick","zIndex","top","left","right","fontWeight","ResponsiveBar","layers","bars","yScale","Fragment","fill","stroke","pointerEvents","bar","_bar$data$data","map","_bar$data$data2","cx","x","Math","trunc","cy","r","colors","indexBy","margin","bottom","padding","valueScale","type","indexScale","round","enableLabel","max","minValue","theme","color","background","axis","match","borderColor","from","modifiers","axisTop","axisRight","axisBottom","preview","tickSize","tickPadding","tickRotation","legendPosition","legendOffset","axisLeft","role","justifyContent","maxHeight","Legend","legend","status","a"],"mappings":"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","file":"static/js/0.71c8f52b.chunk.js","sourcesContent":["import React, { useEffect, useState, useRef, Fragment } from 'react'\n//COMPONENTS\nimport Legend from '../Legend';\nimport { ResponsiveBar } from '@nivo/bar'\nimport Header from 'components/Dashboards/Header'\nimport './Loader.css';\n\n//REDUX\nimport reduxStore from \"store/\"\nimport moment from \"moment-timezone\"\nimport { translate } from 'functions';\nimport Icon from 'components/Icon';\n\n\n\n//https://codesandbox.io/s/m4ro13jjn8?file=/src/index.js\n\n\nconst TaskDoneBar = (props) => {\n\n    const { db } = reduxStore.getState()\n    const [filter, setFilter] = useState({\n        index: 0,\n        showQuantity: 12,\n        number: 12,\n        finalIndex: 12,\n        dataStructure: 'month',\n    })\n    const [data, setData] = useState({})\n    const keysRef = useRef(['total'])\n    const filterRef = useRef([])\n\n\n    let hashs = window.location.hash.split(\"/\")\n    hashs[0] = hashs[0].replace('#', '')\n    let usersUsed = {}\n\n    // number: filter?.users ? filter?.users?.length : 10,\n\n    useEffect(() => {\n        if (props.filter) {\n            setFilter(props.filter)\n        }\n    }, [props.filter]);\n\n    useEffect(() => {\n        if (filter.tags) {\n            keysRef.current = [...keysRef.current.filter(key => key !== 'total')];\n            filter.tags.forEach((item) => {\n                filterRef.current = [...filterRef.current, item.label];\n            })\n        }\n    }, [filter]);\n\n\n    useEffect(() => {\n        let timeTasks = {};\n\n        const updateTaskInfo = (dateCard, label) => {\n            const monthKey = dateCard.date.format('MMMM');\n            timeTasks = {\n                ...timeTasks,\n                [monthKey]: {\n                    ...timeTasks[monthKey] || {},\n                    total: (timeTasks[monthKey]?.total || 0) + 1,\n                    month: dateCard.date.format('MMMM'),\n                    [label]: (timeTasks[monthKey]?.[label] || 0) + 1,\n                }\n            };\n\n            if (!keysRef.current.includes(label)) {\n                keysRef.current = [...keysRef.current, label];\n            }\n        };\n\n        if (props.planCards) {\n            Object.keys(props.planCards).forEach(planCard => {\n                const dateCard = {\n                    date: moment(db.cards[planCard].completed_at?.low * 1000),\n                    tags: db.cards[planCard]._tags\n                };\n                const structure = filter.dataStructure;\n\n                if (structure === 'month') {\n                    for (let i = 0; i < 12; i++) {\n                        const startDate = moment().startOf('year').add(i, 'month');\n                        const endDate = moment(startDate).endOf('month');\n\n                        if (dateCard.date.isBetween(startDate, endDate, null, '[]')) {\n                            const monthKey = dateCard.date.format('MMMM');\n                            timeTasks = {\n                                ...timeTasks,\n                                [monthKey]: {\n                                    ...timeTasks[monthKey] || {},\n                                    \"total\": timeTasks && timeTasks[monthKey] && timeTasks[monthKey][\"total\"] ? timeTasks[monthKey][\"total\"] + 1 : 1,\n                                    \"month\": monthKey,\n                                }\n                            }\n                            if (filter?.tags?.length > 0) {\n                                dateCard.tags\n                                    .filter(item => item.label && filterRef.current.includes(item.label))\n                                    .forEach(item => {\n                                        updateTaskInfo(dateCard, item.label);\n                                    });\n                            } else {\n                                keysRef.current = [\"total\"];\n                            }\n                        }\n                    }\n                }\n            });\n\n            const data = Object.values(timeTasks);\n            if (data !== usersUsed) {\n                setData(data);\n            }\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [props.planCards, props.load, filter]);\n\n    // const barColor = \"#0095ff\";\n    const lineColor = \"rgba(200, 30, 15, 1)\";\n    // const areaColor = \"#0095ff\";\n\n    const Line = (props) => {\n        const { bars, yScale } = props\n        return (\n            <Fragment>\n                <path\n                    fill=\"none\"\n                    stroke={lineColor}\n                    style={{ pointerEvents: \"none\" }}\n                />\n                {bars\n                    .filter(bar => bar.data.data?.[\"RELEASE\"])\n                    .map(bar => {\n                        return <circle\n                            key={bar.key}\n                            cx={props.bars[2].x + Math.trunc(bar.width) / 2}\n                            cy={yScale(bar.data.data?.[\"RELEASE\"])}\n                            r={4}\n                            fill=\"white\"\n                            stroke={lineColor}\n                            style={{ pointerEvents: \"none\" }}\n                        />\n                    }\n                    )}\n            </Fragment>\n        );\n    };\n\n    console.log(filter)\n\n    return (\n        <div className='box' style={{ width: '100%', height: '100%', alignSelf: 'center', borderRadius: '5px', backgroundColor: 'transparent', display: 'flex', flexFlow: 'column', overflow: 'visible' }}>\n            <Header\n                handleSetSelected={(value) => {\n                    setFilter({ ...filter, ...value })\n                    props.handleSetFilter({ ...filter, ...value, id: props.id })\n                }}\n                filterConfig={{ filterSelect: Object.keys(data).length > 0 && Object.values(data).length, filterItems: ['users', 'tags'], filterData: filter }}\n                tittle={translate(\"$__\" + props.tittle)}\n                icon={props.icon}\n                styles={props.styles}\n                datafilter={true}\n                indicators={filter ? filter : null}\n                handleRemoveObject={() => props.handleRemoveObject(props.id)}\n                edit={props.edit}\n                handleSetoption={(value) => {\n                    setFilter({ ...value })\n                    props.handleSetFilter({ ...filter, ...value, id: props.id })\n                }}\n            />\n            <div style={{ borderBottom: '1px solid #D3D3D3', width: '100%' }}></div>\n            <div style={{}} >\n            </div>\n            <div style={{ position: 'relative', flex: '1 1 auto', fontSize: '16px' }}>\n                {(filter.index !== 0) &&\n                    <Icon\n                        onClick={() =>\n                            setFilter(\n                                {\n                                    ...filter,\n                                    index: filter.index - 1,\n                                    finalIndex: filter.finalIndex - 1\n                                })\n                        }\n                        style={\n                            {\n                                position: 'absolute',\n                                zIndex: '999',\n                                top: '48%',\n                                left: '10px'\n                            }}>\n                        arrow_back_ios\n                    </Icon>\n                }\n                {(Object.keys(data).length !== filter.index + filter.number && Object.keys(data).length > filter.showQuantity) && <Icon onClick={() => setFilter({ ...filter, index: filter.index + 1, finalIndex: filter.finalIndex + 1 })} style={{ position: 'absolute', zIndex: '999', top: '48%', right: '10px' }}>arrow_forward_ios</Icon>}\n                <div style={{ width: '100%', height: '100%', position: 'absolute', fontWeight: 'lighter', backgroundColor: '#f5f5f5' }}>\n                    {(Object.keys(data).length > 0 && !props.load) ?\n                        <div className='component' style={{ width: '100%', height: '100%' }}>\n                            <ResponsiveBar\n                                data={data}\n                                layers={[\"grid\", \"axes\", \"bars\", Line, \"markers\", \"legends\"]}\n                                keys={keysRef.current} // data\n                                colors={[\"#011E41\", \"#5A7F71\", \"#929497\", \"#EBA900\", \"pink\"]}\n                                indexBy={\"month\"} //data\n                                margin={{ top: 40, right: 20, bottom: 30, left: 40 }}\n                                padding={0.3}\n                                valueScale={{ type: 'linear' }}\n                                indexScale={{ type: 'band', round: false }}\n                                enableLabel={false}\n                                yScale={{\n                                    max: 100,\n                                }}\n                                minValue={0}\n                                theme={{\n                                    fontSize: '14px',\n                                    color: 'white',\n                                    background: '#f5f5f5',\n                                    axis: {\n                                        \"ticks\": {\n                                            \"text\": {\n                                                fill: 'rgba(0, 0, 0, 0.50)',\n                                                \"fontSize\": 14,\n                                                //cor dos numeros\n                                            },\n                                        }\n                                    },\n                                }}\n\n                                fill={[\n                                    {\n                                        match: {\n                                            id: 'fries'\n                                        },\n                                        id: 'dots'\n                                    },\n                                    {\n                                        match: {\n                                            id: 'sandwich'\n                                        },\n                                        id: 'lines'\n                                    }\n                                ]}\n                                borderColor={{\n                                    from: 'color',\n                                    modifiers: [\n                                        [\n                                            'darker',\n                                            1.6\n                                        ]\n                                    ]\n                                }}\n                                axisTop={null}\n                                axisRight={null}\n                                axisBottom={!props.preview ? {\n                                    tickSize: 5,\n                                    tickPadding: 5,\n                                    tickRotation: 0,\n                                    legendPosition: 'middle',\n                                    legendOffset: 32,\n                                } : null}\n                                axisLeft={!props.preview ? {\n                                    tickSize: 5,\n                                    tickPadding: 5,\n                                    tickRotation: 0,\n                                    legendPosition: 'middle',\n                                    legendOffset: -40\n                                } : null}\n                                role=\"application\"\n                            /> </div> : <div style={{ width: '100%', height: '100%', display: 'flex', justifyContent: 'center' }}>\n                            <div style={{ alignSelf: 'center' }}>  <div className=\"loader\"></div></div>\n                        </div>}\n                </div>\n            </div>\n            <div style={{ height: '15%', maxHeight: '60px', display: 'flex', backgroundColor: 'white' }}>\n                <Legend\n                    legend={[...db.status.map((a, i) => {\n                        return {\n                            key: i,\n                            color: a.color,\n                            label: a.label\n                        }\n                    })]} />\n            </div>\n        </div >\n    )\n}\n\nexport default TaskDoneBar\n"],"sourceRoot":""}