diff --git a/apps/admin/icons/siren-on-slash-solid.svg b/apps/admin/icons/siren-on-slash-solid.svg
new file mode 100644
index 00000000..bd610360
--- /dev/null
+++ b/apps/admin/icons/siren-on-slash-solid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/admin/src/foster-families/db.server.ts b/apps/admin/src/foster-families/db.server.ts
index 6f2f122d..4cb41daf 100644
--- a/apps/admin/src/foster-families/db.server.ts
+++ b/apps/admin/src/foster-families/db.server.ts
@@ -20,6 +20,7 @@ import {
import { orderByRank } from "#i/core/order-by-rank.js"
import { prisma } from "#i/core/prisma.server.js"
import type { FosterFamilySearchParams } from "#i/foster-families/search-params.js"
+import { FosterFamilyEmergencies } from "#i/foster-families/search-params.js"
export class MissingSpeciesToHostError extends Error {}
export class InvalidAvailabilityDateError extends Error {}
@@ -267,6 +268,14 @@ export class FosterFamilyDbDelegate {
})
}
+ if (searchParams.emergencies.size > 0) {
+ where.push({
+ OR: Array.from(searchParams.emergencies).map(
+ (emergencies) => FOSTER_FAMILY_EMERGENCIES_WHERE[emergencies],
+ ),
+ })
+ }
+
if (searchParams.garden.size > 0) {
where.push({ garden: { in: Array.from(searchParams.garden) } })
}
@@ -345,6 +354,7 @@ type DataCreate = {
comments: string | null
displayName: string
email: string
+ emergencies?: boolean
garden: FosterFamilyGarden
housing: FosterFamilyHousing
phone: string
@@ -361,6 +371,7 @@ type DataUpdate = {
comments?: string | null
displayName?: string
email?: string
+ emergencies?: boolean
garden?: FosterFamilyGarden
housing?: FosterFamilyHousing
isBanned?: boolean
@@ -369,3 +380,15 @@ type DataUpdate = {
speciesToHost?: Species[]
zipCode?: string
}
+
+const FOSTER_FAMILY_EMERGENCIES_WHERE: Record<
+ FosterFamilyEmergencies,
+ Prisma.FosterFamilyWhereInput
+> = {
+ [FosterFamilyEmergencies.YES]: {
+ emergencies: true,
+ },
+ [FosterFamilyEmergencies.NO]: {
+ emergencies: false,
+ },
+}
diff --git a/apps/admin/src/foster-families/filter-form.tsx b/apps/admin/src/foster-families/filter-form.tsx
index 07f4c3cd..0e13b0fc 100644
--- a/apps/admin/src/foster-families/filter-form.tsx
+++ b/apps/admin/src/foster-families/filter-form.tsx
@@ -27,7 +27,10 @@ import {
SORTED_GARDEN,
SORTED_HOUSING,
} from "#i/foster-families/housing.js"
-import { FosterFamilySearchParams } from "#i/foster-families/search-params.js"
+import {
+ FosterFamilyEmergencies,
+ FosterFamilySearchParams,
+} from "#i/foster-families/search-params.js"
import { Icon } from "#i/generated/icon.js"
export function FosterFamilyFilters({
@@ -121,6 +124,48 @@ export function FosterFamilyFilters({
+ (
+
+ ),
+ )}
+ >
+
+ }
+ checked={fosterFamilySearchParams.emergencies.has(
+ FosterFamilyEmergencies.YES,
+ )}
+ onChange={() => {}}
+ />
+
+ }
+ checked={fosterFamilySearchParams.emergencies.has(
+ FosterFamilyEmergencies.NO,
+ )}
+ onChange={() => {}}
+ />
+
+
+
+
+
+
+
Espèces à accueillir{" "}
@@ -570,3 +576,33 @@ function GardenField({
)
}
+
+function EmergenciesField({
+ defaultFosterFamily,
+}: {
+ defaultFosterFamily?: DefaultFosterFamily
+}) {
+ return (
+
+
+ Accepte les accueils court terme et d'urgence
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/apps/admin/src/foster-families/search-params.ts b/apps/admin/src/foster-families/search-params.ts
index 37ea0c27..317f393d 100644
--- a/apps/admin/src/foster-families/search-params.ts
+++ b/apps/admin/src/foster-families/search-params.ts
@@ -7,9 +7,15 @@ import {
import { SearchParamsIO } from "@animeaux/search-params-io"
import { zu } from "@animeaux/zod-utils"
+export enum FosterFamilyEmergencies {
+ YES = "Y",
+ NO = "N",
+}
+
export const FosterFamilySearchParams = SearchParamsIO.create({
keys: {
availability: "a",
+ emergencies: "e",
displayName: "q",
garden: "garden",
housing: "housing",
@@ -24,6 +30,7 @@ export const FosterFamilySearchParams = SearchParamsIO.create({
return Schema.parse({
availability: SearchParamsIO.getValues(searchParams, keys.availability),
displayName: SearchParamsIO.getValue(searchParams, keys.displayName),
+ emergencies: SearchParamsIO.getValues(searchParams, keys.emergencies),
garden: SearchParamsIO.getValues(searchParams, keys.garden),
housing: SearchParamsIO.getValues(searchParams, keys.housing),
cities: SearchParamsIO.getValues(searchParams, keys.cities),
@@ -45,6 +52,8 @@ export const FosterFamilySearchParams = SearchParamsIO.create({
SearchParamsIO.setValue(searchParams, keys.displayName, data.displayName)
+ SearchParamsIO.setValues(searchParams, keys.emergencies, data.emergencies)
+
SearchParamsIO.setValues(searchParams, keys.garden, data.garden)
SearchParamsIO.setValues(searchParams, keys.housing, data.housing)
@@ -78,6 +87,9 @@ const Schema = zu.object({
zu.searchParams.nativeEnum(FosterFamilyAvailability),
),
displayName: zu.searchParams.string(),
+ emergencies: zu.searchParams.set(
+ zu.searchParams.nativeEnum(FosterFamilyEmergencies),
+ ),
garden: zu.searchParams.set(zu.searchParams.nativeEnum(FosterFamilyGarden)),
housing: zu.searchParams.set(zu.searchParams.nativeEnum(FosterFamilyHousing)),
cities: zu.searchParams.set(zu.searchParams.string()),
diff --git a/apps/admin/src/routes/_layout.foster-families.$id._index/route.tsx b/apps/admin/src/routes/_layout.foster-families.$id._index/route.tsx
index c3471f0e..ed832246 100644
--- a/apps/admin/src/routes/_layout.foster-families.$id._index/route.tsx
+++ b/apps/admin/src/routes/_layout.foster-families.$id._index/route.tsx
@@ -68,6 +68,7 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
fosterFamily: prisma.fosterFamily.findUnique({
where: { id: paramsResult.data.id },
select: {
+ emergencies: true,
address: true,
availability: true,
availabilityExpirationDate: true,
diff --git a/apps/admin/src/routes/_layout.foster-families.$id._index/situation-card.tsx b/apps/admin/src/routes/_layout.foster-families.$id._index/situation-card.tsx
index 7c1015a1..bbca1eff 100644
--- a/apps/admin/src/routes/_layout.foster-families.$id._index/situation-card.tsx
+++ b/apps/admin/src/routes/_layout.foster-families.$id._index/situation-card.tsx
@@ -118,6 +118,24 @@ export function SituationCard() {
].join("")}
+
+
+ }
+ >
+
+ {fosterFamily.emergencies
+ ? "Accueil court terme et urgence : **Oui**"
+ : "Accueil court terme et urgence : **Non**"}
+
+
diff --git a/apps/admin/src/routes/_layout.foster-families.$id.edit/action.server.ts b/apps/admin/src/routes/_layout.foster-families.$id.edit/action.server.ts
index 985e5920..5da6eb7c 100644
--- a/apps/admin/src/routes/_layout.foster-families.$id.edit/action.server.ts
+++ b/apps/admin/src/routes/_layout.foster-families.$id.edit/action.server.ts
@@ -45,6 +45,9 @@ export async function action({ request, params }: ActionFunctionArgs) {
paramsResult.data.id,
{
address: formData.data.address,
+ emergencies:
+ formData.data.emergencies ===
+ ActionFormDataForUpdate.schema.shape.emergencies.Enum.YES,
availability: formData.data.availability,
availabilityExpirationDate:
formData.data.availabilityExpirationDate ?? null,
diff --git a/apps/admin/src/routes/_layout.foster-families.$id.edit/loader.server.ts b/apps/admin/src/routes/_layout.foster-families.$id.edit/loader.server.ts
index d2f0f9c7..78e0c0bc 100644
--- a/apps/admin/src/routes/_layout.foster-families.$id.edit/loader.server.ts
+++ b/apps/admin/src/routes/_layout.foster-families.$id.edit/loader.server.ts
@@ -29,6 +29,7 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
where: { id: paramsResult.data.id },
select: {
address: true,
+ emergencies: true,
availability: true,
availabilityExpirationDate: true,
city: true,
diff --git a/apps/admin/src/routes/_layout.foster-families.new/action.server.ts b/apps/admin/src/routes/_layout.foster-families.new/action.server.ts
index a26b2060..7a05afcb 100644
--- a/apps/admin/src/routes/_layout.foster-families.new/action.server.ts
+++ b/apps/admin/src/routes/_layout.foster-families.new/action.server.ts
@@ -44,6 +44,9 @@ export async function action({ request }: ActionFunctionArgs) {
comments: formData.data.comments || null,
displayName: formData.data.displayName,
email: formData.data.email,
+ emergencies:
+ formData.data.emergencies ===
+ ActionFormData.schema.shape.emergencies.Enum.YES,
garden: formData.data.garden,
housing: formData.data.housing,
phone: formData.data.phone,
diff --git a/libs/prisma/migrations/20260601123113_add_foster_family_emergencies/migration.sql b/libs/prisma/migrations/20260601123113_add_foster_family_emergencies/migration.sql
new file mode 100644
index 00000000..ae91ea06
--- /dev/null
+++ b/libs/prisma/migrations/20260601123113_add_foster_family_emergencies/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "FosterFamily" ADD COLUMN "emergencies" BOOLEAN NOT NULL DEFAULT false;
diff --git a/libs/prisma/schema.prisma b/libs/prisma/schema.prisma
index 82388918..8aa957d6 100644
--- a/libs/prisma/schema.prisma
+++ b/libs/prisma/schema.prisma
@@ -83,6 +83,7 @@ model FosterFamily {
updatedAt DateTime @updatedAt
activities Activity[]
+ emergencies Boolean @default(false)
availability FosterFamilyAvailability @default(UNKNOWN)
availabilityExpirationDate DateTime?
comments String?