Merge branch 'master' into 'production'

Few form fixes

See merge request sahkoinsinoorikilta/vtmk/web2.0-frontend!10
This commit is contained in:
Aarni Halinen
2020-07-24 21:48:53 +00:00
5 changed files with 27 additions and 24 deletions
+11 -4
View File
@@ -6,6 +6,7 @@ import { Question } from "@components/SignupQuestionsWidget";
export interface SignupForm { export interface SignupForm {
id?: number; id?: number;
title: string; title: string;
visible: boolean;
start_time: string; start_time: string;
end_time: string; end_time: string;
questions: Question[]; questions: Question[];
@@ -20,9 +21,12 @@ export interface SignupForm {
}; };
} }
export async function getForms(): Promise<SignupForm[]> { export async function getForms(auth = false): Promise<SignupForm[]> {
try { try {
const resp = await axios.get(url); const headers = auth ? { "Authorization": getAuthHeader() } : null;
const resp = await axios.get(url, {
headers
});
const { results } = resp.data; const { results } = resp.data;
return results; return results;
} catch (err) { } catch (err) {
@@ -31,9 +35,12 @@ export async function getForms(): Promise<SignupForm[]> {
} }
} }
export async function getForm(id: number): Promise<SignupForm> { export async function getForm(id: number, auth = false): Promise<SignupForm> {
try { try {
const resp = await axios.get(`${url}${id}/`); const headers = auth ? { "Authorization": getAuthHeader() } : null;
const resp = await axios.get(`${url}${id}/`, {
headers
});
return resp.data; return resp.data;
} catch (err) { } catch (err) {
console.error(err); console.error(err);
+1 -1
View File
@@ -47,7 +47,7 @@ class AdminSignupPage extends React.Component<AdminSignupPageProps, AdminSignupP
} }
fetchSignupForms = async () => { fetchSignupForms = async () => {
const getSignupFormsPromise = getForms(); const getSignupFormsPromise = getForms(true);
try { try {
const signupForms = await getSignupFormsPromise; const signupForms = await getSignupFormsPromise;
this.setState({ this.setState({
+11 -15
View File
@@ -1,15 +1,12 @@
import React from "react"; import React from "react";
import { Helmet } from "react-helmet"; import { Helmet } from "react-helmet";
import "./EventCreatePage.scss"; import "./EventCreatePage.scss";
import { isAuthenticated } from "@utils/auth";
import Form from "react-jsonschema-form"; import Form from "react-jsonschema-form";
import { Tag, getTags } from "@models/Tag"; import { Tag, getTags } from "@models/Tag";
import { SignupForm, getForms } from "@models/SignupForm"; import { SignupForm, getForms } from "@models/SignupForm";
import { createEvent, getEvent, updateEvent, Event } from "@models/Event"; import { createEvent, getEvent, updateEvent, Event } from "@models/Event";
import DatetimeWidget from "@components/DatetimeWidget"; import DatetimeWidget from "@components/DatetimeWidget";
import SectionDividerWidget from "@components/SectionDividerWidget"; import SectionDividerWidget from "@components/SectionDividerWidget";
import Icon from "@components/Icon";
import { IconType } from "@components/Icon/Icon";
const widgets = { const widgets = {
datetime: DatetimeWidget, datetime: DatetimeWidget,
@@ -84,7 +81,7 @@ class EventCreatePage extends React.Component<EventCreatePageProps, EventCreateP
fetchSignupForms = async () => { fetchSignupForms = async () => {
try { try {
const signupForm = await getForms(); const signupForm = await getForms(true);
this.setState({ this.setState({
signupForm signupForm
}) })
@@ -98,14 +95,10 @@ class EventCreatePage extends React.Component<EventCreatePageProps, EventCreateP
} }
onSubmit = async (data) => { onSubmit = async (data) => {
console.log("submitted, data:");
console.log(data.formData);
const { history } = this.props; const { history } = this.props;
try { try {
const payload = data.formData; const payload = data.formData;
if (payload.image.startsWith("http")) payload.image = undefined; if (typeof payload.image === "string" && payload.image.startsWith("http")) payload.image = undefined;
payload.signup_id = payload.signupForm; payload.signup_id = payload.signupForm;
payload.tag_id = payload.tags; payload.tag_id = payload.tags;
if (payload.id === undefined) { if (payload.id === undefined) {
@@ -134,6 +127,7 @@ class EventCreatePage extends React.Component<EventCreatePageProps, EventCreateP
onError = (data) => { onError = (data) => {
console.error("error, data:"); console.error("error, data:");
console.log(this.state.formData);
console.log(data); console.log(data);
} }
@@ -197,19 +191,21 @@ class EventCreatePage extends React.Component<EventCreatePageProps, EventCreateP
default: tomorrowDatetime, default: tomorrowDatetime,
}, },
signupForm: { signupForm: {
type: ["array"], type: "array",
title: "Signup forms", title: "Signup forms",
items: { items: {
type: "number",
// TODO: A bug here, DB must have at least one SignupForm, otherwise cannot submit // TODO: A bug here, DB must have at least one SignupForm, otherwise cannot submit
enum: [...signupForm.map(form => form.id)], enum: signupForm.map(form => form.id),
enumNames: [...signupForm.map(form => form.title)], enumNames: signupForm.map(form => form.title),
}, },
uniqueItems: true, uniqueItems: true,
}, },
image: { image: {
"type": ["string", "null"], type: ["string", "null"],
"format": formData.image ? "uri-reference" : "data-url", format: formData.image ? "uri-reference" : "data-url",
"title": "Override tag icon with image" title: "Override tag icon with image",
default: undefined
}, },
finnish_section_divider: { finnish_section_divider: {
title: "Finnish", title: "Finnish",
+3 -3
View File
@@ -44,7 +44,7 @@ class SignupCreatePage extends React.Component<SignupCreatePageProps, SignupCrea
fetchInitialFormData = async (id: number) => { fetchInitialFormData = async (id: number) => {
try { try {
const data = await getForm(id); const data = await getForm(id, true);
this.setState({ this.setState({
formData: { formData: {
...data, ...data,
@@ -133,13 +133,13 @@ class SignupCreatePage extends React.Component<SignupCreatePageProps, SignupCrea
visible: { visible: {
type: "boolean", type: "boolean",
title: "Visible", title: "Visible",
default: true, default: false,
}, },
quota: { quota: {
type: "integer", type: "integer",
title: "Quota", title: "Quota",
minimum: 0, minimum: 0,
default: null, default: 0,
}, },
start_time: { start_time: {
type: "string", type: "string",
+1 -1
View File
@@ -26,7 +26,7 @@ const renderList = (signUpForm: SignupForm) => {
return ( return (
<> <>
<h6> <h6>
Ilmoittautuneet {signUpForm.quota && (`(${signUpForm.signups.length}/${signUpForm.quota})`)}: Ilmoittautuneet{signUpForm.quota > 0 && (` (${signUpForm.signups.length}/${signUpForm.quota})`)}:
</h6> </h6>
<ol> <ol>
{signUpForm.signups.map((s, idx) => ( {signUpForm.signups.map((s, idx) => (