Skip to content

Commit 8c8910d

Browse files
committed
[fix] #97
1 parent 85e2d31 commit 8c8910d

File tree

2 files changed

+84
-34
lines changed

2 files changed

+84
-34
lines changed

src/pages/Add/GroupAdd/GroupAdd.tsx

Lines changed: 55 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {
1919
UserData,
2020
} from "../../../interface";
2121
import useStyles from "../styles";
22-
import {check} from "./check";
22+
import {check, checkQuestion} from "./check";
2323
import {useSnackbar} from "notistack";
2424
import {KeyboardDatePicker, MuiPickersUtilsProvider} from "@material-ui/pickers";
2525
import DateFnsUtils from "@date-io/date-fns";
@@ -34,6 +34,19 @@ export default function GroupAddDialogs(props: {
3434
}) {
3535
const {open, setOpen, userData, reload} = props
3636
const [data, setData] = React.useState(DefaultGroupAddData);
37+
const [question, setQuestion] = React.useState<{
38+
question1: string,
39+
question2: string,
40+
question3: string,
41+
question4: string
42+
}>(
43+
{
44+
question1: "",
45+
question2: "",
46+
question3: "",
47+
question4: ""
48+
}
49+
);
3750
const {enqueueSnackbar} = useSnackbar();
3851
const history = useHistory();
3952

@@ -46,9 +59,24 @@ export default function GroupAddDialogs(props: {
4659

4760
const request = () => {
4861
console.log(data);
62+
63+
// check question item
64+
const errQuestion = checkQuestion(question);
65+
if (errQuestion !== "") {
66+
console.log("NG: " + errQuestion)
67+
enqueueSnackbar(errQuestion, {variant: "error"});
68+
return;
69+
}
70+
71+
const tmpQuestion = "1. どこで当団体のことを知りましたか?\n" + question.question1 + "\n\n" +
72+
"2. どのような用途で当団体のネットワークに接続しますか?\n" + question.question2 + "\n\n" +
73+
"3. アドレスを当団体から割り当てる必要はありますか?\n" + question.question3 + "\n\n" +
74+
"4. 情報発信しているSNS(Twitter,Facebook)やWebサイト、GitHub、成果物などがありましたら教えてください。\n" + question.question4;
75+
setData({...data, question: tmpQuestion});
76+
4977
const err = check(data);
5078
if (err === "") {
51-
console.log("OK")
79+
console.log("OK");
5280
Post(data).then(res => {
5381
if (res.error === "") {
5482
console.log(res.data);
@@ -85,7 +113,7 @@ export default function GroupAddDialogs(props: {
85113
<Grid item xs={12}>
86114
<TermAgreeAdd key={"term_agree_add_select"} data={data} setData={setData}/>
87115
<br/>
88-
<QuestionAdd key={"connection_add_type"} data={data} setData={setData}/>
116+
<QuestionAdd key={"connection_add_type"} data={question} setData={setQuestion}/>
89117
<br/>
90118
<OrgInfoAdd key={"org_info_add"} data={data} setData={setData}/>
91119
<br/>
@@ -165,43 +193,43 @@ export function TermAgreeAdd(props: {
165193
}
166194

167195
export function QuestionAdd(props: {
168-
data: GroupAddData
169-
setData: Dispatch<SetStateAction<GroupAddData>>
196+
data: {
197+
question1: string,
198+
question2: string,
199+
question3: string,
200+
question4: string
201+
}
202+
setData: Dispatch<SetStateAction<{
203+
question1: string,
204+
question2: string,
205+
question3: string,
206+
question4: string
207+
}>>
170208
}) {
171209
const {data, setData} = props;
172-
const [question1, setQuestion1] = React.useState("");
173-
const [question2, setQuestion2] = React.useState("");
174-
const [question3, setQuestion3] = React.useState("");
175-
const [question4, setQuestion4] = React.useState("");
176210
const classes = useStyles();
177211

178-
const apply = () => {
179-
const question = question1 + "\n" + question2 + "\n" + question3 + "\n" + question4;
180-
setData({...data, question: question});
181-
}
182-
183212
return (
184213
<div>
185214
<FormControl component="fieldset">
186215
<FormLabel component="legend">1. どこで当団体のことを知りましたか?</FormLabel>
187-
<div>当団体の運営委員より紹介を受けた方は紹介者の名前を記入してください。</div>
216+
<div>当団体の運営委員より紹介を受けた方は紹介者の名前を記入してください。[10文字以上]</div>
188217
<br/>
189218
<TextField
190219
className={classes.formVeryLong}
191220
id="question1"
192221
label=""
193222
multiline
194223
rows={4}
195-
value={question1}
224+
value={data.question1}
196225
onChange={event => {
197-
setQuestion1(event.target.value);
198-
apply();
226+
setData({...data, question1: event.target.value});
199227
}}
200228
variant="outlined"
201229
/>
202230
<br/>
203231
<FormLabel component="legend">2. どのような用途で当団体のネットワークに接続しますか?</FormLabel>
204-
<div>例) 研究目的、勉強、自宅サーバ用途(商用利用は不可)300文字</div>
232+
<div>例) 研究目的、勉強、自宅サーバ用途(商用利用は不可)[300文字以上]</div>
205233
<br/>
206234
<TextField
207235
className={classes.formVeryLong}
@@ -212,44 +240,42 @@ export function QuestionAdd(props: {
212240
inputProps={{
213241
minLength: 300
214242
}}
215-
value={question2}
243+
value={data.question2}
216244
onChange={event => {
217-
setQuestion2(event.target.value);
218-
apply();
245+
setData({...data, question2: event.target.value});
219246
}}
220247
variant="outlined"
221248
/>
222249
<br/>
223250
<FormLabel component="legend">3. アドレスを当団体から割り当てる必要はありますか?</FormLabel>
224-
<div>PIアドレスやASS番号をお持ちの方は、それらをご利用いただくことも可能です。</div>
251+
<div>PIアドレスやASS番号をお持ちの方は、それらをご利用いただくことも可能です。[5文字以上]</div>
225252
<br/>
226253
<TextField
227254
className={classes.formVeryLong}
228255
id="question3"
229256
label=""
230257
multiline
231258
rows={4}
232-
value={question3}
259+
value={data.question3}
233260
onChange={event => {
234-
setQuestion3(event.target.value);
235-
apply();
261+
setData({...data, question3: event.target.value});
236262
}}
237263
variant="outlined"
238264
/>
239265
<br/>
240266
<FormLabel component="legend">4.
241267
情報発信しているSNS(Twitter,Facebook)やWebサイト、GitHub、成果物などがありましたら教えてください。</FormLabel>
268+
<div>[20文字以上]</div>
242269
<br/>
243270
<TextField
244271
className={classes.formVeryLong}
245272
id="question4"
246273
label=""
247274
multiline
248275
rows={4}
249-
value={question4}
276+
value={data.question4}
250277
onChange={event => {
251-
setQuestion4(event.target.value);
252-
apply();
278+
setData({...data, question4: event.target.value});
253279
}}
254280
variant="outlined"
255281
/>

src/pages/Add/GroupAdd/check.ts

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,6 @@ export function check(data: GroupAddData): string {
66
return "規約に同意されていません。";
77
}
88

9-
// check question word count
10-
if (data.question.length > 310) {
11-
return "[項目1,項目2,項目3,項目4]質問欄の文字数が足りません。";
12-
}
13-
149
// check org info form
1510
if (data.org.length === 0) {
1611
return "1.2.1. 団体名が入力されていません。";
@@ -36,3 +31,32 @@ export function check(data: GroupAddData): string {
3631

3732
return "";
3833
}
34+
35+
export function checkQuestion(data: {
36+
question1: string,
37+
question2: string,
38+
question3: string,
39+
question4: string
40+
}): string {
41+
// check question1 word count
42+
if (data.question1.length < 10) {
43+
return "[項目1]「どこで当団体のことを知りましたか」の文字数が足りません。";
44+
}
45+
46+
// check question2 word count
47+
if (data.question2.length < 300) {
48+
return "[項目2]「どのような用途で当団体のネットワークに接続しますか」の文字数が足りません。";
49+
}
50+
51+
// check question3 word count
52+
if (data.question3.length < 5) {
53+
return "[項目3]「アドレスを当団体から割り当てる必要はありますか」の文字数が足りません。";
54+
}
55+
56+
// check question2 word count
57+
if (data.question4.length < 20) {
58+
return "[項目4]「情報発信しているSNS(Twitter,Facebook)やWebサイト、GitHub、成果物などがありましたら教えてください」の文字数が足りません。";
59+
}
60+
61+
return "";
62+
}

0 commit comments

Comments
 (0)