{"version":3,"file":"pages/Resources/BundleDiff/DiffContainer/row.mjs","sources":["../../../../../src/pages/Resources/BundleDiff/DiffContainer/row.tsx"],"sourcesContent":["import { InfoCircleOutlined, SearchOutlined } from '@ant-design/icons';\nimport {\n  Button,\n  Divider,\n  Input,\n  InputRef,\n  Space,\n  Table,\n  Tag,\n  Tooltip,\n  Typography,\n} from 'antd';\nimport {\n  ColumnGroupType,\n  ColumnType,\n  FilterConfirmProps,\n} from 'antd/es/table/interface';\nimport { upperFirst } from 'es-toolkit/compat';\nimport React, { useMemo, useRef, useState } from 'react';\nimport { Client } from '@rsdoctor/types';\nimport { CompareFn } from 'antd/lib/table/interface';\nimport { Color } from '../../../../constants';\nimport {\n  beautifyModulePath,\n  formatPercent,\n  formatSize,\n} from '../../../../utils';\nimport { ViewChanges } from './changes';\nimport { FileUpdateTypeTag, getUpdateType } from './modules';\nimport {\n  BundleDiffComponentCardProps,\n  BundleDiffTableAssetsData,\n  BundleDiffTableModulesData,\n} from './types';\nimport { UpdateType } from './constants';\nimport { formatDiffSize } from './utils';\nimport { Graph } from '@rsdoctor/utils/common';\nimport { getModuleDiffKey } from './moduleDiff';\n\nexport const getSizeColumnPropsForModuleRow = (\n  key: 'baseline' | 'current',\n  sizeKey: 'parsedSize' | 'sourceSize',\n  sortByChanged?: boolean,\n): ColumnType<BundleDiffTableModulesData> => {\n  const sortByChangedFn: CompareFn<any> = (a, b) =>\n    (a.current?.size[sizeKey] || 0) -\n    (a.baseline?.size[sizeKey] || 0) -\n    (b.current?.size[sizeKey] || 0) +\n    (b.baseline?.size[sizeKey] || 0);\n\n  const sorterFn: CompareFn<any> = sortByChanged\n    ? (a, b) => sortByChangedFn(a, b)\n    : (a, b) => (a[key]?.size[sizeKey] || 0) - (b[key]?.size[sizeKey] || 0);\n\n  return {\n    width: 200,\n    sorter: (a, b) => sorterFn(a, b),\n    render: (_v, r) => {\n      if (!r[key]) return '-';\n      const size = r[key]!.size[sizeKey];\n      return (\n        <Space>\n          <Typography.Text>{formatSize(size)}</Typography.Text>\n          {key === 'current'\n            ? formatDiffSize(\n                r.baseline?.size[sizeKey] || 0,\n                size,\n                (r.baseline?.size[sizeKey] || 0) > size\n                  ? Client.RsdoctorClientDiffState.Down\n                  : Client.RsdoctorClientDiffState.Up,\n              )\n            : null}\n        </Space>\n      );\n    },\n  };\n};\n\nexport const getTargetColumnPropsForModuleRow = (\n  key: 'baseline' | 'current',\n  bModulesCount: number,\n  cModulesCount: number,\n): ColumnGroupType<BundleDiffTableModulesData> => {\n  const [sortByChanged, setSortByChanged] = useState(false);\n\n  const isB = key === 'baseline';\n  return {\n    title: () => {\n      const count = isB ? bModulesCount : cModulesCount;\n      const title = upperFirst(key);\n      const diff = Graph.diffSize(bModulesCount, cModulesCount);\n      return (\n        <div>\n          <Typography.Text>{title}</Typography.Text>\n          <Divider type=\"vertical\" />\n          <Tooltip\n            title={\n              <Space direction=\"vertical\">\n                <Typography.Text style={{ color: 'inherit' }}>\n                  {title} modules is {count}\n                </Typography.Text>\n                {isB ? null : (\n                  <Typography.Text style={{ color: 'inherit' }}>\n                    Percent is {formatPercent(diff.percent)}\n                  </Typography.Text>\n                )}\n              </Space>\n            }\n          >\n            <Space>\n              <Typography.Text\n                type=\"secondary\"\n                style={{ fontSize: 10, fontWeight: 400 }}\n              >\n                {count}\n              </Typography.Text>\n              <InfoCircleOutlined />\n            </Space>\n          </Tooltip>\n        </div>\n      );\n    },\n    children: [\n      {\n        title: 'Source Size',\n        ...getSizeColumnPropsForModuleRow(key, 'sourceSize', sortByChanged),\n      },\n      {\n        title: 'Parsed Size',\n        defaultSortOrder: isB ? undefined : 'descend',\n        ...getSizeColumnPropsForModuleRow(key, 'parsedSize', sortByChanged),\n      },\n    ],\n    filterSearch: true,\n    filters: [\n      {\n        text: 'Show Changed',\n        value: UpdateType.NotChanged,\n      },\n      {\n        text: 'Show All',\n        value: 'All',\n      },\n    ],\n    onFilter(v, r) {\n      if (v === UpdateType.NotChanged) {\n        setSortByChanged(true);\n      } else {\n        setSortByChanged(false);\n      }\n      return v === UpdateType.NotChanged ? getUpdateType(r) !== v : true;\n    },\n  };\n};\n\nexport const ModuleRowForAsset: React.FC<\n  { data: BundleDiffTableAssetsData } & Pick<\n    BundleDiffComponentCardProps,\n    'baseline' | 'current'\n  >\n> = ({ data, baseline, current }) => {\n  const { modules: bTotalModules } = baseline.moduleGraph;\n  const { modules: cTotalModules } = current.moduleGraph;\n  const { chunks: bToTalChunks } = baseline.chunkGraph;\n  const { chunks: cToTalChunks } = current.chunkGraph;\n  const bRoot = baseline.root;\n  const cRoot = current.root;\n\n  const [searchText, setSearchText] = useState('');\n  const searchInput = useRef<InputRef>(null);\n\n  const handleSearch = (\n    selectedKeys: string[],\n    confirm: (param?: FilterConfirmProps) => void,\n  ) => {\n    confirm();\n    setSearchText(selectedKeys[0]);\n  };\n\n  const handleReset = (clearFilters: () => void) => {\n    clearFilters();\n    setSearchText('');\n  };\n\n  const isBaseline = '__is_baseline__' as const;\n\n  const bModules = useMemo(\n    () =>\n      data.baseline\n        ? Graph.getModulesByAsset(data.baseline, bToTalChunks, bTotalModules)\n            .map((e) => ({\n              ...e,\n              [isBaseline]: true,\n            }))\n            .filter((cModule) => !cModule.concatenationModules?.length)\n        : [],\n    [data, baseline],\n  );\n  const cModules = useMemo(\n    () =>\n      data.current\n        ? Graph.getModulesByAsset(data.current, cToTalChunks, cTotalModules)\n            .map((e) => ({\n              ...e,\n              [isBaseline]: false,\n            }))\n            .filter((cModule) => !cModule.concatenationModules?.length)\n        : [],\n    [data, current],\n  );\n\n  const getPathInfo = (r: BundleDiffTableModulesData) =>\n    beautifyModulePath(r.path, r.__is_baseline__ ? bRoot : cRoot);\n\n  const dataSource: BundleDiffTableModulesData[] = useMemo(() => {\n    const mods = [...bModules, ...cModules];\n    const map = new Map<string, BundleDiffTableModulesData>();\n\n    // group by module.path\n    mods.forEach((mod) => {\n      const modPath = getModuleDiffKey(mod);\n      let t: BundleDiffTableModulesData = map.get(modPath)!;\n\n      if (!t) {\n        t = { path: modPath };\n      }\n\n      if (mod[isBaseline]) {\n        t.baseline = mod;\n      } else {\n        t.current = mod;\n      }\n      map.set(modPath, t);\n    });\n\n    return [...map.values()];\n  }, [bModules, cModules, searchText]);\n\n  const { bModulesCount, cModulesCount, totalCount } = useMemo(() => {\n    const fileNameFilter = (e: BundleDiffTableModulesData) =>\n      getPathInfo(e).alias.indexOf(searchText) > -1;\n\n    let b = dataSource.filter((e) => e.baseline);\n    let c = dataSource.filter((e) => e.current);\n    let totalCount = dataSource.length;\n\n    if (searchText) {\n      b = b.filter(fileNameFilter);\n      c = c.filter(fileNameFilter);\n      totalCount = dataSource.filter(fileNameFilter).length;\n    }\n\n    return {\n      bModulesCount: b.length,\n      cModulesCount: c.length,\n      totalCount,\n    };\n  }, [dataSource, searchText]);\n\n  return (\n    <Table\n      dataSource={dataSource}\n      rowKey={(e) => e.path}\n      size=\"small\"\n      pagination={{\n        size: 'small',\n      }}\n      bordered\n      scroll={{ x: 1500 }}\n      columns={[\n        {\n          fixed: 'left',\n          title: () => {\n            return (\n              <div>\n                <Typography.Text>\n                  Modules of {`\"${data.alias}\"`}\n                </Typography.Text>\n                <Divider type=\"vertical\" />\n                <Tooltip\n                  title={\n                    <Space direction=\"vertical\">\n                      <Typography.Text style={{ color: 'inherit' }}>\n                        filtered modules: {totalCount}\n                      </Typography.Text>\n                      <Typography.Text style={{ color: 'inherit' }}>\n                        total modules: {dataSource.length}\n                      </Typography.Text>\n                    </Space>\n                  }\n                >\n                  <Typography.Text\n                    type=\"secondary\"\n                    style={{ fontSize: 10, fontWeight: 400, marginRight: 4 }}\n                  >\n                    {totalCount}/{dataSource.length}\n                  </Typography.Text>\n                  <InfoCircleOutlined />\n                </Tooltip>\n              </div>\n            );\n          },\n          filterDropdown({\n            setSelectedKeys,\n            selectedKeys,\n            confirm,\n            clearFilters,\n          }) {\n            return (\n              <div\n                style={{ padding: 8 }}\n                onKeyDown={(e) => e.stopPropagation()}\n              >\n                <Input\n                  ref={searchInput}\n                  placeholder={`Search by file name`}\n                  value={selectedKeys[0]}\n                  onChange={(e) =>\n                    setSelectedKeys(e.target.value ? [e.target.value] : [])\n                  }\n                  onPressEnter={() =>\n                    handleSearch(selectedKeys as string[], confirm)\n                  }\n                  style={{ marginBottom: 8, display: 'block' }}\n                />\n                <Space>\n                  <Button\n                    type=\"primary\"\n                    onClick={() =>\n                      handleSearch(selectedKeys as string[], confirm)\n                    }\n                    icon={<SearchOutlined />}\n                    size=\"small\"\n                    style={{ width: 90 }}\n                  >\n                    Search\n                  </Button>\n                  <Button\n                    onClick={() => {\n                      if (clearFilters) {\n                        handleReset(clearFilters);\n                      }\n                      setSelectedKeys([]);\n                      handleSearch([], confirm);\n                    }}\n                    size=\"small\"\n                    style={{ width: 90 }}\n                  >\n                    Reset\n                  </Button>\n                </Space>\n              </div>\n            );\n          },\n          filterSearch: true,\n          filterIcon: (filtered) => (\n            <Space>\n              <Typography.Text\n                type={searchText ? undefined : 'secondary'}\n                style={{ fontWeight: 400 }}\n              >\n                {searchText || 'Search by file name'}\n              </Typography.Text>\n              <SearchOutlined\n                style={{ color: filtered ? Color.Blue : undefined }}\n              />\n            </Space>\n          ),\n          onFilterDropdownOpenChange: (visible) => {\n            if (visible) {\n              setTimeout(() => searchInput.current?.focus(), 100);\n            }\n          },\n          onFilter(v, r) {\n            return getPathInfo(r).alias.indexOf(v as string) > -1;\n          },\n          render: (_v, r) => {\n            const { alias, inNodeModules } = getPathInfo(r);\n            return (\n              <Space>\n                <Tooltip title={r.path}>\n                  <Typography.Text copyable={{ text: r.path }}>\n                    {alias}\n                  </Typography.Text>\n                </Tooltip>\n                {inNodeModules ? <Tag color=\"warning\">node_modules</Tag> : null}\n                <FileUpdateTypeTag type={getUpdateType(r)} />\n              </Space>\n            );\n          },\n        },\n        getTargetColumnPropsForModuleRow(\n          'current',\n          bModulesCount,\n          cModulesCount,\n        ),\n        getTargetColumnPropsForModuleRow(\n          'baseline',\n          bModulesCount,\n          cModulesCount,\n        ),\n        {\n          title: 'Actions',\n          width: 200,\n          render: (_v, r) => {\n            return (\n              <Space direction=\"vertical\" style={{ maxWidth: 170 }}>\n                <ViewChanges\n                  text=\"View Changes\"\n                  file={r.path}\n                  data={[\n                    {\n                      baseline:\n                        baseline.moduleCodeMap[r.baseline?.id as number]\n                          ?.source,\n                      current:\n                        current.moduleCodeMap[r.current?.id as number]?.source,\n                      group: 'Source',\n                    },\n                    {\n                      baseline:\n                        baseline.moduleCodeMap[r.baseline?.id as number]\n                          ?.transformed,\n                      current:\n                        current.moduleCodeMap[r.current?.id as number]\n                          ?.transformed,\n                      group: 'Transformed Source',\n                    },\n                    {\n                      baseline:\n                        baseline.moduleCodeMap[r.baseline?.id as number]\n                          ?.parsedSource,\n                      current:\n                        current.moduleCodeMap[r.current?.id as number]\n                          ?.parsedSource,\n                      group: 'Parsed Source',\n                    },\n                  ]}\n                />\n              </Space>\n            );\n          },\n        },\n      ]}\n    />\n  );\n};\n"],"names":["getSizeColumnPropsForModuleRow","key","sizeKey","sortByChanged","sortByChangedFn","a","b","sorterFn","_v","r","size","Space","Typography","formatSize","formatDiffSize","Client","getTargetColumnPropsForModuleRow","bModulesCount","cModulesCount","setSortByChanged","useState","isB","count","title","upperFirst","diff","Graph","Divider","Tooltip","formatPercent","InfoCircleOutlined","undefined","UpdateType","v","getUpdateType","ModuleRowForAsset","data","baseline","current","bTotalModules","cTotalModules","bToTalChunks","cToTalChunks","bRoot","cRoot","searchText","setSearchText","searchInput","useRef","handleSearch","selectedKeys","confirm","handleReset","clearFilters","isBaseline","bModules","useMemo","e","cModule","cModules","getPathInfo","beautifyModulePath","dataSource","mods","map","Map","mod","modPath","getModuleDiffKey","t","totalCount","fileNameFilter","c","Table","setSelectedKeys","Input","Button","SearchOutlined","filtered","Color","visible","setTimeout","alias","inNodeModules","Tag","FileUpdateTypeTag","ViewChanges"],"mappings":"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"}