Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz> Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/16
This commit was merged in pull request #16.
This commit is contained in:
@@ -33,6 +33,17 @@ interface IDecisionPanelProps {
|
||||
search?: (query: string) => Promise<ISiteUser[]>;
|
||||
/** Вызывается после успешного переназначения (обновить экран/матрицу). */
|
||||
onDelegated?: () => void;
|
||||
/**
|
||||
* Дополнительное условие обязательности комментария — СВЕРХ обычного
|
||||
* «возврат/отклонение». Форме есть что объяснять не только при отказе:
|
||||
* например, «Обходной лист» требует его на ЛЮБОЕ решение, если согласующий
|
||||
* только что заполнил сумму к списанию — своего поля «за что конкретно» у
|
||||
* формы нет, вместо него используется этот самый комментарий (см.
|
||||
* ClearanceView.writeOffTouchedCategories).
|
||||
*/
|
||||
commentRequired?: boolean;
|
||||
/** Переопределить плейсхолдер поля комментария (по умолчанию — про возврат/отклонение). */
|
||||
commentPlaceholder?: string;
|
||||
}
|
||||
|
||||
// Панель решения текущего шага: согласующий (Согласовать/Вернуть/Отклонить) или
|
||||
@@ -45,6 +56,8 @@ export const DecisionPanel: React.FC<IDecisionPanelProps> = ({
|
||||
onBeforeDecide,
|
||||
search,
|
||||
onDelegated,
|
||||
commentRequired,
|
||||
commentPlaceholder,
|
||||
}) => {
|
||||
const [checking, setChecking] = useState<boolean>(true);
|
||||
const [pendingRow, setPendingRow] = useState<IPendingRow | undefined>(undefined);
|
||||
@@ -84,10 +97,15 @@ export const DecisionPanel: React.FC<IDecisionPanelProps> = ({
|
||||
if (!pendingRow) {
|
||||
return;
|
||||
}
|
||||
if ((decision === 'return' || decision === 'reject') && comment.trim().length === 0) {
|
||||
const commentEmpty = comment.trim().length === 0;
|
||||
if (commentEmpty && (decision === 'return' || decision === 'reject')) {
|
||||
setError('Для возврата или отклонения укажите комментарий.');
|
||||
return;
|
||||
}
|
||||
if (commentEmpty && commentRequired) {
|
||||
setError('Укажите комментарий.');
|
||||
return;
|
||||
}
|
||||
setError(null);
|
||||
setSubmitting(true);
|
||||
try {
|
||||
@@ -300,12 +318,12 @@ export const DecisionPanel: React.FC<IDecisionPanelProps> = ({
|
||||
<div className={styles.panel}>
|
||||
<div className={styles.title}>Ваше решение</div>
|
||||
{error && <Alert variant="err">{error}</Alert>}
|
||||
<FormField label="Комментарий" htmlFor="decisionComment">
|
||||
<FormField label="Комментарий" htmlFor="decisionComment" required={commentRequired}>
|
||||
<TextArea
|
||||
id="decisionComment"
|
||||
value={comment}
|
||||
onChange={setComment}
|
||||
placeholder="Комментарий (обязателен при возврате или отклонении)"
|
||||
placeholder={commentPlaceholder || 'Комментарий (обязателен при возврате или отклонении)'}
|
||||
/>
|
||||
</FormField>
|
||||
<div className={styles.actions}>
|
||||
|
||||
Reference in New Issue
Block a user