coreui-free-react-admin-template
396 строк · 11.9 Кб
1import React, { useEffect, useRef } from 'react'2import PropTypes from 'prop-types'3
4import {5CRow,6CCol,7CDropdown,8CDropdownMenu,9CDropdownItem,10CDropdownToggle,11CWidgetStatsA,12} from '@coreui/react'13import { getStyle } from '@coreui/utils'14import { CChartBar, CChartLine } from '@coreui/react-chartjs'15import CIcon from '@coreui/icons-react'16import { cilArrowBottom, cilArrowTop, cilOptions } from '@coreui/icons'17
18const WidgetsDropdown = (props) => {19const widgetChartRef1 = useRef(null)20const widgetChartRef2 = useRef(null)21
22useEffect(() => {23document.documentElement.addEventListener('ColorSchemeChange', () => {24if (widgetChartRef1.current) {25setTimeout(() => {26widgetChartRef1.current.data.datasets[0].pointBackgroundColor = getStyle('--cui-primary')27widgetChartRef1.current.update()28})29}30
31if (widgetChartRef2.current) {32setTimeout(() => {33widgetChartRef2.current.data.datasets[0].pointBackgroundColor = getStyle('--cui-info')34widgetChartRef2.current.update()35})36}37})38}, [widgetChartRef1, widgetChartRef2])39
40return (41<CRow className={props.className} xs={{ gutter: 4 }}>42<CCol sm={6} xl={4} xxl={3}>43<CWidgetStatsA44color="primary"45value={46<>4726K{' '}48<span className="fs-6 fw-normal">49(-12.4% <CIcon icon={cilArrowBottom} />)50</span>51</>52}53title="Users"54action={55<CDropdown alignment="end">56<CDropdownToggle color="transparent" caret={false} className="text-white p-0">57<CIcon icon={cilOptions} />58</CDropdownToggle>59<CDropdownMenu>60<CDropdownItem>Action</CDropdownItem>61<CDropdownItem>Another action</CDropdownItem>62<CDropdownItem>Something else here...</CDropdownItem>63<CDropdownItem disabled>Disabled action</CDropdownItem>64</CDropdownMenu>65</CDropdown>66}67chart={68<CChartLine69ref={widgetChartRef1}70className="mt-3 mx-3"71style={{ height: '70px' }}72data={{73labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],74datasets: [75{76label: 'My First dataset',77backgroundColor: 'transparent',78borderColor: 'rgba(255,255,255,.55)',79pointBackgroundColor: getStyle('--cui-primary'),80data: [65, 59, 84, 84, 51, 55, 40],81},82],83}}84options={{85plugins: {86legend: {87display: false,88},89},90maintainAspectRatio: false,91scales: {92x: {93border: {94display: false,95},96grid: {97display: false,98drawBorder: false,99},100ticks: {101display: false,102},103},104y: {105min: 30,106max: 89,107display: false,108grid: {109display: false,110},111ticks: {112display: false,113},114},115},116elements: {117line: {118borderWidth: 1,119tension: 0.4,120},121point: {122radius: 4,123hitRadius: 10,124hoverRadius: 4,125},126},127}}128/>129}130/>131</CCol>132<CCol sm={6} xl={4} xxl={3}>133<CWidgetStatsA134color="info"135value={136<>137$6.200{' '}138<span className="fs-6 fw-normal">139(40.9% <CIcon icon={cilArrowTop} />)140</span>141</>142}143title="Income"144action={145<CDropdown alignment="end">146<CDropdownToggle color="transparent" caret={false} className="text-white p-0">147<CIcon icon={cilOptions} />148</CDropdownToggle>149<CDropdownMenu>150<CDropdownItem>Action</CDropdownItem>151<CDropdownItem>Another action</CDropdownItem>152<CDropdownItem>Something else here...</CDropdownItem>153<CDropdownItem disabled>Disabled action</CDropdownItem>154</CDropdownMenu>155</CDropdown>156}157chart={158<CChartLine159ref={widgetChartRef2}160className="mt-3 mx-3"161style={{ height: '70px' }}162data={{163labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],164datasets: [165{166label: 'My First dataset',167backgroundColor: 'transparent',168borderColor: 'rgba(255,255,255,.55)',169pointBackgroundColor: getStyle('--cui-info'),170data: [1, 18, 9, 17, 34, 22, 11],171},172],173}}174options={{175plugins: {176legend: {177display: false,178},179},180maintainAspectRatio: false,181scales: {182x: {183border: {184display: false,185},186grid: {187display: false,188drawBorder: false,189},190ticks: {191display: false,192},193},194y: {195min: -9,196max: 39,197display: false,198grid: {199display: false,200},201ticks: {202display: false,203},204},205},206elements: {207line: {208borderWidth: 1,209},210point: {211radius: 4,212hitRadius: 10,213hoverRadius: 4,214},215},216}}217/>218}219/>220</CCol>221<CCol sm={6} xl={4} xxl={3}>222<CWidgetStatsA223color="warning"224value={225<>2262.49%{' '}227<span className="fs-6 fw-normal">228(84.7% <CIcon icon={cilArrowTop} />)229</span>230</>231}232title="Conversion Rate"233action={234<CDropdown alignment="end">235<CDropdownToggle color="transparent" caret={false} className="text-white p-0">236<CIcon icon={cilOptions} />237</CDropdownToggle>238<CDropdownMenu>239<CDropdownItem>Action</CDropdownItem>240<CDropdownItem>Another action</CDropdownItem>241<CDropdownItem>Something else here...</CDropdownItem>242<CDropdownItem disabled>Disabled action</CDropdownItem>243</CDropdownMenu>244</CDropdown>245}246chart={247<CChartLine248className="mt-3"249style={{ height: '70px' }}250data={{251labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],252datasets: [253{254label: 'My First dataset',255backgroundColor: 'rgba(255,255,255,.2)',256borderColor: 'rgba(255,255,255,.55)',257data: [78, 81, 80, 45, 34, 12, 40],258fill: true,259},260],261}}262options={{263plugins: {264legend: {265display: false,266},267},268maintainAspectRatio: false,269scales: {270x: {271display: false,272},273y: {274display: false,275},276},277elements: {278line: {279borderWidth: 2,280tension: 0.4,281},282point: {283radius: 0,284hitRadius: 10,285hoverRadius: 4,286},287},288}}289/>290}291/>292</CCol>293<CCol sm={6} xl={4} xxl={3}>294<CWidgetStatsA295color="danger"296value={297<>29844K{' '}299<span className="fs-6 fw-normal">300(-23.6% <CIcon icon={cilArrowBottom} />)301</span>302</>303}304title="Sessions"305action={306<CDropdown alignment="end">307<CDropdownToggle color="transparent" caret={false} className="text-white p-0">308<CIcon icon={cilOptions} />309</CDropdownToggle>310<CDropdownMenu>311<CDropdownItem>Action</CDropdownItem>312<CDropdownItem>Another action</CDropdownItem>313<CDropdownItem>Something else here...</CDropdownItem>314<CDropdownItem disabled>Disabled action</CDropdownItem>315</CDropdownMenu>316</CDropdown>317}318chart={319<CChartBar320className="mt-3 mx-3"321style={{ height: '70px' }}322data={{323labels: [324'January',325'February',326'March',327'April',328'May',329'June',330'July',331'August',332'September',333'October',334'November',335'December',336'January',337'February',338'March',339'April',340],341datasets: [342{343label: 'My First dataset',344backgroundColor: 'rgba(255,255,255,.2)',345borderColor: 'rgba(255,255,255,.55)',346data: [78, 81, 80, 45, 34, 12, 40, 85, 65, 23, 12, 98, 34, 84, 67, 82],347barPercentage: 0.6,348},349],350}}351options={{352maintainAspectRatio: false,353plugins: {354legend: {355display: false,356},357},358scales: {359x: {360grid: {361display: false,362drawTicks: false,363},364ticks: {365display: false,366},367},368y: {369border: {370display: false,371},372grid: {373display: false,374drawBorder: false,375drawTicks: false,376},377ticks: {378display: false,379},380},381},382}}383/>384}385/>386</CCol>387</CRow>388)389}
390
391WidgetsDropdown.propTypes = {392className: PropTypes.string,393withCharts: PropTypes.bool,394}
395
396export default WidgetsDropdown397