import React from 'react' import { Box, Text } from 'ink' import { Surface } from '../../../ui/Surface.js' import { Select } from '../../../ui/Select.js' import { TextInput } from '../../../ui/TextInput.js' import { TextArea } from '../../../ui/TextArea.js' import { theme } from '../../../ui/theme.js' import type { AgentEnsRecordState, AgentEnsRecords } from '../../ens/agentRecords.js' import type { EnsSetupPlan } from '../../ens/ensAutomation.js' import type { Step } from '../reducer.js' import { readIdentityStateString } from '../custody/state.js' import { validateAgentIconReference } from '../../profile/agentIcon.js' import { EnsEditFlow, type EnsLinkOptions } from '../ens/EnsEditFlow.js' import type { AgentReconciliation } from '../shared/reconciliation/index.js' type EditProfileStepKind = | 'edit-profile-menu' | 'edit-profile-name' | 'edit-profile-description' | 'edit-profile-image' | 'edit-profile-review' | 'edit-profile-ens' type EditProfileFlowProps = { step: Extract reconciliation: AgentReconciliation onSelectField: (field: 'name' | 'description' | 'image') => void onSaveProfile: () => void onNameSubmit: (name: string) => void onDescriptionSubmit: (description: string) => void onIconSubmit: (iconPath?: string) => void onIconPick: () => void onReviewSave: () => void onEnsLink: (fullName: string, options: EnsLinkOptions) => void onEnsUnlink: () => void onEnsRecordsUpdate: (fullName: string, records: AgentEnsRecords, options: EnsLinkOptions, clearRecords?: boolean, currentRecords?: AgentEnsRecordState) => void onEnsSetup: (setup: EnsSetupPlan) => void onManageOperatorWalletAccess: () => void onBack: () => void onMenu: () => void onBackToEditMenu: () => void } const footerHint = (hint: string) => {hint} export const EditProfileFlow: React.FC = ({ step, reconciliation, onSelectField, onSaveProfile, onNameSubmit, onDescriptionSubmit, onIconSubmit, onIconPick, onReviewSave, onEnsLink, onEnsUnlink, onEnsRecordsUpdate, onEnsSetup, onManageOperatorWalletAccess, onBack, onMenu, onBackToEditMenu, }) => { if (step.kind === 'edit-profile-menu') { return } if (step.kind === 'edit-profile-name') { const currentName = step.name ?? readIdentityStateString(step.identity.state, 'name') return ( Saved: {readIdentityStateString(step.identity.state, 'name') || '(unnamed)'} value.trim().length >= 2 ? null : 'name must be at least 2 characters'} onSubmit={value => onNameSubmit(value.trim())} onCancel={onBackToEditMenu} /> ) } if (step.kind === 'edit-profile-image') { return } if (step.kind === 'edit-profile-review') { return } if (step.kind === 'edit-profile-ens') { return ( ) } const currentDescription = readIdentityStateString(step.identity.state, 'description') const draftDescription = step.description ?? currentDescription return ( Saved: {currentDescription || '(no description)'}