{"version":3,"file":"components/Overall/bundle.mjs","sources":["../../../src/components/Overall/bundle.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport {\n  Descriptions,\n  DescriptionsProps,\n  Button,\n  Tree,\n  Tag,\n  Segmented,\n} from 'antd';\nimport { FolderOpenTwoTone, RightOutlined } from '@ant-design/icons';\nimport { useNavigate } from 'react-router-dom';\n\nimport { getFileCom } from '../FileTree';\nimport { formatSize, useI18n } from '../../utils';\nimport { TextDrawer } from '../TextDrawer';\nimport { Card } from '../Card';\nimport { ServerAPIProvider } from '../Manifest';\nimport listStyles from './list.module.scss';\nimport cardStyles from './card.module.scss';\nimport { DataSummary } from './DataSummary';\n\nimport { Client, SDK } from '@rsdoctor/types';\nimport type { TreeDataNode } from 'antd';\n\nimport styles from './bundle.module.scss';\n\ntype viewType = 'files' | 'size';\n\nconst { DirectoryTree } = Tree;\n\nexport const getFiles = (\n  data: Client.RsdoctorClientAssetsSummary['all']['total'],\n) => {\n  let files: Array<{\n    fileName: string;\n    defaultDir: string;\n    size: number;\n    initial: boolean;\n  }> = [];\n  if (data.files.length) {\n    files = data.files.map((fileMessage) => {\n      const filePath = fileMessage.path;\n      const pathArray = filePath.split('/');\n      const fileName = pathArray.pop()!;\n      const defaultDir = pathArray.join('/') || 'output';\n\n      return {\n        fileName,\n        defaultDir,\n        size: fileMessage.size,\n        initial: fileMessage.initial,\n      };\n    });\n  }\n\n  const treeData: TreeDataNode[] = [];\n  files.forEach((file) => {\n    const target = treeData.find((data) => data.title === file.defaultDir);\n    const parent: TreeDataNode = target || {\n      title: file.defaultDir,\n      key: file.defaultDir,\n      icon: <FolderOpenTwoTone />,\n      children: [],\n    };\n    const icon = getFileCom(file.fileName);\n    if (!target) {\n      treeData.push(parent);\n    }\n    parent.children!.push({\n      title: (\n        <div className={styles.treeContainer}>\n          <div className={styles.treeTitle}>{file.fileName}</div>\n          <div className={styles.line} />\n          <Tag className={`${styles.tag} ${styles.sizeTag}`}>\n            {formatSize(file.size)}\n          </Tag>\n          {file.initial ? (\n            <Tag className={styles.tag} color=\"cyan\">\n              initial\n            </Tag>\n          ) : null}\n        </div>\n      ),\n      key: file.fileName,\n      isLeaf: true,\n      icon,\n    });\n  });\n\n  return {\n    treeData,\n  };\n};\n\nexport const getFilesWithDrawer = (\n  data: Client.RsdoctorClientAssetsSummary['all']['total'],\n): React.JSX.Element => {\n  const { treeData } = getFiles(data);\n\n  return (\n    <>\n      {data.files.length ? (\n        <TextDrawer\n          buttonProps={{\n            size: 'small',\n          }}\n          buttonStyle={{\n            fontSize: 'inherit',\n          }}\n          drawerProps={{\n            title: 'Files',\n          }}\n          text={<span>{data.count}</span>}\n        >\n          <DirectoryTree\n            defaultExpandAll\n            selectable={false}\n            treeData={treeData}\n            rootStyle={{\n              minHeight: '800px',\n              border: '1px solid rgba(235, 237, 241)',\n            }}\n          />\n        </TextDrawer>\n      ) : (\n        data.count\n      )}\n    </>\n  );\n};\n\nconst BundleDescriptions = ({\n  res,\n  view,\n}: {\n  res: Client.RsdoctorClientAssetsSummary;\n  view: viewType;\n}) => {\n  const fileItems: DescriptionsProps['items'] = [\n    {\n      key: 'js-files-count',\n      label: 'JS files',\n      children: (\n        <span className={`${styles.description} ${styles.column}`}>\n          {getFilesWithDrawer(res.js.total)}\n        </span>\n      ),\n    },\n    {\n      key: 'css-files-count',\n      label: 'CSS files',\n      children: (\n        <span className={`${styles.description} ${styles.column}`}>\n          {getFilesWithDrawer(res.css.total)}\n        </span>\n      ),\n    },\n    {\n      key: 'font-files-count',\n      label: 'Font files',\n      children: (\n        <span className={`${styles.description} ${styles.column}`}>\n          {getFilesWithDrawer(res.fonts.total)}\n        </span>\n      ),\n    },\n    {\n      key: 'html-files-count',\n      label: 'HTML files',\n      children: (\n        <span className={styles.description}>\n          {getFilesWithDrawer(res.html.total)}\n        </span>\n      ),\n    },\n    {\n      key: 'image-files-count',\n      label: 'Image files',\n      children: (\n        <span className={styles.description}>\n          {getFilesWithDrawer(res.imgs.total)}\n        </span>\n      ),\n    },\n    {\n      key: 'media-files-count',\n      label: 'Media files',\n      children: (\n        <span className={styles.description}>\n          {getFilesWithDrawer(res.media.total)}\n        </span>\n      ),\n    },\n  ];\n\n  const [jsSize, jsSizeUnit] = formatSize(res.js.total.size).split(' ');\n  const [cssSize, cssSizeUnit] = formatSize(res.css.total.size).split(' ');\n  const [fontSize, fontSizeUnit] = formatSize(res.fonts.total.size).split(' ');\n  const [htmlSize, htmlSizeUnit] = formatSize(res.html.total.size).split(' ');\n  const [imgSize, imgSizeUnit] = formatSize(res.imgs.total.size).split(' ');\n  const [mediaSize, mediaSizeUnit] = formatSize(res.media.total.size).split(\n    ' ',\n  );\n\n  const sizeItems: DescriptionsProps['items'] = [\n    {\n      key: 'js-files-size',\n      label: <span className={styles.label}>JS size</span>,\n      children: (\n        <div className={styles.column}>\n          <span className={styles.description}>{jsSize}</span>\n          <span className={styles.unit}>{jsSizeUnit}</span>\n        </div>\n      ),\n    },\n    {\n      key: 'css-files-size',\n      label: <span className={styles.label}>CSS size</span>,\n      children: (\n        <div className={styles.column}>\n          <span className={styles.description}>{cssSize}</span>\n          <span className={styles.unit}>{cssSizeUnit}</span>\n        </div>\n      ),\n    },\n    {\n      key: 'font-files-size',\n      label: <span className={styles.label}>Font size</span>,\n      children: (\n        <div className={styles.column}>\n          <span className={styles.description}>{fontSize}</span>\n          <span className={styles.unit}>{fontSizeUnit}</span>\n        </div>\n      ),\n    },\n    {\n      key: 'html-files-size',\n      label: <span className={styles.label}>HTML size</span>,\n      children: (\n        <>\n          <span className={styles.description}>{htmlSize}</span>\n          <span className={styles.unit}>{htmlSizeUnit}</span>\n        </>\n      ),\n    },\n    {\n      key: 'image-files-size',\n      label: <span className={styles.label}>Image size</span>,\n      children: (\n        <>\n          <span className={styles.description}>{imgSize}</span>\n          <span className={styles.unit}>{imgSizeUnit}</span>\n        </>\n      ),\n    },\n    {\n      key: 'media-files-size',\n      label: <span className={styles.label}>Media size</span>,\n      children: (\n        <>\n          <span className={styles.description}>{mediaSize}</span>\n          <span className={styles.unit}>{mediaSizeUnit}</span>\n        </>\n      ),\n    },\n  ];\n\n  return (\n    <Descriptions\n      layout={'vertical'}\n      className={listStyles.bundleOverall}\n      size=\"small\"\n      column={3}\n      colon={false}\n      items={view === 'files' ? fileItems : sizeItems}\n    />\n  );\n};\n\nexport const BundleOverall: React.FC<{\n  errors: SDK.ErrorsData;\n  cwd: string;\n}> = (): React.JSX.Element | null => {\n  const [view, setView] = useState<viewType>('size');\n  const navigate = useNavigate();\n  const { t } = useI18n();\n\n  const handleViewChange = (value: viewType) => {\n    setView(value);\n  };\n\n  return (\n    <ServerAPIProvider\n      api={SDK.ServerAPI.API.GetAssetsSummary}\n      body={{ withFileContent: false }}\n    >\n      {(res) => {\n        const totalSizeStr = formatSize(res.all.total.size);\n        return (\n          <Card className={cardStyles.card} style={{ height: '316px' }}>\n            <div>\n              <div className={styles.title}>\n                <span>{t('Bundle Overall')}</span>\n                <Button\n                  type=\"link\"\n                  style={{ padding: '0px' }}\n                  onClick={() => {\n                    navigate(Client.RsdoctorClientRoutes.BundleSize);\n                  }}\n                >\n                  <div style={{ display: 'flex', alignItems: 'center' }}>\n                    <span style={{ marginRight: '8px', fontSize: '13px' }}>\n                      {t('ViewBundleSize')}\n                    </span>\n                    <RightOutlined style={{ fontSize: '10px' }} />\n                  </div>\n                </Button>\n              </div>\n              <Segmented\n                options={['Size', 'Files']}\n                onChange={(val) =>\n                  handleViewChange(val.toLocaleLowerCase() as viewType)\n                }\n                size=\"small\"\n                style={{ marginBottom: 8, fontSize: '14px' }}\n              />\n              <DataSummary\n                theme={view === 'files' ? 'common' : 'size'}\n                number={view === 'files' ? res.all.total.count : totalSizeStr}\n                description={`Total ${view}`}\n              />\n              <BundleDescriptions view={view} res={res} />\n            </div>\n          </Card>\n        );\n      }}\n    </ServerAPIProvider>\n  );\n};\n"],"names":["DirectoryTree","Tree","getFiles","data","files","fileMessage","filePath","pathArray","fileName","defaultDir","treeData","file","target","parent","FolderOpenTwoTone","icon","getFileCom","styles","Tag","formatSize","getFilesWithDrawer","TextDrawer","BundleDescriptions","res","view","fileItems","jsSize","jsSizeUnit","cssSize","cssSizeUnit","fontSize","fontSizeUnit","htmlSize","htmlSizeUnit","imgSize","imgSizeUnit","mediaSize","mediaSizeUnit","sizeItems","Descriptions","listStyles","BundleOverall","setView","useState","navigate","useNavigate","t","useI18n","handleViewChange","value","ServerAPIProvider","SDK","totalSizeStr","Card","cardStyles","Button","Client","RightOutlined","Segmented","val","DataSummary"],"mappings":"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"}