Skip to content

Commit 16d0403

Browse files
committed
web: Select all buttons
1 parent cb39158 commit 16d0403

File tree

3 files changed

+68
-13
lines changed

3 files changed

+68
-13
lines changed

web/renderer/components/pageComponents/DatabasePage/ForPulls/PullActions/Merge/ResolveModal/index.module.css

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@
1010
}
1111
}
1212

13+
.selectAllButtons {
14+
@apply mb-3 mt-4;
15+
16+
button {
17+
@apply px-0 mr-6 text-base;
18+
}
19+
}
20+
21+
.bold {
22+
@apply font-bold;
23+
}
24+
1325
.tableResolve {
1426
@apply flex;
1527
}

web/renderer/components/pageComponents/DatabasePage/ForPulls/PullActions/Merge/ResolveModal/index.tsx

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,19 @@ type Props = ModalProps & {
2222
};
2323

2424
export default function ResolveModal(props: Props) {
25+
function setResolutionAllTables(resType: ConflictResolveType) {
26+
const tablesToResolve = new Map(
27+
[...props.state.tablesToResolve.keys()].map(t => [t, resType]),
28+
);
29+
props.setState({ tablesToResolve });
30+
}
31+
32+
function setResolutionOneTable(table: string, resType: ConflictResolveType) {
33+
const tablesToResolve = props.state.tablesToResolve;
34+
tablesToResolve.set(table, resType);
35+
props.setState({ tablesToResolve });
36+
}
37+
2538
return (
2639
<Modal
2740
title="Resolve Conflicts and Merge"
@@ -42,6 +55,24 @@ export default function ResolveModal(props: Props) {
4255
To merge this pull request, choose a conflict resolution strategy for
4356
all tables or each individual table:
4457
</p>
58+
<div className={css.selectAllButtons}>
59+
<Button.Link
60+
onClick={() => {
61+
setResolutionAllTables(ConflictResolveType.Ours);
62+
}}
63+
underlined
64+
>
65+
Select <span className={css.bold}>ours</span> for all
66+
</Button.Link>
67+
<Button.Link
68+
onClick={() => {
69+
setResolutionAllTables(ConflictResolveType.Theirs);
70+
}}
71+
underlined
72+
>
73+
Select <span className={css.bold}>theirs</span> for all
74+
</Button.Link>
75+
</div>
4576
<ul>
4677
{[...props.state.tablesToResolve.entries()].map(
4778
([table, resType]) => (
@@ -53,9 +84,7 @@ export default function ResolveModal(props: Props) {
5384
name={`ours-${table}`}
5485
checked={resType === ConflictResolveType.Ours}
5586
onChange={() => {
56-
const tablesToResolve = props.state.tablesToResolve;
57-
tablesToResolve.set(table, ConflictResolveType.Ours);
58-
props.setState({ tablesToResolve });
87+
setResolutionOneTable(table, ConflictResolveType.Ours);
5988
}}
6089
className={css.radio}
6190
/>
@@ -64,9 +93,7 @@ export default function ResolveModal(props: Props) {
6493
name={`theirs-${table}`}
6594
checked={resType === ConflictResolveType.Theirs}
6695
onChange={() => {
67-
const tablesToResolve = props.state.tablesToResolve;
68-
tablesToResolve.set(table, ConflictResolveType.Theirs);
69-
props.setState({ tablesToResolve });
96+
setResolutionOneTable(table, ConflictResolveType.Theirs);
7097
}}
7198
className={css.radio}
7299
/>

web/renderer/components/pageComponents/DatabasePage/ForPulls/PullActions/Merge/useMergeButton.ts

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,14 @@ export default function useMergeButton(params: PullDiffParams) {
5050
const disabled = hasConflicts;
5151

5252
useEffect(() => {
53-
if (conflictsRes.loading || !conflictsRes.data?.pullConflictsSummary) {
53+
if (
54+
conflictsRes.loading ||
55+
!conflictsRes.data?.pullConflictsSummary ||
56+
state.tablesToResolve.size > 0
57+
) {
5458
return;
5559
}
60+
5661
const tablesToResolve = state.tablesToResolve;
5762
conflictsRes.data.pullConflictsSummary.forEach(conflict => {
5863
tablesToResolve.set(conflict.tableName, ConflictResolveType.Ours);
@@ -86,12 +91,14 @@ export default function useMergeButton(params: PullDiffParams) {
8691
const { success } = await mergeWithResolve({
8792
variables: {
8893
...variables,
89-
resolveOursTables: Array.from(state.tablesToResolve)
90-
.filter(([, v]) => v === ConflictResolveType.Ours)
91-
.map(([k]) => k),
92-
resolveTheirsTables: Array.from(state.tablesToResolve)
93-
.filter(([, v]) => v === ConflictResolveType.Theirs)
94-
.map(([k]) => k),
94+
resolveOursTables: tableResolveMapToArray(
95+
state.tablesToResolve,
96+
ConflictResolveType.Ours,
97+
),
98+
resolveTheirsTables: tableResolveMapToArray(
99+
state.tablesToResolve,
100+
ConflictResolveType.Theirs,
101+
),
95102
author:
96103
state.addAuthor && userHeaders?.email && userHeaders.user
97104
? { name: userHeaders.user, email: userHeaders.email }
@@ -125,3 +132,12 @@ export default function useMergeButton(params: PullDiffParams) {
125132
},
126133
};
127134
}
135+
136+
function tableResolveMapToArray(
137+
resolveMap: Map<string, ConflictResolveType>,
138+
resolveType: ConflictResolveType,
139+
): string[] {
140+
return Array.from(resolveMap)
141+
.filter(([, v]) => v === resolveType)
142+
.map(([k]) => k);
143+
}

0 commit comments

Comments
 (0)