Skip to content

Commit

Permalink
Merged PR 2206: shows checks results if check is deleted
Browse files Browse the repository at this point in the history
- branch init
- styling + added checkHash to object to display results
- fetching results to deleted checks correctly
- optymized the code
- displaying new category if there are results in it
- styling
  • Loading branch information
Aleksy Lisowski authored and piotrczarnas committed Nov 25, 2023
2 parents 27d8712 + f80a128 commit 7fb0bc1
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import {
CheckResultsOverviewDataModel,
TimeWindowFilterParameters,
CheckModel,
QualityCategoryModel
QualityCategoryModel,
CheckSearchFiltersCheckTypeEnum
} from '../../api';
import { useSelector } from 'react-redux';
import { JobApiClient } from '../../services/apiClient';
Expand Down Expand Up @@ -84,9 +85,23 @@ const CheckCategoriesView = ({
shouldExtend();
}, []);

const getExtendCheckCategoryModelWithDeletedChecks = () => {
const checkResultCopy = [...checkResultsOverview]
const deletedChecksArray = checkResultCopy.filter(
obj1 => category.checks && !category.checks.find(obj2 => obj1.checkName === obj2.check_name)
&& obj1.checkCategory === category.category
);
const deletedCheckModels : CheckModel[] = deletedChecksArray.map((x) => ({
check_name: x.checkName,
check_hash: x.checkHash,
run_checks_job_template: {checkType: checkTypes as CheckSearchFiltersCheckTypeEnum}
}))
return deletedCheckModels ?? [];
}

