Skip to content

Commit

Permalink
feat(OperationClass): Add areaInHectare prop
Browse files Browse the repository at this point in the history
  • Loading branch information
lukasbals committed Nov 23, 2023
1 parent 2ce0e35 commit 2e43ddc
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 4 deletions.
20 changes: 20 additions & 0 deletions src/components/OperationClass/OperationClass.stories.tsx
Expand Up @@ -36,3 +36,23 @@ export const Default: Story = {
rotationPeriod: feasibilityStudyConfigMock.operationClasses[0].rotationPeriod,
},
};

export const WithAreaInHectarePerSpecies: Story = {
args: {
listOfSpecies: feasibilityStudyConfigMock.operationClasses[0].listOfSpecies.map((species) => ({
title: species.title,
siteProductivity: species.siteProductivity,
yieldTable: species.yieldTable,
areaInHectare: 200 * species.areaInPercent,
})),
rotationPeriod: feasibilityStudyConfigMock.operationClasses[0].rotationPeriod,
},
};

export const WithTotalAreaInHectare: Story = {
args: {
listOfSpecies: feasibilityStudyConfigMock.operationClasses[0].listOfSpecies,
rotationPeriod: feasibilityStudyConfigMock.operationClasses[0].rotationPeriod,
areaInHectare: 200,
},
};
23 changes: 19 additions & 4 deletions src/components/OperationClass/OperationClass.tsx
Expand Up @@ -37,16 +37,31 @@ interface SpeciesWithAreaInHectare extends Species, AreaInHectare {}

export interface OperationClassProps {
rotationPeriod: number;
areaInHectare?: number;
listOfSpecies: SpeciesWithPercentageArea[] | SpeciesWithAreaInHectare[];
}

export const OperationClass: React.FC<OperationClassProps> = ({
rotationPeriod,
areaInHectare = 0,
listOfSpecies,
}: OperationClassProps) => {
const { formatNumber, formatMessage } = useContext(IntlContext);

const areasInPercentPerSpecies = useMemo(() => getAreaInPercent(listOfSpecies), [listOfSpecies]);
const areaInHectarePerSpecies: AreaInHectare[] = useMemo(() => {
if (listOfSpecies[0]?.hasOwnProperty('areaInHectare')) {
return listOfSpecies.map((species) => ({
areaInHectare: (species as SpeciesWithAreaInHectare).areaInHectare,
}));
}
if (areaInHectare && listOfSpecies[0]?.hasOwnProperty('areaInPercent')) {
return listOfSpecies.map((species) => ({
areaInHectare: (species as SpeciesWithPercentageArea).areaInPercent * areaInHectare,
}));
}
return [];
}, [listOfSpecies, areaInHectare]);

const normalStocks = useMemo(
() =>
Expand All @@ -57,8 +72,8 @@ export const OperationClass: React.FC<OperationClassProps> = ({
);

const hasAreaInHectare: boolean = useMemo(
() => listOfSpecies[0]?.hasOwnProperty('areaInHectare'),
[listOfSpecies]
() => areaInHectarePerSpecies.length > 0,
[areaInHectarePerSpecies]
);

return (
Expand Down Expand Up @@ -104,7 +119,7 @@ export const OperationClass: React.FC<OperationClassProps> = ({
id: 'units.ha',
},
{
value: formatNumber((species as SpeciesWithAreaInHectare).areaInHectare, {
value: formatNumber(areaInHectarePerSpecies[index].areaInHectare, {
minimumFractionDigits: 1,
maximumFractionDigits: 1,
}),
Expand Down Expand Up @@ -151,7 +166,7 @@ export const OperationClass: React.FC<OperationClassProps> = ({
{ id: 'units.ha' },
{
value: formatNumber(
(listOfSpecies as SpeciesWithAreaInHectare[]).reduce(
areaInHectarePerSpecies.reduce(
(sum, value) => sum + value.areaInHectare,
0
),
Expand Down
1 change: 1 addition & 0 deletions src/components/OperationClasses/OperationClasses.tsx
Expand Up @@ -16,6 +16,7 @@ export const OperationClasses = ({ config }: OperationClassesProps): JSX.Element
<Heading>{operationClass.name}</Heading>
<OperationClass
rotationPeriod={operationClass.rotationPeriod}
areaInHectare={operationClass.areaInHectare}
listOfSpecies={operationClass.listOfSpecies}
/>
<Spacer height="4" />
Expand Down

0 comments on commit 2e43ddc

Please sign in to comment.