Can set member email and phone number
This commit is contained in:
parent
335ff0f178
commit
39190de454
9
geneit_app/package-lock.json
generated
9
geneit_app/package-lock.json
generated
@ -25,6 +25,7 @@
|
|||||||
"@types/react": "^18.2.8",
|
"@types/react": "^18.2.8",
|
||||||
"@types/react-dom": "^18.2.4",
|
"@types/react-dom": "^18.2.4",
|
||||||
"date-and-time": "^3.0.1",
|
"date-and-time": "^3.0.1",
|
||||||
|
"email-validator": "^2.0.4",
|
||||||
"filesize": "^10.0.9",
|
"filesize": "^10.0.9",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
@ -6767,6 +6768,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.454.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.454.tgz",
|
||||||
"integrity": "sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ=="
|
"integrity": "sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ=="
|
||||||
},
|
},
|
||||||
|
"node_modules/email-validator": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/email-validator/-/email-validator-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/emittery": {
|
"node_modules/emittery": {
|
||||||
"version": "0.8.1",
|
"version": "0.8.1",
|
||||||
"resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz",
|
"resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz",
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
"@types/react": "^18.2.8",
|
"@types/react": "^18.2.8",
|
||||||
"@types/react-dom": "^18.2.4",
|
"@types/react-dom": "^18.2.4",
|
||||||
"date-and-time": "^3.0.1",
|
"date-and-time": "^3.0.1",
|
||||||
|
"email-validator": "^2.0.4",
|
||||||
"filesize": "^10.0.9",
|
"filesize": "^10.0.9",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
|
@ -3,6 +3,7 @@ import DeleteIcon from "@mui/icons-material/Delete";
|
|||||||
import EditIcon from "@mui/icons-material/Edit";
|
import EditIcon from "@mui/icons-material/Edit";
|
||||||
import SaveIcon from "@mui/icons-material/Save";
|
import SaveIcon from "@mui/icons-material/Save";
|
||||||
import { Button, Grid, Stack } from "@mui/material";
|
import { Button, Grid, Stack } from "@mui/material";
|
||||||
|
import * as EmailValidator from "email-validator";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import FileDownloadIcon from "@mui/icons-material/FileDownload";
|
import FileDownloadIcon from "@mui/icons-material/FileDownload";
|
||||||
import { useNavigate, useParams } from "react-router-dom";
|
import { useNavigate, useParams } from "react-router-dom";
|
||||||
@ -494,7 +495,32 @@ export function MemberPage(p: {
|
|||||||
|
|
||||||
{/* Contact */}
|
{/* Contact */}
|
||||||
<Grid item sm={12} md={6}>
|
<Grid item sm={12} md={6}>
|
||||||
<PropertiesBox title="Contact">TODO</PropertiesBox>
|
<PropertiesBox title="Contact">
|
||||||
|
{/* Email */}
|
||||||
|
<PropEdit
|
||||||
|
label="Adresse mail"
|
||||||
|
editable={p.editing}
|
||||||
|
value={member.email}
|
||||||
|
onValueChange={(v) => {
|
||||||
|
member.email = v;
|
||||||
|
updatedMember();
|
||||||
|
}}
|
||||||
|
size={ServerApi.Config.constraints.member_email}
|
||||||
|
checkValue={(e) => EmailValidator.validate(e)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{/* Phone number */}
|
||||||
|
<PropEdit
|
||||||
|
label="Téléphone"
|
||||||
|
editable={p.editing}
|
||||||
|
value={member.phone}
|
||||||
|
onValueChange={(v) => {
|
||||||
|
member.phone = v;
|
||||||
|
updatedMember();
|
||||||
|
}}
|
||||||
|
size={ServerApi.Config.constraints.member_phone}
|
||||||
|
/>
|
||||||
|
</PropertiesBox>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
{/* Bio */}
|
{/* Bio */}
|
||||||
|
@ -1,25 +1,21 @@
|
|||||||
|
import { mdiCross } from "@mdi/js";
|
||||||
|
import Icon from "@mdi/react";
|
||||||
|
import ClearIcon from "@mui/icons-material/Clear";
|
||||||
import {
|
import {
|
||||||
Autocomplete,
|
Autocomplete,
|
||||||
Avatar,
|
|
||||||
Box,
|
|
||||||
IconButton,
|
IconButton,
|
||||||
ListItem,
|
|
||||||
ListItemAvatar,
|
ListItemAvatar,
|
||||||
ListItemButton,
|
ListItemButton,
|
||||||
ListItemSecondaryAction,
|
ListItemSecondaryAction,
|
||||||
ListItemText,
|
ListItemText,
|
||||||
TextField,
|
TextField,
|
||||||
Typography,
|
Typography,
|
||||||
autocompleteClasses,
|
|
||||||
} from "@mui/material";
|
} from "@mui/material";
|
||||||
import ClearIcon from "@mui/icons-material/Clear";
|
import React from "react";
|
||||||
|
import { useNavigate } from "react-router-dom";
|
||||||
import { Member, fmtDate } from "../../api/MemberApi";
|
import { Member, fmtDate } from "../../api/MemberApi";
|
||||||
import { useFamily } from "../BaseFamilyRoute";
|
import { useFamily } from "../BaseFamilyRoute";
|
||||||
import React from "react";
|
|
||||||
import { MemberPhoto } from "../MemberPhoto";
|
import { MemberPhoto } from "../MemberPhoto";
|
||||||
import Icon from "@mdi/react";
|
|
||||||
import { mdiCross } from "@mdi/js";
|
|
||||||
import { useNavigate } from "react-router-dom";
|
|
||||||
|
|
||||||
export function MemberInput(p: {
|
export function MemberInput(p: {
|
||||||
editable: boolean;
|
editable: boolean;
|
||||||
|
@ -10,6 +10,7 @@ export function PropEdit(p: {
|
|||||||
value?: string;
|
value?: string;
|
||||||
onValueChange: (newVal: string | undefined) => void;
|
onValueChange: (newVal: string | undefined) => void;
|
||||||
size: LenConstraint;
|
size: LenConstraint;
|
||||||
|
checkValue?: (s: string) => boolean;
|
||||||
}): React.ReactElement {
|
}): React.ReactElement {
|
||||||
if (((!p.editable && p.value) ?? "") === "") return <></>;
|
if (((!p.editable && p.value) ?? "") === "") return <></>;
|
||||||
|
|
||||||
@ -30,6 +31,13 @@ export function PropEdit(p: {
|
|||||||
}}
|
}}
|
||||||
variant={p.editable ? "filled" : "standard"}
|
variant={p.editable ? "filled" : "standard"}
|
||||||
style={{ width: "100%", marginBottom: "15px" }}
|
style={{ width: "100%", marginBottom: "15px" }}
|
||||||
|
error={
|
||||||
|
(p.checkValue &&
|
||||||
|
p.value &&
|
||||||
|
p.value.length > 0 &&
|
||||||
|
!p.checkValue(p.value)) ||
|
||||||
|
false
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user