From a8e3dc48df33b984cbd12282f2244466648aa7e0 Mon Sep 17 00:00:00 2001 From: suvodip ghosh Date: Wed, 17 May 2023 11:51:16 +0530 Subject: [PATCH 01/16] edit-user --- src/pages/edit-school.jsx | 24 +- src/pages/edit-user.jsx | 402 ++++++++++++++++++++++++++++++++ src/pages/school-list/index.jsx | 3 +- src/pages/user-list.jsx | 57 +++-- 4 files changed, 457 insertions(+), 29 deletions(-) create mode 100644 src/pages/edit-user.jsx diff --git a/src/pages/edit-school.jsx b/src/pages/edit-school.jsx index 905c281..ef230da 100644 --- a/src/pages/edit-school.jsx +++ b/src/pages/edit-school.jsx @@ -27,11 +27,13 @@ export default function addSchoolForm() { fetch(`https://management.beanstalkedu.com/items/school/${router.query.school}`) .then(res => res.json()) .then(data => { - console.log(router.query.school); setSchool(data.data) + // console.log(router.query.school); + setSchool(data.data) }) } - + }, [router.query.school]); + // console.log(setSchool) const handleSubmit = async (event) => { event.preventDefault() @@ -77,7 +79,7 @@ export default function addSchoolForm() {
-

School Registration Form

+

Update School Information

@@ -90,38 +92,38 @@ export default function addSchoolForm() {
- setSchool(e.target.value)} name="country" /> + setSchool(e.target.value)} name="country" />
- setSchool(e.target.value)} name="state" /> + setSchool(e.target.value)} name="state" className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- setSchool(e.target.value)} name="cities" /> + setSchool(e.target.value)} name="cities" className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]'/>
- setSchool(e.target.value)} name="school_contact_number" /> + setSchool(e.target.value)} name="school_contact_number" className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- setSchool(e.target.value)} /> + setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- setSchool(e.target.value)} /> + setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- setSchool(e.target.value)} /> + setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- setSchool(e.target.value)} /> + setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
diff --git a/src/pages/edit-user.jsx b/src/pages/edit-user.jsx new file mode 100644 index 0000000..46d6eba --- /dev/null +++ b/src/pages/edit-user.jsx @@ -0,0 +1,402 @@ +// https://management.beanstalkedu.com/items/school +// import React from 'react'; +import {useId, useState, useEffect, useMemo} from 'react'; +import Select from 'react-select' +import countryList from 'react-select-country-list' +import 'react-phone-number-input/style.css' +import PhoneInput from 'react-phone-number-input' +import NavBar from '../components/NavBar'; +import { useRouter } from 'next/router' +// import { Inter } from 'next/font/google' + +const typeParent = "parent" + +export default function addUserForm() { + + const router = useRouter(); + + const [allLanguage, setLanguage] = useState([ + {lang: "Assamese", value: false}, + {lang: "Bengali", value: false}, + {lang: "English", value: false}, + {lang: "Hindi", value: false}, + {lang: "Telegu", value: false}, + {lang: "Punjabi", value: false}, + {lang: "Malayalam", value: false}, + {lang: "Tamil", value: false}, + {lang: "Kannada", value: false}, + {lang: "Gujrati", value: false}, + ]) + // console.log(allLanguage) + const [currentType, setCurrentType] = useState(typeParent) + const [countryValue, setCountryValue] = useState('') + const options = useMemo(() => countryList().getData(), []) + const [phoneValue, setphoneValue] = useState() + let [individualValue = true, setindividualValue] = useState() + + const [allStates, setAllStates] = useState([]) + const [allCities, setAllCities] = useState([]) + + const handleSelectAllStates = stateCode => { + setAllCities([]) + fetch(`https://api.siliconpin.com/v3/list/country/city/?country=${countryValue.value}&state=${stateCode.value}`) + .then(res => res.json()) + .then(data => { + // console.log("handleSelectAllStates:", data, options) + let newData = data && data.length > 0 && data.map(n => { + return { + label: n.name, + value: n.name + + } + }) + setAllCities(newData) + }) + } + + const selectCountry = countryValue => { + setAllStates([]) + fetch(`https://api.siliconpin.com/v3/list/country/state/?country=${countryValue.value}`).then(res => res.json()) + .then(data => { + console.log("countryValue:", data, options) + let newData = data && data.length > 0 && data.map(n => { + return { + label: n.name, + value: n.iso2 + + } + }) + setAllStates(newData) + setAllCities([]) + }) + + setCountryValue(countryValue) + } + + const individual = (event) => { + // console.log(event.target.schoolID.value) + + setindividualValue(individualValue = false) + } + const [school, setSchool] = useState(null); + useEffect(() => { + fetch(`https://management.beanstalkedu.com/items/school`) + .then(res => res.json()) + .then(data => { + setSchool(data) + + }) + }, []) + + const [user, setUser] = useState({}); + + useEffect(()=>{ + if(router.query.user && router.query.user>1){ + fetch(`/api/listUsers/${router.query.user}`) + .then(res => res.json()) + .then(data => { + setUser(data) + } + ) + } + }, + [router.query.user]); + console.log(user) + + const handleFormsubmit = async (event) => { + event.preventDefault() + console.log(event.target.lang.checked) + const data = { + "status": "published", + type: event.target.type.value, + uname: event.target.uname.value, + country: event.target.country.value, + state: event.target.state.value ? event.target.state.value:"", + city: event.target.city.value ? event.target.city.value:"", + phone: event.target.phone.value, + email: event.target.email.value, + school: event.target.schoolID.value, + klas: event.target.klas.value, + lang: allLanguage, + start_month: event.target.start_month.value, + start_date: event.target.start_date.value, + end_date: event.target.end_date.value, + anual: event.target.anual.value, + early_start_programme: event.target.early_start_programme.value, + toddlers: event.target.toddlers.value, + interakto: event.target.interakto.value, + } + const JSONdata = JSON.stringify(data) + const endpoint = '/api/addUsers' + const options = { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSONdata, + } + const response = await fetch(endpoint, options) + const result = await response.json() + // console.log(result) + // alert(`Is this your full name: ${result}`) + } + const handleOnLanguageChange = (e, v) => { + let idx = allLanguage.findIndex(o => o.lang === e.target.value); + let newAllLang = [...allLanguage] + newAllLang[idx].value = true + // console.log(newAllLang) + + if ([typeParent, "teacher"].includes(currentType)) { + let counter = 0 + newAllLang.forEach((n, idx) => { + if (n.value) { + counter++ + } + }) + if (counter >= 2) { + newAllLang.forEach((n, idx) => { + newAllLang[idx].disabled = true + }) + } + } + setLanguage(newAllLang) + } + const handleTypeOnChange = (e) => { + let newAllLang = [...allLanguage] + newAllLang.forEach((n, idx) => { + newAllLang[idx].value = false + newAllLang[idx].disabled = false + }) + const { name, checked } = e.target; + setLanguage({ ...allLanguage, [name]: checked }); + + // setLanguage(newAllLang) + setCurrentType(e.target.value) + } + return ( +
+
+ +
+
+
+ +

Update User Information

+
+ +
+ + + + +
+
+ + +
+
+ + +
+
+ + +
} + { + allCities && allCities.length > 0 && +
+ + + + {school && school.data.map(data => + + )} + +
+
+ + +
+ {individualValue && +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ +
+ {/*  
+  
+  
+  
+  
+  
+  
+  
+  
+  
*/} + {allLanguage && allLanguage.length && allLanguage.map(n => { + return ( +
+   + +
+ ) + })} +
+
+
+ + +
+
+ + +
+
+ + +
+
+ } +
+ + {/* */} +
+ +
+
+
+
+ ) +} diff --git a/src/pages/school-list/index.jsx b/src/pages/school-list/index.jsx index be8d64f..ae841e9 100644 --- a/src/pages/school-list/index.jsx +++ b/src/pages/school-list/index.jsx @@ -52,7 +52,8 @@ const fetchData = async () => { {data.toddlers} {data.interakto} {data.status} - Edit + + )} diff --git a/src/pages/user-list.jsx b/src/pages/user-list.jsx index de65963..964870e 100644 --- a/src/pages/user-list.jsx +++ b/src/pages/user-list.jsx @@ -8,7 +8,7 @@ export default function Modal() { const fetchData = async () => { const response = await fetch("/api/listUsers"); const data = await response.json(); - console.log(data) + // console.log(data) return setUser(data); } // console.log(user) @@ -32,31 +32,54 @@ const fetchData = async () => { - + + + - + - + {/* */} {/* */} + - {user.map(data=> - - - - - - - - {/* */} - - - - )} + {user.map + (data=> + + + + + + + + + {/* */} + {/* */} + + + + + ) + }
user NameNameMobileEmail School Name User TypePlanAnnual ClassLanguageLanguageYearStart Date End DateAction
{data.user}{data.school}{data.type}{data.plan}{data.class}{data.lang}{data.year}{data.start_date}{data.end_date}
{data.uname}{data.phone}{data.email}{data.school}{data.type}{data.anual}{data.klas}{data.lang}{data.year}{data.start_date}{data.end_date} +
+ +
+ +
+
+
-- 2.34.1 From 2b85a5a356d1f5f87af3b27ff3ad71439e51e1c8 Mon Sep 17 00:00:00 2001 From: suvodip ghosh Date: Wed, 17 May 2023 22:14:19 +0530 Subject: [PATCH 02/16] edit-user --- src/pages/api/getUserDetails.js | 67 +++++ src/pages/api/updateUserDetails.js | 0 src/pages/edit-user.jsx | 377 ++++----------------------- src/pages/edit-user2.jsx | 402 +++++++++++++++++++++++++++++ src/pages/school-list/index.jsx | 22 +- src/pages/user-list.jsx | 14 +- 6 files changed, 547 insertions(+), 335 deletions(-) create mode 100644 src/pages/api/getUserDetails.js create mode 100644 src/pages/api/updateUserDetails.js create mode 100644 src/pages/edit-user2.jsx diff --git a/src/pages/api/getUserDetails.js b/src/pages/api/getUserDetails.js new file mode 100644 index 0000000..3ea5f61 --- /dev/null +++ b/src/pages/api/getUserDetails.js @@ -0,0 +1,67 @@ +import csv from 'csv-parser'; +import fs from 'fs'; +import sqlite3 from 'sqlite3'; + +export default function handler(req,res) { + + + const DB_NAME = 'data/appUser.db'; + const TABLE_NAME = 'user'; + + // Open a connection to the SQLite database + const db = new sqlite3.Database(DB_NAME); + + const query = `SELECT * FROM ${TABLE_NAME}`; + + function getAllRows(tableName) { + return new Promise((resolve, reject) => { + const sql = `SELECT * FROM ${tableName} WHERE id = ?`; + db.all(sql, [req.query.user], (err, rows) => { + if (err) { + reject(err); + return; + } + const data = rows; + resolve(data); + }); + }); + }; + async function doSomething() { + try { + const returnData = await getAllRows('user'); + res.setHeader('Content-Type', 'application/json') + res.status(200).json(returnData) + // console.log(data); + } catch (err) { + console.error(err); + } + } + + doSomething(); +// const returnData = getAllRows('user'); +// console.log(getAllRows('user')); +// const returnData= db.run('SELECT * FROM user'); + +// fs.createReadStream('data/user.csv') +// .pipe(csv()) +// .on('data', (data) => { +// const values = Object.values(data); +// const placeholders = values.map(() => '?').join(','); +// const sql = `INSERT INTO ${TABLE_NAME} (${Object.keys(data).join(',')}) VALUES (${placeholders})`; +// db.run(sql, values, (err) => { +// if (err) { +// console.error(err); +// } +// }); +// }) +// .on('end', () => { +// console.log(`Data inserted successfully into table ${TABLE_NAME}`); + +// // Close the database connection +// db.close(); +// }); + + + +} + diff --git a/src/pages/api/updateUserDetails.js b/src/pages/api/updateUserDetails.js new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/edit-user.jsx b/src/pages/edit-user.jsx index 46d6eba..0b4c406 100644 --- a/src/pages/edit-user.jsx +++ b/src/pages/edit-user.jsx @@ -1,133 +1,60 @@ -// https://management.beanstalkedu.com/items/school -// import React from 'react'; import {useId, useState, useEffect, useMemo} from 'react'; -import Select from 'react-select' -import countryList from 'react-select-country-list' import 'react-phone-number-input/style.css' -import PhoneInput from 'react-phone-number-input' import NavBar from '../components/NavBar'; import { useRouter } from 'next/router' -// import { Inter } from 'next/font/google' -const typeParent = "parent" - -export default function addUserForm() { - - const router = useRouter(); - - const [allLanguage, setLanguage] = useState([ - {lang: "Assamese", value: false}, - {lang: "Bengali", value: false}, - {lang: "English", value: false}, - {lang: "Hindi", value: false}, - {lang: "Telegu", value: false}, - {lang: "Punjabi", value: false}, - {lang: "Malayalam", value: false}, - {lang: "Tamil", value: false}, - {lang: "Kannada", value: false}, - {lang: "Gujrati", value: false}, - ]) - // console.log(allLanguage) - const [currentType, setCurrentType] = useState(typeParent) - const [countryValue, setCountryValue] = useState('') - const options = useMemo(() => countryList().getData(), []) - const [phoneValue, setphoneValue] = useState() - let [individualValue = true, setindividualValue] = useState() - - const [allStates, setAllStates] = useState([]) - const [allCities, setAllCities] = useState([]) - - const handleSelectAllStates = stateCode => { - setAllCities([]) - fetch(`https://api.siliconpin.com/v3/list/country/city/?country=${countryValue.value}&state=${stateCode.value}`) - .then(res => res.json()) - .then(data => { - // console.log("handleSelectAllStates:", data, options) - let newData = data && data.length > 0 && data.map(n => { - return { - label: n.name, - value: n.name - - } - }) - setAllCities(newData) - }) - } - - const selectCountry = countryValue => { - setAllStates([]) - fetch(`https://api.siliconpin.com/v3/list/country/state/?country=${countryValue.value}`).then(res => res.json()) - .then(data => { - console.log("countryValue:", data, options) - let newData = data && data.length > 0 && data.map(n => { - return { - label: n.name, - value: n.iso2 - - } - }) - setAllStates(newData) - setAllCities([]) - }) - - setCountryValue(countryValue) - } - - const individual = (event) => { - // console.log(event.target.schoolID.value) - - setindividualValue(individualValue = false) - } - const [school, setSchool] = useState(null); - useEffect(() => { - fetch(`https://management.beanstalkedu.com/items/school`) - .then(res => res.json()) - .then(data => { - setSchool(data) - - }) - }, []) +export default function editUser() { + const router = useRouter(); + const updateUserData = async (event) => { + const body = new FormData(); + body.append("file", agreement.files[0]); + body.append("fName", `${router.query.school}.pdf`); + const response = await fetch("/api/updateUserDetails", { + method: "POST", + body + }); + }; + const [user, setUser] = useState({}); useEffect(()=>{ - if(router.query.user && router.query.user>1){ - fetch(`/api/listUsers/${router.query.user}`) + console.log(router.query); + // if(router.query.school<1) { + // const { sid } = router.query; + // setSchool(sid) + if(router.query.user && router.query.user>1 ){ + fetch(`/api/getUserDetails?user=${router.query.user}`) .then(res => res.json()) - .then(data => { - setUser(data) + .then(data => { + console.log(router.query.user); + setUser(data) + }) } - ) - } - }, - [router.query.user]); - console.log(user) - - const handleFormsubmit = async (event) => { + + }, [router.query.school]); + + const handleSubmit = async (event) => { event.preventDefault() - console.log(event.target.lang.checked) const data = { - "status": "published", - type: event.target.type.value, - uname: event.target.uname.value, + "status":"published", + name: event.target.schoolName.value, country: event.target.country.value, - state: event.target.state.value ? event.target.state.value:"", - city: event.target.city.value ? event.target.city.value:"", - phone: event.target.phone.value, - email: event.target.email.value, - school: event.target.schoolID.value, - klas: event.target.klas.value, - lang: allLanguage, - start_month: event.target.start_month.value, - start_date: event.target.start_date.value, - end_date: event.target.end_date.value, + state: event.target.state.value, + cities: event.target.cities.value, anual: event.target.anual.value, - early_start_programme: event.target.early_start_programme.value, toddlers: event.target.toddlers.value, + early_start_programme: event.target.early_start_programme.value, interakto: event.target.interakto.value, + agreement_expiry_date: event.target.agreement_expiry_date.value, + school_agreement: event.target.school_agreement.value, + school_contact_number: event.target.school_contact_number.value, + school_email_id: event.target.school_email_id.value, + } const JSONdata = JSON.stringify(data) - const endpoint = '/api/addUsers' + console.log(data) + const endpoint = 'https://management.beanstalkedu.com/items/school' const options = { method: 'POST', headers: { @@ -136,43 +63,12 @@ export default function addUserForm() { body: JSONdata, } const response = await fetch(endpoint, options) + const result = await response.json() - // console.log(result) - // alert(`Is this your full name: ${result}`) - } - const handleOnLanguageChange = (e, v) => { - let idx = allLanguage.findIndex(o => o.lang === e.target.value); - let newAllLang = [...allLanguage] - newAllLang[idx].value = true - // console.log(newAllLang) - - if ([typeParent, "teacher"].includes(currentType)) { - let counter = 0 - newAllLang.forEach((n, idx) => { - if (n.value) { - counter++ - } - }) - if (counter >= 2) { - newAllLang.forEach((n, idx) => { - newAllLang[idx].disabled = true - }) - } - } - setLanguage(newAllLang) - } - const handleTypeOnChange = (e) => { - let newAllLang = [...allLanguage] - newAllLang.forEach((n, idx) => { - newAllLang[idx].value = false - newAllLang[idx].disabled = false - }) - const { name, checked } = e.target; - setLanguage({ ...allLanguage, [name]: checked }); - - // setLanguage(newAllLang) - setCurrentType(e.target.value) + // alert(`Is this your full name: ${result.data}`) + alert(`School Saved`) } + return (
@@ -184,18 +80,16 @@ export default function addUserForm() {

Update User Information

-
+
- +
- +
@@ -204,194 +98,27 @@ export default function addUserForm() {
-
- {allStates && allStates.length > 0 && -
- - {}} - /> -
} +
- +
- +
- +
- {individualValue && -
-
- - -
-
- - -
-
- - -
-
- - -
- -
- -
- {/*  
-  
-  
-  
-  
-  
-  
-  
-  
-  
*/} - {allLanguage && allLanguage.length && allLanguage.map(n => { - return ( -
-   - -
- ) - })} -
-
-
- - -
-
- - -
-
- - -
-
- } + +
- {/* */}
diff --git a/src/pages/edit-user2.jsx b/src/pages/edit-user2.jsx new file mode 100644 index 0000000..46d6eba --- /dev/null +++ b/src/pages/edit-user2.jsx @@ -0,0 +1,402 @@ +// https://management.beanstalkedu.com/items/school +// import React from 'react'; +import {useId, useState, useEffect, useMemo} from 'react'; +import Select from 'react-select' +import countryList from 'react-select-country-list' +import 'react-phone-number-input/style.css' +import PhoneInput from 'react-phone-number-input' +import NavBar from '../components/NavBar'; +import { useRouter } from 'next/router' +// import { Inter } from 'next/font/google' + +const typeParent = "parent" + +export default function addUserForm() { + + const router = useRouter(); + + const [allLanguage, setLanguage] = useState([ + {lang: "Assamese", value: false}, + {lang: "Bengali", value: false}, + {lang: "English", value: false}, + {lang: "Hindi", value: false}, + {lang: "Telegu", value: false}, + {lang: "Punjabi", value: false}, + {lang: "Malayalam", value: false}, + {lang: "Tamil", value: false}, + {lang: "Kannada", value: false}, + {lang: "Gujrati", value: false}, + ]) + // console.log(allLanguage) + const [currentType, setCurrentType] = useState(typeParent) + const [countryValue, setCountryValue] = useState('') + const options = useMemo(() => countryList().getData(), []) + const [phoneValue, setphoneValue] = useState() + let [individualValue = true, setindividualValue] = useState() + + const [allStates, setAllStates] = useState([]) + const [allCities, setAllCities] = useState([]) + + const handleSelectAllStates = stateCode => { + setAllCities([]) + fetch(`https://api.siliconpin.com/v3/list/country/city/?country=${countryValue.value}&state=${stateCode.value}`) + .then(res => res.json()) + .then(data => { + // console.log("handleSelectAllStates:", data, options) + let newData = data && data.length > 0 && data.map(n => { + return { + label: n.name, + value: n.name + + } + }) + setAllCities(newData) + }) + } + + const selectCountry = countryValue => { + setAllStates([]) + fetch(`https://api.siliconpin.com/v3/list/country/state/?country=${countryValue.value}`).then(res => res.json()) + .then(data => { + console.log("countryValue:", data, options) + let newData = data && data.length > 0 && data.map(n => { + return { + label: n.name, + value: n.iso2 + + } + }) + setAllStates(newData) + setAllCities([]) + }) + + setCountryValue(countryValue) + } + + const individual = (event) => { + // console.log(event.target.schoolID.value) + + setindividualValue(individualValue = false) + } + const [school, setSchool] = useState(null); + useEffect(() => { + fetch(`https://management.beanstalkedu.com/items/school`) + .then(res => res.json()) + .then(data => { + setSchool(data) + + }) + }, []) + + const [user, setUser] = useState({}); + + useEffect(()=>{ + if(router.query.user && router.query.user>1){ + fetch(`/api/listUsers/${router.query.user}`) + .then(res => res.json()) + .then(data => { + setUser(data) + } + ) + } + }, + [router.query.user]); + console.log(user) + + const handleFormsubmit = async (event) => { + event.preventDefault() + console.log(event.target.lang.checked) + const data = { + "status": "published", + type: event.target.type.value, + uname: event.target.uname.value, + country: event.target.country.value, + state: event.target.state.value ? event.target.state.value:"", + city: event.target.city.value ? event.target.city.value:"", + phone: event.target.phone.value, + email: event.target.email.value, + school: event.target.schoolID.value, + klas: event.target.klas.value, + lang: allLanguage, + start_month: event.target.start_month.value, + start_date: event.target.start_date.value, + end_date: event.target.end_date.value, + anual: event.target.anual.value, + early_start_programme: event.target.early_start_programme.value, + toddlers: event.target.toddlers.value, + interakto: event.target.interakto.value, + } + const JSONdata = JSON.stringify(data) + const endpoint = '/api/addUsers' + const options = { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSONdata, + } + const response = await fetch(endpoint, options) + const result = await response.json() + // console.log(result) + // alert(`Is this your full name: ${result}`) + } + const handleOnLanguageChange = (e, v) => { + let idx = allLanguage.findIndex(o => o.lang === e.target.value); + let newAllLang = [...allLanguage] + newAllLang[idx].value = true + // console.log(newAllLang) + + if ([typeParent, "teacher"].includes(currentType)) { + let counter = 0 + newAllLang.forEach((n, idx) => { + if (n.value) { + counter++ + } + }) + if (counter >= 2) { + newAllLang.forEach((n, idx) => { + newAllLang[idx].disabled = true + }) + } + } + setLanguage(newAllLang) + } + const handleTypeOnChange = (e) => { + let newAllLang = [...allLanguage] + newAllLang.forEach((n, idx) => { + newAllLang[idx].value = false + newAllLang[idx].disabled = false + }) + const { name, checked } = e.target; + setLanguage({ ...allLanguage, [name]: checked }); + + // setLanguage(newAllLang) + setCurrentType(e.target.value) + } + return ( +
+
+ +
+
+
+ +

Update User Information

+
+
+
+ + + + +
+
+ + +
+
+ + +
+
+ + +
} + { + allCities && allCities.length > 0 && +
+ + + + {school && school.data.map(data => + + )} + +
+
+ + +
+ {individualValue && +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ +
+ {/*  
+  
+  
+  
+  
+  
+  
+  
+  
+  
*/} + {allLanguage && allLanguage.length && allLanguage.map(n => { + return ( +
+   + +
+ ) + })} +
+
+
+ + +
+
+ + +
+
+ + +
+
+ } +
+ + {/* */} +
+
+
+
+
+
+ ) +} diff --git a/src/pages/school-list/index.jsx b/src/pages/school-list/index.jsx index ae841e9..1219b98 100644 --- a/src/pages/school-list/index.jsx +++ b/src/pages/school-list/index.jsx @@ -22,10 +22,18 @@ const fetchData = async () => {
-
- - Add School -
+
+
+ + + + +
+ +   + Add School + +
@@ -33,8 +41,9 @@ const fetchData = async () => { - - + + + @@ -48,6 +57,7 @@ const fetchData = async () => { + diff --git a/src/pages/user-list.jsx b/src/pages/user-list.jsx index 964870e..ac9565f 100644 --- a/src/pages/user-list.jsx +++ b/src/pages/user-list.jsx @@ -22,9 +22,15 @@ const fetchData = async () => {
-
- - + @@ -64,7 +70,7 @@ const fetchData = async () => {
- - - {/* */} - {/* */} @@ -61,10 +58,6 @@ const fetchData = async () => { - - - {/* */} - {/* */} - - - - - - - + + + @@ -63,16 +52,14 @@ const fetchData = async () => { {school.map(data=> - - - - - - - + + - + + )} diff --git a/src/pages/school-list/slug.jsx b/src/pages/school-list/slug.jsx index 526067a..ea2b87f 100644 --- a/src/pages/school-list/slug.jsx +++ b/src/pages/school-list/slug.jsx @@ -58,7 +58,7 @@ export default function addSchoolForm() { country: event.target.country.value, state: event.target.state.value, cities: event.target.cities.value, - anual: event.target.anual.value, + annual: event.target.annual.value, toddlers: event.target.toddlers.value, early_start_programme: event.target.early_start_programme.value, interakto: event.target.interakto.value, @@ -150,8 +150,8 @@ export default function addSchoolForm() {
- - -- 2.34.1 From 37786c459ea081bdc3fc4ca35de3f6acbbbf9497 Mon Sep 17 00:00:00 2001 From: Kar Date: Fri, 19 May 2023 19:57:07 +0530 Subject: [PATCH 07/16] p --- data/appUser.db | Bin 24576 -> 24576 bytes src/pages/api/editUser.js | 20 ++++++++++++++++---- src/pages/edit-user.jsx | 13 ++++++++++--- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/data/appUser.db b/data/appUser.db index 587ccc85eac36dc960ae4a13f21b248f31627b42..545b3ace067353b4d8e5f9584fd2c74b0fe5a480 100644 GIT binary patch delta 268 zcmZoTz}Rqrae_2s@kAMC#^Q|$OZYjM_zf8NXYw0t78Fq7uTN(ZWRMqB)fN(i`;m585y{^IG8tc7$op>3A0HuNXjz+jhpOX oCpNjmUSP7ht?ai1=6LWxOvI%Tv3;4wk01oX$MF0Q* delta 120 zcmV-;0Ehp8zyW~30gxL3aFHBC0dTQkqz?uG519ZDnX?ffj}McXA8iQh01x&L>krkl z0YJtNlhiL39smgo0~rZ(V`y)0YzPVi6#;c~WpYLh4FLcO3J3tR2rys|0u~07(LNrN ah(8dM|2{DRF_SSrHnRah1`x9bQ2Gz35F-!( diff --git a/src/pages/api/editUser.js b/src/pages/api/editUser.js index 176e89a..1a29b03 100644 --- a/src/pages/api/editUser.js +++ b/src/pages/api/editUser.js @@ -1,7 +1,7 @@ export default function handler(req, res) { const sqlite3 = require('sqlite3').verbose(); - console.log(req.body) + // console.log(req.body) // Open a new database connection let uname, status, type, start_month, start_date, end_date, klas, lang, phone, pass, annual, early_start_programme, toddlers, interakto, email, country, state, city, address, school=""; @@ -26,18 +26,30 @@ export default function handler(req, res) { if(req.body.address) address =req.body.address; if(req.body.school) school =req.body.school; const db = new sqlite3.Database('data/appUser.db'); + var msg=null; console.log(req.body.userId) db.run(`UPDATE user SET uname = ?, status = ?, type = ?, start_month = ?, start_date = ?, end_date = ?, klas = ?, lang = ?, phone = ?, annual = ?, early_start_programme = ?, toddlers = ?, interakto = ?, email = ?, country = ?, state = ?, city = ?, address = ?, school = ? WHERE id = ? `, [ uname, status, type, start_month, start_date, end_date, klas, lang, phone, annual, early_start_programme, toddlers, interakto, email, country, state, city, address, school, req.body.userId], function(err) { if (err) { - res.status(400).json({ msg: 'Err400D' }); - return console.log(err.message); + msg={ msg: 'Err400D' }; + // res.status(400).send({ msg: 'Err400D' }); + // return console.log(err.message); } - res.status(200).json({ msg: 'ok' }); + // console.log('message'); + msg="{ msg: 'ok' }"; + // res.statusCode = 200; + // res.setHeader('Content-Type', 'application/json'); + // res.setHeader('Cache-Control', 'max-age=180000'); + // res.end(JSON.stringify({ msg: 'ok' })); + // res.status(200).json({ msg: 'ok' }); } ); db.close(); + res.statusCode = 200; + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Cache-Control', 'max-age=180000'); + res.end(JSON.stringify(msg)); } diff --git a/src/pages/edit-user.jsx b/src/pages/edit-user.jsx index 8beb7fa..127eb33 100644 --- a/src/pages/edit-user.jsx +++ b/src/pages/edit-user.jsx @@ -27,9 +27,9 @@ export default function editUser() { fetch(`/api/getUserDetails?user=${router.query.user}`) .then(res => res.json()) .then(data => { - console.log(data); + // console.log(data); setUser(data[0]) - console.log(user) + // console.log(user) }) } @@ -58,7 +58,7 @@ export default function editUser() { klas: event.target.klas.value } const JSONdata = JSON.stringify(data) - console.log(data) + // console.log(data) const endpoint = '/api/editUser' const options = { method: 'POST', @@ -68,8 +68,15 @@ export default function editUser() { body: JSONdata, } const response = await fetch(endpoint, options) + // .then(res => res.json()) + // .then(data => { + // console.log(data); + // // setUser(data[0]) + // // console.log(user) + // }) const result = await response.json() + console.log(result) // alert(`Is this your full name: ${result.data}`) alert(`User data updated`) -- 2.34.1 From 54f74f88605a508b629ac95d2112dc36e1306797 Mon Sep 17 00:00:00 2001 From: Kar Date: Sat, 20 May 2023 19:16:59 +0530 Subject: [PATCH 08/16] login --- package.json | 10 +- src/components/refreshTokenHandler.js | 18 +++ src/components/useAuth.js | 29 ++++ src/pages/_app.tsx | 14 +- src/pages/api/auth/[...nextauth].js | 118 ++++++++++++++ src/pages/api/editUser.js | 2 +- src/pages/index.jsx | 14 +- src/pages/login.jsx | 115 ++++++++++++++ src/pages/profile.jsx | 22 +++ yarn.lock | 215 +++++++++++++++++++++++++- 10 files changed, 547 insertions(+), 10 deletions(-) create mode 100644 src/components/refreshTokenHandler.js create mode 100644 src/components/useAuth.js create mode 100644 src/pages/api/auth/[...nextauth].js create mode 100644 src/pages/login.jsx create mode 100644 src/pages/profile.jsx diff --git a/package.json b/package.json index 3c64fc7..7a1995a 100644 --- a/package.json +++ b/package.json @@ -14,20 +14,26 @@ "@types/react-dom": "18.2.1", "argon2": "^0.30.3", "autoprefixer": "10.4.14", + "axios": "^1.4.0", "csv-parser": "^3.0.0", "eslint": "8.39.0", "eslint-config-next": "13.3.1", "formidable": "^2.1.1", + "formik": "^2.2.9", "jsonwebtoken": "^9.0.0", "next": "13.3.1", + "next-auth": "^4.22.1", "postcss": "8.4.23", "react": "18.2.0", "react-dom": "18.2.0", "react-phone-number-input": "^3.2.22", "react-select": "^5.7.3", "react-select-country-list": "^2.2.3", + "rxjs": "^7.8.1", "sqlite3": "^5.1.6", "tailwindcss": "3.3.2", - "typescript": "5.0.4" - } + "typescript": "5.0.4", + "yup": "^1.1.1" + }, + "devDependencies": {} } diff --git a/src/components/refreshTokenHandler.js b/src/components/refreshTokenHandler.js new file mode 100644 index 0000000..88ce716 --- /dev/null +++ b/src/components/refreshTokenHandler.js @@ -0,0 +1,18 @@ +import { useSession } from "next-auth/react"; +import { useEffect } from "react"; + +const RefreshTokenHandler = (props) => { + const { data: session } = useSession(); + + useEffect(() => { + if(!!session) { + // We did set the token to be ready to refresh after 23 hours, here we set interval of 23 hours 30 minutes. + const timeRemaining = Math.round((((session.accessTokenExpiry - 30 * 60 * 1000) - Date.now()) / 1000)); + props.setInterval(timeRemaining > 0 ? timeRemaining : 0); + } + }, [session]); + + return null; +} + +export default RefreshTokenHandler; \ No newline at end of file diff --git a/src/components/useAuth.js b/src/components/useAuth.js new file mode 100644 index 0000000..a79238c --- /dev/null +++ b/src/components/useAuth.js @@ -0,0 +1,29 @@ +import { signOut, useSession } from "next-auth/react"; +import { useRouter } from "next/router"; +import { useEffect, useState } from "react"; + +export default function useAuth(shouldRedirect) { + const { data: session } = useSession(); + const router = useRouter(); + const [isAuthenticated, setIsAuthenticated] = useState(false); + + useEffect(() => { + if (session?.error === "RefreshAccessTokenError") { + signOut({ callbackUrl: '/login', redirect: shouldRedirect }); + } + + if (session === null) { + if (router.route !== '/login') { + router.replace('/login'); + } + setIsAuthenticated(false); + } else if (session !== undefined) { + if (router.route === '/login') { + router.replace('/'); + } + setIsAuthenticated(true); + } + }, [session]); + + return isAuthenticated; +} \ No newline at end of file diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 021681f..8f3d384 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,6 +1,18 @@ import '@/styles/globals.css' import type { AppProps } from 'next/app' +import { SessionProvider } from 'next-auth/react'; +import { useState } from 'react'; +import RefreshTokenHandler from '../components/refreshTokenHandler.js'; + + export default function App({ Component, pageProps }: AppProps) { - return + const [interval, setInterval] = useState(0); + return ( + + + + + ) + // return } diff --git a/src/pages/api/auth/[...nextauth].js b/src/pages/api/auth/[...nextauth].js new file mode 100644 index 0000000..4ba1e79 --- /dev/null +++ b/src/pages/api/auth/[...nextauth].js @@ -0,0 +1,118 @@ +import NextAuth from "next-auth/next"; +import CredentialsProvider from "next-auth/providers/credentials"; +import { signIn } from "next-auth/react"; + +const pubAPI = process.env.DIRECTUS_PUBLIC_API; + +export const options = { + providers: [ + CredentialsProvider({ + name: "Credentials", + credentials: { + email: { label: "Email", type: "text" }, + password: { label: "Mot de passe", type: "password" }, + }, + async authorize(credentials, req) { + const payload = { + email: credentials.email, + password: credentials.password, + }; + const res = await fetch(pubAPI + "auth/login", { + method: "POST", + body: JSON.stringify(payload), + headers: { "Content-Type": "application/json" }, + credentials: "include", + }); + const user = await res.json(); + // console.log(user) + + if (!res.ok) { + throw new Error("Email ou mot de passe incorrect."); + } + + if (res.ok && user) { + return user; + } + + return null; + }, + }), + ], + session: { + jwt: true, + }, + callbacks: { + async jwt({ token, user, account }) { + if (account && user) { + return { + ...token, + accessToken: user.data.access_token, + expires: Date.now() + user.data.expires, + refreshToken: user.data.refresh_token, + error: user.data.error, + }; + } + + if (Date.now() < token.expires) { + return token; + } + + const refreshed = await refreshAccessToken(token); + return await refreshed; + }, + + async session({ session, token }) { + session.user.accessToken = token.accessToken; + session.user.refreshToken = token.refreshToken; + session.user.expires = token.expires; + session.user.error = token.error; + + return session; + }, + }, + secret: process.env.NEXTAUTH_SECRET, + pages: { + signIn: "/login", + }, + debug: true, +}; + +async function refreshAccessToken(token) { + try { + const response = await fetch(pubAPI + "auth/refresh", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ refresh_token: token.refreshToken }), + credentials: "include", + }); + + const refreshedTokens = await response.json(); + + if (!response.ok) { + signIn(); + } + + if (response.ok && refreshedTokens) { + return { + ...token, + accessToken: refreshedTokens.data.access_token, + expires: Date.now() + refreshedTokens.data.expires, + refreshToken: refreshedTokens.data.refresh_token, + }; + } + } catch (error) { + console.log( + new Date().toUTCString() + " Error in refreshAccessToken:", + error + ); + + return { + ...token, + error: "RefreshAccessTokenError", + }; + } +} + +const nextauthfunc = (req, res) => NextAuth(req, res, options); + +export default nextauthfunc; diff --git a/src/pages/api/editUser.js b/src/pages/api/editUser.js index 1a29b03..7908f3a 100644 --- a/src/pages/api/editUser.js +++ b/src/pages/api/editUser.js @@ -32,7 +32,7 @@ export default function handler(req, res) { function(err) { if (err) { msg={ msg: 'Err400D' }; - // res.status(400).send({ msg: 'Err400D' }); + res.status(400).send({ msg: 'Err400D' }); // return console.log(err.message); } // console.log('message'); diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 5110c01..9616e74 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -1,13 +1,21 @@ -import Image from 'next/image' +import { signIn, signOut } from 'next-auth/react'; import NavBar from '../components/NavBar' -import { Inter } from 'next/font/google' +import { useSession } from "next-auth/react"; -const inter = Inter({ subsets: ['latin'] }) +// const { data: session } = useSession(); +// console.log(session) export default function Home() { return (
+
+ +
) } diff --git a/src/pages/login.jsx b/src/pages/login.jsx new file mode 100644 index 0000000..96c7fb8 --- /dev/null +++ b/src/pages/login.jsx @@ -0,0 +1,115 @@ +import { useState } from 'react'; +import { signIn, getCsrfToken } from 'next-auth/react'; +import { Formik, Field, ErrorMessage } from 'formik'; +import * as Yup from 'yup'; +import { useRouter } from 'next/router'; + +export default function SignIn({ csrfToken }) { + const router = useRouter(); + const [error, setError] = useState(null); + + return ( + <> + { + const res = await signIn('credentials', { + redirect: false, + email: values.email, + password: values.password, + callbackUrl: `${window.location.origin}`, + }); + if (res?.error) { + setError(res.error); + } else { + setError(null); + } + if (res.url) router.push(res.url); + setSubmitting(false); + }} + > + {(formik) => ( +
+
+
+ + +
+ {error} +
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ +
+
+
+ + )} +
+ + ); +} + +// This is the recommended way for Next.js 9.3 or newer +export async function getServerSideProps(context) { + return { + props: { + csrfToken: await getCsrfToken(context), + }, + }; +} \ No newline at end of file diff --git a/src/pages/profile.jsx b/src/pages/profile.jsx new file mode 100644 index 0000000..203746a --- /dev/null +++ b/src/pages/profile.jsx @@ -0,0 +1,22 @@ +import { signIn, signOut, useSession } from 'next-auth/react' + +export default function Home() { + const { data: session } = useSession() +console.log(session) + if (session) { + return ( + <> + Signed in +
+ + + ) + } + + return ( + <> + Not signed in
+ + + ) +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 4b57ab7..d80d0da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40,7 +40,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200" integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q== @@ -365,6 +365,11 @@ mkdirp "^1.0.4" rimraf "^3.0.2" +"@panva/hkdf@^1.0.2": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.1.1.tgz#ab9cd8755d1976e72fc77a00f7655a64efe6cd5d" + integrity sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA== + "@phc/format@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@phc/format/-/format-1.0.0.tgz#b5627003b3216dc4362125b13f48a4daa76680e4" @@ -684,6 +689,11 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + autoprefixer@10.4.14: version "10.4.14" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" @@ -706,6 +716,15 @@ axe-core@^4.6.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== +axios@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axobject-query@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" @@ -897,6 +916,13 @@ color-support@^1.1.2, color-support@^1.1.3: resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -917,6 +943,11 @@ convert-source-map@^1.5.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +cookie@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + cosmiconfig@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" @@ -1006,6 +1037,11 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deepmerge@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -1019,6 +1055,11 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -1509,6 +1550,11 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -1516,6 +1562,15 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + formidable@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.1.1.tgz#81269cbea1a613240049f5f61a9d97731517414f" @@ -1526,6 +1581,19 @@ formidable@^2.1.1: once "^1.4.0" qs "^6.11.0" +formik@^2.2.9: + version "2.2.9" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0" + integrity sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA== + dependencies: + deepmerge "^2.1.1" + hoist-non-react-statics "^3.3.0" + lodash "^4.17.21" + lodash-es "^4.17.21" + react-fast-compare "^2.0.1" + tiny-warning "^1.0.2" + tslib "^1.10.0" + fraction.js@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" @@ -1789,7 +1857,7 @@ hexoid@^1.0.0: resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== -hoist-non-react-statics@^3.3.1: +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -2098,6 +2166,11 @@ jiti@^1.18.2: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd" integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== +jose@^4.11.4, jose@^4.14.1: + version "4.14.4" + resolved "https://registry.yarnpkg.com/jose/-/jose-4.14.4.tgz#59e09204e2670c3164ee24cbfe7115c6f8bff9ca" + integrity sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g== + js-sdsl@^4.1.4: version "4.4.0" resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" @@ -2214,6 +2287,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -2285,6 +2363,18 @@ micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -2395,6 +2485,21 @@ negotiator@^0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +next-auth@^4.22.1: + version "4.22.1" + resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.22.1.tgz#1ea5084e38867966dc6492a71c6729c8f5cfa96b" + integrity sha512-NTR3f6W7/AWXKw8GSsgSyQcDW6jkslZLH8AiZa5PQ09w1kR8uHtR9rez/E9gAq/o17+p0JYHE8QjF3RoniiObA== + dependencies: + "@babel/runtime" "^7.20.13" + "@panva/hkdf" "^1.0.2" + cookie "^0.5.0" + jose "^4.11.4" + oauth "^0.9.15" + openid-client "^5.4.0" + preact "^10.6.3" + preact-render-to-string "^5.1.19" + uuid "^8.3.2" + next@13.3.1: version "13.3.1" resolved "https://registry.yarnpkg.com/next/-/next-13.3.1.tgz#17625f7423db2e059d71b41bd9031756cf2b33bc" @@ -2492,11 +2597,21 @@ npmlog@^6.0.0: gauge "^4.0.3" set-blocking "^2.0.0" +oauth@^0.9.15: + version "0.9.15" + resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" + integrity sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA== + object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +object-hash@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" + integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== + object-hash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" @@ -2565,6 +2680,11 @@ object.values@^1.1.6: define-properties "^1.1.4" es-abstract "^1.20.4" +oidc-token-hash@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz#9a229f0a1ce9d4fc89bcaee5478c97a889e7b7b6" + integrity sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw== + once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -2581,6 +2701,16 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" +openid-client@^5.4.0: + version "5.4.2" + resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-5.4.2.tgz#8692bcc2a40ef3426c5ba5c11f7493599e93ccc7" + integrity sha512-lIhsdPvJ2RneBm3nGBBhQchpe3Uka//xf7WPHTIglery8gnckvW7Bd9IaQzekzXJvWthCMyi/xVEyGW0RFPytw== + dependencies: + jose "^4.14.1" + lru-cache "^6.0.0" + object-hash "^2.2.0" + oidc-token-hash "^5.0.3" + optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -2738,11 +2868,28 @@ postcss@8.4.23, postcss@^8.4.23: picocolors "^1.0.0" source-map-js "^1.0.2" +preact-render-to-string@^5.1.19: + version "5.2.6" + resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz#0ff0c86cd118d30affb825193f18e92bd59d0604" + integrity sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw== + dependencies: + pretty-format "^3.8.0" + +preact@^10.6.3: + version "10.14.1" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.14.1.tgz#1e15ef6a09e241a48d12c872b90557914b03abac" + integrity sha512-4XDSnUisk3YFBb3p9WeKeH1mKoxdFUsaXcvxs9wlpYR1wax/TWJVqhwmIWbByX0h7jMEJH6Zc5J6jqc58FKaNQ== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +pretty-format@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385" + integrity sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew== + promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -2765,6 +2912,16 @@ prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +property-expr@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.5.tgz#278bdb15308ae16af3e3b9640024524f4dc02cb4" + integrity sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + punycode@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" @@ -2790,6 +2947,11 @@ react-dom@18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" +react-fast-compare@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== + react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -2927,6 +3089,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -3266,6 +3435,11 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" +tiny-case@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" + integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== + tiny-glob@^0.2.9: version "0.2.9" resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" @@ -3274,6 +3448,11 @@ tiny-glob@^0.2.9: globalyzer "0.1.0" globrex "^0.1.2" +tiny-warning@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -3286,6 +3465,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +toposort@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" + integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -3306,11 +3490,16 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1: +tslib@^1.10.0, tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.1.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + tslib@^2.4.0, tslib@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" @@ -3335,6 +3524,11 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" @@ -3398,6 +3592,11 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -3487,3 +3686,13 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yup@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/yup/-/yup-1.1.1.tgz#49dbcf5ae7693ed0a36ed08a9e9de0a09ac18e6b" + integrity sha512-KfCGHdAErqFZWA5tZf7upSUnGKuTOnsI3hUsLr7fgVtx+DK04NPV01A68/FslI4t3s/ZWpvXJmgXhd7q6ICnag== + dependencies: + property-expr "^2.0.5" + tiny-case "^1.0.3" + toposort "^2.0.2" + type-fest "^2.19.0" -- 2.34.1 From 300df6001b962b80099aefd81a96d47acbb01a05 Mon Sep 17 00:00:00 2001 From: Kar Date: Sat, 20 May 2023 23:04:29 +0530 Subject: [PATCH 09/16] lint --- package.json | 1 + src/components/NavBar.tsx | 50 ++-- src/pages/add-school-form.jsx | 4 +- src/pages/add-user-form.jsx | 2 +- src/pages/add-user-form2.jsx | 336 ----------------------- src/pages/api/auth/[...nextauth].js | 6 + src/pages/edit-school copy.jsx | 131 --------- src/pages/edit-school.jsx | 10 +- src/pages/edit-school2.jsx | 167 ------------ src/pages/edit-user.jsx | 16 +- src/pages/edit-user2.jsx | 402 ---------------------------- src/pages/index.jsx | 7 +- src/pages/school-list/[slug].jsx | 380 +++++++++++--------------- src/pages/school-list/index.jsx | 2 +- src/pages/school-list/slug.jsx | 241 ----------------- src/pages/user-list-by-school.jsx | 15 +- src/pages/user-list.jsx | 11 +- yarn.lock | 5 + 18 files changed, 216 insertions(+), 1570 deletions(-) delete mode 100644 src/pages/add-user-form2.jsx delete mode 100644 src/pages/edit-school copy.jsx delete mode 100644 src/pages/edit-school2.jsx delete mode 100644 src/pages/edit-user2.jsx delete mode 100644 src/pages/school-list/slug.jsx diff --git a/package.json b/package.json index 7a1995a..09184f6 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "formidable": "^2.1.1", "formik": "^2.2.9", "jsonwebtoken": "^9.0.0", + "jwt-decode": "^3.1.2", "next": "13.3.1", "next-auth": "^4.22.1", "postcss": "8.4.23", diff --git a/src/components/NavBar.tsx b/src/components/NavBar.tsx index 960f7ab..9512dc4 100644 --- a/src/components/NavBar.tsx +++ b/src/components/NavBar.tsx @@ -1,24 +1,36 @@ -import Image from 'next/image' -import { Inter } from 'next/font/google' +import { signIn, signOut, useSession } from 'next-auth/react' +import Link from 'next/link' -const inter = Inter({ subsets: ['latin'] }) -export default function Home() { +export default function NavBar() { + const { data: session } = useSession() + console.log(session) + if (session) { + return ( +
+
+
+
+
+ Add School | + School List| + Add User | + User List | + + +
+
+
+
+
+ ) + } return ( -
-
-
- -
-
-
+ <> + Not signed in
+ + ) + } + diff --git a/src/pages/add-school-form.jsx b/src/pages/add-school-form.jsx index 6c436c2..993d622 100644 --- a/src/pages/add-school-form.jsx +++ b/src/pages/add-school-form.jsx @@ -5,8 +5,8 @@ import countryList from 'react-select-country-list' import 'react-phone-number-input/style.css' import PhoneInput from 'react-phone-number-input' -export default function addSchoolForm() { - const [countryValue, setCountryValue] = useState('') +export default function AddSchool() { + const [countryValue, setCountryValue] =useState('') const options = useMemo(() => countryList().getData(), []) const [phoneValue, setphoneValue] = useState() const [allStates, setAllStates] = useState([]) diff --git a/src/pages/add-user-form.jsx b/src/pages/add-user-form.jsx index 7ee95db..d1ef08b 100644 --- a/src/pages/add-user-form.jsx +++ b/src/pages/add-user-form.jsx @@ -10,7 +10,7 @@ import NavBar from '../components/NavBar'; const typeParent = "parent" -export default function addUserForm() { +export default function AddUser() { const [allLanguage, setLanguage] = useState([ {lang: "Assamese", value: false}, {lang: "Bengali", value: false}, diff --git a/src/pages/add-user-form2.jsx b/src/pages/add-user-form2.jsx deleted file mode 100644 index 64f05aa..0000000 --- a/src/pages/add-user-form2.jsx +++ /dev/null @@ -1,336 +0,0 @@ -// https://management.beanstalkedu.com/items/school -// import React from 'react'; -import {useId, useState, useEffect, useMemo} from 'react'; -import Select from 'react-select' -import countryList from 'react-select-country-list' -import 'react-phone-number-input/style.css' -import PhoneInput from 'react-phone-number-input' -import NavBar from '../components/NavBar'; -// import { Inter } from 'next/font/google' - -const typeParent = "parent" - -export default function addUserForm() { - const [allLanguage, setLanguage] = useState([ - {lang: "Assamese", value: false}, - {lang: "Bengali", value: false}, - {lang: "English", value: false}, - {lang: "Hindi", value: false}, - {lang: "telegu", value: false}, - {lang: "Punjabi", value: false}, - {lang: "malayalam", value: false}, - {lang: "tamil", value: false}, - {lang: "kannada", value: false}, - {lang: "gujrati", value: false}, - ]) - const [currentType, setCurrentType] = useState(typeParent) - const [countryValue, setCountryValue] = useState('') - const options = useMemo(() => countryList().getData(), []) - const [phoneValue, setphoneValue] = useState() - let [individualValue = true, setindividualValue] = useState() - - const [allStates, setAllStates] = useState([]) - const [allCities, setAllCities] = useState([]) - - const handleSelectAllStates = stateCode => { - setAllCities([]) - fetch(`https://api.siliconpin.com/v3/list/country/city/?country=${countryValue.value}&state=${stateCode.value}`).then(res => res.json()) - .then(data => { - console.log("handleSelectAllStates:", data, options) - let newData = data && data.length > 0 && data.map(n => { - return { - label: n.name, - value: n.name - - } - }) - setAllCities(newData) - }) - } - - const selectCountry = countryValue => { - setAllStates([]) - fetch(`https://api.siliconpin.com/v3/list/country/state/?country=${countryValue.value}`).then(res => res.json()) - .then(data => { - console.log("countryValue:", data, options) - let newData = data && data.length > 0 && data.map(n => { - return { - label: n.name, - value: n.iso2 - - } - }) - setAllStates(newData) - setAllCities([]) - }) - - setCountryValue(countryValue) - } - - const individual = (event) => { - // console.log(event.target.schoolID.value) - - setindividualValue(individualValue = false) - } - const [school, setSchool] = useState(null); - useEffect(() => { - fetch(`https://management.beanstalkedu.com/items/school`) - .then(res => res.json()) - .then(data => { - setSchool(data) - - }) - }, []) - // console.log(school); - - const handleFormsubmit = async (event) => { - event.preventDefault() - const data = { - "status": "published", - type: event.target.type.value, - name: event.target.name.value, - user: event.target.email.value, - country: event.target.country.value, - phone: event.target.phone.value, - school: event.target.schoolID.value, - class: event.target.class.value, - lang: event.target.lang.value, - start_month: event.target.start_month.value, - start_date: event.target.start_date.value, - end_date: event.target.end_date.value, - annual: event.target.annual.value, - } - const JSONdata = JSON.stringify(data) - const endpoint = '/api/addUsers' - const options = { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSONdata, - } - const response = await fetch(endpoint, options) - const result = await response.json() - alert(`Is this your full name: ${result.data}`) - } - const handleOnLanguageChange = (e, v) => { - let idx = allLanguage.findIndex(o => o.lang === e.target.value); - let newAllLang = [...allLanguage] - newAllLang[idx].value = true - - - if ([typeParent, "teacher"].includes(currentType)) { - let counter = 0 - newAllLang.forEach((n, idx) => { - if (n.value) { - counter++ - } - }) - if (counter >= 2) { - newAllLang.forEach((n, idx) => { - newAllLang[idx].disabled = true - }) - } - } - setLanguage(newAllLang) - } - const handleTypeOnChange = (e) => { - let newAllLang = [...allLanguage] - newAllLang.forEach((n, idx) => { - newAllLang[idx].value = false - newAllLang[idx].disabled = false - }) - setLanguage(newAllLang) - setCurrentType(e.target.value) - } - return ( -
-
- -
-
-
- -

User - Registration Form

-
-
-
- - -
-
- - -
-
- - -
-
- - -
} - { - allCities && allCities.length > 0 && -
- - - - {school && school.data.map(data => - - )} - -
-
- - -
- {individualValue && -
-
- - -
- {/*
- -
-
-   - -
-
-   - -
-
-   - -
-
-   - -
-
-
*/} -
- -
- {allLanguage && allLanguage.length && allLanguage.map(n => { - return ( -
-   - -
- ) - })} -
-
-
- - -
-
- - -
-
- - -
-
- } -
- - {/* */} -
- -
-
-
-
- ) -} diff --git a/src/pages/api/auth/[...nextauth].js b/src/pages/api/auth/[...nextauth].js index 4ba1e79..911bf20 100644 --- a/src/pages/api/auth/[...nextauth].js +++ b/src/pages/api/auth/[...nextauth].js @@ -1,6 +1,8 @@ import NextAuth from "next-auth/next"; import CredentialsProvider from "next-auth/providers/credentials"; import { signIn } from "next-auth/react"; +import jwt_decode from "jwt-decode"; + const pubAPI = process.env.DIRECTUS_PUBLIC_API; @@ -44,8 +46,11 @@ export const options = { callbacks: { async jwt({ token, user, account }) { if (account && user) { + var tokenJwt =user.data.access_token + var roleID = jwt_decode(tokenJwt).role; return { ...token, + roleID:roleID, accessToken: user.data.access_token, expires: Date.now() + user.data.expires, refreshToken: user.data.refresh_token, @@ -62,6 +67,7 @@ export const options = { }, async session({ session, token }) { + session.user.roleID = token.roleID; session.user.accessToken = token.accessToken; session.user.refreshToken = token.refreshToken; session.user.expires = token.expires; diff --git a/src/pages/edit-school copy.jsx b/src/pages/edit-school copy.jsx deleted file mode 100644 index 2b2c4d2..0000000 --- a/src/pages/edit-school copy.jsx +++ /dev/null @@ -1,131 +0,0 @@ -import NavBar from '../components/NavBar' -import { useId, useState, useEffect, useMemo } from 'react'; -import 'react-phone-number-input/style.css' -import { useRouter } from 'next/router' - - -export default function addSchoolForm() { - - - const router = useRouter(); - - const [school, setSchool] = useState({}); - - useEffect(()=>{ - // if(router.query.school<1) { - // const { sid } = router.query; - // setSchool(sid) - if(router.query.school && router.query.school>1 ){ - fetch(`https://management.beanstalkedu.com/items/school/${router.query.school}`) - .then(res => res.json()) - .then(data => { - console.log(router.query.school); setSchool(data.data) - }) - } - - }, [router.query.school]); - - const handleSubmit = async (event) => { - event.preventDefault() - const data = { - "status":"published", - name: event.target.schoolName.value, - country: event.target.country.value, - state: event.target.state.value, - cities: event.target.cities.value, - annual: event.target.annual.value, - toddlers: event.target.toddlers.value, - early_start_programme: event.target.early_start_programme.value, - interakto: event.target.interakto.value, - agreement_expiry_date: event.target.agreement_expiry_date.value, - school_agreement: event.target.school_agreement.value, - school_contact_number: event.target.school_contact_number.value, - school_email_id: event.target.school_email_id.value, - - } - const JSONdata = JSON.stringify(data) - console.log(data) - const endpoint = 'https://management.beanstalkedu.com/items/school' - const options = { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSONdata, - } - const response = await fetch(endpoint, options) - - const result = await response.json() - // alert(`Is this your full name: ${result.data}`) - alert(`School Saved`) - } - - - return ( -
-
- -
-
-
- -

School Registration Form

-
-
-
- - setSchool(e.target.value)} name="schoolName" placeholder='School Name' className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} name="school_email_id" id="school_email_id" placeholder='School Email ID' className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} name="country" /> - -
-
- - setSchool(e.target.value)} name="state" /> - -
-
- - setSchool(e.target.value)} name="cities" /> - -
-
- - setSchool(e.target.value)} name="school_contact_number" /> -
-
- - setSchool(e.target.value)} /> -
-
- - setSchool(e.target.value)} /> -
-
- - setSchool(e.target.value)} /> -
-
- - setSchool(e.target.value)} /> -
-
- - setSchool(e.target.value)} id="agreement_expiry_date" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- -
- -
-
-
-
- ) - } \ No newline at end of file diff --git a/src/pages/edit-school.jsx b/src/pages/edit-school.jsx index 48cbc50..4728526 100644 --- a/src/pages/edit-school.jsx +++ b/src/pages/edit-school.jsx @@ -2,8 +2,10 @@ import {useId, useState, useEffect, useMemo} from 'react'; import 'react-phone-number-input/style.css' import NavBar from '../components/NavBar'; import { useRouter } from 'next/router' +import Link from 'next/link' -export default function editSchool() { + +export default function EditSchool() { const router = useRouter(); const [school, setSchool] = useState({}); @@ -66,10 +68,10 @@ export default function editSchool() {
- +   List Users Under This School - +
CSV Upload   @@ -141,7 +143,7 @@ export default function editSchool() {
- + setSchool(e.target.value)} type="file" name="agreement_documents" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
diff --git a/src/pages/edit-school2.jsx b/src/pages/edit-school2.jsx deleted file mode 100644 index 6a53869..0000000 --- a/src/pages/edit-school2.jsx +++ /dev/null @@ -1,167 +0,0 @@ -import NavBar from '../components/NavBar' -import { useId, useState, useEffect, useMemo } from 'react'; -import 'react-phone-number-input/style.css' -import { useRouter } from 'next/router' - - -export default function addSchoolForm() { - const router = useRouter(); - - const uploadToServer = async (event) => { - const body = new FormData(); - body.append("file", agreement.files[0]); - body.append("fName", `${router.query.school}.pdf`); - const response = await fetch("/api/fileUpload", { - method: "POST", - body - }); - }; - - const [school, setSchool] = useState({}); - - useEffect(()=>{ - // if(router.query.school<1) { - // const { sid } = router.query; - // setSchool(sid) - if(router.query.school && router.query.school>1 ){ - fetch(`https://management.beanstalkedu.com/items/school/${router.query.school}`) - .then(res => res.json()) - .then(data => { - // console.log(router.query.school); - setSchool(data.data) - }) - } - - }, [router.query.school]); - // console.log(setSchool) - - const handleSubmit = async (event) => { - event.preventDefault() - const data = { - "status":"published", - name: event.target.schoolName.value, - country: event.target.country.value, - state: event.target.state.value, - cities: event.target.cities.value, - annual: event.target.annual.value, - toddlers: event.target.toddlers.value, - early_start_programme: event.target.early_start_programme.value, - interakto: event.target.interakto.value, - agreement_expiry_date: event.target.agreement_expiry_date.value, - school_agreement: event.target.school_agreement.value, - school_contact_number: event.target.school_contact_number.value, - school_email_id: event.target.school_email_id.value, - - } - const JSONdata = JSON.stringify(data) - console.log(data) - const endpoint = 'https://management.beanstalkedu.com/items/school' - const options = { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSONdata, - } - const response = await fetch(endpoint, options) - - const result = await response.json() - // alert(`Is this your full name: ${result.data}`) - alert(`School Saved`) - } - - - return ( -
-
- -
-
-
- -

Update School Information

-
-
-
- - setSchool(e.target.value)} name="schoolName" placeholder='School Name' className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} name="school_email_id" id="school_email_id" placeholder='School Email ID' className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} name="country" /> - -
-
- - setSchool(e.target.value)} name="state" className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> - -
-
- - setSchool(e.target.value)} name="cities" className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]'/> - -
-
- - setSchool(e.target.value)} name="school_contact_number" className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} id="agreement_expiry_date" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
- {/*
- - -
*/} - {/*
- -
*/} - - -
-
- - {/* */} -
- -
-
-
-
-
- ) - } \ No newline at end of file diff --git a/src/pages/edit-user.jsx b/src/pages/edit-user.jsx index 127eb33..222933a 100644 --- a/src/pages/edit-user.jsx +++ b/src/pages/edit-user.jsx @@ -3,26 +3,12 @@ import 'react-phone-number-input/style.css' import NavBar from '../components/NavBar'; import { useRouter } from 'next/router' -export default function editUser() { +export default function EditUser() { const router = useRouter(); - // const updateUserData = async (event) => { - // const body = new FormData(); - // body.append("file", agreement.files[0]); - // body.append("fName", `${router.query.school}.pdf`); - // const response = await fetch("/api/updateUserDetails", { - // method: "POST", - // body - // }); - // }; - const [user, setUser] = useState({}); useEffect(()=>{ - // console.log(router.query); - // if(router.query.school<1) { - // const { sid } = router.query; - // setSchool(sid) if(router.query.user && router.query.user>0 ){ fetch(`/api/getUserDetails?user=${router.query.user}`) .then(res => res.json()) diff --git a/src/pages/edit-user2.jsx b/src/pages/edit-user2.jsx deleted file mode 100644 index 18a9be3..0000000 --- a/src/pages/edit-user2.jsx +++ /dev/null @@ -1,402 +0,0 @@ -// https://management.beanstalkedu.com/items/school -// import React from 'react'; -import {useId, useState, useEffect, useMemo} from 'react'; -import Select from 'react-select' -import countryList from 'react-select-country-list' -import 'react-phone-number-input/style.css' -import PhoneInput from 'react-phone-number-input' -import NavBar from '../components/NavBar'; -import { useRouter } from 'next/router' -// import { Inter } from 'next/font/google' - -const typeParent = "parent" - -export default function addUserForm() { - - const router = useRouter(); - - const [allLanguage, setLanguage] = useState([ - {lang: "Assamese", value: false}, - {lang: "Bengali", value: false}, - {lang: "English", value: false}, - {lang: "Hindi", value: false}, - {lang: "Telegu", value: false}, - {lang: "Punjabi", value: false}, - {lang: "Malayalam", value: false}, - {lang: "Tamil", value: false}, - {lang: "Kannada", value: false}, - {lang: "Gujrati", value: false}, - ]) - // console.log(allLanguage) - const [currentType, setCurrentType] = useState(typeParent) - const [countryValue, setCountryValue] = useState('') - const options = useMemo(() => countryList().getData(), []) - const [phoneValue, setphoneValue] = useState() - let [individualValue = true, setindividualValue] = useState() - - const [allStates, setAllStates] = useState([]) - const [allCities, setAllCities] = useState([]) - - const handleSelectAllStates = stateCode => { - setAllCities([]) - fetch(`https://api.siliconpin.com/v3/list/country/city/?country=${countryValue.value}&state=${stateCode.value}`) - .then(res => res.json()) - .then(data => { - // console.log("handleSelectAllStates:", data, options) - let newData = data && data.length > 0 && data.map(n => { - return { - label: n.name, - value: n.name - - } - }) - setAllCities(newData) - }) - } - - const selectCountry = countryValue => { - setAllStates([]) - fetch(`https://api.siliconpin.com/v3/list/country/state/?country=${countryValue.value}`).then(res => res.json()) - .then(data => { - console.log("countryValue:", data, options) - let newData = data && data.length > 0 && data.map(n => { - return { - label: n.name, - value: n.iso2 - - } - }) - setAllStates(newData) - setAllCities([]) - }) - - setCountryValue(countryValue) - } - - const individual = (event) => { - // console.log(event.target.schoolID.value) - - setindividualValue(individualValue = false) - } - const [school, setSchool] = useState(null); - useEffect(() => { - fetch(`https://management.beanstalkedu.com/items/school`) - .then(res => res.json()) - .then(data => { - setSchool(data) - - }) - }, []) - - const [user, setUser] = useState({}); - - useEffect(()=>{ - if(router.query.user && router.query.user>1){ - fetch(`/api/listUsers/${router.query.user}`) - .then(res => res.json()) - .then(data => { - setUser(data) - } - ) - } - }, - [router.query.user]); - console.log(user) - - const handleFormsubmit = async (event) => { - event.preventDefault() - console.log(event.target.lang.checked) - const data = { - "status": "published", - type: event.target.type.value, - uname: event.target.uname.value, - country: event.target.country.value, - state: event.target.state.value ? event.target.state.value:"", - city: event.target.city.value ? event.target.city.value:"", - phone: event.target.phone.value, - email: event.target.email.value, - school: event.target.schoolID.value, - klas: event.target.klas.value, - lang: allLanguage, - start_month: event.target.start_month.value, - start_date: event.target.start_date.value, - end_date: event.target.end_date.value, - annual: event.target.annual.value, - early_start_programme: event.target.early_start_programme.value, - toddlers: event.target.toddlers.value, - interakto: event.target.interakto.value, - } - const JSONdata = JSON.stringify(data) - const endpoint = '/api/addUsers' - const options = { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSONdata, - } - const response = await fetch(endpoint, options) - const result = await response.json() - // console.log(result) - // alert(`Is this your full name: ${result}`) - } - const handleOnLanguageChange = (e, v) => { - let idx = allLanguage.findIndex(o => o.lang === e.target.value); - let newAllLang = [...allLanguage] - newAllLang[idx].value = true - // console.log(newAllLang) - - if ([typeParent, "teacher"].includes(currentType)) { - let counter = 0 - newAllLang.forEach((n, idx) => { - if (n.value) { - counter++ - } - }) - if (counter >= 2) { - newAllLang.forEach((n, idx) => { - newAllLang[idx].disabled = true - }) - } - } - setLanguage(newAllLang) - } - const handleTypeOnChange = (e) => { - let newAllLang = [...allLanguage] - newAllLang.forEach((n, idx) => { - newAllLang[idx].value = false - newAllLang[idx].disabled = false - }) - const { name, checked } = e.target; - setLanguage({ ...allLanguage, [name]: checked }); - - // setLanguage(newAllLang) - setCurrentType(e.target.value) - } - return ( -
-
- -
-
-
- -

Update User Information

-
-
-
- - - - -
-
- - -
-
- - -
-
- - -
} - { - allCities && allCities.length > 0 && -
- - - - {school && school.data.map(data => - - )} - -
-
- - -
- {individualValue && -
-
- - -
-
- - -
-
- - -
-
- - -
- -
- -
- {/*  
-  
-  
-  
-  
-  
-  
-  
-  
-  
*/} - {allLanguage && allLanguage.length && allLanguage.map(n => { - return ( -
-   - -
- ) - })} -
-
-
- - -
-
- - -
-
- - -
-
- } -
- - {/* */} -
- -
-
-
-
- ) -} diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 9616e74..1a396be 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -10,12 +10,7 @@ export default function Home() {

- - +
) } diff --git a/src/pages/school-list/[slug].jsx b/src/pages/school-list/[slug].jsx index 54a7da4..1a41fe6 100644 --- a/src/pages/school-list/[slug].jsx +++ b/src/pages/school-list/[slug].jsx @@ -1,241 +1,161 @@ -import NavBar from '../../components/NavBar' -import {useRouter} from "next/router"; -import { useId, useState, useEffect, useMemo } from 'react'; -import Select from 'react-select' -import countryList from 'react-select-country-list' +import {useId, useState, useEffect, useMemo} from 'react'; import 'react-phone-number-input/style.css' -import PhoneInput from 'react-phone-number-input' +import NavBar from '../../components/NavBar'; +import { useRouter } from 'next/router' +import Link from 'next/link' -export default function addSchoolForm() { - const { query } = useRouter(); - const [countryValue, setCountryValue] = useState('') - const options = useMemo(() => countryList().getData(), []) - const [phoneValue, setphoneValue] = useState() - const [allStates, setAllStates] = useState([]) - const [allCities, setAllCities] = useState([]) - const handleSelectAllStates = stateCode => { - setAllCities([]) - fetch(`https://api.siliconpin.com/v3/list/country/city/?country=${countryValue.value}&state=${stateCode.value}`) - .then(res => res.json()) - .then(data => { - // console.log("handleSelectAllStates:", data, options) - let newData = data && data.length > 0 && data.map(n => { - return { - label: n.name, - value: n.name - } +export default function SchoolSlug() { + const router = useRouter(); + + const [school, setSchool] = useState({}); + + useEffect(()=>{ + if(router.query.school && router.query.school>0 ){ + console.log(router.query); + fetch(`/api/getSchoolDetails?school=${router.query.school}`) + .then(res => res.json()) + .then(data => { + console.log(data); + setSchool(data[0]) + // console.log(school) }) - setAllCities(newData) - }) - } - const selectCountry = countryValue => { - setAllStates([]) - fetch(`https://api.siliconpin.com/v3/list/country/state/?country=${countryValue.value}`) - .then(res => res.json()) - .then(data => { - // console.log("countryValue:", data, options) - let newData = data && data.length > 0 && data.map(n => { - return { - label: n.name, - value: n.iso2 - } - }) - setAllStates(newData) - setAllCities([]) - }) - setCountryValue(countryValue) - } - // console.log(phoneValue) - // const selectCountry = countryValue => { - // setCountryValue(countryValue) - // } - const handleSubmit = async (event) => { - event.preventDefault() - const data = { - "status":"published", - name: event.target.schoolName.value, - country: event.target.country.value, - state: event.target.state.value, - cities: event.target.cities.value, - annual: event.target.annual.value, - toddlers: event.target.toddlers.value, - early_start_programme: event.target.early_start_programme.value, - interakto: event.target.interakto.value, - agreement_expiry_date: event.target.agreement_expiry_date.value, - school_agreement: event.target.school_agreement.value, - school_contact_number: event.target.school_contact_number.value, - school_email_id: event.target.school_email_id.value, - } - const JSONdata = JSON.stringify(data) - // console.log(data) - const endpoint = 'https://management.beanstalkedu.com/items/school' - const options = { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSONdata, - } - const response = await fetch(endpoint, options) + + }, [router.query.school]); - const result = await response.json() - // alert(`Is this your full name: ${result.data}`) - alert(`School Saved`) + const updateSchoolData = async (event) => { + event.preventDefault() + const data = { + schoolId: router.query.school, + sname: event.target.sname.value, + status: event.target.status.value, + country: event.target.country.value, + state: event.target.state.value, + city: event.target.city.value, + annual: event.target.annual.value, + toddlers: event.target.toddlers.value, + early_start_programme: event.target.early_start_programme.value, + interakto: event.target.interakto.value, + agg_expiry: event.target.agg_expiry.value, + usage_expiry: event.target.usage_expiry.value, + phone: event.target.phone.value, + email: event.target.email.value, } - const [school, setUser] = useState([]); - const fetchData = async () => { - const response = await fetch("https://management.beanstalkedu.com/items/school?filter[status][_eq]=published&"); - const data = await response.json(); - return setUser(data.data[0]); - } - // console.log(school.name) - - useEffect(() => { - fetchData(); - },[]) - - return ( -
-
- -
-

Items page

-

{query.id}

-

{query.name}

-
-
-
-
- -

Update School Information

-
-
-
- - -
-
- - -
-
- - +
+ {/* */} + +
+

Update School Information

+ +
+ + setSchool(e.target.value)} type="text" name="sname" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="status" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="phone" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="email" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="country" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- {allStates && allStates.length > 0 &&
- {}} - /> -
} -
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
- {/*
- - -
*/} -
- {/* */} - -
- -
- + setSchool(e.target.value)} type="text" name="state" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="city" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="annual" placeholder='' className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]'/> +
+
+ + setSchool(e.target.value)} type="text" name="toddlers" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="early_start_programme" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="interakto" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="usage_expiry" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+ +
+ + setSchool(e.target.value)} type="text" name="agg_expiry" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ +
+ +
+ +
+ + setSchool(e.target.value)} type="file" name="agreement_documents" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
- - ) - } \ No newline at end of file + +
+ + + +
+ + ) +} + + diff --git a/src/pages/school-list/index.jsx b/src/pages/school-list/index.jsx index 6fe6eda..e0caabe 100644 --- a/src/pages/school-list/index.jsx +++ b/src/pages/school-list/index.jsx @@ -50,7 +50,7 @@ const fetchData = async () => {
{school.map(data=> - + diff --git a/src/pages/school-list/slug.jsx b/src/pages/school-list/slug.jsx deleted file mode 100644 index ea2b87f..0000000 --- a/src/pages/school-list/slug.jsx +++ /dev/null @@ -1,241 +0,0 @@ -import NavBar from '../../components/NavBar' -import {useRouter} from "next/router"; -import { useId, useState, useEffect, useMemo } from 'react'; -import Select from 'react-select' -import countryList from 'react-select-country-list' -import 'react-phone-number-input/style.css' -import PhoneInput from 'react-phone-number-input' - -export default function addSchoolForm() { - const { query } = useRouter(); - const [countryValue, setCountryValue] = useState('') - const options = useMemo(() => countryList().getData(), []) - const [phoneValue, setphoneValue] = useState() - const [allStates, setAllStates] = useState([]) - const [allCities, setAllCities] = useState([]) - - const handleSelectAllStates = stateCode => { - setAllCities([]) - fetch(`https://api.siliconpin.com/v3/list/country/city/?country=${countryValue.value}&state=${stateCode.value}`) - .then(res => res.json()) - .then(data => { - // console.log("handleSelectAllStates:", data, options) - let newData = data && data.length > 0 && data.map(n => { - return { - label: n.name, - value: n.name - } - }) - setAllCities(newData) - }) - } - const selectCountry = countryValue => { - setAllStates([]) - fetch(`https://api.siliconpin.com/v3/list/country/state/?country=${countryValue.value}`) - .then(res => res.json()) - .then(data => { - // console.log("countryValue:", data, options) - let newData = data && data.length > 0 && data.map(n => { - return { - label: n.name, - value: n.iso2 - } - }) - setAllStates(newData) - setAllCities([]) - }) - setCountryValue(countryValue) - } - // console.log(phoneValue) - // const selectCountry = countryValue => { - // setCountryValue(countryValue) - // } - const handleSubmit = async (event) => { - event.preventDefault() - const data = { - "status":"published", - name: event.target.schoolName.value, - country: event.target.country.value, - state: event.target.state.value, - cities: event.target.cities.value, - annual: event.target.annual.value, - toddlers: event.target.toddlers.value, - early_start_programme: event.target.early_start_programme.value, - interakto: event.target.interakto.value, - agreement_expiry_date: event.target.agreement_expiry_date.value, - school_agreement: event.target.school_agreement.value, - school_contact_number: event.target.school_contact_number.value, - school_email_id: event.target.school_email_id.value, - - } - const JSONdata = JSON.stringify(data) - // console.log(data) - const endpoint = 'https://management.beanstalkedu.com/items/school' - const options = { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSONdata, - } - const response = await fetch(endpoint, options) - - const result = await response.json() - // alert(`Is this your full name: ${result.data}`) - alert(`School Saved`) - } - const [school, setUser] = useState([]); - const fetchData = async () => { - const response = await fetch("https://management.beanstalkedu.com/items/school?filter[status][_eq]=published"); - const data = await response.json(); - return setUser(data.data[0]); - } - // console.log(school.name) - - useEffect(() => { - fetchData(); - },[]) - - return ( -
-
- -
-

Items page

-

{query.id}

-

{query.name}

-
-
-
-
- -

Update School Information

-
-
-
- - -
-
- - -
-
- - -
} - { - allCities && allCities.length > 0 && -
- - - - - - - - - - - - - - - - -
-
- - -
-
- - -
-
- - -
-
- - -
- {/*
- - -
*/} -
- {/* */} - -
- -
-
-
-
- ) - } \ No newline at end of file diff --git a/src/pages/user-list-by-school.jsx b/src/pages/user-list-by-school.jsx index a1d8f36..60cce76 100644 --- a/src/pages/user-list-by-school.jsx +++ b/src/pages/user-list-by-school.jsx @@ -1,8 +1,7 @@ import React, { useEffect, useState } from "react"; +import Link from 'next/link' + -import Image from 'next/image' -import { Inter } from 'next/font/google' -const inter = Inter({ subsets: ['latin'] }) import NavBar from '../components/NavBar' export default function Modal() { const [user, setUser] = useState([]); @@ -26,14 +25,14 @@ const fetchData = async () => {
ID School Name CountryAnualEarly Start ProgramAnnualS.E.DE.S.P Toddlers Interakto Status{data.name} {data.country} {data.anual}{data.agreement_expiry_date} {data.early_start_programme} {data.toddlers} {data.interakto}
- + {/*

Edit

*/}
-- 2.34.1 From 81cfb6ce00deca08165d66cc5c932bfefface698 Mon Sep 17 00:00:00 2001 From: Kar Date: Thu, 18 May 2023 02:43:11 +0530 Subject: [PATCH 03/16] userEdit --- data/.~lock.user.csv# | 1 + data/appUser.db | Bin 24576 -> 24576 bytes src/pages/api/editUser.js | 44 ++++++++++++++ src/pages/edit-user.jsx | 118 +++++++++++++++++++++++++------------- 4 files changed, 124 insertions(+), 39 deletions(-) create mode 100644 data/.~lock.user.csv# create mode 100644 src/pages/api/editUser.js diff --git a/data/.~lock.user.csv# b/data/.~lock.user.csv# new file mode 100644 index 0000000..00777a3 --- /dev/null +++ b/data/.~lock.user.csv# @@ -0,0 +1 @@ +,ov,d4,16.05.2023 12:44,file:///home/ov/.config/libreoffice/4; \ No newline at end of file diff --git a/data/appUser.db b/data/appUser.db index b9e61c8086f8e7bdd9f2fbda5ba492b4287a2946..1a865a44ab03ad6fe0c60dda4fcde0b1342e1dff 100644 GIT binary patch delta 134 zcmZoTz}Rqrae_2s>O>i5#?*}o3;6|k85#IFy&3q^`Ofi~^3LXE-z+5Xp2wVlfq{)d zvQdyrl0j0QL6U(%QISEIL772V6i5mRirXvZCFZ6o7!{Nz { - const body = new FormData(); - body.append("file", agreement.files[0]); - body.append("fName", `${router.query.school}.pdf`); - const response = await fetch("/api/updateUserDetails", { - method: "POST", - body - }); - }; + // const updateUserData = async (event) => { + // const body = new FormData(); + // body.append("file", agreement.files[0]); + // body.append("fName", `${router.query.school}.pdf`); + // const response = await fetch("/api/updateUserDetails", { + // method: "POST", + // body + // }); + // }; const [user, setUser] = useState({}); useEffect(()=>{ - console.log(router.query); + // console.log(router.query); // if(router.query.school<1) { // const { sid } = router.query; // setSchool(sid) @@ -27,34 +27,38 @@ export default function editUser() { fetch(`/api/getUserDetails?user=${router.query.user}`) .then(res => res.json()) .then(data => { - console.log(router.query.user); - setUser(data) + // console.log(data); + setUser(data[0]) + // console.log(user) }) } - }, [router.query.school]); + }, [router.query.user]); - const handleSubmit = async (event) => { + const updateUserData = async (event) => { event.preventDefault() const data = { - "status":"published", - name: event.target.schoolName.value, + userId: router.query.user, + type: event.target.type.value, + status: event.target.status.value, + uname: event.target.uname.value, country: event.target.country.value, state: event.target.state.value, - cities: event.target.cities.value, + city: event.target.city.value, + address: event.target.address.value, + start_date: event.target.start_date.value, + end_date: event.target.end_date.value, + school: event.target.school.value, anual: event.target.anual.value, toddlers: event.target.toddlers.value, early_start_programme: event.target.early_start_programme.value, - interakto: event.target.interakto.value, - agreement_expiry_date: event.target.agreement_expiry_date.value, - school_agreement: event.target.school_agreement.value, - school_contact_number: event.target.school_contact_number.value, - school_email_id: event.target.school_email_id.value, - + email: event.target.email.value, + phone: event.target.phone.value, + klas: event.target.klas.value } const JSONdata = JSON.stringify(data) console.log(data) - const endpoint = 'https://management.beanstalkedu.com/items/school' + const endpoint = '/api/editUser' const options = { method: 'POST', headers: { @@ -66,7 +70,7 @@ export default function editUser() { const result = await response.json() // alert(`Is this your full name: ${result.data}`) - alert(`School Saved`) + alert(`User data updated`) } return ( @@ -83,37 +87,73 @@ export default function editUser() {
- - - + setUser(e.target.value)} type="text" name="type" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- + setUser(e.target.value)} type="text" name="uname" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="status" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="start_date" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="end_date" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- + setUser(e.target.value)} type="email" name="email" placeholder='ex. xyz@email.com' className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]'/> +
+
+ + setUser(e.target.value)} type="text" name="phone" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- + setUser(e.target.value)} type="text" name="country" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="state" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="city" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- - + + setUser(e.target.value)} type="text" name="address" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- - + + setUser(e.target.value)} type="text" name="school" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- - + + setUser(e.target.value)} type="text" name="klas" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="anual" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="early_start_programme" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="toddlers" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="interakto" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
-
-
- - setSchool(e.target.value)} name="school_contact_number" className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} id="agreement_expiry_date" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
- {/*
- - -
*/} - {/*
- -
*/} -
- -
-
- - {/* */} -
- -
-
- -
- - ) - } \ No newline at end of file + + + + +
+ +
+ + + + + + ) +} diff --git a/src/pages/edit-school2.jsx b/src/pages/edit-school2.jsx new file mode 100644 index 0000000..ef230da --- /dev/null +++ b/src/pages/edit-school2.jsx @@ -0,0 +1,167 @@ +import NavBar from '../components/NavBar' +import { useId, useState, useEffect, useMemo } from 'react'; +import 'react-phone-number-input/style.css' +import { useRouter } from 'next/router' + + +export default function addSchoolForm() { + const router = useRouter(); + + const uploadToServer = async (event) => { + const body = new FormData(); + body.append("file", agreement.files[0]); + body.append("fName", `${router.query.school}.pdf`); + const response = await fetch("/api/fileUpload", { + method: "POST", + body + }); + }; + + const [school, setSchool] = useState({}); + + useEffect(()=>{ + // if(router.query.school<1) { + // const { sid } = router.query; + // setSchool(sid) + if(router.query.school && router.query.school>1 ){ + fetch(`https://management.beanstalkedu.com/items/school/${router.query.school}`) + .then(res => res.json()) + .then(data => { + // console.log(router.query.school); + setSchool(data.data) + }) + } + + }, [router.query.school]); + // console.log(setSchool) + + const handleSubmit = async (event) => { + event.preventDefault() + const data = { + "status":"published", + name: event.target.schoolName.value, + country: event.target.country.value, + state: event.target.state.value, + cities: event.target.cities.value, + anual: event.target.anual.value, + toddlers: event.target.toddlers.value, + early_start_programme: event.target.early_start_programme.value, + interakto: event.target.interakto.value, + agreement_expiry_date: event.target.agreement_expiry_date.value, + school_agreement: event.target.school_agreement.value, + school_contact_number: event.target.school_contact_number.value, + school_email_id: event.target.school_email_id.value, + + } + const JSONdata = JSON.stringify(data) + console.log(data) + const endpoint = 'https://management.beanstalkedu.com/items/school' + const options = { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSONdata, + } + const response = await fetch(endpoint, options) + + const result = await response.json() + // alert(`Is this your full name: ${result.data}`) + alert(`School Saved`) + } + + + return ( +
+
+ +
+
+
+ +

Update School Information

+
+
+
+ + setSchool(e.target.value)} name="schoolName" placeholder='School Name' className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} name="school_email_id" id="school_email_id" placeholder='School Email ID' className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} name="country" /> + +
+
+ + setSchool(e.target.value)} name="state" className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> + +
+
+ + setSchool(e.target.value)} name="cities" className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]'/> + +
+
+ + setSchool(e.target.value)} name="school_contact_number" className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} id="agreement_expiry_date" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+ {/*
+ + +
*/} + {/*
+ +
*/} +
+ +
+
+ + {/* */} +
+ +
+
+
+
+
+ ) + } \ No newline at end of file diff --git a/src/pages/edit-user.jsx b/src/pages/edit-user.jsx index 8b695a7..3bd69a6 100644 --- a/src/pages/edit-user.jsx +++ b/src/pages/edit-user.jsx @@ -27,9 +27,9 @@ export default function editUser() { fetch(`/api/getUserDetails?user=${router.query.user}`) .then(res => res.json()) .then(data => { - // console.log(data); + console.log(data); setUser(data[0]) - // console.log(user) + console.log(user) }) } @@ -98,11 +98,11 @@ export default function editUser() { setUser(e.target.value)} type="text" name="status" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- + setUser(e.target.value)} type="text" name="start_date" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- + setUser(e.target.value)} type="text" name="end_date" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
@@ -127,9 +127,13 @@ export default function editUser() {
- + setUser(e.target.value)} type="text" name="address" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
+ {/*
+ + setUser(e.target.value)} type="text" name="address" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
*/}
setUser(e.target.value)} type="text" name="school" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> @@ -143,15 +147,15 @@ export default function editUser() { setUser(e.target.value)} type="text" name="anual" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- + setUser(e.target.value)} type="text" name="early_start_programme" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- + setUser(e.target.value)} type="text" name="toddlers" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- + setUser(e.target.value)} type="text" name="interakto" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
-- 2.34.1 From 27657679d70dcb41748b297df1e43447153c3518 Mon Sep 17 00:00:00 2001 From: suvodip ghosh Date: Thu, 18 May 2023 21:13:56 +0530 Subject: [PATCH 05/16] 0 --- data/appUser.db | Bin 24576 -> 24576 bytes src/pages/api/listUsers.js | 6 ++ src/pages/edit-school.jsx | 2 +- src/pages/edit-user.jsx | 2 + src/pages/school-list/index.jsx | 13 ++++- src/pages/user-list-by-school.jsx | 91 ++++++++++++++++++++++++++++++ src/pages/user-list.jsx | 9 +-- 7 files changed, 112 insertions(+), 11 deletions(-) create mode 100644 src/pages/user-list-by-school.jsx diff --git a/data/appUser.db b/data/appUser.db index 88aa3767ca6ce19e5681d6164dbbfa521ffbacfe..dee3dcbd82c600f0df8077f9a58dab433c1691f0 100644 GIT binary patch delta 181 zcmZoTz}Rqrae_2s)XQX-#_6N%u7`; IT%_Ot0O%_*Hvj+t delta 181 zcmZoTz}Rqrae_2s#zYxs#*B>#EBP5qHggFi@YnM)NHz+vNis;vH*x|gVR;5&1_nh% z25|;W22oLQ24i6$shF6USWudjlUbaRngV1S85kMs8kp)DS^!xl5Ef84G0_4AfQ2v! ght%A}%pASs{9K@vIEr*;UP@+JW=d&d&LRZ|0Pb%xhX4Qo diff --git a/src/pages/api/listUsers.js b/src/pages/api/listUsers.js index d1d3d8c..d78ecaa 100644 --- a/src/pages/api/listUsers.js +++ b/src/pages/api/listUsers.js @@ -4,6 +4,12 @@ import sqlite3 from 'sqlite3'; export default function handler(req,res) { +console.log(req.body.school) +// const { +// query: { name, keyword }, +// method, +// } = req; +// console.log(name, keyword, method); const DB_NAME = 'data/appUser.db'; const TABLE_NAME = 'user'; diff --git a/src/pages/edit-school.jsx b/src/pages/edit-school.jsx index 33d79d0..d795573 100644 --- a/src/pages/edit-school.jsx +++ b/src/pages/edit-school.jsx @@ -129,7 +129,7 @@ export default function editSchool() { setSchool(e.target.value)} type="text" name="interakto" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- + setSchool(e.target.value)} type="text" name="agreement_expiry_date" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
diff --git a/src/pages/edit-user.jsx b/src/pages/edit-user.jsx index 3bd69a6..f763a9c 100644 --- a/src/pages/edit-user.jsx +++ b/src/pages/edit-user.jsx @@ -52,6 +52,7 @@ export default function editUser() { anual: event.target.anual.value, toddlers: event.target.toddlers.value, early_start_programme: event.target.early_start_programme.value, + interakto: event.target.interakto.value, email: event.target.email.value, phone: event.target.phone.value, klas: event.target.klas.value @@ -71,6 +72,7 @@ export default function editUser() { const result = await response.json() // alert(`Is this your full name: ${result.data}`) alert(`User data updated`) + } return ( diff --git a/src/pages/school-list/index.jsx b/src/pages/school-list/index.jsx index 1219b98..64cd67c 100644 --- a/src/pages/school-list/index.jsx +++ b/src/pages/school-list/index.jsx @@ -29,10 +29,19 @@ const fetchData = async () => {
- -   + {/* +   Add School + */} + +   + List Users Under This School +
+ CSV Upload + +
+
diff --git a/src/pages/user-list-by-school.jsx b/src/pages/user-list-by-school.jsx new file mode 100644 index 0000000..a1d8f36 --- /dev/null +++ b/src/pages/user-list-by-school.jsx @@ -0,0 +1,91 @@ +import React, { useEffect, useState } from "react"; + +import Image from 'next/image' +import { Inter } from 'next/font/google' +const inter = Inter({ subsets: ['latin'] }) +import NavBar from '../components/NavBar' +export default function Modal() { + const [user, setUser] = useState([]); +const fetchData = async () => { + const response = await fetch("/api/listUsers"); + const data = await response.json(); + // console.log(data) + return setUser(data); + } +// console.log(user) + + useEffect(() => { + fetchData(); + },[]) + + return ( +
+
+ +
+ +
+
+ + + + + + + + + + + + + + {user.map + (data=> + + + + + + + + + + + ) + } + +
NameMobileEmailSchool NameUser TypeStart DateEnd DateAction
{data.uname}{data.phone}{data.email}{data.school}{data.type}{data.start_date}{data.end_date} +
+ +
+ +
+
+
+
+ + + + + ) + +} diff --git a/src/pages/user-list.jsx b/src/pages/user-list.jsx index ac9565f..a1d8f36 100644 --- a/src/pages/user-list.jsx +++ b/src/pages/user-list.jsx @@ -1,4 +1,5 @@ import React, { useEffect, useState } from "react"; + import Image from 'next/image' import { Inter } from 'next/font/google' const inter = Inter({ subsets: ['latin'] }) @@ -43,10 +44,6 @@ const fetchData = async () => {
Email School Name User TypeAnnualClassLanguageYearStart Date End Date Action{data.email} {data.school} {data.type}{data.anual}{data.klas}{data.lang}{data.year}{data.start_date} {data.end_date} -- 2.34.1 From 4ea8d4d8394fdc24bc49a2eb4b382ee5f84e7b20 Mon Sep 17 00:00:00 2001 From: Kar Date: Fri, 19 May 2023 02:08:06 +0530 Subject: [PATCH 06/16] s2 --- data/appUser.db | Bin 24576 -> 24576 bytes data/user.csv | 2 +- public/img/4.svg | 1 + src/components/SchoolEditForm.jsx | 6 +- src/pages/add-school-form.jsx | 62 +++++++------ src/pages/add-user-form.jsx | 6 +- src/pages/add-user-form2.jsx | 10 +- src/pages/api/addSchool.js | 37 ++++++++ src/pages/api/addUsers.js | 7 +- src/pages/api/editSchool.js | 41 +++++++++ src/pages/api/editUser.js | 6 +- src/pages/api/getSchoolDetails.js | 41 +++++++++ src/pages/api/listSchlools.js | 73 +++++++++++++++ src/pages/api/login.js | 84 ++++++++++------- src/pages/edit-school copy.jsx | 6 +- src/pages/edit-school.jsx | 147 +++++++++++++++--------------- src/pages/edit-school2.jsx | 6 +- src/pages/edit-user.jsx | 8 +- src/pages/edit-user2.jsx | 6 +- src/pages/school-list/[slug].jsx | 6 +- src/pages/school-list/index.jsx | 41 +++------ src/pages/school-list/slug.jsx | 6 +- 22 files changed, 404 insertions(+), 198 deletions(-) create mode 100644 public/img/4.svg create mode 100644 src/pages/api/addSchool.js create mode 100644 src/pages/api/editSchool.js create mode 100644 src/pages/api/getSchoolDetails.js create mode 100644 src/pages/api/listSchlools.js diff --git a/data/appUser.db b/data/appUser.db index dee3dcbd82c600f0df8077f9a58dab433c1691f0..587ccc85eac36dc960ae4a13f21b248f31627b42 100644 GIT binary patch delta 837 zcmZWmOH30{6n(En$_$-8N>gCK!nBr1(gGc7O}l8cK+DIrNG%cBkZC(iEAuHc9RU*q zqcJR8D47+}g}QasbnAk>k%Sml#<+4}>cW+7Oms?{l*F6dckem5IrsDSkKz6?d@*D% z0{}W(ZZaZ$=np!}U}EDtVa0(N9|Pz%K1O`DCaT&yO9vsD>s74|jRgKVjP(sXStl(0 zPA5EYSC|~nstPMNyhA@Ae(R5HpE}T6cv{sy!oA0`&C*Yj@ac{7N+n;EB)<8YW-{?u zHcn+@)5$pHX_6jl497gBf(KhjXXA7643%EWQt6ds(r@sJ$OxfXFW=UlAZ?>!6a!G9SOrapNigJMvMU~<8*S5?0Guy~QNvyCkvssZYRB+rn zyHhS*?4~LV$NtAE6{e!Lv~@o^!;JevbOg{*%}zZ>dn~jAmwnV{CjoFc9LVh+X|7Ju z3u%SEdA`F$UJ`r}nhH0p`OarzLXP2?MMg}pxfCM@rUFyJ@jz(Yh^>r{l+_$xQi^PW zFxr|>9iU&Rj?N6wvf2>!9zmpko$RBrZZnBBn|I-6Cv5y-f*>Hk@h*Tk+lehiyd*lU zO!t@WTlfjyRn>lA1KLbt5P%Ut0%T|+AJ9_BFrUtlqkCRP<|J{dRPa8C(h;u^y%vaE z_gA7pe>qBfV^TQ7%&XkJ5YNwsg%rQKy{&Ryb!BU=7+G81OeE+TIk+;N<0l0^m<&JM ziX^$h@}2bZ?%j00sHT*FVU00E?K@2`&MwVJf}n~lg-aXM?0re)B(-)j7&HwT6J7#Z zFHQooF)?tvfdgCt4yOa@E*Gu;9kA+aE*u8*H@)H7E7u2T*7`d2)8S$LZO={(1}r@o MJQp#94EPiM1ENUcCIA2c delta 1065 zcmb7DO-vI(6rO2IX}2uXvT1SMYPV_7Gzi&kK`L6>LamX8K!PU@CQCa|uzzm1haL=U zJmAUL?7>8hG2A_no=v!Gdf;HZ7`@`ji(ul#x6lAKaByZ`=H=ymGv7Dw&E_uN+{G^h z&pJZL-Z3le{^pG+w~j_v_F1xxENlgl1-9Z^ZF$_k7#rEP?(gV7FgW;6Gv&MV^r547 z(Cfup0Zmyh(t3@mrdf<6b7;g|d&UCUiL)3HXBLr0f4hI2ea-gvDXy=sEYoIQF=LF) zx#xW6%vxWbnU5`BEK~R`zKryyJ~N>EL>}=0mS?$OkmcAAYcvvDf{p_`8Vaz&Nth#q z40${PYy7_b$bGdNRJ-%srw?A~3UgkLGyHME_!N)eh#@CpZhu#b@qOx97z-EO7SyPc zD^OJ|D+oC^wL6L&ANa{RV9uR-N zc0k{1wI`z%KUsxe!0R5yEIjZ$shJmQ=8wyR^28~R3|(HNRc$_}ncXtcdK3SMH$d0` zoZzJH29R!pJsdzn=d`e?o(n-6gdL|1Q=;@#cqbf@BGD0Pd_<0cH+JmZ&qiYZ zjFO_x){9z_9=*jic#K?Gt7%$JYbg1=N^3Q-xCX5uvp@}#14ItUw-!!*COFtkag4)m d^ \ No newline at end of file diff --git a/src/components/SchoolEditForm.jsx b/src/components/SchoolEditForm.jsx index b20f934..a2fb025 100644 --- a/src/components/SchoolEditForm.jsx +++ b/src/components/SchoolEditForm.jsx @@ -29,7 +29,7 @@ export default function Modal() { country: event.target.country.value, state: event.target.state.value, cities: event.target.cities.value, - anual: event.target.anual.value, + annual: event.target.annual.value, toddlers: event.target.toddlers.value, early_start_programme: event.target.early_start_programme.value, interakto: event.target.interakto.value, @@ -119,8 +119,8 @@ export default function Modal() {
- - diff --git a/src/pages/add-school-form.jsx b/src/pages/add-school-form.jsx index e44c57a..6c436c2 100644 --- a/src/pages/add-school-form.jsx +++ b/src/pages/add-school-form.jsx @@ -52,23 +52,23 @@ export default function addSchoolForm() { event.preventDefault() const data = { "status":"published", - name: event.target.schoolName.value, + sname: event.target.sname.value, country: event.target.country.value, state: event.target.state.value, - cities: event.target.cities.value, - anual: event.target.anual.value, + city: event.target.city.value, + annual: event.target.annual.value, toddlers: event.target.toddlers.value, early_start_programme: event.target.early_start_programme.value, interakto: event.target.interakto.value, - agreement_expiry_date: event.target.agreement_expiry_date.value, - school_agreement: event.target.school_agreement.value, - school_contact_number: event.target.school_contact_number.value, - school_email_id: event.target.school_email_id.value, + agg_expiry: event.target.agg_expiry.value, + usage_expiry: event.target.usage_expiry.value, + phone: event.target.phone.value, + email: event.target.email.value, } const JSONdata = JSON.stringify(data) console.log(data) - const endpoint = 'https://management.beanstalkedu.com/items/school' + const endpoint = '/api/addSchool' const options = { method: 'POST', headers: { @@ -96,11 +96,11 @@ export default function addSchoolForm() {
- +
- - + +
@@ -120,10 +120,10 @@ export default function addSchoolForm() { { allCities && allCities.length > 0 &&
- + + +
- + - - - - - - - - - - - + + + + + + + + + + +
- - + + +
+
+ +
{/*
diff --git a/src/pages/add-user-form.jsx b/src/pages/add-user-form.jsx index 52f6d30..7ee95db 100644 --- a/src/pages/add-user-form.jsx +++ b/src/pages/add-user-form.jsx @@ -102,7 +102,7 @@ export default function addUserForm() { start_month: event.target.start_month.value, start_date: event.target.start_date.value, end_date: event.target.end_date.value, - anual: event.target.anual.value, + annual: event.target.annual.value, early_start_programme: event.target.early_start_programme.value, toddlers: event.target.toddlers.value, interakto: event.target.interakto.value, @@ -242,8 +242,8 @@ export default function addUserForm() { {individualValue &&
- - diff --git a/src/pages/add-user-form2.jsx b/src/pages/add-user-form2.jsx index 7782eab..64f05aa 100644 --- a/src/pages/add-user-form2.jsx +++ b/src/pages/add-user-form2.jsx @@ -98,7 +98,7 @@ export default function addUserForm() { start_month: event.target.start_month.value, start_date: event.target.start_date.value, end_date: event.target.end_date.value, - anual: event.target.anual.value, + annual: event.target.annual.value, } const JSONdata = JSON.stringify(data) const endpoint = '/api/addUsers' @@ -234,8 +234,8 @@ export default function addUserForm() { {individualValue &&
- - @@ -256,8 +256,8 @@ export default function addUserForm() {
-   - +   +
  diff --git a/src/pages/api/addSchool.js b/src/pages/api/addSchool.js new file mode 100644 index 0000000..2f74f09 --- /dev/null +++ b/src/pages/api/addSchool.js @@ -0,0 +1,37 @@ +export default function handler(req, res) { + const sqlite3 = require('sqlite3').verbose(); + + // console.log(req.body) + // Open a new database connection + let sname, status, phone, annual, early_start_programme, toddlers, interakto, email, country, state, city, address, agg_expiry, usage_expiry = ""; + + if(req.body.sname) sname =req.body.sname; + // if(req.body.status) status =req.body.status; + if(req.body.status) status ="published"; + if(req.body.phone) phone =req.body.phone; + if(req.body.annual) annual =req.body.annual; + if(req.body.early_start_programme) early_start_programme =req.body.early_start_programme; + if(req.body.toddlers) toddlers =req.body.toddlers; + if(req.body.interakto) interakto =req.body.interakto; + if(req.body.email) email =req.body.email; + if(req.body.country) country =req.body.country; + if(req.body.state) state =req.body.state; + if(req.body.city) city =req.body.city; + if(req.body.address) address =req.body.address; + if(req.body.agg_expiry) agg_expiry =req.body.agg_expiry; + if(req.body.usage_expiry) usage_expiry =req.body.usage_expiry; + + const db = new sqlite3.Database('data/appUser.db'); + db.run(`INSERT INTO school (sname, status, phone, annual, early_start_programme, toddlers, interakto, email, country, state, city, address, agg_expiry, usage_expiry ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [ sname, status, phone, annual, early_start_programme, toddlers, interakto, email, country, state, city, address, agg_expiry, usage_expiry], + function(err) { + if (err) { + return console.log(err.message); + } + } + ); + db.close(); + + + res.status(200).json({ msg: 'ok' }); + } + \ No newline at end of file diff --git a/src/pages/api/addUsers.js b/src/pages/api/addUsers.js index 372a80f..81807b0 100644 --- a/src/pages/api/addUsers.js +++ b/src/pages/api/addUsers.js @@ -3,7 +3,7 @@ export default function handler(req, res) { console.log(req.body) // Open a new database connection - let uname, status, type, start_month, start_date, end_date, plan, klas, lang, phone, pass, anual, early_start_programme, toddlers, interakto, email, country, state, city, address, school=""; + let uname, status, type, start_month, start_date, end_date, plan, klas, lang, phone, pass, annual, early_start_programme, toddlers, interakto, email, country, state, city, address, school=""; if(req.body.uname) uname =req.body.uname; if(req.body.status) status =req.body.status; @@ -15,10 +15,9 @@ export default function handler(req, res) { if(req.body.plan) plan =req.body.plan; if(req.body.klas) klas =req.body.klas; if(req.body.lang) lang =req.body.lang; - if(req.body.lang) lang =req.body.lang; if(req.body.phone) phone =req.body.phone; if(req.body.pass) pass =req.body.pass; - if(req.body.anual) anual =req.body.anual; + if(req.body.annual) annual =req.body.annual; if(req.body.early_start_programme) early_start_programme =req.body.early_start_programme; if(req.body.toddlers) toddlers =req.body.toddlers; if(req.body.interakto) interakto =req.body.interakto; @@ -29,7 +28,7 @@ export default function handler(req, res) { if(req.body.address) address =req.body.address; if(req.body.school) school =req.body.school; const db = new sqlite3.Database('data/appUser.db'); - db.run(`INSERT INTO user (uname, status, type, start_month, start_date, end_date, plan, klas, lang, phone, pass, anual, early_start_programme, toddlers, interakto, email, country, state, city, address, school ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [ uname, status, type, start_month, start_date, end_date, plan, klas, lang, phone, pass, anual, early_start_programme, toddlers, interakto, email, country, state, city, address, school], + db.run(`INSERT INTO user (uname, status, type, start_month, start_date, end_date, plan, klas, lang, phone, pass, annual, early_start_programme, toddlers, interakto, email, country, state, city, address, school ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [ uname, status, type, start_month, start_date, end_date, plan, klas, lang, phone, pass, annual, early_start_programme, toddlers, interakto, email, country, state, city, address, school], function(err) { if (err) { return console.log(err.message); diff --git a/src/pages/api/editSchool.js b/src/pages/api/editSchool.js new file mode 100644 index 0000000..d29a2c1 --- /dev/null +++ b/src/pages/api/editSchool.js @@ -0,0 +1,41 @@ +export default function handler(req, res) { + const sqlite3 = require('sqlite3').verbose(); + + console.log(req.body) + + // Open a new database connection + let sname, status, phone, annual, early_start_programme, toddlers, interakto, email, country, state, city, address, agg_expiry, usage_expiry = ""; + + if(req.body.sname) sname =req.body.sname; + if(req.body.status) status =req.body.status; + // if(req.body.status) status ="published"; + if(req.body.phone) phone =req.body.phone; + if(req.body.annual) annual =req.body.annual; + if(req.body.early_start_programme) early_start_programme =req.body.early_start_programme; + if(req.body.toddlers) toddlers =req.body.toddlers; + if(req.body.interakto) interakto =req.body.interakto; + if(req.body.email) email =req.body.email; + if(req.body.country) country =req.body.country; + if(req.body.state) state =req.body.state; + if(req.body.city) city =req.body.city; + if(req.body.address) address =req.body.address; + if(req.body.agg_expiry) agg_expiry =req.body.agg_expiry; + if(req.body.usage_expiry) usage_expiry =req.body.usage_expiry; + + const db = new sqlite3.Database('data/appUser.db'); + console.log(req.body.userId) + db.run(`UPDATE school SET sname = ?, status = ?, phone = ?, annual = ?, early_start_programme = ?, toddlers = ?, interakto = ?, email = ?, country = ?, state = ?, city = ?, address = ?, agg_expiry = ?, usage_expiry = ? WHERE id = ? `, [ sname, status, phone, annual, early_start_programme, toddlers, interakto, email, country, state, city, address, agg_expiry, usage_expiry, req.body.schoolId], + function(err) { + if (err) { + res.status(400).json({ msg: 'Err400D' }); + return console.log(err.message); + } + res.status(200).json({ msg: 'ok' }); + } + ); + db.close(); + + + + } + \ No newline at end of file diff --git a/src/pages/api/editUser.js b/src/pages/api/editUser.js index f961a47..176e89a 100644 --- a/src/pages/api/editUser.js +++ b/src/pages/api/editUser.js @@ -3,7 +3,7 @@ export default function handler(req, res) { console.log(req.body) // Open a new database connection - let uname, status, type, start_month, start_date, end_date, klas, lang, phone, pass, anual, early_start_programme, toddlers, interakto, email, country, state, city, address, school=""; + let uname, status, type, start_month, start_date, end_date, klas, lang, phone, pass, annual, early_start_programme, toddlers, interakto, email, country, state, city, address, school=""; if(req.body.uname) uname =req.body.uname; if(req.body.status) status =req.body.status; @@ -15,7 +15,7 @@ export default function handler(req, res) { if(req.body.lang) lang =req.body.lang; if(req.body.phone) phone =req.body.phone; if(req.body.pass) pass =req.body.pass; - if(req.body.anual) anual =req.body.anual; + if(req.body.annual) annual =req.body.annual; if(req.body.early_start_programme) early_start_programme =req.body.early_start_programme; if(req.body.toddlers) toddlers =req.body.toddlers; if(req.body.interakto) interakto =req.body.interakto; @@ -27,7 +27,7 @@ export default function handler(req, res) { if(req.body.school) school =req.body.school; const db = new sqlite3.Database('data/appUser.db'); console.log(req.body.userId) - db.run(`UPDATE user SET uname = ?, status = ?, type = ?, start_month = ?, start_date = ?, end_date = ?, klas = ?, lang = ?, phone = ?, anual = ?, early_start_programme = ?, toddlers = ?, interakto = ?, email = ?, country = ?, state = ?, city = ?, address = ?, school = ? WHERE id = ? `, [ uname, status, type, start_month, start_date, end_date, klas, lang, phone, anual, early_start_programme, toddlers, interakto, email, country, state, city, address, school, req.body.userId], + db.run(`UPDATE user SET uname = ?, status = ?, type = ?, start_month = ?, start_date = ?, end_date = ?, klas = ?, lang = ?, phone = ?, annual = ?, early_start_programme = ?, toddlers = ?, interakto = ?, email = ?, country = ?, state = ?, city = ?, address = ?, school = ? WHERE id = ? `, [ uname, status, type, start_month, start_date, end_date, klas, lang, phone, annual, early_start_programme, toddlers, interakto, email, country, state, city, address, school, req.body.userId], function(err) { if (err) { res.status(400).json({ msg: 'Err400D' }); diff --git a/src/pages/api/getSchoolDetails.js b/src/pages/api/getSchoolDetails.js new file mode 100644 index 0000000..dee0256 --- /dev/null +++ b/src/pages/api/getSchoolDetails.js @@ -0,0 +1,41 @@ +import csv from 'csv-parser'; +import fs from 'fs'; +import sqlite3 from 'sqlite3'; + +export default function handler(req,res) { + + + const DB_NAME = 'data/appUser.db'; + const TABLE_NAME = 'school'; + + const db = new sqlite3.Database(DB_NAME); + + const query = `SELECT * FROM ${TABLE_NAME}`; + + function getAllRows(tableName) { + return new Promise((resolve, reject) => { + const sql = `SELECT * FROM ${tableName} WHERE id = ?`; + db.all(sql, [req.query.school], (err, rows) => { + if (err) { + reject(err); + return; + } + const data = rows; + resolve(data); + }); + }); + }; + async function doSomething() { + try { + const returnData = await getAllRows('school'); + res.setHeader('Content-Type', 'application/json') + res.status(200).json(returnData) + // console.log(data); + } catch (err) { + console.error(err); + } + } + + doSomething(); +} + diff --git a/src/pages/api/listSchlools.js b/src/pages/api/listSchlools.js new file mode 100644 index 0000000..18588a2 --- /dev/null +++ b/src/pages/api/listSchlools.js @@ -0,0 +1,73 @@ +import csv from 'csv-parser'; +import fs from 'fs'; +import sqlite3 from 'sqlite3'; + +export default function handler(req,res) { + +console.log(req.body.school) +// const { +// query: { name, keyword }, +// method, +// } = req; +// console.log(name, keyword, method); + + const DB_NAME = 'data/appUser.db'; + const TABLE_NAME = 'school'; + + // Open a connection to the SQLite database + const db = new sqlite3.Database(DB_NAME); + + const query = `SELECT * FROM ${TABLE_NAME}`; + + function getAllRows(tableName) { + return new Promise((resolve, reject) => { + const sql = `SELECT * FROM ${tableName}`; + db.all(sql, [], (err, rows) => { + if (err) { + reject(err); + return; + } + const data = rows; + resolve(data); + }); + }); + }; + async function doSomething() { + try { + const returnData = await getAllRows(TABLE_NAME); + res.setHeader('Content-Type', 'application/json') + res.status(200).json(returnData) + // console.log(data); + } catch (err) { + console.error(err); + } + } + + doSomething(); +// const returnData = getAllRows('user'); +// console.log(getAllRows('user')); +// const returnData= db.run('SELECT * FROM user'); + +// fs.createReadStream('data/user.csv') +// .pipe(csv()) +// .on('data', (data) => { +// const values = Object.values(data); +// const placeholders = values.map(() => '?').join(','); +// const sql = `INSERT INTO ${TABLE_NAME} (${Object.keys(data).join(',')}) VALUES (${placeholders})`; +// db.run(sql, values, (err) => { +// if (err) { +// console.error(err); +// } +// }); +// }) +// .on('end', () => { +// console.log(`Data inserted successfully into table ${TABLE_NAME}`); + +// // Close the database connection +// db.close(); +// }); + + + +} + diff --git a/src/pages/api/login.js b/src/pages/api/login.js index a1c7215..9c5f6bc 100644 --- a/src/pages/api/login.js +++ b/src/pages/api/login.js @@ -1,7 +1,7 @@ export default function handler(req, res) { - // const sqlite3 = require('sqlite3').verbose(); - - console.log(req.body) + // const sqlite3 = require('sqlite3').verbose(); + + // console.log(req.body) const sqlite3 = require('sqlite3'); const argon2 = require('argon2'); const jwt = require('jsonwebtoken'); @@ -10,43 +10,63 @@ const jwt = require('jsonwebtoken'); const db = new sqlite3.Database('data/appUser.db'); // Fetch the user record -const username = 'example_user'; -const sql = 'SELECT pass FROM user_table WHERE username = ?'; +const username = req.body.email; +// console.log(username) +const sql = 'SELECT * FROM user WHERE email = ?'; db.get(sql, [username], async (err, userRecord) => { - if (err) { - console.error(err); - return; - } +if (err) { + console.error(err); + return; +} - if (userRecord) { - const storedHash = userRecord.password_hash; - const providedPassword = 'example_password'; +if (userRecord) { + const storedHash = userRecord.pass; + console.log(storedHash) + const providedPassword = req.body.password; - try { - // Verify the provided password with the stored hash - const isPasswordValid = await argon2.verify(storedHash, providedPassword); + try { + // Verify the provided password with the stored hash + const isPasswordValid = await argon2.verify(storedHash, providedPassword); - if (isPasswordValid) { - // Passwords match, generate JWT token - const secretKey = process.env.JWT_SEC; - const tokenPayload = { username: username }; - const jwtToken = jwt.sign(tokenPayload, secretKey, { algorithm: 'HS256' }); + if (isPasswordValid) { + // Passwords match, generate JWT token + const secretKey = process.env.TOKEN_HEADER_KEY; + const tokenPayload = { + email:userRecord.email, + role: userRecord.type, + iat: Math.floor(Date.now() / 1000), + exp: Math.floor(Date.now() / 1000) + 3600*24*7, + + }; + const jwtToken = jwt.sign(tokenPayload, secretKey, { algorithm: 'HS256' }); + const jwtTokenData ={ + data:{ + access_token:jwtToken, + role: userRecord.type, + email: userRecord.email, + expires: 3600*24*7, + + } + }; - // Return the JWT token - console.log(jwtToken); - } else { - console.log('Invalid password'); - } - } catch (err) { - console.error(err); + // Return the JWT token + res.status(200).json(jwtTokenData); + console.log(jwtToken); + } else { + console.log('Invalid password'); + res.status(400).json({err:'400P'}); } - } else { - console.log('User not found'); + } catch (err) { + console.error(err); } +} else { + res.status(400).json({err:'400U'}); + console.log('User not found'); +} - // Close the database connection - db.close(); +// Close the database connection +db.close(); }); -res.status(200).json({ name: 'John Doe' }); +// res.status(200).json({ name: 'John Doe' }); } \ No newline at end of file diff --git a/src/pages/edit-school copy.jsx b/src/pages/edit-school copy.jsx index fb04449..2b2c4d2 100644 --- a/src/pages/edit-school copy.jsx +++ b/src/pages/edit-school copy.jsx @@ -33,7 +33,7 @@ export default function addSchoolForm() { country: event.target.country.value, state: event.target.state.value, cities: event.target.cities.value, - anual: event.target.anual.value, + annual: event.target.annual.value, toddlers: event.target.toddlers.value, early_start_programme: event.target.early_start_programme.value, interakto: event.target.interakto.value, @@ -100,8 +100,8 @@ export default function addSchoolForm() { setSchool(e.target.value)} name="school_contact_number" />
- - setSchool(e.target.value)} /> + + setSchool(e.target.value)} />
diff --git a/src/pages/edit-school.jsx b/src/pages/edit-school.jsx index d795573..48cbc50 100644 --- a/src/pages/edit-school.jsx +++ b/src/pages/edit-school.jsx @@ -6,62 +6,43 @@ import { useRouter } from 'next/router' export default function editSchool() { const router = useRouter(); - // const updateSchoolData = async (event) => { - // const body = new FormData(); - // body.append("file", agreement.files[0]); - // body.append("fName", `${router.query.school}.pdf`); - // const response = await fetch("/api/updateUserDetails", { - // method: "POST", - // body - // }); - // }; - const [school, setSchool] = useState({}); useEffect(()=>{ - // console.log(router.query); - // if(router.query.school<1) { - // const { sid } = router.query; - // setSchool(sid) - if(router.query.school && router.query.school>1 ){ - fetch(`https://management.beanstalkedu.com/items/school?school=${router.query.school}`) + if(router.query.school && router.query.school>0 ){ + console.log(router.query); + fetch(`/api/getSchoolDetails?school=${router.query.school}`) .then(res => res.json()) .then(data => { - // console.log(data); - setSchool(data.data[0]) - // console.log(data.data) - + console.log(data); + setSchool(data[0]) + // console.log(school) }) } - // console.log(data.data) - }, [router.query.school]); const updateSchoolData = async (event) => { event.preventDefault() const data = { - // schoolId: router.query.school, - name: event.target.name.value, - // status: event.target.status.value, - // uname: event.target.uname.value, - // country: event.target.country.value, - // state: event.target.state.value, - // city: event.target.city.value, - // address: event.target.address.value, - // start_date: event.target.start_date.value, - // end_date: event.target.end_date.value, - // school: event.target.school.value, - // anual: event.target.anual.value, - // toddlers: event.target.toddlers.value, - // early_start_programme: event.target.early_start_programme.value, - // email: event.target.email.value, - // phone: event.target.phone.value, - // klas: event.target.klas.value + schoolId: router.query.school, + sname: event.target.sname.value, + status: event.target.status.value, + country: event.target.country.value, + state: event.target.state.value, + city: event.target.city.value, + annual: event.target.annual.value, + toddlers: event.target.toddlers.value, + early_start_programme: event.target.early_start_programme.value, + interakto: event.target.interakto.value, + agg_expiry: event.target.agg_expiry.value, + usage_expiry: event.target.usage_expiry.value, + phone: event.target.phone.value, + email: event.target.email.value, } const JSONdata = JSON.stringify(data) - // console.log(data) - const endpoint = 'https://management.beanstalkedu.com/items/school' + console.log(data) + const endpoint = '/api/editSchool' const options = { method: 'POST', headers: { @@ -70,10 +51,11 @@ export default function editSchool() { body: JSONdata, } const response = await fetch(endpoint, options) + const result = await response.json() // alert(`Is this your full name: ${result.data}`) - alert(`School data updated`) - + alert(`User data updated`) + } return ( @@ -83,65 +65,73 @@ export default function editSchool() {
-
- -

Update School Information

+
+ +   + List Users Under This School + +
+ CSV Upload   + +
+ {/* */} +
+

Update School Information

- - setSchool(e.target.value)} type="text" name="school_name" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> + + setSchool(e.target.value)} type="text" name="sname" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="status" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- - setSchool(e.target.value)} type="text" name="mobile" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> + + setSchool(e.target.value)} type="text" name="phone" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- - setSchool(e.target.value)} type="text" name="email" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> + + setSchool(e.target.value)} type="text" name="email" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- setSchool(e.target.value)} type="text" name="country" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> + setSchool(e.target.value)} type="text" name="country" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- - setSchool(e.target.value)} type="text" name="State" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> + + setSchool(e.target.value)} type="text" name="state" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- - setSchool(e.target.value)} type="text" name="cities" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> + + setSchool(e.target.value)} type="text" name="city" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- setSchool(e.target.value)} type="email" name="annual" placeholder='' className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]'/> + setSchool(e.target.value)} type="text" name="annual" placeholder='' className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]'/>
- setSchool(e.target.value)} type="text" name="toddlers" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> + setSchool(e.target.value)} type="text" name="toddlers" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- - setSchool(e.target.value)} type="text" name="early_start_program" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> + + setSchool(e.target.value)} type="text" name="early_start_programme" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- setSchool(e.target.value)} type="text" name="interakto" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> + setSchool(e.target.value)} type="text" name="interakto" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- - setSchool(e.target.value)} type="text" name="agreement_expiry_date" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> + + setSchool(e.target.value)} type="text" name="usage_expiry" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
+
- - setSchool(e.target.value)} type="file" name="agreement_documents" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
- -
- + + setSchool(e.target.value)} type="text" name="agg_expiry" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- -
+ +
+ + setSchool(e.target.value)} type="file" name="agreement_documents" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+ +
+ +
+ +
) } + + diff --git a/src/pages/edit-school2.jsx b/src/pages/edit-school2.jsx index ef230da..6a53869 100644 --- a/src/pages/edit-school2.jsx +++ b/src/pages/edit-school2.jsx @@ -43,7 +43,7 @@ export default function addSchoolForm() { country: event.target.country.value, state: event.target.state.value, cities: event.target.cities.value, - anual: event.target.anual.value, + annual: event.target.annual.value, toddlers: event.target.toddlers.value, early_start_programme: event.target.early_start_programme.value, interakto: event.target.interakto.value, @@ -110,8 +110,8 @@ export default function addSchoolForm() { setSchool(e.target.value)} name="school_contact_number" className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- - setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> + + setSchool(e.target.value)} className='border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
diff --git a/src/pages/edit-user.jsx b/src/pages/edit-user.jsx index f763a9c..8beb7fa 100644 --- a/src/pages/edit-user.jsx +++ b/src/pages/edit-user.jsx @@ -23,7 +23,7 @@ export default function editUser() { // if(router.query.school<1) { // const { sid } = router.query; // setSchool(sid) - if(router.query.user && router.query.user>1 ){ + if(router.query.user && router.query.user>0 ){ fetch(`/api/getUserDetails?user=${router.query.user}`) .then(res => res.json()) .then(data => { @@ -49,7 +49,7 @@ export default function editUser() { start_date: event.target.start_date.value, end_date: event.target.end_date.value, school: event.target.school.value, - anual: event.target.anual.value, + annual: event.target.annual.value, toddlers: event.target.toddlers.value, early_start_programme: event.target.early_start_programme.value, interakto: event.target.interakto.value, @@ -145,8 +145,8 @@ export default function editUser() { setUser(e.target.value)} type="text" name="klas" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- - setUser(e.target.value)} type="text" name="anual" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> + + setUser(e.target.value)} type="text" name="annual" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
diff --git a/src/pages/edit-user2.jsx b/src/pages/edit-user2.jsx index 46d6eba..18a9be3 100644 --- a/src/pages/edit-user2.jsx +++ b/src/pages/edit-user2.jsx @@ -121,7 +121,7 @@ export default function addUserForm() { start_month: event.target.start_month.value, start_date: event.target.start_date.value, end_date: event.target.end_date.value, - anual: event.target.anual.value, + annual: event.target.annual.value, early_start_programme: event.target.early_start_programme.value, toddlers: event.target.toddlers.value, interakto: event.target.interakto.value, @@ -258,8 +258,8 @@ export default function addUserForm() { {individualValue &&
- - diff --git a/src/pages/school-list/[slug].jsx b/src/pages/school-list/[slug].jsx index 163272a..54a7da4 100644 --- a/src/pages/school-list/[slug].jsx +++ b/src/pages/school-list/[slug].jsx @@ -58,7 +58,7 @@ export default function addSchoolForm() { country: event.target.country.value, state: event.target.state.value, cities: event.target.cities.value, - anual: event.target.anual.value, + annual: event.target.annual.value, toddlers: event.target.toddlers.value, early_start_programme: event.target.early_start_programme.value, interakto: event.target.interakto.value, @@ -150,8 +150,8 @@ export default function addSchoolForm() {
- - diff --git a/src/pages/school-list/index.jsx b/src/pages/school-list/index.jsx index 64cd67c..6fe6eda 100644 --- a/src/pages/school-list/index.jsx +++ b/src/pages/school-list/index.jsx @@ -5,11 +5,11 @@ import { Inter } from 'next/font/google' const inter = Inter({ subsets: ['latin'] }) import NavBar from '../../components/NavBar' export default function Modal() { - const [school, setUser] = useState([]); + const [school, setSchool] = useState([]); const fetchData = async () => { - const response = await fetch("https://management.beanstalkedu.com/items/school?filter[status][_eq]=published"); + const response = await fetch("/api/listSchlools"); const data = await response.json(); - return setUser(data.data); + return setSchool(data); } console.log(school) @@ -33,14 +33,7 @@ const fetchData = async () => {   Add School */} - -   - List Users Under This School - -
- CSV Upload - -
+
@@ -48,14 +41,10 @@ const fetchData = async () => {
IDSchool NameCountryAnnualS.E.DE.S.P ToddlersInterakto NameCity StatusExpiry Edit
{data.id}{data.name}{data.country}{data.anual}{data.agreement_expiry_date}{data.early_start_programme}{data.toddlers}{data.interakto}{data.sname}{data.city} {data.status} - {data.usage_expiry} + + +
{data.id} {data.sname} {data.city}
@@ -52,7 +51,7 @@ const fetchData = async () => { {user.map (data=> - + diff --git a/src/pages/user-list.jsx b/src/pages/user-list.jsx index a1d8f36..a30a2c2 100644 --- a/src/pages/user-list.jsx +++ b/src/pages/user-list.jsx @@ -1,8 +1,5 @@ import React, { useEffect, useState } from "react"; - -import Image from 'next/image' -import { Inter } from 'next/font/google' -const inter = Inter({ subsets: ['latin'] }) +import Link from 'next/link' import NavBar from '../components/NavBar' export default function Modal() { const [user, setUser] = useState([]); @@ -30,10 +27,10 @@ const fetchData = async () => { - + Add User - +
{data.uname} {data.phone} {data.email}
@@ -52,7 +49,7 @@ const fetchData = async () => { {user.map (data=> - + diff --git a/yarn.lock b/yarn.lock index d80d0da..18e599c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2245,6 +2245,11 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" +jwt-decode@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" + integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== + language-subtag-registry@~0.3.2: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" -- 2.34.1 From 96b933edc13771c1684e6269b4edc190ca3ca2ad Mon Sep 17 00:00:00 2001 From: Kar Date: Sun, 21 May 2023 02:56:35 +0530 Subject: [PATCH 10/16] s3 --- data/.~lock.user.csv# | 1 - data/appUser.db | Bin 24576 -> 24576 bytes src/components/NavBar.tsx | 3 +- src/pages/add-user-form.jsx | 14 ++--- src/pages/api/{addUsers.js => addUser.js} | 2 +- src/pages/api/addUsersBulk.js | 64 ++++++++++++++-------- src/pages/edit-school.jsx | 33 ++++++++--- src/pages/profile.jsx | 2 +- src/pages/upload-user.jsx | 38 +++++++++++++ 9 files changed, 117 insertions(+), 40 deletions(-) delete mode 100644 data/.~lock.user.csv# rename src/pages/api/{addUsers.js => addUser.js} (96%) create mode 100644 src/pages/upload-user.jsx diff --git a/data/.~lock.user.csv# b/data/.~lock.user.csv# deleted file mode 100644 index 00777a3..0000000 --- a/data/.~lock.user.csv# +++ /dev/null @@ -1 +0,0 @@ -,ov,d4,16.05.2023 12:44,file:///home/ov/.config/libreoffice/4; \ No newline at end of file diff --git a/data/appUser.db b/data/appUser.db index 545b3ace067353b4d8e5f9584fd2c74b0fe5a480..ea0525f7ebe1111276b2fdc84bd58a165e7bb33b 100644 GIT binary patch delta 912 zcmZoTz}Rqrae_2s??f4A#@>wyJ@Smko8QU{30TJPa-Cz~WM9L~#lfG#cbdnZ2rDWw@V7^6GcfS;^Q#I9 z$}@1}CFZ6o7#5T!I` zP9_mLpc-8B(m{?QUV}$wUJ8==AO`>)RFB~zsQDqOIjQNT#2X(_nwOQBgk%9uFGDTx zP0UHGOa%Hr7hwt1Q8?X{n46h{P)*1N@5H>k#FRw58WJGU0CkglX;x8U2|-W9YFipA zSbzY8G%zqIHgrhMP0Y;EOU}>r^z(7?PAp3V8dZ`xnZxQB3j+fq&&Ea$MxjRWXh~pd z4sxYs6?Y+0foxiZMcx zK~Z I*PdAc022WVfB*mh delta 541 zcmZoTz}Rqrae_2s@kAMC#^Q|$J@SkOo8QU{3COzf@-i}Tad9y7r}LfTGv%Gl%f^$) zeV5yt>l_!yWgjE)ZE2`r2?7w(t2EERz@Wg;AvHHKGe<8uKiAVQ z+{r1iC^0FqDzT`M-(HeITb@B0YL7D59&15CX$HmM&@e|oZ^s~oV8N1Dyo58tiwNdnVtr4HcB-mSm7b1eY?y zI4FT$6cy&5tYs@b`M;ggWCI&6CIh3%b~fgM;+*J)ys_>S s6yrb_b+PLdU`H3cYu6zt%!X#u @@ -15,6 +15,7 @@ export default function NavBar() { Add School | School List| Add User | + Upload User | User List | diff --git a/src/pages/add-user-form.jsx b/src/pages/add-user-form.jsx index d1ef08b..db8043a 100644 --- a/src/pages/add-user-form.jsx +++ b/src/pages/add-user-form.jsx @@ -10,7 +10,7 @@ import NavBar from '../components/NavBar'; const typeParent = "parent" -export default function AddUser() { +export default function addUserForm() { const [allLanguage, setLanguage] = useState([ {lang: "Assamese", value: false}, {lang: "Bengali", value: false}, @@ -75,7 +75,7 @@ export default function AddUser() { } const [school, setSchool] = useState(null); useEffect(() => { - fetch(`https://management.beanstalkedu.com/items/school`) + fetch(`/api/listSchlools`) .then(res => res.json()) .then(data => { setSchool(data) @@ -102,13 +102,13 @@ export default function AddUser() { start_month: event.target.start_month.value, start_date: event.target.start_date.value, end_date: event.target.end_date.value, - annual: event.target.annual.value, + anual: event.target.anual.value, early_start_programme: event.target.early_start_programme.value, toddlers: event.target.toddlers.value, interakto: event.target.interakto.value, } const JSONdata = JSON.stringify(data) - const endpoint = '/api/addUsers' + const endpoint = '/api/addUser' const options = { method: 'POST', headers: { @@ -223,7 +223,7 @@ export default function AddUser() { @@ -242,8 +242,8 @@ export default function AddUser() { {individualValue &&
- - diff --git a/src/pages/api/addUsers.js b/src/pages/api/addUser.js similarity index 96% rename from src/pages/api/addUsers.js rename to src/pages/api/addUser.js index 81807b0..3aa0d7a 100644 --- a/src/pages/api/addUsers.js +++ b/src/pages/api/addUser.js @@ -14,7 +14,7 @@ export default function handler(req, res) { if(req.body.end_date) end_date =req.body.end_date; if(req.body.plan) plan =req.body.plan; if(req.body.klas) klas =req.body.klas; - if(req.body.lang) lang =req.body.lang; + if(req.body.lang) lang =req.body.lang; lang=JSON.stringify(lang); if(req.body.phone) phone =req.body.phone; if(req.body.pass) pass =req.body.pass; if(req.body.annual) annual =req.body.annual; diff --git a/src/pages/api/addUsersBulk.js b/src/pages/api/addUsersBulk.js index c15f89f..7d2ba17 100644 --- a/src/pages/api/addUsersBulk.js +++ b/src/pages/api/addUsersBulk.js @@ -1,36 +1,56 @@ import csv from 'csv-parser'; -import fs from 'fs'; +import formidable from "formidable"; +import fs from "fs"; import sqlite3 from 'sqlite3'; +export const config = { + api: { + bodyParser: false + } +}; + export default function handler(req,res) { + const form = new formidable.IncomingForm(); + form.parse(req, async function (err, fields, files) { - const DB_NAME = 'data/appUser.db'; - const TABLE_NAME = 'user'; + // console.log('ppp') + console.log(files.file.filepath) + const DB_NAME = 'data/appUser.db'; + const TABLE_NAME = 'user'; + + // Open a connection to the SQLite database + const db = new sqlite3.Database(DB_NAME); + + // fs.createReadStream('data/user.csv') + fs.createReadStream(files.file.filepath) + .pipe(csv()) + .on('data', (data) => { + const values = Object.values(data); + const placeholders = values.map(() => '?').join(','); + const sql = `INSERT INTO ${TABLE_NAME} (${Object.keys(data).join(',')}) VALUES (${placeholders})`; + db.run(sql, values, (err) => { + if (err) { + console.error(err); + } + }); + }) + .on('end', () => { + console.log(`Data inserted successfully into table ${TABLE_NAME}`); - // Open a connection to the SQLite database - const db = new sqlite3.Database(DB_NAME); - - fs.createReadStream('data/user.csv') - .pipe(csv()) - .on('data', (data) => { - const values = Object.values(data); - const placeholders = values.map(() => '?').join(','); - const sql = `INSERT INTO ${TABLE_NAME} (${Object.keys(data).join(',')}) VALUES (${placeholders})`; - db.run(sql, values, (err) => { - if (err) { - console.error(err); - } + fs.unlinkSync(files.file.filepath); + db.close(); }); - }) - .on('end', () => { - console.log(`Data inserted successfully into table ${TABLE_NAME}`); - // Close the database connection - db.close(); + + // console.log(fields) + // await saveFile(files.file,fields.fName? fields.fName:files.file.originalFilename ); + return res.status(201).send(""); }); - res.status(200).json({ name: 'John Doe' }) + + + res.status(200).json({ msg: 'ok' }) } diff --git a/src/pages/edit-school.jsx b/src/pages/edit-school.jsx index 4728526..da7ea0b 100644 --- a/src/pages/edit-school.jsx +++ b/src/pages/edit-school.jsx @@ -7,16 +7,35 @@ import Link from 'next/link' export default function EditSchool() { const router = useRouter(); - + const uploadToServer = async (event) => { + const body = new FormData(); + body.append("file", agreement.files[0]); + body.append("fName", `${router.query.school}.pdf`); + const response = await fetch("/api/fileUpload", { + method: "POST", + body + }); + }; + const uploadCsv = async (event) => { + // alert('p') + const body = new FormData(); + body.append("file", csv.files[0]); + // console.log('body') + // body.append("fName", `${router.query.school}.pdf`); + const response = await fetch("/api/addUsersBulk", { + method: "POST", + body + }); + }; const [school, setSchool] = useState({}); useEffect(()=>{ if(router.query.school && router.query.school>0 ){ - console.log(router.query); + // console.log(router.query); fetch(`/api/getSchoolDetails?school=${router.query.school}`) .then(res => res.json()) .then(data => { - console.log(data); + // console.log(data); setSchool(data[0]) // console.log(school) }) @@ -43,7 +62,7 @@ export default function EditSchool() { email: event.target.email.value, } const JSONdata = JSON.stringify(data) - console.log(data) + // console.log(data) const endpoint = '/api/editSchool' const options = { method: 'POST', @@ -73,8 +92,8 @@ export default function EditSchool() { List Users Under This School
- CSV Upload   - + CSV   +
{/* */} @@ -144,7 +163,7 @@ export default function EditSchool() {
- setSchool(e.target.value)} type="file" name="agreement_documents" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
diff --git a/src/pages/profile.jsx b/src/pages/profile.jsx index 203746a..48d3540 100644 --- a/src/pages/profile.jsx +++ b/src/pages/profile.jsx @@ -2,7 +2,7 @@ import { signIn, signOut, useSession } from 'next-auth/react' export default function Home() { const { data: session } = useSession() -console.log(session) +// console.log(session) if (session) { return ( <> diff --git a/src/pages/upload-user.jsx b/src/pages/upload-user.jsx new file mode 100644 index 0000000..46ec8aa --- /dev/null +++ b/src/pages/upload-user.jsx @@ -0,0 +1,38 @@ +import {useId, useState, useEffect, useMemo} from 'react'; +import NavBar from '../components/NavBar'; +import { useRouter } from 'next/router' + + +export default function EditSchool() { + const router = useRouter(); + + const uploadCsv = async (event) => { + // alert('p') + const body = new FormData(); + body.append("file", csv.files[0]); + // console.log('body') + // body.append("fName", `${router.query.school}.pdf`); + const response = await fetch("/api/addUsersBulk", { + method: "POST", + body + }); + }; + + + + return ( +
+
+ +
+
+ CSV   + +
+
+
+
+ ) +} + + -- 2.34.1 From c5d0167d3cb3270c9e8043fdf9fd95d015997c3b Mon Sep 17 00:00:00 2001 From: Kar Date: Sun, 21 May 2023 17:55:37 +0530 Subject: [PATCH 11/16] s3 --- src/pages/profile.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/profile.jsx b/src/pages/profile.jsx index 48d3540..cff9c22 100644 --- a/src/pages/profile.jsx +++ b/src/pages/profile.jsx @@ -19,4 +19,4 @@ export default function Home() { ) -} \ No newline at end of file +} -- 2.34.1 From e2b3a28f36a051412a2a95f221b1c3cd3d91442c Mon Sep 17 00:00:00 2001 From: Kar Date: Sun, 21 May 2023 17:56:12 +0530 Subject: [PATCH 12/16] s3 --- data/appUser.db | Bin 24576 -> 24576 bytes src/pages/login.jsx | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/data/appUser.db b/data/appUser.db index ea0525f7ebe1111276b2fdc84bd58a165e7bb33b..dd835e3c7e2a00b273b798b5a474611d8f28917a 100644 GIT binary patch delta 361 zcmZoTz}Rqrae_2s-$WT_);X!*D!E0ePQO};CjH%%(jV7j#rs=Baa5t z7cP#;3I-CB4GdT|TNvzN5^1%Hk!FyTXOLtNR#ar*Z;#e)^xeGQT$gFGt5x#k_m)yZ zbx~441-z2HKn1+QyvmKfliO@ufYJ$*PuX}2m4{Xe%9~AAKH~+O~RsaA)=U9LM delta 325 zcmZoTz}Rqrae_2s??f4A)?Nm^w3i!G=ITpxonzo+U&GAB!Joo+n$L)L9j^#a3HL4b zHC!B%6$~UM8yK)`wlLVkv~j`?7U7o27%2uxc?L-aVMRp-{`P2XhRqztx=b<#1_s53 z4yn0`nK^pN`MI8cJ}%ygWr;)SV znRl|ajmzZwHm-uQQRp&9OkE~tn0X6|N21G^*}6==W$P-)7$M1^D$gs8FwM};d-5GS v4MDMRbUjDSTqb9lI}0_6g`rD{*}F{MWe<`HMVI<) +

+ You are already Signed in, click on continue +
+ Continue... +

+ or : + + ) + } return ( <> -- 2.34.1 From 23ef8d98035b176bd64f379883934bd541aa27c6 Mon Sep 17 00:00:00 2001 From: Kar Date: Sun, 21 May 2023 23:40:30 +0530 Subject: [PATCH 13/16] pagination --- data/appUser.db | Bin 24576 -> 24576 bytes src/components/NavBar.tsx | 14 ++--- src/pages/api/listUsers copy.js | 91 ++++++++++++++++++++++++++++++++ src/pages/api/listUsers.js | 26 +++++++-- src/pages/user-list.jsx | 40 ++++++++++---- 5 files changed, 149 insertions(+), 22 deletions(-) create mode 100644 src/pages/api/listUsers copy.js diff --git a/data/appUser.db b/data/appUser.db index dd835e3c7e2a00b273b798b5a474611d8f28917a..ed60910d3814eadbc0a4f8422633df9c69e2f0d2 100644 GIT binary patch delta 1878 zcmai!OH30%7{_P(fbH&1>$2FU#X<>mMGP7=En)kD&|)Hxc<@PrqKM@!D6e?xo=iN^ zOrnXJcf znJR(P0DuDg-~FYl>X_--&KIX^CarjZaqMK53miK_E1%>BZ2j!8HDmQyQsxbFvuVau z%uInT(2-Vai&R&)8@S7$8%pKnP=XZ@1tW2^7DZD7da2$ONCq(ZJy0R3Aqn==k=(TP;jG;d%TolBz@gaB z!*-#MAK}JrW9$R0Vx{Gg`Mddo>5ZwBdB!jxiB*(gGkBVn8~_#4dP+wnsX`Q8F%~sM z6s)Y`$MSPIT%bjk@NXAK;#nsO#Qa$Cdf8MA_`MD=L2EBL91g!ImOvJTqK()EuWXvp zKR_EoKER^SK?Pe=FPocnoHogT`(g^V3*#FEhqQ5q(oA!i}NX< zU|$<#tB2r_w%9OT(~=z~xIp_(_HNV?UxIfg!PZaOhER3b!>}k3UOmnYkmb>K&%R)& zZTmL62KgjmhpwTMVK<)95Lp$3RSJ@dRDcV?0imv=}pE`5p}KDBVK>exI(8fZwAlxq!>I zheUfgLP3Vhqg_qTM{r@7#*L=z<%D~y<9GApT2A?UK!0=W>pI?(AJ?>W Wbn03r|F0zuoA$y=cj)N{wEPP&CsaBB delta 209 zcmZoTz}Rqrae_2&9|Hpe8x%85)G%l4+n6w4-!g`meGLOA(-&qg4z36M%xs(Z
-
- Add School | - School List| - Add User | - Upload User | - User List | - +
+ Add School + School List + Add User + Upload User + User List + signOut()}>Sign out
diff --git a/src/pages/api/listUsers copy.js b/src/pages/api/listUsers copy.js new file mode 100644 index 0000000..2c8f243 --- /dev/null +++ b/src/pages/api/listUsers copy.js @@ -0,0 +1,91 @@ +import csv from 'csv-parser'; +import fs from 'fs'; +import sqlite3 from 'sqlite3'; + +export default function handler(req,res) { + +console.log(req.body.school) +// const { +// query: { name, keyword }, +// method, +// } = req; +// console.log(name, keyword, method); + + const DB_NAME = 'data/appUser.db'; + const TABLE_NAME = 'user'; + + // Open a connection to the SQLite database + const db = new sqlite3.Database(DB_NAME); + + const query = `SELECT * FROM ${TABLE_NAME}`; + + function getAllRows(tableName) { + return new Promise((resolve, reject) => { + + db.get(`SELECT COUNT(*) AS count FROM ${tableName}`, (err, row) => { + if (err) { + console.error(err.message); + return; + } + + // Access the row count + const rowCount = row.count; + // console.log(`Row count: ${rowCount}`); + const pageNo=0; + const perPage=5; + let noOfPage= Math.floor(rowCount/perPage); if((rowCount % perPage) !=0) noOfPage++; + console.log(`noOfPage: ${noOfPage}`); + const offset=(rowCount-5*perPage*pageNo)-1; + const sql = `SELECT * FROM ${tableName} ORDER BY id DESC LIMIT 5 OFFSET ${rowCount-1}`; + db.all(sql, [], (err, rows) => { + if (err) { + reject(err); + return; + } + const data = rows; + resolve(data); + }); + }); + + + }); + }; + async function doSomething() { + try { + const returnData = await getAllRows('user'); + res.setHeader('Content-Type', 'application/json') + res.status(200).json(returnData) + // console.log(data); + } catch (err) { + console.error(err); + } + } + + doSomething(); +// const returnData = getAllRows('user'); +// console.log(getAllRows('user')); +// const returnData= db.run('SELECT * FROM user'); + +// fs.createReadStream('data/user.csv') +// .pipe(csv()) +// .on('data', (data) => { +// const values = Object.values(data); +// const placeholders = values.map(() => '?').join(','); +// const sql = `INSERT INTO ${TABLE_NAME} (${Object.keys(data).join(',')}) VALUES (${placeholders})`; +// db.run(sql, values, (err) => { +// if (err) { +// console.error(err); +// } +// }); +// }) +// .on('end', () => { +// console.log(`Data inserted successfully into table ${TABLE_NAME}`); + +// // Close the database connection +// db.close(); +// }); + + + +} + diff --git a/src/pages/api/listUsers.js b/src/pages/api/listUsers.js index d78ecaa..dc02289 100644 --- a/src/pages/api/listUsers.js +++ b/src/pages/api/listUsers.js @@ -19,22 +19,40 @@ console.log(req.body.school) const query = `SELECT * FROM ${TABLE_NAME}`; - function getAllRows(tableName) { + function getAllRows(tableName, pageNumber, pageSize) { + const offset = (pageNumber - 1) * pageSize; + const sql = `SELECT * FROM ${tableName} LIMIT ${pageSize} OFFSET ${offset}`; + return new Promise((resolve, reject) => { - const sql = `SELECT * FROM ${tableName}`; db.all(sql, [], (err, rows) => { if (err) { reject(err); return; } - const data = rows; + db.get(`SELECT COUNT(*) AS count FROM ${tableName}`, (err, row) => { + if (err) { + console.error(err.message); + return; + } + + // Access the row count + const rowCount = row.count; + console.log(`Row count: ${rowCount}`); + const maxPageNumber = Math.ceil(rowCount / pageSize); + const pages = Array.from({ length: maxPageNumber }, (_, index) => index + 1); + let tData={data:rows,maxPageNumber:pages} + const data = tData; resolve(data); + }); + // let tData={data:rows,page:7} + // const data = tData; + // resolve(data); }); }); }; async function doSomething() { try { - const returnData = await getAllRows('user'); + const returnData = await getAllRows('user',4,10); res.setHeader('Content-Type', 'application/json') res.status(200).json(returnData) // console.log(data); diff --git a/src/pages/user-list.jsx b/src/pages/user-list.jsx index a30a2c2..35d48e4 100644 --- a/src/pages/user-list.jsx +++ b/src/pages/user-list.jsx @@ -3,11 +3,13 @@ import Link from 'next/link' import NavBar from '../components/NavBar' export default function Modal() { const [user, setUser] = useState([]); + const [maxPageNumber, setMaxPageNumber] = useState([]); const fetchData = async () => { const response = await fetch("/api/listUsers"); const data = await response.json(); - // console.log(data) - return setUser(data); + console.log(data) + setMaxPageNumber(data.maxPageNumber); + return setUser(data.data); } // console.log(user) @@ -21,6 +23,28 @@ const fetchData = async () => {
+ + +
{data.uname} {data.phone} {data.email}
+ - + - @@ -50,12 +74,12 @@ const fetchData = async () => { {user.map (data=> + - -- 2.34.1 From b3df9415515714b3358934626a3120db81d1c8ce Mon Sep 17 00:00:00 2001 From: suvodip ghosh Date: Mon, 22 May 2023 20:51:47 +0530 Subject: [PATCH 14/16] all-page-under-session --- src/components/NavBar.tsx | 14 +- src/pages/add-school-form.jsx | 14 +- src/pages/add-user-form.jsx | 451 +++++++++++++++--------------- src/pages/api/listUsers.js | 4 +- src/pages/edit-school.jsx | 197 +++++++------ src/pages/edit-user.jsx | 202 ++++++------- src/pages/edit-user4.jsx | 426 ++++++++++++++++++++++++++++ src/pages/index.jsx | 1 - src/pages/login.jsx | 10 +- src/pages/school-list/index.jsx | 115 ++++---- src/pages/school-list/index22.jsx | 84 ++++++ src/pages/user-list.jsx | 132 +++++---- 12 files changed, 1116 insertions(+), 534 deletions(-) create mode 100644 src/pages/edit-user4.jsx create mode 100644 src/pages/school-list/index22.jsx diff --git a/src/components/NavBar.tsx b/src/components/NavBar.tsx index 7e065e9..0b107da 100644 --- a/src/components/NavBar.tsx +++ b/src/components/NavBar.tsx @@ -3,7 +3,7 @@ import Link from 'next/link' export default function NavBar() { - const { data: session } = useSession() + const { data: session } = useSession() // console.log(session) if (session) { return ( @@ -32,6 +32,18 @@ export default function NavBar() { ) + // return ( + //
+ // <> + //
+ //

Logged out Successfully

+ // + //
+ + // + //
+ + // ) } diff --git a/src/pages/add-school-form.jsx b/src/pages/add-school-form.jsx index 993d622..ce762d7 100644 --- a/src/pages/add-school-form.jsx +++ b/src/pages/add-school-form.jsx @@ -1,4 +1,5 @@ import NavBar from '../components/NavBar' +import { signIn, signOut, useSession } from 'next-auth/react' import { useId, useState, useEffect, useMemo } from 'react'; import Select from 'react-select' import countryList from 'react-select-country-list' @@ -11,6 +12,7 @@ export default function AddSchool() { const [phoneValue, setphoneValue] = useState() const [allStates, setAllStates] = useState([]) const [allCities, setAllCities] = useState([]) + const { data: session } = useSession() const handleSelectAllStates = stateCode => { setAllCities([]) @@ -82,8 +84,8 @@ export default function AddSchool() { // alert(`Is this your full name: ${result.data}`) alert(`School Saved`) } - - return ( + if (session) { + return (
@@ -224,4 +226,12 @@ export default function AddSchool() {
) + } + return ( + <> + Not signed in
+ + + ) + } \ No newline at end of file diff --git a/src/pages/add-user-form.jsx b/src/pages/add-user-form.jsx index db8043a..cdf6860 100644 --- a/src/pages/add-user-form.jsx +++ b/src/pages/add-user-form.jsx @@ -1,5 +1,6 @@ // https://management.beanstalkedu.com/items/school // import React from 'react'; +import { signIn, signOut, useSession } from 'next-auth/react' import {useId, useState, useEffect, useMemo} from 'react'; import Select from 'react-select' import countryList from 'react-select-country-list' @@ -29,6 +30,7 @@ export default function addUserForm() { const options = useMemo(() => countryList().getData(), []) const [phoneValue, setphoneValue] = useState() let [individualValue = true, setindividualValue] = useState() + const { data: session } = useSession() const [allStates, setAllStates] = useState([]) const [allCities, setAllCities] = useState([]) @@ -154,233 +156,242 @@ export default function addUserForm() { // setLanguage(newAllLang) setCurrentType(e.target.value) } - return ( -
-
- -
-
-
- -

User Registration Form

-
-
-
- - + if (session) { + return ( +
+
+ +
+
+
+ +

User Registration Form

-
- - -
-
- - -
-
- - -
} - { - allCities && allCities.length > 0 && + +
+ + +
- + + +
+
+ + +
+
+
} -
- - -
-
- - -
-
- - -
- {individualValue && -
-
- - -
-
- - -
-
- - -
-
- - -
- -
- -
- {/*  
-  
-  
-  
-  
-  
-  
-  
-  
-  
*/} - {allLanguage && allLanguage.length && allLanguage.map(n => { - return ( -
-   - -
- ) - })} + { + allCities && allCities.length > 0 && +
+ + + + {school && school.map(data => + + )} + +
+
+ + +
+ {individualValue && +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ +
+ {/*  
+  
+  
+  
+  
+  
+  
+  
+  
+  
*/} + {allLanguage && allLanguage.length && allLanguage.map(n => { + return ( +
+   + +
+ ) + })} +
+
+
+ + +
+
+ + +
+
+ +
-
- - -
-
- - -
-
- - -
+ } +
+ + {/* */}
- } -
- - {/* */} -
- -
-
-
-
+ +
+
+
+
+ ) + } + return ( + <> + Not signed in
+ + ) + } diff --git a/src/pages/api/listUsers.js b/src/pages/api/listUsers.js index dc02289..bb21264 100644 --- a/src/pages/api/listUsers.js +++ b/src/pages/api/listUsers.js @@ -15,7 +15,7 @@ console.log(req.body.school) const TABLE_NAME = 'user'; // Open a connection to the SQLite database - const db = new sqlite3.Database(DB_NAME); + const db = new sqlite3.Database(DB_NAME); const query = `SELECT * FROM ${TABLE_NAME}`; @@ -52,7 +52,7 @@ console.log(req.body.school) }; async function doSomething() { try { - const returnData = await getAllRows('user',4,10); + const returnData = await getAllRows('user',2,10); res.setHeader('Content-Type', 'application/json') res.status(200).json(returnData) // console.log(data); diff --git a/src/pages/edit-school.jsx b/src/pages/edit-school.jsx index da7ea0b..c3e74f4 100644 --- a/src/pages/edit-school.jsx +++ b/src/pages/edit-school.jsx @@ -1,3 +1,4 @@ +import { signIn, signOut, useSession } from 'next-auth/react' import {useId, useState, useEffect, useMemo} from 'react'; import 'react-phone-number-input/style.css' import NavBar from '../components/NavBar'; @@ -6,6 +7,7 @@ import Link from 'next/link' export default function EditSchool() { + const { data: session } = useSession() const router = useRouter(); const uploadToServer = async (event) => { const body = new FormData(); @@ -78,103 +80,112 @@ export default function EditSchool() { alert(`User data updated`) } - - return ( -
-
- -
-
-
- -   - List Users Under This School - -
- CSV   - + if (session) { + return ( +
+
+ +
+
+
+ +   + List Users Under This School + +
+ CSV   + +
+ {/* */} + +
+

Update School Information

+
+
+ + setSchool(e.target.value)} type="text" name="sname" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' />
- {/* */} +
+ + setSchool(e.target.value)} type="text" name="status" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="phone" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="email" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="country" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="state" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="city" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="annual" placeholder='' className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]'/> +
+
+ + setSchool(e.target.value)} type="text" name="toddlers" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="early_start_programme" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="interakto" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setSchool(e.target.value)} type="text" name="usage_expiry" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+ +
+ + setSchool(e.target.value)} type="text" name="agg_expiry" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ +
+ +
+ +
+ + +
+ +
-

Update School Information

-
-
- - setSchool(e.target.value)} type="text" name="sname" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} type="text" name="status" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} type="text" name="phone" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} type="text" name="email" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} type="text" name="country" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} type="text" name="state" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} type="text" name="city" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} type="text" name="annual" placeholder='' className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]'/> -
-
- - setSchool(e.target.value)} type="text" name="toddlers" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} type="text" name="early_start_programme" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} type="text" name="interakto" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setSchool(e.target.value)} type="text" name="usage_expiry" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
- -
- - setSchool(e.target.value)} type="text" name="agg_expiry" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- -
- -
- -
- - -
- -
- -
- - -
-
-
+ + + + + + ) + } + return ( + <> + Not signed in
+ + ) + + } diff --git a/src/pages/edit-user.jsx b/src/pages/edit-user.jsx index 222933a..5732951 100644 --- a/src/pages/edit-user.jsx +++ b/src/pages/edit-user.jsx @@ -1,3 +1,4 @@ +import { signIn, signOut, useSession } from 'next-auth/react' import {useId, useState, useEffect, useMemo} from 'react'; import 'react-phone-number-input/style.css' import NavBar from '../components/NavBar'; @@ -7,6 +8,7 @@ export default function EditUser() { const router = useRouter(); const [user, setUser] = useState({}); + const { data: session } = useSession() useEffect(()=>{ if(router.query.user && router.query.user>0 ){ @@ -67,102 +69,110 @@ export default function EditUser() { alert(`User data updated`) } - - return ( -
-
- -
-
-
- -

Update User Information

+ if (session) { + return ( +
+
+ +
+
+
+ +

Update User Information

+
+
+
+ + setUser(e.target.value)} type="text" name="type" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="uname" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="status" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="start_date" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="end_date" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="email" name="email" placeholder='ex. xyz@email.com' className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]'/> +
+
+ + setUser(e.target.value)} type="text" name="phone" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="country" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="state" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="city" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+ +
+ + setUser(e.target.value)} type="text" name="address" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+ {/*
+ + setUser(e.target.value)} type="text" name="address" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
*/} +
+ + setUser(e.target.value)} type="text" name="school" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="klas" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="annual" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="early_start_programme" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="toddlers" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+
+ + setUser(e.target.value)} type="text" name="interakto" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> +
+ +
+ +
+
-
-
- - setUser(e.target.value)} type="text" name="type" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setUser(e.target.value)} type="text" name="uname" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setUser(e.target.value)} type="text" name="status" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setUser(e.target.value)} type="text" name="start_date" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setUser(e.target.value)} type="text" name="end_date" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setUser(e.target.value)} type="email" name="email" placeholder='ex. xyz@email.com' className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]'/> -
-
- - setUser(e.target.value)} type="text" name="phone" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setUser(e.target.value)} type="text" name="country" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setUser(e.target.value)} type="text" name="state" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setUser(e.target.value)} type="text" name="city" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
- -
- - setUser(e.target.value)} type="text" name="address" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
- {/*
- - setUser(e.target.value)} type="text" name="address" className=' bg-white border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
*/} -
- - setUser(e.target.value)} type="text" name="school" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setUser(e.target.value)} type="text" name="klas" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setUser(e.target.value)} type="text" name="annual" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setUser(e.target.value)} type="text" name="early_start_programme" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setUser(e.target.value)} type="text" name="toddlers" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
-
- - setUser(e.target.value)} type="text" name="interakto" className=' border-2 border-[#FE4501] p-2 rounded-md focus:outline-none focus:border-2 focus:border-[#F2B705]' /> -
- -
- -
- -
-
-
-
+ + + + ) + } + return ( + <> + Not signed in
+ + ) + } diff --git a/src/pages/edit-user4.jsx b/src/pages/edit-user4.jsx new file mode 100644 index 0000000..f282754 --- /dev/null +++ b/src/pages/edit-user4.jsx @@ -0,0 +1,426 @@ +// https://management.beanstalkedu.com/items/school +// import React from 'react'; +import {useId, useState, useEffect, useMemo} from 'react'; +import Select from 'react-select' +import countryList from 'react-select-country-list' +import 'react-phone-number-input/style.css' +import PhoneInput from 'react-phone-number-input' +import NavBar from '../components/NavBar'; +import { useRouter } from 'next/router' +// import { Inter } from 'next/font/google' + +const typeParent = "parent" + +export default function addUserForm() { + + const router = useRouter(); + + const [userDetails, setUserDetails] = useState({}); + + useEffect(()=>{ + if(router.query.user && router.query.user>1 ){ + const body = new FormData(); + body.append("user", router.query.user); + const response = await fetch("/api/getUserDetails", { + method: "POST", + body + }); + + fetch(`/api/getUserDetails?${router.query.user}`) + .then(res => res.json()) + .then(data => { + // console.log(router.query.school); + setUserDetails(data.data) + }) + } + + }, [router.query.school]); + const response = await fetch(endpoint, options) + + const result = await response.json() + + const [allLanguage, setLanguage] = useState([ + {lang: "Assamese", value: false}, + {lang: "Bengali", value: false}, + {lang: "English", value: false}, + {lang: "Hindi", value: false}, + {lang: "Telegu", value: false}, + {lang: "Punjabi", value: false}, + {lang: "Malayalam", value: false}, + {lang: "Tamil", value: false}, + {lang: "Kannada", value: false}, + {lang: "Gujrati", value: false}, + ]) + // console.log(allLanguage) + const [currentType, setCurrentType] = useState(typeParent) + const [countryValue, setCountryValue] = useState('') + const options = useMemo(() => countryList().getData(), []) + const [phoneValue, setphoneValue] = useState() + let [individualValue = true, setindividualValue] = useState() + + const [allStates, setAllStates] = useState([]) + const [allCities, setAllCities] = useState([]) + + const handleSelectAllStates = stateCode => { + setAllCities([]) + fetch(`https://api.siliconpin.com/v3/list/country/city/?country=${countryValue.value}&state=${stateCode.value}`) + .then(res => res.json()) + .then(data => { + // console.log("handleSelectAllStates:", data, options) + let newData = data && data.length > 0 && data.map(n => { + return { + label: n.name, + value: n.name + + } + }) + setAllCities(newData) + }) + } + + const selectCountry = countryValue => { + setAllStates([]) + fetch(`https://api.siliconpin.com/v3/list/country/state/?country=${countryValue.value}`).then(res => res.json()) + .then(data => { + console.log("countryValue:", data, options) + let newData = data && data.length > 0 && data.map(n => { + return { + label: n.name, + value: n.iso2 + + } + }) + setAllStates(newData) + setAllCities([]) + }) + + setCountryValue(countryValue) + } + + const individual = (event) => { + // console.log(event.target.schoolID.value) + + setindividualValue(individualValue = false) + } + const [school, setSchool] = useState(null); + useEffect(() => { + fetch(`https://management.beanstalkedu.com/items/school`) + .then(res => res.json()) + .then(data => { + setSchool(data) + + }) + }, []) + + const [user, setUser] = useState({}); + + useEffect(()=>{ + if(router.query.user && router.query.user>1){ + fetch(`/api/listUsers/${router.query.user}`) + .then(res => res.json()) + .then(data => { + setUser(data) + } + ) + } + }, + [router.query.user]); + console.log(user) + + const handleFormsubmit = async (event) => { + event.preventDefault() + console.log(event.target.lang.checked) + const data = { + "status": "published", + type: event.target.type.value, + uname: event.target.uname.value, + country: event.target.country.value, + state: event.target.state.value ? event.target.state.value:"", + city: event.target.city.value ? event.target.city.value:"", + phone: event.target.phone.value, + email: event.target.email.value, + school: event.target.schoolID.value, + klas: event.target.klas.value, + lang: allLanguage, + start_month: event.target.start_month.value, + start_date: event.target.start_date.value, + end_date: event.target.end_date.value, + anual: event.target.anual.value, + early_start_programme: event.target.early_start_programme.value, + toddlers: event.target.toddlers.value, + interakto: event.target.interakto.value, + } + const JSONdata = JSON.stringify(data) + const endpoint = '/api/addUsers' + const options = { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSONdata, + } + const response = await fetch(endpoint, options) + const result = await response.json() + // console.log(result) + // alert(`Is this your full name: ${result}`) + } + const handleOnLanguageChange = (e, v) => { + let idx = allLanguage.findIndex(o => o.lang === e.target.value); + let newAllLang = [...allLanguage] + newAllLang[idx].value = true + // console.log(newAllLang) + + if ([typeParent, "teacher"].includes(currentType)) { + let counter = 0 + newAllLang.forEach((n, idx) => { + if (n.value) { + counter++ + } + }) + if (counter >= 2) { + newAllLang.forEach((n, idx) => { + newAllLang[idx].disabled = true + }) + } + } + setLanguage(newAllLang) + } + const handleTypeOnChange = (e) => { + let newAllLang = [...allLanguage] + newAllLang.forEach((n, idx) => { + newAllLang[idx].value = false + newAllLang[idx].disabled = false + }) + const { name, checked } = e.target; + setLanguage({ ...allLanguage, [name]: checked }); + + // setLanguage(newAllLang) + setCurrentType(e.target.value) + } + return ( +
+
+ +
+
+
+ +

