Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
"framer-motion": "^12.5.0",
"html-react-parser": "^5.2.3",
"i18next": "^23.15.1",
"mixpanel-browser": "^2.55.1",
"mixpanel-browser": "^2.64.0",
"prismjs": "^1.29.0",
"qs": "^6.13.0",
"react": "^18.3.1",
Expand Down
11 changes: 5 additions & 6 deletions src/api/docgen.api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ export const triggerDocGen = (
archDocConfig?: ArchDocConfig,
): Promise<DocGenInitialResponse> => {
const data = buildDocGenData(orgName, repoName, vendor);
const url = `/v1/git/generate/${genType}/doc`;
const url = `/v1/git/job/${genType}/start`;
return httpApi.post<DocGenInitialResponse>(url, { ...data, style_guide: styleGuide, arch_doc_config: archDocConfig }).then(({ data }) => data);
};

Expand All @@ -119,15 +119,14 @@ export const getDocGenStatus = (
genType: string,
lroJobId: string,
): Promise<DocGenStatusReponse> => {
const data = buildDocGenData(orgName, repoName, vendor);
const url = `/v1/git/generate/${genType}/doc/status?jobId=${lroJobId}`;
return httpApi.post<DocGenStatusReponse>(url, { ...data }).then(({ data }) => data);
const url = `/v1/git/job/${lroJobId}/status`;
return httpApi.get<DocGenStatusReponse>(url).then(({ data }) => data);
};

export const terminateJob = (
lroJobId: string,
): Promise<Record<string, string>> => {
const url = `/v1/git/lro/${lroJobId}/terminate`;
const url = `/v1/git/job/${lroJobId}/terminate`;
return httpApi.post<Record<string, string>>(url).then(({ data }) => data);
};

Expand Down Expand Up @@ -165,7 +164,7 @@ export const getAdvancedRepoAnalysisDetails = (
analysisType: string,
): Promise<FunctionDetail[] | Record<string, string>> => {
const data = buildDocGenData(orgName, repoName, vendor);
const url = `/v1/git/analyze/repo/${analysisType}/details`;
const url = `/v1/git/job/${analysisType}/details`;

return httpApi.post<FunctionDetail[] | Record<string, string>>(url, { ...data }).then(({ data }) => data); // Extract the message
};
Expand Down
21 changes: 12 additions & 9 deletions src/api/git.api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,6 @@ export enum FunctionOutdatedStatusEnum {
CURRENT = "CURRENT"
}

export type FunctionOutdatedResponseSchema = {
status: FunctionOutdatedStatusEnum;
explanation: string;
docstring?: string;
grammarError?: boolean;
}