return (
<Fragment>
<tr>
<tr onClick={() => getExtendCheckCategoryModelWithDeletedChecks()}>
<td className="py-2 px-4 bg-gray-50 border-b border-t" colSpan={2}>
<div className="flex items-center justify-between">
<div className="flex items-center gap-2">
Expand Down Expand Up @@ -143,40 +158,40 @@ const CheckCategoriesView = ({
</td>
</tr>
{category.checks &&
isExtended &&
category.checks.map((check, index) => (
<CheckListItem
check={check}
key={index}
onChange={(item) =>
handleChangeDataGroupingConfiguration(item, index)
}
checkResult={checkResultsOverview.find(
(item) =>
item.checkHash == check.check_hash
)}
getCheckOverview={getCheckOverview}
onUpdate={onUpdate}
timeWindowFilter={timeWindowFilter}
mode={mode}
changeCopyUI={(value: boolean) =>
changeCopyUI(
category.category ?? '',
check.check_name ?? '',
value
)
}
checkedCopyUI={
copyCategory?.checks?.find(
(item) => item.check_name === check.check_name
)?.configured
}
category={category.category}
comparisonName={category.comparison_name}
isDefaultEditing={isDefaultEditing}
canUserRunChecks={userProfile.can_run_checks}
/>
))}
isExtended &&
[...category.checks, ...getExtendCheckCategoryModelWithDeletedChecks()].map(
(check, index) => (
<CheckListItem
check={check}
key={index}
onChange={(item) =>
handleChangeDataGroupingConfiguration(item, index)
}
checkResult={checkResultsOverview.find(
(item) => item.checkHash === check.check_hash
)}
getCheckOverview={getCheckOverview}
onUpdate={onUpdate}
timeWindowFilter={timeWindowFilter}
mode={mode}
changeCopyUI={(value) =>
changeCopyUI(category.category ?? '', check.check_name ?? '', value)
}
checkedCopyUI={
copyCategory?.checks?.find(
(item) => item.check_name === check.check_name
)?.configured
}
category={category.category}
comparisonName={category.comparison_name}
isDefaultEditing={isDefaultEditing}
canUserRunChecks={userProfile.can_run_checks}
isAlreadyDeleted={category.checks && !category.checks.find(x => x ===
check
)}
/>
)
)}
<DeleteOnlyDataDialog
open={deleteDataDialogOpened}
onClose={() => setDeleteDataDialogOpened(false)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import {
DqoJobHistoryEntryModelStatusEnum,
CheckModel,
DeleteStoredDataQueueJobParameters,
CheckResultEntryModel
} from '../../../api';
import { JobApiClient } from '../../../services/apiClient';
import CheckResultsTab from './CheckResultsTab';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ interface ICheckListItemProps {
comparisonName?: string;
isDefaultEditing?: boolean;
canUserRunChecks?: boolean;
isAlreadyDeleted ?: boolean
}

interface IRefetchResultsProps {
Expand All @@ -67,7 +68,8 @@ const CheckListItem = ({
category,
comparisonName,
isDefaultEditing,
canUserRunChecks
canUserRunChecks,
isAlreadyDeleted
}: ICheckListItemProps) => {
const [expanded, setExpanded] = useState(false);
const [activeTab, setActiveTab] = useState('check-settings');
Expand Down Expand Up @@ -331,7 +333,8 @@ const CheckListItem = ({
>
<td className="py-2 pl-4 pr-4 min-w-120 max-w-120">
<div className="flex space-x-1 items-center">
{mode ? (

{isAlreadyDeleted !== true && (mode ? (
<div className="w-5 h-5 block items-center">
{check?.configured && (
<Checkbox checked={checkedCopyUI} onChange={changeCopyUI} />
Expand All @@ -344,7 +347,8 @@ const CheckListItem = ({
onChange={onChangeConfigured}
/>
</div>
)}
))}
{isAlreadyDeleted !== true &&
<Tooltip
content={!check?.disabled ? 'Enabled' : 'Disabled'}
className="max-w-80 py-4 px-4 bg-gray-800"
Expand All @@ -363,6 +367,8 @@ const CheckListItem = ({
/>
</div>
</Tooltip>
}
{isAlreadyDeleted !== true &&
<Tooltip
content="Settings"
className="max-w-80 py-4 px-4 bg-gray-800"
Expand All @@ -375,6 +381,8 @@ const CheckListItem = ({
/>
</div>
</Tooltip>
}
{isAlreadyDeleted !== true &&
<Tooltip
content={
check?.schedule_override?.disabled
Expand All @@ -397,10 +405,11 @@ const CheckListItem = ({
/>
</div>
</Tooltip>
}
{(!job ||
job?.status === DqoJobHistoryEntryModelStatusEnum.succeeded ||
job?.status === DqoJobHistoryEntryModelStatusEnum.failed) &&
isDefaultEditing !== true && (
isDefaultEditing !== true && isAlreadyDeleted !== true && (
<Tooltip
content="Run Check"
className="max-w-80 py-4 px-4 bg-gray-800"
Expand Down Expand Up @@ -445,8 +454,8 @@ const CheckListItem = ({
<Tooltip
content="Results"
className="max-w-80 py-4 px-4 bg-gray-800"
>
<div className="w-5 h-5">
>
<div className={clsx("w-5 h-5", isAlreadyDeleted === true ? "pl-[129px] pr-11" : "")}>
<SvgIcon
name="rectangle-list"
className="text-gray-700 h-5 cursor-pointer"
Expand All @@ -455,6 +464,7 @@ const CheckListItem = ({
</div>
</Tooltip>
)}
{isAlreadyDeleted !== true &&
<Tooltip
content={check.help_text}
className="max-w-80 py-4 px-4 bg-gray-800"
Expand All @@ -466,7 +476,7 @@ const CheckListItem = ({
/>
</div>
</Tooltip>

}
{checkResult && (
<div className="flex space-x-1">
{checkResult?.statuses?.map((status, index) => (
Expand Down Expand Up @@ -548,6 +558,7 @@ const CheckListItem = ({
</div>
</td>
<td className="py-2 px-4 bg-yellow-100 relative">
{isAlreadyDeleted !== true &&
<CheckRuleItem
disabled={isDisabled}
parameters={check?.rule?.warning}
Expand All @@ -564,9 +575,11 @@ const CheckListItem = ({
changeEnabled={changeEnabled}
configuredType={enabledType}
/>
}
<div className="w-5 bg-white absolute h-full right-0 top-0"></div>
</td>
<td className="py-2 px-4 bg-orange-100">
{isAlreadyDeleted !== true &&
<CheckRuleItem
disabled={isDisabled}
parameters={check?.rule?.error}
Expand All @@ -583,8 +596,10 @@ const CheckListItem = ({
changeEnabled={changeEnabled}
configuredType={enabledType}
/>
}
</td>
<td className="py-2 px-4 bg-red-100">
<td className="py-2 px-4 bg-red-100 h-18">
{isAlreadyDeleted !== true &&
<CheckRuleItem
disabled={isDisabled}
parameters={check?.rule?.fatal}
Expand All @@ -601,6 +616,7 @@ const CheckListItem = ({
changeEnabled={changeEnabled}
configuredType={enabledType}
/>
}
</td>
</tr>
{expanded && (
Expand Down
18 changes: 16 additions & 2 deletions dqops/src/main/frontend/src/components/DataQualityChecks/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import {
CheckContainerModel,
CheckContainerModelEffectiveScheduleEnabledStatusEnum,
CheckModel,
EffectiveScheduleModelScheduleLevelEnum
EffectiveScheduleModelScheduleLevelEnum,
QualityCategoryModel
} from '../../api';
import { useTree } from '../../contexts/treeContext';
import clsx from 'clsx';
Expand Down Expand Up @@ -299,6 +300,16 @@ const DataQualityChecks = ({
value: item
})
);
const getCustomCategoryBasedOnResults = () => {
const checkResultCopy = [...checkResultsOverview]
const missingCategory = checkResultCopy.filter(
obj1 => checksUI.categories && !checksUI.categories.find(obj2 => obj1.checkCategory === obj2.category || obj1.checkCategory + "/" + obj1.comparisonName === obj2.category)
);
const customCategory : QualityCategoryModel[] = missingCategory.map((x) => ({
category: x.checkCategory
}))
return customCategory ?? [];
}

return (
<div
Expand Down Expand Up @@ -429,7 +440,10 @@ const DataQualityChecks = ({
isDefaultEditing={isDefaultEditing}
/>
<tbody>
{checksUI?.categories.map((category, index) => (
{[
...(checksUI?.categories ?? []),
...(getCustomCategoryBasedOnResults() ?? []),
].map((category, index) => (
<CheckCategoriesView
key={index}
category={category}
Expand Down

0 comments on commit 7fb0bc1

Please sign in to comment.