pr-agent / src /components /RequestSummaryPanel.tsx
arasuezofis's picture
Initial ProcureMind Space
c79f732
Raw
History Blame Contribute Delete
4.92 kB
import type { ReactNode } from "react";
type Props = {
requestNumber: string;
requestedBy: string;
department: string;
budgetCode: string;
requestedDate: string;
deliveryExpected: string;
deliveryLocation: string;
costCenter: string;
glAccount: string;
companyCode: string;
onRequestedByChange: (v: string) => void;
onDepartmentChange: (v: string) => void;
onBudgetCodeChange: (v: string) => void;
onRequestedDateChange: (v: string) => void;
onDeliveryExpectedChange: (v: string) => void;
onDeliveryLocationChange: (v: string) => void;
onCostCenterChange: (v: string) => void;
onGlAccountChange: (v: string) => void;
onCompanyCodeChange: (v: string) => void;
};
const INPUT =
"mt-0.5 w-full rounded-md border border-outline-variant bg-surface-container-lowest px-2 py-1 text-[11px] leading-tight text-primary shadow-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary";
function MiniField({
label,
children,
}: {
label: string;
children: ReactNode;
}) {
return (
<div>
<label className="font-label-caps text-[8px] font-bold uppercase leading-none tracking-wide text-secondary">
{label}
</label>
{children}
</div>
);
}
export function RequestSummaryPanel({
requestNumber,
requestedBy,
department,
budgetCode,
requestedDate,
deliveryExpected,
deliveryLocation,
costCenter,
glAccount,
companyCode,
onRequestedByChange,
onDepartmentChange,
onBudgetCodeChange,
onRequestedDateChange,
onDeliveryExpectedChange,
onDeliveryLocationChange,
onCostCenterChange,
onGlAccountChange,
onCompanyCodeChange,
}: Props) {
return (
<div className="shrink-0 rounded-lg border border-outline-variant bg-surface-container-low px-2.5 py-2 shadow-sm">
<h2 className="mb-1.5 font-label-caps text-[8px] font-bold uppercase leading-none tracking-wide text-secondary">
Request details
</h2>
<div className="grid grid-cols-2 gap-x-2 gap-y-1.5">
<MiniField label="Request Number">
<input
type="text"
readOnly
value={requestNumber}
className={`${INPUT} bg-surface-container-high font-data-mono text-[10px]`}
aria-readonly
/>
</MiniField>
<MiniField label="Requested Date">
<input
type="date"
value={requestedDate}
onChange={(e) => onRequestedDateChange(e.target.value)}
className={INPUT}
/>
</MiniField>
<MiniField label="Requested By">
<input
type="text"
value={requestedBy}
onChange={(e) => onRequestedByChange(e.target.value)}
placeholder="Name or ID"
className={INPUT}
/>
</MiniField>
<MiniField label="Department">
<input
type="text"
value={department}
onChange={(e) => onDepartmentChange(e.target.value)}
placeholder="Cost center / org unit"
className={INPUT}
/>
</MiniField>
<div className="col-span-2">
<MiniField label="Budget Code">
<input
type="text"
value={budgetCode}
onChange={(e) => onBudgetCodeChange(e.target.value)}
placeholder="GL / WBS / budget reference"
className={INPUT}
/>
</MiniField>
</div>
<MiniField label="Delivery Expected">
<input
type="date"
value={deliveryExpected}
onChange={(e) => onDeliveryExpectedChange(e.target.value)}
className={INPUT}
/>
</MiniField>
<MiniField label="Delivery Location">
<input
type="text"
value={deliveryLocation}
onChange={(e) => onDeliveryLocationChange(e.target.value)}
placeholder="Location / area"
className={INPUT}
/>
</MiniField>
<MiniField label="Please Enter the Cost Center">
<input
type="text"
value={costCenter}
onChange={(e) => onCostCenterChange(e.target.value)}
placeholder="Cost center"
className={INPUT}
/>
</MiniField>
<MiniField label="GL Account">
<input
type="text"
value={glAccount}
onChange={(e) => onGlAccountChange(e.target.value)}
placeholder="GL account"
className={INPUT}
/>
</MiniField>
<MiniField label="Company Code">
<input
type="text"
value={companyCode}
onChange={(e) => onCompanyCodeChange(e.target.value)}
placeholder="Company code"
className={INPUT}
/>
</MiniField>
</div>
</div>
);
}