Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into 4-add-the-openapi-spe…
Browse files Browse the repository at this point in the history
…cs-for-the-documentation
  • Loading branch information
Grouloo committed Feb 14, 2025
2 parents 98b7e62 + 5c6022a commit e7afe58
Show file tree
Hide file tree
Showing 11 changed files with 340 additions and 5 deletions.
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -371,9 +371,20 @@ export const NewNamespace = new Elysia({ prefix: "/namespace-slug" })
)
```

---
### Ajouter une entrée de menu

Aller dans `src/templates/Home.tsx` et ajouter votre namespace avec une icone de votre choix au format svg (que vous placerez dans `public/icons`)

```tsx
<Cell width={6}>
<a href="/<<namespace>>" style={SECTION_STYLE}>
<img src={"/public/icons/<<votre_icone.svg>>"} height={16} />{" "}
{t("<<namespace_title>>")}
</a>{" "}
</Cell>
```

---


## English
Expand Down
31 changes: 31 additions & 0 deletions public/icons/bottles.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 11 additions & 0 deletions public/icons/chemical-product.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions public/icons/farm.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions public/icons/land-parcels.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 21 additions & 0 deletions public/icons/seed.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 13 additions & 0 deletions src/assets/translations.csv
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,12 @@ geographical_references_postal_code_code,Code postal,Postal code
geographical_references_postal_code_city,Ville,City
geographical_references_postal_code_city_code,Code commune,City code

production,Production,Production
production_title,Production,Production
productions_title,Productions,Productions
id,Identifiant,Id
activity_family,Famille d'activités,Activity Family
usage,Usage,Usage

phytosanitary_title,Phytosanitaire,Phytosanitary

Expand All @@ -65,6 +71,13 @@ phytosanitary_symbol_code,Code,Code
phytosanitary_symbol_mention,Mention danger,Danger mention
phytosanitary_symbol_pictogram_code,Code pictogramme,Pictogram code

seed_title,Semences,Seeds
specie,Espèce,Specie
variety_title,Varietés,Varieties
variety,Variété,Variety
id_specie,Genre,Genus
registration_date,Date d'inscription,Registration date

viticulture_title,Viticulture,Viticulture

viticulture_phenological_stage_title,Stades phénologiques,Phenological stages
Expand Down
4 changes: 4 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import { Viticulture } from "./namespaces/Viticulture"
import { Weather } from "./namespaces/Weather"
import { generateDocumentation } from "./page-generators/generateDocumentation"
import { applyRequestConfiguration } from "./applyRequestConfiguration"
import { Seed } from "./namespaces/Seed"
import { Production } from "./namespaces/Production"

const PORT = import.meta.env.PORT as string

Expand All @@ -25,6 +27,8 @@ new Elysia({ serve: { idleTimeout: 255 } })
})
.use(GeographicalReferences)
.use(Phytosanitary)
.use(Production)
.use(Seed)
.use(Viticulture)
.use(Weather)
.use(Credits)
Expand Down
105 changes: 105 additions & 0 deletions src/namespaces/Production.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
import Elysia, { t } from "elysia"
import { Table } from "../Database"
import { generateTablePage, type Context } from "../generateTablePage"
import { Hypermedia, HypermediaList } from "../Hypermedia"
import { Field } from "../templates/components/Form"
import { ObjectFlatMap } from "../utils"
import { AutoList } from "../templates/AutoList"
import { CreditTable } from "./Credits"
import type { Translator } from "../Translator"

interface Production {
reference_name: string
activity_family: string
specie: string
usage?: string
agroedi_crop_code?: string
registration_date?: Date
translation_id: string
}

const ProductionTable = Table<Production>({
table: "master_productions",
primaryKey: "reference_name",
})

const Breadcrumbs = (t: Translator) => [
Hypermedia.Link({
value: t("home_title"),
method: "GET",
href: "/",
}),
Hypermedia.Link({
value: t("production_title"),
method: "GET",
href: "/production",
}),
]

export const Production = new Elysia({ prefix: "/production" })
.get("/", ({ t }: Context) =>
AutoList({
page: {
title: t("production_title"),
breadcrumbs: [Breadcrumbs(t)[0]],
links: [
Hypermedia.Link({
value: t("productions_title"),
method: "GET",
href: "/production/productions",
}),
],
},
})
)
.get("/productions*", async (cxt: Context) =>
generateTablePage(cxt, {
title: cxt.t("productions_title"),
breadcrumbs: Breadcrumbs(cxt.t),
query: ProductionTable(cxt.db).select().orderBy("reference_name", "ASC"),
columns: {
reference_name: cxt.t("id"),
activity_family: cxt.t("activity_family"),
specie: cxt.t("specie"),
usage: cxt.t("usage"),
},
form: {
name: Field.Text({
label: cxt.t("activity_family"),
required: false,
}),
},
formHandler: (input, query) => {
if (input.name) {
query.where("activity_family", "LIKE", "%" + input.name + "%")
}
},
handler: (resource) => ({
reference_name: Hypermedia.Text({
label: cxt.t("reference_name"),
value: resource.reference_name,
}),
activity_family: Hypermedia.Text({
label: cxt.t("activity_family"),
value: resource.activity_family,
}),
specie: Hypermedia.Text({
label: cxt.t("specie"),
value: resource.specie,
}),
usage: resource.usage ? Hypermedia.Text({
label: cxt.t("usage"),
value: resource.usage,
}) : undefined,
}),
credits: CreditTable(cxt.db)
.select()
.where("datasource", "=", "productions"),
}),
{
query: t.Object({
page: t.Number({ default: 1 }),
name: t.Optional(t.String()),
}),
}
)
111 changes: 111 additions & 0 deletions src/namespaces/Seed.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
import Elysia, { t } from "elysia"
import { Table } from "../Database"
import { generateTablePage, type Context } from "../generateTablePage"
import { Hypermedia, HypermediaList } from "../Hypermedia"
import { Field } from "../templates/components/Form"
import { ObjectFlatMap } from "../utils"
import { AutoList } from "../templates/AutoList"
import { CreditTable } from "./Credits"
import type { Translator } from "../Translator"

interface Variety {
id: string
id_specie: string
specie_name_fra: string
variety_name: string
registration_date?: Date
}

const VarietyTable = Table<Variety>({
table: "registered_seed_varieties",
primaryKey: "id",
})

const Breadcrumbs = (t: Translator) => [
Hypermedia.Link({
value: t("home_title"),
method: "GET",
href: "/",
}),
Hypermedia.Link({
value: t("seed_title"),
method: "GET",
href: "/seed",
}),
]

export const Seed = new Elysia({ prefix: "/seed" })
.get("/", ({ t }: Context) =>
AutoList({
page: {
title: t("seed_title"),
breadcrumbs: [Breadcrumbs(t)[0]],
links: [
Hypermedia.Link({
value: t("variety_title"),
method: "GET",
href: "/seed/varieties",
}),
],
},
})
)
.get("/varieties*", async (cxt: Context) =>
generateTablePage(cxt, {
title: cxt.t("variety_title"),
breadcrumbs: Breadcrumbs(cxt.t),
query: VarietyTable(cxt.db).select().orderBy("specie_name_fra", "ASC").orderBy("variety_name", "ASC").orderBy("id", "ASC"),
columns: {
id: cxt.t("id"),
id_specie: cxt.t("id_specie"),
specie_name_fra: cxt.t("specie"),
variety_name: cxt.t("variety"),
registration_date: cxt.t("registration_date"),
},
form: {
name: Field.Text({
label: cxt.t("specie"),
required: false,
}),
},
formHandler: (input, query) => {
if (input.name) {
query.where("specie_name_fra", "LIKE", "%" + input.name + "%")
}
},
handler: (resource) => ({
id: Hypermedia.Text({
label: cxt.t("id"),
value: resource.id,
}),
id_specie: Hypermedia.Text({
label: cxt.t("id_specie"),
value: resource.id_specie,
}),
specie_name_fra: Hypermedia.Text({
label: cxt.t("specie"),
value: resource.specie_name_fra,
}),
variety_name: Hypermedia.Text({
label: cxt.t("variety"),
value: resource.variety_name,
}),
registration_date: resource.registration_date
? Hypermedia.Date({
label: cxt.t("registration_date"),
value: cxt.dateTimeFormatter.Date(resource.registration_date),
iso: resource.registration_date.toISOString()
})
: undefined,
}),
credits: CreditTable(cxt.db)
.select()
.where("datasource", "=", "seed_varieties"),
}),
{
query: t.Object({
page: t.Number({ default: 1 }),
name: t.Optional(t.String()),
}),
}
)
Loading

0 comments on commit e7afe58

Please sign in to comment.