Skip to content

Commit 2916ab3

Browse files
Propagate change request constraint id mapper
1 parent c9efa26 commit 2916ab3

File tree

3 files changed

+68
-31
lines changed

3 files changed

+68
-31
lines changed

frontend/src/hooks/api/getters/useChangeRequest/useChangeRequest.ts

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,11 @@ import { formatApiPath } from 'utils/formatPath';
33
import handleErrorResponses from '../httpErrorResponseHandler.js';
44
import type {
55
ChangeRequestType,
6-
IChangeRequestAddStrategy,
76
IChangeRequestFeature,
8-
IChangeRequestUpdateStrategy,
97
IFeatureChange,
108
} from 'component/changeRequest/changeRequest.types';
119
import { useMemo } from 'react';
12-
import { constraintId } from 'constants/constraintId.js';
13-
import { v4 as uuidv4 } from 'uuid';
14-
15-
const isAddStrategyChange = (
16-
change: IFeatureChange,
17-
): change is IChangeRequestAddStrategy => change.action === 'addStrategy';
18-
const isUpdateStrategyChange = (
19-
change: IFeatureChange,
20-
): change is IChangeRequestUpdateStrategy => change.action === 'updateStrategy';
21-
22-
const addConstraintIdsToFeatureChange = (change: IFeatureChange) => {
23-
if (isAddStrategyChange(change) || isUpdateStrategyChange(change)) {
24-
const { constraints, ...rest } = change.payload;
25-
return {
26-
...change,
27-
payload: {
28-
...rest,
29-
constraints: constraints.map((constraint) => ({
30-
...constraint,
31-
[constraintId]: uuidv4(),
32-
})),
33-
},
34-
} as IFeatureChange;
35-
}
36-
return change;
37-
};
10+
import { addConstraintIdsToFeatureChange } from 'utils/addConstraintIdsToFeatureChange.js';
3811

3912
export const useChangeRequest = (projectId: string, id: string) => {
4013
const { data, error, mutate } = useSWR<ChangeRequestType>(
@@ -60,8 +33,15 @@ export const useChangeRequest = (projectId: string, id: string) => {
6033
);
6134
}, [JSON.stringify(features)]);
6235

36+
const mappedData = data
37+
? {
38+
...dataProps,
39+
features: featuresWithConstraintIds,
40+
}
41+
: data;
42+
6343
return {
64-
data: { ...dataProps, features: featuresWithConstraintIds },
44+
data: mappedData,
6545
loading: !error && !data,
6646
refetchChangeRequest: () => mutate(),
6747
error,

frontend/src/hooks/api/getters/usePendingChangeRequests/usePendingChangeRequests.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import { formatApiPath } from 'utils/formatPath';
22
import handleErrorResponses from '../httpErrorResponseHandler.js';
3-
import type { ChangeRequestType } from 'component/changeRequest/changeRequest.types';
3+
import type {
4+
ChangeRequestType,
5+
IFeatureChange,
6+
} from 'component/changeRequest/changeRequest.types';
47
import { useEnterpriseSWR } from '../useEnterpriseSWR/useEnterpriseSWR.js';
8+
import { useMemo } from 'react';
9+
import { addConstraintIdsToFeatureChange } from 'utils/addConstraintIdsToFeatureChange.js';
510

611
const fetcher = (path: string) => {
712
return fetch(path)
@@ -16,8 +21,29 @@ export const usePendingChangeRequests = (project: string) => {
1621
fetcher,
1722
);
1823

24+
const mappedData: typeof data = useMemo(
25+
() =>
26+
data?.map((changeRequest) => {
27+
const { features, ...rest } = changeRequest || {};
28+
const featuresWithConstraintIds =
29+
features?.map((feature) => {
30+
const changes: IFeatureChange[] = feature.changes.map(
31+
addConstraintIdsToFeatureChange,
32+
);
33+
34+
return {
35+
...feature,
36+
changes,
37+
};
38+
}) ?? [];
39+
40+
return { ...rest, features: featuresWithConstraintIds };
41+
}),
42+
[JSON.stringify(data)],
43+
);
44+
1945
return {
20-
data,
46+
mappedData,
2147
loading: !error && !data,
2248
refetch: mutate,
2349
error,
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import type {
2+
IFeatureChange,
3+
IChangeRequestAddStrategy,
4+
IChangeRequestUpdateStrategy,
5+
} from 'component/changeRequest/changeRequest.types';
6+
import { constraintId } from 'constants/constraintId';
7+
import { v4 as uuidv4 } from 'uuid';
8+
9+
const isAddStrategyChange = (
10+
change: IFeatureChange,
11+
): change is IChangeRequestAddStrategy => change.action === 'addStrategy';
12+
const isUpdateStrategyChange = (
13+
change: IFeatureChange,
14+
): change is IChangeRequestUpdateStrategy => change.action === 'updateStrategy';
15+
16+
export const addConstraintIdsToFeatureChange = (change: IFeatureChange) => {
17+
if (isAddStrategyChange(change) || isUpdateStrategyChange(change)) {
18+
const { constraints, ...rest } = change.payload;
19+
return {
20+
...change,
21+
payload: {
22+
...rest,
23+
constraints: constraints.map((constraint) => ({
24+
...constraint,
25+
[constraintId]: uuidv4(),
26+
})),
27+
},
28+
} as IFeatureChange;
29+
}
30+
return change;
31+
};

0 commit comments

Comments
 (0)