Added datastructure and gql queries, added dynamic info

This commit is contained in:
Philipp Lohner 2021-06-23 22:51:52 +02:00
parent 56691a3135
commit ee23820cce
3 changed files with 56 additions and 11 deletions

View file

@ -49,3 +49,20 @@ create policy select_answer
for select
to candymat_anonymous, candymat_person -- maybe change to candymat_person only in the future
using (true);
drop table if exists candymat_data.user_app_info;
create table candymat_data.user_app_info
(
row_id character varying(50) primary key,
title character varying(300) NOT NULL,
content character varying(15000)
);
grant select on table candymat_data.user_app_info to candymat_anonymous, candymat_person;
grant insert, update, delete on table candymat_data.user_app_info to candymat_editor;
delete from candymat_data.user_app_info where row_id = 'about_page';
insert into candymat_data.user_app_info (row_id, title, content) values
('about_page', 'About Candymat', '<h1>Wer steckt eigentlich hinter dem Kandimat?</h1><p>Der Kandimat wurde von den ehrenamtlichen Mitgliedern des Netzbegrünung e.V. entwickelt. Eure Geschäftsstelle und die Kandidat*innen haben die redaktionelle Arbeit für die Inhalte des Kandimats geleistet.</p>');
insert into candymat_data.user_app_info (row_id, title, content) values
('contact_page', 'Contact Candymat', '<h1>Kontakt</h1><p>Kontakt Infos</p>');
insert into candymat_data.user_app_info (row_id, title, content) values
('legal_page', 'Legal Candymat', '<h1>Impressum</h1><p>Impressum Infos</p>');

View file

@ -0,0 +1,26 @@
import { gql } from "@apollo/client";
export const GET_ALL_PAGE_INFO = gql`
query AllInfos {
allUserAppInfos {
nodes {
id
rowId
title
content
}
}
}
`;
export interface GetAllPageInfoResponse {
allUserAppInfos: {
nodes: Array<{
id: string;
rowId: string;
title: string;
content: string;
}>;
__typename: "UserAppInfosConnection";
};
}

View file

@ -2,7 +2,10 @@ import React from "react";
import { Paper, Typography } from "@material-ui/core";
import { makeStyles } from "@material-ui/core/styles";
import { useQuery } from "@apollo/client";
import { BasicPersonResponse } from "../backend/queries/person";
import {
GET_ALL_PAGE_INFO,
GetAllPageInfoResponse,
} from "../backend/queries/page_info";
const useStyles = makeStyles((theme) => ({
root: {
@ -27,6 +30,11 @@ interface EditInformationProps {
export function EditInformation(
props: EditInformationProps
): React.ReactElement {
const infos =
useQuery<GetAllPageInfoResponse, null>(GET_ALL_PAGE_INFO).data
?.allUserAppInfos.nodes || [];
const about = infos.find((info) => info.rowId === "about_page");
const legal = infos.find((info) => info.rowId === "legal_page");
const classes = useStyles();
return (
@ -37,26 +45,20 @@ export function EditInformation(
<Paper className={classes.root}>
<Typography component={"h2"} variant="h6" color="primary" gutterBottom>
{/* eslint-disable-next-line react/no-unescaped-entities */}
Der "Über Uns" Text:
{about?.title || ""}
</Typography>
<form>
<textarea
className={classes.textArea}
value="Hier muss der Über Uns Text rein"
>
<textarea className={classes.textArea} value={about?.content || ""}>
{/*Hier kommt der Inhalt aus der Datenbank*/}
</textarea>
</form>
<Typography component={"h2"} variant="h6" color="primary" gutterBottom>
{/* eslint-disable-next-line react/no-unescaped-entities */}
Der "Impressum" Text:
{legal?.title || ""}
</Typography>
<form>
<textarea
className={classes.textArea}
value="Hier muss der Impressum Text rein"
>
<textarea className={classes.textArea} value={legal?.content || ""}>
{/*Hier kommt der Inhalt aus der Datenbank*/}
</textarea>
</form>