debt-collector
Version:
a nodejs tool to identify, track and mesure technical debt
80 lines (79 loc) • 3.08 kB
JavaScript
import { useState, useEffect } from 'react';
import { getFileList, } from '../../lib/filters/getFileList.js';
import { checkFileList } from '../../lib/results/checkFileList.js';
import { useValidatedConfig } from '../../lib/config/index.js';
import { cleanTagFilterParam } from '../../lib/utils/index.js';
import { useDevLogger } from '../hooks/useDevLogger.js';
export function useCheckState(options) {
const { rule, tags, config, include, changedSince } = options;
const logger = useDevLogger();
const [results, setResults] = useState(null);
const [fileList, setFileList] = useState(null);
const [checkedFileCount, setCheckedFileCount] = useState(0);
const [error, setError] = useState(null);
const { isConfigValid, sanitizedConfig, configErrors } = useValidatedConfig(config);
const cleanTags = cleanTagFilterParam(tags);
useEffect(() => {
;
(async () => {
if (isConfigValid) {
try {
logger.info('Getting file list');
const result = await getFileList({
config: sanitizedConfig,
commonAncestor: false,
compare: changedSince,
globOption: include,
});
setFileList(result);
setError(null);
}
catch (err) {
setFileList(null);
setError([
err instanceof Error ? err.message : 'Unknown error occurred',
]);
}
}
})();
}, [isConfigValid]);
useEffect(() => {
;
(async () => {
if (fileList !== null && sanitizedConfig !== null) {
const incrementFn = () => {
setCheckedFileCount((prevCount) => prevCount + 1);
};
const checkResults = await checkFileList({
fileList,
config: sanitizedConfig,
rule,
tags,
increment: incrementFn,
});
setResults({
results: checkResults,
config: sanitizedConfig,
});
}
})();
}, [fileList]);
const collectingFrom = `Collecting debt from ${changedSince
? `files changed since ${changedSince}`
: include || 'all files'}`;
const hasFilters = Boolean(cleanTags.length || rule);
const tagFilters = cleanTags.length > 0 ? `[tags : ${cleanTags}]` : '';
const and = cleanTags.length > 0 && rule ? ' & ' : '';
const ruleFilter = rule ? `[rule id : ${rule}]` : '';
const withFilters = `With rules filters on ${tagFilters}${and}${ruleFilter}`;
return {
results,
fileList,
checkedFileCount,
isConfigValid: isConfigValid && !error,
configErrors: configErrors || error,
collectingFrom,
hasFilters,
withFilters,
};
}