UNPKG

debt-collector

Version:

a nodejs tool to identify, track and mesure technical debt

80 lines (79 loc) 3.08 kB
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, }; }