All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			Add a new module to enable accommodations reservation  Reviewed-on: #188
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {
 | 
						|
  Button,
 | 
						|
  Dialog,
 | 
						|
  DialogActions,
 | 
						|
  DialogContent,
 | 
						|
  DialogTitle,
 | 
						|
} from "@mui/material";
 | 
						|
import React from "react";
 | 
						|
import { ServerApi } from "../../api/ServerApi";
 | 
						|
import { NewCalendarURL } from "../../api/accommodations/AccommodationsCalendarURLApi";
 | 
						|
import { checkConstraint } from "../../utils/form_utils";
 | 
						|
import { useAccommodations } from "../../widgets/accommodations/BaseAccommodationsRoute";
 | 
						|
import { PropEdit } from "../../widgets/forms/PropEdit";
 | 
						|
import { PropSelect } from "../../widgets/forms/PropSelect";
 | 
						|
 | 
						|
export function CreateAccommodationCalendarURLDialog(p: {
 | 
						|
  open: boolean;
 | 
						|
  onClose: () => void;
 | 
						|
  onSubmitted: (c: NewCalendarURL) => void;
 | 
						|
}): React.ReactElement {
 | 
						|
  const [calendar, setCalendar] = React.useState<NewCalendarURL>({ name: "" });
 | 
						|
 | 
						|
  const accommodations = useAccommodations();
 | 
						|
 | 
						|
  const nameErr = checkConstraint(
 | 
						|
    ServerApi.Config.constraints.accommodation_calendar_name_len,
 | 
						|
    calendar?.name
 | 
						|
  );
 | 
						|
 | 
						|
  const clearForm = () => {
 | 
						|
    setCalendar({ name: "" });
 | 
						|
  };
 | 
						|
 | 
						|
  const cancel = () => {
 | 
						|
    clearForm();
 | 
						|
    p.onClose();
 | 
						|
  };
 | 
						|
 | 
						|
  const submit = async () => {
 | 
						|
    clearForm();
 | 
						|
    p.onSubmitted(calendar!);
 | 
						|
  };
 | 
						|
 | 
						|
  return (
 | 
						|
    <Dialog open={p.open} onClose={cancel}>
 | 
						|
      <DialogTitle>Création d'un calendrier</DialogTitle>
 | 
						|
      <DialogContent style={{ display: "flex", flexDirection: "column" }}>
 | 
						|
        <PropEdit
 | 
						|
          editable
 | 
						|
          label="Nom"
 | 
						|
          value={calendar?.name}
 | 
						|
          onValueChange={(s) =>
 | 
						|
            setCalendar((a) => {
 | 
						|
              return {
 | 
						|
                ...a!,
 | 
						|
                name: s!,
 | 
						|
              };
 | 
						|
            })
 | 
						|
          }
 | 
						|
          size={ServerApi.Config.constraints.accommodation_calendar_name_len}
 | 
						|
          helperText={nameErr}
 | 
						|
        />
 | 
						|
 | 
						|
        <PropSelect
 | 
						|
          editing
 | 
						|
          label="Logement ciblé"
 | 
						|
          onValueChange={(v) => {
 | 
						|
            setCalendar((a) => {
 | 
						|
              return {
 | 
						|
                ...a!,
 | 
						|
                accommodation_id: v !== "A" && v ? Number(v) : undefined,
 | 
						|
              };
 | 
						|
            });
 | 
						|
          }}
 | 
						|
          options={[
 | 
						|
            { label: "Tous les logements", value: "A" },
 | 
						|
            ...accommodations.accommodations.fullList.map((a) => {
 | 
						|
              return { label: a.name, value: a.id.toString() };
 | 
						|
            }),
 | 
						|
          ]}
 | 
						|
          value={calendar.accommodation_id?.toString() ?? "A"}
 | 
						|
        />
 | 
						|
      </DialogContent>
 | 
						|
      <DialogActions>
 | 
						|
        <Button onClick={cancel}>Annuler</Button>
 | 
						|
        <Button onClick={submit} disabled={!!nameErr}>
 | 
						|
          Créer
 | 
						|
        </Button>
 | 
						|
      </DialogActions>
 | 
						|
    </Dialog>
 | 
						|
  );
 | 
						|
}
 |