fix(approvals): usertest-panel hardening (0.81.0)
Panel findings against the reworked approvals page, fixed in place: - Never fabricate the request time: ApprovalRecord.createdAt is nullable now; a missing created_at omits the line instead of rendering DateTime.now() (which drifted on refresh). Guard: approvals_origin_test pins the omit-on-null invariant. - Copyable errors on approve/reject/batch via showChainErrorSnack (the hard project rule) — batch surfaces the first real cause. - Reject requires a reason: ChainInlineHelp strip + confirm disabled while empty, no more silent close-and-nothing-happens. - Batch approve applies the same no-data confirmation as the single path, naming how many selected requests carry no show: data. - Plainer language: glossary "Vorgang (Flow)", history label FRAGE (was PROMPT), no-data hint drops developer jargon. - One-click copy of the run id; history payload pretty-prints like the card. Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
parent
28f6fe1a9a
commit
f7d7427d91
9 changed files with 411 additions and 122 deletions
|
|
@ -3521,7 +3521,7 @@ abstract class AppLocalizations {
|
|||
/// No description provided for @approvalsNoPayload.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'No data was attached for review. The flow\'s approval step chooses what to show via its \"show:\" field — set it to surface the data behind this decision.'**
|
||||
/// **'No data was attached to this approval. You are deciding without a detail view — when in doubt, ask whoever set up the process. (Technical: the approval step\'s \"show:\" field controls what appears here.)'**
|
||||
String get approvalsNoPayload;
|
||||
|
||||
/// No description provided for @approvalsNoDataConfirmTitle.
|
||||
|
|
@ -3557,9 +3557,51 @@ abstract class AppLocalizations {
|
|||
/// No description provided for @approvalsIntroHelp.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Paused flows waiting for your decision. Each card shows which flow is holding at which step and what data it puts in front of you — Approve resumes the flow, Reject stops it with your reason.'**
|
||||
/// **'Paused processes (flows) waiting for your decision. Each card shows which process is holding at which step and what data it puts in front of you — Approve resumes it, Reject stops it with your reason.'**
|
||||
String get approvalsIntroHelp;
|
||||
|
||||
/// No description provided for @approvalsRejectDialogHelp.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Rejecting stops the process at this step and is recorded with your reason in the audit trail.'**
|
||||
String get approvalsRejectDialogHelp;
|
||||
|
||||
/// No description provided for @approvalsRejectReasonHelper.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Required — recorded in the audit log.'**
|
||||
String get approvalsRejectReasonHelper;
|
||||
|
||||
/// No description provided for @approvalsBatchNoDataTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Approve without review data?'**
|
||||
String get approvalsBatchNoDataTitle;
|
||||
|
||||
/// No description provided for @approvalsBatchNoDataBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{count, plural, =1{1 of {total} selected approvals has no review data. You are approving it without a detail view.} other{{count} of {total} selected approvals have no review data. You are approving them without a detail view.}}'**
|
||||
String approvalsBatchNoDataBody(num count, Object total);
|
||||
|
||||
/// No description provided for @approvalsCopyRun.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Copy run id'**
|
||||
String get approvalsCopyRun;
|
||||
|
||||
/// No description provided for @approvalsRunCopied.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Run id copied'**
|
||||
String get approvalsRunCopied;
|
||||
|
||||
/// No description provided for @approvalsUnknownReviewer.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'(unknown)'**
|
||||
String get approvalsUnknownReviewer;
|
||||
|
||||
/// No description provided for @approvalsOriginLabel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -3617,7 +3659,7 @@ abstract class AppLocalizations {
|
|||
/// No description provided for @approvalsRejectReasonLabel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Reason (recorded in audit log)'**
|
||||
/// **'Reason'**
|
||||
String get approvalsRejectReasonLabel;
|
||||
|
||||
/// No description provided for @approvalsApprovedToast.
|
||||
|
|
@ -3677,7 +3719,7 @@ abstract class AppLocalizations {
|
|||
/// No description provided for @approvalsDialogPrompt.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'PROMPT'**
|
||||
/// **'QUESTION'**
|
||||
String get approvalsDialogPrompt;
|
||||
|
||||
/// No description provided for @approvalsExpiresIn.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue