diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 00000000..b47489b8
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,3 @@
+node_modules
+package.lock.json
+build
\ No newline at end of file
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 00000000..eba72c61
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,19 @@
+module.exports = {
+ env: {
+ browser: true,
+ es2021: true
+ },
+ extends: [
+ 'plugin:react/recommended',
+ 'standard-with-typescript',
+ 'airbnb-base',
+ 'plugin:prettier/recommended'
+ ],
+ overrides: [],
+ parserOptions: {
+ ecmaVersion: 'latest',
+ sourceType: 'module'
+ },
+ plugins: ['react', 'prettier'],
+ rules: {}
+};
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 00000000..b47489b8
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,3 @@
+node_modules
+package.lock.json
+build
\ No newline at end of file
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 00000000..2d5c7bb9
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,15 @@
+{
+ "printWidth": 100,
+
+ "semi": true,
+
+ "singleQuote": true,
+
+ "tabWidth": 4,
+
+ "useTabs": false,
+
+ "trailingComma": "none",
+
+ "endOfLine": "auto"
+}
diff --git a/archive/pages/hackrplay/2022/registration/[id].js b/archive/pages/hackrplay/2022/registration/[id].js
deleted file mode 100644
index 4e16ad7f..00000000
--- a/archive/pages/hackrplay/2022/registration/[id].js
+++ /dev/null
@@ -1,294 +0,0 @@
-import { useAuthenticationStatus, useUserData } from '@nhost/nextjs';
-import styles from '@/styles/Home.module.css';
-
-import { FiCheckCircle } from 'react-icons/fi';
-import { NHOST } from '@/services/nhost';
-import { useEffect, useState, forwardRef } from 'react';
-import FormBuilder from '@/components/form-builder';
-import { FIELD_TEMPLATE } from '@/services/consts/registration-update-fields';
-import { getAllUsers } from '@/services/graphql/auth';
-import {
- assign_member,
- get_idea,
- insert_idea,
- update_ideas_demographic,
- update_ideas_member,
-} from '@/services/graphql/ideas';
-import {
- PrimaryButton,
- SecondaryOutlinedButtonDark,
-} from '@/components/Buttons';
-import { useRouter } from 'next/router';
-import LayoutWrapper from '@/components/LayoutWrapper';
-import Snackbar from '@mui/material/Snackbar';
-import MuiAlert from '@mui/material/Alert';
-import { submit } from 'json-graphql-parser/v2';
-import {
- get_latest_status,
- insert_ideas_status,
- list_statuses,
- update_ideas_status,
-} from '@/services/graphql/status';
-import { escape_new_line, unescape_new_line } from '@/services/util/string';
-
-const Alert = forwardRef(function Alert(props, ref) {
- return ;
-});
-
-export default function RegistrationEdit() {
- const { isAuthenticated, isLoading } = useAuthenticationStatus();
- const [isDataLoading, setIsDataLoading] = useState(true);
- const [isSubmitting, setIsSubmitting] = useState(false);
- const [storedIdeaData, setStoredIdeaData] = useState({});
- const [formData, setFormData] = useState({});
- const [alertOpen, setAlertOpen] = useState(false);
- const [pageDisabled, setPageDisabled] = useState(false);
-
- const userData = useUserData();
- const router = useRouter();
- const { id } = router.query;
-
- const initializeData = () => {
- if (Object.keys(storedIdeaData).length === 0) {
- setIsDataLoading(true);
- const all_apis = [
- { name: 'users', method: getAllUsers },
- {
- name: 'status',
- method: list_statuses,
- post_method: remove_submitted_status,
- },
- ];
- const promises = [];
-
- all_apis.forEach((api) => {
- promises.push(api.method());
- });
-
- promises.push(
- get_idea(id).then((r) => {
- const status = get_latest_status(r);
- r.description = unescape_new_line(r.description);
- if (
- status &&
- status.id ===
- process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID
- ) {
- router.push('../ideas');
- } else {
- prepare_idea_object(r);
- }
- })
- );
- Promise.all(promises)
- .then((res) => {
- res.forEach((rApi, rApi_ind) => {
- try {
- const api_obj = all_apis[rApi_ind];
- storedIdeaData[api_obj.name] = rApi;
- const anyField = FIELD_TEMPLATE.filter((field) => {
- return field.datafield === api_obj.name;
- });
- if (anyField.length) {
- anyField[0].options = api_obj.post_method
- ? api_obj.post_method(rApi)
- : rApi;
- }
- } catch (err) {
- // IGNORE
- }
- });
-
- setStoredIdeaData({ ...storedIdeaData });
- })
- .finally(() => {
- setIsDataLoading(false);
- });
- }
- };
-
- const remove_submitted_status = (all_statuses) => {
- return all_statuses.filter(
- (s) => s.id !== process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID
- );
- };
-
- const prepare_idea_object = (idea) => {
- if (idea.idea_members_map) {
- idea.users = idea.idea_members_map.user_id_map.id;
- }
- if (idea.idea_idea_status_map) {
- idea.status = get_latest_status(idea);
- const all_statuses = [];
-
- idea.idea_idea_status_map.forEach((st) => {
- all_statuses.push(st.idea_status_status_map);
- });
- const last_status = all_statuses[all_statuses.length - 1];
- idea.status = last_status?.id;
- }
- if (userData.id !== idea.idea_owner_map.id) {
- setAlertOpen(true);
- setPageDisabled(true);
- }
- setFormData({ ...idea });
- setStoredIdeaData({ ...idea });
- };
-
- useEffect(() => {
- if (!isLoading) {
- if (!isAuthenticated) {
- if (typeof window !== 'undefined') {
- const protocol = process.env.NEXT_PUBLIC_PROTOCOL
- ? process.env.NEXT_PUBLIC_PROTOCOL
- : 'https';
- const host = window.location.hostname;
- const port = process.env.NEXT_PUBLIC_DEV_PORT
- ? `:${process.env.NEXT_PUBLIC_DEV_PORT}`
- : '';
- const external_path = NHOST.AUTH_URL(
- `${protocol}://${host}${port}/registration`
- );
- window.location = external_path;
- }
- } else {
- initializeData();
- }
- }
- }, [isLoading]);
-
- if (isLoading) {
- return (
-
-
-
- Loading authentication information. Please wait.
-
-
-
- );
- }
-
- if (isDataLoading) {
- return (
-
-
-
- Checking authentication status. Please wait.
-
-
-
- );
- }
-
- const isFieldsAreInValid = () => {
- let res = false;
- FIELD_TEMPLATE.forEach((tmpl) => {
- if (tmpl.required && (!formData || !formData[tmpl.datafield])) {
- res = true;
- }
- });
- return res;
- };
-
- const onIdeaDataChanged = (data) => {
- setFormData({ ...data });
- setStoredIdeaData({ ...data });
- };
-
- const onSubmit = () => {
- setIsSubmitting(true);
-
- const idea_object = (({ title, description }) => ({
- title,
- description,
- }))(storedIdeaData);
- idea_object.owner = userData.id;
- formData.description = idea_object.description = escape_new_line(
- idea_object.description
- );
- const promises = [];
-
- promises.push(update_ideas_demographic(formData));
- promises.push(update_ideas_member(formData));
- if (formData.status) {
- promises.push(insert_ideas_status(formData));
- }
-
- Promise.all(promises).then((res) => {
- router.push('../ideas');
- });
- };
-
- const onCancelClicked = () => {
- router.push('../ideas');
- };
-
- return (
-
-
-
-
-
-
- Registration
-
-
-
-
- {' '}
- {alertOpen ? (
-
- You cannot edit this idea. Only author
- can edit an idea.
-
- ) : null}
-
-
-
-
-
-
-
-
- onCancelClicked()
- }>
- Cancel
-
-
-
-
-
onSubmit()}
- onClick={() => os()}>
- Update Idea
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/archive/pages/hackrplay/2022/registration/[id].tsx b/archive/pages/hackrplay/2022/registration/[id].tsx
new file mode 100644
index 00000000..b3e476c6
--- /dev/null
+++ b/archive/pages/hackrplay/2022/registration/[id].tsx
@@ -0,0 +1,278 @@
+import { useAuthenticationStatus, useUserData } from '@nhost/nextjs';
+import styles from '@/styles/Home.module.css';
+
+import { FiCheckCircle } from 'react-icons/fi';
+import { NHOST } from '@/services/nhost';
+import { useEffect, useState, forwardRef } from 'react';
+import FormBuilder from '@/components/form-builder';
+import { FIELD_TEMPLATE } from '@/services/consts/registration-update-fields';
+import { getAllUsers } from '@/services/graphql/auth';
+import {
+ assign_member,
+ get_idea,
+ insert_idea,
+ update_ideas_demographic,
+ update_ideas_member
+} from '@/services/graphql/ideas';
+import { PrimaryButton, SecondaryOutlinedButtonDark } from '@/components/Buttons';
+import { useRouter } from 'next/router';
+import LayoutWrapper from '@/components/LayoutWrapper';
+import Snackbar from '@mui/material/Snackbar';
+import MuiAlert from '@mui/material/Alert';
+import { submit } from 'json-graphql-parser/v2';
+import {
+ get_latest_status,
+ insert_ideas_status,
+ list_statuses,
+ update_ideas_status
+} from '@/services/graphql/status';
+import { escape_new_line, unescape_new_line } from '@/services/util/string';
+
+const Alert = forwardRef(function Alert(props, ref) {
+ return ;
+});
+
+export default function RegistrationEdit() {
+ const { isAuthenticated, isLoading } = useAuthenticationStatus();
+ const [isDataLoading, setIsDataLoading] = useState(true);
+ const [isSubmitting, setIsSubmitting] = useState(false);
+ const [storedIdeaData, setStoredIdeaData] = useState({});
+ const [formData, setFormData] = useState({});
+ const [alertOpen, setAlertOpen] = useState(false);
+ const [pageDisabled, setPageDisabled] = useState(false);
+
+ const userData = useUserData();
+ const router = useRouter();
+ const { id } = router.query;
+
+ const initializeData = () => {
+ if (Object.keys(storedIdeaData).length === 0) {
+ setIsDataLoading(true);
+ const all_apis = [
+ { name: 'users', method: getAllUsers },
+ {
+ name: 'status',
+ method: list_statuses,
+ post_method: remove_submitted_status
+ }
+ ];
+ const promises = [];
+
+ all_apis.forEach((api) => {
+ promises.push(api.method());
+ });
+
+ promises.push(
+ get_idea(id).then((r) => {
+ const status = get_latest_status(r);
+ r.description = unescape_new_line(r.description);
+ if (
+ status &&
+ status.id === process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID
+ ) {
+ router.push('../ideas');
+ } else {
+ prepare_idea_object(r);
+ }
+ })
+ );
+ Promise.all(promises)
+ .then((res) => {
+ res.forEach((rApi, rApi_ind) => {
+ try {
+ const api_obj = all_apis[rApi_ind];
+ storedIdeaData[api_obj.name] = rApi;
+ const anyField = FIELD_TEMPLATE.filter((field) => {
+ return field.datafield === api_obj.name;
+ });
+ if (anyField.length) {
+ anyField[0].options = api_obj.post_method
+ ? api_obj.post_method(rApi)
+ : rApi;
+ }
+ } catch (err) {
+ // IGNORE
+ }
+ });
+
+ setStoredIdeaData({ ...storedIdeaData });
+ })
+ .finally(() => {
+ setIsDataLoading(false);
+ });
+ }
+ };
+
+ const remove_submitted_status = (all_statuses) => {
+ return all_statuses.filter(
+ (s) => s.id !== process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID
+ );
+ };
+
+ const prepare_idea_object = (idea) => {
+ if (idea.idea_members_map) {
+ idea.users = idea.idea_members_map.user_id_map.id;
+ }
+ if (idea.idea_idea_status_map) {
+ idea.status = get_latest_status(idea);
+ const all_statuses = [];
+
+ idea.idea_idea_status_map.forEach((st) => {
+ all_statuses.push(st.idea_status_status_map);
+ });
+ const last_status = all_statuses[all_statuses.length - 1];
+ idea.status = last_status?.id;
+ }
+ if (userData.id !== idea.idea_owner_map.id) {
+ setAlertOpen(true);
+ setPageDisabled(true);
+ }
+ setFormData({ ...idea });
+ setStoredIdeaData({ ...idea });
+ };
+
+ useEffect(() => {
+ if (!isLoading) {
+ if (!isAuthenticated) {
+ if (typeof window !== 'undefined') {
+ const protocol = process.env.NEXT_PUBLIC_PROTOCOL
+ ? process.env.NEXT_PUBLIC_PROTOCOL
+ : 'https';
+ const host = window.location.hostname;
+ const port = process.env.NEXT_PUBLIC_DEV_PORT
+ ? `:${process.env.NEXT_PUBLIC_DEV_PORT}`
+ : '';
+ const external_path = NHOST.AUTH_URL(
+ `${protocol}://${host}${port}/registration`
+ );
+ window.location = external_path;
+ }
+ } else {
+ initializeData();
+ }
+ }
+ }, [isLoading]);
+
+ if (isLoading) {
+ return (
+
+
+
+ Loading authentication information. Please wait.
+
+
+
+ );
+ }
+
+ if (isDataLoading) {
+ return (
+
+
+ Checking authentication status. Please wait.
+
+
+ );
+ }
+
+ const isFieldsAreInValid = () => {
+ let res = false;
+ FIELD_TEMPLATE.forEach((tmpl) => {
+ if (tmpl.required && (!formData || !formData[tmpl.datafield])) {
+ res = true;
+ }
+ });
+ return res;
+ };
+
+ const onIdeaDataChanged = (data) => {
+ setFormData({ ...data });
+ setStoredIdeaData({ ...data });
+ };
+
+ const onSubmit = () => {
+ setIsSubmitting(true);
+
+ const idea_object = (({ title, description }) => ({
+ title,
+ description
+ }))(storedIdeaData);
+ idea_object.owner = userData.id;
+ formData.description = idea_object.description = escape_new_line(idea_object.description);
+ const promises = [];
+
+ promises.push(update_ideas_demographic(formData));
+ promises.push(update_ideas_member(formData));
+ if (formData.status) {
+ promises.push(insert_ideas_status(formData));
+ }
+
+ Promise.all(promises).then((res) => {
+ router.push('../ideas');
+ });
+ };
+
+ const onCancelClicked = () => {
+ router.push('../ideas');
+ };
+
+ return (
+
+
+
+
+
+
+ Registration
+
+
+
+
+ {' '}
+ {alertOpen ? (
+
+ You cannot edit this idea. Only author can edit an idea.
+
+ ) : null}
+
+
+
+
+
+
+
+ onCancelClicked()}
+ >
+ Cancel
+
+
+
+
+
onSubmit()}
+ onClick={() => os()}
+ >
+ Update Idea
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/archive/pages/hackrplay/2022/registration/index.js b/archive/pages/hackrplay/2022/registration/index.js
deleted file mode 100644
index 009a8409..00000000
--- a/archive/pages/hackrplay/2022/registration/index.js
+++ /dev/null
@@ -1,205 +0,0 @@
-import { useAuthenticationStatus, useUserData } from '@nhost/nextjs';
-import styles from '@/styles/Home.module.css';
-
-import Link from 'next/link';
-import { FiCheckCircle } from 'react-icons/fi';
-import { NHOST } from '@/services/nhost';
-import { useEffect, useState } from 'react';
-import FormBuilder from '@/components/form-builder';
-import { FIELD_TEMPLATE } from '@/services/consts/registration-fields';
-import { getAllUsers } from '@/services/graphql/auth';
-import { assign_member, insert_idea } from '@/services/graphql/ideas';
-import {
- PrimaryButton,
- SecondaryOutlinedButtonDark,
-} from '@/components/Buttons';
-import { useRouter } from 'next/router';
-import LayoutWrapper from '@/components/LayoutWrapper';
-import { insert_ideas_status } from '@/services/graphql/status';
-import { escape_new_line } from '@/services/util/string';
-
-export default function Registration() {
- const { isAuthenticated, isLoading } = useAuthenticationStatus();
- const [isDataLoading, setIsDataLoading] = useState(true);
- const [isSubmitting, setIsSubmitting] = useState(false);
- const [storedIdeaData, setStoredIdeaData] = useState({});
- const [formData, setFormData] = useState({});
- const router = useRouter();
-
- const userData = useUserData();
-
- const initializeData = () => {
- if (Object.keys(storedIdeaData).length === 0) {
- setIsDataLoading(true);
- const all_apis = [{ name: 'users', method: getAllUsers }];
- const promises = [];
- all_apis.forEach((api) => {
- promises.push(api.method());
- });
-
- Promise.all(promises)
- .then((res) => {
- res.forEach((rApi, rApi_ind) => {
- const api_obj = all_apis[rApi_ind];
- storedIdeaData[api_obj.name] = rApi;
- const anyField = FIELD_TEMPLATE.filter((field) => {
- return field.datafield === api_obj.name;
- });
- if (anyField.length) {
- anyField[0].options = rApi;
- }
- });
- setStoredIdeaData({ ...storedIdeaData });
- })
- .finally(() => {
- setIsDataLoading(false);
- });
- }
- };
-
- useEffect(() => {
- if (!isLoading) {
- if (!isAuthenticated) {
- if (typeof window !== 'undefined') {
- const protocol = process.env.NEXT_PUBLIC_PROTOCOL
- ? process.env.NEXT_PUBLIC_PROTOCOL
- : 'https';
- const host = window.location.hostname;
- const port = process.env.NEXT_PUBLIC_DEV_PORT
- ? `:${process.env.NEXT_PUBLIC_DEV_PORT}`
- : '';
- const external_path = NHOST.AUTH_URL(
- `${protocol}://${host}${port}/hackrplay/2022/registration`
- );
- window.location = external_path;
- }
- } else {
- initializeData();
- }
- }
- }, [isLoading]);
-
- if (isLoading) {
- return (
-
-
-
- Loading authentication information. Please wait.
-
-
-
- );
- }
-
- if (isDataLoading) {
- return (
-
-
-
- Checking authentication status. Please wait.
-
-
-
- );
- }
-
- const isFieldsAreInValid = () => {
- let res = false;
- FIELD_TEMPLATE.forEach((tmpl) => {
- if (tmpl.required && (!formData || !formData[tmpl.datafield])) {
- res = true;
- }
- });
- return res;
- };
-
- const onIdeaDataChanged = (data) => {
- setFormData({ ...data });
- setStoredIdeaData({ ...data });
- };
-
- const onSubmit = () => {
- setIsSubmitting(true);
- let idea_id = storedIdeaData.id;
- let selected_users = storedIdeaData.users;
- const idea_object = (({ title, description }) => ({
- title,
- description,
- }))(storedIdeaData);
- idea_object.owner = userData.id;
- idea_object.description = escape_new_line(idea_object.description);
- if (!idea_id)
- return insert_idea(idea_object).then((res) => {
- idea_id = res.id;
- const promises = [];
- if (selected_users && selected_users.length) {
- if (storedIdeaData.users) {
- promises.push(
- assign_member(idea_id, storedIdeaData.users)
- );
- }
- }
- formData.status = '63c47cd7-f9c4-41e1-87b6-7ebe7b59f00e';
- formData.id = idea_id;
- promises.push(insert_ideas_status(formData));
- return Promise.all(promises).then((res) => {
- router.push('ideas');
- setIsSubmitting(false);
- });
- });
- };
- const onCancelClicked = () => {
- router.back();
- };
-
- return (
-
-
-
-
-
-
- Registration
-
-
-
-
-
- Welcome{' '}
-
- {userData.displayName}
-
- , register your idea
-
-
-
-
-
-
-
-
-
- onCancelClicked()
- }>
- Cancel
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/archive/pages/hackrplay/2022/registration/index.tsx b/archive/pages/hackrplay/2022/registration/index.tsx
new file mode 100644
index 00000000..5a15705d
--- /dev/null
+++ b/archive/pages/hackrplay/2022/registration/index.tsx
@@ -0,0 +1,196 @@
+import { useAuthenticationStatus, useUserData } from '@nhost/nextjs';
+import styles from '@/styles/Home.module.css';
+
+import Link from 'next/link';
+import { FiCheckCircle } from 'react-icons/fi';
+import { NHOST } from '@/services/nhost';
+import { useEffect, useState } from 'react';
+import FormBuilder from '@/components/form-builder';
+import { FIELD_TEMPLATE } from '@/services/consts/registration-fields';
+import { getAllUsers } from '@/services/graphql/auth';
+import { assign_member, insert_idea } from '@/services/graphql/ideas';
+import { PrimaryButton, SecondaryOutlinedButtonDark } from '@/components/Buttons';
+import { useRouter } from 'next/router';
+import LayoutWrapper from '@/components/LayoutWrapper';
+import { insert_ideas_status } from '@/services/graphql/status';
+import { escape_new_line } from '@/services/util/string';
+
+export default function Registration() {
+ const { isAuthenticated, isLoading } = useAuthenticationStatus();
+ const [isDataLoading, setIsDataLoading] = useState(true);
+ const [isSubmitting, setIsSubmitting] = useState(false);
+ const [storedIdeaData, setStoredIdeaData] = useState({});
+ const [formData, setFormData] = useState({});
+ const router = useRouter();
+
+ const userData = useUserData();
+
+ const initializeData = () => {
+ if (Object.keys(storedIdeaData).length === 0) {
+ setIsDataLoading(true);
+ const all_apis = [{ name: 'users', method: getAllUsers }];
+ const promises = [];
+ all_apis.forEach((api) => {
+ promises.push(api.method());
+ });
+
+ Promise.all(promises)
+ .then((res) => {
+ res.forEach((rApi, rApi_ind) => {
+ const api_obj = all_apis[rApi_ind];
+ storedIdeaData[api_obj.name] = rApi;
+ const anyField = FIELD_TEMPLATE.filter((field) => {
+ return field.datafield === api_obj.name;
+ });
+ if (anyField.length) {
+ anyField[0].options = rApi;
+ }
+ });
+ setStoredIdeaData({ ...storedIdeaData });
+ })
+ .finally(() => {
+ setIsDataLoading(false);
+ });
+ }
+ };
+
+ useEffect(() => {
+ if (!isLoading) {
+ if (!isAuthenticated) {
+ if (typeof window !== 'undefined') {
+ const protocol = process.env.NEXT_PUBLIC_PROTOCOL
+ ? process.env.NEXT_PUBLIC_PROTOCOL
+ : 'https';
+ const host = window.location.hostname;
+ const port = process.env.NEXT_PUBLIC_DEV_PORT
+ ? `:${process.env.NEXT_PUBLIC_DEV_PORT}`
+ : '';
+ const external_path = NHOST.AUTH_URL(
+ `${protocol}://${host}${port}/hackrplay/2022/registration`
+ );
+ window.location = external_path;
+ }
+ } else {
+ initializeData();
+ }
+ }
+ }, [isLoading]);
+
+ if (isLoading) {
+ return (
+
+
+
+ Loading authentication information. Please wait.
+
+
+
+ );
+ }
+
+ if (isDataLoading) {
+ return (
+
+
+ Checking authentication status. Please wait.
+
+
+ );
+ }
+
+ const isFieldsAreInValid = () => {
+ let res = false;
+ FIELD_TEMPLATE.forEach((tmpl) => {
+ if (tmpl.required && (!formData || !formData[tmpl.datafield])) {
+ res = true;
+ }
+ });
+ return res;
+ };
+
+ const onIdeaDataChanged = (data) => {
+ setFormData({ ...data });
+ setStoredIdeaData({ ...data });
+ };
+
+ const onSubmit = () => {
+ setIsSubmitting(true);
+ let idea_id = storedIdeaData.id;
+ let selected_users = storedIdeaData.users;
+ const idea_object = (({ title, description }) => ({
+ title,
+ description
+ }))(storedIdeaData);
+ idea_object.owner = userData.id;
+ idea_object.description = escape_new_line(idea_object.description);
+ if (!idea_id)
+ return insert_idea(idea_object).then((res) => {
+ idea_id = res.id;
+ const promises = [];
+ if (selected_users && selected_users.length) {
+ if (storedIdeaData.users) {
+ promises.push(assign_member(idea_id, storedIdeaData.users));
+ }
+ }
+ formData.status = '63c47cd7-f9c4-41e1-87b6-7ebe7b59f00e';
+ formData.id = idea_id;
+ promises.push(insert_ideas_status(formData));
+ return Promise.all(promises).then((res) => {
+ router.push('ideas');
+ setIsSubmitting(false);
+ });
+ });
+ };
+ const onCancelClicked = () => {
+ router.back();
+ };
+
+ return (
+
+
+
+
+
+
+ Registration
+
+
+
+
+
+ Welcome{' '}
+
+ {userData.displayName}
+
+ , register your idea
+
+
+
+
+
+
+
+
+ onCancelClicked()}
+ >
+ Cancel
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/components/Banner.js b/components/Banner.tsx
similarity index 100%
rename from components/Banner.js
rename to components/Banner.tsx
diff --git a/components/Buttons.js b/components/Buttons.js
deleted file mode 100644
index 15af3155..00000000
--- a/components/Buttons.js
+++ /dev/null
@@ -1,114 +0,0 @@
-export const PrimaryButton = ({
- children,
- handleOnClick,
- className,
- small = false,
- ...props
-}) => {
- const buttonSize = small
- ? "md:pt-1 md:pb-0 md:px-4 py-2 px-4 text-lg"
- : "md:py-4 md:px-7 py-3 px-5 text-xl";
-
- return (
-
- {children}
-
- );
-};
-
-export const SecondaryButton = ({
- children,
- handleOnClick,
- className,
- small = false,
-}) => {
- const buttonSize = small
- ? "md:py-3 md:px-5 py-2 px-4 text-lg"
- : "md:py-4 md:px-7 py-3 px-5 text-xl";
-
- return (
-
- {children}
-
- );
-};
-
-export const SecondaryLink = ({
- children,
- link,
- className,
- target,
- small = false,
-}) => {
- const buttonSize = small
- ? "md:py-3 md:px-5 py-2 px-4 text-lg"
- : "md:py-4 md:px-7 py-3 px-5 text-xl";
-
- return (
-
- {children}
-
- );
-};
-
-export const SecondaryOutlinedButton = ({
- children,
- handleOnClick,
- small = false,
-}) => {
- const buttonSize = small
- ? "md:py-3 md:px-5 py-2 px-4 text-lg"
- : "md:py-4 md:px-7 py-3 px-5 text-xl";
-
- return (
-
- {children}
-
- );
-};
-
-export const SecondaryOutlinedButtonDark = ({ children, handleOnClick }) => {
- return (
-
- {children}
-
- );
-};
-
-export const ToolBarButton = ({
- children,
- handleOnClick,
- disabled,
- selected,
- cclas,
-}) => {
- return (
-
-
- {children}
-
-
- );
-};
diff --git a/components/Buttons.tsx b/components/Buttons.tsx
new file mode 100644
index 00000000..9adbab8a
--- /dev/null
+++ b/components/Buttons.tsx
@@ -0,0 +1,116 @@
+import { ReactElement, ReactFragment } from 'react';
+
+interface IPrimaryButtonProps {
+ children: ReactFragment;
+ handleOnClick?: () => void;
+ className?: string;
+ small?: boolean;
+}
+
+interface ISecondaryLinkProps {
+ children: ReactFragment;
+ link: string;
+ className?: string;
+ target: string;
+ small?: boolean;
+}
+
+export const PrimaryButton = ({
+ children,
+ handleOnClick,
+ className,
+ small = false,
+ ...props
+}: IPrimaryButtonProps) => {
+ const buttonSize = small
+ ? 'md:pt-1 md:pb-0 md:px-4 py-2 px-4 text-lg'
+ : 'md:py-4 md:px-7 py-3 px-5 text-xl';
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const SecondaryButton = ({ children, handleOnClick, className, small = false }) => {
+ const buttonSize = small
+ ? 'md:py-3 md:px-5 py-2 px-4 text-lg'
+ : 'md:py-4 md:px-7 py-3 px-5 text-xl';
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const SecondaryLink = ({
+ children,
+ link,
+ className,
+ target,
+ small = false
+}: ISecondaryLinkProps) => {
+ const buttonSize = small
+ ? 'md:py-3 md:px-5 py-2 px-4 text-lg'
+ : 'md:py-4 md:px-7 py-3 px-5 text-xl';
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const SecondaryOutlinedButton = ({ children, handleOnClick, small = false }) => {
+ const buttonSize = small
+ ? 'md:py-3 md:px-5 py-2 px-4 text-lg'
+ : 'md:py-4 md:px-7 py-3 px-5 text-xl';
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const SecondaryOutlinedButtonDark = ({ children, handleOnClick }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+export const ToolBarButton = ({ children, handleOnClick, disabled, selected, cclas }) => {
+ return (
+
+
+ {children}
+
+
+ );
+};
diff --git a/components/ExtendedFooter.js b/components/ExtendedFooter.tsx
similarity index 100%
rename from components/ExtendedFooter.js
rename to components/ExtendedFooter.tsx
diff --git a/components/Footer.js b/components/Footer.js
deleted file mode 100644
index 57db43ad..00000000
--- a/components/Footer.js
+++ /dev/null
@@ -1,82 +0,0 @@
-import Image from "next/image";
-import Link from "next/link";
-import { FaDiscord, FaTwitter, FaRss } from "react-icons/fa";
-
-import FooterTriangles from "../public/FooterTriangles.svg";
-import ReactPlayLogo from "../public/ReactPlayLogo.svg";
-import FooterReactLogo from "../public/FooterReactLogo.svg";
-import ExtendedFooter from "./ExtendedFooter";
-
-const Footer = ({ currentPath }) => {
- return (
- <>
- {currentPath == "/" ? (
-
- ) : (
-
- )}
- >
- );
-};
-
-export default Footer;
diff --git a/components/Footer.tsx b/components/Footer.tsx
new file mode 100644
index 00000000..02a1a07e
--- /dev/null
+++ b/components/Footer.tsx
@@ -0,0 +1,80 @@
+import Image from 'next/image';
+import Link from 'next/link';
+import { FaDiscord, FaTwitter, FaRss } from 'react-icons/fa';
+
+import FooterTriangles from '../public/FooterTriangles.svg';
+import ReactPlayLogo from '../public/ReactPlayLogo.svg';
+import FooterReactLogo from '../public/FooterReactLogo.svg';
+import ExtendedFooter from './ExtendedFooter';
+
+const Footer = ({ currentPath }) => {
+ return (
+ <>
+ {currentPath == '/' ? (
+
+ ) : (
+
+ )}
+ >
+ );
+};
+
+export default Footer;
diff --git a/components/Hack-R-Play/IdeaFilter.js b/components/Hack-R-Play/IdeaFilter.js
deleted file mode 100644
index fef27c8e..00000000
--- a/components/Hack-R-Play/IdeaFilter.js
+++ /dev/null
@@ -1,97 +0,0 @@
-import React, { useState, useEffect } from "react";
-
-import Pagination from "@/components/Pagination";
-import SortButtons from "@/components/SortButtons";
-import OwnerFilter from "@/components/OwnerFilter";
-import StatusFilter from "../StatusFilter";
-
-export default function IdeaFilters({
- total,
- pagesize,
- onChange,
- isAuthenticated,
-}) {
- const [filter, setFilter] = useState({});
-
- useEffect(() => {}, [total]);
-
- const resetFilter = () => {
- filter.sort_col = "created_at";
- filter.sort_asc = true;
- filter.page = 1;
- filter.owner = "all";
- filter.pagesize = pagesize;
- filter.status_filter = undefined;
- return filter;
- };
-
- const onPageChanged = (index) => {
- const fl = resetFilter();
- fl.page = index;
- setFilter({ ...fl });
- invokeChange(fl);
- };
-
- const onOwnerChanged = (owner) => {
- const fl = resetFilter();
-
- fl.owner = owner;
- setFilter({ ...fl });
- invokeChange(fl);
- };
-
- const onSortChanged = (button) => {
- const fl = resetFilter();
- fl.sort_col = button.field;
- fl.sort_asc = button.asc;
- setFilter({ ...fl });
- invokeChange(fl);
- };
-
- const onStatusFilterChanged = (status) => {
- const fl = resetFilter();
- fl.status_filter = status;
- setFilter({ ...fl });
- invokeChange(fl);
- };
-
- const invokeChange = (filter) => {
- if (onChange) {
- onChange(filter);
- }
- };
-
- return (
-
- {isAuthenticated ? (
-
- onOwnerChanged(r)}
- selected={filter.owner}
- >
-
- ) : null}
-
- onStatusFilterChanged(r)}
- selected={filter.status_filter}
- >
-
-
-
onPageChanged(page)}
- >
-
onSortChanged(b)}
- buttons={[
- { label: "Date", field: "created_at" },
- { label: "Name", field: "title" },
- // { label: 'Popularity', field: 'liked' },
- ]}
- >
-
-
- );
-}
diff --git a/components/Hack-R-Play/IdeaFilter.tsx b/components/Hack-R-Play/IdeaFilter.tsx
new file mode 100644
index 00000000..13f48b04
--- /dev/null
+++ b/components/Hack-R-Play/IdeaFilter.tsx
@@ -0,0 +1,92 @@
+import React, { useState, useEffect } from 'react';
+
+import Pagination from '@/components/Pagination';
+import SortButtons from '@/components/SortButtons';
+import OwnerFilter from '@/components/OwnerFilter';
+import StatusFilter from '../StatusFilter';
+
+export default function IdeaFilters({ total, pagesize, onChange, isAuthenticated }) {
+ const [filter, setFilter] = useState({});
+
+ useEffect(() => {}, [total]);
+
+ const resetFilter = () => {
+ filter.sort_col = 'created_at';
+ filter.sort_asc = true;
+ filter.page = 1;
+ filter.owner = 'all';
+ filter.pagesize = pagesize;
+ filter.status_filter = undefined;
+ return filter;
+ };
+
+ const onPageChanged = (index) => {
+ const fl = resetFilter();
+ fl.page = index;
+ setFilter({ ...fl });
+ invokeChange(fl);
+ };
+
+ const onOwnerChanged = (owner) => {
+ const fl = resetFilter();
+
+ fl.owner = owner;
+ setFilter({ ...fl });
+ invokeChange(fl);
+ };
+
+ const onSortChanged = (button) => {
+ const fl = resetFilter();
+ fl.sort_col = button.field;
+ fl.sort_asc = button.asc;
+ setFilter({ ...fl });
+ invokeChange(fl);
+ };
+
+ const onStatusFilterChanged = (status) => {
+ const fl = resetFilter();
+ fl.status_filter = status;
+ setFilter({ ...fl });
+ invokeChange(fl);
+ };
+
+ const invokeChange = (filter) => {
+ if (onChange) {
+ onChange(filter);
+ }
+ };
+
+ return (
+
+ {isAuthenticated ? (
+
+ onOwnerChanged(r)}
+ selected={filter.owner}
+ >
+
+ ) : null}
+
+ onStatusFilterChanged(r)}
+ selected={filter.status_filter}
+ >
+
+
+
onPageChanged(page)}
+ >
+
onSortChanged(b)}
+ buttons={[
+ { label: 'Date', field: 'created_at' },
+ { label: 'Name', field: 'title' }
+ // { label: 'Popularity', field: 'liked' },
+ ]}
+ >
+
+
+ );
+}
diff --git a/components/Hack-R-Play/index.js b/components/Hack-R-Play/index.js
deleted file mode 100644
index 7059df04..00000000
--- a/components/Hack-R-Play/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import Hero from "../common/Hero";
-import About from "../common/About";
-import ChallengesAndPrizes from "../common/ChallengesAndPrizes";
-import Judges from "../common/Judges";
-import Partners from "../common/Partners";
-import CTA from "../common/CTA";
-import FAQs from "../common/FAQs";
-
-export { Hero, About, ChallengesAndPrizes, Judges, Partners, CTA, FAQs };
diff --git a/components/Hack-R-Play/index.tsx b/components/Hack-R-Play/index.tsx
new file mode 100644
index 00000000..ff8afc9d
--- /dev/null
+++ b/components/Hack-R-Play/index.tsx
@@ -0,0 +1,9 @@
+import Hero from '../common/Hero';
+import About from '../common/About';
+import ChallengesAndPrizes from '../common/ChallengesAndPrizes';
+import Judges from '../common/Judges';
+import Partners from '../common/Partners';
+import CTA from '../common/CTA';
+import FAQs from '../common/FAQs';
+
+export { Hero, About, ChallengesAndPrizes, Judges, Partners, CTA, FAQs };
diff --git a/components/Header.js b/components/Header.js
deleted file mode 100644
index 3e24ab4d..00000000
--- a/components/Header.js
+++ /dev/null
@@ -1,102 +0,0 @@
-import { useState } from "react";
-import Link from "next/link";
-import Image from "next/image";
-import { useRouter } from "next/router";
-import { AiOutlineMenu, AiOutlineClose } from "react-icons/ai";
-
-const MobileHeader = ({ links, setMobileActive, redirectToRegistration }) => {
- return (
- <>
-
- >
- );
-};
-
-const Header = ({ links, metainfo, secondary = false }) => {
- const [mobileActive, setMobileActive] = useState(false);
- const router = useRouter();
- const redirectToRegistration = () => {
- router.push("/hackrplay/2022/registration");
- };
-
- return (
- <>
- {secondary ? (
-
- ) : (
-
- )}
- {!secondary && mobileActive && (
-
- )}
- >
- );
-};
-
-export default Header;
diff --git a/components/Header.tsx b/components/Header.tsx
new file mode 100644
index 00000000..b5ba882f
--- /dev/null
+++ b/components/Header.tsx
@@ -0,0 +1,102 @@
+import { useState } from 'react';
+import Link from 'next/link';
+import Image from 'next/image';
+import { useRouter } from 'next/router';
+import { AiOutlineMenu, AiOutlineClose } from 'react-icons/ai';
+
+const MobileHeader = ({ links, setMobileActive, redirectToRegistration }) => {
+ return (
+ <>
+
+ >
+ );
+};
+
+const Header = ({ links, metainfo, secondary = false }) => {
+ const [mobileActive, setMobileActive] = useState(false);
+ const router = useRouter();
+ const redirectToRegistration = () => {
+ router.push('/hackrplay/2022/registration');
+ };
+
+ return (
+ <>
+ {secondary ? (
+
+ ) : (
+
+ )}
+ {!secondary && mobileActive && (
+
+ )}
+ >
+ );
+};
+
+export default Header;
diff --git a/components/Ideas/Card.js b/components/Ideas/Card.js
deleted file mode 100644
index 8707eeec..00000000
--- a/components/Ideas/Card.js
+++ /dev/null
@@ -1,129 +0,0 @@
-import Image from 'next/image';
-import { FiThumbsUp } from 'react-icons/fi';
-import { BiComment } from 'react-icons/bi';
-import { Grid, Card, Typography } from '@mui/material';
-
-import NotStarted from '/public/Idea-List/notStart.svg';
-import InProgress from '/public/Idea-List/inProgress.svg';
-import Complted from '/public/Idea-List/completed.svg';
-import styles from '../../styles/idea.module.css';
-
-const IdeaCard = ({ data, onClick }) => {
- const get_status_style = (status) => {
- const final_status = status || { label: 'Idea Submitted' };
- switch (final_status.label) {
- case 'Completed':
- return {
- image: Complted,
- color: '#68FDC6',
- };
- case 'In Progress':
- return {
- image: InProgress,
- color: '#FDC668',
- };
- case 'Idea Submitted':
- default:
- return {
- image: NotStarted,
- color: '#FD6868',
- };
- }
- };
- return (
- onClick()}>
-
-
-
- {data.title}
-
-
-
-
-
-
-
- {data?.status?.label.toUpperCase() ||
- 'IDEA SUBMITTED'}
-
-
-
-
-
- {data.description}
-
-
-
-
- {data.avatarUrl.map((value, index) => {
- return (
-
- {value && (
-
- )}
-
- );
- })}
-
-
-
-
- {' '}
-
-
- {data.like_count}
-
-
-
-
-
- {data.comment_count}
-
-
-
-
-
- );
-};
-export default IdeaCard;
diff --git a/components/Ideas/Card.tsx b/components/Ideas/Card.tsx
new file mode 100644
index 00000000..d6b1c49f
--- /dev/null
+++ b/components/Ideas/Card.tsx
@@ -0,0 +1,117 @@
+import Image from 'next/image';
+import { FiThumbsUp } from 'react-icons/fi';
+import { BiComment } from 'react-icons/bi';
+import { Grid, Card, Typography } from '@mui/material';
+
+import NotStarted from '/public/Idea-List/notStart.svg';
+import InProgress from '/public/Idea-List/inProgress.svg';
+import Complted from '/public/Idea-List/completed.svg';
+import styles from '../../styles/idea.module.css';
+
+const IdeaCard = ({ data, onClick }) => {
+ const get_status_style = (status) => {
+ const final_status = status || { label: 'Idea Submitted' };
+ switch (final_status.label) {
+ case 'Completed':
+ return {
+ image: Complted,
+ color: '#68FDC6'
+ };
+ case 'In Progress':
+ return {
+ image: InProgress,
+ color: '#FDC668'
+ };
+ case 'Idea Submitted':
+ default:
+ return {
+ image: NotStarted,
+ color: '#FD6868'
+ };
+ }
+ };
+ return (
+ onClick()}>
+
+
+
+ {data.title}
+
+
+
+
+
+
+
+ {data?.status?.label.toUpperCase() || 'IDEA SUBMITTED'}
+
+
+
+
+
+ {data.description}
+
+
+
+
+ {data.avatarUrl.map((value, index) => {
+ return (
+
+ {value && (
+
+ )}
+
+ );
+ })}
+
+
+
+
+ {' '}
+
+
+ {data.like_count}
+
+
+
+
+
+ {data.comment_count}
+
+
+
+
+
+ );
+};
+export default IdeaCard;
diff --git a/components/Layout.js b/components/Layout.js
deleted file mode 100644
index 9eb70573..00000000
--- a/components/Layout.js
+++ /dev/null
@@ -1,91 +0,0 @@
-import React, { useEffect, useState } from "react";
-import Head from "next/head";
-import { useRouter } from "next/router";
-
-import Footer from "./Footer";
-import Header from "./Header";
-import Script from "next/script";
-
-const Layout = ({ children, title, description, metainfo }) => {
- const currentPath = useRouter().pathname;
- const [secondaryNavbar, setSecondaryNavbar] = useState(false);
- const [loading, setLoading] = useState(true);
-
- useEffect(() => {
- if (
- currentPath === "/events/22/hackrplay" ||
- currentPath === "/events/23/twoplaysamonth" ||
- currentPath === "/"
- ) {
- setSecondaryNavbar(false);
- } else {
- setSecondaryNavbar(true);
- }
- if (metainfo?.name) {
- setLoading(false);
- }
- }, []);
-
- return (
- <>
- {!loading ? (
-
-
-
{title}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {children}
-
-
- ) : null}
- >
- );
-};
-
-export default Layout;
diff --git a/components/Layout.tsx b/components/Layout.tsx
new file mode 100644
index 00000000..46ef1095
--- /dev/null
+++ b/components/Layout.tsx
@@ -0,0 +1,98 @@
+import React, { ReactElement, ReactFragment, useEffect, useState } from 'react';
+import Head from 'next/head';
+import { useRouter } from 'next/router';
+
+import Footer from './Footer';
+import Header from './Header';
+import Script from 'next/script';
+
+export interface ILayoutProps {
+ children: ReactFragment;
+ title: string;
+ metainfo: {
+ name?: string;
+ keywords?: string;
+ description?: string;
+ links?: {
+ name: string;
+ href: string;
+ }[];
+ };
+}
+
+const Layout = ({ children, title, metainfo }: ILayoutProps) => {
+ const currentPath = useRouter().pathname;
+ const [secondaryNavbar, setSecondaryNavbar] = useState(false);
+ const [loading, setLoading] = useState(true);
+
+ useEffect(() => {
+ if (
+ currentPath === '/events/22/hackrplay' ||
+ currentPath === '/events/23/twoplaysamonth' ||
+ currentPath === '/'
+ ) {
+ setSecondaryNavbar(false);
+ } else {
+ setSecondaryNavbar(true);
+ }
+ if (metainfo?.name) {
+ setLoading(false);
+ }
+ }, []);
+
+ return (
+ <>
+ {!loading ? (
+
+
+
{title}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {children}
+
+
+ ) : null}
+ >
+ );
+};
+
+export default Layout;
diff --git a/components/LayoutWrapper.js b/components/LayoutWrapper.js
deleted file mode 100644
index 6fc77462..00000000
--- a/components/LayoutWrapper.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import Image from 'next/image';
-
-import Layout from '@/components/Layout';
-import Flower from '../public/common/Flower.svg';
-import HeroLines from '../public/common/HeroLines.svg';
-import DottedAndFilledTriangle from '../public/common/DottedAndFilledTriangle.svg';
-
-const links = [
- {
- name: 'Home',
- href: '/',
- },
- {
- name: 'Submissions',
- href: '/hackrplay/2022/ideas',
- },
-];
-
-export default function LayoutWrapper({ title, description, children}) {
- return (
-
-
-
-
-
-
-
-
-
-
- {children}
-
- );
-}
diff --git a/components/LayoutWrapper.tsx b/components/LayoutWrapper.tsx
new file mode 100644
index 00000000..cb26f19e
--- /dev/null
+++ b/components/LayoutWrapper.tsx
@@ -0,0 +1,39 @@
+import Image from 'next/image';
+
+import Layout from '@/components/Layout';
+import Flower from '../public/common/Flower.svg';
+import HeroLines from '../public/common/HeroLines.svg';
+import DottedAndFilledTriangle from '../public/common/DottedAndFilledTriangle.svg';
+
+const links = [
+ {
+ name: 'Home',
+ href: '/'
+ },
+ {
+ name: 'Submissions',
+ href: '/hackrplay/2022/ideas'
+ }
+];
+
+export default function LayoutWrapper({ title, description, children }) {
+ return (
+
+
+
+
+
+
+
+
+
+
+ {children}
+
+ );
+}
diff --git a/components/LinkLabel.js b/components/LinkLabel.js
deleted file mode 100644
index 0e9cc08c..00000000
--- a/components/LinkLabel.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import { useEffect, useState } from "react";
-
-export const LinkLabel = ({ value, cclass, lclass }) => {
- const [htmlValue, setHtmlValue] = useState("");
- useEffect(() => {
- if (value) {
- const html = value
- .replace(/^### (.*$)/gim, "$1 ") // h3 tag
- .replace(/^## (.*$)/gim, "$1 ") // h2 tag
- .replace(/^# (.*$)/gim, "$1 ") // h1 tag
- .replace(/\*\*(.*)\*\*/gim, "$1 ") // bold text
- .replace(/\*(.*)\*/gim, "$1 ") // italic text
- .replace(/\r\n|\r|\n/gim, " ") // linebreaks
- .replace(
- /\[([^\[]+)\](\(([^)]*))\)/gim,
- `$1 `
- ); // anchor tags
- setHtmlValue(html);
- }
- }, [value]);
-
- return
;
-};
diff --git a/components/LinkLabel.tsx b/components/LinkLabel.tsx
new file mode 100644
index 00000000..7d86d9d0
--- /dev/null
+++ b/components/LinkLabel.tsx
@@ -0,0 +1,23 @@
+import { useEffect, useState } from 'react';
+
+export const LinkLabel = ({ value, cclass, lclass }) => {
+ const [htmlValue, setHtmlValue] = useState('');
+ useEffect(() => {
+ if (value) {
+ const html = value
+ .replace(/^### (.*$)/gim, '$1 ') // h3 tag
+ .replace(/^## (.*$)/gim, '$1 ') // h2 tag
+ .replace(/^# (.*$)/gim, '$1 ') // h1 tag
+ .replace(/\*\*(.*)\*\*/gim, '$1 ') // bold text
+ .replace(/\*(.*)\*/gim, '$1 ') // italic text
+ .replace(/\r\n|\r|\n/gim, ' ') // linebreaks
+ .replace(
+ /\[([^\[]+)\](\(([^)]*))\)/gim,
+ `$1 `
+ ); // anchor tags
+ setHtmlValue(html);
+ }
+ }, [value]);
+
+ return
;
+};
diff --git a/components/MediaLayout.js b/components/MediaLayout.js
deleted file mode 100644
index a70628ed..00000000
--- a/components/MediaLayout.js
+++ /dev/null
@@ -1,111 +0,0 @@
-import Link from "next/link";
-import Image from "next/image";
-import ReactPlayLogo from "../public/ReactPlayLogo.svg";
-import { HiArrowNarrowRight } from "react-icons/hi";
-import { BiPlay } from "react-icons/bi";
-
-const MediaLayout = ({ events, reactPlayLive, twitterSpaces, title, id }) => {
- return (
-
-
- {!title.split(" ")[1] ? (
- {title}
- ) : (
-
- {title.split(" ")[0]} {" "}
-
- {title.split(" ")[1]}
-
-
- )}
-
-
- {events?.map((event) => (
-
-
-
-
-
- {event.description}
-
-
- ))}
- {reactPlayLive?.map((el) => (
-
- ))}
- {twitterSpaces?.map((el) => (
-
- {/* Host */}
-
- {/* logo */}
-
-
- Host
-
-
-
{el.title}
-
{el.date}
-
-
- ))}
-
-
- {/* link to rest of the media */}
-
-
- View all{" "}
-
-
-
-
-
-
- );
-};
-
-export default MediaLayout;
diff --git a/components/MediaLayout.tsx b/components/MediaLayout.tsx
new file mode 100644
index 00000000..e3b082c4
--- /dev/null
+++ b/components/MediaLayout.tsx
@@ -0,0 +1,104 @@
+import Link from 'next/link';
+import Image from 'next/image';
+import ReactPlayLogo from '../public/ReactPlayLogo.svg';
+import { HiArrowNarrowRight } from 'react-icons/hi';
+import { BiPlay } from 'react-icons/bi';
+
+const MediaLayout = ({ events, reactPlayLive, twitterSpaces, title, id }) => {
+ return (
+
+
+ {!title.split(' ')[1] ? (
+ {title}
+ ) : (
+
+ {title.split(' ')[0]} {' '}
+
+ {title.split(' ')[1]}
+
+
+ )}
+
+
+ {events?.map((event) => (
+
+
+
+
+
+ {event.description}
+
+
+ ))}
+ {reactPlayLive?.map((el) => (
+
+ ))}
+ {twitterSpaces?.map((el) => (
+
+ {/* Host */}
+
+ {/* logo */}
+
+
+ Host
+
+
+
{el.title}
+
{el.date}
+
+
+ ))}
+
+
+ {/* link to rest of the media */}
+
+
+ View all{' '}
+
+
+
+
+
+
+ );
+};
+
+export default MediaLayout;
diff --git a/components/OwnerFilter.js b/components/OwnerFilter.js
deleted file mode 100644
index c14740f5..00000000
--- a/components/OwnerFilter.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import * as React from "react";
-
-import { ToolBarButton } from "@/components/Buttons";
-
-export default function OwnerFilter({ onChange, selected }) {
- const [selectedButton, setSelectedButton] = React.useState("all");
-
- React.useEffect(() => {
- setSelectedButton(selected || "all");
- }, [selected]);
-
- const onButtonClicked = (type) => {
- setSelectedButton(type);
- if (onChange) {
- onChange(type);
- }
- };
-
- return (
-
- onButtonClicked("all")}
- // disabled={selected === "all" || selected === undefined}
- cclas={selectedButton === "all" ? `text-brand-hightlight` : ""}
- >
- All Ideas
-
- onButtonClicked("me")}
- // disabled={selected === "me"}
- cclas={selectedButton === "me" ? `text-brand-hightlight` : ""}
- >
- My Ideas
-
-
- );
-}
diff --git a/components/OwnerFilter.tsx b/components/OwnerFilter.tsx
new file mode 100644
index 00000000..e99f7882
--- /dev/null
+++ b/components/OwnerFilter.tsx
@@ -0,0 +1,37 @@
+import * as React from 'react';
+
+import { ToolBarButton } from '@/components/Buttons';
+
+export default function OwnerFilter({ onChange, selected }) {
+ const [selectedButton, setSelectedButton] = React.useState('all');
+
+ React.useEffect(() => {
+ setSelectedButton(selected || 'all');
+ }, [selected]);
+
+ const onButtonClicked = (type) => {
+ setSelectedButton(type);
+ if (onChange) {
+ onChange(type);
+ }
+ };
+
+ return (
+
+ onButtonClicked('all')}
+ // disabled={selected === "all" || selected === undefined}
+ cclas={selectedButton === 'all' ? `text-brand-hightlight` : ''}
+ >
+ All Ideas
+
+ onButtonClicked('me')}
+ // disabled={selected === "me"}
+ cclas={selectedButton === 'me' ? `text-brand-hightlight` : ''}
+ >
+ My Ideas
+
+
+ );
+}
diff --git a/components/Pagination.js b/components/Pagination.js
deleted file mode 100644
index 5b43d5ff..00000000
--- a/components/Pagination.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import { FiChevronsLeft, FiChevronsRight } from 'react-icons/fi';
-import ButtonGroup from '@mui/material/ButtonGroup';
-
-import { ToolBarButton } from './Buttons';
-
-export default function Pagination({ total, pagesize, onChange }) {
- const [current, setCurrent] = useState(1);
- const [pageCount, setPageCount] = useState(0);
-
- useEffect(() => {
- setPageCount(Math.ceil(total / pagesize) || 1);
- setCurrent(1);
- }, [total]);
- const onButtonClicked = (index) => {
- setCurrent(index);
- invokeChange(index);
- };
- const invokeChange = (index) => {
- if (onChange) {
- onChange(index);
- }
- };
-
- return (
-
-
- onButtonClicked(current - 1)}
- disabled={current === 1}>
-
-
-
- Page: {current} / {pageCount}
-
- onButtonClicked(current + 1)}
- disabled={current === pageCount}>
-
-
-
-
- );
-}
diff --git a/components/Pagination.tsx b/components/Pagination.tsx
new file mode 100644
index 00000000..eaf3d817
--- /dev/null
+++ b/components/Pagination.tsx
@@ -0,0 +1,46 @@
+import React, { useState, useEffect } from 'react';
+import { FiChevronsLeft, FiChevronsRight } from 'react-icons/fi';
+import ButtonGroup from '@mui/material/ButtonGroup';
+
+import { ToolBarButton } from './Buttons';
+
+export default function Pagination({ total, pagesize, onChange }) {
+ const [current, setCurrent] = useState(1);
+ const [pageCount, setPageCount] = useState(0);
+
+ useEffect(() => {
+ setPageCount(Math.ceil(total / pagesize) || 1);
+ setCurrent(1);
+ }, [total]);
+ const onButtonClicked = (index) => {
+ setCurrent(index);
+ invokeChange(index);
+ };
+ const invokeChange = (index) => {
+ if (onChange) {
+ onChange(index);
+ }
+ };
+
+ return (
+
+
+ onButtonClicked(current - 1)}
+ disabled={current === 1}
+ >
+
+
+
+ Page: {current} / {pageCount}
+
+ onButtonClicked(current + 1)}
+ disabled={current === pageCount}
+ >
+
+
+
+
+ );
+}
diff --git a/components/SortButtons.js b/components/SortButtons.js
deleted file mode 100644
index 8ee91296..00000000
--- a/components/SortButtons.js
+++ /dev/null
@@ -1,72 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import { FiArrowUp, FiArrowDown } from 'react-icons/fi';
-
-import { ToolBarButton } from '@/components/Buttons';
-
-export default function SortButtons({ buttons, selected, onChange }) {
- const [allButtons, setAllButtons] = useState([]);
-
- useEffect(() => {
- if (buttons.length) {
- allButtons.length = 0;
- buttons.forEach((b) => {
- const b_obj = {
- ...b,
- ...{
- asc: false,
- },
- };
- if (b.field === selected) {
- b.selected = false;
- }
- allButtons.push(b_obj);
- });
-
- if (selected === undefined) {
- allButtons[0].selected = true;
- setAllButtons([...allButtons]);
- }
- }
- }, []);
-
- const onButtonClicked = (button) => {
- const new_buttons = [];
- const selectedButton = {};
- allButtons.forEach((b) => {
- if (b.field === button.field) {
- if (b.selected) {
- b.asc = !b.asc;
- } else {
- b.selected = true;
- b.asc = true;
- }
- b.selected = true;
- selectedButton = { ...b };
- } else {
- b.selected = false;
- }
- new_buttons.push({ ...b });
- });
- setAllButtons(new_buttons);
-
- if (onChange) {
- onChange({ ...selectedButton });
- }
- };
-
- return (
-
- {allButtons.map((b, bi) => {
- return (
- onButtonClicked(b)}
- cclas={b.selected ? `text-brand-hightlight` : ''}>
- {b.label} {b.asc ? : }
-
- );
- })}
-
- );
-}
diff --git a/components/SortButtons.tsx b/components/SortButtons.tsx
new file mode 100644
index 00000000..f8b78d70
--- /dev/null
+++ b/components/SortButtons.tsx
@@ -0,0 +1,73 @@
+import React, { useState, useEffect } from 'react';
+import { FiArrowUp, FiArrowDown } from 'react-icons/fi';
+
+import { ToolBarButton } from '@/components/Buttons';
+
+export default function SortButtons({ buttons, selected, onChange }) {
+ const [allButtons, setAllButtons] = useState([]);
+
+ useEffect(() => {
+ if (buttons.length) {
+ allButtons.length = 0;
+ buttons.forEach((b) => {
+ const b_obj = {
+ ...b,
+ ...{
+ asc: false
+ }
+ };
+ if (b.field === selected) {
+ b.selected = false;
+ }
+ allButtons.push(b_obj);
+ });
+
+ if (selected === undefined) {
+ allButtons[0].selected = true;
+ setAllButtons([...allButtons]);
+ }
+ }
+ }, []);
+
+ const onButtonClicked = (button) => {
+ const new_buttons = [];
+ const selectedButton = {};
+ allButtons.forEach((b) => {
+ if (b.field === button.field) {
+ if (b.selected) {
+ b.asc = !b.asc;
+ } else {
+ b.selected = true;
+ b.asc = true;
+ }
+ b.selected = true;
+ selectedButton = { ...b };
+ } else {
+ b.selected = false;
+ }
+ new_buttons.push({ ...b });
+ });
+ setAllButtons(new_buttons);
+
+ if (onChange) {
+ onChange({ ...selectedButton });
+ }
+ };
+
+ return (
+
+ {allButtons.map((b, bi) => {
+ return (
+ onButtonClicked(b)}
+ cclas={b.selected ? `text-brand-hightlight` : ''}
+ >
+ {b.label} {b.asc ? : }
+
+ );
+ })}
+
+ );
+}
diff --git a/components/StatusFilter.js b/components/StatusFilter.js
deleted file mode 100644
index f536ea8f..00000000
--- a/components/StatusFilter.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import * as React from "react";
-import { ToolBarButton } from "@/components/Buttons";
-
-const STATUS_MAP = [
- {
- id: undefined,
- label: "All",
- },
- {
- id: "a177589f-25d9-4b67-adbd-310c1a8fc6e4",
- label: "Progressing",
- },
- {
- id: "ec1c0649-3b65-4809-92cf-9c4a6abdff1b",
- label: "Completed",
- },
-];
-export default function StatusFilter({ onChange, selected }) {
- const [selectedButton, setSelectedButton] = React.useState(undefined);
-
- React.useEffect(() => {
- setSelectedButton(selected || undefined);
- }, [selected]);
-
- const onButtonClicked = (type) => {
- setSelectedButton(type);
- if (onChange) {
- onChange(type);
- }
- };
-
- return (
-
- {STATUS_MAP.map((sm, smi) => {
- return (
- onButtonClicked(sm.id)}
- cclas={selectedButton === sm.id ? `text-brand-hightlight` : ""}
- >
- {" "}
- {sm.label}
-
- );
- })}
-
- );
-}
diff --git a/components/StatusFilter.tsx b/components/StatusFilter.tsx
new file mode 100644
index 00000000..1f65b58e
--- /dev/null
+++ b/components/StatusFilter.tsx
@@ -0,0 +1,48 @@
+import * as React from 'react';
+import { ToolBarButton } from '@/components/Buttons';
+
+const STATUS_MAP = [
+ {
+ id: undefined,
+ label: 'All'
+ },
+ {
+ id: 'a177589f-25d9-4b67-adbd-310c1a8fc6e4',
+ label: 'Progressing'
+ },
+ {
+ id: 'ec1c0649-3b65-4809-92cf-9c4a6abdff1b',
+ label: 'Completed'
+ }
+];
+export default function StatusFilter({ onChange, selected }) {
+ const [selectedButton, setSelectedButton] = React.useState(undefined);
+
+ React.useEffect(() => {
+ setSelectedButton(selected || undefined);
+ }, [selected]);
+
+ const onButtonClicked = (type) => {
+ setSelectedButton(type);
+ if (onChange) {
+ onChange(type);
+ }
+ };
+
+ return (
+
+ {STATUS_MAP.map((sm, smi) => {
+ return (
+ onButtonClicked(sm.id)}
+ cclas={selectedButton === sm.id ? `text-brand-hightlight` : ''}
+ >
+ {' '}
+ {sm.label}
+
+ );
+ })}
+
+ );
+}
diff --git a/components/common/About.js b/components/common/About.js
deleted file mode 100644
index 12b8d19f..00000000
--- a/components/common/About.js
+++ /dev/null
@@ -1,102 +0,0 @@
-import Image from "next/image";
-
-import Flower from "../../public/common/Flower.svg";
-import { LinkLabel } from "../LinkLabel";
-
-const About = ({ metainfo }) => {
- return (
- <>
- {metainfo.name ? (
-
-
-
-
-
-
-
- About this event
-
-
- {metainfo.about.texts[0]}
-
-
-
- {metainfo.about.texts[1]}
-
-
- {metainfo.about.bullets.map((b, b_i) => {
- return (
-
-
-
- );
- })}
-
-
-
-
- {/*
- Read More
- */}
-
-
-
-
-
- {metainfo.about.highlights[0]}
-
-
-
-
- {metainfo.about.highlights[1]}
-
-
-
-
- {metainfo.about.highlights[2]}
-
-
-
-
-
-
-
- ) : null}
- >
- );
-};
-
-export default About;
diff --git a/components/common/About.tsx b/components/common/About.tsx
new file mode 100644
index 00000000..30427ea6
--- /dev/null
+++ b/components/common/About.tsx
@@ -0,0 +1,102 @@
+import Image from 'next/image';
+
+import Flower from '../../public/common/Flower.svg';
+import { LinkLabel } from '../LinkLabel';
+
+const About = ({ metainfo }) => {
+ return (
+ <>
+ {metainfo.name ? (
+
+
+
+
+
+
+
+ About this event
+
+
+ {metainfo.about.texts[0]}
+
+
+
+ {metainfo.about.texts[1]}
+
+
+ {metainfo.about.bullets.map((b, b_i) => {
+ return (
+
+
+
+ );
+ })}
+
+
+
+
+ {/*
+ Read More
+ */}
+
+
+
+
+
+ {metainfo.about.highlights[0]}
+
+
+
+
+ {metainfo.about.highlights[1]}
+
+
+
+
+ {metainfo.about.highlights[2]}
+
+
+
+
+
+
+
+ ) : null}
+ >
+ );
+};
+
+export default About;
diff --git a/components/common/CTA.js b/components/common/CTA.js
deleted file mode 100644
index 75c26ecc..00000000
--- a/components/common/CTA.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import React from "react";
-import Image from "next/image";
-import { useRouter } from "next/router";
-
-
-const CTA = ({ image, metainfo }) => {
- const router = useRouter();
- const redirectToRegistration = () => {
- router.push("registration");
- };
-
- return (
-
-
-
-
-
-
-
-
- {metainfo.cta.title}
-
-
- {metainfo.cta.description}
-
-
-
-
-
- );
-};
-
-export default CTA;
diff --git a/components/common/CTA.tsx b/components/common/CTA.tsx
new file mode 100644
index 00000000..51fb65b4
--- /dev/null
+++ b/components/common/CTA.tsx
@@ -0,0 +1,50 @@
+import React from 'react';
+import Image from 'next/image';
+import { useRouter } from 'next/router';
+
+interface ICTAProps {
+ image?: string;
+ metainfo: {
+ name: string;
+ cta: {
+ title: string;
+ description: string;
+ };
+ };
+}
+
+const CTA = ({ image, metainfo }: ICTAProps) => {
+ const router = useRouter();
+ const redirectToRegistration = () => {
+ router.push('registration');
+ };
+
+ return (
+
+
+
+
+
+
+
+
+ {metainfo.cta.title}
+
+
+ {metainfo.cta.description}
+
+
+
+
+
+ );
+};
+
+export default CTA;
diff --git a/components/common/ChallengesAndPrizes.js b/components/common/ChallengesAndPrizes.js
deleted file mode 100644
index 8c37caef..00000000
--- a/components/common/ChallengesAndPrizes.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import Image from "next/image";
-
-import GradientAndSmallTriangle from "../../public/common/GradientAndSmallTriangle.svg";
-
-const ChallengesAndPrizes = () => {
- return (
-
-
-
-
-
-
- Challenges & Prizes
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
- eiusmod tempor incididunt ut labore et dolore magna aliqua. Bibendum
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
- eiusmod tempor incididunt ut labore et dolore magna aliqua. Bibendum
-
-
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
- eiusmod tempor incididunt ut labore et dolore magna aliqua. Bibendum
-
-
-
-
- );
-};
-
-export default ChallengesAndPrizes;
diff --git a/components/common/ChallengesAndPrizes.tsx b/components/common/ChallengesAndPrizes.tsx
new file mode 100644
index 00000000..85f737cb
--- /dev/null
+++ b/components/common/ChallengesAndPrizes.tsx
@@ -0,0 +1,48 @@
+import Image from 'next/image';
+
+import GradientAndSmallTriangle from '../../public/common/GradientAndSmallTriangle.svg';
+
+const ChallengesAndPrizes = () => {
+ return (
+
+
+
+
+
+ Challenges & Prizes
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+ tempor incididunt ut labore et dolore magna aliqua. Bibendum
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+ tempor incididunt ut labore et dolore magna aliqua. Bibendum
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+ tempor incididunt ut labore et dolore magna aliqua. Bibendum
+
+
+
+
+ );
+};
+
+export default ChallengesAndPrizes;
diff --git a/components/common/FAQs.js b/components/common/FAQs.js
deleted file mode 100644
index f76bce72..00000000
--- a/components/common/FAQs.js
+++ /dev/null
@@ -1,77 +0,0 @@
-import { useState, useRef, useEffect } from "react";
-import { FiPlus, FiMinus } from "react-icons/fi";
-
-const FAQs = ({ metainfo }) => {
- const [active, setActive] = useState("false");
-
- const contentRef = useRef(null);
-
- useEffect(() => {
- contentRef.current.style.maxHeight = active
- ? `${contentRef.current.scrollHeight}px`
- : "0px";
- }, [contentRef, active]);
-
- const toggleAnswer = (index) => {
- if (active === index) {
- return setActive("0");
- }
- setActive(index);
- };
-
- return (
-
-
- FAQs
-
-
- {metainfo.faqs.map((faq, index) => (
-
-
toggleAnswer(index)}
- className="inline-flex justify-between items-center w-full cursor-pointer"
- >
-
- {faq.question}
-
- {active === index ? (
- toggleAnswer(index)}
- >
-
-
- ) : (
- toggleAnswer(index)}
- >
-
-
- )}
-
-
-
- {faq.answer}
-
-
- ))}
-
-
- );
-};
-
-export default FAQs;
diff --git a/components/common/FAQs.tsx b/components/common/FAQs.tsx
new file mode 100644
index 00000000..ed57f622
--- /dev/null
+++ b/components/common/FAQs.tsx
@@ -0,0 +1,77 @@
+import { useState, useRef, useEffect } from 'react';
+import { FiPlus, FiMinus } from 'react-icons/fi';
+
+const FAQs = ({ metainfo }) => {
+ const [active, setActive] = useState('false');
+
+ const contentRef = useRef(null);
+
+ useEffect(() => {
+ contentRef.current.style.maxHeight = active
+ ? `${contentRef.current.scrollHeight}px`
+ : '0px';
+ }, [contentRef, active]);
+
+ const toggleAnswer = (index) => {
+ if (active === index) {
+ return setActive('0');
+ }
+ setActive(index);
+ };
+
+ return (
+
+
+ FAQs
+
+
+ {metainfo.faqs.map((faq, index) => (
+
+
toggleAnswer(index)}
+ className="inline-flex justify-between items-center w-full cursor-pointer"
+ >
+
+ {faq.question}
+
+ {active === index ? (
+ toggleAnswer(index)}
+ >
+
+
+ ) : (
+ toggleAnswer(index)}
+ >
+
+
+ )}
+
+
+
+ {faq.answer}
+
+
+ ))}
+
+
+ );
+};
+
+export default FAQs;
diff --git a/components/common/Hero.js b/components/common/Hero.js
deleted file mode 100644
index 2cc87c55..00000000
--- a/components/common/Hero.js
+++ /dev/null
@@ -1,195 +0,0 @@
-import { useEffect } from "react";
-import Image from "next/image";
-import { useRouter } from "next/router";
-import { BiRightArrowAlt } from "react-icons/bi";
-import { GiPartyPopper } from "react-icons/gi";
-
-import {
- PrimaryButton,
- SecondaryLink,
- SecondaryOutlinedButton,
-} from "../Buttons";
-
-import Flower from "../../public/common/Flower.svg";
-import HeroLines from "../../public/common/HeroLines.svg";
-import RadialGradient from "../../public/common/RadialGradient.svg";
-import ReactPlayLogo from "../../public/ReactPlayLogo.svg";
-
-const Hero = ({ metainfo, theHustleHomePage }) => {
- const router = useRouter();
-
- const redirectToRegistration = () => {
- router.push("registration");
- };
-
- const redirectToSubmissions = () => {
- router.push(metainfo.submissionurl);
- };
-
- return (
- <>
- {!theHustleHomePage ? (
- // this portion executes when the Hero component is referenced from the twoplaysamonth component
- metainfo.name ? (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {metainfo.subtitle}
-
-
-
- {metainfo.completed ? (
-
router.push("#winners")}
- >
- Winners
-
-
- ) : null}
- {metainfo.result_links ? (
-
- {metainfo.result_links.map((link, link_i) => {
- return (
-
-
- {link.name}
-
-
- );
- })}
-
- ) : null}
-
-
- {metainfo.started ? (
-
- redirectToSubmissions()}
- >
- View Submissions
-
-
-
- ) : null}
-
-
-
-
-
-
- ) : null
- ) : // this portion executes when the Hero component is referenced from the Banner component of 'pages/index.js' component
- metainfo.name ? (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {metainfo.subtitle}
-
-
-
-
- {/* TODO: Insert button component */}
-
-
-
- ) : null}
- >
- );
-};
-
-export default Hero;
diff --git a/components/common/Hero.tsx b/components/common/Hero.tsx
new file mode 100644
index 00000000..26e4465c
--- /dev/null
+++ b/components/common/Hero.tsx
@@ -0,0 +1,201 @@
+import { useEffect } from 'react';
+import Image from 'next/image';
+import { useRouter } from 'next/router';
+import { BiRightArrowAlt } from 'react-icons/bi';
+import { GiPartyPopper } from 'react-icons/gi';
+
+import { PrimaryButton, SecondaryLink, SecondaryOutlinedButton } from '../Buttons';
+
+import Flower from '../../public/common/Flower.svg';
+import HeroLines from '../../public/common/HeroLines.svg';
+import RadialGradient from '../../public/common/RadialGradient.svg';
+import ReactPlayLogo from '../../public/ReactPlayLogo.svg';
+
+interface IHeroProps {
+ metainfo: {
+ name?: string;
+ keywords?: string;
+ description?: string;
+ submissionurl?: string;
+ subtitle?: string;
+ completed?: boolean;
+ result_links?: {
+ link: string;
+ name: string;
+ target: string;
+ }[];
+ links?: {
+ name: string;
+ href: string;
+ }[];
+ started: boolean;
+ };
+ theHustleHomePage?: boolean;
+}
+
+const Hero = ({ metainfo, theHustleHomePage }: IHeroProps) => {
+ const router = useRouter();
+
+ const redirectToRegistration = () => {
+ router.push('registration');
+ };
+
+ const redirectToSubmissions = () => {
+ router.push(metainfo.submissionurl);
+ };
+
+ return (
+ <>
+ {!theHustleHomePage ? (
+ // this portion executes when the Hero component is referenced from the twoplaysamonth component
+ metainfo.name ? (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {metainfo.subtitle}
+
+
+
+ {metainfo.completed ? (
+
router.push('#winners')}
+ >
+ Winners
+
+
+ ) : null}
+ {metainfo.result_links ? (
+
+ {metainfo.result_links.map((link, link_i) => {
+ return (
+
+
+ {link.name}
+
+
+ );
+ })}
+
+ ) : null}
+
+
+ {metainfo.started ? (
+
+ redirectToSubmissions()}
+ >
+ View Submissions
+
+
+
+ ) : null}
+
+
+
+
+
+
+ ) : null
+ ) : // this portion executes when the Hero component is referenced from the Banner component of 'pages/index.js' component
+ metainfo.name ? (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {metainfo.subtitle}
+
+
+
+
+ {/* TODO: Insert button component */}
+
+
+
+ ) : null}
+ >
+ );
+};
+
+export default Hero;
diff --git a/components/common/Judges.js b/components/common/Judges.js
deleted file mode 100644
index 68a2c12b..00000000
--- a/components/common/Judges.js
+++ /dev/null
@@ -1,68 +0,0 @@
-import Image from "next/image";
-import { FaTwitter } from "react-icons/fa";
-
-import DottedPattern from "../../public/common/DottedPattern.svg";
-import Lines from "../../public/common/Lines.svg";
-
-
-const Judges = ({ metainfo }) => {
- return (
-
-
-
-
-
-
-
-
-
- Judges & Mentors
-
-
- {metainfo.judges.map((judge, index) => (
-
- ))}
-
-
- );
-};
-
-export default Judges;
diff --git a/components/common/Judges.tsx b/components/common/Judges.tsx
new file mode 100644
index 00000000..009680be
--- /dev/null
+++ b/components/common/Judges.tsx
@@ -0,0 +1,61 @@
+import Image from 'next/image';
+import { FaTwitter } from 'react-icons/fa';
+
+import DottedPattern from '../../public/common/DottedPattern.svg';
+import Lines from '../../public/common/Lines.svg';
+
+const Judges = ({ metainfo }) => {
+ return (
+
+
+
+
+
+
+
+
+
+ Judges & Mentors
+
+
+ {metainfo.judges.map((judge, index) => (
+
+ ))}
+
+
+ );
+};
+
+export default Judges;
diff --git a/components/common/Partners.js b/components/common/Partners.js
deleted file mode 100644
index 3ce72528..00000000
--- a/components/common/Partners.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import Image from "next/image";
-
-const Partners = ({ metainfo }) => {
- if (!metainfo || !metainfo.partners) {
- return null;
- }
- return (
-
- );
-};
-
-export default Partners;
diff --git a/components/common/Partners.tsx b/components/common/Partners.tsx
new file mode 100644
index 00000000..4cbcb9c6
--- /dev/null
+++ b/components/common/Partners.tsx
@@ -0,0 +1,61 @@
+import Image from 'next/image';
+
+const Partners = ({ metainfo }) => {
+ if (!metainfo || !metainfo.partners) {
+ return null;
+ }
+ return (
+
+ );
+};
+
+export default Partners;
diff --git a/components/common/Winners.js b/components/common/Winners.js
deleted file mode 100644
index ed90a40b..00000000
--- a/components/common/Winners.js
+++ /dev/null
@@ -1,276 +0,0 @@
-import Image from "next/image";
-import { useEffect} from "react";
-import DottedPattern from "../../public/common/DottedPattern.svg";
-import Lines from "../../public/common/Lines.svg";
-import { FaTwitter, FaGithub } from "react-icons/fa";
-import { MdOutlineArticle } from "react-icons/md";
-import ConfettiGenerator from "confetti-js";
-import Link from "next/link";
-
-const Winners = ({ winners, mentions }) => {
- useEffect(() => {
- const confettiSettings = {
- target: "winners-canvas",
- max: "110",
- size: "1.2",
- clock: "30",
- rotate: true,
- colors: [
- [0, 242, 254],
- [104, 253, 198],
- ],
- };
- const confetti = new ConfettiGenerator(confettiSettings);
- confetti.render();
-
- return () => confetti.clear();
- }, []);
-
- const email2Slug = (email) => {
- return encodeURIComponent(email);
- };
-
- return (
-
-
-
-
-
-
-
-
-
-
- Winners
-
-
- {winners.map((winner, index) => (
-
-
-
-
- {winner.position}
-
-
- {winner.position === "1"
- ? "st"
- : winner.position === "2"
- ? "nd"
- : "rd"}
-
-
-
- {winner.twitter ? (
- <>
-
- >
- ) : null}
-
-
- {winner.name}
-
-
-
- {winner.projectName}
-
-
-
- ))}
-
-
-
- Honourable Mentions
-
-
- {mentions.map((mention, index) => (
-
- ))}
-
-
-
- );
-};
-
-export default Winners;
diff --git a/components/common/Winners.tsx b/components/common/Winners.tsx
new file mode 100644
index 00000000..92a49378
--- /dev/null
+++ b/components/common/Winners.tsx
@@ -0,0 +1,271 @@
+import Image from 'next/image';
+import { useEffect } from 'react';
+import DottedPattern from '../../public/common/DottedPattern.svg';
+import Lines from '../../public/common/Lines.svg';
+import { FaTwitter, FaGithub } from 'react-icons/fa';
+import { MdOutlineArticle } from 'react-icons/md';
+import ConfettiGenerator from 'confetti-js';
+import Link from 'next/link';
+
+const Winners = ({ winners, mentions }) => {
+ useEffect(() => {
+ const confettiSettings = {
+ target: 'winners-canvas',
+ max: '110',
+ size: '1.2',
+ clock: '30',
+ rotate: true,
+ colors: [
+ [0, 242, 254],
+ [104, 253, 198]
+ ]
+ };
+ const confetti = new ConfettiGenerator(confettiSettings);
+ confetti.render();
+
+ return () => confetti.clear();
+ }, []);
+
+ const email2Slug = (email) => {
+ return encodeURIComponent(email);
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+
+ Winners
+
+
+ {winners.map((winner, index) => (
+
+
+
+
+ {winner.position}
+
+
+ {winner.position === '1'
+ ? 'st'
+ : winner.position === '2'
+ ? 'nd'
+ : 'rd'}
+
+
+
+ {winner.twitter ? (
+ <>
+
+ >
+ ) : null}
+
+
+ {winner.name}
+
+
+
+ {winner.projectName}
+
+
+
+ ))}
+
+
+
+ Honourable Mentions
+
+
+ {mentions.map((mention, index) => (
+
+ ))}
+
+
+
+ );
+};
+
+export default Winners;
diff --git a/components/common/index.js b/components/common/index.js
deleted file mode 100644
index 17136015..00000000
--- a/components/common/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export * from "./About";
-export * from "./CTA";
-export * from "./FAQs";
-export * from "./Judges";
-export * from "./Hero";
-export * from "./Partners";
-export * from "./Winners";
diff --git a/components/common/index.tsx b/components/common/index.tsx
new file mode 100644
index 00000000..42f26cb0
--- /dev/null
+++ b/components/common/index.tsx
@@ -0,0 +1,7 @@
+export * from './About';
+export * from './CTA';
+export * from './FAQs';
+export * from './Judges';
+export * from './Hero';
+export * from './Partners';
+export * from './Winners';
diff --git a/components/form-builder/index.js b/components/form-builder/index.js
deleted file mode 100644
index 632011ef..00000000
--- a/components/form-builder/index.js
+++ /dev/null
@@ -1,163 +0,0 @@
-import { useEffect, useState } from 'react';
-import { TextField, FormControl, Autocomplete, Box } from '@mui/material';
-import { useUserData } from '@nhost/nextjs';
-import * as _ from 'lodash';
-
-const FormBuilder = ({ fields, data, onChange, disabled }) => {
- const userData = useUserData();
- const [formData, setFormData] = useState({});
- useEffect(() => {
- setFormData({ ...data });
- }, [data]);
-
- const onDataChanged = (key, value) => {
- formData[key] = value;
- setFormData({ ...formData });
- if (onChange) {
- onChange(formData);
- }
- };
-
- const getSelectedItem = (options, value) => {
- const item = options.find((opt) => {
- if (opt.id === value) return opt;
- });
- return item || '';
- };
-
- const renderField = (field) => {
- switch (field.type) {
- case 'input':
- return (
- {
- onDataChanged(field.datafield, e.target.value);
- }}
- />
- );
-
- case 'select':
- return (
-
- option.name || option[field.fieldName] || option
- }
- value={getSelectedItem(
- field.options,
- formData[field.datafield]
- )}
- disabled={disabled}
- filterSelectedOptions
- multiple={field.multiple}
- freeSolo={field.freeSolo}
- onChange={(e, newValue) => {
- let updatedval = newValue;
- onDataChanged(field.datafield, updatedval.id);
- }}
- renderInput={(params) => (
-
- )}
- />
- );
- case 'userlist':
- return (
-
-
u.id !== userData.id
- )
- : []
- }
- disabled={disabled}
- getOptionLabel={(option) =>
- option.name || option[field.fieldName] || option
- }
- filterSelectedOptions
- value={getSelectedItem(
- field.options,
- formData[field.datafield]
- )}
- multiple={field.multiple}
- freeSolo={field.freeSolo}
- renderOption={(props, option) => (
- img': { mr: 2, flexShrink: 0 } }}
- {...props}>
-
- {option.displayName}
-
- )}
- onChange={(e, newValue) => {
- let updatedval = newValue;
- onDataChanged(field.datafield, updatedval?.id);
- }}
- renderInput={(params) => (
-
-
-
- )}
- />
-
- You are already a member, select another person
- [optional] as your partner
-
-
- );
- default:
- return <>>;
- }
- };
-
- const renderForm = () => {
- return (
- <>
-
- {fields.map((field, field_key) => {
- return (
-
-
- {field.display}
- {field.required ? '*' : ''}
-
-
{renderField(field)}
-
- );
- })}
- {' '}
- >
- );
- };
-
- return <>{renderForm()}>;
-};
-
-export default FormBuilder;
diff --git a/components/form-builder/index.tsx b/components/form-builder/index.tsx
new file mode 100644
index 00000000..b7b25440
--- /dev/null
+++ b/components/form-builder/index.tsx
@@ -0,0 +1,153 @@
+import { useEffect, useState } from 'react';
+import { TextField, FormControl, Autocomplete, Box } from '@mui/material';
+import { useUserData } from '@nhost/nextjs';
+import * as _ from 'lodash';
+
+const FormBuilder = ({ fields, data, onChange, disabled }) => {
+ const userData = useUserData();
+ const [formData, setFormData] = useState({});
+
+ useEffect(() => {
+ setFormData({ ...data });
+ }, [data]);
+
+ const onDataChanged = (key, value) => {
+ formData[key] = value;
+ setFormData({ ...formData });
+ if (onChange) {
+ onChange(formData);
+ }
+ };
+
+ const getSelectedItem = (options, value) => {
+ const item = options.find((opt) => {
+ if (opt.id === value) return opt;
+ });
+ return item || '';
+ };
+
+ const renderField = (field) => {
+ switch (field.type) {
+ case 'input':
+ return (
+ {
+ onDataChanged(field.datafield, e.target.value);
+ }}
+ />
+ );
+
+ case 'select':
+ return (
+
+ option.name || option[field.fieldName] || option
+ }
+ value={getSelectedItem(field.options, formData[field.datafield])}
+ disabled={disabled}
+ filterSelectedOptions
+ multiple={field.multiple}
+ freeSolo={field.freeSolo}
+ onChange={(e, newValue) => {
+ let updatedval = newValue;
+ onDataChanged(field.datafield, updatedval.id);
+ }}
+ renderInput={(params) => (
+
+ )}
+ />
+ );
+ case 'userlist':
+ return (
+
+
u.id !== userData.id)
+ : []
+ }
+ disabled={disabled}
+ getOptionLabel={(option) =>
+ option.name || option[field.fieldName] || option
+ }
+ filterSelectedOptions
+ value={getSelectedItem(field.options, formData[field.datafield])}
+ multiple={field.multiple}
+ freeSolo={field.freeSolo}
+ renderOption={(props, option) => (
+ img': { mr: 2, flexShrink: 0 } }}
+ {...props}
+ >
+
+ {option.displayName}
+
+ )}
+ onChange={(e, newValue) => {
+ let updatedval = newValue;
+ onDataChanged(field.datafield, updatedval?.id);
+ }}
+ renderInput={(params) => (
+
+
+
+ )}
+ />
+
+ You are already a member, select another person [optional] as your
+ partner
+
+
+ );
+ default:
+ return <>>;
+ }
+ };
+
+ const renderForm = () => {
+ return (
+ <>
+
+ {fields.map((field, field_key) => {
+ return (
+
+
+ {field.display}
+ {field.required ? '*' : ''}
+
+
{renderField(field)}
+
+ );
+ })}
+ {' '}
+ >
+ );
+ };
+
+ return <>{renderForm()}>;
+};
+
+export default FormBuilder;
diff --git a/components/interactions/index.js b/components/interactions/index.js
deleted file mode 100644
index 3d809b23..00000000
--- a/components/interactions/index.js
+++ /dev/null
@@ -1,259 +0,0 @@
-import React, { useEffect, useState } from 'react';
-import Image from 'next/image';
-import { useAuthenticationStatus, useUserData } from '@nhost/nextjs';
-import { TextField } from '@mui/material';
-import Snackbar from '@mui/material/Snackbar';
-import MuiAlert from '@mui/material/Alert';
-import { FiThumbsUp } from 'react-icons/fi';
-
-import styles from '@/styles/idea.module.css';
-import { NHOST } from '@/services/nhost';
-import {
- PrimaryButton,
- SecondaryOutlinedButton,
-} from '../Buttons';
-import { insert_comment, like_idea } from '@/services/graphql/interactions';
-import { time_since } from '@/services/util/time';
-import { escape_new_line, unescape_new_line } from '@/services/util/string';
-
-const Alert = React.forwardRef(function Alert(props, ref) {
- return ;
-});
-
-const Interaction = ({ data, doRefresh }) => {
- const { isAuthenticated, isLoading } = useAuthenticationStatus();
- const [loading, setLoading] = useState();
- const userData = useUserData();
- const [commentText, setCommentText] = useState();
- const [isLiked, setIsLiked] = useState(false);
- const [alertOpen, setAlertOpen] = useState(false);
- const [alertMsg, setAlertMsg] = useState('');
-
- useEffect(() => {
- if (userData) {
- const filter_user = data.idea_like_map.filter(
- (lm) => lm.user_id === userData.id
- )[0];
- if (filter_user) {
- setIsLiked(true);
- }
- }
- }, [userData, data]);
- const onCommentSubmit = () => {
- setLoading(true);
- insert_comment(escape_new_line(commentText), data.id, userData.id).then(
- (res) => {
- setLoading(false);
- setAlertMsg('Successfully posted your comment');
- setAlertOpen(true);
- setCommentText('');
- if (doRefresh) {
- doRefresh();
- }
- }
- );
- };
-
- const onLikeClicked = () => {
- setLoading(true);
- like_idea(data.id, userData.id)
- .then((res) => {
- setLoading(false);
- setAlertMsg('You liked this idea');
- setAlertOpen(true);
- if (doRefresh) {
- doRefresh();
- }
- })
- .catch((err) => {
- // Do nothing
- if (doRefresh) {
- doRefresh();
- }
- });
- };
-
- const handleClose = (event, reason) => {
- if (reason === 'clickaway') {
- return;
- }
-
- setAlertOpen(false);
- };
-
- const onAuthenticate = () => {
- if (typeof window !== 'undefined') {
- const protocol = process.env.NEXT_PUBLIC_PROTOCOL
- ? process.env.NEXT_PUBLIC_PROTOCOL
- : 'https';
- const host = window.location.hostname;
- const port = process.env.NEXT_PUBLIC_DEV_PORT
- ? `:${process.env.NEXT_PUBLIC_DEV_PORT}`
- : '';
- const external_path = NHOST.AUTH_URL(
- `${protocol}://${host}${port}/hackrplay/2022/ideas/${data.id}`
- );
- window.location = external_path;
- }
- };
-
- if (isLoading) {
- return (
-
-
-
- Loading authentication information. Please wait.
-
-
-
- );
- }
-
- return (
-
-
-
- {data.idea_comments_map.length} COMMENT(S)
-
-
- {isAuthenticated ? (
- <>
- {isLiked ? (
-
-
- LIKED
-
- ) : (
-
onLikeClicked()}
- className='flex px-4 justify-center items-center text-white text-xl'>
- Like It
-
- )}
- >
- ) : null}
-
-
-
- {data.idea_comments_map.length === 0 ? (
-
- NO COMMENTS HAS BEEN ADDED
-
- ) : (
-
- {data.idea_comments_map.map((comment, ci) => {
- return (
-
-
-
-
-
-
-
- {
- comment
- .idea_comment_user_map
- .displayName
- }
-
-
- {time_since(
- new Date(comment.date)
- )}{' '}
- ago
-
-
-
- {unescape_new_line(comment.comment)}
-
-
-
- );
- })}
-
- )}
-
-
- {isAuthenticated ? (
-
-
-
-
-
-
-
-
- {userData.displayName}
-
-
-
-
-
- setCommentText(v.target.value)
- }
- value={commentText}
- />
-
-
-
-
onCommentSubmit()}>
- Comment
-
-
-
- ) : (
-
onAuthenticate()}
- className='w-full h-10 text-[#ffffff99] flex justify-center items-center rounded-md border-2 border-sky-400'>
- You need to login to comment or like ideas
-
- )}
-
-
-
- {alertMsg}
-
-
-
- );
-};
-export default Interaction;
diff --git a/components/interactions/index.tsx b/components/interactions/index.tsx
new file mode 100644
index 00000000..df6aeb70
--- /dev/null
+++ b/components/interactions/index.tsx
@@ -0,0 +1,232 @@
+import React, { useEffect, useState } from 'react';
+import Image from 'next/image';
+import { useAuthenticationStatus, useUserData } from '@nhost/nextjs';
+import { TextField } from '@mui/material';
+import Snackbar from '@mui/material/Snackbar';
+import MuiAlert from '@mui/material/Alert';
+import { FiThumbsUp } from 'react-icons/fi';
+
+import styles from '@/styles/idea.module.css';
+import { NHOST } from '@/services/nhost';
+import { PrimaryButton, SecondaryOutlinedButton } from '../Buttons';
+import { insert_comment, like_idea } from '@/services/graphql/interactions';
+import { time_since } from '@/services/util/time';
+import { escape_new_line, unescape_new_line } from '@/services/util/string';
+
+const Alert = React.forwardRef(function Alert(props, ref) {
+ return ;
+});
+
+const Interaction = ({ data, doRefresh }) => {
+ const { isAuthenticated, isLoading } = useAuthenticationStatus();
+ const [loading, setLoading] = useState();
+ const userData = useUserData();
+ const [commentText, setCommentText] = useState();
+ const [isLiked, setIsLiked] = useState(false);
+ const [alertOpen, setAlertOpen] = useState(false);
+ const [alertMsg, setAlertMsg] = useState('');
+
+ useEffect(() => {
+ if (userData) {
+ const filter_user = data.idea_like_map.filter((lm) => lm.user_id === userData.id)[0];
+ if (filter_user) {
+ setIsLiked(true);
+ }
+ }
+ }, [userData, data]);
+ const onCommentSubmit = () => {
+ setLoading(true);
+ insert_comment(escape_new_line(commentText), data.id, userData.id).then((res) => {
+ setLoading(false);
+ setAlertMsg('Successfully posted your comment');
+ setAlertOpen(true);
+ setCommentText('');
+ if (doRefresh) {
+ doRefresh();
+ }
+ });
+ };
+
+ const onLikeClicked = () => {
+ setLoading(true);
+ like_idea(data.id, userData.id)
+ .then((res) => {
+ setLoading(false);
+ setAlertMsg('You liked this idea');
+ setAlertOpen(true);
+ if (doRefresh) {
+ doRefresh();
+ }
+ })
+ .catch((err) => {
+ // Do nothing
+ if (doRefresh) {
+ doRefresh();
+ }
+ });
+ };
+
+ const handleClose = (event, reason) => {
+ if (reason === 'clickaway') {
+ return;
+ }
+
+ setAlertOpen(false);
+ };
+
+ const onAuthenticate = () => {
+ if (typeof window !== 'undefined') {
+ const protocol = process.env.NEXT_PUBLIC_PROTOCOL
+ ? process.env.NEXT_PUBLIC_PROTOCOL
+ : 'https';
+ const host = window.location.hostname;
+ const port = process.env.NEXT_PUBLIC_DEV_PORT
+ ? `:${process.env.NEXT_PUBLIC_DEV_PORT}`
+ : '';
+ const external_path = NHOST.AUTH_URL(
+ `${protocol}://${host}${port}/hackrplay/2022/ideas/${data.id}`
+ );
+ window.location = external_path;
+ }
+ };
+
+ if (isLoading) {
+ return (
+
+
+
+ Loading authentication information. Please wait.
+
+
+
+ );
+ }
+
+ return (
+
+
+
+ {data.idea_comments_map.length} COMMENT(S)
+
+
+ {isAuthenticated ? (
+ <>
+ {isLiked ? (
+
+
+ LIKED
+
+ ) : (
+
onLikeClicked()}
+ className="flex px-4 justify-center items-center text-white text-xl"
+ >
+ Like It
+
+ )}
+ >
+ ) : null}
+
+
+
+ {data.idea_comments_map.length === 0 ? (
+
+ NO COMMENTS HAS BEEN ADDED
+
+ ) : (
+
+ {data.idea_comments_map.map((comment, ci) => {
+ return (
+
+
+
+
+
+
+
+ {comment.idea_comment_user_map.displayName}
+
+
+ {time_since(new Date(comment.date))} ago
+
+
+
+ {unescape_new_line(comment.comment)}
+
+
+
+ );
+ })}
+
+ )}
+
+
+ {isAuthenticated ? (
+
+
+
+
+
+
+
+
+ {userData.displayName}
+
+
+
+
+ setCommentText(v.target.value)}
+ value={commentText}
+ />
+
+
+
+
onCommentSubmit()}
+ >
+ Comment
+
+
+
+ ) : (
+
onAuthenticate()}
+ className="w-full h-10 text-[#ffffff99] flex justify-center items-center rounded-md border-2 border-sky-400"
+ >
+ You need to login to comment or like ideas
+
+ )}
+
+
+
+ {alertMsg}
+
+
+
+ );
+};
+export default Interaction;
diff --git a/components/status-bar/StatusBar.js b/components/status-bar/StatusBar.js
deleted file mode 100644
index e0b8a179..00000000
--- a/components/status-bar/StatusBar.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import * as _ from 'lodash';
-import styles from '@/styles/idea.module.css';
-import moment from 'moment';
-
-const StatusBar = ({ map, value }) => {
- return (
-
- );
-};
-
-export default StatusBar;
diff --git a/components/status-bar/StatusBar.tsx b/components/status-bar/StatusBar.tsx
new file mode 100644
index 00000000..e283a975
--- /dev/null
+++ b/components/status-bar/StatusBar.tsx
@@ -0,0 +1,36 @@
+import * as _ from 'lodash';
+import styles from '@/styles/idea.module.css';
+import moment from 'moment';
+
+const StatusBar = ({ map, value }) => {
+ return (
+
+ );
+};
+
+export default StatusBar;
diff --git a/jsconfig.json b/jsconfig.json
index 96c327e8..69a21b87 100644
--- a/jsconfig.json
+++ b/jsconfig.json
@@ -1,11 +1,11 @@
{
- "compilerOptions": {
- "baseUrl": ".",
- "paths": {
- "@/components/*": ["components/*"],
- "@/services/*": ["services/*"],
- "@/styles/*": ["styles/*"],
- "@/public/*": ["public/*"]
- }
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "@/components/*": ["components/*"],
+ "@/services/*": ["services/*"],
+ "@/styles/*": ["styles/*"],
+ "@/public/*": ["public/*"]
}
-}
\ No newline at end of file
+ }
+}
diff --git a/next-env.d.ts b/next-env.d.ts
new file mode 100644
index 00000000..4f11a03d
--- /dev/null
+++ b/next-env.d.ts
@@ -0,0 +1,5 @@
+///
+///
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/package-lock.json b/package-lock.json
index cf4cc913..e97ce71e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -26,11 +26,22 @@
"react-icons": "^4.4.0"
},
"devDependencies": {
+ "@types/node": "^18.15.11",
+ "@typescript-eslint/eslint-plugin": "^5.58.0",
"autoprefixer": "^10.4.8",
- "eslint": "8.23.0",
+ "eslint": "^8.38.0",
"eslint-config-next": "12.2.5",
+ "eslint-config-prettier": "^8.8.0",
+ "eslint-config-standard-with-typescript": "^34.0.1",
+ "eslint-plugin-import": "^2.27.5",
+ "eslint-plugin-n": "^15.7.0",
+ "eslint-plugin-prettier": "^4.2.1",
+ "eslint-plugin-promise": "^6.1.1",
+ "eslint-plugin-react": "^7.32.2",
"postcss": "^8.4.16",
- "tailwindcss": "^3.1.8"
+ "prettier": "2.8.7",
+ "tailwindcss": "^3.1.8",
+ "typescript": "^5.0.4"
}
},
"node_modules/@ampproject/remapping": {
@@ -672,16 +683,40 @@
"resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz",
"integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg=="
},
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz",
+ "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
"node_modules/@eslint/eslintrc": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz",
- "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz",
+ "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.4.0",
- "globals": "^13.15.0",
+ "espree": "^9.5.1",
+ "globals": "^13.19.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.0",
@@ -695,30 +730,29 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/@eslint/js": {
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz",
+ "integrity": "sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
"node_modules/@humanwhocodes/config-array": {
- "version": "0.10.4",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz",
- "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==",
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
"dev": true,
"dependencies": {
"@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
- "minimatch": "^3.0.4"
+ "minimatch": "^3.0.5"
},
"engines": {
"node": ">=10.10.0"
}
},
- "node_modules/@humanwhocodes/gitignore-to-minimatch": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
- "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
@@ -1367,12 +1401,24 @@
"tslib": "^2.4.0"
}
},
+ "node_modules/@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "dev": true
+ },
"node_modules/@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
"dev": true
},
+ "node_modules/@types/node": {
+ "version": "18.15.11",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz",
+ "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==",
+ "dev": true
+ },
"node_modules/@types/parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
@@ -1414,15 +1460,55 @@
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
"integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
},
+ "node_modules/@types/semver": {
+ "version": "7.3.13",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
+ "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz",
+ "integrity": "sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.58.0",
+ "@typescript-eslint/type-utils": "5.58.0",
+ "@typescript-eslint/utils": "5.58.0",
+ "debug": "^4.3.4",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "natural-compare-lite": "^1.4.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@typescript-eslint/parser": {
- "version": "5.36.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.36.1.tgz",
- "integrity": "sha512-/IsgNGOkBi7CuDfUbwt1eOqUXF9WGVBW9dwEe1pi+L32XrTsZIgmDFIi2RxjzsvB/8i+MIf5JIoTEH8LOZ368A==",
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.58.0.tgz",
+ "integrity": "sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "5.36.1",
- "@typescript-eslint/types": "5.36.1",
- "@typescript-eslint/typescript-estree": "5.36.1",
+ "@typescript-eslint/scope-manager": "5.58.0",
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/typescript-estree": "5.58.0",
"debug": "^4.3.4"
},
"engines": {
@@ -1442,13 +1528,13 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "5.36.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.36.1.tgz",
- "integrity": "sha512-pGC2SH3/tXdu9IH3ItoqciD3f3RRGCh7hb9zPdN2Drsr341zgd6VbhP5OHQO/reUqihNltfPpMpTNihFMarP2w==",
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz",
+ "integrity": "sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.36.1",
- "@typescript-eslint/visitor-keys": "5.36.1"
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/visitor-keys": "5.58.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1458,10 +1544,37 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.58.0.tgz",
+ "integrity": "sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "5.58.0",
+ "@typescript-eslint/utils": "5.58.0",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@typescript-eslint/types": {
- "version": "5.36.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.1.tgz",
- "integrity": "sha512-jd93ShpsIk1KgBTx9E+hCSEuLCUFwi9V/urhjOWnOaksGZFbTOxAT47OH2d4NLJnLhkVD+wDbB48BuaycZPLBg==",
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.58.0.tgz",
+ "integrity": "sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1472,13 +1585,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.36.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.1.tgz",
- "integrity": "sha512-ih7V52zvHdiX6WcPjsOdmADhYMDN15SylWRZrT2OMy80wzKbc79n8wFW0xpWpU0x3VpBz/oDgTm2xwDAnFTl+g==",
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz",
+ "integrity": "sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.36.1",
- "@typescript-eslint/visitor-keys": "5.36.1",
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/visitor-keys": "5.58.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -1498,13 +1611,61 @@
}
}
},
+ "node_modules/@typescript-eslint/utils": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz",
+ "integrity": "sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.58.0",
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/typescript-estree": "5.58.0",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils/node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.36.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.1.tgz",
- "integrity": "sha512-ojB9aRyRFzVMN3b5joSYni6FAS10BBSCAfKJhjJAV08t/a95aM6tAhz+O1jF+EtgxktuSO3wJysp2R+Def/IWQ==",
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz",
+ "integrity": "sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.36.1",
+ "@typescript-eslint/types": "5.58.0",
"eslint-visitor-keys": "^3.3.0"
},
"engines": {
@@ -1538,9 +1699,9 @@
}
},
"node_modules/acorn": {
- "version": "8.8.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
- "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+ "version": "8.8.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
+ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -1668,16 +1829,29 @@
"node": ">=6.0"
}
},
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+ "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/array-includes": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz",
- "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5",
- "get-intrinsic": "^1.1.1",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
"is-string": "^1.0.7"
},
"engines": {
@@ -1697,14 +1871,14 @@
}
},
"node_modules/array.prototype.flat": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
- "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
"es-shim-unscopables": "^1.0.0"
},
"engines": {
@@ -1715,14 +1889,14 @@
}
},
"node_modules/array.prototype.flatmap": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz",
- "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
+ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
"es-shim-unscopables": "^1.0.0"
},
"engines": {
@@ -1732,6 +1906,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz",
+ "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.1.3"
+ }
+ },
"node_modules/ast-types-flow": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
@@ -1776,6 +1963,18 @@
"postcss": "^8.1.0"
}
},
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/axe-core": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz",
@@ -1883,6 +2082,15 @@
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz",
"integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg=="
},
+ "node_modules/builtins": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^7.0.0"
+ }
+ },
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@@ -2292,34 +2500,45 @@
}
},
"node_modules/es-abstract": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz",
- "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==",
+ "version": "1.21.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+ "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
"dev": true,
"dependencies": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
"es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
"function.prototype.name": "^1.1.5",
- "get-intrinsic": "^1.1.2",
+ "get-intrinsic": "^1.2.0",
"get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
"has": "^1.0.3",
"has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
- "internal-slot": "^1.0.3",
- "is-callable": "^1.2.4",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
"is-negative-zero": "^2.0.2",
"is-regex": "^1.1.4",
"is-shared-array-buffer": "^1.0.2",
"is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
"is-weakref": "^1.0.2",
- "object-inspect": "^1.12.2",
+ "object-inspect": "^1.12.3",
"object-keys": "^1.1.1",
"object.assign": "^4.1.4",
"regexp.prototype.flags": "^1.4.3",
- "string.prototype.trimend": "^1.0.5",
- "string.prototype.trimstart": "^1.0.5",
- "unbox-primitive": "^1.0.2"
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
},
"engines": {
"node": ">= 0.4"
@@ -2328,6 +2547,20 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
+ "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/es-shim-unscopables": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
@@ -2374,15 +2607,18 @@
}
},
"node_modules/eslint": {
- "version": "8.23.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz",
- "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz",
+ "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==",
"dev": true,
"dependencies": {
- "@eslint/eslintrc": "^1.3.1",
- "@humanwhocodes/config-array": "^0.10.4",
- "@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.4.0",
+ "@eslint/eslintrc": "^2.0.2",
+ "@eslint/js": "8.38.0",
+ "@humanwhocodes/config-array": "^0.11.8",
"@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -2390,23 +2626,22 @@
"doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0",
"eslint-scope": "^7.1.1",
- "eslint-utils": "^3.0.0",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.4.0",
- "esquery": "^1.4.0",
+ "eslint-visitor-keys": "^3.4.0",
+ "espree": "^9.5.1",
+ "esquery": "^1.4.2",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"find-up": "^5.0.0",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^6.0.1",
- "globals": "^13.15.0",
- "globby": "^11.1.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
"grapheme-splitter": "^1.0.4",
"ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
@@ -2414,7 +2649,6 @@
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
- "regexpp": "^3.2.0",
"strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0",
"text-table": "^0.2.0"
@@ -2455,14 +2689,71 @@
}
}
},
+ "node_modules/eslint-config-prettier": {
+ "version": "8.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
+ "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-config-standard": {
+ "version": "17.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz",
+ "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "peerDependencies": {
+ "eslint": "^8.0.1",
+ "eslint-plugin-import": "^2.25.2",
+ "eslint-plugin-n": "^15.0.0",
+ "eslint-plugin-promise": "^6.0.0"
+ }
+ },
+ "node_modules/eslint-config-standard-with-typescript": {
+ "version": "34.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-34.0.1.tgz",
+ "integrity": "sha512-J7WvZeLtd0Vr9F+v4dZbqJCLD16cbIy4U+alJMq4MiXdpipdBM3U5NkXaGUjePc4sb1ZE01U9g6VuTBpHHz1fg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/parser": "^5.43.0",
+ "eslint-config-standard": "17.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^5.43.0",
+ "eslint": "^8.0.1",
+ "eslint-plugin-import": "^2.25.2",
+ "eslint-plugin-n": "^15.0.0",
+ "eslint-plugin-promise": "^6.0.0",
+ "typescript": "*"
+ }
+ },
"node_modules/eslint-import-resolver-node": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
- "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
+ "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
"dev": true,
"dependencies": {
"debug": "^3.2.7",
- "resolve": "^1.20.0"
+ "is-core-module": "^2.11.0",
+ "resolve": "^1.22.1"
}
},
"node_modules/eslint-import-resolver-node/node_modules/debug": {
@@ -2540,24 +2831,69 @@
"ms": "^2.1.1"
}
},
+ "node_modules/eslint-plugin-es": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
+ "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
+ "dev": true,
+ "dependencies": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=4.19.1"
+ }
+ },
+ "node_modules/eslint-plugin-es/node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/eslint-plugin-import": {
- "version": "2.26.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
- "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
+ "version": "2.27.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
+ "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
"dev": true,
"dependencies": {
- "array-includes": "^3.1.4",
- "array.prototype.flat": "^1.2.5",
- "debug": "^2.6.9",
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "array.prototype.flatmap": "^1.3.1",
+ "debug": "^3.2.7",
"doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-module-utils": "^2.7.3",
+ "eslint-import-resolver-node": "^0.3.7",
+ "eslint-module-utils": "^2.7.4",
"has": "^1.0.3",
- "is-core-module": "^2.8.1",
+ "is-core-module": "^2.11.0",
"is-glob": "^4.0.3",
"minimatch": "^3.1.2",
- "object.values": "^1.1.5",
- "resolve": "^1.22.0",
+ "object.values": "^1.1.6",
+ "resolve": "^1.22.1",
+ "semver": "^6.3.0",
"tsconfig-paths": "^3.14.1"
},
"engines": {
@@ -2568,12 +2904,12 @@
}
},
"node_modules/eslint-plugin-import/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"dependencies": {
- "ms": "2.0.0"
+ "ms": "^2.1.1"
}
},
"node_modules/eslint-plugin-import/node_modules/doctrine": {
@@ -2588,11 +2924,14 @@
"node": ">=0.10.0"
}
},
- "node_modules/eslint-plugin-import/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
},
"node_modules/eslint-plugin-jsx-a11y": {
"version": "6.6.1",
@@ -2630,26 +2969,85 @@
"semver": "bin/semver.js"
}
},
+ "node_modules/eslint-plugin-n": {
+ "version": "15.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz",
+ "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==",
+ "dev": true,
+ "dependencies": {
+ "builtins": "^5.0.1",
+ "eslint-plugin-es": "^4.1.0",
+ "eslint-utils": "^3.0.0",
+ "ignore": "^5.1.1",
+ "is-core-module": "^2.11.0",
+ "minimatch": "^3.1.2",
+ "resolve": "^1.22.1",
+ "semver": "^7.3.8"
+ },
+ "engines": {
+ "node": ">=12.22.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-prettier": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
+ "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
+ "dev": true,
+ "dependencies": {
+ "prettier-linter-helpers": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.28.0",
+ "prettier": ">=2.0.0"
+ },
+ "peerDependenciesMeta": {
+ "eslint-config-prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-promise": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
+ "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
"node_modules/eslint-plugin-react": {
- "version": "7.31.6",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.6.tgz",
- "integrity": "sha512-CXu4eu28sb8Sd2+cyUYsJVyDvpTlaXPG+bOzzpS9IzZKtye96AYX3ZmHQ6ayn/OAIQ/ufDJP8ElPWd63Pepn9w==",
+ "version": "7.32.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz",
+ "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==",
"dev": true,
"dependencies": {
- "array-includes": "^3.1.5",
- "array.prototype.flatmap": "^1.3.0",
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "array.prototype.tosorted": "^1.1.1",
"doctrine": "^2.1.0",
"estraverse": "^5.3.0",
"jsx-ast-utils": "^2.4.1 || ^3.0.0",
"minimatch": "^3.1.2",
- "object.entries": "^1.1.5",
- "object.fromentries": "^2.0.5",
- "object.hasown": "^1.1.1",
- "object.values": "^1.1.5",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "object.hasown": "^1.1.2",
+ "object.values": "^1.1.6",
"prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.3",
+ "resolve": "^2.0.0-next.4",
"semver": "^6.3.0",
- "string.prototype.matchall": "^4.0.7"
+ "string.prototype.matchall": "^4.0.8"
},
"engines": {
"node": ">=4"
@@ -2749,23 +3147,26 @@
}
},
"node_modules/eslint-visitor-keys": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
- "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
+ "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/espree": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
- "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==",
+ "version": "9.5.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz",
+ "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==",
"dev": true,
"dependencies": {
"acorn": "^8.8.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.3.0"
+ "eslint-visitor-keys": "^3.4.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -2775,9 +3176,9 @@
}
},
"node_modules/esquery": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
- "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
"dev": true,
"dependencies": {
"estraverse": "^5.1.0"
@@ -2822,6 +3223,12 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
+ "node_modules/fast-diff": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
+ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+ "dev": true
+ },
"node_modules/fast-glob": {
"version": "3.2.11",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
@@ -2962,6 +3369,15 @@
}
}
},
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
@@ -3017,12 +3433,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
- "dev": true
- },
"node_modules/functions-have-names": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
@@ -3042,9 +3452,9 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
- "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1",
@@ -3104,9 +3514,9 @@
}
},
"node_modules/globals": {
- "version": "13.17.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
- "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -3118,6 +3528,21 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/globby": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
@@ -3138,6 +3563,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/grapheme-splitter": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
@@ -3193,6 +3630,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
@@ -3301,12 +3750,12 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/internal-slot": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
- "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.1.0",
+ "get-intrinsic": "^1.2.0",
"has": "^1.0.3",
"side-channel": "^1.0.4"
},
@@ -3314,6 +3763,20 @@
"node": ">= 0.4"
}
},
+ "node_modules/is-array-buffer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+ "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -3360,9 +3823,9 @@
}
},
"node_modules/is-callable": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
- "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -3372,9 +3835,9 @@
}
},
"node_modules/is-core-module": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
- "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz",
+ "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==",
"dependencies": {
"has": "^1.0.3"
},
@@ -3454,6 +3917,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -3512,6 +3984,25 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-weakref": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
@@ -3543,6 +4034,16 @@
"node": ">=12"
}
},
+ "node_modules/js-sdsl": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz",
+ "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/js-sdsl"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -3828,6 +4329,12 @@
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
+ "node_modules/natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
"node_modules/next": {
"version": "12.2.5",
"resolved": "https://registry.npmjs.org/next/-/next-12.2.5.tgz",
@@ -3973,9 +4480,9 @@
}
},
"node_modules/object-inspect": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
- "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -4009,28 +4516,28 @@
}
},
"node_modules/object.entries": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
- "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz",
+ "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/object.fromentries": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
- "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz",
+ "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
},
"engines": {
"node": ">= 0.4"
@@ -4040,27 +4547,27 @@
}
},
"node_modules/object.hasown": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz",
- "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz",
+ "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==",
"dev": true,
"dependencies": {
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5"
+ "es-abstract": "^1.20.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/object.values": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
- "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
+ "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
},
"engines": {
"node": ">= 0.4"
@@ -4355,6 +4862,33 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/prettier": {
+ "version": "2.8.7",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz",
+ "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "dependencies": {
+ "fast-diff": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -4371,9 +4905,9 @@
}
},
"node_modules/punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
"dev": true,
"engines": {
"node": ">=6"
@@ -4631,6 +5165,20 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
+ "node_modules/safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/scheduler": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
@@ -4640,9 +5188,9 @@
}
},
"node_modules/semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz",
+ "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -4736,47 +5284,64 @@
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
},
"node_modules/string.prototype.matchall": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz",
- "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz",
+ "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1",
- "get-intrinsic": "^1.1.1",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
"has-symbols": "^1.0.3",
"internal-slot": "^1.0.3",
- "regexp.prototype.flags": "^1.4.1",
+ "regexp.prototype.flags": "^1.4.3",
"side-channel": "^1.0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
+ "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/string.prototype.trimend": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
- "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5"
+ "es-abstract": "^1.20.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trimstart": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
- "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5"
+ "es-abstract": "^1.20.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -5025,18 +5590,31 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/typed-array-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+ "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/typescript": {
- "version": "4.9.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
- "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
+ "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
"dev": true,
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
- "node": ">=4.2.0"
+ "node": ">=12.20"
}
},
"node_modules/unbox-primitive": {
@@ -5173,6 +5751,26 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
@@ -5721,16 +6319,31 @@
"resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz",
"integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg=="
},
+ "@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@eslint-community/regexpp": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz",
+ "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==",
+ "dev": true
+ },
"@eslint/eslintrc": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz",
- "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz",
+ "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.4.0",
- "globals": "^13.15.0",
+ "espree": "^9.5.1",
+ "globals": "^13.19.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.0",
@@ -5738,23 +6351,23 @@
"strip-json-comments": "^3.1.1"
}
},
+ "@eslint/js": {
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz",
+ "integrity": "sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==",
+ "dev": true
+ },
"@humanwhocodes/config-array": {
- "version": "0.10.4",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz",
- "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==",
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
"dev": true,
"requires": {
"@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
- "minimatch": "^3.0.4"
+ "minimatch": "^3.0.5"
}
},
- "@humanwhocodes/gitignore-to-minimatch": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
- "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
- "dev": true
- },
"@humanwhocodes/module-importer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
@@ -6124,12 +6737,24 @@
"tslib": "^2.4.0"
}
},
+ "@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "dev": true
+ },
"@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
"dev": true
},
+ "@types/node": {
+ "version": "18.15.11",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz",
+ "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==",
+ "dev": true
+ },
"@types/parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
@@ -6171,42 +6796,78 @@
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
"integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
},
+ "@types/semver": {
+ "version": "7.3.13",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
+ "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==",
+ "dev": true
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz",
+ "integrity": "sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.58.0",
+ "@typescript-eslint/type-utils": "5.58.0",
+ "@typescript-eslint/utils": "5.58.0",
+ "debug": "^4.3.4",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "natural-compare-lite": "^1.4.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
"@typescript-eslint/parser": {
- "version": "5.36.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.36.1.tgz",
- "integrity": "sha512-/IsgNGOkBi7CuDfUbwt1eOqUXF9WGVBW9dwEe1pi+L32XrTsZIgmDFIi2RxjzsvB/8i+MIf5JIoTEH8LOZ368A==",
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.58.0.tgz",
+ "integrity": "sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "5.36.1",
- "@typescript-eslint/types": "5.36.1",
- "@typescript-eslint/typescript-estree": "5.36.1",
+ "@typescript-eslint/scope-manager": "5.58.0",
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/typescript-estree": "5.58.0",
"debug": "^4.3.4"
}
},
"@typescript-eslint/scope-manager": {
- "version": "5.36.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.36.1.tgz",
- "integrity": "sha512-pGC2SH3/tXdu9IH3ItoqciD3f3RRGCh7hb9zPdN2Drsr341zgd6VbhP5OHQO/reUqihNltfPpMpTNihFMarP2w==",
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz",
+ "integrity": "sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/visitor-keys": "5.58.0"
+ }
+ },
+ "@typescript-eslint/type-utils": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.58.0.tgz",
+ "integrity": "sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.36.1",
- "@typescript-eslint/visitor-keys": "5.36.1"
+ "@typescript-eslint/typescript-estree": "5.58.0",
+ "@typescript-eslint/utils": "5.58.0",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
}
},
"@typescript-eslint/types": {
- "version": "5.36.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.1.tgz",
- "integrity": "sha512-jd93ShpsIk1KgBTx9E+hCSEuLCUFwi9V/urhjOWnOaksGZFbTOxAT47OH2d4NLJnLhkVD+wDbB48BuaycZPLBg==",
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.58.0.tgz",
+ "integrity": "sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
- "version": "5.36.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.1.tgz",
- "integrity": "sha512-ih7V52zvHdiX6WcPjsOdmADhYMDN15SylWRZrT2OMy80wzKbc79n8wFW0xpWpU0x3VpBz/oDgTm2xwDAnFTl+g==",
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz",
+ "integrity": "sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.36.1",
- "@typescript-eslint/visitor-keys": "5.36.1",
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/visitor-keys": "5.58.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -6214,13 +6875,47 @@
"tsutils": "^3.21.0"
}
},
+ "@typescript-eslint/utils": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz",
+ "integrity": "sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.58.0",
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/typescript-estree": "5.58.0",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ },
+ "dependencies": {
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ }
+ }
+ },
"@typescript-eslint/visitor-keys": {
- "version": "5.36.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.1.tgz",
- "integrity": "sha512-ojB9aRyRFzVMN3b5joSYni6FAS10BBSCAfKJhjJAV08t/a95aM6tAhz+O1jF+EtgxktuSO3wJysp2R+Def/IWQ==",
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz",
+ "integrity": "sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.36.1",
+ "@typescript-eslint/types": "5.58.0",
"eslint-visitor-keys": "^3.3.0"
}
},
@@ -6234,9 +6929,9 @@
}
},
"acorn": {
- "version": "8.8.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
- "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+ "version": "8.8.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
+ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
"dev": true
},
"acorn-jsx": {
@@ -6330,16 +7025,26 @@
"@babel/runtime-corejs3": "^7.10.2"
}
},
+ "array-buffer-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+ "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
+ }
+ },
"array-includes": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz",
- "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5",
- "get-intrinsic": "^1.1.1",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
"is-string": "^1.0.7"
}
},
@@ -6350,29 +7055,42 @@
"dev": true
},
"array.prototype.flat": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
- "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
"es-shim-unscopables": "^1.0.0"
}
},
"array.prototype.flatmap": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz",
- "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
+ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
"es-shim-unscopables": "^1.0.0"
}
},
+ "array.prototype.tosorted": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz",
+ "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.1.3"
+ }
+ },
"ast-types-flow": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
@@ -6398,6 +7116,12 @@
"postcss-value-parser": "^4.2.0"
}
},
+ "available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "dev": true
+ },
"axe-core": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz",
@@ -6476,6 +7200,15 @@
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz",
"integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg=="
},
+ "builtins": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+ "dev": true,
+ "requires": {
+ "semver": "^7.0.0"
+ }
+ },
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@@ -6792,34 +7525,56 @@
}
},
"es-abstract": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz",
- "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==",
+ "version": "1.21.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+ "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
"dev": true,
"requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
"es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
"function.prototype.name": "^1.1.5",
- "get-intrinsic": "^1.1.2",
+ "get-intrinsic": "^1.2.0",
"get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
"has": "^1.0.3",
"has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
- "internal-slot": "^1.0.3",
- "is-callable": "^1.2.4",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
"is-negative-zero": "^2.0.2",
"is-regex": "^1.1.4",
"is-shared-array-buffer": "^1.0.2",
"is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
"is-weakref": "^1.0.2",
- "object-inspect": "^1.12.2",
+ "object-inspect": "^1.12.3",
"object-keys": "^1.1.1",
"object.assign": "^4.1.4",
"regexp.prototype.flags": "^1.4.3",
- "string.prototype.trimend": "^1.0.5",
- "string.prototype.trimstart": "^1.0.5",
- "unbox-primitive": "^1.0.2"
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ }
+ },
+ "es-set-tostringtag": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
+ "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "has-tostringtag": "^1.0.0"
}
},
"es-shim-unscopables": {
@@ -6853,15 +7608,18 @@
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
},
"eslint": {
- "version": "8.23.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz",
- "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz",
+ "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==",
"dev": true,
"requires": {
- "@eslint/eslintrc": "^1.3.1",
- "@humanwhocodes/config-array": "^0.10.4",
- "@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.4.0",
+ "@eslint/eslintrc": "^2.0.2",
+ "@eslint/js": "8.38.0",
+ "@humanwhocodes/config-array": "^0.11.8",
"@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -6869,23 +7627,22 @@
"doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0",
"eslint-scope": "^7.1.1",
- "eslint-utils": "^3.0.0",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.4.0",
- "esquery": "^1.4.0",
+ "eslint-visitor-keys": "^3.4.0",
+ "espree": "^9.5.1",
+ "esquery": "^1.4.2",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"find-up": "^5.0.0",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^6.0.1",
- "globals": "^13.15.0",
- "globby": "^11.1.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
"grapheme-splitter": "^1.0.4",
"ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
@@ -6893,7 +7650,6 @@
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
- "regexpp": "^3.2.0",
"strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0",
"text-table": "^0.2.0"
@@ -6916,14 +7672,39 @@
"eslint-plugin-react-hooks": "^4.5.0"
}
},
+ "eslint-config-prettier": {
+ "version": "8.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
+ "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-config-standard": {
+ "version": "17.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz",
+ "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-config-standard-with-typescript": {
+ "version": "34.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-34.0.1.tgz",
+ "integrity": "sha512-J7WvZeLtd0Vr9F+v4dZbqJCLD16cbIy4U+alJMq4MiXdpipdBM3U5NkXaGUjePc4sb1ZE01U9g6VuTBpHHz1fg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/parser": "^5.43.0",
+ "eslint-config-standard": "17.0.0"
+ }
+ },
"eslint-import-resolver-node": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
- "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
+ "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
"dev": true,
"requires": {
"debug": "^3.2.7",
- "resolve": "^1.20.0"
+ "is-core-module": "^2.11.0",
+ "resolve": "^1.22.1"
},
"dependencies": {
"debug": {
@@ -6986,34 +7767,63 @@
}
}
},
+ "eslint-plugin-es": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
+ "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ },
+ "dependencies": {
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ }
+ }
+ },
"eslint-plugin-import": {
- "version": "2.26.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
- "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
+ "version": "2.27.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
+ "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
"dev": true,
"requires": {
- "array-includes": "^3.1.4",
- "array.prototype.flat": "^1.2.5",
- "debug": "^2.6.9",
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "array.prototype.flatmap": "^1.3.1",
+ "debug": "^3.2.7",
"doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-module-utils": "^2.7.3",
+ "eslint-import-resolver-node": "^0.3.7",
+ "eslint-module-utils": "^2.7.4",
"has": "^1.0.3",
- "is-core-module": "^2.8.1",
+ "is-core-module": "^2.11.0",
"is-glob": "^4.0.3",
"minimatch": "^3.1.2",
- "object.values": "^1.1.5",
- "resolve": "^1.22.0",
+ "object.values": "^1.1.6",
+ "resolve": "^1.22.1",
+ "semver": "^6.3.0",
"tsconfig-paths": "^3.14.1"
},
"dependencies": {
"debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "^2.1.1"
}
},
"doctrine": {
@@ -7025,10 +7835,10 @@
"esutils": "^2.0.2"
}
},
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
}
}
@@ -7062,26 +7872,59 @@
}
}
},
+ "eslint-plugin-n": {
+ "version": "15.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz",
+ "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==",
+ "dev": true,
+ "requires": {
+ "builtins": "^5.0.1",
+ "eslint-plugin-es": "^4.1.0",
+ "eslint-utils": "^3.0.0",
+ "ignore": "^5.1.1",
+ "is-core-module": "^2.11.0",
+ "minimatch": "^3.1.2",
+ "resolve": "^1.22.1",
+ "semver": "^7.3.8"
+ }
+ },
+ "eslint-plugin-prettier": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
+ "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
+ "dev": true,
+ "requires": {
+ "prettier-linter-helpers": "^1.0.0"
+ }
+ },
+ "eslint-plugin-promise": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
+ "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==",
+ "dev": true,
+ "requires": {}
+ },
"eslint-plugin-react": {
- "version": "7.31.6",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.6.tgz",
- "integrity": "sha512-CXu4eu28sb8Sd2+cyUYsJVyDvpTlaXPG+bOzzpS9IzZKtye96AYX3ZmHQ6ayn/OAIQ/ufDJP8ElPWd63Pepn9w==",
+ "version": "7.32.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz",
+ "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==",
"dev": true,
"requires": {
- "array-includes": "^3.1.5",
- "array.prototype.flatmap": "^1.3.0",
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "array.prototype.tosorted": "^1.1.1",
"doctrine": "^2.1.0",
"estraverse": "^5.3.0",
"jsx-ast-utils": "^2.4.1 || ^3.0.0",
"minimatch": "^3.1.2",
- "object.entries": "^1.1.5",
- "object.fromentries": "^2.0.5",
- "object.hasown": "^1.1.1",
- "object.values": "^1.1.5",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "object.hasown": "^1.1.2",
+ "object.values": "^1.1.6",
"prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.3",
+ "resolve": "^2.0.0-next.4",
"semver": "^6.3.0",
- "string.prototype.matchall": "^4.0.7"
+ "string.prototype.matchall": "^4.0.8"
},
"dependencies": {
"doctrine": {
@@ -7147,26 +7990,26 @@
}
},
"eslint-visitor-keys": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
- "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
+ "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
"dev": true
},
"espree": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
- "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==",
+ "version": "9.5.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz",
+ "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==",
"dev": true,
"requires": {
"acorn": "^8.8.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.3.0"
+ "eslint-visitor-keys": "^3.4.0"
}
},
"esquery": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
- "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
"dev": true,
"requires": {
"estraverse": "^5.1.0"
@@ -7199,6 +8042,12 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
+ "fast-diff": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
+ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+ "dev": true
+ },
"fast-glob": {
"version": "3.2.11",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
@@ -7303,6 +8152,15 @@
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
"integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA=="
},
+ "for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.3"
+ }
+ },
"form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
@@ -7342,12 +8200,6 @@
"functions-have-names": "^1.2.2"
}
},
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
- "dev": true
- },
"functions-have-names": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
@@ -7361,9 +8213,9 @@
"peer": true
},
"get-intrinsic": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
- "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
@@ -7405,14 +8257,23 @@
}
},
"globals": {
- "version": "13.17.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
- "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
}
},
+ "globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3"
+ }
+ },
"globby": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
@@ -7427,6 +8288,15 @@
"slash": "^3.0.0"
}
},
+ "gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.3"
+ }
+ },
"grapheme-splitter": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
@@ -7467,6 +8337,12 @@
"get-intrinsic": "^1.1.1"
}
},
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "dev": true
+ },
"has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
@@ -7544,16 +8420,27 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"internal-slot": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
- "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
"dev": true,
"requires": {
- "get-intrinsic": "^1.1.0",
+ "get-intrinsic": "^1.2.0",
"has": "^1.0.3",
"side-channel": "^1.0.4"
}
},
+ "is-array-buffer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+ "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
+ }
+ },
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -7588,15 +8475,15 @@
}
},
"is-callable": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
- "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
"dev": true
},
"is-core-module": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
- "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz",
+ "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==",
"requires": {
"has": "^1.0.3"
}
@@ -7646,6 +8533,12 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
"is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -7683,6 +8576,19 @@
"has-symbols": "^1.0.2"
}
},
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"is-weakref": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
@@ -7708,6 +8614,12 @@
"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz",
"integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw=="
},
+ "js-sdsl": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz",
+ "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==",
+ "dev": true
+ },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -7930,6 +8842,12 @@
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
+ "natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
"next": {
"version": "12.2.5",
"resolved": "https://registry.npmjs.org/next/-/next-12.2.5.tgz",
@@ -8011,9 +8929,9 @@
"dev": true
},
"object-inspect": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
- "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
"dev": true
},
"object-keys": {
@@ -8035,46 +8953,46 @@
}
},
"object.entries": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
- "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz",
+ "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
}
},
"object.fromentries": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
- "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz",
+ "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
}
},
"object.hasown": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz",
- "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz",
+ "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==",
"dev": true,
"requires": {
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5"
+ "es-abstract": "^1.20.4"
}
},
"object.values": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
- "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
+ "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
}
},
"once": {
@@ -8254,6 +9172,21 @@
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true
},
+ "prettier": {
+ "version": "2.8.7",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz",
+ "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
+ "dev": true
+ },
+ "prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "requires": {
+ "fast-diff": "^1.1.2"
+ }
+ },
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -8270,9 +9203,9 @@
}
},
"punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
"dev": true
},
"query-string": {
@@ -8437,6 +9370,17 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
+ "safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ }
+ },
"scheduler": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
@@ -8446,9 +9390,9 @@
}
},
"semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz",
+ "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
@@ -8512,41 +9456,52 @@
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
},
"string.prototype.matchall": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz",
- "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz",
+ "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1",
- "get-intrinsic": "^1.1.1",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
"has-symbols": "^1.0.3",
"internal-slot": "^1.0.3",
- "regexp.prototype.flags": "^1.4.1",
+ "regexp.prototype.flags": "^1.4.3",
"side-channel": "^1.0.4"
}
},
+ "string.prototype.trim": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
+ "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
"string.prototype.trimend": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
- "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5"
+ "es-abstract": "^1.20.4"
}
},
"string.prototype.trimstart": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
- "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5"
+ "es-abstract": "^1.20.4"
}
},
"strip-ansi": {
@@ -8728,12 +9683,22 @@
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true
},
- "typescript": {
- "version": "4.9.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
- "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+ "typed-array-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+ "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
"dev": true,
- "peer": true
+ "requires": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ }
+ },
+ "typescript": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
+ "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
+ "dev": true
},
"unbox-primitive": {
"version": "1.0.2",
@@ -8834,6 +9799,20 @@
"is-symbol": "^1.0.3"
}
},
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
+ },
"word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
diff --git a/package.json b/package.json
index 6a27ddee..35f4f81e 100644
--- a/package.json
+++ b/package.json
@@ -27,10 +27,21 @@
"react-icons": "^4.4.0"
},
"devDependencies": {
+ "@types/node": "^18.15.11",
+ "@typescript-eslint/eslint-plugin": "^5.58.0",
"autoprefixer": "^10.4.8",
- "eslint": "8.23.0",
+ "eslint": "^8.38.0",
"eslint-config-next": "12.2.5",
+ "eslint-config-prettier": "^8.8.0",
+ "eslint-config-standard-with-typescript": "^34.0.1",
+ "eslint-plugin-import": "^2.27.5",
+ "eslint-plugin-n": "^15.7.0",
+ "eslint-plugin-prettier": "^4.2.1",
+ "eslint-plugin-promise": "^6.1.1",
+ "eslint-plugin-react": "^7.32.2",
"postcss": "^8.4.16",
- "tailwindcss": "^3.1.8"
+ "prettier": "2.8.7",
+ "tailwindcss": "^3.1.8",
+ "typescript": "^5.0.4"
}
}
diff --git a/pages/_app.js b/pages/_app.js
deleted file mode 100644
index 35882651..00000000
--- a/pages/_app.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import { ThemeProvider } from "next-themes";
-
-import "../styles/globals.css";
-
-import { NhostNextProvider, NhostClient } from "@nhost/nextjs";
-
-const nhost = new NhostClient({
- subdomain: process.env.NEXT_PUBLIC_NHOST_SUBDOMAIN || "",
- region: process.env.NEXT_PUBLIC_NHOST_REGION || "",
-});
-
-function MyApp({ Component, pageProps }) {
- return (
-
-
-
-
-
- );
-}
-
-export default MyApp;
diff --git a/pages/_app.tsx b/pages/_app.tsx
new file mode 100644
index 00000000..09921f11
--- /dev/null
+++ b/pages/_app.tsx
@@ -0,0 +1,22 @@
+import { ThemeProvider } from 'next-themes';
+
+import '../styles/globals.css';
+
+import { NhostNextProvider, NhostClient } from '@nhost/nextjs';
+
+const nhost = new NhostClient({
+ subdomain: process.env.NEXT_PUBLIC_NHOST_SUBDOMAIN || '',
+ region: process.env.NEXT_PUBLIC_NHOST_REGION || ''
+});
+
+function MyApp({ Component, pageProps }) {
+ return (
+
+
+
+
+
+ );
+}
+
+export default MyApp;
diff --git a/pages/api/hello.js b/pages/api/hello.js
deleted file mode 100644
index df63de88..00000000
--- a/pages/api/hello.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
-
-export default function handler(req, res) {
- res.status(200).json({ name: 'John Doe' })
-}
diff --git a/pages/api/hello.ts b/pages/api/hello.ts
new file mode 100644
index 00000000..de433727
--- /dev/null
+++ b/pages/api/hello.ts
@@ -0,0 +1,5 @@
+// Next.js API route support: https://nextjs.org/docs /api-routes/introduction
+
+export default function handler(req, res) {
+ res.status(200).json({ name: 'John Doe' });
+}
diff --git a/pages/events/22/hackrplay/ideas/[id].js b/pages/events/22/hackrplay/ideas/[id].js
deleted file mode 100644
index 58721b07..00000000
--- a/pages/events/22/hackrplay/ideas/[id].js
+++ /dev/null
@@ -1,364 +0,0 @@
-import { useEffect, useState } from 'react';
-import { useRouter } from 'next/router';
-import Image from 'next/image';
-import Link from 'next/link';
-import { FaBloggerB, FaCommentDots, FaReact, FaGitAlt } from 'react-icons/fa';
-
-import LayoutWrapper from '@/components/LayoutWrapper';
-import styles from '@/styles/Home.module.css';
-import { get_idea } from '@/services/graphql/ideas';
-import { SecondaryOutlinedButton } from '@/components/Buttons';
-import InProgress from '/public/Idea-List/inProgress.svg';
-import Completed from '/public/Idea-List/completed.svg';
-import NotStarted from '/public/Idea-List/notStart.svg';
-import {
- get_idea_submission_info,
- get_latest_status,
-} from '@/services/graphql/status';
-import { unescape_new_line } from '@/services/util/string';
-import StatusBar from '@/components/status-bar/StatusBar';
-import Interaction from '@/components/interactions';
-
-const StatusMap = {
- ['Idea Submitted']: {
- image: NotStarted,
- color: '#FD6868',
- },
- ['In Progress']: {
- image: InProgress,
- color: '#FDC668',
- },
- Completed: {
- image: Completed,
- color: '#68FDC6',
- },
-};
-const get_status_style = (status) => {
- const final_status = status || { label: 'Idea Submitted' };
- switch (final_status.label) {
- case 'Completed':
- return {
- image: Completed,
- color: '#68FDC6',
- };
- case 'In Progress':
- return {
- image: InProgress,
- color: '#FDC668',
- };
- case 'Idea Submitted':
- default:
- return {
- image: NotStarted,
- color: '#FD6868',
- };
- }
-};
-
-export default function IdeaDetails(props) {
- const router = useRouter();
- const { id } = router.query;
- const [idea, setIdea] = useState();
- const [loading, setLoading] = useState(true);
-
- useEffect(() => {
- if (id) {
- loadIdeaDetails(id);
- }
- }, [id]);
-
- const loadIdeaDetails = (id) => {
- get_idea(id).then((res) => {
- const all_statuses = [];
- console.log(res.idea_idea_status_map);
- res.idea_idea_status_map.forEach((st) => {
- all_statuses.push({
- ...st.idea_status_status_map,
- ...{ date: st.date },
- });
- });
- res.status_history = all_statuses;
- res.status = get_latest_status(res);
- res.description = unescape_new_line(res.description);
-
- if (
- res.status &&
- res.status.id ===
- process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID
- ) {
- get_idea_submission_info(res.id).then((sub) => {
- const f_obj = { ...res, ...sub[0] };
- console.log(f_obj);
- setIdea(f_obj);
- });
- } else {
- setIdea(res);
- }
- });
- };
-
- const onEditClicked = (id) => {
- router.push(`../registration/${id}`);
- };
- const onSubmitClicked = (id) => {
- router.push(`submit/${id}`);
- };
-
- const onCancelClicked = () => {
- router.push(`../ideas`);
- };
-
- const refreshIdea = () => {
- loadIdeaDetails(id);
- };
-
- const onLikeClicked = () => {};
-
- return (
-
- {idea ? (
-
-
-
-
-
- Idea
-
-
-
-
-
-
{idea.title}
-
-
-
- {get_latest_status(idea).label}
-
-
- {
- idea.idea_like_map_aggregate
- .aggregate.count
- }{' '}
- likes
-
-
- {
- idea.idea_comments_map_aggregate
- .aggregate.count
- }{' '}
- Comments
-
-
-
-
-
-
- {idea.description}
-
-
-
-
-
-
-
-
-
-
-
-
- {
- idea.idea_owner_map
- .displayName
- }
-
-
- Author
-
-
- {idea.idea_members_map ? (
-
-
-
-
-
- {
- idea.idea_members_map
- .user_id_map
- .displayName
- }
-
-
- Member
-
-
- ) : null}
-
-
- {idea.status &&
- idea.status.id ===
- process.env
- .NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID ? (
-
- {/* FaBloggerB, FaCommentDots, FaReact, FaGitAlt */}
-
-
-
-
-
-
-
-
- {unescape_new_line(
- idea.comment
- ) || 'Not Found'}
-
-
-
- ) : null}
-
-
-
-
-
-
-
- {/* Follwoing code will be reintroduced for upcoming events. So not removing now */}
- {/* {!idea.status ||
- idea.status.id !==
- process.env
- .NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID ? (
-
- onSubmitClicked(
- idea.id
- )
- }>
- {`Submit`}
-
-
- ) : null} */}
-
-
-
-
-
-
- onCancelClicked()
- }>
- Cancel
-
-
-
- {!idea.status ||
- idea.status.id !==
- process.env
- .NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID ? (
-
- {/* Follwoing code will be reintroduced for upcoming events. So not removing now */}
- {/*
- onEditClicked(idea.id)
- }>
- {`Edit`}
-
- */}
-
- ) : null}
-
-
-
-
-
-
- refreshIdea()}
- />
-
-
- ) : null}
-
- );
-}
diff --git a/pages/events/22/hackrplay/ideas/[id].tsx b/pages/events/22/hackrplay/ideas/[id].tsx
new file mode 100644
index 00000000..f0f99894
--- /dev/null
+++ b/pages/events/22/hackrplay/ideas/[id].tsx
@@ -0,0 +1,319 @@
+import { useEffect, useState } from 'react';
+import { useRouter } from 'next/router';
+import Image from 'next/image';
+import Link from 'next/link';
+import { FaBloggerB, FaCommentDots, FaReact, FaGitAlt } from 'react-icons/fa';
+
+import LayoutWrapper from '@/components/LayoutWrapper';
+import styles from '@/styles/Home.module.css';
+import { get_idea } from '@/services/graphql/ideas';
+import { SecondaryOutlinedButton } from '@/components/Buttons';
+import InProgress from '/public/Idea-List/inProgress.svg';
+import Completed from '/public/Idea-List/completed.svg';
+import NotStarted from '/public/Idea-List/notStart.svg';
+import { get_idea_submission_info, get_latest_status } from '@/services/graphql/status';
+import { unescape_new_line } from '@/services/util/string';
+import StatusBar from '@/components/status-bar/StatusBar';
+import Interaction from '@/components/interactions';
+
+const StatusMap = {
+ ['Idea Submitted']: {
+ image: NotStarted,
+ color: '#FD6868'
+ },
+ ['In Progress']: {
+ image: InProgress,
+ color: '#FDC668'
+ },
+ Completed: {
+ image: Completed,
+ color: '#68FDC6'
+ }
+};
+const get_status_style = (status) => {
+ const final_status = status || { label: 'Idea Submitted' };
+ switch (final_status.label) {
+ case 'Completed':
+ return {
+ image: Completed,
+ color: '#68FDC6'
+ };
+ case 'In Progress':
+ return {
+ image: InProgress,
+ color: '#FDC668'
+ };
+ case 'Idea Submitted':
+ default:
+ return {
+ image: NotStarted,
+ color: '#FD6868'
+ };
+ }
+};
+
+export default function IdeaDetails(props) {
+ const router = useRouter();
+ const { id } = router.query;
+ const [idea, setIdea] = useState();
+ const [loading, setLoading] = useState(true);
+
+ useEffect(() => {
+ if (id) {
+ loadIdeaDetails(id);
+ }
+ }, [id]);
+
+ const loadIdeaDetails = (id) => {
+ get_idea(id).then((res) => {
+ const all_statuses = [];
+ console.log(res.idea_idea_status_map);
+ res.idea_idea_status_map.forEach((st) => {
+ all_statuses.push({
+ ...st.idea_status_status_map,
+ ...{ date: st.date }
+ });
+ });
+ res.status_history = all_statuses;
+ res.status = get_latest_status(res);
+ res.description = unescape_new_line(res.description);
+
+ if (
+ res.status &&
+ res.status.id === process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID
+ ) {
+ get_idea_submission_info(res.id).then((sub) => {
+ const f_obj = { ...res, ...sub[0] };
+ console.log(f_obj);
+ setIdea(f_obj);
+ });
+ } else {
+ setIdea(res);
+ }
+ });
+ };
+
+ const onEditClicked = (id) => {
+ router.push(`../registration/${id}`);
+ };
+ const onSubmitClicked = (id) => {
+ router.push(`submit/${id}`);
+ };
+
+ const onCancelClicked = () => {
+ router.push(`../ideas`);
+ };
+
+ const refreshIdea = () => {
+ loadIdeaDetails(id);
+ };
+
+ const onLikeClicked = () => {};
+
+ return (
+
+ {idea ? (
+
+
+
+
+
+ Idea
+
+
+
+
+
+
{idea.title}
+
+
+
+ {get_latest_status(idea).label}
+
+
+ {idea.idea_like_map_aggregate.aggregate.count} likes
+
+
+ {idea.idea_comments_map_aggregate.aggregate.count}{' '}
+ Comments
+
+
+
+
+
+
{idea.description}
+
+
+
+
+
+
+
+
+
+
+
+ {idea.idea_owner_map.displayName}
+
+
+ Author
+
+
+ {idea.idea_members_map ? (
+
+
+
+
+
+ {idea.idea_members_map.user_id_map.displayName}
+
+
+ Member
+
+
+ ) : null}
+
+
+ {idea.status &&
+ idea.status.id ===
+ process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID ? (
+
+ {/* FaBloggerB, FaCommentDots, FaReact, FaGitAlt */}
+
+
+
+
+
+
+
+
+ {unescape_new_line(idea.comment) ||
+ 'Not Found'}
+
+
+
+ ) : null}
+
+
+
+
+
+
+
+ {/* Follwoing code will be reintroduced for upcoming events. So not removing now */}
+ {/* {!idea.status ||
+ idea.status.id !==
+ process.env
+ .NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID ? (
+
+ onSubmitClicked(
+ idea.id
+ )
+ }>
+ {`Submit`}
+
+
+ ) : null} */}
+
+
+
+
+
+ onCancelClicked()}
+ >
+ Cancel
+
+
+
+ {!idea.status ||
+ idea.status.id !==
+ process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID ? (
+
+ {/* Follwoing code will be reintroduced for upcoming events. So not removing now */}
+ {/*
+ onEditClicked(idea.id)
+ }>
+ {`Edit`}
+
+ */}
+
+ ) : null}
+
+
+
+
+
+
+ refreshIdea()} />
+
+
+ ) : null}
+
+ );
+}
diff --git a/pages/events/22/hackrplay/ideas/index.js b/pages/events/22/hackrplay/ideas/index.js
deleted file mode 100644
index f3936341..00000000
--- a/pages/events/22/hackrplay/ideas/index.js
+++ /dev/null
@@ -1,164 +0,0 @@
-import { useEffect, useState } from 'react';
-import { useRouter } from 'next/router';
-import { useAuthenticationStatus, useUserData } from '@nhost/nextjs';
-import { Grid } from '@mui/material';
-
-import { idea_count, list_ideas } from '@/services/graphql/ideas';
-import LayoutWrapper from '@/components/LayoutWrapper';
-import { CTA } from '@/components/Hack-R-Play';
-import IdeaCard from '@/components/Ideas/Card';
-import gstyles from '@/styles/Home.module.css';
-import IdeaFilters from '@/components/Hack-R-Play/IdeaFilter';
-import { get_latest_status } from '@/services/graphql/status';
-import { unescape_new_line } from '@/services/util/string';
-
-const PAGE_SIZE = 12;
-
-const IdeaListingPage = () => {
- const { isAuthenticated } = useAuthenticationStatus();
- const [ideas, setIdeas] = useState([]);
- const [ideaCount, setIdeaCount] = useState(0);
- const [isLoading, setIsLoading] = useState(false);
- const router = useRouter();
- const userData = useUserData();
-
- useEffect(() => {
- loadIdeas();
- }, []);
-
- const loadIdeas = (filter) => {
- setIsLoading(true);
- const promises = [];
- console.log(filter);
- promises.push(
- list_ideas(filter || { pagesize: PAGE_SIZE }, userData?.id).then(
- (res) => {
- if (res && res.length) {
- res.forEach((i) => {
- i.description = unescape_new_line(i.description);
- });
- }
- return res;
- }
- )
- );
- promises.push(idea_count(filter, userData?.id));
-
- Promise.all(promises)
- .then((res) => {
- processResultData(res[0]);
- setIdeaCount(res[1]);
- setIsLoading(false);
- })
- .catch((err) => {
- console.error(err);
- });
- };
-
- const onCardClicked = (id) => {
- router.push(`ideas/${id}`);
- };
-
- const redirectToRegistration = () => {
- router.push('registration');
- };
-
- const processResultData = (result) => {
- let tempData = [];
- for (const idea of result) {
- let interObj = {
- title: idea.title,
- description: idea.description,
- id: idea.id,
- comment_count: idea.idea_comments_map_aggregate.aggregate.count,
- like_count: idea.idea_like_map_aggregate.aggregate.count,
- avatarUrl: [
- idea.idea_members_map?.user_id_map.avatarUrl,
- idea.idea_owner_map?.avatarUrl,
- ],
- tinkers: [
- idea.idea_members_map?.user_id_map.displayName,
- idea.dea_owner_map?.displayName,
- ],
- status: get_latest_status(idea),
- };
-
- tempData.push(interObj);
- }
- setIdeas(tempData);
- };
-
- return (
-
-
-
-
- SUBMISSIONS
-
-
- {' '}
- Total: {ideaCount}
-
-
-
- loadIdeas(f)}>
-
-
-
- {ideas.length === 0 ? (
-
-
- No idea has been added yet.
-
-
- ) : (
- <>
- {ideas.map((value, vi) => {
- return (
-
-
- onCardClicked(value.id)
- }
- />
-
- );
- })}
- >
- )}
-
-
-
-
-
- );
-};
-
-export default IdeaListingPage;
diff --git a/pages/events/22/hackrplay/ideas/index.tsx b/pages/events/22/hackrplay/ideas/index.tsx
new file mode 100644
index 00000000..0c8b3663
--- /dev/null
+++ b/pages/events/22/hackrplay/ideas/index.tsx
@@ -0,0 +1,157 @@
+import { useEffect, useState } from 'react';
+import { useRouter } from 'next/router';
+import { useAuthenticationStatus, useUserData } from '@nhost/nextjs';
+import { Grid } from '@mui/material';
+
+import { idea_count, list_ideas } from '@/services/graphql/ideas';
+import LayoutWrapper from '@/components/LayoutWrapper';
+import { CTA } from '@/components/Hack-R-Play';
+import IdeaCard from '@/components/Ideas/Card';
+import gstyles from '@/styles/Home.module.css';
+import IdeaFilters from '@/components/Hack-R-Play/IdeaFilter';
+import { get_latest_status } from '@/services/graphql/status';
+import { unescape_new_line } from '@/services/util/string';
+
+const PAGE_SIZE = 12;
+
+const IdeaListingPage = () => {
+ const { isAuthenticated } = useAuthenticationStatus();
+ const [ideas, setIdeas] = useState([]);
+ const [ideaCount, setIdeaCount] = useState(0);
+ const [isLoading, setIsLoading] = useState(false);
+ const router = useRouter();
+ const userData = useUserData();
+
+ useEffect(() => {
+ loadIdeas();
+ }, []);
+
+ const loadIdeas = (filter) => {
+ setIsLoading(true);
+ const promises = [];
+ console.log(filter);
+ promises.push(
+ list_ideas(filter || { pagesize: PAGE_SIZE }, userData?.id).then((res) => {
+ if (res && res.length) {
+ res.forEach((i) => {
+ i.description = unescape_new_line(i.description);
+ });
+ }
+ return res;
+ })
+ );
+ promises.push(idea_count(filter, userData?.id));
+
+ Promise.all(promises)
+ .then((res) => {
+ processResultData(res[0]);
+ setIdeaCount(res[1]);
+ setIsLoading(false);
+ })
+ .catch((err) => {
+ console.error(err);
+ });
+ };
+
+ const onCardClicked = (id) => {
+ router.push(`ideas/${id}`);
+ };
+
+ const redirectToRegistration = () => {
+ router.push('registration');
+ };
+
+ const processResultData = (result) => {
+ let tempData = [];
+ for (const idea of result) {
+ let interObj = {
+ title: idea.title,
+ description: idea.description,
+ id: idea.id,
+ comment_count: idea.idea_comments_map_aggregate.aggregate.count,
+ like_count: idea.idea_like_map_aggregate.aggregate.count,
+ avatarUrl: [
+ idea.idea_members_map?.user_id_map.avatarUrl,
+ idea.idea_owner_map?.avatarUrl
+ ],
+ tinkers: [
+ idea.idea_members_map?.user_id_map.displayName,
+ idea.dea_owner_map?.displayName
+ ],
+ status: get_latest_status(idea)
+ };
+
+ tempData.push(interObj);
+ }
+ setIdeas(tempData);
+ };
+
+ return (
+
+
+
+
+ SUBMISSIONS
+
+
Total: {ideaCount}
+
+
+ loadIdeas(f)}
+ >
+
+
+
+ {ideas.length === 0 ? (
+
+
No idea has been added yet.
+
+ ) : (
+ <>
+ {ideas.map((value, vi) => {
+ return (
+
+ onCardClicked(value.id)}
+ />
+
+ );
+ })}
+ >
+ )}
+
+
+
+
+
+ );
+};
+
+export default IdeaListingPage;
diff --git a/pages/events/22/hackrplay/ideas/submit/[id].js b/pages/events/22/hackrplay/ideas/submit/[id].js
deleted file mode 100644
index 1c855bac..00000000
--- a/pages/events/22/hackrplay/ideas/submit/[id].js
+++ /dev/null
@@ -1,214 +0,0 @@
-import { useAuthenticationStatus, useUserData } from '@nhost/nextjs';
-import { useEffect, useState, forwardRef } from 'react';
-import { FiCheckCircle } from 'react-icons/fi';
-import { useRouter } from 'next/router';
-import MuiAlert from '@mui/material/Alert';
-
-import styles from '@/styles/Home.module.css';
-import { NHOST } from '@/services/nhost';
-import { FIELD_TEMPLATE } from '@/services/consts/submission-fields';
-import { get_idea, insert_idea_submission } from '@/services/graphql/ideas';
-import FormBuilder from '@/components/form-builder';
-import {
- PrimaryButton,
- SecondaryOutlinedButtonDark,
-} from '@/components/Buttons';
-import LayoutWrapper from '@/components/LayoutWrapper';
-import {
- insert_ideas_status,
- get_latest_status,
-} from '@/services/graphql/status';
-import { escape_new_line } from '@/services/util/string';
-
-const Alert = forwardRef(function Alert(props, ref) {
- return ;
-});
-
-export default function SubmitIdea() {
- const { isAuthenticated, isLoading } = useAuthenticationStatus();
- const [userId, setUserId] = useState('');
- const [isDataLoading, setIsDataLoading] = useState(true);
- const [isSubmitting, setIsSubmitting] = useState(false);
- const [ideaObject, setIdeaObject] = useState({});
- const [alertOpen, setAlertOpen] = useState(false);
- const [pageDisabled, setPageDisabled] = useState(false);
-
- const userData = useUserData();
- const router = useRouter();
- const { id } = router.query;
-
- const initializeData = () => {
- setIsDataLoading(true);
- get_idea(id).then((r) => {
- const status = get_latest_status(r);
- if (userData.id !== r.idea_owner_map.id) {
- setAlertOpen(true);
- setPageDisabled(true);
- }
- if (
- status &&
- status.id === process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID
- ) {
- router.push('../../ideas');
- } else {
- setIdeaObject(r);
- setIsDataLoading(false);
- }
- });
- };
-
- useEffect(() => {
- if (!isLoading) {
- if (!isAuthenticated) {
- if (typeof window !== 'undefined') {
- const protocol = process.env.NEXT_PUBLIC_PROTOCOL
- ? process.env.NEXT_PUBLIC_PROTOCOL
- : 'https';
- const host = window.location.hostname;
- const port = process.env.NEXT_PUBLIC_DEV_PORT
- ? `:${process.env.NEXT_PUBLIC_DEV_PORT}`
- : '';
- const external_path = NHOST.AUTH_URL(
- `${protocol}://${host}${port}/hackrplay/2022/submit/${id}`
- );
- window.location = external_path;
- }
- } else {
- initializeData();
- }
- }
- }, [isLoading]);
-
- if (isLoading) {
- return (
-
-
-
- Loading authentication information. Please wait.
-
-
-
- );
- }
-
- if (isDataLoading) {
- return (
-
-
-
- Checking authentication status. Please wait.
-
-
-
- );
- }
-
- const isFieldsAreInValid = () => {
- let res = false;
- FIELD_TEMPLATE.forEach((tmpl) => {
- if (tmpl.required && (!ideaObject || !ideaObject[tmpl.datafield])) {
- res = true;
- }
- });
- return res;
- };
-
- const onIdeaDataChanged = (data) => {
- setIdeaObject({ ...data });
- };
-
- const onSubmit = () => {
- setIsSubmitting(true);
- ideaObject.status = process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID;
- ideaObject.comment = escape_new_line(ideaObject.comment);
- console.log(ideaObject);
- Promise.all([
- insert_idea_submission(ideaObject),
- insert_ideas_status(ideaObject),
- ]).then((res) => {
- router.push('..');
- });
- };
- const onCancelClicked = () => {
- router.push('..');
- };
-
- return (
-
-
-
-
-
-
- Idea Submission
-
-
-
- {alertOpen ? (
-
- You cannot submit this idea. Only author can
- edit an idea.
-
- ) : (
-
- Congratulations{' '}
- {userData.displayName} for
- completing your idea for HACK-R-PLAY
-
- )}
-
-
-
-
- Idea Title :{' '}
-
-
{ideaObject.title}
-
-
-
-
-
-
-
-
-
- onCancelClicked()
- }>
- Cancel
-
-
-
-
-
onSubmit()}>
- Submit
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/pages/events/22/hackrplay/ideas/submit/[id].tsx b/pages/events/22/hackrplay/ideas/submit/[id].tsx
new file mode 100644
index 00000000..41b22ab3
--- /dev/null
+++ b/pages/events/22/hackrplay/ideas/submit/[id].tsx
@@ -0,0 +1,193 @@
+import { useAuthenticationStatus, useUserData } from '@nhost/nextjs';
+import { useEffect, useState, forwardRef } from 'react';
+import { FiCheckCircle } from 'react-icons/fi';
+import { useRouter } from 'next/router';
+import MuiAlert from '@mui/material/Alert';
+
+import styles from '@/styles/Home.module.css';
+import { NHOST } from '@/services/nhost';
+import { FIELD_TEMPLATE } from '@/services/consts/submission-fields';
+import { get_idea, insert_idea_submission } from '@/services/graphql/ideas';
+import FormBuilder from '@/components/form-builder';
+import { PrimaryButton, SecondaryOutlinedButtonDark } from '@/components/Buttons';
+import LayoutWrapper from '@/components/LayoutWrapper';
+import { insert_ideas_status, get_latest_status } from '@/services/graphql/status';
+import { escape_new_line } from '@/services/util/string';
+
+const Alert = forwardRef(function Alert(props, ref) {
+ return ;
+});
+
+export default function SubmitIdea() {
+ const { isAuthenticated, isLoading } = useAuthenticationStatus();
+ const [userId, setUserId] = useState('');
+ const [isDataLoading, setIsDataLoading] = useState(true);
+ const [isSubmitting, setIsSubmitting] = useState(false);
+ const [ideaObject, setIdeaObject] = useState({});
+ const [alertOpen, setAlertOpen] = useState(false);
+ const [pageDisabled, setPageDisabled] = useState(false);
+
+ const userData = useUserData();
+ const router = useRouter();
+ const { id } = router.query;
+
+ const initializeData = () => {
+ setIsDataLoading(true);
+ get_idea(id).then((r) => {
+ const status = get_latest_status(r);
+ if (userData.id !== r.idea_owner_map.id) {
+ setAlertOpen(true);
+ setPageDisabled(true);
+ }
+ if (status && status.id === process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID) {
+ router.push('../../ideas');
+ } else {
+ setIdeaObject(r);
+ setIsDataLoading(false);
+ }
+ });
+ };
+
+ useEffect(() => {
+ if (!isLoading) {
+ if (!isAuthenticated) {
+ if (typeof window !== 'undefined') {
+ const protocol = process.env.NEXT_PUBLIC_PROTOCOL
+ ? process.env.NEXT_PUBLIC_PROTOCOL
+ : 'https';
+ const host = window.location.hostname;
+ const port = process.env.NEXT_PUBLIC_DEV_PORT
+ ? `:${process.env.NEXT_PUBLIC_DEV_PORT}`
+ : '';
+ const external_path = NHOST.AUTH_URL(
+ `${protocol}://${host}${port}/hackrplay/2022/submit/${id}`
+ );
+ window.location = external_path;
+ }
+ } else {
+ initializeData();
+ }
+ }
+ }, [isLoading]);
+
+ if (isLoading) {
+ return (
+
+
+
+ Loading authentication information. Please wait.
+
+
+
+ );
+ }
+
+ if (isDataLoading) {
+ return (
+
+
+ Checking authentication status. Please wait.
+
+
+ );
+ }
+
+ const isFieldsAreInValid = () => {
+ let res = false;
+ FIELD_TEMPLATE.forEach((tmpl) => {
+ if (tmpl.required && (!ideaObject || !ideaObject[tmpl.datafield])) {
+ res = true;
+ }
+ });
+ return res;
+ };
+
+ const onIdeaDataChanged = (data) => {
+ setIdeaObject({ ...data });
+ };
+
+ const onSubmit = () => {
+ setIsSubmitting(true);
+ ideaObject.status = process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID;
+ ideaObject.comment = escape_new_line(ideaObject.comment);
+ console.log(ideaObject);
+ Promise.all([insert_idea_submission(ideaObject), insert_ideas_status(ideaObject)]).then(
+ (res) => {
+ router.push('..');
+ }
+ );
+ };
+ const onCancelClicked = () => {
+ router.push('..');
+ };
+
+ return (
+
+
+
+
+
+
+ Idea Submission
+
+
+
+ {alertOpen ? (
+
+ You cannot submit this idea. Only author can edit an idea.
+
+ ) : (
+
+ Congratulations {userData.displayName} for
+ completing your idea for HACK-R-PLAY
+
+ )}
+
+
+
+
+ Idea Title :{' '}
+
+
{ideaObject.title}
+
+
+
+
+
+
+
+
+ onCancelClicked()}
+ >
+ Cancel
+
+
+
+
+
onSubmit()}
+ >
+ Submit
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/pages/events/22/hackrplay/index.js b/pages/events/22/hackrplay/index.js
deleted file mode 100644
index cac79d17..00000000
--- a/pages/events/22/hackrplay/index.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import { useEffect, useState } from "react";
-import { useRouter } from "next/router";
-import Image from "next/image";
-import { useTheme } from "next-themes";
-
-import About from "@/components/common/About";
-import Judges from "@/components/common/Judges";
-import Hero from "@/components/common/Hero";
-import Partners from "@/components/common/Partners";
-import CTA from "@/components/common/CTA";
-import FAQs from "@/components/common/FAQs";
-import Layout from "@/components/Layout";
-import DottedAndFilledTriangle from "@/public/common/DottedAndFilledTriangle.svg";
-import Flower from "@/public/common/Flower.svg";
-import { Config } from "@/services/metadata/hackrplay";
-import Winners from "@/components/common/Winners";
-
-export default function Home() {
- const router = useRouter();
- const [mounted, setMounted] = useState(false);
- const { theme, setTheme } = useTheme("hackrplay");
- useEffect(() => {
- setTheme("hackrplay");
- setMounted(true);
- }, []);
-
- const winners = [];
- const mentions = [];
-
- if (!mounted) return null;
-
- return (
-
-
-
-
-
-
-
-
- {Config.completed ? (
-
- ) : null}
-
-
- {Config.partners ? : null}
- {Config.cta ? : null}
-
- {Config.faqs ? : null}
-
- );
-}
diff --git a/pages/events/22/hackrplay/index.tsx b/pages/events/22/hackrplay/index.tsx
new file mode 100644
index 00000000..e2ecd1eb
--- /dev/null
+++ b/pages/events/22/hackrplay/index.tsx
@@ -0,0 +1,56 @@
+import { useEffect, useState } from 'react';
+import { useRouter } from 'next/router';
+import Image from 'next/image';
+import { useTheme } from 'next-themes';
+
+import About from '@/components/common/About';
+import Judges from '@/components/common/Judges';
+import Hero from '@/components/common/Hero';
+import Partners from '@/components/common/Partners';
+import CTA from '@/components/common/CTA';
+import FAQs from '@/components/common/FAQs';
+import Layout from '@/components/Layout';
+import DottedAndFilledTriangle from '@/public/common/DottedAndFilledTriangle.svg';
+import Flower from '@/public/common/Flower.svg';
+import { Config } from '@/services/metadata/hackrplay';
+import Winners from '@/components/common/Winners';
+
+export default function Home() {
+ const router = useRouter();
+ const [mounted, setMounted] = useState(false);
+ const { theme, setTheme } = useTheme('hackrplay');
+ useEffect(() => {
+ setTheme('hackrplay');
+ setMounted(true);
+ }, []);
+
+ const winners = [];
+ const mentions = [];
+
+ if (!mounted) return null;
+
+ return (
+
+
+
+
+
+
+
+
+ {Config.completed ? (
+
+ ) : null}
+
+
+ {Config.partners ? : null}
+ {Config.cta ? : null}
+
+ {Config.faqs ? : null}
+
+ );
+}
diff --git a/pages/events/23/twoplaysamonth/index.js b/pages/events/23/twoplaysamonth/index.js
deleted file mode 100644
index 9d70d483..00000000
--- a/pages/events/23/twoplaysamonth/index.js
+++ /dev/null
@@ -1,57 +0,0 @@
-import { useEffect, useState } from "react";
-import { useRouter } from "next/router";
-import Image from "next/image";
-import { useTheme } from "next-themes";
-
-import Layout from "@/components/Layout";
-import About from "@/components/common/About";
-import Judges from "@/components/common/Judges";
-import Hero from "@/components/common/Hero";
-import Partners from "@/components/common/Partners";
-import CTA from "@/components/common/CTA";
-import FAQs from "@/components/common/FAQs";
-
-import DottedAndFilledTriangle from "@/public/common/DottedAndFilledTriangle.svg";
-import Flower from "@/public/common/Flower.svg";
-import { Config } from "@/services/metadata/twoplaysamonth";
-import Winners from "@/components/common/Winners";
-
-export default function Home() {
- const router = useRouter();
- const [mounted, setMounted] = useState(false);
- const { theme, setTheme } = useTheme("twoplaysamonth");
- useEffect(() => {
- setTheme("twoplaysamonth");
- setMounted(true);
- }, []);
-
- const winners = [];
- const mentions = [];
-
- if (!mounted) return null;
-
- return (
-
-
-
-
-
-
-
-
- {Config.completed ? (
-
- ) : null}
-
-
- {Config.partners ? : null}
- {Config.cta ? : null}
-
- {Config.faqs ? : null}
-
- );
-}
diff --git a/pages/events/23/twoplaysamonth/index.tsx b/pages/events/23/twoplaysamonth/index.tsx
new file mode 100644
index 00000000..9a2e8b46
--- /dev/null
+++ b/pages/events/23/twoplaysamonth/index.tsx
@@ -0,0 +1,56 @@
+import { useEffect, useState } from 'react';
+import { useRouter } from 'next/router';
+import Image from 'next/image';
+import { useTheme } from 'next-themes';
+
+import Layout from '@/components/Layout';
+import About from '@/components/common/About';
+import Judges from '@/components/common/Judges';
+import Hero from '@/components/common/Hero';
+import Partners from '@/components/common/Partners';
+import CTA from '@/components/common/CTA';
+import FAQs from '@/components/common/FAQs';
+
+import DottedAndFilledTriangle from '@/public/common/DottedAndFilledTriangle.svg';
+import Flower from '@/public/common/Flower.svg';
+import { Config } from '@/services/metadata/twoplaysamonth';
+import Winners from '@/components/common/Winners';
+
+export default function Home() {
+ const router = useRouter();
+ const [mounted, setMounted] = useState(false);
+ const { theme, setTheme } = useTheme('twoplaysamonth');
+
+ useEffect(() => {
+ setTheme('twoplaysamonth');
+ setMounted(true);
+ }, []);
+
+ const winners = [];
+ const mentions = [];
+
+ if (!mounted) return null;
+
+ return (
+ }>
+
+
+
+
+
+
+
+ {Config.completed ? : null}
+
+
+ {Config.partners ? : null}
+ {Config.cta ? : null}
+
+ {Config.faqs ? : null}
+
+ );
+}
diff --git a/pages/index.js b/pages/index.js
deleted file mode 100644
index d7822458..00000000
--- a/pages/index.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import Layout from "@/components/Layout";
-import Banner from "@/components/Banner";
-import { Config } from "../services/metadata/home";
-import MediaLayout from "@/components/MediaLayout";
-
-export default function Home() {
- const reactPlayLive = [
- { id: 0, src: "https://www.youtube.com/embed/1qfDkmtuWqg" },
- { id: 1, src: "https://www.youtube.com/embed/b0eas9xxD-E" },
- { id: 2, src: "https://www.youtube.com/embed/w0nd4ASTDdg" },
- ];
-
- const EventLayout = () => {
- return (
-
-
-
-
-
-
- );
- };
-
- return (
-
-
-
- );
-}
diff --git a/pages/index.tsx b/pages/index.tsx
new file mode 100644
index 00000000..27df2830
--- /dev/null
+++ b/pages/index.tsx
@@ -0,0 +1,33 @@
+import Layout from '@/components/Layout';
+import Banner from '@/components/Banner';
+import { Config } from '../services/metadata/home';
+import MediaLayout from '@/components/MediaLayout';
+
+export default function Home() {
+ const reactPlayLive = [
+ { id: 0, src: 'https://www.youtube.com/embed/1qfDkmtuWqg' },
+ { id: 1, src: 'https://www.youtube.com/embed/b0eas9xxD-E' },
+ { id: 2, src: 'https://www.youtube.com/embed/w0nd4ASTDdg' }
+ ];
+
+ const EventLayout = () => {
+ return (
+
+
+
+
+
+
+ );
+ };
+
+ return (
+
+
+
+ );
+}
diff --git a/pages/tech-credit.js b/pages/tech-credit.js
deleted file mode 100644
index 67521a26..00000000
--- a/pages/tech-credit.js
+++ /dev/null
@@ -1,78 +0,0 @@
-import Image from "next/image";
-import Link from "next/link";
-
-import Layout from "../components/Layout";
-import TailWindLogo from "../public/tailwindcss-logotype.svg";
-import NextJsLogo from "../public/Nextjs-logo.png";
-
-const TechCreditPage = () => {
- return (
-
-
-
- Tech Stack
-
-
-
-
- Credits
-
-
-
-
- );
-};
-
-export default TechCreditPage;
diff --git a/pages/tech-credit.tsx b/pages/tech-credit.tsx
new file mode 100644
index 00000000..d629e589
--- /dev/null
+++ b/pages/tech-credit.tsx
@@ -0,0 +1,75 @@
+import Image from 'next/image';
+import Link from 'next/link';
+
+import Layout from '../components/Layout';
+import TailWindLogo from '../public/tailwindcss-logotype.svg';
+import NextJsLogo from '../public/Nextjs-logo.png';
+
+const TechCreditPage = () => {
+ return (
+
+
+
+ Tech Stack
+
+
+
+
+ Credits
+
+
+
+
+ );
+};
+
+export default TechCreditPage;
diff --git a/services/consts/registration-fields.js b/services/consts/registration-fields.ts
similarity index 100%
rename from services/consts/registration-fields.js
rename to services/consts/registration-fields.ts
diff --git a/services/consts/registration-update-fields.js b/services/consts/registration-update-fields.ts
similarity index 100%
rename from services/consts/registration-update-fields.js
rename to services/consts/registration-update-fields.ts
diff --git a/services/consts/submission-fields.js b/services/consts/submission-fields.ts
similarity index 100%
rename from services/consts/submission-fields.js
rename to services/consts/submission-fields.ts
diff --git a/services/consts/theme.js b/services/consts/theme.ts
similarity index 100%
rename from services/consts/theme.js
rename to services/consts/theme.ts
diff --git a/services/graphql/auth.js b/services/graphql/auth.js
deleted file mode 100644
index f06f7b91..00000000
--- a/services/graphql/auth.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { submit } from "@/services/request";
-import * as _ from "lodash";
-
-export const getAllUsers = () => {
- return submit({
- display: "All Users",
- name: "Users",
- function: "users",
- return: ["avatarUrl", "displayName", "id"],
- }).then((res) => {
- return _.orderBy(res, ["displayName"], ["asc"]);
- });
-};
diff --git a/services/graphql/auth.ts b/services/graphql/auth.ts
new file mode 100644
index 00000000..00862638
--- /dev/null
+++ b/services/graphql/auth.ts
@@ -0,0 +1,13 @@
+import { submit } from '@/services/request';
+import * as _ from 'lodash';
+
+export const getAllUsers = () => {
+ return submit({
+ display: 'All Users',
+ name: 'Users',
+ function: 'users',
+ return: ['avatarUrl', 'displayName', 'id']
+ }).then((res) => {
+ return _.orderBy(res, ['displayName'], ['asc']);
+ });
+};
diff --git a/services/graphql/ideas.js b/services/graphql/ideas.js
deleted file mode 100644
index 5faa328f..00000000
--- a/services/graphql/ideas.js
+++ /dev/null
@@ -1,355 +0,0 @@
-import { submit } from "@/services/request";
-import * as _ from "lodash";
-import { FaClosedCaptioning } from "react-icons/fa";
-import { insert_ideas_status } from "./status";
-
-export const createIdeaQuery = {
- display: "Insert Idea",
- name: "Insert_Hackathon_Ideas_One",
- function: "insert_hackathon_ideas_one",
- write: true,
- object: {},
- return: ["id"],
-};
-
-export const assignIdeaMembers = {
- display: "Insert Idea",
- name: "Insert_Hackathon_Ideas_Members",
- function: "insert_hackathon_ideas_members_one",
- write: true,
- object: {},
- return: ["id"],
-};
-
-export const insert_idea = (idea_object) => {
- const input_obj = { ...createIdeaQuery, ...{ object: idea_object } };
- input_obj.object.hackathon_id = process.env.NEXT_PUBLIC_HACKATHON_ID;
- return submit(input_obj);
-};
-
-export const assign_member = (idea_id, user_id) => {
- const input_obj = {
- ...assignIdeaMembers,
- ...{
- object: {
- idea_id: idea_id,
- user_id: user_id,
- },
- },
- };
- return submit(input_obj);
-};
-
-export const idea_count = (filter, current_user) => {
- const input_obj = {
- display: "Count Ideas",
- name: "Hackathon_Ideas_Aggregate",
- function: "hackathon_ideas_aggregate",
- return: [{ aggregate: ["count"] }],
- };
- if (filter && filter.owner && filter.owner === "me" && current_user) {
- input_obj.where = {
- clause: {
- class: "idea_owner_map",
- operator: "and",
- conditions: [
- {
- field: "id",
- operator: "eq",
- value: current_user,
- },
- ],
- },
- };
- }
-
- if (filter && filter.status_filter) {
- input_obj.where = {
- clause: {
- class: "idea_idea_status_map",
- operator: "and",
- conditions: [
- {
- field: "status_id",
- operator: "eq",
- value: filter.status_filter,
- },
- ],
- },
- };
- }
-
- return submit(input_obj).then((res) => {
- return res && res.aggregate ? res.aggregate.count : 0;
- });
-};
-
-export const list_ideas = (filter, current_user) => {
- const input_obj = {
- display: "List Ideas",
- name: "hackathon_ideas",
- function: "hackathon_ideas",
- orders: [{ field: "created_at", value: "desc" }],
- return: [
- "description",
- "title",
- "created_at",
- "id",
- {
- idea_idea_status_map: {
- idea_status_status_map: ["label"],
- },
- },
- {
- "idea_members_map ": [
- "id",
- {
- user_id_map: ["avatarUrl", "displayName"],
- },
- ],
- },
- {
- idea_owner_map: ["avatarUrl", "displayName"],
- },
- {
- idea_comments_map_aggregate: {
- aggregate: ["count"],
- },
- },
- {
- idea_like_map_aggregate: {
- aggregate: ["count"],
- },
- },
- ],
- distinct: "id",
- };
- if (filter.pagesize) {
- input_obj.limit = filter.pagesize;
- }
- if (filter.page) {
- input_obj.offset = (filter.page - 1) * filter.pagesize;
- }
-
- if (filter.sort_col) {
- input_obj.orders = [
- {
- field: filter.sort_col,
- value:
- filter.sort_asc === undefined || filter.sort_asc ? "asc" : "desc",
- },
- ];
- }
- if (filter.status_filter) {
- input_obj.where = {
- clause: {
- class: "idea_idea_status_map",
- operator: "and",
- conditions: [
- {
- field: "status_id",
- operator: "eq",
- value: filter.status_filter,
- },
- ],
- },
- };
- }
-
- if (filter.owner && filter.owner === "me" && current_user) {
- input_obj.where = {
- clause: {
- class: "idea_owner_map",
- operator: "and",
- conditions: [
- {
- field: "id",
- operator: "eq",
- value: current_user,
- },
- ],
- },
- };
- }
-
- return submit(input_obj).then((res) => {
- const s_col = filter && filter.sort_col ? filter.sort_col : "created_at";
- const s_type = filter && filter.sort_asc ? filter.sort_asc : false;
- let sorted = [];
- // if (sort_col === 'liked') {
- // sorted = _.orderBy(
- // res,
- // [(element) => element.idea_like_map_aggregate.aggregate.count],
- // [s_type ? 'asc' : 'desc']
- // );
- // } else {
- sorted = _.orderBy(
- res,
- [(element) => element[s_col].toLowerCase()],
- [s_type ? "asc" : "desc"]
- );
- // }
- return sorted;
- });
-};
-
-export const get_idea = (id) => {
- const input_obj = {
- display: "List Ideas",
- name: "hackathon_ideas",
- function: "hackathon_ideas",
- where: {
- clause: {
- operator: "and",
- conditions: [
- {
- field: "id",
- operator: "eq",
- value: id,
- },
- ],
- },
- },
-
- return: [
- "description",
- "title",
- "id",
- {
- idea_idea_status_map: [
- "date",
- { idea_status_status_map: ["label", "id"] },
- ],
- },
- {
- "idea_members_map ": [
- "id",
- {
- user_id_map: ["avatarUrl", "displayName", "id"],
- },
- ],
- },
- {
- idea_owner_map: ["avatarUrl", "displayName", "id"],
- },
- {
- idea_comments_map_aggregate: {
- aggregate: ["count"],
- },
- },
- {
- idea_like_map_aggregate: {
- aggregate: ["count"],
- },
- },
- {
- idea_comments_map: [
- "comment",
- "date",
- { idea_comment_user_map: ["displayName", "avatarUrl"] },
- ],
- },
- {
- idea_like_map: ["user_id"],
- },
- ],
- };
- return submit(input_obj).then((res) => {
- return res[0];
- });
-};
-
-export const update_ideas_demographic = (idea_object) => {
- const insert_obj = {
- display: "Update Idea",
- name: "Update_Hackathon_Ideas",
- function: "update_hackathon_ideas",
- write: true,
- value: {
- title: idea_object.title,
- description: idea_object.description,
- },
- where: {
- clause: {
- operator: "and",
- conditions: [
- {
- field: "id",
- operator: "eq",
- value: idea_object.id,
- },
- ],
- },
- },
- return: ["affected_rows"],
- };
-
- return submit(insert_obj);
-};
-
-export const update_ideas_member = (idea_object) => {
- let insert_obj = undefined;
-
- if (idea_object.users) {
- if (!idea_object.idea_members_map) {
- insert_obj = {
- display: "Insert Idea Member",
- name: "Insert_Hackathon_Ideas_Members_One",
- function: "insert_hackathon_ideas_members_one",
- write: true,
- object: {
- idea_id: idea_object.id,
- user_id: idea_object.users,
- },
- return: ["id"],
- };
- } else {
- insert_obj = {
- display: "Update Idea Member",
- name: "Update_Hackathon_Ideas_Members",
- function: "update_hackathon_ideas_members",
- write: true,
- value: {
- idea_id: idea_object.id,
- user_id: idea_object.users,
- },
- where: {
- clause: {
- operator: "and",
- conditions: [
- {
- field: "id",
- operator: "eq",
- value: idea_object.idea_members_map.id,
- },
- ],
- },
- },
- return: ["affected_rows"],
- };
- }
- return submit(insert_obj);
- }
-};
-
-export const insert_idea_submission = (idea_object) => {
- console.log(idea_object);
-
- idea_object.status = process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID;
- const insert_submission = {
- display: "Insert Idea Submission",
- name: "Insert_Hackathon_Idea_Submission_One",
- function: "insert_hackathon_idea_submission_one",
- write: true,
- object: {
- idea_id: idea_object.id,
- repository_url: idea_object.repository,
- blog_url: idea_object.blog,
- application: idea_object.application,
- comment: idea_object.comment,
- },
- return: ["id"],
- };
-
- return submit(insert_submission);
-};
diff --git a/services/graphql/ideas.ts b/services/graphql/ideas.ts
new file mode 100644
index 00000000..177d04b1
--- /dev/null
+++ b/services/graphql/ideas.ts
@@ -0,0 +1,351 @@
+import { submit } from '@/services/request';
+import * as _ from 'lodash';
+import { FaClosedCaptioning } from 'react-icons/fa';
+import { insert_ideas_status } from './status';
+
+export const createIdeaQuery = {
+ display: 'Insert Idea',
+ name: 'Insert_Hackathon_Ideas_One',
+ function: 'insert_hackathon_ideas_one',
+ write: true,
+ object: {},
+ return: ['id']
+};
+
+export const assignIdeaMembers = {
+ display: 'Insert Idea',
+ name: 'Insert_Hackathon_Ideas_Members',
+ function: 'insert_hackathon_ideas_members_one',
+ write: true,
+ object: {},
+ return: ['id']
+};
+
+export const insert_idea = (idea_object) => {
+ const input_obj = { ...createIdeaQuery, ...{ object: idea_object } };
+ input_obj.object.hackathon_id = process.env.NEXT_PUBLIC_HACKATHON_ID;
+ return submit(input_obj);
+};
+
+export const assign_member = (idea_id, user_id) => {
+ const input_obj = {
+ ...assignIdeaMembers,
+ ...{
+ object: {
+ idea_id: idea_id,
+ user_id: user_id
+ }
+ }
+ };
+ return submit(input_obj);
+};
+
+export const idea_count = (filter, current_user) => {
+ const input_obj = {
+ display: 'Count Ideas',
+ name: 'Hackathon_Ideas_Aggregate',
+ function: 'hackathon_ideas_aggregate',
+ return: [{ aggregate: ['count'] }]
+ };
+ if (filter && filter.owner && filter.owner === 'me' && current_user) {
+ input_obj.where = {
+ clause: {
+ class: 'idea_owner_map',
+ operator: 'and',
+ conditions: [
+ {
+ field: 'id',
+ operator: 'eq',
+ value: current_user
+ }
+ ]
+ }
+ };
+ }
+
+ if (filter && filter.status_filter) {
+ input_obj.where = {
+ clause: {
+ class: 'idea_idea_status_map',
+ operator: 'and',
+ conditions: [
+ {
+ field: 'status_id',
+ operator: 'eq',
+ value: filter.status_filter
+ }
+ ]
+ }
+ };
+ }
+
+ return submit(input_obj).then((res) => {
+ return res && res.aggregate ? res.aggregate.count : 0;
+ });
+};
+
+export const list_ideas = (filter, current_user) => {
+ const input_obj = {
+ display: 'List Ideas',
+ name: 'hackathon_ideas',
+ function: 'hackathon_ideas',
+ orders: [{ field: 'created_at', value: 'desc' }],
+ return: [
+ 'description',
+ 'title',
+ 'created_at',
+ 'id',
+ {
+ idea_idea_status_map: {
+ idea_status_status_map: ['label']
+ }
+ },
+ {
+ 'idea_members_map ': [
+ 'id',
+ {
+ user_id_map: ['avatarUrl', 'displayName']
+ }
+ ]
+ },
+ {
+ idea_owner_map: ['avatarUrl', 'displayName']
+ },
+ {
+ idea_comments_map_aggregate: {
+ aggregate: ['count']
+ }
+ },
+ {
+ idea_like_map_aggregate: {
+ aggregate: ['count']
+ }
+ }
+ ],
+ distinct: 'id'
+ };
+ if (filter.pagesize) {
+ input_obj.limit = filter.pagesize;
+ }
+ if (filter.page) {
+ input_obj.offset = (filter.page - 1) * filter.pagesize;
+ }
+
+ if (filter.sort_col) {
+ input_obj.orders = [
+ {
+ field: filter.sort_col,
+ value: filter.sort_asc === undefined || filter.sort_asc ? 'asc' : 'desc'
+ }
+ ];
+ }
+ if (filter.status_filter) {
+ input_obj.where = {
+ clause: {
+ class: 'idea_idea_status_map',
+ operator: 'and',
+ conditions: [
+ {
+ field: 'status_id',
+ operator: 'eq',
+ value: filter.status_filter
+ }
+ ]
+ }
+ };
+ }
+
+ if (filter.owner && filter.owner === 'me' && current_user) {
+ input_obj.where = {
+ clause: {
+ class: 'idea_owner_map',
+ operator: 'and',
+ conditions: [
+ {
+ field: 'id',
+ operator: 'eq',
+ value: current_user
+ }
+ ]
+ }
+ };
+ }
+
+ return submit(input_obj).then((res) => {
+ const s_col = filter && filter.sort_col ? filter.sort_col : 'created_at';
+ const s_type = filter && filter.sort_asc ? filter.sort_asc : false;
+ let sorted = [];
+ // if (sort_col === 'liked') {
+ // sorted = _.orderBy(
+ // res,
+ // [(element) => element.idea_like_map_aggregate.aggregate.count],
+ // [s_type ? 'asc' : 'desc']
+ // );
+ // } else {
+ sorted = _.orderBy(
+ res,
+ [(element) => element[s_col].toLowerCase()],
+ [s_type ? 'asc' : 'desc']
+ );
+ // }
+ return sorted;
+ });
+};
+
+export const get_idea = (id) => {
+ const input_obj = {
+ display: 'List Ideas',
+ name: 'hackathon_ideas',
+ function: 'hackathon_ideas',
+ where: {
+ clause: {
+ operator: 'and',
+ conditions: [
+ {
+ field: 'id',
+ operator: 'eq',
+ value: id
+ }
+ ]
+ }
+ },
+
+ return: [
+ 'description',
+ 'title',
+ 'id',
+ {
+ idea_idea_status_map: ['date', { idea_status_status_map: ['label', 'id'] }]
+ },
+ {
+ 'idea_members_map ': [
+ 'id',
+ {
+ user_id_map: ['avatarUrl', 'displayName', 'id']
+ }
+ ]
+ },
+ {
+ idea_owner_map: ['avatarUrl', 'displayName', 'id']
+ },
+ {
+ idea_comments_map_aggregate: {
+ aggregate: ['count']
+ }
+ },
+ {
+ idea_like_map_aggregate: {
+ aggregate: ['count']
+ }
+ },
+ {
+ idea_comments_map: [
+ 'comment',
+ 'date',
+ { idea_comment_user_map: ['displayName', 'avatarUrl'] }
+ ]
+ },
+ {
+ idea_like_map: ['user_id']
+ }
+ ]
+ };
+ return submit(input_obj).then((res) => {
+ return res[0];
+ });
+};
+
+export const update_ideas_demographic = (idea_object) => {
+ const insert_obj = {
+ display: 'Update Idea',
+ name: 'Update_Hackathon_Ideas',
+ function: 'update_hackathon_ideas',
+ write: true,
+ value: {
+ title: idea_object.title,
+ description: idea_object.description
+ },
+ where: {
+ clause: {
+ operator: 'and',
+ conditions: [
+ {
+ field: 'id',
+ operator: 'eq',
+ value: idea_object.id
+ }
+ ]
+ }
+ },
+ return: ['affected_rows']
+ };
+
+ return submit(insert_obj);
+};
+
+export const update_ideas_member = (idea_object) => {
+ let insert_obj = undefined;
+
+ if (idea_object.users) {
+ if (!idea_object.idea_members_map) {
+ insert_obj = {
+ display: 'Insert Idea Member',
+ name: 'Insert_Hackathon_Ideas_Members_One',
+ function: 'insert_hackathon_ideas_members_one',
+ write: true,
+ object: {
+ idea_id: idea_object.id,
+ user_id: idea_object.users
+ },
+ return: ['id']
+ };
+ } else {
+ insert_obj = {
+ display: 'Update Idea Member',
+ name: 'Update_Hackathon_Ideas_Members',
+ function: 'update_hackathon_ideas_members',
+ write: true,
+ value: {
+ idea_id: idea_object.id,
+ user_id: idea_object.users
+ },
+ where: {
+ clause: {
+ operator: 'and',
+ conditions: [
+ {
+ field: 'id',
+ operator: 'eq',
+ value: idea_object.idea_members_map.id
+ }
+ ]
+ }
+ },
+ return: ['affected_rows']
+ };
+ }
+ return submit(insert_obj);
+ }
+};
+
+export const insert_idea_submission = (idea_object) => {
+ console.log(idea_object);
+
+ idea_object.status = process.env.NEXT_PUBLIC_HACKATHON_SUBMIT_STATUS_ID;
+ const insert_submission = {
+ display: 'Insert Idea Submission',
+ name: 'Insert_Hackathon_Idea_Submission_One',
+ function: 'insert_hackathon_idea_submission_one',
+ write: true,
+ object: {
+ idea_id: idea_object.id,
+ repository_url: idea_object.repository,
+ blog_url: idea_object.blog,
+ application: idea_object.application,
+ comment: idea_object.comment
+ },
+ return: ['id']
+ };
+
+ return submit(insert_submission);
+};
diff --git a/services/graphql/interactions.js b/services/graphql/interactions.ts
similarity index 100%
rename from services/graphql/interactions.js
rename to services/graphql/interactions.ts
diff --git a/services/graphql/status.js b/services/graphql/status.ts
similarity index 100%
rename from services/graphql/status.js
rename to services/graphql/status.ts
diff --git a/services/metadata/hackrplay.js b/services/metadata/hackrplay.js
deleted file mode 100644
index c894fe62..00000000
--- a/services/metadata/hackrplay.js
+++ /dev/null
@@ -1,227 +0,0 @@
-export const Config = {
- name: "hackrplay",
- display: "Hack-R-Play",
- completed: true,
- links: [
- {
- name: "About",
- href: "#about",
- },
- {
- name: "Sponsors",
- href: "#sponsors",
- },
- {
- name: "Judges",
- href: "#judges",
- },
- {
- name: "Faqs",
- href: "#faqs",
- },
- ],
- submissionurl: "hackrplay/ideas",
- subtitle:
- "ReactPlay brings you the opportunity to take part in the Hackathon and learn from it. Showcase your mindblowing ideas, build projects, and create content - there are also chances to win exciting prizes",
- about: {
- texts: [
- "Developers are lifetime hackers!",
- "Hack-R-Play is an initiative from the ReactPlay platform to help you hack, build, learn, and simultaneously contribute open source through #hacktoberfest",
- "All for it? Here are some rules you need to keep in mind:",
- ],
- bullets: [
- "It must be built in React Ecosystem. (eg - ReactJS, NextJS, RemixJS etc)",
- "The app must use one or more service of [Nhost backend](https://nhost.io)",
- "Project source code must be open on github.",
- "You must deploy the app publicly.",
- "You must write an article about your journey of building it and publish it on the ReactPlay blog.",
- "[Read more](https://blog.reactplay.io/announcing-hack-r-play-hackathon-from-react-play) on the ReactPlay repository for each pull request.",
- ],
- footer:
- "Please join the [ReactPlay discord server](https://discord.gg/UfYj4MvW9A) to get any help while you are building.",
- highlights: [
- "Create 2 Plays using React",
- "Share your journey publicly",
- "Get the plays reviewed and merged",
- ],
- },
- judges: [
- {
- name: "Johan Eliasson",
- twitter: "elitasson",
- title: "CEO Nhost",
- avatar:
- "https://pbs.twimg.com/profile_images/1447184004558557193/agXMdsqe_400x400.jpg",
- },
- {
- name: "Koustov Maitra",
- twitter: "koustov",
- title: "Solution Architect, ReactPlay",
- avatar:
- "https://pbs.twimg.com/profile_images/1443859238443360258/6_H-pDaM_400x400.jpg",
- },
- {
- name: "Pratim Bhosale",
- twitter: "BhosalePratim",
- title: "Developer Advocate, Nhost",
- avatar:
- "https://pbs.twimg.com/profile_images/1489130124792369154/-3M4AlrG_400x400.jpg",
- },
- {
- name: "Tapas Adhikary",
- twitter: "tapasAdhikary",
- title: "Founder, ReactPlay",
- avatar:
- "https://pbs.twimg.com/profile_images/1495457010598309888/zPrTNF4F_400x400.jpg",
- },
- ],
- faqs: [
- {
- question: "Why should I perticipate in the Hack-R-Play?",
- answer:
- "Do you like learning while building something? How about a platform that provides you with an opportunity to build a full-stack application end-to-end, showcase it to the world, motivate you to create content about it, and help build networking? Hack-R-Play aims precisely the same. Join the Hackathon brought to you by ReactPlay and start building a cool project that we can't wait to see!",
- },
- {
- question: "Do I need to Register for Hack-R-Play?",
- answer:
- "Yes, you need to Register your idea for the Hack-R-Play hackathon. To do that, click on the REGISTER button at the top of the page and submit a few details to register your idea.",
- },
- {
- question: "Can we participate as a team?",
- answer:
- "Yes, you can participate in a team of 2(max). You can select the other member's name when you register your idea for the event. If you are the only person registering for an idea, just skip selecting any member while registering. If you liked an idea and want be part of it, please contact the idea creator.",
- },
- {
- question: "Does my Idea needs to follow a specific theme?",
- answer:
- "Not really! However, we suggest you build something valuable that you will keep building even after the Hack-R-Play Event. Rest is entirely up to you.",
- },
- {
- question: "Can I use anything other than React?",
- answer:
- "You can use anything related to React and its ecosystem. You can use Next.js, Gatsby, React Native, and even plain React!",
- },
- {
- question: "What do I need to Submit?",
- answer:
- "When you submit the project after completion, you submit three public links. Link to your project source code, link to your application, and link to the article that explains how you have used React/React-based library/framework with Nhost to build this application.",
- },
- {
- question: "Is the blog article mandatory to submit?",
- answer:
- "Yes, very much! Please document your entire Hack-R-Play journey and publish them on the ReactPlay blog(blog.reactplay.io). Don't worry if you are not a seasoned blogger. We will help with reviews if you submit the blog article at least 3 days before the event's end date.",
- },
- {
- question: "When and How the Hack-R-Play result will be published?",
- answer:
- "Hack-R-Play 2022 results will be published on 30th October. We will publish it on our website, and the Twitter handle(@reactplayio).",
- },
- {
- question: "Do we get prizes?",
- answer:
- "Yes, we will select 3 best ideas to give the exciting prizes sponsored by Nhost.",
- },
- {
- question: "I have questions, where can I ask them?",
- answer:
- "Got a question? Please join our Discord(the link is in the footer of this page). You can ask us anything in the hack-r-play channel.",
- },
- ],
- cta: {
- title: "Be a part of the best react event",
- description:
- "Learning is a journey than a destination. We developers need avenues, motivations, and opportunities to keep going. Join the Hack-R-Play hackathon to experience it. It will allow you to build a full-stack app using React and Nhost. Why waiting? Register your idea today",
- },
- partners: [
- {
- logo: "NhostLogo.svg",
- text: "Nhost is the open source GraphQL backend (Firebase Alternative) and a development platform. Nhost is doing for the backend, what Netlify and Vercel are doing for the frontend. It make things easy to build and deploy this backend using our platform that takes care of configuration, security, and performance. Things just works andscale automatically so you can focus on your product and on your business.",
- display: "NHost",
- link: "https://docs.nhost.io/",
- },
- ],
- winners: [
- {
- name: "Chakri",
- twitter: "https://twitter.com/geekyChakri",
- github: "https://github.com/GeekyChakri",
- email: "geekychakri@gmail.com",
- avatar:
- "https://pbs.twimg.com/profile_images/1532395278107435011/jBTuAENH_400x400.png",
- projectName: "Classroom",
- projectLink: "https://learnwithclassroom.vercel.app",
- article:
- "https://blog.reactplay.io/introducing-classroom-learning-with-youtube-made-exciting",
- projectSource: "https://github.com/GeekyChakri/Classroom",
-
- position: "1",
- },
- {
- name: "Shyam Mahanta",
- twitter: "https://twitter.com/ShyamMahanta2",
- github: "https://github.com/Angryman18",
- email: "smahanta118@gmail.com",
- avatar: "https://avatars.githubusercontent.com/u/63530626?v=4",
- projectName: "Papercode",
- projectLink: "https://papercode.netlify.app/",
- projectSource: "https://github.com/Angryman18/papercode",
-
- article:
- "https://blog.reactplay.io/tour-of-a-live-coding-playground-app-built-using-reactjs-nhost",
- position: "2",
- },
- {
- name: "Aashish Panthi",
- twitter: "https://twitter.com/aashishpanthi11",
- github: "https://github.com/aashishpanthi",
- email: "aashishpanthi11@gmail.com",
- avatar: "https://avatars.githubusercontent.com/u/60884239?v=4",
- projectName: "Mailsbe",
- projectLink: "https://mailsbe.netlify.app/",
- projectSource: "https://github.com/aashishpanthi/mailsbe",
- article: "https://blog.reactplay.io/mailsbe-an-email-status-finder",
- position: "3",
- },
- ],
- mentions: [
- {
- name: "Supriya M",
- twitter: "https://twitter.com/supminn",
- github: "https://github.com/supminn",
- email: "sansup49@gmail.com",
- avatar: "https://avatars.githubusercontent.com/u/30731236?v=4",
- projectName: "FinSaver",
- projectLink: "https://finsaver.vercel.app/",
- projectSource: "https://github.com/supminn/expense_tracker",
-
- article: "https://blog.reactplay.io/building-finsaver-for-hack-r-play",
- },
- {
- name: "Armaan Kazi",
- twitter: "https://twitter.com/Armankazi111",
- github: "https://github.com/Amyx000/",
- email: "armankazi111@gmail.com",
- avatar: "https://avatars.githubusercontent.com/u/104687128?v=4",
- projectName: "React Resume Builder",
- projectLink: "https://react--resume--builder.vercel.app/",
- projectSource: "https://github.com/Amyx000/React-Resume-Builder",
-
- article:
- "https://blog.reactplay.io/react-resume-builder-with-react-and-nhost",
- },
- {
- name: "Ammaar Aslam",
- twitter: "https://twitter.com/itsammaar_7",
- github: "https://github.com/ammaaraslam",
- email: "ammaaraslam7@gmail.com",
- avatar:
- "https://avatars.githubusercontent.com/u/96367405?s=400&u=cb1c3999b75b33502f3149fd47b251731be286e7&v=4",
- projectName: "WriteOnce",
- projectLink: "https://writeonce.vercel.app/",
- projectSource: "https://github.com/ammaaraslam/write-once",
-
- article:
- "https://blog.reactplay.io/introducing-writeonce-a-markdown-editor-for-devs-who-blog",
- },
- ],
-};
diff --git a/services/metadata/hackrplay.ts b/services/metadata/hackrplay.ts
new file mode 100644
index 00000000..1dd4f7c2
--- /dev/null
+++ b/services/metadata/hackrplay.ts
@@ -0,0 +1,211 @@
+import { IConfig } from 'types';
+
+export const Config: Partial = {
+ name: 'hackrplay',
+ display: 'Hack-R-Play',
+ completed: true,
+ links: [
+ {
+ name: 'About',
+ href: '#about'
+ },
+ {
+ name: 'Sponsors',
+ href: '#sponsors'
+ },
+ {
+ name: 'Judges',
+ href: '#judges'
+ },
+ {
+ name: 'Faqs',
+ href: '#faqs'
+ }
+ ],
+ submissionurl: 'hackrplay/ideas',
+ subtitle:
+ 'ReactPlay brings you the opportunity to take part in the Hackathon and learn from it. Showcase your mindblowing ideas, build projects, and create content - there are also chances to win exciting prizes',
+ about: {
+ texts: [
+ 'Developers are lifetime hackers!',
+ 'Hack-R-Play is an initiative from the ReactPlay platform to help you hack, build, learn, and simultaneously contribute open source through #hacktoberfest',
+ 'All for it? Here are some rules you need to keep in mind:'
+ ],
+ bullets: [
+ 'It must be built in React Ecosystem. (eg - ReactJS, NextJS, RemixJS etc)',
+ 'The app must use one or more service of [Nhost backend](https://nhost.io)',
+ 'Project source code must be open on github.',
+ 'You must deploy the app publicly.',
+ 'You must write an article about your journey of building it and publish it on the ReactPlay blog.',
+ '[Read more](https://blog.reactplay.io/announcing-hack-r-play-hackathon-from-react-play) on the ReactPlay repository for each pull request.'
+ ],
+ footer: 'Please join the [ReactPlay discord server](https://discord.gg/UfYj4MvW9A) to get any help while you are building.',
+ highlights: [
+ 'Create 2 Plays using React',
+ 'Share your journey publicly',
+ 'Get the plays reviewed and merged'
+ ]
+ },
+ judges: [
+ {
+ name: 'Johan Eliasson',
+ twitter: 'elitasson',
+ title: 'CEO Nhost',
+ avatar: 'https://pbs.twimg.com/profile_images/1447184004558557193/agXMdsqe_400x400.jpg'
+ },
+ {
+ name: 'Koustov Maitra',
+ twitter: 'koustov',
+ title: 'Solution Architect, ReactPlay',
+ avatar: 'https://pbs.twimg.com/profile_images/1443859238443360258/6_H-pDaM_400x400.jpg'
+ },
+ {
+ name: 'Pratim Bhosale',
+ twitter: 'BhosalePratim',
+ title: 'Developer Advocate, Nhost',
+ avatar: 'https://pbs.twimg.com/profile_images/1489130124792369154/-3M4AlrG_400x400.jpg'
+ },
+ {
+ name: 'Tapas Adhikary',
+ twitter: 'tapasAdhikary',
+ title: 'Founder, ReactPlay',
+ avatar: 'https://pbs.twimg.com/profile_images/1495457010598309888/zPrTNF4F_400x400.jpg'
+ }
+ ],
+ faqs: [
+ {
+ question: 'Why should I perticipate in the Hack-R-Play?',
+ answer: "Do you like learning while building something? How about a platform that provides you with an opportunity to build a full-stack application end-to-end, showcase it to the world, motivate you to create content about it, and help build networking? Hack-R-Play aims precisely the same. Join the Hackathon brought to you by ReactPlay and start building a cool project that we can't wait to see!"
+ },
+ {
+ question: 'Do I need to Register for Hack-R-Play?',
+ answer: 'Yes, you need to Register your idea for the Hack-R-Play hackathon. To do that, click on the REGISTER button at the top of the page and submit a few details to register your idea.'
+ },
+ {
+ question: 'Can we participate as a team?',
+ answer: "Yes, you can participate in a team of 2(max). You can select the other member's name when you register your idea for the event. If you are the only person registering for an idea, just skip selecting any member while registering. If you liked an idea and want be part of it, please contact the idea creator."
+ },
+ {
+ question: 'Does my Idea needs to follow a specific theme?',
+ answer: 'Not really! However, we suggest you build something valuable that you will keep building even after the Hack-R-Play Event. Rest is entirely up to you.'
+ },
+ {
+ question: 'Can I use anything other than React?',
+ answer: 'You can use anything related to React and its ecosystem. You can use Next.js, Gatsby, React Native, and even plain React!'
+ },
+ {
+ question: 'What do I need to Submit?',
+ answer: 'When you submit the project after completion, you submit three public links. Link to your project source code, link to your application, and link to the article that explains how you have used React/React-based library/framework with Nhost to build this application.'
+ },
+ {
+ question: 'Is the blog article mandatory to submit?',
+ answer: "Yes, very much! Please document your entire Hack-R-Play journey and publish them on the ReactPlay blog(blog.reactplay.io). Don't worry if you are not a seasoned blogger. We will help with reviews if you submit the blog article at least 3 days before the event's end date."
+ },
+ {
+ question: 'When and How the Hack-R-Play result will be published?',
+ answer: 'Hack-R-Play 2022 results will be published on 30th October. We will publish it on our website, and the Twitter handle(@reactplayio).'
+ },
+ {
+ question: 'Do we get prizes?',
+ answer: 'Yes, we will select 3 best ideas to give the exciting prizes sponsored by Nhost.'
+ },
+ {
+ question: 'I have questions, where can I ask them?',
+ answer: 'Got a question? Please join our Discord(the link is in the footer of this page). You can ask us anything in the hack-r-play channel.'
+ }
+ ],
+ cta: {
+ title: 'Be a part of the best react event',
+ description:
+ 'Learning is a journey than a destination. We developers need avenues, motivations, and opportunities to keep going. Join the Hack-R-Play hackathon to experience it. It will allow you to build a full-stack app using React and Nhost. Why waiting? Register your idea today'
+ },
+ partners: [
+ {
+ logo: 'NhostLogo.svg',
+ text: 'Nhost is the open source GraphQL backend (Firebase Alternative) and a development platform. Nhost is doing for the backend, what Netlify and Vercel are doing for the frontend. It make things easy to build and deploy this backend using our platform that takes care of configuration, security, and performance. Things just works andscale automatically so you can focus on your product and on your business.',
+ display: 'NHost',
+ link: 'https://docs.nhost.io/'
+ }
+ ],
+ winners: [
+ {
+ name: 'Chakri',
+ twitter: 'https://twitter.com/geekyChakri',
+ github: 'https://github.com/GeekyChakri',
+ email: 'geekychakri@gmail.com',
+ avatar: 'https://pbs.twimg.com/profile_images/1532395278107435011/jBTuAENH_400x400.png',
+ projectName: 'Classroom',
+ projectLink: 'https://learnwithclassroom.vercel.app',
+ article:
+ 'https://blog.reactplay.io/introducing-classroom-learning-with-youtube-made-exciting',
+ projectSource: 'https://github.com/GeekyChakri/Classroom',
+
+ position: '1'
+ },
+ {
+ name: 'Shyam Mahanta',
+ twitter: 'https://twitter.com/ShyamMahanta2',
+ github: 'https://github.com/Angryman18',
+ email: 'smahanta118@gmail.com',
+ avatar: 'https://avatars.githubusercontent.com/u/63530626?v=4',
+ projectName: 'Papercode',
+ projectLink: 'https://papercode.netlify.app/',
+ projectSource: 'https://github.com/Angryman18/papercode',
+
+ article:
+ 'https://blog.reactplay.io/tour-of-a-live-coding-playground-app-built-using-reactjs-nhost',
+ position: '2'
+ },
+ {
+ name: 'Aashish Panthi',
+ twitter: 'https://twitter.com/aashishpanthi11',
+ github: 'https://github.com/aashishpanthi',
+ email: 'aashishpanthi11@gmail.com',
+ avatar: 'https://avatars.githubusercontent.com/u/60884239?v=4',
+ projectName: 'Mailsbe',
+ projectLink: 'https://mailsbe.netlify.app/',
+ projectSource: 'https://github.com/aashishpanthi/mailsbe',
+ article: 'https://blog.reactplay.io/mailsbe-an-email-status-finder',
+ position: '3'
+ }
+ ],
+ mentions: [
+ {
+ name: 'Supriya M',
+ twitter: 'https://twitter.com/supminn',
+ github: 'https://github.com/supminn',
+ email: 'sansup49@gmail.com',
+ avatar: 'https://avatars.githubusercontent.com/u/30731236?v=4',
+ projectName: 'FinSaver',
+ projectLink: 'https://finsaver.vercel.app/',
+ projectSource: 'https://github.com/supminn/expense_tracker',
+
+ article: 'https://blog.reactplay.io/building-finsaver-for-hack-r-play'
+ },
+ {
+ name: 'Armaan Kazi',
+ twitter: 'https://twitter.com/Armankazi111',
+ github: 'https://github.com/Amyx000/',
+ email: 'armankazi111@gmail.com',
+ avatar: 'https://avatars.githubusercontent.com/u/104687128?v=4',
+ projectName: 'React Resume Builder',
+ projectLink: 'https://react--resume--builder.vercel.app/',
+ projectSource: 'https://github.com/Amyx000/React-Resume-Builder',
+
+ article: 'https://blog.reactplay.io/react-resume-builder-with-react-and-nhost'
+ },
+ {
+ name: 'Ammaar Aslam',
+ twitter: 'https://twitter.com/itsammaar_7',
+ github: 'https://github.com/ammaaraslam',
+ email: 'ammaaraslam7@gmail.com',
+ avatar: 'https://avatars.githubusercontent.com/u/96367405?s=400&u=cb1c3999b75b33502f3149fd47b251731be286e7&v=4',
+ projectName: 'WriteOnce',
+ projectLink: 'https://writeonce.vercel.app/',
+ projectSource: 'https://github.com/ammaaraslam/write-once',
+
+ article:
+ 'https://blog.reactplay.io/introducing-writeonce-a-markdown-editor-for-devs-who-blog'
+ }
+ ]
+};
diff --git a/services/metadata/home.js b/services/metadata/home.js
deleted file mode 100644
index 769ee8aa..00000000
--- a/services/metadata/home.js
+++ /dev/null
@@ -1,118 +0,0 @@
-export const Config = {
- name: "hustleHomePage",
- display: "#2PlaysAMonth",
- description:
- "#2PlaysAMonth is an event by ReactPlay for the ReactJs community to learn, build, share in public. Join us.",
- keywords: "ReactPlay, #2PlaysAMonth, ReactJS",
- links: [
- {
- id: 0,
- name: "Plays",
- href: "https://reactplay.io/plays",
- },
- {
- id: 1,
- name: "Events",
- href: "#events",
- },
- {
- id: 2,
- name: "Live",
- href: "#live",
- },
- {
- id: 3,
- name: "Spaces",
- href: "#spaces",
- },
- {
- id: 4,
- name: "Gallery",
- href: "#gallery",
- },
- ],
- events: [
- {
- id: 0,
- name: "Hack-R-Play",
- description:
- "ReactPlay brings you the opportunity to take part in the Hackathon and learn from it. Showcase your mindblowing ideas, build projects, and create content - there are also chances to win exciting prizes.",
- image: "hackrplay/BannerLogo",
- link: `/events/22/hackrplay`,
- isCompleted: true,
- isCurrent: false,
- },
- {
- id: 1,
- name: "2PlaysaMonth",
- description:
- "ReactPlay brings you an opportunity to participate in the month-long drive to learn and contribute to Open Source. Join the #2PlaysAMonth and build two projects(plays) in the month of February. You will learn from expert code reviews while contributing to Open Source - you may also win some exciting prize",
- image: "twoplaysamonth/NavbarLogo",
- link: `/events/23/twoplaysamonth`,
- isCompleted: true,
- isCurrent: false,
- },
- {
- id: 2,
- name: "2PlaysaMonth",
- description:
- "ReactPlay brings you an opportunity to participate in the month-long drive to learn and contribute to Open Source. Join the #2PlaysAMonth and build two projects(plays) in the month of February. You will learn from expert code reviews while contributing to Open Source - you may also win some exciting prize",
- image: "twoplaysamonth/NavbarLogo",
- link: `/events/23/twoplaysamonth`,
- isCompleted: true,
- isCurrent: false,
- },
- ],
-
- twitterSpaces: [
- {
- id: 0,
- link: "https://twitter.com/i/spaces/1OdKrBXaBrOKX",
- guestSpeaker: "Nikhil",
- title: "Catch up with Nikhil - UX, Design Systems, OSS, React, and more.",
- date: "Aug 3, 2022",
- },
- {
- id: 1,
- link: "https://twitter.com/i/spaces/1zqJVPQobgnKB",
- guestSpeaker: "Shruti",
- title: "Catch up with Shruti - CSS, Design, Tailwind, and more!",
- date: "Sep 2, 2022",
- },
- {
- id: 2,
- link: "https://twitter.com/i/spaces/1djxXljXOpVxZ",
- guestSpeaker: "Swapna",
- title: "Catch up with Swapna - Content, Career, DSA, and more!",
- date: "Oct 13, 2022",
- },
- // {
- // id: 3,
- // link: "https://twitter.com/i/spaces/1DXxyvzankdKM",
- // guestSpeaker: "Aakansha",
- // title: "Catch up with Aakansha - Side hustles, Open Source, and more!",
- // date: null,
- // },
- // {
- // id: 4,
- // link: "https://twitter.com/i/spaces/1djGXlmrMYOGZ",
- // guestSpeaker: "Ajin",
- // title: "Catch up with Ajin - react native, flutter, career and more !",
- // date: "Nov 18, 2022",
- // },
- // {
- // id: 5,
- // link: "https://twitter.com/i/spaces/1MYxNgzkeNzKw",
- // guestSpeaker: "Victoria",
- // title: "Catching up with Victoria - Career, Dev wellbeing, Blogging",
- // date: "Jan 13, 2023",
- // },
- // {
- // id: 6,
- // link: "https://twitter.com/i/spaces/1RDxlaoZopEKL",
- // guestSpeaker: "Ritesh",
- // title: "Catching up with Ritesh - #2PlaysAMonth special episode",
- // date: "Feb 3, 2023",
- // },
- ],
-};
diff --git a/services/metadata/home.ts b/services/metadata/home.ts
new file mode 100644
index 00000000..e64572de
--- /dev/null
+++ b/services/metadata/home.ts
@@ -0,0 +1,120 @@
+import { IConfig } from 'types';
+
+export const Config: Partial = {
+ name: 'hustleHomePage',
+ display: '#2PlaysAMonth',
+ description:
+ '#2PlaysAMonth is an event by ReactPlay for the ReactJs community to learn, build, share in public. Join us.',
+ keywords: 'ReactPlay, #2PlaysAMonth, ReactJS',
+ links: [
+ {
+ id: 0,
+ name: 'Plays',
+ href: 'https://reactplay.io/plays'
+ },
+ {
+ id: 1,
+ name: 'Events',
+ href: '#events'
+ },
+ {
+ id: 2,
+ name: 'Live',
+ href: '#live'
+ },
+ {
+ id: 3,
+ name: 'Spaces',
+ href: '#spaces'
+ },
+ {
+ id: 4,
+ name: 'Gallery',
+ href: '#gallery'
+ }
+ ],
+ events: [
+ {
+ id: 0,
+ name: 'Hack-R-Play',
+ description:
+ 'ReactPlay brings you the opportunity to take part in the Hackathon and learn from it. Showcase your mindblowing ideas, build projects, and create content - there are also chances to win exciting prizes.',
+ image: 'hackrplay/BannerLogo',
+ link: `/events/22/hackrplay`,
+ isCompleted: true,
+ isCurrent: false
+ },
+ {
+ id: 1,
+ name: '2PlaysaMonth',
+ description:
+ 'ReactPlay brings you an opportunity to participate in the month-long drive to learn and contribute to Open Source. Join the #2PlaysAMonth and build two projects(plays) in the month of February. You will learn from expert code reviews while contributing to Open Source - you may also win some exciting prize',
+ image: 'twoplaysamonth/NavbarLogo',
+ link: `/events/23/twoplaysamonth`,
+ isCompleted: true,
+ isCurrent: false
+ },
+ {
+ id: 2,
+ name: '2PlaysaMonth',
+ description:
+ 'ReactPlay brings you an opportunity to participate in the month-long drive to learn and contribute to Open Source. Join the #2PlaysAMonth and build two projects(plays) in the month of February. You will learn from expert code reviews while contributing to Open Source - you may also win some exciting prize',
+ image: 'twoplaysamonth/NavbarLogo',
+ link: `/events/23/twoplaysamonth`,
+ isCompleted: true,
+ isCurrent: false
+ }
+ ],
+
+ twitterSpaces: [
+ {
+ id: 0,
+ link: 'https://twitter.com/i/spaces/1OdKrBXaBrOKX',
+ guestSpeaker: 'Nikhil',
+ title: 'Catch up with Nikhil - UX, Design Systems, OSS, React, and more.',
+ date: 'Aug 3, 2022'
+ },
+ {
+ id: 1,
+ link: 'https://twitter.com/i/spaces/1zqJVPQobgnKB',
+ guestSpeaker: 'Shruti',
+ title: 'Catch up with Shruti - CSS, Design, Tailwind, and more!',
+ date: 'Sep 2, 2022'
+ },
+ {
+ id: 2,
+ link: 'https://twitter.com/i/spaces/1djxXljXOpVxZ',
+ guestSpeaker: 'Swapna',
+ title: 'Catch up with Swapna - Content, Career, DSA, and more!',
+ date: 'Oct 13, 2022'
+ }
+ // {
+ // id: 3,
+ // link: "https://twitter.com/i/spaces/1DXxyvzankdKM",
+ // guestSpeaker: "Aakansha",
+ // title: "Catch up with Aakansha - Side hustles, Open Source, and more!",
+ // date: null,
+ // },
+ // {
+ // id: 4,
+ // link: "https://twitter.com/i/spaces/1djGXlmrMYOGZ",
+ // guestSpeaker: "Ajin",
+ // title: "Catch up with Ajin - react native, flutter, career and more !",
+ // date: "Nov 18, 2022",
+ // },
+ // {
+ // id: 5,
+ // link: "https://twitter.com/i/spaces/1MYxNgzkeNzKw",
+ // guestSpeaker: "Victoria",
+ // title: "Catching up with Victoria - Career, Dev wellbeing, Blogging",
+ // date: "Jan 13, 2023",
+ // },
+ // {
+ // id: 6,
+ // link: "https://twitter.com/i/spaces/1RDxlaoZopEKL",
+ // guestSpeaker: "Ritesh",
+ // title: "Catching up with Ritesh - #2PlaysAMonth special episode",
+ // date: "Feb 3, 2023",
+ // },
+ ]
+};
diff --git a/services/metadata/index.js b/services/metadata/index.ts
similarity index 100%
rename from services/metadata/index.js
rename to services/metadata/index.ts
diff --git a/services/metadata/twoplaysamonth.js b/services/metadata/twoplaysamonth.js
deleted file mode 100644
index 523a5e60..00000000
--- a/services/metadata/twoplaysamonth.js
+++ /dev/null
@@ -1,187 +0,0 @@
-export const Config = {
- name: "twoplaysamonth",
- display: "#2PlaysAMonth",
- description:
- "#2PlaysAMonth is an event by ReactPlay for the ReactJs community to learn, build, share in public. Join us.",
- keywords: "ReactPlay, #2PlaysAMonth, ReactJS",
- completed: false,
- started: false,
- links: [
- {
- name: "About",
- href: "#about",
- },
- {
- name: "Sponsors",
- href: "#sponsors",
- },
- {
- name: "Judges",
- href: "#judges",
- },
- {
- name: "Faqs",
- href: "#faqs",
- },
- ],
- result_links: [
- {
- link: "https://github.com/reactplay/react-play/issues?q=is%3Aissue+label%3A%232PlaysAMonth+",
- name: "Ideas",
- target: "_blank",
- },
- {
- link: "https://github.com/reactplay/react-play/pulls?q=is%3Apr+label%3A%232PlaysAMonth+",
- name: "Submissions",
- target: "_blank",
- },
- ],
- subtitle:
- "ReactPlay brings you an opportunity to participate in the month-long drive to learn and contribute to Open Source. Join the #2PlaysAMonth and build two projects(plays) in the month of February. You will learn from expert code reviews while contributing to Open Source - you may also win some exciting prizes.",
- about: {
- texts: [
- "#2PlaysAMonth is an initiative from the ReactPlay community to help you learn, build, and simultaneously contribute to open source throughout the month of February.",
- "Would you be up for it? Here are a few things to keep in mind before you get started:",
- ],
- bullets: [
- "You must complete two plays(React Projects) in ReactPlay between February 1st to February 28th 2023.",
- "You must follow the [Create a Play](https://github.com/reactplay/react-play/blob/main/CREATE-PLAY.md) steps to create the play. Please [create an issue](https://github.com/reactplay/react-play/issues/new?assignees=&labels=%232PlaysAMonth&template=%232PlaysAMonth.yml&title=%5B%232PlaysAMonth%5D%3A+) on the ReactPlay repository for each pull request.",
- "Your play must have `#2PlaysAMonth` tag added to it while creating.",
- "You can build any play of your choice. If you are looking for ideas, [here are some you can get inspired by](https://reactplay.io/ideas).",
- "You must register on [stackstream](https://www.stack-stream.com/).",
- "Create a demo on [stackstream](https://www.stack-stream.com/) explaining your work and add the recording link to your play by editing it.",
- "Additionally, if you spend at least 5 hours streaming on [stackstream](https://www.stack-stream.com/) in the February month, you qualify for additional bonus points(karma) to win.",
- "Share a Tweet and/or LinkedIn Post announcing your participation and PR merge with the hashtag `#2PlaysAMonth` and tag ReactPlay's handle(@ReactPlayIO)",
- ],
- footer:
- "Please join the [ReactPlay discord server](https://discord.gg/UfYj4MvW9A) to get any help while you are building. Also, check the [FAQ](https://hustles.reactplay.io/events/23/twoplaysamonth#faqs) section for more details.",
- highlights: [
- "Complete 2 Plays using ReactJS",
- "Demo your work",
- "Win badges, prizes, and bonus points",
- ],
- },
- judges: [
- {
- name: "Harshit Jain",
- twitter: "jain_harshit",
- title: "SDE3, Intuit",
- avatar:
- "https://pbs.twimg.com/profile_images/1523150875153567744/zpRDym_L_400x400.jpg",
- },
- {
- name: "Kapeel Kokane",
- twitter: "kokaneka",
- title: "SDE2, Microsoft",
- avatar:
- "https://pbs.twimg.com/profile_images/1372919009939652612/E9s309tH_400x400.jpg",
- },
- {
- name: "Koustov Maitra",
- twitter: "koustov",
- title: "Architect, ReactPlay",
- avatar:
- "https://pbs.twimg.com/profile_images/1443859238443360258/6_H-pDaM_400x400.jpg",
- },
- {
- name: "Tapas Adhikary",
- twitter: "tapasAdhikary",
- title: "Founder, ReactPlay",
- avatar:
- "https://pbs.twimg.com/profile_images/1495457010598309888/zPrTNF4F_400x400.jpg",
- },
- ],
- faqs: [
- {
- question: "Why should I participate in the #2PlaysAMonth event?",
- answer:
- "Do you like learning while building something? How about a platform that allows you to build a ReactJS application end-to-end, learn from the review comments, contribute to open source, showcase it to the world, and help build networking? #2PlaysAMonth aims precisely the same. Join the drive brought to you by ReactPlay and start building cool projects that we can't wait to see!",
- },
- {
- question: "Do I need to Register for #2PlaysAMonth?",
- answer:
- "Nope. You can create the play by following the criteria mentioned in this page's About section.",
- },
- {
- question: "Is it mandatory to create 2 plays?",
- answer:
- "Yes. That's one of the qualifying criteria. You must create and complete 2 plays.",
- },
- {
- question: "What if my play review gets delayed?",
- answer:
- "You must ensure you give the reviewers enough time to review your code and provide comments. We're looking forward to 4-5 days(based on how actively you respond to the comments) to complete the review process of a play. Try submitting your plays at least 7-10 days before the end date to avoid messy situations. If your review gets delayed by reviewers, we will ensure you the extra time, but that will be a rare case!",
- },
- {
- question: "Can we participate as a team?",
- answer:
- "Nope. It's an individual event. However, feel free to collaborate with others.",
- },
- {
- question: "Can I use anything other than React?",
- answer:
- "ReactPlay is a platform to help web developers learn ReactJs and build projects. For this initiative, ReactJs is a must.",
- },
- {
- question: "Can I submit my old React project as a play?",
- answer:
- "You can. However, could you please mention the old project in the play description? Also, the play should be something other than a 1-1 matching your existing project. You must bring some changes/ideas into it.",
- },
- {
- question: "Can I submit code/project of someone else?",
- answer:
- "You shouldn't. Be authentic and ethical. It's an event to learn, not alone to win.",
- },
- {
- question: "Is creating an issue for my PR a must?",
- answer:
- "Yes. We will disqualify the play submission that doesn't have an associated issue.",
- },
- {
- question:
- "Is announcing my participation and progress on the social media a must?",
- answer:
- "No. However, we encourage you to build and learn publicly. Make sure you add the tag #2PlaysAMonth and ReactPlay handle when you post them on social media.",
- },
- {
- question: "Is recording a Demo of my work on stackstream a must?",
- answer:
- "Yes, we encourage you to share your work publicly and at the same time, get better at public speaking. Please register on stackstream and create your streams for free. Don't forget to add the stream recording link into the readme file of the related play.",
- },
- {
- question: "What about the 5 hours of streaming a month and bonus points?",
- answer:
- "There is a chance to win bonus points if you spend at least 5 hours streaming on stackstream in the February month. For each hour, you will get a bonus point(karma). You can use the stackstream platform for free in the entire duration of the #2PlaysAMonth challenge. You can collaborate, share your learnings, demo, etc. Based on your Karma points you got from your streaming and engagement , you can also win something (even if you couldn't finish your play). Top 3 highest karma point holder will get 3 exciting prizes from stackstream (the threshold is 100 karma points).",
- },
- {
- question: "When and How the #2PlaysAMonth result will be published?",
- answer:
- "The result will be published on 15th March. We will publish it on our website, blog, and Twitter handle(@reactplayio).",
- },
- {
- question: "Do I get badges and prizes?",
- answer:
- "We will publish 3 winners and 3 special mentions based on our judging criteria. All winners, special mentions, and participants who completed the target will receive digital badges. We are working with our sponsors to decide the prizes for the winners.",
- },
- {
- question: "I have questions, where can I ask them?",
- answer:
- "Got a question? Please join our Discord(the link is in the footer of this page). You can ask us anything in the #2PlaysAMonth channel.",
- },
- ],
- cta: {
- title: "Be a part of the best react event",
- description:
- "Learning is a journey than a destination. We, developers, need avenues, motivations, and opportunities to keep going. Join the #2PlaysAMonth initiative to experience it. It will allow you to build a ReactJS app using and learning from code reviews. Why waiting? Get started today.",
- },
- partners: [
- {
- image: "PartnersPolygon.svg",
- text: "Grow your developer community. From now on, your community members never code alone.",
- display: "stackstream",
- link: "https://www.stack-stream.com/",
- },
- ],
-};
-
-export default Config;
diff --git a/services/metadata/twoplaysamonth.ts b/services/metadata/twoplaysamonth.ts
new file mode 100644
index 00000000..40182e8f
--- /dev/null
+++ b/services/metadata/twoplaysamonth.ts
@@ -0,0 +1,168 @@
+import { IConfig } from 'types';
+
+export const Config: Partial = {
+ name: 'twoplaysamonth',
+ display: '#2PlaysAMonth',
+ description:
+ '#2PlaysAMonth is an event by ReactPlay for the ReactJs community to learn, build, share in public. Join us.',
+ keywords: 'ReactPlay, #2PlaysAMonth, ReactJS',
+ completed: false,
+ started: false,
+ links: [
+ {
+ name: 'About',
+ href: '#about'
+ },
+ {
+ name: 'Sponsors',
+ href: '#sponsors'
+ },
+ {
+ name: 'Judges',
+ href: '#judges'
+ },
+ {
+ name: 'Faqs',
+ href: '#faqs'
+ }
+ ],
+ result_links: [
+ {
+ link: 'https://github.com/reactplay/react-play/issues?q=is%3Aissue+label%3A%232PlaysAMonth+',
+ name: 'Ideas',
+ target: '_blank'
+ },
+ {
+ link: 'https://github.com/reactplay/react-play/pulls?q=is%3Apr+label%3A%232PlaysAMonth+',
+ name: 'Submissions',
+ target: '_blank'
+ }
+ ],
+ subtitle:
+ 'ReactPlay brings you an opportunity to participate in the month-long drive to learn and contribute to Open Source. Join the #2PlaysAMonth and build two projects(plays) in the month of February. You will learn from expert code reviews while contributing to Open Source - you may also win some exciting prizes.',
+ about: {
+ texts: [
+ '#2PlaysAMonth is an initiative from the ReactPlay community to help you learn, build, and simultaneously contribute to open source throughout the month of February.',
+ 'Would you be up for it? Here are a few things to keep in mind before you get started:'
+ ],
+ bullets: [
+ 'You must complete two plays(React Projects) in ReactPlay between February 1st to February 28th 2023.',
+ 'You must follow the [Create a Play](https://github.com/reactplay/react-play/blob/main/CREATE-PLAY.md) steps to create the play. Please [create an issue](https://github.com/reactplay/react-play/issues/new?assignees=&labels=%232PlaysAMonth&template=%232PlaysAMonth.yml&title=%5B%232PlaysAMonth%5D%3A+) on the ReactPlay repository for each pull request.',
+ 'Your play must have `#2PlaysAMonth` tag added to it while creating.',
+ 'You can build any play of your choice. If you are looking for ideas, [here are some you can get inspired by](https://reactplay.io/ideas).',
+ 'You must register on [stackstream](https://www.stack-stream.com/).',
+ 'Create a demo on [stackstream](https://www.stack-stream.com/) explaining your work and add the recording link to your play by editing it.',
+ 'Additionally, if you spend at least 5 hours streaming on [stackstream](https://www.stack-stream.com/) in the February month, you qualify for additional bonus points(karma) to win.',
+ "Share a Tweet and/or LinkedIn Post announcing your participation and PR merge with the hashtag `#2PlaysAMonth` and tag ReactPlay's handle(@ReactPlayIO)"
+ ],
+ footer: 'Please join the [ReactPlay discord server](https://discord.gg/UfYj4MvW9A) to get any help while you are building. Also, check the [FAQ](https://hustles.reactplay.io/events/23/twoplaysamonth#faqs) section for more details.',
+ highlights: [
+ 'Complete 2 Plays using ReactJS',
+ 'Demo your work',
+ 'Win badges, prizes, and bonus points'
+ ]
+ },
+ judges: [
+ {
+ name: 'Harshit Jain',
+ twitter: 'jain_harshit',
+ title: 'SDE3, Intuit',
+ avatar: 'https://pbs.twimg.com/profile_images/1523150875153567744/zpRDym_L_400x400.jpg'
+ },
+ {
+ name: 'Kapeel Kokane',
+ twitter: 'kokaneka',
+ title: 'SDE2, Microsoft',
+ avatar: 'https://pbs.twimg.com/profile_images/1372919009939652612/E9s309tH_400x400.jpg'
+ },
+ {
+ name: 'Koustov Maitra',
+ twitter: 'koustov',
+ title: 'Architect, ReactPlay',
+ avatar: 'https://pbs.twimg.com/profile_images/1443859238443360258/6_H-pDaM_400x400.jpg'
+ },
+ {
+ name: 'Tapas Adhikary',
+ twitter: 'tapasAdhikary',
+ title: 'Founder, ReactPlay',
+ avatar: 'https://pbs.twimg.com/profile_images/1495457010598309888/zPrTNF4F_400x400.jpg'
+ }
+ ],
+ faqs: [
+ {
+ question: 'Why should I participate in the #2PlaysAMonth event?',
+ answer: "Do you like learning while building something? How about a platform that allows you to build a ReactJS application end-to-end, learn from the review comments, contribute to open source, showcase it to the world, and help build networking? #2PlaysAMonth aims precisely the same. Join the drive brought to you by ReactPlay and start building cool projects that we can't wait to see!"
+ },
+ {
+ question: 'Do I need to Register for #2PlaysAMonth?',
+ answer: "Nope. You can create the play by following the criteria mentioned in this page's About section."
+ },
+ {
+ question: 'Is it mandatory to create 2 plays?',
+ answer: "Yes. That's one of the qualifying criteria. You must create and complete 2 plays."
+ },
+ {
+ question: 'What if my play review gets delayed?',
+ answer: "You must ensure you give the reviewers enough time to review your code and provide comments. We're looking forward to 4-5 days(based on how actively you respond to the comments) to complete the review process of a play. Try submitting your plays at least 7-10 days before the end date to avoid messy situations. If your review gets delayed by reviewers, we will ensure you the extra time, but that will be a rare case!"
+ },
+ {
+ question: 'Can we participate as a team?',
+ answer: "Nope. It's an individual event. However, feel free to collaborate with others."
+ },
+ {
+ question: 'Can I use anything other than React?',
+ answer: 'ReactPlay is a platform to help web developers learn ReactJs and build projects. For this initiative, ReactJs is a must.'
+ },
+ {
+ question: 'Can I submit my old React project as a play?',
+ answer: 'You can. However, could you please mention the old project in the play description? Also, the play should be something other than a 1-1 matching your existing project. You must bring some changes/ideas into it.'
+ },
+ {
+ question: 'Can I submit code/project of someone else?',
+ answer: "You shouldn't. Be authentic and ethical. It's an event to learn, not alone to win."
+ },
+ {
+ question: 'Is creating an issue for my PR a must?',
+ answer: "Yes. We will disqualify the play submission that doesn't have an associated issue."
+ },
+ {
+ question: 'Is announcing my participation and progress on the social media a must?',
+ answer: 'No. However, we encourage you to build and learn publicly. Make sure you add the tag #2PlaysAMonth and ReactPlay handle when you post them on social media.'
+ },
+ {
+ question: 'Is recording a Demo of my work on stackstream a must?',
+ answer: "Yes, we encourage you to share your work publicly and at the same time, get better at public speaking. Please register on stackstream and create your streams for free. Don't forget to add the stream recording link into the readme file of the related play."
+ },
+ {
+ question: 'What about the 5 hours of streaming a month and bonus points?',
+ answer: "There is a chance to win bonus points if you spend at least 5 hours streaming on stackstream in the February month. For each hour, you will get a bonus point(karma). You can use the stackstream platform for free in the entire duration of the #2PlaysAMonth challenge. You can collaborate, share your learnings, demo, etc. Based on your Karma points you got from your streaming and engagement , you can also win something (even if you couldn't finish your play). Top 3 highest karma point holder will get 3 exciting prizes from stackstream (the threshold is 100 karma points)."
+ },
+ {
+ question: 'When and How the #2PlaysAMonth result will be published?',
+ answer: 'The result will be published on 15th March. We will publish it on our website, blog, and Twitter handle(@reactplayio).'
+ },
+ {
+ question: 'Do I get badges and prizes?',
+ answer: 'We will publish 3 winners and 3 special mentions based on our judging criteria. All winners, special mentions, and participants who completed the target will receive digital badges. We are working with our sponsors to decide the prizes for the winners.'
+ },
+ {
+ question: 'I have questions, where can I ask them?',
+ answer: 'Got a question? Please join our Discord(the link is in the footer of this page). You can ask us anything in the #2PlaysAMonth channel.'
+ }
+ ],
+ cta: {
+ title: 'Be a part of the best react event',
+ description:
+ 'Learning is a journey than a destination. We, developers, need avenues, motivations, and opportunities to keep going. Join the #2PlaysAMonth initiative to experience it. It will allow you to build a ReactJS app using and learning from code reviews. Why waiting? Get started today.'
+ },
+ partners: [
+ {
+ image: 'PartnersPolygon.svg',
+ text: 'Grow your developer community. From now on, your community members never code alone.',
+ display: 'stackstream',
+ link: 'https://www.stack-stream.com/'
+ }
+ ]
+};
+
+export default Config;
diff --git a/services/nhost/index.js b/services/nhost/index.js
deleted file mode 100644
index b671021f..00000000
--- a/services/nhost/index.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const AUTH_URL = (redirectURL, provider = "github") => {
- const BACKEND_URL = `${process.env.NEXT_PUBLIC_NHOST_BACKEND_URL}/${process.env.NEXT_PUBLIC_NHOST_VERSION}`;
- return `${BACKEND_URL}/auth/signin/provider/${provider}?redirectTo=${encodeURI(
- redirectURL
- )}`;
-};
-
-export const NHOST = { AUTH_URL };
diff --git a/services/nhost/index.ts b/services/nhost/index.ts
new file mode 100644
index 00000000..e8a563c5
--- /dev/null
+++ b/services/nhost/index.ts
@@ -0,0 +1,6 @@
+const AUTH_URL = (redirectURL, provider = 'github') => {
+ const BACKEND_URL = `${process.env.NEXT_PUBLIC_NHOST_BACKEND_URL}/${process.env.NEXT_PUBLIC_NHOST_VERSION}`;
+ return `${BACKEND_URL}/auth/signin/provider/${provider}?redirectTo=${encodeURI(redirectURL)}`;
+};
+
+export const NHOST = { AUTH_URL };
diff --git a/services/request/index.js b/services/request/index.ts
similarity index 66%
rename from services/request/index.js
rename to services/request/index.ts
index 1781eb8a..483326ab 100644
--- a/services/request/index.js
+++ b/services/request/index.ts
@@ -1,7 +1,4 @@
-import {
- submit as gsubmit,
- submit_multi as gsubmit_multi,
-} from "json-graphql-parser/v2/index.js";
+import { submit as gsubmit, submit_multi as gsubmit_multi } from 'json-graphql-parser/v2/index.js';
const BACKEND_URL = `${process.env.NEXT_PUBLIC_NHOST_BACKEND_URL}/${process.env.NEXT_PUBLIC_NHOST_VERSION}/${process.env.NEXT_PUBLIC_NHOST_ENDPOINT}`;
@@ -12,7 +9,7 @@ const BACKEND_URL = `${process.env.NEXT_PUBLIC_NHOST_BACKEND_URL}/${process.env.
* @param {object} reqheder Optional.
*/
export const submit_multi = (requests, url, reqheder) => {
- return gsubmit_multi(requests, BACKEND_URL);
+ return gsubmit_multi(requests, BACKEND_URL);
};
/**
@@ -22,12 +19,12 @@ export const submit_multi = (requests, url, reqheder) => {
* @param {object} reqheder Optional.
* @returns {Promise} single promise
*/
-export const submit = (request, url, reqheder) => {
- return gsubmit(request, BACKEND_URL);
+export const submit = (request, url?: string, reqheder?: string) => {
+ return gsubmit(request, BACKEND_URL);
};
export const submitMutation = (query, object) => {
- const mutationQuery = query;
- mutationQuery.object = object;
- return submit(mutationQuery);
+ const mutationQuery = query;
+ mutationQuery.object = object;
+ return submit(mutationQuery);
};
diff --git a/services/util/string.js b/services/util/string.js
deleted file mode 100644
index 5df8fa21..00000000
--- a/services/util/string.js
+++ /dev/null
@@ -1,23 +0,0 @@
-const NEW_LINE_CHAR = '\n';
-const NEW_LINE_TEMPLATE = '_HP__10_NEW_LINE_10__HP_';
-export const escape_new_line = (source_str) => {
- if (!source_str) {
- return '';
- }
- const res = source_str.replace(
- new RegExp(NEW_LINE_CHAR, 'g'),
- NEW_LINE_TEMPLATE
- );
- return res;
-};
-
-export const unescape_new_line = (source_str) => {
- if (!source_str) {
- return '';
- }
- const res = source_str.replace(
- new RegExp(NEW_LINE_TEMPLATE, 'g'),
- NEW_LINE_CHAR
- );
- return res;
-};
diff --git a/services/util/string.ts b/services/util/string.ts
new file mode 100644
index 00000000..b699f9a9
--- /dev/null
+++ b/services/util/string.ts
@@ -0,0 +1,17 @@
+const NEW_LINE_CHAR = '\n';
+const NEW_LINE_TEMPLATE = '_HP__10_NEW_LINE_10__HP_';
+export const escape_new_line = (source_str) => {
+ if (!source_str) {
+ return '';
+ }
+ const res = source_str.replace(new RegExp(NEW_LINE_CHAR, 'g'), NEW_LINE_TEMPLATE);
+ return res;
+};
+
+export const unescape_new_line = (source_str) => {
+ if (!source_str) {
+ return '';
+ }
+ const res = source_str.replace(new RegExp(NEW_LINE_TEMPLATE, 'g'), NEW_LINE_CHAR);
+ return res;
+};
diff --git a/services/util/time.js b/services/util/time.js
deleted file mode 100644
index 294f5d80..00000000
--- a/services/util/time.js
+++ /dev/null
@@ -1,26 +0,0 @@
-export const time_since = (date) => {
- var seconds = Math.floor((new Date() - date) / 1000);
-
- var interval = seconds / 31536000;
-
- if (interval > 1) {
- return Math.floor(interval) + ' years';
- }
- interval = seconds / 2592000;
- if (interval > 1) {
- return Math.floor(interval) + ' months';
- }
- interval = seconds / 86400;
- if (interval > 1) {
- return Math.floor(interval) + ' days';
- }
- interval = seconds / 3600;
- if (interval > 1) {
- return Math.floor(interval) + ' hours';
- }
- interval = seconds / 60;
- if (interval > 1) {
- return Math.floor(interval) + ' minutes';
- }
- return Math.floor(seconds) + ' seconds';
-};
diff --git a/services/util/time.ts b/services/util/time.ts
new file mode 100644
index 00000000..bc7c74a0
--- /dev/null
+++ b/services/util/time.ts
@@ -0,0 +1,30 @@
+export const time_since = (date) => {
+ var seconds = Math.floor((new Date() - date) / 1000);
+
+ var interval = seconds / 31536000;
+
+ if (interval > 1) {
+ return Math.floor(interval) + ' years';
+ }
+
+ interval = seconds / 2592000;
+ if (interval > 1) {
+ return Math.floor(interval) + ' months';
+ }
+
+ interval = seconds / 86400;
+ if (interval > 1) {
+ return Math.floor(interval) + ' days';
+ }
+
+ interval = seconds / 3600;
+ if (interval > 1) {
+ return Math.floor(interval) + ' hours';
+ }
+ interval = seconds / 60;
+ if (interval > 1) {
+ return Math.floor(interval) + ' minutes';
+ }
+
+ return Math.floor(seconds) + ' seconds';
+};
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000..af141b4c
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,27 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": false,
+ "forceConsistentCasingInFileNames": true,
+ "noEmit": true,
+ "incremental": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "resolveJsonModule": true,
+ "moduleResolution": "node",
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "baseUrl": ".",
+ "paths": {
+ "@/components/*": ["./components/*"],
+ "@/services/*": ["./services/*"],
+ "@/styles/*": ["./styles/*"],
+ "@/public/*": ["./public/*"]
+ }
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
+ "exclude": ["node_modules"]
+}
diff --git a/types/index.ts b/types/index.ts
new file mode 100644
index 00000000..09eb4a63
--- /dev/null
+++ b/types/index.ts
@@ -0,0 +1,103 @@
+export interface ILink {
+ name: string;
+ href: string;
+ id?: number;
+}
+
+export interface IJudge {
+ name: string;
+ twitter: string;
+ title: string;
+ avatar: string;
+}
+
+export interface IFaq {
+ question: string;
+ answer: string;
+}
+
+export interface IPartner {
+ logo?: string;
+ image?: string;
+ text: string;
+ display: string;
+ link: string;
+}
+
+export interface IWinner {
+ name: string;
+ twitter: string;
+ github: string;
+ email: string;
+ avatar: string;
+ projectName: string;
+ projectLink: string;
+ article: string;
+ projectSource: string;
+ position: string;
+}
+
+export interface IMention {
+ name: string;
+ twitter: string;
+ github: string;
+ email: string;
+ avatar: string;
+ projectName: string;
+ projectLink: string;
+ projectSource: string;
+ article: string;
+}
+
+export interface IAbout {
+ texts: string[];
+ bullets: string[];
+ footer: string;
+ highlights: string[];
+}
+
+export interface IEvent {
+ id: number;
+ name: string;
+ description: string;
+ image: string;
+ link: string;
+ isCompleted: boolean;
+ isCurrent: boolean;
+}
+
+export interface ITwitterSpace {
+ id: number;
+ link: string;
+ guestSpeaker: string;
+ title: string;
+ date: string;
+}
+
+export interface IResultLink {
+ name: string;
+ link: string;
+ target: string;
+}
+
+export interface IConfig {
+ name: string;
+ display: string;
+ description?: string;
+ keywords?: string;
+ completed: boolean;
+ links: ILink[];
+ submissionurl: string;
+ subtitle: string;
+ about: IAbout;
+ judges: IJudge[];
+ faqs: IFaq[];
+ cta: { title: string; description: string };
+ partners: IPartner[];
+ winners: IWinner[];
+ mentions: IMention[];
+ events: IEvent[];
+ twitterSpaces: ITwitterSpace[];
+ started?: boolean;
+ result_links: IResultLink[];
+}