{"version":3,"file":"pages/ModuleAnalyze/fileTree.mjs","sources":["../../../src/pages/ModuleAnalyze/fileTree.tsx"],"sourcesContent":["import { SDK } from '@rsdoctor/types';\nimport { Card, Col, Empty, Popover, Tooltip, Typography } from 'antd';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { Size } from 'src/constants';\nimport { openVSCode, openCursor, openTrae } from 'src/components/Opener';\nimport { CodeViewer } from 'src/components/base';\nimport VSCodeIcon from '../../common/svg/vscode.svg';\nimport CursorIcon from '../../common/svg/cursor.svg';\nimport TraeIcon from '../../common/svg/trae.svg';\nimport { FileTree } from './components/fileTreeCom';\nimport { clsNamePrefix } from './constants';\nimport DependencyTree from './dependency';\nimport { getImporteds } from './utils';\nimport { useCreateFileTreeData } from './utils/hooks';\nimport { TabList } from './index';\n\nexport const BailoutReasonCard: React.FC<{\n  reasons?: string[];\n  sideEffectCodes?: SDK.SideEffectCodeData[];\n  modulePath?: string;\n}> = ({ reasons, sideEffectCodes, modulePath }) => {\n  if (\n    (!reasons || !reasons.length) &&\n    (!sideEffectCodes || !sideEffectCodes.length)\n  ) {\n    return (\n      <Card\n        className={`${clsNamePrefix}-bailout-card`}\n        bordered={false}\n        bodyStyle={{ padding: 20, height: '100%' }}\n      >\n        <Empty />\n      </Card>\n    );\n  }\n\n  return (\n    <Card\n      className={`${clsNamePrefix}-bailout-card`}\n      bordered={false}\n      bodyStyle={{ padding: 20, height: '100%' }}\n    >\n      {reasons && (\n        <>\n          <Typography.Text\n            strong\n            className={`${clsNamePrefix}-bailout-card-title`}\n          >\n            Bailout Reasons\n          </Typography.Text>\n          <div\n            className={`${clsNamePrefix}-bailout-card-list`}\n            style={{ maxHeight: 156, overflowY: 'auto' }}\n          >\n            {reasons.length > 0 ? (\n              reasons.map((reason, index) => (\n                <div\n                  className={`${clsNamePrefix}-bailout-card-item`}\n                  key={`${reason}-${index}`}\n                >\n                  <Popover content={reason} trigger=\"hover\">\n                    <Typography.Paragraph\n                      ellipsis={{ rows: 1 }}\n                      className={`${clsNamePrefix}-bailout-card-text`}\n                      style={{ marginBottom: 0 }}\n                    >\n                      {reason}\n                    </Typography.Paragraph>\n                  </Popover>\n                  <Typography.Text\n                    type=\"secondary\"\n                    className={`${clsNamePrefix}-bailout-card-meta`}\n                  >\n                    #{String(index + 1).padStart(2, '0')}\n                  </Typography.Text>\n                </div>\n              ))\n            ) : (\n              <Empty />\n            )}\n          </div>\n        </>\n      )}\n      {sideEffectCodes && sideEffectCodes.length > 0 && (\n        <>\n          <div\n            style={{\n              display: 'flex',\n              alignItems: 'center',\n              gap: 8,\n              marginTop: reasons?.length ? 12 : 0,\n            }}\n          >\n            <Typography.Text\n              strong\n              className={`${clsNamePrefix}-bailout-card-title`}\n            >\n              Side Effect Codes\n            </Typography.Text>\n            {modulePath && sideEffectCodes[0] && (\n              <Tooltip\n                title={`Open in VSCode: line ${sideEffectCodes[0].startLine}`}\n              >\n                <VSCodeIcon\n                  style={{\n                    width: 16,\n                    height: 16,\n                    cursor: 'pointer',\n                    flexShrink: 0,\n                    marginBottom: 12,\n                  }}\n                  onClick={() =>\n                    openVSCode({\n                      file: modulePath,\n                      line: sideEffectCodes[0].startLine,\n                    })\n                  }\n                />\n              </Tooltip>\n            )}\n            {modulePath && sideEffectCodes[0] && (\n              <Tooltip\n                title={`Open in Cursor: line ${sideEffectCodes[0].startLine}`}\n              >\n                <CursorIcon\n                  style={{\n                    width: 16,\n                    height: 16,\n                    cursor: 'pointer',\n                    flexShrink: 0,\n                    marginBottom: 12,\n                  }}\n                  onClick={() =>\n                    openCursor({\n                      file: modulePath,\n                      line: sideEffectCodes[0].startLine,\n                    })\n                  }\n                />\n              </Tooltip>\n            )}\n            {modulePath && sideEffectCodes[0] && (\n              <Tooltip\n                title={`Open in Trae: line ${sideEffectCodes[0].startLine}`}\n              >\n                <TraeIcon\n                  style={{\n                    width: 16,\n                    height: 16,\n                    cursor: 'pointer',\n                    flexShrink: 0,\n                    marginBottom: 12,\n                  }}\n                  onClick={() =>\n                    openTrae({\n                      file: modulePath,\n                      line: sideEffectCodes[0].startLine,\n                    })\n                  }\n                />\n              </Tooltip>\n            )}\n          </div>\n          <div\n            className={`${clsNamePrefix}-bailout-card-list`}\n            style={{\n              minHeight: '50vh',\n              display: 'flex',\n              flexDirection: 'column',\n              gap: 12,\n              overflow: 'auto',\n            }}\n          >\n            {sideEffectCodes.map((item, index) => (\n              <div\n                className={`${clsNamePrefix}-bailout-card-item`}\n                key={`${item.moduleId}-${index}`}\n                style={{\n                  display: 'flex',\n                  flexDirection: 'column',\n                  alignItems: 'flex-start',\n                  gap: 8,\n                  minHeight: 0,\n                  flex: '1 1 0',\n                }}\n              >\n                <div\n                  style={{\n                    flex: 1,\n                    minHeight: 0,\n                    width: '100%',\n                    display: 'flex',\n                    flexDirection: 'column',\n                  }}\n                >\n                  {item.code ? (\n                    <CodeViewer\n                      code={item.code}\n                      ranges={[\n                        {\n                          start: {\n                            line: item.startLine || 0,\n                            column: 0,\n                          },\n                        },\n                      ]}\n                      filePath={''}\n                      lang=\"javascript\"\n                      style={{ flex: 1, minHeight: '40vh', width: '100%' }}\n                      isLightTheme={false}\n                      formatOnMount\n                    />\n                  ) : (\n                    <Empty />\n                  )}\n                </div>\n              </div>\n            ))}\n          </div>\n        </>\n      )}\n    </Card>\n  );\n};\n\nexport const ModuleFilesTree: React.FC<{\n  modules: SDK.ModuleData[];\n  dependencies: SDK.DependencyData[];\n  curModule: SDK.ModuleData;\n  cwd: string;\n  selectedChunk: string;\n  activeTabKey: string;\n}> = (props) => {\n  const {\n    curModule,\n    modules,\n    dependencies,\n    cwd,\n    activeTabKey,\n    selectedChunk = '',\n  } = props;\n  const [importedModules, setImportedModules] = useState(\n    [] as SDK.ModuleData[],\n  );\n\n  const { data: fileStructures } = useCreateFileTreeData(\n    modules,\n    importedModules,\n    curModule,\n  );\n\n  useEffect(() => {\n    const importeds = getImporteds(curModule, modules);\n    setImportedModules(importeds);\n  }, [curModule, modules]);\n\n  const mainContent = useMemo(() => {\n    if (activeTabKey === TabList[TabList.Reasons]) {\n      return importedModules ? (\n        <FileTree\n          cwd={cwd}\n          treeData={fileStructures}\n          needCode={true}\n          needShowAllTree={true}\n          needJumpto={true}\n          selectedChunk={selectedChunk}\n          defaultOpenFather={1}\n        />\n      ) : (\n        <Empty className={`${clsNamePrefix}-empty`} />\n      );\n    }\n\n    return (\n      <div\n        className={`${clsNamePrefix}-file-tree`}\n        style={{ padding: Size.BasePadding / 2 }}\n      >\n        <Col span={24} style={{ marginTop: Size.BasePadding / 2 }}>\n          {curModule ? (\n            <DependencyTree\n              module={curModule}\n              dependencies={dependencies}\n              cwd={cwd}\n            />\n          ) : (\n            <Empty className={`${clsNamePrefix}-empty`} />\n          )}\n        </Col>\n      </div>\n    );\n  }, [\n    activeTabKey,\n    curModule,\n    dependencies,\n    fileStructures,\n    importedModules,\n    cwd,\n    selectedChunk,\n  ]);\n\n  return <>{mainContent}</>;\n};\n"],"names":["BailoutReasonCard","reasons","sideEffectCodes","modulePath","Card","clsNamePrefix","Empty","Typography","reason","index","Popover","String","Tooltip","VSCodeIcon","openVSCode","CursorIcon","openCursor","TraeIcon","openTrae","item","CodeViewer","ModuleFilesTree","props","curModule","modules","dependencies","cwd","activeTabKey","selectedChunk","importedModules","setImportedModules","useState","fileStructures","useCreateFileTreeData","useEffect","importeds","getImporteds","mainContent","useMemo","TabList","FileTree","Size","Col","DependencyTree"],"mappings":"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"}