Skip to content

Commit d4dfdab

Browse files
authored
Ensure current weight of selected SV is displayed in proposal form (#2437)
Signed-off-by: fayi-da <fayimora.femibalogun@digitalasset.com>
1 parent d275dc9 commit d4dfdab

File tree

3 files changed

+48
-5
lines changed

3 files changed

+48
-5
lines changed

apps/sv/frontend/src/__tests__/governance/forms/update-sv-reward-weight-form-test.test.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,34 @@ describe('Update SV Reward Weight Form', () => {
199199
);
200200
});
201201

202+
test('Current weight of selected SV is shown', async () => {
203+
const user = userEvent.setup();
204+
205+
render(
206+
<Wrapper>
207+
<UpdateSvRewardWeightForm />
208+
</Wrapper>
209+
);
210+
211+
const memberDropdown = screen.getByTestId('update-sv-reward-weight-member-dropdown');
212+
expect(memberDropdown).toBeDefined();
213+
214+
const selectInput = screen.getByRole('combobox');
215+
216+
const validateCurrentWeightFor = async (sv: string, weight: string) => {
217+
await waitFor(async () => {
218+
fireEvent.mouseDown(selectInput);
219+
const memberToSelect = screen.getByText(sv);
220+
expect(memberToSelect).not.toBeNull();
221+
await user.click(memberToSelect);
222+
expect(await screen.findByText(`Current Weight: ${weight}`)).toBeDefined();
223+
});
224+
};
225+
226+
await validateCurrentWeightFor('Digital-Asset-2', '10');
227+
await validateCurrentWeightFor('Digital-Asset-Eng-2', '12345');
228+
});
229+
202230
test('Weight must be a valid number', async () => {
203231
const user = userEvent.setup();
204232
render(

apps/sv/frontend/src/components/form-components/TextField.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ import { useFieldContext } from '../../hooks/formContext';
1212
export interface TextFieldProps {
1313
id: string;
1414
title: string;
15+
subtitle?: string;
1516
muiTextFieldProps?: MuiTextFieldProps;
1617
}
1718

1819
export const TextField: React.FC<TextFieldProps> = props => {
19-
const { title, id, muiTextFieldProps } = props;
20+
const { title, subtitle, id, muiTextFieldProps } = props;
2021
const field = useFieldContext<string>();
2122
return (
2223
<Box>
@@ -40,6 +41,11 @@ export const TextField: React.FC<TextFieldProps> = props => {
4041
inputProps={{ 'data-testid': id }}
4142
{...muiTextFieldProps}
4243
/>
44+
{subtitle && (
45+
<Typography variant="body2" color="text.secondary" data-testid={`${id}-subtitle`} mt={1}>
46+
{subtitle}
47+
</Typography>
48+
)}
4349
</Box>
4450
);
4551
};

apps/sv/frontend/src/components/forms/UpdateSvRewardWeightForm.tsx

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,6 @@ export const UpdateSvRewardWeightForm: React.FC = _ => {
4747
[dsoInfosQuery]
4848
);
4949

50-
const svPartyId = dsoInfosQuery.data?.svPartyId || '';
51-
const currentWeight = getSvRewardWeight(svs, svPartyId);
52-
5350
const svOptions: { key: string; value: string }[] = useMemo(
5451
() => svs.map(([partyId, svInfo]) => ({ key: svInfo.name, value: partyId })),
5552
[svs]
@@ -108,6 +105,12 @@ export const UpdateSvRewardWeightForm: React.FC = _ => {
108105
},
109106
});
110107

108+
const selectedSv = svOptions.find(o => o.value === form.state.values.sv);
109+
110+
const currentWeight = useMemo(() => {
111+
return getSvRewardWeight(svs, selectedSv?.value || '');
112+
}, [svs, selectedSv]);
113+
111114
return (
112115
<>
113116
<FormLayout form={form} id="update-sv-reward-weight-form">
@@ -212,7 +215,13 @@ export const UpdateSvRewardWeightForm: React.FC = _ => {
212215
onChange: ({ value }) => validateWeight(value),
213216
}}
214217
>
215-
{field => <field.TextField title="Weight" id="update-sv-reward-weight-weight" />}
218+
{field => (
219+
<field.TextField
220+
title="Weight"
221+
id="update-sv-reward-weight-weight"
222+
subtitle={selectedSv ? `Current Weight: ${currentWeight}` : undefined}
223+
/>
224+
)}
216225
</form.AppField>
217226
</>
218227
)}

0 commit comments

Comments
 (0)