UPDATE
This commit is contained in:
@@ -107,6 +107,11 @@ type ParserConfig = {
|
||||
getItemCount: (plan: unknown) => number;
|
||||
};
|
||||
|
||||
type FertilizationPlanParserPageProps = {
|
||||
initialTab?: ParserTabKey;
|
||||
enabledTabs?: ParserTabKey[];
|
||||
};
|
||||
|
||||
const createInitialTabState = (): TabState => ({
|
||||
message: "",
|
||||
response: null,
|
||||
@@ -551,12 +556,22 @@ const PARSER_CONFIGS: Record<ParserTabKey, ParserConfig> = {
|
||||
},
|
||||
};
|
||||
|
||||
const FertilizationPlanParserPage = () => {
|
||||
const FertilizationPlanParserPage = ({
|
||||
initialTab = "fertilization",
|
||||
enabledTabs = ["fertilization", "irrigation"],
|
||||
}: FertilizationPlanParserPageProps) => {
|
||||
const theme = useTheme();
|
||||
const { farmHub } = useFarmHub();
|
||||
const farmUuid = farmHub?.farm_uuid;
|
||||
const availableTabs = enabledTabs.filter(
|
||||
(tab): tab is ParserTabKey => tab in PARSER_CONFIGS,
|
||||
);
|
||||
const resolvedInitialTab = availableTabs.includes(initialTab)
|
||||
? initialTab
|
||||
: availableTabs[0] ?? "fertilization";
|
||||
const singleTabMode = availableTabs.length === 1;
|
||||
|
||||
const [activeTab, setActiveTab] = useState<ParserTabKey>("fertilization");
|
||||
const [activeTab, setActiveTab] = useState<ParserTabKey>(resolvedInitialTab);
|
||||
const [tabStates, setTabStates] = useState<Record<ParserTabKey, TabState>>({
|
||||
fertilization: createInitialTabState(),
|
||||
irrigation: createInitialTabState(),
|
||||
@@ -907,11 +922,14 @@ const FertilizationPlanParserPage = () => {
|
||||
variant="h5"
|
||||
sx={{ fontWeight: 800, mb: 1.5 }}
|
||||
>
|
||||
دو جریان هوشمند، یک صفحه واحد
|
||||
{singleTabMode
|
||||
? `جریان هوشمند ${config.label}`
|
||||
: "دو جریان هوشمند، یک صفحه واحد"}
|
||||
</Typography>
|
||||
<Typography color="text.secondary">
|
||||
بین تب آبیاری و تب کودهی جابه جا شو و هر کدام را با
|
||||
همان flow سوال های تکمیلی تا JSON نهایی پیش ببر.
|
||||
{singleTabMode
|
||||
? `ورودی متنی برنامه ${config.label} را بفرست، ابهام ها را کامل کن و خروجی JSON نهایی بگیر.`
|
||||
: "بین تب آبیاری و تب کودهی جابه جا شو و هر کدام را با همان flow سوال های تکمیلی تا JSON نهایی پیش ببر."}
|
||||
</Typography>
|
||||
</Box>
|
||||
<Stepper
|
||||
@@ -948,39 +966,45 @@ const FertilizationPlanParserPage = () => {
|
||||
<CardContent sx={{ p: { xs: 4, md: 5 } }}>
|
||||
<Stack spacing={4}>
|
||||
<Box>
|
||||
<Tabs
|
||||
value={activeTab}
|
||||
onChange={(_, value: ParserTabKey) => setActiveTab(value)}
|
||||
variant="fullWidth"
|
||||
sx={{
|
||||
p: 1,
|
||||
borderRadius: 4,
|
||||
backgroundColor: alpha(theme.palette.primary.main, 0.05),
|
||||
minHeight: 64,
|
||||
"& .MuiTabs-indicator": { display: "none" },
|
||||
}}
|
||||
>
|
||||
{Object.values(PARSER_CONFIGS).map((tabConfig) => (
|
||||
<Tab
|
||||
key={tabConfig.key}
|
||||
value={tabConfig.key}
|
||||
icon={<i className={tabConfig.icon} />}
|
||||
iconPosition="start"
|
||||
label={tabConfig.label}
|
||||
sx={{
|
||||
minHeight: 54,
|
||||
borderRadius: 3,
|
||||
fontWeight: 700,
|
||||
transition: "all 0.2s ease",
|
||||
"&.Mui-selected": {
|
||||
color: theme.palette.common.white,
|
||||
background: `linear-gradient(135deg, ${theme.palette.primary.main} 0%, ${theme.palette.info.main} 100%)`,
|
||||
boxShadow: `0 14px 32px ${alpha(theme.palette.primary.main, 0.24)}`,
|
||||
},
|
||||
}}
|
||||
/>
|
||||
))}
|
||||
</Tabs>
|
||||
{!singleTabMode ? (
|
||||
<Tabs
|
||||
value={activeTab}
|
||||
onChange={(_, value: ParserTabKey) => setActiveTab(value)}
|
||||
variant="fullWidth"
|
||||
sx={{
|
||||
p: 1,
|
||||
borderRadius: 4,
|
||||
backgroundColor: alpha(theme.palette.primary.main, 0.05),
|
||||
minHeight: 64,
|
||||
"& .MuiTabs-indicator": { display: "none" },
|
||||
}}
|
||||
>
|
||||
{availableTabs.map((tabKey) => {
|
||||
const tabConfig = PARSER_CONFIGS[tabKey];
|
||||
|
||||
return (
|
||||
<Tab
|
||||
key={tabConfig.key}
|
||||
value={tabConfig.key}
|
||||
icon={<i className={tabConfig.icon} />}
|
||||
iconPosition="start"
|
||||
label={tabConfig.label}
|
||||
sx={{
|
||||
minHeight: 54,
|
||||
borderRadius: 3,
|
||||
fontWeight: 700,
|
||||
transition: "all 0.2s ease",
|
||||
"&.Mui-selected": {
|
||||
color: theme.palette.common.white,
|
||||
background: `linear-gradient(135deg, ${theme.palette.primary.main} 0%, ${theme.palette.info.main} 100%)`,
|
||||
boxShadow: `0 14px 32px ${alpha(theme.palette.primary.main, 0.24)}`,
|
||||
},
|
||||
}}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</Tabs>
|
||||
) : null}
|
||||
</Box>
|
||||
|
||||
<Box
|
||||
|
||||
Reference in New Issue
Block a user