TanStackT
TanStack7mo ago
16 replies
brilliant-lime

Late validation on linked field

I am facing an strange issue in my Form using zod and refine a schemaa.
1. I have this schema

 z
    .number({
      required_error: t('widgets.orderExecution.errors.triggerPriceRequired', {
        defaultValue: 'Trigger price is required',
      }),
      invalid_type_error: t(
        'widgets.orderExecution.errors.triggerPriceInvalid',
        {
          defaultValue: 'Please enter a valid trigger price',
        }
      ),
    })
    .positive({
      message: t('widgets.orderExecution.errors.triggerPriceMin0', {
        defaultValue: 'Trigger price must be greater than 0',
      }),
    })
    .min(price, {
      message: t('widgets.orderExecution.errors.triggerPriceMin', {
        defaultValue: 'Trigger price must be greater than current price',
      }),
    })
    .refine(
      (val: number) => {
        const strValue = val.toString();
        const decimalParts = strValue.split('.');
        if (decimalParts.length === 2) {
          return is3decimalPrice
            ? decimalParts[1].length <= 3
            : decimalParts[1].length <= 2;
        }
        return true;
      },
      {
        message: t('widgets.orderExecution.errors.triggerPriceDecimalPlaces', {
          decimalPlaces: is3decimalPrice ? 3 : 2,
          defaultValue: `Trigger price can have maximum ${is3decimalPrice ? 3 : 2} decimal places`,
        }),
      }
    );


that is defined in an function called takeProfitTriggerPriceShcema that retunrs zod schema

any i have two fields, Price and TriggerPrice i want everytime the price input changes to trigger validations on triggerPrice,
so i did this using linked fields
Was this page helpful?