feat: implemented form lifecycle hool and state machine
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import * as React from 'react';
|
||||
import { Button } from '../Button/Button';
|
||||
import { Icon } from '../Icon/Icon';
|
||||
import { FormActions } from '../FormActions/FormActions';
|
||||
import { IRequestSubmit } from '../useRequestSubmit';
|
||||
|
||||
export interface ISubmitActionsProps {
|
||||
submit: IRequestSubmit;
|
||||
isValid: boolean;
|
||||
/** Заявка в нередактируемом статусе (На согласовании/…): сохранять нельзя. */
|
||||
readOnly: boolean;
|
||||
onCancel: () => void;
|
||||
onSaveDraft: () => void;
|
||||
onSubmit: () => void;
|
||||
/** Подпись основной кнопки. По умолчанию — «Отправить на согласование». */
|
||||
submitLabel?: string;
|
||||
}
|
||||
|
||||
// Единый ряд кнопок форм подачи: Отмена / Сохранить черновик / Отправить.
|
||||
// Логика доступности — здесь, в одном месте, чтобы все формы вели себя одинаково:
|
||||
// • сохранять/отправлять нельзя, пока идёт сохранение или заявка уже read-only;
|
||||
// • «Отмена» доступна всегда (возврат к списку), кроме момента сохранения.
|
||||
export const SubmitActions: React.FC<ISubmitActionsProps> = ({
|
||||
submit,
|
||||
isValid,
|
||||
readOnly,
|
||||
onCancel,
|
||||
onSaveDraft,
|
||||
onSubmit,
|
||||
submitLabel = 'Отправить на согласование',
|
||||
}) => {
|
||||
const { saving, kind } = submit;
|
||||
const locked = saving || readOnly;
|
||||
|
||||
return (
|
||||
<FormActions>
|
||||
<Button variant="secondary" onClick={onCancel} disabled={saving}>
|
||||
Отмена
|
||||
</Button>
|
||||
<Button variant="secondary" onClick={onSaveDraft} disabled={!isValid || locked}>
|
||||
<Icon name="document" size="sm" />
|
||||
Сохранить черновик
|
||||
</Button>
|
||||
<Button variant="accent" onClick={onSubmit} disabled={!isValid || locked}>
|
||||
<Icon name="send" size="sm" />
|
||||
{saving && kind === 'submit' ? 'Отправка…' : submitLabel}
|
||||
</Button>
|
||||
</FormActions>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user