Как устранить ошибку сообщения формата FORMAT_ERROR, передавая значение в строковое сообщение

В моем приложении React я должен добавить сообщение для окна подтверждения, которое выглядит следующим образом в моем файле message.js

confirmChangeMessage: {
    id: 'Candidate.confirmChangeMessage',
    defaultMessage: 'Change from {previous} to {newValue}',
  },

previous и newValue - это значения, которые я передаю в функцию для составления сообщения, как показано ниже

const onFieldChange = (e, fieldName) => {
    setOnFieldChangeConfirm(() => () => onChange(fieldName, e.target.value));
    setConfirmMsg(
      `${formatMessage(messages.confirmChangeMessage, {
        previous: candidate[fieldName],
        newValue: e.target.value,
      })}`,
    );
    setConfirmDialog(true);
  };

Но запустив это, я получаю следующую ошибку:

VM439 react_devtools_backend.js:2273 Error: [React Intl Error FORMAT_ERROR] Error formatting the default message for: "Candidate.confirmChangeMessage" 
Error: The intl string context variable "previous" was not provided to the string "Change from {previous} to {newValue}"

Я не знаю, как решить эту ситуацию, что мне не хватает. Должен ли я добавить для этого в этот файл специальную функцию или что-то еще?

Весь файл как ссылка

import React, { useState } from 'react';
import { MenuItem, Grid, FormControl } from '@material-ui/core';
import { useTheme } from '@material-ui/core/styles';
import useMediaQuery from '@material-ui/core/useMediaQuery';
import { func, string, shape, arrayOf } from 'prop-types';
import messages from '../Candidate/Messages.js';
import SelectControl from '../HelperComponents/SelectControl';
import ConfirmDialog from '../Dialogs/ConfirmDialog';

const ContactHours = ({
  formatMessage,
  candidate,
  preferredContactWayVal,
  onChange,
  timezone,
  preferredContactHoursVal,
  formatTimeInterval,
  formatTime,
}) => {
  const { preferredContactHours, preferredContactWay } = candidate;

  const [confirmDialog, setConfirmDialog] = useState(false);
  const [confirmMsg, setConfirmMsg] = useState('');

  const [
    onFieldChangeConfirm,
    setOnFieldChangeConfirm,
  ] = useState(() => () => {});

  const theme = useTheme();
  const isLarge = useMediaQuery(theme.breakpoints.up('xl'));

  const onFieldChange = (e, fieldName) => {
    setOnFieldChangeConfirm(() => () => onChange(fieldName, e.target.value));
    setConfirmMsg(
      `${formatMessage(messages.confirmChangeMessage, {
        previous: candidate[fieldName],
        newValue: e.target.value,
      })}`,
    );
    setConfirmDialog(true);
  };
  // candidate[fieldName]
  // e.target.value
  // message={confirmMsg}

  return (
    <Grid container spacing={isLarge ? 2 : 0}>
      <Grid item xs={12} xl={8}>
        <FormControl margin="normal" fullWidth>
          <SelectControl
            value={preferredContactHours}
            label={formatMessage(messages.preferredContactHours)}
            placeholder={formatMessage(messages.preferredContactHours)}
            onChange={e => onFieldChange(e, 'preferredContactHours')}
          >
            {preferredContactHoursVal.map(slot => (
              <MenuItem key={Number(slot.id)} value={slot.value}>
                {formatTimeInterval(slot.value, formatTime)} {timezone}
              </MenuItem>
            ))}
          </SelectControl>
        </FormControl>
      </Grid>
      <Grid item xs={12} xl={4}>
        <FormControl margin="normal" fullWidth>
          <SelectControl
            value={preferredContactWay || 'Phone call'}
            label={formatMessage(messages.preferredContactWay)}
            placeholder={formatMessage(messages.preferredContactWay)}
            onChange={e => onFieldChange(e, 'preferredContactWay')}
          >
            {preferredContactWayVal.map(slot => (
              <MenuItem key={Number(slot.id)} value={slot.value}>
                {slot.value}
              </MenuItem>
            ))}
          </SelectControl>
        </FormControl>
      </Grid>
      {confirmDialog && (
        <ConfirmDialog
          open={confirmDialog}
          closeDialog={() => setConfirmDialog(false)}
          title={formatMessage(messages.confirmChangeTitle)}
          message={confirmMsg}
          handleClick={confirmed => {
            if (confirmed) {
              onFieldChangeConfirm();
            }
          }}
        />
      )}
    </Grid>
  );
};

ContactHours.propTypes = {
  formatMessage: func.isRequired,
  candidate: shape({
    preferredContactHours: string,
  }),
  preferredContactHoursVal: arrayOf(
    shape({
      id: string,
      value: string,
    }),
  ),
  preferredContactWayVal: arrayOf(
    shape({
      id: string,
      value: string,
    }),
  ),
  preferredContactWay: string,
  onChange: func,
  formatTimeInterval: func,
  formatTime: func,
  timezone: string,
};

ContactHours.defaultProps = {
  preferredContactWay: '',
  candidate: {},
  onChange: () => {},
  formatTimeInterval: () => {},
  formatTime: () => {},
  timezone: '',
  preferredContactHoursVal: [],
  preferredContactWayVal: [],
};

export default ContactHours;

0 ответов

Другие вопросы по тегам