@@ -30,6 +30,7 @@ import {
30 composeValidator,
30 composeValidator,
31 buildCheckboxValidator,
31 buildCheckboxValidator,
32 buildPatqValidator,
32 buildPatqValidator,
33 buildPassphraseValidator,
34 buildPassphraseValidator,
34 buildPointValidator,
35 buildPointValidator,
35} from 'form/validators';
36} from 'form/validators';
@@ -107,6 +108,14 @@ export default function Ticket({ className, goHome }) {
107 if (errors.shard1 || errors.shard2 || errors.shard3) {
108 if (errors.shard1 || errors.shard2 || errors.shard3) {
108 return errors;
109 return errors;
111+ const empty = ['shard1', 'shard2', 'shard3'].filter(s => !values[s]);
112+ if (empty.length > 1) {
115+ errors[s] = 'Please provide at least two out of three shards.';
111 if (errors.ticket) {
120 if (errors.ticket) {
112 return errors;
121 return errors;
@@ -117,7 +126,11 @@ export default function Ticket({ className, goHome }) {
117 const onSubmit = useCallback(
126 const onSubmit = useCallback(
118 async values => {
127 async values => {
119 const ticket = values.useShards
128 const ticket = values.useShards
120− ? kg.combine([values.shard1, values.shard2, values.shard3])
130+ [values.shard1, values.shard2, values.shard3].map(v =>
131+ v === '' ? undefined : v
121 : values.ticket;
134 : values.ticket;
@@ -177,9 +190,9 @@ export default function Ticket({ className, goHome }) {
177 useShards: buildCheckboxValidator(),
190 useShards: buildCheckboxValidator(),
178 point: buildPointValidator(4),
191 point: buildPointValidator(4),
179 ticket: buildPatqValidator(),
192 ticket: buildPatqValidator(),
180− shard1: buildPatqValidator(),
193+ shard1: buildShardValidator(),
181− shard2: buildPatqValidator(),
194+ shard2: buildShardValidator(),
182− shard3: buildPatqValidator(),
195+ shard3: buildShardValidator(),
183 ticketHidden: buildCheckboxValidator(),
196 ticketHidden: buildCheckboxValidator(),
184 passphrase: buildPassphraseValidator(),
197 passphrase: buildPassphraseValidator(),