export type FunctionDetail = {
name: string;
Expand All @@ -69,10 +63,14 @@ export type FunctionDetail = {
halsteadVolume?: number;
halsteadDifficulty?: number;
halsteadEffort?: number;
grammarError: boolean;
funStartLine: number;
funEndLine: number;
suggestedDocstring?: string;

complexityCategory?: ComplexityCategory;
languageType: string;
outdatedStatus?: FunctionOutdatedResponseSchema;
plName: string;
outdatedDocstring?: boolean;
urgentDocumentation?: boolean;

hasDocstring: boolean;
Expand Down Expand Up @@ -126,6 +124,11 @@ export type GitAppMetaData = {
analysisReport: AnalysisReport;
};

export type GitAppAdvancedMetaData = {
analysisReport: AnalysisReport;
};


export enum PlanType {
FREE = "FREE",
PREMIUM = "PREMIUM",
Expand All @@ -140,11 +143,11 @@ export type GitAppUsageType = {
vendor: string;
planType: PlanType;
gitAppMetaData: GitAppMetaData;
gitAppAdvancedMeta: GitAppAdvancedMetaData;
isActive: boolean;
isPrivate: boolean;
isInstalled: boolean;
userId: number;
full_repo_count: number;
};

export const getGitAppUsageForRepository = (
Expand Down
6 changes: 3 additions & 3 deletions src/components/common/BaseMenu/BaseMenu.styles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ import { Menu as AntMenu } from 'antd';

export const Menu = styled(AntMenu)`
&.ant-menu .ant-menu-item-icon {
font-size: ${({ theme }) => theme.fontSizes.xl};
width: 1.25rem;
font-size: ${({ theme }) => theme.fontSizes.md};
width: 1rem;
}

.ant-menu-item,
.ant-menu-submenu {
font-size: ${({ theme }) => theme.fontSizes.xs};
border-radius: 0;
border-radius: 6px;
}

.ant-menu-item {
Expand Down
102 changes: 75 additions & 27 deletions src/components/dashboard/DashboardHeader/OutdatedDocsModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,27 @@ const SuggestedDocBlock = styled.pre`
word-break: break-all;
`;

const HoverLink = styled.div`
display: none;
position: absolute;
background: #f0f0f0;
border: 1px solid #d9d9d9;
padding: 4px 8px;
border-radius: 4px;
z-index: 1000;
margin-top: 4px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
font-size: 12px;

.link-container:hover & {
display: block;
}
`;

const LinkContainer = styled.div`
position: relative;
`;

const OutdatedDocsModal: React.FC<OutdatedDocsModalProps> = ({
visible,
onClose,
Expand All @@ -88,7 +109,7 @@ const OutdatedDocsModal: React.FC<OutdatedDocsModalProps> = ({

// Filter for outdated and urgent docs
const outdatedFunctions = functionDetails?.filter(
func => func.outdatedStatus?.status === FunctionOutdatedStatusEnum.OUTDATED
func => func.outdatedDocstring
) || [];

const urgentFunctions = functionDetails?.filter(
Expand Down Expand Up @@ -135,7 +156,7 @@ const OutdatedDocsModal: React.FC<OutdatedDocsModalProps> = ({

// Outdated by language chart data
const outdatedByLanguage = outdatedFunctions.reduce((acc, func) => {
const lang = func.languageType;
const lang = func.plName;
acc[lang] = (acc[lang] || 0) + 1;
return acc;
}, {} as Record<string, number>);
Expand Down Expand Up @@ -236,14 +257,26 @@ const OutdatedDocsModal: React.FC<OutdatedDocsModalProps> = ({
const outdatedColumns = [
{
title: 'Function Name',
dataIndex: 'name',
key: 'name',
dataIndex: 'methodName',
key: 'methodName',
render: (text: string, record: FunctionDetail) => (
<Tooltip title={record.gitLocation}>
<Text strong>{text}</Text>
<LinkContainer className="link-container">
<a
href={record.gitLocation}
target="_blank"
rel="noopener noreferrer"
title="Click to open in new tab"
>
<Text strong>{text}</Text>
</a>
<br />
<Text type="secondary">{record.fileName}</Text>
</Tooltip>
<HoverLink>
<a href={record.gitLocation} target="_blank" rel="noopener noreferrer">
{record.gitLocation}
</a>
</HoverLink>
</LinkContainer>
),
},
{
Expand All @@ -253,7 +286,7 @@ const OutdatedDocsModal: React.FC<OutdatedDocsModalProps> = ({
render: (text: ComplexityCategory, record: FunctionDetail) => {
const color = text === ComplexityCategory.HIGH ? 'red' :
text === ComplexityCategory.MEDIUM ? 'orange' : 'green';
return <Tag color={color}>{text}</Tag>;
return <><Tag color={color}>{text}</Tag> </>;
},
sorter: (a: FunctionDetail, b: FunctionDetail) => {
const order = { [ComplexityCategory.HIGH]: 3, [ComplexityCategory.MEDIUM]: 2, [ComplexityCategory.LOW]: 1 };
Expand All @@ -273,25 +306,40 @@ const OutdatedDocsModal: React.FC<OutdatedDocsModalProps> = ({
},
{
title: 'Language',
dataIndex: 'languageType',
dataIndex: 'plName',
key: 'language',
render: (text: string) => <Tag>{text}</Tag>
},
{
title: 'Issue',
dataIndex: 'outdatedStatus',
dataIndex: 'outdatedDocstring',
key: 'issue',
render: (status: FunctionDetail['outdatedStatus']) => {
render: (status: FunctionDetail['outdatedDocstring'], record: FunctionDetail) => {
if (!status) return '-';
return (
<Tooltip title={status.explanation}>
<Tooltip title={record.suggestedDocstring || 'No suggested docstring'}>
<Tag icon={<WarningOutlined />} color="warning">
{status.grammarError ? 'Grammar Error' : 'Outdated'}
{record.grammarError ? 'Grammar Error' : 'Outdated'}
</Tag>
</Tooltip>
);
}
},
// {
// title: 'CP',
// dataIndex: 'cyclomaticComplexity',
// key: 'cyclomaticComplexity',
// render: (status: FunctionDetail['cyclomaticComplexity'], record: FunctionDetail) => {
// if (!status) return '-';
// return (
// <Tooltip title={record.suggestedDocstring || 'No suggested docstring'}>
// <Tag icon={<WarningOutlined />} >
// {record.grammarError ? 'Grammar Error' : 'Outdated'}
// </Tag>
// </Tooltip>
// );
// }
// },
{
title: 'Urgent',
dataIndex: 'urgentDocumentation',
Expand Down Expand Up @@ -377,24 +425,16 @@ const OutdatedDocsModal: React.FC<OutdatedDocsModalProps> = ({
</>
)}

{record.outdatedStatus?.docstring && (
{record.suggestedDocstring && (
<>
<Text type="secondary">Suggested Docstring:</Text>
<SuggestedDocBlock>{record.outdatedStatus.docstring}</SuggestedDocBlock>
<SuggestedDocBlock>{record.suggestedDocstring}</SuggestedDocBlock>
</>
)}

<Text type="secondary">Function Code:</Text>
<CodeBlock>{record.content}</CodeBlock>

{record.outdatedStatus?.explanation && (
<>
<Text type="secondary">Issue Explanation:</Text>
<Paragraph style={{ fontSize: 13 }}>
{record.outdatedStatus.explanation}
</Paragraph>
</>
)}

</div>
),
}}
Expand All @@ -418,18 +458,26 @@ const OutdatedDocsModal: React.FC<OutdatedDocsModalProps> = ({
<DocStringBlock>{record.docstring}</DocStringBlock>
</>
)}

{record.suggestedDocstring && (
<>
<Text type="secondary">Suggested Docstring:</Text>
<SuggestedDocBlock>{record.suggestedDocstring}</SuggestedDocBlock>
</>
)}


<Text type="secondary">Function Code:</Text>
<CodeBlock>{record.content}</CodeBlock>

{record.outdatedStatus?.explanation && (
{/* {record.suggestedDocstring && (
<>
<Text type="secondary">Issue Explanation:</Text>
<Paragraph style={{ fontSize: 13 }}>
{record.outdatedStatus.explanation}
{record.suggestedDocstring}
</Paragraph>
</>
)}
)} */}
</div>
),
}}
Expand Down
28 changes: 14 additions & 14 deletions src/components/dashboard/DashboardHeader/ReadmeAnalysisModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -155,14 +155,14 @@ const ReadmeAnalysisModal: React.FC<ReadmeAnalysisModalProps> = ({
<StatCard>
<Statistic
title="Word Count"
value={readmeAnalysis.textStatistics.wordCount}
value={readmeAnalysis.textStatistics?.wordCount || 0}
prefix={<FileTextOutlined />}
suffix={`words`}
/>
<Divider style={{ margin: '12px 0' }} />
<Statistic
title="Line Count"
value={readmeAnalysis.textStatistics.lines}
value={readmeAnalysis.textStatistics?.lines||0}
prefix={<BookOutlined />}
suffix={`lines`}
/>
Expand All @@ -180,15 +180,15 @@ const ReadmeAnalysisModal: React.FC<ReadmeAnalysisModalProps> = ({
<StatCard>
<Statistic
title="Average Sentence Length"
value={readmeAnalysis.textStatistics.avgSentenceLength || 0}
value={Math.round(readmeAnalysis?.textStatistics?.avgSentenceLength || 0) || 0}
prefix={<FileWordOutlined />}
/>
<Divider style={{ margin: '12px 0' }} />
<Statistic
title="Broken Links"
value={readmeAnalysis.brokenLinks.length}
value={readmeAnalysis?.brokenLinks?.length}
prefix={<LinkOutlined />}
valueStyle={{ color: readmeAnalysis.brokenLinks.length > 0 ? '#f5222d' : '#52c41a' }}
valueStyle={{ color: readmeAnalysis?.brokenLinks?.length > 0 ? '#f5222d' : '#52c41a' }}
/>
<Divider style={{ margin: '12px 0' }} />
<Statistic
Expand Down Expand Up @@ -216,36 +216,36 @@ const ReadmeAnalysisModal: React.FC<ReadmeAnalysisModalProps> = ({
</div>
<div>
<Text strong>Flesch Reading Ease: </Text>
<Text>{(readmeAnalysis.textStatistics.fleschReadingEase||0).toFixed(1)}%</Text>
<Text>{(readmeAnalysis?.textStatistics?.fleschReadingEase||0).toFixed(1)}%</Text>
<Tooltip title="Higher score indicates easier reading (90-100: Very Easy, 0-30: Very Difficult)">
<MetricProgress
percent={readmeAnalysis.textStatistics.fleschReadingEase||0}
percent={readmeAnalysis?.textStatistics?.fleschReadingEase||0}
size="small"
strokeColor={(readmeAnalysis.textStatistics.fleschReadingEase || 0) >= 70 ? '#52c41a' : '#faad14'}
strokeColor={(readmeAnalysis?.textStatistics?.fleschReadingEase || 0) >= 70 ? '#52c41a' : '#faad14'}
showInfo={false}
/>
</Tooltip>
</div>
<div>
<Text strong>Flesch-Kincaid Grade: </Text>
<Text>{(readmeAnalysis.textStatistics.fleschKincaidGrade||0).toFixed(1)}%</Text>
<Text>{(readmeAnalysis?.textStatistics?.fleschKincaidGrade||0).toFixed(1)}%</Text>
<Tooltip title="Estimated US grade level needed to understand the text">
<MetricProgress
percent={readmeAnalysis.textStatistics.fleschKincaidGrade||0}
percent={readmeAnalysis?.textStatistics?.fleschKincaidGrade||0}
size="small"
strokeColor={(readmeAnalysis.textStatistics.fleschKincaidGrade || 0) >= 70 ? '#52c41a' : '#faad14'}
strokeColor={(readmeAnalysis?.textStatistics?.fleschKincaidGrade || 0) >= 70 ? '#52c41a' : '#faad14'}
showInfo={false}
/>
</Tooltip>
</div>
<div>
<Text strong>SMOG Index: </Text>
<Text>{(readmeAnalysis.textStatistics.smogIndex||0).toFixed(1)}%</Text>
<Text>{(readmeAnalysis?.textStatistics?.smogIndex||0).toFixed(1)}%</Text>
<Tooltip title="Years of education needed to understand the text">
<MetricProgress
percent={readmeAnalysis.textStatistics.smogIndex||0}
percent={readmeAnalysis?.textStatistics?.smogIndex||0}
size="small"
strokeColor={(readmeAnalysis.textStatistics.smogIndex || 0) >= 70 ? '#52c41a' : '#faad14'}
strokeColor={(readmeAnalysis?.textStatistics?.smogIndex || 0) >= 70 ? '#52c41a' : '#faad14'}
showInfo={false}
/>
</Tooltip>
Expand Down
Loading
Loading