Skip to content

Commit f2a0cb1

Browse files
update drift settings
1 parent b4e60ea commit f2a0cb1

File tree

2 files changed

+58
-126
lines changed

2 files changed

+58
-126
lines changed

src/components/CippCards/CippBannerListCard.jsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,12 @@ export const CippBannerListCard = (props) => {
8585
onClick={isCollapsible ? () => handleExpand(item.id) : undefined}
8686
>
8787
{/* Left Side: cardLabelBox */}
88-
<Stack direction="row" spacing={2} alignItems="center" sx={{ flex: 1, minWidth: 0 }}>
88+
<Stack
89+
direction="row"
90+
spacing={2}
91+
alignItems="center"
92+
sx={{ flex: 1, minWidth: 0 }}
93+
>
8994
<Box
9095
sx={{
9196
alignItems: "center",
@@ -116,9 +121,9 @@ export const CippBannerListCard = (props) => {
116121
color="text.primary"
117122
variant="h6"
118123
sx={{
119-
overflow: 'hidden',
120-
textOverflow: 'ellipsis',
121-
whiteSpace: 'nowrap',
124+
overflow: "hidden",
125+
textOverflow: "ellipsis",
126+
whiteSpace: "nowrap",
122127
}}
123128
>
124129
{item.text}
@@ -174,7 +179,7 @@ export const CippBannerListCard = (props) => {
174179
{item?.propertyItems?.length > 0 && (
175180
<CippPropertyListCard
176181
propertyItems={item.propertyItems || []}
177-
layout="dual"
182+
layout={other.layout || "dual"}
178183
isFetching={item.isFetching || false}
179184
/>
180185
)}

src/pages/tenant/standards/manage-drift/index.js

Lines changed: 48 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -86,55 +86,22 @@ const ManageDriftPage = () => {
8686
acc.currentDeviationsCount += item.currentDeviationsCount || 0;
8787
acc.alignedCount += item.alignedCount || 0;
8888
acc.customerSpecificDeviations += item.customerSpecificDeviationsCount || 0;
89+
acc.deniedDeviationsCount += item.deniedDeviationsCount || 0;
8990

90-
// Use allDeviations array which contains standardDisplayName for template policies
91-
if (item.allDeviations && Array.isArray(item.allDeviations)) {
92-
const allDeviations = item.allDeviations.filter((dev) => dev !== null);
93-
94-
// Filter deviations by state/status
95-
const currentDeviations = allDeviations.filter(
96-
(d) => d.state === "current" || d.Status === "New" || (!d.state && !d.Status)
97-
);
98-
const acceptedDeviations = allDeviations.filter(
99-
(d) => d.state === "accepted" || d.Status === "Accepted"
100-
);
101-
const customerSpecificDeviations = allDeviations.filter(
102-
(d) =>
103-
d.state === "customerSpecific" ||
104-
d.Status === "CustomerSpecific" ||
105-
d.Status === "Customer Specific"
106-
);
107-
const deniedDeleteDeviations = allDeviations.filter(
108-
(d) =>
109-
d.state === "deniedDelete" ||
110-
d.Status === "DeniedDelete" ||
111-
d.Status === "Denied - Delete"
112-
);
113-
const deniedRemediateDeviations = allDeviations.filter(
114-
(d) =>
115-
d.state === "deniedRemediate" ||
116-
d.Status === "DeniedRemediate" ||
117-
d.Status === "Denied - Remediate"
91+
// Use the API's direct arrays instead of filtering allDeviations
92+
if (item.currentDeviations && Array.isArray(item.currentDeviations)) {
93+
acc.currentDeviations.push(...item.currentDeviations.filter((dev) => dev !== null));
94+
}
95+
if (item.acceptedDeviations && Array.isArray(item.acceptedDeviations)) {
96+
acc.acceptedDeviations.push(...item.acceptedDeviations.filter((dev) => dev !== null));
97+
}
98+
if (item.customerSpecificDeviations && Array.isArray(item.customerSpecificDeviations)) {
99+
acc.customerSpecificDeviationsList.push(
100+
...item.customerSpecificDeviations.filter((dev) => dev !== null)
118101
);
119-
120-
acc.currentDeviations.push(...currentDeviations);
121-
acc.acceptedDeviations.push(...acceptedDeviations);
122-
acc.customerSpecificDeviationsList.push(...customerSpecificDeviations);
123-
acc.deniedDeleteDeviationsList.push(...deniedDeleteDeviations);
124-
acc.deniedRemediateDeviationsList.push(...deniedRemediateDeviations);
125-
} else {
126-
// Fallback to separate arrays if allDeviations is not available
127-
if (item.currentDeviations && Array.isArray(item.currentDeviations)) {
128-
acc.currentDeviations.push(...item.currentDeviations.filter((dev) => dev !== null));
129-
}
130-
if (item.acceptedDeviations && Array.isArray(item.acceptedDeviations)) {
131-
acc.acceptedDeviations.push(...item.acceptedDeviations.filter((dev) => dev !== null));
132-
}
133-
if (item.customerSpecificDeviations && Array.isArray(item.customerSpecificDeviations)) {
134-
acc.customerSpecificDeviationsList.push(
135-
...item.customerSpecificDeviations.filter((dev) => dev !== null)
136-
);
137-
}
102+
}
103+
if (item.deniedDeviations && Array.isArray(item.deniedDeviations)) {
104+
acc.deniedDeviationsList.push(...item.deniedDeviations.filter((dev) => dev !== null));
138105
}
139106

140107
// Use the latest data collection timestamp
@@ -153,11 +120,11 @@ const ManageDriftPage = () => {
153120
currentDeviationsCount: 0,
154121
alignedCount: 0,
155122
customerSpecificDeviations: 0,
123+
deniedDeviationsCount: 0,
156124
currentDeviations: [],
157125
acceptedDeviations: [],
158126
customerSpecificDeviationsList: [],
159-
deniedDeleteDeviationsList: [],
160-
deniedRemediateDeviationsList: [],
127+
deniedDeviationsList: [],
161128
latestDataCollection: null,
162129
}
163130
);
@@ -305,6 +272,14 @@ const ManageDriftPage = () => {
305272
label: "Status",
306273
value: getDeviationStatusText(statusOverride || deviation.Status || deviation.state),
307274
},
275+
{
276+
label: "Reason",
277+
value: deviation.Reason || "N/A",
278+
},
279+
{
280+
label: "User",
281+
value: deviation.lastChangedByUser || "N/A",
282+
},
308283
{
309284
label: "Last Updated",
310285
value: processedDriftData.latestDataCollection
@@ -325,13 +300,9 @@ const ManageDriftPage = () => {
325300
processedDriftData.customerSpecificDeviationsList,
326301
"customerspecific"
327302
);
328-
const deniedDeleteDeviationItems = createDeviationItems(
329-
processedDriftData.deniedDeleteDeviationsList,
330-
"denieddelete"
331-
);
332-
const deniedRemediateDeviationItems = createDeviationItems(
333-
processedDriftData.deniedRemediateDeviationsList,
334-
"deniedremediate"
303+
const deniedDeviationItems = createDeviationItems(
304+
processedDriftData.deniedDeviationsList,
305+
"denied"
335306
);
336307

337308
const handleMenuClick = (event, itemId) => {
@@ -712,54 +683,23 @@ const ManageDriftPage = () => {
712683
};
713684
});
714685

715-
// Add action buttons to denied delete deviation items
716-
const deniedDeleteDeviationItemsWithActions = deniedDeleteDeviationItems.map((item) => ({
686+
// Add action buttons to denied deviation items
687+
const deniedDeviationItemsWithActions = deniedDeviationItems.map((item) => ({
717688
...item,
718689
actionButton: (
719690
<>
720691
<Button
721692
variant="outlined"
722693
endIcon={<ExpandMore />}
723-
onClick={(e) => handleMenuClick(e, `denied-delete-${item.id}`)}
694+
onClick={(e) => handleMenuClick(e, `denied-${item.id}`)}
724695
size="small"
725696
>
726697
Actions
727698
</Button>
728699
<Menu
729-
anchorEl={anchorEl[`denied-delete-${item.id}`]}
730-
open={Boolean(anchorEl[`denied-delete-${item.id}`])}
731-
onClose={() => handleMenuClose(`denied-delete-${item.id}`)}
732-
>
733-
<MenuItem onClick={() => handleDeviationAction("accept", item)}>
734-
<Check sx={{ mr: 1, color: "success.main" }} />
735-
Accept
736-
</MenuItem>
737-
<MenuItem onClick={() => handleDeviationAction("accept-customer-specific", item)}>
738-
<CheckCircle sx={{ mr: 1, color: "info.main" }} />
739-
Accept - Customer Specific
740-
</MenuItem>
741-
</Menu>
742-
</>
743-
),
744-
}));
745-
746-
// Add action buttons to denied remediate deviation items
747-
const deniedRemediateDeviationItemsWithActions = deniedRemediateDeviationItems.map((item) => ({
748-
...item,
749-
actionButton: (
750-
<>
751-
<Button
752-
variant="outlined"
753-
endIcon={<ExpandMore />}
754-
onClick={(e) => handleMenuClick(e, `denied-remediate-${item.id}`)}
755-
size="small"
756-
>
757-
Actions
758-
</Button>
759-
<Menu
760-
anchorEl={anchorEl[`denied-remediate-${item.id}`]}
761-
open={Boolean(anchorEl[`denied-remediate-${item.id}`])}
762-
onClose={() => handleMenuClose(`denied-remediate-${item.id}`)}
700+
anchorEl={anchorEl[`denied-${item.id}`]}
701+
open={Boolean(anchorEl[`denied-${item.id}`])}
702+
onClose={() => handleMenuClose(`denied-${item.id}`)}
763703
>
764704
<MenuItem onClick={() => handleDeviationAction("accept", item)}>
765705
<Check sx={{ mr: 1, color: "success.main" }} />
@@ -939,16 +879,6 @@ const ManageDriftPage = () => {
939879
</MenuItem>
940880
</Menu>
941881

942-
{/* What If Button */}
943-
<Button
944-
variant="outlined"
945-
endIcon={<ExpandMore />}
946-
onClick={(e) => setWhatIfAnchorEl(e.currentTarget)}
947-
size="small"
948-
startIcon={<Science />}
949-
>
950-
What If
951-
</Button>
952882
<Menu
953883
anchorEl={whatIfAnchorEl}
954884
open={Boolean(whatIfAnchorEl)}
@@ -969,6 +899,7 @@ const ManageDriftPage = () => {
969899
<CippBannerListCard
970900
items={deviationItemsWithActions}
971901
isCollapsible={true}
902+
layout={"single"}
972903
isFetching={driftApi.isFetching}
973904
/>
974905
</Box>
@@ -982,6 +913,7 @@ const ManageDriftPage = () => {
982913
<CippBannerListCard
983914
items={acceptedDeviationItemsWithActions}
984915
isCollapsible={true}
916+
layout={"single"}
985917
isFetching={driftApi.isFetching}
986918
/>
987919
</Box>
@@ -996,34 +928,22 @@ const ManageDriftPage = () => {
996928
<CippBannerListCard
997929
items={customerSpecificDeviationItemsWithActions}
998930
isCollapsible={true}
931+
layout={"single"}
999932
isFetching={driftApi.isFetching}
1000933
/>
1001934
</Box>
1002935
)}
1003936

1004-
{/* Denied Delete Deviations Section */}
1005-
{deniedDeleteDeviationItemsWithActions.length > 0 && (
1006-
<Box>
1007-
<Typography variant="h6" sx={{ mb: 2 }}>
1008-
Denied Deviations - Delete
1009-
</Typography>
1010-
<CippBannerListCard
1011-
items={deniedDeleteDeviationItemsWithActions}
1012-
isCollapsible={true}
1013-
isFetching={driftApi.isFetching}
1014-
/>
1015-
</Box>
1016-
)}
1017-
1018-
{/* Denied Remediate Deviations Section */}
1019-
{deniedRemediateDeviationItemsWithActions.length > 0 && (
937+
{/* Denied Deviations Section */}
938+
{deniedDeviationItemsWithActions.length > 0 && (
1020939
<Box>
1021940
<Typography variant="h6" sx={{ mb: 2 }}>
1022-
Denied Deviations - Remediate
941+
Denied Deviations
1023942
</Typography>
1024943
<CippBannerListCard
1025-
items={deniedRemediateDeviationItemsWithActions}
944+
items={deniedDeviationItemsWithActions}
1026945
isCollapsible={true}
946+
layout={"single"}
1027947
isFetching={driftApi.isFetching}
1028948
/>
1029949
</Box>
@@ -1037,6 +957,13 @@ const ManageDriftPage = () => {
1037957
<CippApiDialog
1038958
createDialog={createDialog}
1039959
title="Confirmation"
960+
fields={[
961+
{
962+
type: "textField",
963+
name: "reason",
964+
label: "Reason for change (Mandatory)",
965+
},
966+
]}
1040967
api={{
1041968
url: "/api/ExecUpdateDriftDeviation",
1042969
type: "POST",

0 commit comments

Comments
 (0)