Grazing plan
A React block (a whole screen) in Beamline's Manufacturing app.
Mobs on a grazing rotation, on the farm's map: with a map base, its parcels are the paddocks, each filled by where it stands in the chosen mob's plan (on it now, overdue to leave, next, later, grazed), numbered in order, the next move drawn as an arrow and other mobs named where they are. Each mob's plan is a chain of paddock stays with their lengths: stays done with the dates they were grazed, the current one with its day of the stay and when the move is due, or how many days it is overdue, the next one marked, the rest with the dates they start. A late move asks for a decision before it is recorded: extend the plan (every later move shifts by the delay) or shorten the next stay (the rest keep their dates), with what changes listed stay by stay first; a next stay too short to lose the delay is said and can't be chosen; a refused apply changes nothing. Treatments are recorded with product, batch, dose, date and withholding days (or not known, never zero), the date it ends previewed; the mob is held as not for sale until the latest withholding ends, or until a not-known one is set, and the list of mobs carries both the overdue move and the hold.
Use it for
- Livestock farms planning rotational grazing: where each mob is, when it moves next, what to do when a move runs late, and which mobs can't be sold because of a treatment.
- Any plan of consecutive stays where a late step must either push the rest or shorten what comes next (crop rotations, equipment hire chains).
Not for
- Fields' weather and scouting (field-conditions).
- Stock in bins (production-lots).
- A calendar of bookings (team-calendar).
Anatomy
- mobs: name, head count, the current paddock, an overdue badge and a held-until badge
- map (with a map base): the paddocks filled by their state in the chosen mob's plan, order numbers, the next move as an arrow, other mobs named, hectares, the key, the data credit; head: the mob, its paddock now and head on its hectares
- chain: a row per stay, numbered as on the map (number or a check, paddock, length, then grazed dates, the day bar and due or overdue, or the start date)
- late move: the sentence (planned date, today, how late), Extend the plan / Shorten the next stay as cards with what each does, What changes (each stay old → new dates), Move today and apply
- on time: Record the move to the next paddock
- treatments: the hold (not for sale until, not known, or none in force, with earlier ones counted), the list (product, dose, date, until), Record a treatment opening the form (product, batch, dose, given on, days or Not known, the end previewed, Record it; a bottom sheet on a phone)
States
- on schedule
- move due today
- overdue
- extend selected
- shorten selected
- shorten impossible
- preview of changes
- apply refused
- applied (moved)
- scheduled
- current graze
- completed
- withholding none
- withholding active
- withholding not known
- several overlapping (latest governs)
- treatment saving
- treatment refused
Keyboard
- Tab through the mob list, the chain's actions, the two choice cards (arrow keys between them), Move today and apply, then the treatment form
- Not known is a checkbox that disables the days field
Motion
None beyond the parts' own; nothing moves at rest.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
mobs (required) | Mob[] | — | |
today (required) | string | — | "2026-10-30" on the farm. |
selected | string | — | |
defaultSelected | string | — | |
onSelectedChange | ((id: string) => void) | — | |
onMove | ((move: { mobId: string; stayId: string; on: string; plan: PlanStay[]; }) => void | Pro… | — | Records a move out of the current stay today, with the plan as it now stands (shortened, or as it was). |
onTreat | ((mobId: string, treatment: Treatment) => void | Promise<unknown>) | — | |
className | string | — | Classes on the documented visual root; no override by default. |
style | CSSProperties | — | Inline styles on the documented visual root; no overrides by default. |
ref | Ref<HTMLDivElement> | — | Receives the documented native target or imperative handle; omitted by default. |
map | MapBase | — | The farm's map base: its `parcels` are the paddocks (matched to the plan by name), drawn with the chosen mob's rotation on them. Without it, the rotation reads as a list alone. |
Built from
- popover
- radio-cards
- input
- number-field
- date-picker
- checkbox
- badge
- button
Dependencies
lucide-react
Import
import { GrazingPlan } from "@beamline/grazing-plan";
Get it
Grazing plan is part of Beamline UI. Install the parts you need in your React app as compiled packages or editable source. Get Beamline · Connect your agent
More in Manufacturing
- Shop floor: A workshop's shop floor at one workstation: each job is a card at its work centre with why it isn't ready said in words (parts short, or the previous…
- Production plan: A production plan by month: each product's starting stock, forecast demand, replenishment and ending stock, every ending rolling into the next month's…
- Production and lots: Stock made and stored, with every movement traceable. A batch of a recipe, read as a batch sheet: the recipe, batches (in halves) and day as one sentence…
- Print scheduler: A print shop's production schedule. The week by station: each station's day holds its runs, with a load bar and minutes used against the station's…
- Plan readiness: A solar plan on its way to a permit. The design checks (fire setback from the ridge, string voltage in the cold, roof load, eave and rake setbacks, the…
- Design inputs: What a solar design is checked against, and what the home really uses. Code standards and site conditions (building, electrical and fire codes, wind…
- Solar quote: A residential solar quote. The system's price at its rate per watt with adders, discounts and incentives each switched on or off: discounts come off one…
- Roof layout: The roof of a solar design. The roof in plan with every face's panels drawn as they lie under its roof type's rules (projected from the slope), each…
- Electrical design: The electrical side of a solar design. The existing service set up from a named way of connecting to it (a load-side breaker or a supply-side tap), the…
- Battery sizing: A home battery sized beside its solar. The model and how many with capacity, power and installed price; how it runs (kept full for an outage, storing…
- Field conditions: A farm's fields and what each one's conditions are. The fields as a searchable list (each with its outline, crop, area and the layer's value, or Not…
- Run of show: One service or event plan's order, run more than once: sections and items with each occurrence's start time in its own column, each item's length dragged…
- Sound library: A library of sounds (or any media a person auditions before using): a search by words and #tags with facets as filters, a live "3 filters · 12 results"…
- Tag manager: Tags for one or several items at once (sounds, photos, documents). Nested tag groups are edited in place (rename, new tag), and a folded group still says…