diff --git a/.changeset/calm-rivers-flow.md b/.changeset/calm-rivers-flow.md new file mode 100644 index 000000000..88b003239 --- /dev/null +++ b/.changeset/calm-rivers-flow.md @@ -0,0 +1,5 @@ +--- +"@svenvw/fdm-app": patch +--- + +Enhanced the farm selection screen with a modernized UI, clearer feature breakdowns for new users, and a dedicated Atlas section for existing farms. Improved sidebar navigation by adding "muted" states for unavailable features and clarifying the distinction between the farm list and farm overview. diff --git a/fdm-app/app/components/blocks/sidebar/apps.tsx b/fdm-app/app/components/blocks/sidebar/apps.tsx index 0158b6e24..c7d41c959 100644 --- a/fdm-app/app/components/blocks/sidebar/apps.tsx +++ b/fdm-app/app/components/blocks/sidebar/apps.tsx @@ -25,6 +25,12 @@ import { SidebarMenuSubButton, SidebarMenuSubItem, } from "~/components/ui/sidebar" +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "~/components/ui/tooltip" export function SidebarApps() { const farmId = useFarmStore((state) => state.farmId) @@ -97,200 +103,242 @@ export function SidebarApps() { omBalanceLink = undefined } return ( - - Apps - - - + + + Apps + + + + + {atlasLink ? ( + + + + Atlas + + + + + ) : ( + + + + + + Atlas + + + + + Atlas is niet beschikbaar tijdens + het aanmaken van een bedrijf + + + )} + + + + {atlasFieldsLink ? ( + + + + Gewaspercelen + + + + ) : null} + + + {atlasElevationLink ? ( + + + Hoogtekaart + + + ) : null} + + + {atlasSoilLink ? ( + + + Bodemkaart + + + ) : null} + + + + + + + + {nitrogenBalanceLink ? ( + + + + Balans + + + + + ) : ( + + + + + + Balans + + + + + Selecteer een bedrijf om de balansen + te raadplegen + + + )} + + + + {nitrogenBalanceLink ? ( + + + Stikstof + + + ) : null} + + + {omBalanceLink ? ( + + + + Organische stof + + + + ) : null} + + + + + - {atlasLink ? ( - - - - Atlas - - - - - ) : ( + {nutrientAdviceLink ? ( - - - Atlas - + + + Bemestingsadvies + + ) : ( + + + + + + Bemestingsadvies + + + + + Selecteer een bedrijf voor + bemestingsadvies + + )} - - - - {atlasFieldsLink ? ( - - - Gewaspercelen - - - ) : null} - - - {atlasElevationLink ? ( - - - Hoogtekaart - - - ) : null} - - - {atlasSoilLink ? ( - - - Bodemkaart - - - ) : null} - - - - - - {nitrogenBalanceLink ? ( - - - - Balans - - - - - ) : ( + {normsLink ? ( - - - Balans - + + + Gebruiksruimte + + ) : ( + + + + + + Gebruiksruimte + + + + + Selecteer een bedrijf om de + gebruiksruimte te berekenen + + )} - - - - {nitrogenBalanceLink ? ( - - - Stikstof - - - ) : null} - - - {omBalanceLink ? ( - - - Organische stof - - - ) : null} - - - - - - {nutrientAdviceLink ? ( - - - - Bemestingsadvies - - - ) : ( - - - - Bemestingsadvies - - - )} - - - {normsLink ? ( - - - - Gebruiksruimte - - - ) : ( - - - - Gebruiksruimte - - - )} - - - - + + + + ) } diff --git a/fdm-app/app/components/blocks/sidebar/farm.tsx b/fdm-app/app/components/blocks/sidebar/farm.tsx index 2e3252f1f..a112b907c 100644 --- a/fdm-app/app/components/blocks/sidebar/farm.tsx +++ b/fdm-app/app/components/blocks/sidebar/farm.tsx @@ -4,6 +4,7 @@ import { Check, ChevronRight, House, + LayoutGrid, Shapes, Sprout, Square, @@ -30,6 +31,12 @@ import { SidebarMenuSubButton, SidebarMenuSubItem, } from "~/components/ui/sidebar" +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "~/components/ui/tooltip" export function SidebarFarm({ farm, @@ -61,19 +68,12 @@ export function SidebarFarm({ location.pathname.includes("farm/create") || searchParams.get("returnUrl")?.includes("farm/create") const farmRole = farm ? getSuperiorRole(farm.roles) : null - // Set the farm link - let farmLink: string - let farmLinkDisplay: string - if (isCreateFarmWizard) { - farmLink = "/farm" - farmLinkDisplay = "Terug naar bedrijven" - } else if (farmId && farmId !== "undefined") { - farmLink = `/farm/${farmId}` - farmLinkDisplay = farm?.b_name_farm ? farm.b_name_farm : "Bedrijf" - } else { - farmLink = "/farm" - farmLinkDisplay = "Overzicht bedrijven" - } + + const isFarmOverview = + location.pathname === "/farm" || location.pathname === "/farm/" + + const isFarmSelected = + farmId && farmId !== "undefined" && !isCreateFarmWizard let fieldsLink: string | undefined if (isCreateFarmWizard) { @@ -101,214 +101,268 @@ export function SidebarFarm({ } return ( - - Bedrijf - - - - - - - - {farmLinkDisplay} - - {farmRole && ( - - {farmRole === "owner" - ? "Eigenaar" - : farmRole === "advisor" - ? "Adviseur" - : farmRole === "researcher" - ? "Onderzoeker" - : "Onbekend"} - - )} - - - - {/* Conditionally render the Kalender item */} - {farmId && !isCreateFarmWizard ? ( - - - - - - Kalender - {!isCalendarOpen && ( - - {selectedCalendar === "all" - ? "Alle jaren" - : selectedCalendar} - - )} - - - - - - {calendarSelection?.map((item) => { - // Construct the new URL with the selected calendar - const newUrl = - location.pathname.replace( - /\/(\d{4}|all)/, - `/${item}`, - ) - return ( - - - setCalendar(item) - } - > - - - {item === "all" - ? "Alle jaren" - : item} - - {selectedCalendar === - item && ( - - )} - - - - ) - })} - - - - - ) : ( + + + Bedrijf + + - - - Kalender - - - - )} - - {fieldsLink ? ( - - - - Percelen + + + + {isCreateFarmWizard + ? "Terug naar bedrijven" + : "Mijn bedrijven"} + - ) : ( - - - - Percelen - - - )} - - - {rotationLink ? ( - - - - Bouwplan - - - ) : ( - - - - Bouwplan - - + + + {isFarmSelected && ( + + + + + + {farm?.b_name_farm ?? "Overzicht"} + + {farmRole && ( + + {farmRole === "owner" + ? "Eigenaar" + : farmRole === "advisor" + ? "Adviseur" + : farmRole === + "researcher" + ? "Onderzoeker" + : "Lid"} + + )} + + + )} - - - {fertilizersLink ? ( - - - - Meststoffen - - + + + + + Kalender + {!isCalendarOpen && ( + + {selectedCalendar === "all" + ? "Alle jaren" + : selectedCalendar} + + )} + + + + + + {calendarSelection?.map((item) => { + // Construct the new URL with the selected calendar + const newUrl = + location.pathname.replace( + /\/(\d{4}|all)/, + `/${item}`, + ) + return ( + + + setCalendar( + item, + ) + } + > + + + {item === + "all" + ? "Alle jaren" + : item} + + {selectedCalendar === + item && ( + + )} + + + + ) + })} + + + + ) : ( - - - - Meststoffen - - + + + + + + + Kalender + + + + + Selecteer een bedrijf om de kalender te + gebruiken + + + )} - - {/* - - - - Stal & dieren + + {fieldsLink ? ( + + + + Percelen - */} - - - + ) : ( + + + + + + Percelen + + + + + Selecteer een bedrijf om uw percelen te + beheren + + + )} + + + {rotationLink ? ( + + + + Bouwplan + + + ) : ( + + + + + + Bouwplan + + + + + Selecteer een bedrijf om het bouwplan te + beheren + + + )} + + + {fertilizersLink ? ( + + + + Meststoffen + + + ) : ( + + + + + + Meststoffen + + + + + Selecteer een bedrijf om meststoffen te + beheren + + + )} + + + + + ) } diff --git a/fdm-app/app/routes/farm._index.tsx b/fdm-app/app/routes/farm._index.tsx index af935c12b..2a4c50613 100644 --- a/fdm-app/app/routes/farm._index.tsx +++ b/fdm-app/app/routes/farm._index.tsx @@ -1,5 +1,15 @@ import { getFarms } from "@svenvw/fdm-core" -import { CheckIcon, House, MapIcon, PlusCircle, PlusIcon } from "lucide-react" +import { + ArrowRight, + Check, + House, + Layers, + LifeBuoy, + MapIcon, + Mountain, + Plus, + PlusCircle, +} from "lucide-react" import { type LoaderFunctionArgs, type MetaFunction, @@ -33,7 +43,7 @@ export const meta: MetaFunction = () => { { title: `Bedrijf | ${clientConfig.name}` }, { name: "description", - content: "Selecteer een bedrijf.", + content: "Beheer uw landbouwbedrijf en percelen.", }, ] } @@ -79,6 +89,27 @@ export async function loader({ request }: LoaderFunctionArgs) { } } +function SupportNote() { + return ( +
+ + + Hulp nodig of vragen? Neem contact op via{" "} + + +
+ ) +} + /** * Renders the user interface for farm management. * @@ -98,134 +129,144 @@ export default function AppIndex() { farmOptions={loaderData.farmOptions} /> -
+
{loaderData.farms.length === 0 ? ( -
- -
- - - - - - Nieuw bedrijf aanmaken - - - - Start met het aanmaken van je bedrijf en - voeg je percelen toe. - - - -

- Een bedrijf vormt de basis voor al je - analyses en adviezen. Krijg toegang tot: -

-
    -
  • - - - Toegang tot de{" "} - Stikstofbalans,{" "} - Bemestingsadvies en{" "} - Gebruiksruimte. - -
  • -
  • - - - Beheer van meerdere jaren voor - een compleet overzicht. - -
  • -
  • - - - Een uitgebreide lijst van - meststoffen die je zelf kunt - aanpassen en uitbreiden. - -
  • -
  • - - - De mogelijkheid om je adviseur - toegang te geven tot je - bedrijfsgegevens. - -
  • -
-
- - - -
- - - - - - Verken de Atlas - - - - Bekijk percelen op de kaart en ontdek - gedetailleerde informatie. - - - -

- De Atlas is een handige tool om percelen - te analyseren, zelfs zonder een eigen - bedrijf. Ontdek bijvoorbeeld: -

-
    -
  • - - - De volledige teelthistorie van - percelen tot 2009. - -
  • -
  • - - - Of een perceel in een gebied met - beperkingen voor de - gebruiksruimte valt. - -
  • -
  • - - - Een inschatting van de - bodemtextuur en het - grondwaterpeil. - -
  • -
-
- - - -
+ + Maak een bedrijf aan + + + + + + + + +
+ +
+ + Atlas verkennen + + + Analyseer percelen op basis van + openbare data, bodemkenmerken en + historie. + +
+ +
    +
  • + + + Percelen:{" "} + Gewashistorie (BRP) en + kenmerken van alle percelen + in Nederland sinds 2009. + +
  • +
  • + + + Hoogtekaart:{" "} + Gedetailleerde AHN4-data + voor inzicht in het + microreliëf van percelen. + +
  • +
  • + + + Bodemkaart: Bekijk de + Bodemkaart van Nederland en + leer meer over uw bodem. + +
  • +
+
+ + + +
+
+
) : ( @@ -233,182 +274,214 @@ export default function AppIndex() { -
-
- {loaderData.farms.map((farm) => ( - - - - -
-
- -
- {farm.b_name_farm} -
-
- {farm.roles.map( - (role) => ( - - {role === - "owner" - ? "Eigenaar" - : role === - "advisor" - ? "Adviseur" - : role === - "researcher" - ? "Onderzoeker" - : "Onbekend"} - - ), - )} -
-
- -
- -
-
-

Adres:

- {farm.b_address_farm ? ( -

- { - farm.b_address_farm - } -

- ) : ( -

- {"Onbekend"} -

- )} -
- -
-

Postcode:

- {farm.b_postalcode_farm ? ( -

- { - farm.b_postalcode_farm - } -

- ) : ( -

- {"Onbekend"} -

- )} -
-
-

KvK-nummer:

- {farm.b_businessid_farm ? ( -

- { - farm.b_businessid_farm - } -

- ) : ( -

- {"Onbekend"} -

- )} -
-
-
- - - Selecteer → - - -
-
- ))} +
+ {loaderData.farms.map((farm) => ( - -
- +
+
+
+ +
+
+ + {farm.b_name_farm} + +
+ {farm.roles.map( + (role) => ( + + {role === + "owner" + ? "Eigenaar" + : role === + "advisor" + ? "Adviseur" + : role === + "researcher" + ? "Onderzoeker" + : "Lid"} + + ), + )} +
+
- Nieuw bedrijf - - +
- -

- Maak een nieuw bedrijf aan en - beheer je percelen, gewassen en - meststoffen. -

-

- Hiermee kun je dan voor dit - bedrijf de Nutriëntenbalans, - Bemestingsadvies en - Gebruiksruimte gaan gebruiken. -

+ +
+
+
+ Adres +
+
+ {farm.b_address_farm || + "Onbekend"} +
+
+
+
+ Postcode +
+
+ {farm.b_postalcode_farm || + "Onbekend"} +
+
+
+
+ KvK +
+
+ {farm.b_businessid_farm || + "Onbekend"} +
+
+
- - - Naar nieuw Bedrijf → + + + Selecteer bedrijf{" "} + - + - - - -
- -
- Atlas + +
+ +
+ Nieuw bedrijf + + Voeg een extra bedrijf toe aan uw + account. + +
+
+
+
+ + +
+ + + +
+
+ +
+ + Percelen - - - -

- Bekijk alle percelen op de kaart - en selecteer een perceel voor - meer details, zoals - gewashistorie. -

-
- - - Naar Atlas → - - - - -
+
+
+ + Bekijk de teelthistorie en ruimtelijke + kenmerken van alle percelen in + Nederland. + + + + Naar percelen{" "} + + + +
+
+ + + + +
+
+ +
+ + Hoogtekaart + +
+
+ + Inzage in het Actueel Hoogtebestand + Nederland (AHN) voor gedetailleerde + hoogte-informatie. + + + + Naar hoogtekaart{" "} + + + +
+
+ + + + +
+
+ +
+ + Bodemkaart + +
+
+ + Raadpleeg de landelijke bodemkaart voor + informatie over bodemtype en + grondwatertrappen. + + + + Naar bodemkaart{" "} + + + +
+
+ )}