|
|
@ -185,6 +185,7 @@ class CreateElection extends Component { |
|
|
|
redirectTo: null, |
|
|
|
isAdvancedOptionsOpen: false, |
|
|
|
restrictResult: false, |
|
|
|
isTimeLimited: false, |
|
|
|
start, |
|
|
|
// by default, the election ends in a week |
|
|
|
finish: new Date(start.getTime() + 7 * 24 * 3600 * 1000), |
|
|
@ -194,12 +195,17 @@ class CreateElection extends Component { |
|
|
|
this.focusInput = React.createRef(); |
|
|
|
this.handleSubmit = this.handleSubmit.bind(this); |
|
|
|
this.handleRestrictResultCheck = this.handleRestrictResultCheck.bind(this); |
|
|
|
this.handleIsTimeLimited = this.handleIsTimeLimited.bind(this); |
|
|
|
} |
|
|
|
|
|
|
|
handleChangeTitle = event => { |
|
|
|
this.setState({ title: event.target.value }); |
|
|
|
}; |
|
|
|
|
|
|
|
handleIsTimeLimited = event => { |
|
|
|
this.setState({ isTimeLimited: event.target.value === "1" }); |
|
|
|
}; |
|
|
|
|
|
|
|
handleRestrictResultCheck = event => { |
|
|
|
this.setState({ restrictResult: event.target.value === "1" }); |
|
|
|
}; |
|
|
@ -288,9 +294,12 @@ class CreateElection extends Component { |
|
|
|
candidates, |
|
|
|
title, |
|
|
|
numGrades, |
|
|
|
electorEmails |
|
|
|
} = this.state; |
|
|
|
|
|
|
|
let { |
|
|
|
start, |
|
|
|
finish, |
|
|
|
electorEmails |
|
|
|
} = this.state; |
|
|
|
|
|
|
|
const endpoint = resolve( |
|
|
@ -298,6 +307,14 @@ class CreateElection extends Component { |
|
|
|
this.context.routesServer.setElection |
|
|
|
); |
|
|
|
|
|
|
|
if(!this.state.isTimeLimited){ |
|
|
|
let now = new Date(); |
|
|
|
start = new Date( |
|
|
|
now.getTime() - minutes(now) - seconds(now) - ms(now) |
|
|
|
); |
|
|
|
finish=new Date(start.getTime() + 1 * 365 * 24 * 3600 * 1000); |
|
|
|
} |
|
|
|
|
|
|
|
const { t } = this.props; |
|
|
|
const locale = |
|
|
|
i18n.language.substring(0, 2).toLowerCase() === "fr" ? "fr" : "en"; |
|
|
@ -517,80 +534,121 @@ class CreateElection extends Component { |
|
|
|
<hr className="mt-2 mb-2" /> |
|
|
|
<Row> |
|
|
|
<Col xs="12" md="3" lg="3"> |
|
|
|
<span className="label">{t("Starting date")}</span> |
|
|
|
</Col> |
|
|
|
<Col xs="6" md="4" lg="3"> |
|
|
|
<input |
|
|
|
className="form-control" |
|
|
|
type="date" |
|
|
|
value={dateToISO(start)} |
|
|
|
onChange={e => { |
|
|
|
this.setState({ |
|
|
|
start: new Date( |
|
|
|
timeMinusDate(start) + |
|
|
|
new Date(e.target.valueAsNumber).getTime() |
|
|
|
) |
|
|
|
}); |
|
|
|
}} |
|
|
|
/> |
|
|
|
</Col> |
|
|
|
<Col xs="6" md="5" lg="3"> |
|
|
|
<select |
|
|
|
className="form-control" |
|
|
|
value={getOnlyValidDate(start).getHours()} |
|
|
|
onChange={e => |
|
|
|
this.setState({ |
|
|
|
start: new Date( |
|
|
|
dateMinusTime(start).getTime() + |
|
|
|
e.target.value * 3600000 |
|
|
|
) |
|
|
|
}) |
|
|
|
} |
|
|
|
> |
|
|
|
{displayClockOptions()} |
|
|
|
</select> |
|
|
|
</Col> |
|
|
|
</Row> |
|
|
|
<hr className="mt-2 mb-2" /> |
|
|
|
<Row> |
|
|
|
<Col xs="12" md="3" lg="3"> |
|
|
|
<span className="label">{t("Ending date")}</span> |
|
|
|
<Label for="title">{t("Durée du vote")}</Label> |
|
|
|
</Col> |
|
|
|
<Col xs="6" md="4" lg="3"> |
|
|
|
<input |
|
|
|
className="form-control" |
|
|
|
type="date" |
|
|
|
value={dateToISO(finish)} |
|
|
|
min={dateToISO(start)} |
|
|
|
onChange={e => { |
|
|
|
this.setState({ |
|
|
|
finish: new Date( |
|
|
|
timeMinusDate(finish) + |
|
|
|
new Date( |
|
|
|
e.target.valueAsNumber |
|
|
|
).getTime() |
|
|
|
) |
|
|
|
}); |
|
|
|
}} |
|
|
|
/> |
|
|
|
<Col xs="12" md="4" lg="3"> |
|
|
|
<Label className="radio " htmlFor="is_time_limited_false"> |
|
|
|
<span className="small text-dark">{t("Illimitée")}</span> |
|
|
|
<input |
|
|
|
className="radio" |
|
|
|
type="radio" |
|
|
|
name="time_limited" |
|
|
|
id="is_time_limited_false" |
|
|
|
onClick={this.handleIsTimeLimited} |
|
|
|
defaultChecked={!this.state.isTimeLimited} |
|
|
|
value="0" |
|
|
|
/> |
|
|
|
<span className="checkround checkround-gray" /> |
|
|
|
</Label> |
|
|
|
</Col> |
|
|
|
<Col xs="6" md="5" lg="3"> |
|
|
|
<select |
|
|
|
className="form-control" |
|
|
|
value={getOnlyValidDate(finish).getHours()} |
|
|
|
onChange={e => |
|
|
|
this.setState({ |
|
|
|
finish: new Date( |
|
|
|
dateMinusTime(finish).getTime() + |
|
|
|
e.target.value * 3600000 |
|
|
|
) |
|
|
|
}) |
|
|
|
} |
|
|
|
> |
|
|
|
{displayClockOptions()} |
|
|
|
</select> |
|
|
|
<Col xs="12" md="4" lg="3"> |
|
|
|
<Label className="radio" htmlFor="is_time_limited_true"> |
|
|
|
<span className="small"> |
|
|
|
<span className="text-dark"> |
|
|
|
{t("Période définie")} |
|
|
|
</span> |
|
|
|
</span> |
|
|
|
<input |
|
|
|
className="radio" |
|
|
|
type="radio" |
|
|
|
name="time_limited" |
|
|
|
id="is_time_limited_true" |
|
|
|
onClick={this.handleIsTimeLimited} |
|
|
|
defaultChecked={this.state.isTimeLimited} |
|
|
|
value="1" |
|
|
|
/> |
|
|
|
<span className="checkround checkround-gray" /> |
|
|
|
</Label> |
|
|
|
</Col> |
|
|
|
</Row> |
|
|
|
<div |
|
|
|
className={(this.state.isTimeLimited ? "d-block " : "d-none")+" bg-light p-3"} |
|
|
|
> |
|
|
|
<Row > |
|
|
|
<Col xs="12" md="3" lg="3"> |
|
|
|
<span className="label">- {t("Starting date")}</span> |
|
|
|
</Col> |
|
|
|
<Col xs="6" md="4" lg="3"> |
|
|
|
<input |
|
|
|
className="form-control" |
|
|
|
type="date" |
|
|
|
value={dateToISO(start)} |
|
|
|
onChange={e => { |
|
|
|
this.setState({ |
|
|
|
start: new Date( |
|
|
|
timeMinusDate(start) + |
|
|
|
new Date(e.target.valueAsNumber).getTime() |
|
|
|
) |
|
|
|
}); |
|
|
|
}} |
|
|
|
/> |
|
|
|
</Col> |
|
|
|
<Col xs="6" md="5" lg="3"> |
|
|
|
<select |
|
|
|
className="form-control" |
|
|
|
value={getOnlyValidDate(start).getHours()} |
|
|
|
onChange={e => |
|
|
|
this.setState({ |
|
|
|
start: new Date( |
|
|
|
dateMinusTime(start).getTime() + |
|
|
|
e.target.value * 3600000 |
|
|
|
) |
|
|
|
}) |
|
|
|
} |
|
|
|
> |
|
|
|
{displayClockOptions()} |
|
|
|
</select> |
|
|
|
</Col> |
|
|
|
</Row> |
|
|
|
|
|
|
|
<Row className="mt-2"> |
|
|
|
<Col xs="12" md="3" lg="3"> |
|
|
|
<span className="label">- {t("Ending date")}</span> |
|
|
|
</Col> |
|
|
|
<Col xs="6" md="4" lg="3"> |
|
|
|
<input |
|
|
|
className="form-control" |
|
|
|
type="date" |
|
|
|
value={dateToISO(finish)} |
|
|
|
min={dateToISO(start)} |
|
|
|
onChange={e => { |
|
|
|
this.setState({ |
|
|
|
finish: new Date( |
|
|
|
timeMinusDate(finish) + |
|
|
|
new Date(e.target.valueAsNumber).getTime() |
|
|
|
) |
|
|
|
}); |
|
|
|
}} |
|
|
|
/> |
|
|
|
</Col> |
|
|
|
<Col xs="6" md="5" lg="3"> |
|
|
|
<select |
|
|
|
className="form-control" |
|
|
|
value={getOnlyValidDate(finish).getHours()} |
|
|
|
onChange={e => |
|
|
|
this.setState({ |
|
|
|
finish: new Date( |
|
|
|
dateMinusTime(finish).getTime() + |
|
|
|
e.target.value * 3600000 |
|
|
|
) |
|
|
|
}) |
|
|
|
} |
|
|
|
> |
|
|
|
{displayClockOptions()} |
|
|
|
</select> |
|
|
|
</Col> |
|
|
|
</Row> |
|
|
|
</div> |
|
|
|
<hr className="mt-2 mb-2" /> |
|
|
|
<Row> |
|
|
|
<Col xs="12" md="3" lg="3"> |
|
|
@ -724,6 +782,7 @@ class CreateElection extends Component { |
|
|
|
})} |
|
|
|
</ul> |
|
|
|
</div> |
|
|
|
<div className={(this.state.isTimeLimited ? "d-block " : "d-none")} > |
|
|
|
<div className="text-white bg-primary p-2 pl-3 pr-3 rounded"> |
|
|
|
{t("Dates")} |
|
|
|
</div> |
|
|
@ -739,6 +798,7 @@ class CreateElection extends Component { |
|
|
|
{finish.toLocaleTimeString()} |
|
|
|
</b> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div className="text-white bg-primary p-2 pl-3 pr-3 rounded"> |
|
|
|
{t("Grades")} |
|
|
|
</div> |
|
|
|