fix(rectification): hide option hover impact and composer step strip (BUG-575)
Hovering A/B/C/D rewrote a leading/lagging time line and made the card flicker; the step-state sentence above the composer was instructional filler, not something the user needed to answer. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -3083,23 +3083,11 @@ input:not([type="radio"]):not([type="checkbox"]):not([class^="ant-"]):not([class
|
||||
.rectification-choice-why-user p {
|
||||
margin: var(--space-2) 0 0;
|
||||
}
|
||||
.rectification-choice-impact {
|
||||
margin: var(--space-3) 0 0;
|
||||
color: var(--color-ink-secondary);
|
||||
font-size: var(--type-caption);
|
||||
line-height: 1.5;
|
||||
}
|
||||
.rectification-composer-meta {
|
||||
display: grid;
|
||||
gap: var(--space-3);
|
||||
margin: 0 0 var(--space-3);
|
||||
}
|
||||
.rectification-step-state {
|
||||
margin: 0;
|
||||
color: var(--color-ink-secondary);
|
||||
font-size: var(--type-caption);
|
||||
line-height: 1.5;
|
||||
}
|
||||
.rectification-composer-meta .rectification-collect-stop {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@@ -37,10 +37,8 @@ import {
|
||||
isRecommendedRectificationCandidate,
|
||||
natalRecastMeaning,
|
||||
parseRectificationCandidateResult,
|
||||
parseRectificationStepState,
|
||||
workingRectificationHouseTable,
|
||||
type RectificationCandidateResult,
|
||||
type RectificationStepState,
|
||||
} from "@/lib/rectification-candidate-result";
|
||||
import {
|
||||
diffRectificationBoard,
|
||||
@@ -435,7 +433,6 @@ type CaseSnapshotState = Readonly<{
|
||||
question: CurrentQuestionModel | null;
|
||||
questionSource: "focus" | "unavailable" | null;
|
||||
choice: ChoiceCardModel | null;
|
||||
stepState: RectificationStepState | null;
|
||||
caseStatus: RectificationCaseStatus | null;
|
||||
savedTime: string | null;
|
||||
savedStatus: "accepted" | "confirmed" | null;
|
||||
@@ -457,7 +454,6 @@ function caseSnapshotState(payload: RectificationCaseSnapshotPayload | null): Ca
|
||||
question: currentQuestionFromSnapshot(payload.current_question),
|
||||
questionSource: questionSourceFromSnapshot(payload.question_source),
|
||||
choice: parseRectificationChoiceCard(payload.choice_card),
|
||||
stepState: parseRectificationStepState(payload.step_state),
|
||||
caseStatus: isRectificationCaseStatus(payload.case?.status) ? payload.case.status : null,
|
||||
savedTime: confirmedTime ?? acceptedTime,
|
||||
savedStatus: confirmedTime ? "confirmed" : acceptedTime ? "accepted" : null,
|
||||
@@ -499,7 +495,6 @@ export function RectificationAgenticChat(props: RectificationAgenticChatProps) {
|
||||
const [savedStatus, setSavedStatus] = useState<"accepted" | "confirmed" | null>(() => caseSnapshotState(initialSnapshot)?.savedStatus ?? null);
|
||||
const [candidateResult, setCandidateResult] = useState<CandidateResult>(() => caseSnapshotState(initialSnapshot)?.candidate ?? null);
|
||||
const [choiceCard, setChoiceCard] = useState<ChoiceCardModel | null>(() => caseSnapshotState(initialSnapshot)?.choice ?? null);
|
||||
const [stepState, setStepState] = useState<RectificationStepState | null>(() => caseSnapshotState(initialSnapshot)?.stepState ?? null);
|
||||
const [currentQuestion, setCurrentQuestion] = useState<CurrentQuestionModel | null>(() => caseSnapshotState(initialSnapshot)?.question ?? null);
|
||||
const [questionSource, setQuestionSource] = useState<"focus" | "unavailable" | null>(() => caseSnapshotState(initialSnapshot)?.questionSource ?? null);
|
||||
const [caseStatus, setCaseStatus] = useState<RectificationCaseStatus | null>(() => caseSnapshotState(initialSnapshot)?.caseStatus ?? null);
|
||||
@@ -672,7 +667,6 @@ export function RectificationAgenticChat(props: RectificationAgenticChatProps) {
|
||||
setCurrentQuestion(nextQuestion);
|
||||
setQuestionSource(questionSourceFromSnapshot(payload.question_source));
|
||||
setChoiceCard(nextChoice);
|
||||
setStepState(parseRectificationStepState(payload.step_state));
|
||||
setCaseStatus(nextCaseStatus);
|
||||
setNextUserActionId(nextActionId || null);
|
||||
setCaseSnapshotLoaded(true);
|
||||
@@ -1772,13 +1766,8 @@ export function RectificationAgenticChat(props: RectificationAgenticChatProps) {
|
||||
<span className="rectification-adopt-status__hint">之后新建对话即按此时间排盘。</span>
|
||||
</div>
|
||||
)}
|
||||
<div className="rectification-composer-meta">
|
||||
{stepState ? (
|
||||
<p className="rectification-step-state" role="status">
|
||||
{stepState.headline} — {stepState.reason} — 下一步:{stepState.next}
|
||||
</p>
|
||||
) : null}
|
||||
{currentQuestion?.kind === "collect_spoken" && !readonly && !busy && (
|
||||
{currentQuestion?.kind === "collect_spoken" && !readonly && !busy && (
|
||||
<div className="rectification-composer-meta">
|
||||
<button
|
||||
type="button"
|
||||
className="rectification-collect-stop"
|
||||
@@ -1786,8 +1775,8 @@ export function RectificationAgenticChat(props: RectificationAgenticChatProps) {
|
||||
>
|
||||
{CHOICE_STOP_LABEL}
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<ChatComposer
|
||||
inputRef={composer}
|
||||
value={draft}
|
||||
|
||||
@@ -21,13 +21,8 @@ type RectificationChoiceCardProps = Readonly<{
|
||||
|
||||
export function RectificationChoiceCard(props: RectificationChoiceCardProps) {
|
||||
const [localSelected, setLocalSelected] = useState<ChoiceKey | "stop" | "skip_probe" | "">("");
|
||||
const [hoveredKey, setHoveredKey] = useState<ChoiceKey | "">("");
|
||||
const selectedKey = props.selectedKey || localSelected;
|
||||
const answered = Boolean(selectedKey);
|
||||
const impactKey = (selectedKey === "A" || selectedKey === "B" || selectedKey === "C" || selectedKey === "D"
|
||||
? selectedKey
|
||||
: hoveredKey) as ChoiceKey | "";
|
||||
const impactLine = impactKey ? props.card.answer_impact?.[impactKey] ?? "" : "";
|
||||
|
||||
function select(key: ChoiceKey) {
|
||||
if (props.pending || props.disabled || selectedKey) return;
|
||||
@@ -78,10 +73,6 @@ export function RectificationChoiceCard(props: RectificationChoiceCardProps) {
|
||||
type="button"
|
||||
className="birth-time-choice-option is-primary"
|
||||
data-selected={selectedKey === option.key ? "true" : "false"}
|
||||
onMouseEnter={() => setHoveredKey(option.key)}
|
||||
onMouseLeave={() => setHoveredKey("")}
|
||||
onFocus={() => setHoveredKey(option.key)}
|
||||
onBlur={() => setHoveredKey("")}
|
||||
onClick={() => select(option.key)}
|
||||
>
|
||||
<strong>{option.key}.</strong> {option.label}
|
||||
@@ -98,9 +89,6 @@ export function RectificationChoiceCard(props: RectificationChoiceCardProps) {
|
||||
</button>
|
||||
) : null}
|
||||
</div>
|
||||
{impactLine ? (
|
||||
<p className="rectification-choice-impact" role="status">{impactLine}</p>
|
||||
) : null}
|
||||
</fieldset>
|
||||
</section>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user