{"version":3,"file":"components/Card/diff.mjs","sources":["../../../src/components/Card/diff.tsx"],"sourcesContent":["import { Client } from '@rsdoctor/types';\nimport { Segmented, Space, Tooltip, Typography } from 'antd';\nimport { Graph } from '@rsdoctor/utils/common';\nimport React, { useState } from 'react';\nimport { formatSize } from '../../utils';\nimport { Color } from '../../constants';\nimport { StatisticCard } from './statistic';\nexport { StatisticCard } from './statistic';\nexport interface DiffCardProps extends Pick<DiffCardContentProps, 'formatter'> {\n  titles: Array<string> | [string | React.ReactNode];\n  datas: Array<DiffCardContentProps['data']>;\n  showPercentInTitle?: boolean;\n}\n\nexport interface DiffCardContentProps {\n  data: Client.RsdoctorClientAssetsDiffItem;\n  formatter?(\n    v: number,\n    target: 'baseline' | 'current',\n  ): number | string | React.ReactNode;\n}\n\nexport interface PercentProps {\n  percent: number;\n  state: Client.RsdoctorClientDiffState;\n  fontSize?: React.CSSProperties['fontSize'];\n}\n\nexport const SizePercent: React.FC<\n  {\n    baseline: number;\n    current: number;\n  } & Omit<PercentProps, 'percent' | 'state'>\n> = ({ baseline, current, ...rest }) => {\n  const diff = Graph.diffSize(baseline, current);\n  return <Percent {...rest} {...diff} />;\n};\n\nexport const Percent: React.FC<PercentProps> = ({\n  percent,\n  state,\n  fontSize = 14,\n}) => {\n  const _percent = +percent.toFixed(2);\n\n  if (_percent > 0) {\n    const percentText = `${_percent}`;\n\n    if (state === Client.RsdoctorClientDiffState.Up) {\n      return (\n        <Typography.Text strong style={{ fontSize, color: Color.Red }}>\n          +{percentText}%\n        </Typography.Text>\n      );\n    }\n\n    if (state === Client.RsdoctorClientDiffState.Down) {\n      return (\n        <Typography.Text strong style={{ fontSize, color: Color.Green }}>\n          -{percentText}%\n        </Typography.Text>\n      );\n    }\n  }\n\n  return null;\n};\n\nexport const DiffCardContent: React.FC<DiffCardContentProps> = ({\n  data,\n  formatter,\n}) => {\n  const { percent, state, size } = data;\n  const { baseline, current } = size;\n\n  const bSize = formatter\n    ? formatter(baseline, 'baseline')\n    : formatSize(baseline);\n  const cSize = formatter ? formatter(current, 'current') : formatSize(current);\n\n  return (\n    <Space align=\"start\">\n      <Space direction=\"vertical\" style={{ textAlign: 'left' }}>\n        <Space>\n          <Typography.Text style={{ fontSize: 10, color: 'inherit' }} keyboard>\n            Current\n          </Typography.Text>\n          <Tooltip\n            title={\n              typeof cSize === 'number' || typeof cSize === 'string'\n                ? `Value of Current is ${cSize}`\n                : undefined\n            }\n          >\n            <Typography.Text style={{ fontSize: 16, color: 'inherit' }} strong>\n              {cSize}\n            </Typography.Text>\n          </Tooltip>\n          <Percent percent={percent} state={state} />\n        </Space>\n        <Space>\n          <Typography.Text style={{ fontSize: 10, color: 'inherit' }} keyboard>\n            Baseline\n          </Typography.Text>\n          <Tooltip\n            title={\n              typeof bSize === 'number' || typeof bSize === 'string'\n                ? `Value of Baseline is ${bSize}`\n                : undefined\n            }\n          >\n            <Typography.Text style={{ fontSize: 14 }} type=\"secondary\">\n              {bSize}\n            </Typography.Text>\n          </Tooltip>\n        </Space>\n      </Space>\n    </Space>\n  );\n};\n\nexport const DiffCard: React.FC<DiffCardProps> = ({\n  titles,\n  datas,\n  formatter,\n  showPercentInTitle,\n}) => {\n  const [idx, setIdx] = useState(0);\n\n  return (\n    <StatisticCard\n      title={\n        titles.length > 1 ? (\n          <Segmented\n            defaultValue={titles[idx] as string}\n            options={\n              showPercentInTitle\n                ? titles.map((e, i) => {\n                    const data = datas[i];\n\n                    return {\n                      label: (\n                        <Space>\n                          <Typography.Text>{e}</Typography.Text>\n                          <Percent percent={data.percent} state={data.state} />\n                        </Space>\n                      ),\n                      value: e as string,\n                    };\n                  })\n                : (titles as string[])\n            }\n            onChange={(e) => {\n              setIdx(titles.indexOf(e as string));\n            }}\n            size=\"small\"\n            style={{ transition: 'transform 0.3s ease' }}\n            value={(titles[idx] || titles[0]) as string}\n          />\n        ) : (\n          titles[idx]\n        )\n      }\n      value={<DiffCardContent data={datas[idx]} formatter={formatter} />}\n      statisticProps={{\n        style: { textAlign: 'left' },\n      }}\n    />\n  );\n};\n"],"names":["SizePercent","baseline","current","rest","diff","Graph","Percent","percent","state","fontSize","_percent","percentText","Client","Typography","Color","DiffCardContent","data","formatter","size","bSize","formatSize","cSize","Space","Tooltip","undefined","DiffCard","titles","datas","showPercentInTitle","idx","setIdx","useState","StatisticCard","Segmented","e","i"],"mappings":"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"}