All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			Add a new module to enable accommodations reservation  Reviewed-on: #188
		
			
				
	
	
		
			156 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {
 | 
						|
  Button,
 | 
						|
  Dialog,
 | 
						|
  DialogActions,
 | 
						|
  DialogContent,
 | 
						|
  DialogTitle,
 | 
						|
  Tooltip,
 | 
						|
} from "@mui/material";
 | 
						|
import React from "react";
 | 
						|
import { ServerApi } from "../../api/ServerApi";
 | 
						|
import { UpdateAccommodation } from "../../api/accommodations/AccommodationListApi";
 | 
						|
import { checkConstraint } from "../../utils/form_utils";
 | 
						|
import { PropCheckbox } from "../../widgets/forms/PropCheckbox";
 | 
						|
import { PropEdit } from "../../widgets/forms/PropEdit";
 | 
						|
import { PropColorPicker } from "../../widgets/forms/PropColorPicker";
 | 
						|
 | 
						|
export function UpdateAccommodationDialog(p: {
 | 
						|
  open: boolean;
 | 
						|
  create: boolean;
 | 
						|
  onClose: () => void;
 | 
						|
  onSubmitted: (c: UpdateAccommodation) => void;
 | 
						|
  accommodation: UpdateAccommodation | undefined;
 | 
						|
}): React.ReactElement {
 | 
						|
  const [accommodation, setAccommodation] = React.useState<
 | 
						|
    UpdateAccommodation | undefined
 | 
						|
  >();
 | 
						|
 | 
						|
  const nameErr = checkConstraint(
 | 
						|
    ServerApi.Config.constraints.accommodation_name_len,
 | 
						|
    accommodation?.name
 | 
						|
  );
 | 
						|
  const descriptionErr = checkConstraint(
 | 
						|
    ServerApi.Config.constraints.accommodation_description_len,
 | 
						|
    accommodation?.description
 | 
						|
  );
 | 
						|
 | 
						|
  const clearForm = () => {
 | 
						|
    setAccommodation(undefined);
 | 
						|
  };
 | 
						|
 | 
						|
  const cancel = () => {
 | 
						|
    clearForm();
 | 
						|
    p.onClose();
 | 
						|
  };
 | 
						|
 | 
						|
  const submit = async () => {
 | 
						|
    clearForm();
 | 
						|
    p.onSubmitted(accommodation!);
 | 
						|
  };
 | 
						|
 | 
						|
  React.useEffect(() => {
 | 
						|
    if (!accommodation) setAccommodation(p.accommodation);
 | 
						|
  }, [p.open, p.accommodation]);
 | 
						|
 | 
						|
  return (
 | 
						|
    <Dialog open={p.open} onClose={cancel}>
 | 
						|
      <DialogTitle>
 | 
						|
        {p.create ? "Création" : "Mise à jour"} d'un logement
 | 
						|
      </DialogTitle>
 | 
						|
      <DialogContent style={{ display: "flex", flexDirection: "column" }}>
 | 
						|
        <PropEdit
 | 
						|
          editable
 | 
						|
          label="Nom"
 | 
						|
          value={accommodation?.name}
 | 
						|
          onValueChange={(s) =>
 | 
						|
            setAccommodation((a) => {
 | 
						|
              return {
 | 
						|
                ...a!,
 | 
						|
                name: s!,
 | 
						|
              };
 | 
						|
            })
 | 
						|
          }
 | 
						|
          size={ServerApi.Config.constraints.accommodation_name_len}
 | 
						|
          helperText={nameErr}
 | 
						|
        />
 | 
						|
 | 
						|
        <PropEdit
 | 
						|
          editable
 | 
						|
          label="Description"
 | 
						|
          value={accommodation?.description}
 | 
						|
          onValueChange={(s) =>
 | 
						|
            setAccommodation((a) => {
 | 
						|
              return {
 | 
						|
                ...a!,
 | 
						|
                description: s!,
 | 
						|
              };
 | 
						|
            })
 | 
						|
          }
 | 
						|
          size={ServerApi.Config.constraints.accommodation_description_len}
 | 
						|
          helperText={descriptionErr}
 | 
						|
        />
 | 
						|
 | 
						|
        <PropColorPicker
 | 
						|
          editable
 | 
						|
          label="Couleur"
 | 
						|
          value={accommodation?.color}
 | 
						|
          onChange={(s) =>
 | 
						|
            setAccommodation((a) => {
 | 
						|
              return {
 | 
						|
                ...a!,
 | 
						|
                color: s!,
 | 
						|
              };
 | 
						|
            })
 | 
						|
          }
 | 
						|
        />
 | 
						|
 | 
						|
        <PropCheckbox
 | 
						|
          editable
 | 
						|
          label="Ouvert aux réservations"
 | 
						|
          checked={accommodation?.open_to_reservations === true}
 | 
						|
          onValueChange={(c) =>
 | 
						|
            setAccommodation((a) => {
 | 
						|
              return {
 | 
						|
                ...a!,
 | 
						|
                open_to_reservations: c,
 | 
						|
              };
 | 
						|
            })
 | 
						|
          }
 | 
						|
        />
 | 
						|
 | 
						|
        <Tooltip
 | 
						|
          title={
 | 
						|
            "Permet de spécifier si un administrateur de la famille doit valider manuellement les demandes de réservation pour qu'elles soient validées"
 | 
						|
          }
 | 
						|
        >
 | 
						|
          <PropCheckbox
 | 
						|
            checkboxAlwaysVisible
 | 
						|
            editable={accommodation?.open_to_reservations === true}
 | 
						|
            label="Validation des réservations par un administrateur requise"
 | 
						|
            checked={accommodation?.need_validation === true}
 | 
						|
            onValueChange={(c) =>
 | 
						|
              setAccommodation((a) => {
 | 
						|
                return {
 | 
						|
                  ...a!,
 | 
						|
                  need_validation: c,
 | 
						|
                };
 | 
						|
              })
 | 
						|
            }
 | 
						|
          />
 | 
						|
        </Tooltip>
 | 
						|
      </DialogContent>
 | 
						|
      <DialogActions>
 | 
						|
        <Button onClick={cancel}>Annuler</Button>
 | 
						|
        <Button
 | 
						|
          onClick={submit}
 | 
						|
          disabled={
 | 
						|
            !!nameErr || (!!accommodation?.description && !!descriptionErr)
 | 
						|
          }
 | 
						|
        >
 | 
						|
          {p.create ? "Créer" : "Mettre à jour"}
 | 
						|
        </Button>
 | 
						|
      </DialogActions>
 | 
						|
    </Dialog>
 | 
						|
  );
 | 
						|
}
 |