@@ -30,6 +30,7 @@ import {
3030 composeValidator,
3131 buildCheckboxValidator,
3232 buildPatqValidator,
33+ buildShardValidator,
3334 buildPassphraseValidator,
3435 buildPointValidator,
3536} from 'form/validators';
@@ -107,6 +108,14 @@ export default function Ticket({ className, goHome }) {
107108 if (errors.shard1 || errors.shard2 || errors.shard3) {
108109 return errors;
109110 }
111+ const empty = ['shard1', 'shard2', 'shard3'].filter(s => !values[s]);
112+ if (empty.length > 1) {
113+ let errors = {};
114+ empty.map(s => {
115+ errors[s] = 'Please provide at least two out of three shards.';
116+ });
117+ return errors;
118+ }
110119 } else {
111120 if (errors.ticket) {
112121 return errors;
@@ -117,7 +126,11 @@ export default function Ticket({ className, goHome }) {
117126 const onSubmit = useCallback(
118127 async values => {
119128 const ticket = values.useShards
120− ? kg.combine([values.shard1, values.shard2, values.shard3])
129+ ? kg.combine(
130+ [values.shard1, values.shard2, values.shard3].map(v =>
131+ v === '' ? undefined : v
132+ )
133+ )
121134 : values.ticket;
122135
123136 try {
@@ -177,9 +190,9 @@ export default function Ticket({ className, goHome }) {
177190 useShards: buildCheckboxValidator(),
178191 point: buildPointValidator(4),
179192 ticket: buildPatqValidator(),
180− shard1: buildPatqValidator(),
181− shard2: buildPatqValidator(),
182− shard3: buildPatqValidator(),
193+ shard1: buildShardValidator(),
194+ shard2: buildShardValidator(),
195+ shard3: buildShardValidator(),
183196 ticketHidden: buildCheckboxValidator(),
184197 passphrase: buildPassphraseValidator(),
185198 },