Files
nice-app-web/src/entities/transaction/ui/cash-receipt-hand-written-issuance-step1.tsx

148 lines
5.6 KiB
TypeScript

import { ChangeEvent } from 'react';
import { PATHS } from '@/shared/constants/paths';
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
import { useSetOnBack } from '@/widgets/sub-layout/use-sub-layout';
import { CashReceiptPurposeType } from '../model/types';
import { PatternFormat } from 'react-number-format';
import { useTranslation } from 'react-i18next';
import { useKeyboardAware } from '@/shared/lib/hooks/use-keyboard-aware';
export interface CashReceiptHandWrittenIssuanceStep1Props {
businessNumber?: string;
purposeType?: CashReceiptPurposeType;
productName?: string;
buyerName?: string;
issueNumber?: string;
email?: string;
phoneNumber?: string;
setBusinessNumber: (businessNumber: string) => void;
setPurposeType: (purposeType: CashReceiptPurposeType) => void;
setProductName: (productName: string) => void;
setBuyerName: (buyerName: string) => void;
setIssueNumber: (issueNumber: string) => void;
setEmail: (email: string) => void;
setPhoneNumber: (phoneNumber: string) => void;
};
export const CashReceiptHandWrittenIssuanceStep1 = ({
businessNumber,
purposeType,
productName,
buyerName,
issueNumber,
email,
phoneNumber,
setBusinessNumber,
setPurposeType,
setProductName,
setBuyerName,
setIssueNumber,
setEmail,
setPhoneNumber
}: CashReceiptHandWrittenIssuanceStep1Props) => {
const { t } = useTranslation();
const { navigate } = useNavigate();
const { handleInputFocus, keyboardAwarePadding } = useKeyboardAware();
useSetOnBack(() => {
navigate(PATHS.transaction.cashReceipt.list);
});
return (
<>
<h2 className="issue-title">{t('transaction.handWrittenIssuance.step1Title')}</h2>
<div className="issue-form">
<div className="issue-row">
<div className="issue-label">{t('transaction.handWrittenIssuance.businessNumber')}</div>
<div className="issue-field">
<input
className="error"
type="text"
value={businessNumber}
readOnly={true}
/>
</div>
</div>
<div className="issue-row">
<div className="issue-label">{t('transaction.fields.purpose')}</div>
<div className="issue-field">
<div className="seg-buttons">
<button
className={`btn-40 ${(purposeType === CashReceiptPurposeType.INCOME_DEDUCTION) ? 'btn-blue' : 'btn-white'}`}
type="button"
onClick={() => setPurposeType(CashReceiptPurposeType.INCOME_DEDUCTION)}
>{t('transaction.handWrittenIssuance.incomeDeduction')}</button>
<button
className={`btn-40 ${(purposeType === CashReceiptPurposeType.EXPENSE_PROOF) ? 'btn-blue' : 'btn-white'}`}
type="button"
onClick={() => setPurposeType(CashReceiptPurposeType.EXPENSE_PROOF)}
>{t('transaction.handWrittenIssuance.expenseProof')}</button>
</div>
</div>
</div>
<div className="issue-row">
<div className="issue-label">{t('transaction.fields.productName')}</div>
<div className="issue-field">
<input
type="text"
placeholder={t('transaction.handWrittenIssuance.productNamePlaceholder')}
value={productName}
onChange={(e: ChangeEvent<HTMLInputElement>) => setProductName(e.target.value)}
onFocus={handleInputFocus}
/>
</div>
</div>
<div className="issue-row">
<div className="issue-label">{t('transaction.fields.buyer')}</div>
<div className="issue-field">
<input
type="text"
placeholder={t('transaction.handWrittenIssuance.buyerNamePlaceholder')}
value={buyerName}
onChange={(e: ChangeEvent<HTMLInputElement>) => setBuyerName(e.target.value)}
onFocus={handleInputFocus}
/>
</div>
</div>
<div className="issue-row">
<div className="issue-label">{t('transaction.fields.issueNumber')}</div>
<div className="issue-field">
<PatternFormat
placeholder={t('transaction.handWrittenIssuance.issueNumberPlaceholder')}
value={issueNumber}
valueIsNumericString
format="###########"
onChange={(e: ChangeEvent<HTMLInputElement>) => setIssueNumber(e.target.value)}
onFocus={handleInputFocus}
></PatternFormat>
</div>
</div>
<div className="issue-row">
<div className="issue-label">{t('account.emailAddress')}</div>
<div className="issue-field">
<input
type="email"
placeholder={t('transaction.handWrittenIssuance.emailPlaceholder')}
value={email}
onChange={(e: ChangeEvent<HTMLInputElement>) => setEmail(e.target.value)}
onFocus={handleInputFocus}
/>
</div>
</div>
<div className="issue-row" style={keyboardAwarePadding}>
<div className="issue-label">{t('account.phoneNumber')}</div>
<div className="issue-field">
<PatternFormat
placeholder={t('transaction.handWrittenIssuance.phoneNumberPlaceholder')}
value={phoneNumber}
valueIsNumericString
format="###########"
onChange={(e: ChangeEvent<HTMLInputElement>) => setPhoneNumber(e.target.value)}
onFocus={handleInputFocus}
></PatternFormat>
</div>
</div>
</div>
</>
);
};