Update User Information

+
+
+
+ + + + +
+
+ + +
+
+ + +
+
+ + +
} + { + allCities && allCities.length > 0 && +
+ + + + {school && school.data.map(data => + + )} + +
+
+ + +
+ {individualValue && +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ +
+ {/*  
+  
+  
+  
+  
+  
+  
+  
+  
+  
*/} + {allLanguage && allLanguage.length && allLanguage.map(n => { + return ( +
+   + +
+ ) + })} +
+
+
+ + +
+
+ + +
+
+ + +
+
+ } +
+ + {/* */} +
+ +
+
+
+
+ ) +} diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 1a396be..864fc19 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -10,7 +10,6 @@ export default function Home() {

-
) } diff --git a/src/pages/login.jsx b/src/pages/login.jsx index 37ed896..2e95163 100644 --- a/src/pages/login.jsx +++ b/src/pages/login.jsx @@ -54,7 +54,7 @@ export default function SignIn({ csrfToken }) { {(formik) => (
@@ -88,7 +88,7 @@ export default function SignIn({ csrfToken }) {
@@ -107,7 +107,7 @@ export default function SignIn({ csrfToken }) {
diff --git a/src/pages/school-list/index.jsx b/src/pages/school-list/index.jsx index e0caabe..d84e445 100644 --- a/src/pages/school-list/index.jsx +++ b/src/pages/school-list/index.jsx @@ -1,4 +1,5 @@ // import SchoolEditForm from '../../components/SchoolEditForm' +import { signIn, signOut, useSession } from 'next-auth/react' import React, { useEffect, useState } from "react"; import Image from 'next/image' import { Inter } from 'next/font/google' @@ -6,6 +7,7 @@ const inter = Inter({ subsets: ['latin'] }) import NavBar from '../../components/NavBar' export default function Modal() { const [school, setSchool] = useState([]); + const { data: session} = useSession() const fetchData = async () => { const response = await fetch("/api/listSchlools"); const data = await response.json(); @@ -16,59 +18,68 @@ const fetchData = async () => { useEffect(() => { fetchData(); },[]) - +if (session) { + return ( +
+
ID Name Mobile EmailSchool NameSchool ID User TypeStart Date End Date Action
{data.id} {data.uname} {data.phone} {data.email} {data.school} {data.type}{data.start_date} {data.end_date}
@@ -65,12 +89,6 @@ const fetchData = async () => { {/*

Edit

*/}
-
- -
+ + + + + + + + + + + + {school.map(data=> + + + + + + + + + )} + + {/* */} +
ID NameCityStatusExpiry Edit
{data.id}{data.sname}{data.city}{data.status}{data.usage_expiry} + + +
+
+
+
+ + ) +} +{/* */} return ( -
-
- -
-
-
- - - - -
- {/* -   - Add School - */} - - -
-
- - - - - - - - - - - - - {school.map(data=> - - - - - - - - - )} - - {/* */} -
ID NameCityStatusExpiry Edit
{data.id}{data.sname}{data.city}{data.status}{data.usage_expiry} - - -
-
-
-
-
+ + <> + Not signed in
+ + ) } diff --git a/src/pages/school-list/index22.jsx b/src/pages/school-list/index22.jsx new file mode 100644 index 0000000..2cb9c9e --- /dev/null +++ b/src/pages/school-list/index22.jsx @@ -0,0 +1,84 @@ +// import SchoolEditForm from '../../components/SchoolEditForm' +import React, { useEffect, useState } from "react"; +import Image from 'next/image' +import { Inter } from 'next/font/google' +const inter = Inter({ subsets: ['latin'] }) +import NavBar from '../../components/NavBar' +export default function Modal() { + const [school, setUser] = useState([]); +const fetchData = async () => { + const response = await fetch("https://management.beanstalkedu.com/items/school?filter[status][_eq]=published"); + const data = await response.json(); + return setUser(data.data); + } + console.log(school) + + useEffect(() => { + fetchData(); + },[]) + + return ( +
+
+ +
+ +
+ + + + + + + + + + + + + + {school.map(data=> + + + + + + + + + + + + + )} + + {/* */} +
IDSchool NameCityAnnualInteraktoStatus Edit
{data.id}{data.name}{data.city}{data.anual}{data.agreement_expiry_date}{data.early_start_programme}{data.toddlers}{data.interakto}{data.status} +
+
+
+
+
+ ) + +} diff --git a/src/pages/user-list.jsx b/src/pages/user-list.jsx index 35d48e4..af66822 100644 --- a/src/pages/user-list.jsx +++ b/src/pages/user-list.jsx @@ -1,7 +1,9 @@ +import { signIn, signOut, useSession } from 'next-auth/react' import React, { useEffect, useState } from "react"; import Link from 'next/link' import NavBar from '../components/NavBar' export default function Modal() { + const { data: session } = useSession() const [user, setUser] = useState([]); const [maxPageNumber, setMaxPageNumber] = useState([]); const fetchData = async () => { @@ -16,52 +18,50 @@ const fetchData = async () => { useEffect(() => { fetchData(); },[]) - +if(session) { return (
-
+
+
-
+
  • + + Next + + +
  • + + +
    + + + + +
    + + + Add User + +
    +
    - + @@ -71,36 +71,44 @@ const fetchData = async () => { - {user.map - (data=> - - - - - - - - - - - ) - } - -
    IDNameSchool Name Mobile Email School ID
    {data.id}{data.uname}{data.phone}{data.email}{data.school}{data.type}{data.end_date} - -
    -
    + {user.map + (data=> + + {data.id} + {data.uname} + {data.phone} + {data.email} + {data.school} + {data.type} + {data.end_date} + + + + + ) + } + + +
    ) +} + + return ( + <> + Not signed in
    + + + ) } -- 2.34.1 From fefb39141d3a421a268f2b6c9226438551cf477d Mon Sep 17 00:00:00 2001 From: Kar Date: Tue, 23 May 2023 01:02:11 +0530 Subject: [PATCH 15/16] pagination --- src/pages/api/listUsers.js | 6 ++-- src/pages/user-list.jsx | 58 ++++++++++++++++++++------------------ 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/pages/api/listUsers.js b/src/pages/api/listUsers.js index bb21264..7d4dc3b 100644 --- a/src/pages/api/listUsers.js +++ b/src/pages/api/listUsers.js @@ -4,7 +4,9 @@ import sqlite3 from 'sqlite3'; export default function handler(req,res) { -console.log(req.body.school) + // const query = req.query; + const { page, limit } = req.query; +console.log(page) // const { // query: { name, keyword }, // method, @@ -52,7 +54,7 @@ console.log(req.body.school) }; async function doSomething() { try { - const returnData = await getAllRows('user',2,10); + const returnData = await getAllRows('user',page,limit); res.setHeader('Content-Type', 'application/json') res.status(200).json(returnData) // console.log(data); diff --git a/src/pages/user-list.jsx b/src/pages/user-list.jsx index af66822..df33193 100644 --- a/src/pages/user-list.jsx +++ b/src/pages/user-list.jsx @@ -1,23 +1,28 @@ import { signIn, signOut, useSession } from 'next-auth/react' import React, { useEffect, useState } from "react"; +import { useRouter } from 'next/router' + import Link from 'next/link' import NavBar from '../components/NavBar' -export default function Modal() { +export default function UserList() { + const router = useRouter(); const { data: session } = useSession() - const [user, setUser] = useState([]); - const [maxPageNumber, setMaxPageNumber] = useState([]); -const fetchData = async () => { - const response = await fetch("/api/listUsers"); + const [user, setUser] = useState([]); + const [maxPageNumber, setMaxPageNumber] = useState([]); + const fetchData = async (page) => { + const response = await fetch("/api/listUsers?page="+page+"&limit=10"); const data = await response.json(); - console.log(data) setMaxPageNumber(data.maxPageNumber); return setUser(data.data); - } -// console.log(user) + }; - useEffect(() => { - fetchData(); - },[]) + +// console.log(user) +useEffect(()=>{ if(!router.isReady) return; fetchData(4); }, [router.isReady]); + + // useEffect(() => { + // fetchData(); + // },[]) if(session) { return (
    @@ -26,33 +31,33 @@ if(session) {
    - + ⛨ Add User
    @@ -85,8 +90,7 @@ if(session) { -- 2.34.1 From c7f13e8808b1b41a7dc41df01a769d7daa920631 Mon Sep 17 00:00:00 2001 From: Kar Date: Thu, 25 May 2023 01:06:09 +0530 Subject: [PATCH 16/16] Role schoolmanager only access --- src/pages/api/auth/[...nextauth].js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/pages/api/auth/[...nextauth].js b/src/pages/api/auth/[...nextauth].js index 911bf20..b37b940 100644 --- a/src/pages/api/auth/[...nextauth].js +++ b/src/pages/api/auth/[...nextauth].js @@ -48,6 +48,7 @@ export const options = { if (account && user) { var tokenJwt =user.data.access_token var roleID = jwt_decode(tokenJwt).role; + if(roleID==='f9a8ec44-685c-4b59-8e50-5b49981ba526') return { ...token, roleID:roleID, @@ -56,6 +57,10 @@ export const options = { refreshToken: user.data.refresh_token, error: user.data.error, }; + else + return { + error: user.data.error, + }; } if (Date.now() < token.expires) { -- 2.34.1