From 05097e44a4b96814c200d5f34b6e61a2603bb010 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Mon, 15 Mar 2021 20:05:39 +0200 Subject: [PATCH 1/5] Split model files into apis, hooks and models --- package-lock.json | 72 +------ package.json | 1 - src/api/eventApi.ts | 90 +++++++++ src/api/feedApi.ts | 66 +++++++ src/api/jobAdApi.ts | 76 ++++++++ src/api/signupApi.ts | 180 ++++++++++++++++++ src/api/tagApi.ts | 24 +++ src/hooks/useFetchEvents.ts | 44 +++++ src/hooks/useFetchFeed.ts | 40 ++++ src/hooks/useFetchJobAds.ts | 40 ++++ src/models/Event.ts | 130 +------------ src/models/Feed.ts | 99 +--------- src/models/JobAd.ts | 113 +---------- src/models/Signup.ts | 88 ++------- src/models/SignupForm.ts | 123 ------------ src/models/Tag.ts | 16 +- src/pages/admin/events/[id].tsx | 21 +- src/pages/admin/events/index.tsx | 5 +- src/pages/admin/feed/[id].tsx | 16 +- src/pages/admin/feed/index.tsx | 5 +- src/pages/admin/jobads/[id].tsx | 11 +- src/pages/admin/jobads/index.tsx | 5 +- src/pages/admin/signups/[id].tsx | 11 +- src/pages/admin/signups/[id]/email.tsx | 7 +- src/pages/admin/signups/[id]/list.tsx | 10 +- src/pages/admin/signups/index.tsx | 5 +- src/pages/events/[id].tsx | 14 +- src/pages/in_english.tsx | 20 +- src/pages/index.tsx | 20 +- src/pages/kilta/toiminta.tsx | 20 +- src/pages/signup/[id].tsx | 10 +- src/pages/signup/edit/[id]/[uuid].tsx | 10 +- src/pages/yritysyhteistyo.tsx | 9 +- src/views/ActualPage/ActualPageView.tsx | 4 +- src/views/ActualPage/EventCalendar.tsx | 2 +- src/views/ActualPage/News.tsx | 2 +- src/views/CorporatePage/CorporatePageView.tsx | 2 +- src/views/CorporatePage/JobAdList.tsx | 2 +- src/views/EventPage/EventPageView.tsx | 2 +- src/views/FrontPage/FrontPageView.tsx | 4 +- src/views/InEnglishPage/InEnglishPageView.tsx | 4 +- src/views/SignUpPage/FormUtils.tsx | 2 +- src/views/SignUpPage/SignUpPageView.tsx | 2 +- src/views/admin/AdminCreateCommon.tsx | 8 +- tsconfig.json | 3 + 45 files changed, 707 insertions(+), 731 deletions(-) create mode 100644 src/api/eventApi.ts create mode 100644 src/api/feedApi.ts create mode 100644 src/api/jobAdApi.ts create mode 100644 src/api/signupApi.ts create mode 100644 src/api/tagApi.ts create mode 100644 src/hooks/useFetchEvents.ts create mode 100644 src/hooks/useFetchFeed.ts create mode 100644 src/hooks/useFetchJobAds.ts delete mode 100644 src/models/SignupForm.ts diff --git a/package-lock.json b/package-lock.json index a7b7b21..7bd8878 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,6 @@ "lodash": "4.17.21", "next": "10.0.7", "normalize.css": "8.0.1", - "query-string": "6.14.1", "react": "17.0.1", "react-beautiful-dnd": "13.0.0", "react-csv": "2.0.3", @@ -5591,6 +5590,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, "engines": { "node": ">=0.10" } @@ -7217,14 +7217,6 @@ "node": ">=0.10.0" } }, - "node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/find-babel-config": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", @@ -11192,23 +11184,6 @@ "qrcode-terminal": "bin/qrcode-terminal.js" } }, - "node_modules/query-string": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", - "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", - "dependencies": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/querystring": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", @@ -12645,14 +12620,6 @@ "specificity": "bin/specificity" } }, - "node_modules/split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", - "engines": { - "node": ">=6" - } - }, "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -12760,14 +12727,6 @@ "xtend": "^4.0.0" } }, - "node_modules/strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", - "engines": { - "node": ">=4" - } - }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -20892,7 +20851,8 @@ "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true }, "decompress-response": { "version": "4.2.1", @@ -22233,11 +22193,6 @@ } } }, - "filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=" - }, "find-babel-config": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", @@ -25503,17 +25458,6 @@ "integrity": "sha1-p2pI4mEKGPl/o6K9UytoKs/4bFM=", "dev": true }, - "query-string": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", - "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", - "requires": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, "querystring": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", @@ -26751,11 +26695,6 @@ "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", "dev": true }, - "split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" - }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -26849,11 +26788,6 @@ "xtend": "^4.0.0" } }, - "strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", diff --git a/package.json b/package.json index 38a7071..39f8752 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,6 @@ "lodash": "4.17.21", "next": "10.0.7", "normalize.css": "8.0.1", - "query-string": "6.14.1", "react": "17.0.1", "react-beautiful-dnd": "13.0.0", "react-csv": "2.0.3", diff --git a/src/api/eventApi.ts b/src/api/eventApi.ts new file mode 100644 index 0000000..799e772 --- /dev/null +++ b/src/api/eventApi.ts @@ -0,0 +1,90 @@ +import axios from "axios"; +import Event from "@models/Event"; +import { getAuthHeader } from "@utils/auth"; + +export const URL = `${process.env.NEXT_PUBLIC_API_URL}/events/`; + +export interface Options { + onlyNonPast?: boolean; + limit?: number; + auth?: boolean; +} + +class EventApi { + static async getEvent(id: number, auth = false): Promise { + try { + const headers = auth ? { Authorization: getAuthHeader() } : null; + const resp = await axios.get(`${URL}${id}/`, { + headers, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async getEvents(options: Options = {}): Promise { + const { onlyNonPast, limit, auth } = options; + try { + const params = { + since: onlyNonPast ? (new Date()).toISOString() : undefined, + limit, + }; + const headers = auth ? { Authorization: getAuthHeader() } : null; + const resp = await axios.get(`${URL}`, { + headers, + params, + }); + return resp.data.results; + } catch (err) { + console.error(err); + throw err; + } + } + + static async createEvent(data: any): Promise { + try { + const resp = await axios.post(URL, data, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async updateEvent(data: any): Promise { + try { + const putUrl = `${URL}${data.id}/`; + const resp = await axios.put(putUrl, data, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async deleteEvent(id: number) { + try { + const resp = await axios.delete(`${URL}${id}`, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } +} + +export default EventApi; diff --git a/src/api/feedApi.ts b/src/api/feedApi.ts new file mode 100644 index 0000000..2e2c366 --- /dev/null +++ b/src/api/feedApi.ts @@ -0,0 +1,66 @@ +import axios from "axios"; +import Post from "@models/Feed"; +import { getAuthHeader } from "@utils/auth"; + +export const URL = `${process.env.NEXT_PUBLIC_API_URL}/feed/`; + +export interface Options { + auth?: boolean; +} + +class FeedApi { + static async getFeed(options: Options = {}): Promise { + const { auth } = options; + const headers = auth ? { Authorization: getAuthHeader() } : null; + try { + const resp = await axios.get(URL, { headers }); + return resp.data.results; + } catch (err) { + console.error(err); + throw err; + } + } + + static async getPost(id: number, options: Options = {}): Promise { + const { auth } = options; + const headers = auth ? { Authorization: getAuthHeader() } : null; + try { + const resp = await axios.get(`${URL}${id}/`, { headers }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async createPost(data): Promise { + try { + const resp = await axios.post(URL, data, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async updatePost(data): Promise { + try { + const putUrl = `${URL}${data.id}/`; + const resp = await axios.put(putUrl, data, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } +} + +export default FeedApi; diff --git a/src/api/jobAdApi.ts b/src/api/jobAdApi.ts new file mode 100644 index 0000000..4ed51b7 --- /dev/null +++ b/src/api/jobAdApi.ts @@ -0,0 +1,76 @@ +import axios from "axios"; +import JobAd from "@models/JobAd"; +import { getAuthHeader } from "@utils/auth"; + +export const URL = `${process.env.NEXT_PUBLIC_API_URL}/jobads/`; + +export interface Options { + onlyNonPast?: boolean; + limit?: number; + auth?: boolean; +} + +class JobAdApi { + static async getJobAds(options: Options = {}): Promise { + const { onlyNonPast, limit, auth } = options; + try { + const params = { + since: onlyNonPast ? (new Date()).toISOString() : undefined, + limit, + }; + const headers = auth ? { Authorization: getAuthHeader() } : null; + const resp = await axios.get(`${URL}`, { + headers, + params, + }); + return resp.data.results; + } catch (err) { + console.error(err); + throw err; + } + } + + static async getJobAd(id: number, auth = false): Promise { + try { + const headers = auth ? { Authorization: getAuthHeader() } : null; + const resp = await axios.get(`${URL}${id}/`, { + headers, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async createJobAd(data: any): Promise { + try { + const resp = await axios.post(URL, data, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async updateJobAd(data: any): Promise { + try { + const putUrl = `${URL}${data.id}/`; + const resp = await axios.put(putUrl, data, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } +} + +export default JobAdApi; diff --git a/src/api/signupApi.ts b/src/api/signupApi.ts new file mode 100644 index 0000000..d312b89 --- /dev/null +++ b/src/api/signupApi.ts @@ -0,0 +1,180 @@ +import axios from "axios"; +import { Signup, SignupForm } from "@models/Signup"; +import { getAuthHeader } from "@utils/auth"; + +export const URL = `${process.env.NEXT_PUBLIC_API_URL}/signup/`; +export const FORM_URL = `${process.env.NEXT_PUBLIC_API_URL}/signupForm/`; + +export interface Options { + onlyNonPast?: boolean; + limit?: number; + auth?: boolean; +} + +class SignupApi { + static async getSignup(id: number): Promise { + try { + const resp = await axios.get(`${URL}${id}`, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async createSignup(data: Signup): Promise { + try { + const resp = await axios.post(URL, data); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async updateSignup(data: Signup, uuid: string): Promise { + try { + const { id } = data; + if (!id) throw new Error("SignupId required!"); + const resp = await axios.put(`${URL}${id}/edit/`, data, { + params: { uuid }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async getSignupUUID(id: number, uuid: string): Promise { + try { + const resp = await axios.get(`${URL}${id}/edit/`, { + params: { + uuid, + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async deleteSignup(id: number) { + try { + const resp = await axios.delete(`${URL}${id}`, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async getForms(auth = false): Promise { + try { + const headers = auth ? { Authorization: getAuthHeader() } : null; + const resp = await axios.get(FORM_URL, { + headers, + }); + const { results } = resp.data; + return results; + } catch (err) { + console.error(err); + throw err; + } + } + + static async getForm(id: number, auth = false): Promise { + try { + const headers = auth ? { Authorization: getAuthHeader() } : null; + const resp = await axios.get(`${FORM_URL}${id}/`, { + headers, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async createForm(data): Promise { + try { + const resp = await axios.post(FORM_URL, data, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async updateForm(data): Promise { + try { + const putUrl = `${FORM_URL}${data.id}/`; + const resp = await axios.put(putUrl, data, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async deleteForm(id: number) { + try { + const resp = await axios.delete(`${FORM_URL}${id}`, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async signupFormSendEmail(data, id): Promise { + try { + const resp = await axios.post(`${FORM_URL}${id}/sendemail/`, data, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } + + static async getSignups(id): Promise { + try { + const resp = await axios.get(`${FORM_URL}${id}/signups/`, { + headers: { + Authorization: getAuthHeader(), + }, + }); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } + } +} + +export default SignupApi; diff --git a/src/api/tagApi.ts b/src/api/tagApi.ts new file mode 100644 index 0000000..6a7e26c --- /dev/null +++ b/src/api/tagApi.ts @@ -0,0 +1,24 @@ +import axios from "axios"; +import Tag from "@models/Tag"; + +export const URL = `${process.env.NEXT_PUBLIC_API_URL}/tags/`; + +export interface Options { + onlyNonPast?: boolean; + limit?: number; + auth?: boolean; +} + +class TagApi { + static async getTags(): Promise { + try { + const resp = await axios.get(URL); + return resp.data.results; + } catch (err) { + console.error(err); + throw err; + } + } +} + +export default TagApi; diff --git a/src/hooks/useFetchEvents.ts b/src/hooks/useFetchEvents.ts new file mode 100644 index 0000000..627140e --- /dev/null +++ b/src/hooks/useFetchEvents.ts @@ -0,0 +1,44 @@ +import useSWR from "swr"; +import axios, { AxiosRequestConfig } from "axios"; +import Event from "@models/Event"; +import { getAuthHeader } from "@utils/auth"; +import { URL, Options } from "@api/eventApi"; + +const fetcher = (url: string, config: AxiosRequestConfig) => axios.get(url, config).then((res) => res.data); + +const generateFetchParams = (id = "", options: Options = {}) => { + const url = `${URL}${id}`; + const { auth, onlyNonPast, limit } = options; + + return { + url, + config: { + params: { + since: onlyNonPast ? (new Date()).toISOString() : undefined, + limit, + }, + headers: auth ? { Authorization: getAuthHeader() } : null, + }, + }; +}; + +interface FetchArguments { + initialData?: Event | Event[], + id?: string; + options?: Options +} + +const useFetchEvents = ({ + initialData, + id = "", + options = {}, +}: FetchArguments) => { + const { url, config } = generateFetchParams(id, options); + const { data, error } = useSWR([url, config], fetcher, { initialData }); + return { + data: data?.results || data, + error, + }; +}; + +export default useFetchEvents; diff --git a/src/hooks/useFetchFeed.ts b/src/hooks/useFetchFeed.ts new file mode 100644 index 0000000..ce8fa57 --- /dev/null +++ b/src/hooks/useFetchFeed.ts @@ -0,0 +1,40 @@ +import useSWR from "swr"; +import axios, { AxiosRequestConfig } from "axios"; +import Post from "@models/Feed"; +import { getAuthHeader } from "@utils/auth"; +import { URL, Options } from "@api/feedApi"; + +const feedFetcher = (url: string, config?: AxiosRequestConfig) => axios.get(url, config).then((res) => res.data); + +const generateFetchParams = (id = "", options: Options = {}) => { + const url = `${URL}${id}`; + const { auth } = options; + + return { + url, + config: { + headers: auth ? { Authorization: getAuthHeader() } : null, + }, + }; +}; + +interface FetchArguments { + initialData?: Post | Post[], + id?: string; + options?: Options +} + +const useFetchFeed = ({ + initialData, + id = "", + options = {}, +}: FetchArguments) => { + const { url, config } = generateFetchParams(id, options); + const { data, error } = useSWR([url, config], feedFetcher, { initialData }); + return { + data: data?.results || data, + error, + }; +}; + +export default useFetchFeed; diff --git a/src/hooks/useFetchJobAds.ts b/src/hooks/useFetchJobAds.ts new file mode 100644 index 0000000..96a7404 --- /dev/null +++ b/src/hooks/useFetchJobAds.ts @@ -0,0 +1,40 @@ +import axios, { AxiosRequestConfig } from "axios"; +import useSWR from "swr"; +import JobAd from "@models/JobAd"; +import { getAuthHeader } from "@utils/auth"; +import { URL, Options } from "@api/jobAdApi"; + +const jobAdFetcher = (url: string, config?: AxiosRequestConfig) => axios.get(url, config).then((res) => res.data); + +const generateFetchParams = (id = "", options: Options = {}) => { + const url = `${URL}${id}`; + const { auth } = options; + + return { + url, + config: { + headers: auth ? { Authorization: getAuthHeader() } : null, + }, + }; +}; + +interface FetchArguments { + initialData?: JobAd | JobAd[], + id?: string; + options?: Options; +} + +const useFetchJobAds = ({ + initialData, + id = "", + options = {}, +}: FetchArguments) => { + const { url, config } = generateFetchParams(id, options); + const { data, error } = useSWR([url, config], jobAdFetcher, { initialData }); + return { + data: data?.results || data, + error, + }; +}; + +export default useFetchJobAds; diff --git a/src/models/Event.ts b/src/models/Event.ts index 7476b3d..d2ba762 100644 --- a/src/models/Event.ts +++ b/src/models/Event.ts @@ -1,13 +1,7 @@ -import axios, { AxiosRequestConfig } from "axios"; -import useSWR from "swr"; -import qs from "query-string"; -import { getAuthHeader } from "@utils/auth"; -import { Tag } from "./Tag"; -import { SignupForm } from "./SignupForm"; +import Tag from "./Tag"; +import { SignupForm } from "./Signup"; -const URL = `${process.env.NEXT_PUBLIC_API_URL}/events/`; - -export interface Event { +interface Event { id: number; title_fi: string; title_en: string; @@ -25,120 +19,4 @@ export interface Event { signupForm: SignupForm[]; } -interface Options { - onlyNonPast?: boolean; - limit?: number; - auth?: boolean; -} - -export async function getEvents(options: Options = {}): Promise { - const { onlyNonPast, limit, auth } = options; - try { - const params = { - since: onlyNonPast ? (new Date()).toISOString() : undefined, - limit, - }; - const search = qs.stringify(params); - const headers = auth ? { Authorization: getAuthHeader() } : null; - const resp = await axios.get(`${URL}?${search}`, { - headers, - }); - return resp.data.results; - } catch (err) { - console.error(err); - throw err; - } -} - -export async function getEvent(id: number, auth = false): Promise { - try { - const headers = auth ? { Authorization: getAuthHeader() } : null; - const resp = await axios.get(`${URL}${id}/`, { - headers, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -} - -export async function createEvent(data): Promise { - try { - const resp = await axios.post(URL, data, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -} - -export async function updateEvent(data): Promise { - try { - const putUrl = `${URL}${data.id}/`; - const resp = await axios.put(putUrl, data, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -} - -export async function deleteEvent(id: number) { - try { - const resp = await axios.delete(`${URL}${id}`, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -} - -export const eventFetcher = (url: string, config?: AxiosRequestConfig) => axios.get(url, config).then((res) => res.data); - -export const generateFetchParams = (id = "", options: Options = {}) => { - const url = `${URL}${id}`; - const { auth, onlyNonPast, limit } = options; - - return { - url, - config: { - params: { - since: onlyNonPast ? (new Date()).toISOString() : undefined, - limit, - }, - headers: auth ? { Authorization: getAuthHeader() } : null, - }, - }; -}; - -interface FetchArguments { - initialData?: Event | Event[], - id?: string; - options?: Options -} - -export const useFetchEvents = ({ - initialData, - id = "", - options = {}, -}: FetchArguments) => { - const { url, config } = generateFetchParams(id, options); - const { data, error } = useSWR([url, config], eventFetcher, { initialData }); - return { - data: data?.results || data, - error, - }; -}; +export default Event; diff --git a/src/models/Feed.ts b/src/models/Feed.ts index 6da243f..743f4c9 100644 --- a/src/models/Feed.ts +++ b/src/models/Feed.ts @@ -1,11 +1,6 @@ -import axios, { AxiosRequestConfig } from "axios"; -import useSWR from "swr"; -import { getAuthHeader } from "@utils/auth"; -import { Tag } from "./Tag"; +import Tag from "./Tag"; -const URL = `${process.env.NEXT_PUBLIC_API_URL}/feed/`; - -export interface Post { +interface Post { id: number; tags: Tag[]; visible: boolean; @@ -21,92 +16,4 @@ export interface Post { autohide_enabled: boolean; } -interface Options { - auth?: boolean; -} - -export async function getFeed(options: Options = {}): Promise { - const { auth } = options; - const headers = auth ? { Authorization: getAuthHeader() } : null; - try { - const resp = await axios.get(URL, { headers }); - return resp.data.results; - } catch (err) { - console.error(err); - throw err; - } -} - -export async function getPost(id: number, options: Options = {}): Promise { - const { auth } = options; - const headers = auth ? { Authorization: getAuthHeader() } : null; - try { - const resp = await axios.get(`${URL}${id}/`, { headers }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -} - -export async function createPost(data): Promise { - try { - const resp = await axios.post(URL, data, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -} - -export async function updatePost(data): Promise { - try { - const putUrl = `${URL}${data.id}/`; - const resp = await axios.put(putUrl, data, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -} - -export const feedFetcher = (url: string, config?: AxiosRequestConfig) => axios.get(url, config).then((res) => res.data); - -export const generateFetchParams = (id = "", options: Options = {}) => { - const url = `${URL}${id}`; - const { auth } = options; - - return { - url, - config: { - headers: auth ? { Authorization: getAuthHeader() } : null, - }, - }; -}; - -interface FetchArguments { - initialData?: Post | Post[], - id?: string; - options?: Options -} - -export const useFetchFeed = ({ - initialData, - id = "", - options = {}, -}: FetchArguments) => { - const { url, config } = generateFetchParams(id, options); - const { data, error } = useSWR([url, config], feedFetcher, { initialData }); - return { - data: data?.results || data, - error, - }; -}; +export default Post; diff --git a/src/models/JobAd.ts b/src/models/JobAd.ts index 39ada99..0641cb1 100644 --- a/src/models/JobAd.ts +++ b/src/models/JobAd.ts @@ -1,11 +1,4 @@ -import axios, { AxiosRequestConfig } from "axios"; -import useSWR from "swr"; -import qs from "query-string"; -import { getAuthHeader } from "@utils/auth"; - -const URL = `${process.env.NEXT_PUBLIC_API_URL}/jobads/`; - -export interface JobAd { +interface JobAd { id: number; title_fi: string; title_en: string; @@ -17,106 +10,4 @@ export interface JobAd { autohide_enabled: boolean; } -export interface GetJobAdsOptions { - onlyNonPast?: boolean; - limit?: number; - auth?: boolean; -} - -export const getJobAds = async (options: GetJobAdsOptions = {}): Promise => { - const { onlyNonPast, limit, auth } = options; - try { - const params = { - since: onlyNonPast ? (new Date()).toISOString() : undefined, - limit, - }; - const search = qs.stringify(params); - const headers = auth ? { Authorization: getAuthHeader() } : null; - const resp = await axios.get(`${URL}?${search}`, { - headers, - }); - return resp.data.results; - } catch (err) { - console.error(err); - throw err; - } -}; - -export const getJobAd = async (id: number, auth = false): Promise => { - try { - const headers = auth ? { Authorization: getAuthHeader() } : null; - const resp = await axios.get(`${URL}${id}/`, { - headers, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -}; - -export const createJobAd = async (data: any): Promise => { - try { - const resp = await axios.post(URL, data, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -}; - -export const updateJobAd = async (data: any): Promise => { - try { - const putUrl = `${URL}${data.id}/`; - const resp = await axios.put(putUrl, data, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -}; - -export const jobAdFetcher = (url: string, config?: AxiosRequestConfig) => axios.get(url, config).then((res) => res.data); - -export const generateFetchParams = (id = "", options: Options = {}) => { - const url = `${URL}${id}`; - const { auth } = options; - - return { - url, - config: { - headers: auth ? { Authorization: getAuthHeader() } : null, - }, - }; -}; - -interface Options { - auth?: boolean; -} - -interface FetchArguments { - initialData?: JobAd | JobAd[], - id?: string; - options?: Options; -} - -export const useFetchJobAds = ({ - initialData, - id = "", - options = {}, -}: FetchArguments) => { - const { url, config } = generateFetchParams(id, options); - const { data, error } = useSWR([url, config], jobAdFetcher, { initialData }); - return { - data: data?.results || data, - error, - }; -}; +export default JobAd; diff --git a/src/models/Signup.ts b/src/models/Signup.ts index 7c4626c..c6588d3 100644 --- a/src/models/Signup.ts +++ b/src/models/Signup.ts @@ -1,7 +1,4 @@ -import axios from "axios"; -import { getAuthHeader } from "@utils/auth"; - -const url = `${process.env.NEXT_PUBLIC_API_URL}/signup/`; +import { Question } from "@components/Widgets/SignupQuestionsWidget/common"; export interface Signup { id?: number; @@ -9,68 +6,21 @@ export interface Signup { answer: string; } -export const getSignup = async (id: number): Promise => { - try { - const resp = await axios.get(`${url}${id}`, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -}; - -export const createSignup = async (data: Signup): Promise => { - try { - const resp = await axios.post(url, data); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -}; - -export const updateSignup = async (data: Signup, uuid: string): Promise => { - try { - const { id } = data; - if (!id) throw new Error("SignupId required!"); - const resp = await axios.put(`${url}${id}/edit/`, data, { - params: { uuid }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -}; - -export const getSignupUUID = async (id: number, uuid: string): Promise => { - try { - const resp = await axios.get(`${url}${id}/edit/`, { - params: { - uuid, - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -}; - -export const deleteSignup = async (id: number) => { - try { - const resp = await axios.delete(`${url}${id}`, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -}; +export interface SignupForm { + id?: number; + title_fi: string; + title_en: string; + visible: boolean; + start_time: string; + end_time: string; + questions: Question[]; + signups: string[]; + quota: number; + schema: { + title?: string; + type: string; + required: string[]; + properties: any; + minProperties?: number; + }; +} diff --git a/src/models/SignupForm.ts b/src/models/SignupForm.ts deleted file mode 100644 index 49fee10..0000000 --- a/src/models/SignupForm.ts +++ /dev/null @@ -1,123 +0,0 @@ -import axios from "axios"; -import { getAuthHeader } from "@utils/auth"; -import { Question } from "@components/Widgets/SignupQuestionsWidget/common"; -import { Signup } from "./Signup"; - -const URL = `${process.env.NEXT_PUBLIC_API_URL}/signupForm/`; - -export interface SignupForm { - id?: number; - title_fi: string; - title_en: string; - visible: boolean; - start_time: string; - end_time: string; - questions: Question[]; - signups: string[]; - quota: number; - schema: { - title?: string; - type: string; - required: string[]; - properties: any; - minProperties?: number; - }; -} - -export async function getForms(auth = false): Promise { - try { - const headers = auth ? { Authorization: getAuthHeader() } : null; - const resp = await axios.get(URL, { - headers, - }); - const { results } = resp.data; - return results; - } catch (err) { - console.error(err); - throw err; - } -} - -export async function getForm(id: number, auth = false): Promise { - try { - const headers = auth ? { Authorization: getAuthHeader() } : null; - const resp = await axios.get(`${URL}${id}/`, { - headers, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -} - -export async function createForm(data): Promise { - try { - const resp = await axios.post(URL, data, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -} - -export async function updateForm(data): Promise { - try { - const putUrl = `${URL}${data.id}/`; - const resp = await axios.put(putUrl, data, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -} - -export async function deleteForm(id: number) { - try { - const resp = await axios.delete(`${URL}${id}`, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -} - -export const signupFormSendEmail = async (data, id): Promise => { - try { - const resp = await axios.post(`${URL}${id}/sendemail/`, data, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -}; - -export const getSignups = async (id): Promise => { - try { - const resp = await axios.get(`${URL}${id}/signups/`, { - headers: { - Authorization: getAuthHeader(), - }, - }); - return resp.data; - } catch (err) { - console.error(err); - throw err; - } -}; diff --git a/src/models/Tag.ts b/src/models/Tag.ts index 6a4ef37..e78a995 100644 --- a/src/models/Tag.ts +++ b/src/models/Tag.ts @@ -1,8 +1,4 @@ -import axios from "axios"; - -const url = `${process.env.NEXT_PUBLIC_API_URL}/tags/`; - -export interface Tag { +interface Tag { id: number; name_fi: string; name_en: string; @@ -10,12 +6,4 @@ export interface Tag { icon: string; } -export async function getTags(): Promise { - try { - const resp = await axios.get(url); - return resp.data.results; - } catch (err) { - console.error(err); - throw err; - } -} +export default Tag; diff --git a/src/pages/admin/events/[id].tsx b/src/pages/admin/events/[id].tsx index 9e51ea9..acc92f8 100644 --- a/src/pages/admin/events/[id].tsx +++ b/src/pages/admin/events/[id].tsx @@ -3,11 +3,12 @@ import { NextPage } from "next"; import Head from "next/head"; import { useRouter } from "next/router"; import AdminCreateCommon from "@views/admin/AdminCreateCommon"; -import { Tag, getTags } from "@models/Tag"; -import { SignupForm, getForms } from "@models/SignupForm"; -import { - Event, createEvent, getEvent, updateEvent, -} from "@models/Event"; +import Tag from "@models/Tag"; +import TagApi from "@api/tagApi"; +import { SignupForm } from "@models/Signup"; +import SignupApi from "@api/signupApi"; +import Event from "@models/Event"; +import EventApi from "@api/eventApi"; import DatetimeWidget from "@components/Widgets/DatetimeWidget"; import SectionDividerWidget from "@components/Widgets/SectionDividerWidget"; import MarkdownEditorWidget from "@components/Widgets/MarkdownEditorWidget"; @@ -177,17 +178,17 @@ const EventCreatePage: NextPage = () => { } useEffect(() => { - getTags() + TagApi.getTags() .then((res) => setTags(res)) .catch((err) => setError(err)); - getForms(true) + SignupApi.getForms(true) .then((res) => setSignupForms(res)) .catch((err) => setError(err)); const eventId = id && Number(id); if (eventId !== undefined) { - getEvent(eventId, true) + EventApi.getEvent(eventId, true) .then((res) => setFormData({ ...res, tags: (res.tags).map((inst) => inst.id) as any, @@ -205,7 +206,7 @@ const EventCreatePage: NextPage = () => { if (typeof payload.image === "string" && payload.image.startsWith("http")) payload.image = undefined; if (payload.id === undefined) { - const resp = await createEvent(payload); + const resp = await EventApi.createEvent(payload); // TODO: Backend return old data because of Prefetch (used for filtering invisble signupForms from GET) // Copy from old state instead... // resp.tags = (resp.tags as any).map(inst => inst.id); @@ -215,7 +216,7 @@ const EventCreatePage: NextPage = () => { setStatusMessage("Event created successfully"); setFormData(resp); } else { - const resp = await updateEvent(payload); + const resp = await EventApi.updateEvent(payload); // TODO: Backend return old data because of Prefetch (used for filtering invisble signupForms from GET) // Copy from old state instead... // resp.tags = (resp.tags as any).map(inst => inst.id); diff --git a/src/pages/admin/events/index.tsx b/src/pages/admin/events/index.tsx index 2eaa288..a6830d6 100644 --- a/src/pages/admin/events/index.tsx +++ b/src/pages/admin/events/index.tsx @@ -5,7 +5,8 @@ import { formatRelative } from "date-fns"; import AdminListCommon from "@views/admin/AdminListCommon"; import { Link } from "@components/index"; import AddLink from "@components/AddLink"; -import { Event, getEvents } from "@models/Event"; +import Event from "@models/Event"; +import EventApi from "@api/eventApi"; const URL = "/admin/events"; @@ -39,7 +40,7 @@ const AdminEventPage: NextPage = () => { const [events, setEvents] = useState(null); useEffect(() => { - getEvents({ auth: true }) + EventApi.getEvents({ auth: true }) .then((res) => setEvents(res)); }, []); diff --git a/src/pages/admin/feed/[id].tsx b/src/pages/admin/feed/[id].tsx index a6704d7..643fe78 100644 --- a/src/pages/admin/feed/[id].tsx +++ b/src/pages/admin/feed/[id].tsx @@ -3,10 +3,10 @@ import { NextPage } from "next"; import Head from "next/head"; import { useRouter } from "next/router"; import AdminCreateCommon from "@views/admin/AdminCreateCommon"; -import { Tag, getTags } from "@models/Tag"; -import { - Post, createPost, getPost, updatePost, -} from "@models/Feed"; +import Tag from "@models/Tag"; +import TagApi from "@api/tagApi"; +import Post from "@models/Feed"; +import FeedApi from "@api/feedApi"; import DatetimeWidget from "@components/Widgets/DatetimeWidget"; import SectionDividerWidget from "@components/Widgets/SectionDividerWidget"; import MarkdownEditorWidget from "@components/Widgets/MarkdownEditorWidget"; @@ -145,13 +145,13 @@ const FeedCreatePage: NextPage = () => { } useEffect(() => { - getTags() + TagApi.getTags() .then((res) => setTags(res)) .catch((err) => setError(err)); const feedId = id && Number(id); if (feedId !== undefined) { - getPost(feedId, { auth: true }) + FeedApi.getPost(feedId, { auth: true }) .then((res) => setFormData({ ...res, tags: (res.tags).map((inst) => inst.id) as any, @@ -166,12 +166,12 @@ const FeedCreatePage: NextPage = () => { payload.tag_id = payload.tags; payload.autohide = payload.autohide || new Date(); if (payload.id === undefined) { - const resp = await createPost(payload); + const resp = await FeedApi.createPost(payload); // resp.tags = resp.tags; setStatusMessage("Post created successfully"); setFormData(resp); } else { - const resp = await updatePost(payload); + const resp = await FeedApi.updatePost(payload); // resp.tags = resp.tag_id; setStatusMessage("Post updated successfully"); setFormData(resp); diff --git a/src/pages/admin/feed/index.tsx b/src/pages/admin/feed/index.tsx index c52d306..df4d964 100644 --- a/src/pages/admin/feed/index.tsx +++ b/src/pages/admin/feed/index.tsx @@ -5,7 +5,8 @@ import { formatRelative } from "date-fns"; import AdminListCommon from "@views/admin/AdminListCommon"; import { Link } from "@components/index"; import AddLink from "@components/AddLink"; -import { Post, getFeed } from "@models/Feed"; +import Post from "@models/Feed"; +import FeedApi from "@api/feedApi"; const URL = "/admin/feed"; @@ -40,7 +41,7 @@ const AdminFeedPage: NextPage = () => { const [forms, setForms] = useState(null); useEffect(() => { - getFeed({ auth: true }) + FeedApi.getFeed({ auth: true }) .then((res) => setForms(res)); }, []); diff --git a/src/pages/admin/jobads/[id].tsx b/src/pages/admin/jobads/[id].tsx index 8406dbf..d03eee2 100644 --- a/src/pages/admin/jobads/[id].tsx +++ b/src/pages/admin/jobads/[id].tsx @@ -3,9 +3,8 @@ import { NextPage } from "next"; import Head from "next/head"; import { useRouter } from "next/router"; import AdminCreateCommon from "@views/admin/AdminCreateCommon"; -import { - JobAd, getJobAd, createJobAd, updateJobAd, -} from "@models/JobAd"; +import JobAd from "@models/JobAd"; +import JobAdApi from "@api/jobAdApi"; import DatetimeWidget from "@components/Widgets/DatetimeWidget"; import SectionDividerWidget from "@components/Widgets/SectionDividerWidget"; import MarkdownEditorWidget from "@components/Widgets/MarkdownEditorWidget"; @@ -123,7 +122,7 @@ const JobAdCreatePage: NextPage = () => { useEffect(() => { const jobId = id && Number(id); if (jobId !== undefined) { - getJobAd(jobId, true) + JobAdApi.getJobAd(jobId, true) .then((res) => setFormData(res)) .catch((err) => setError(err)); } @@ -133,11 +132,11 @@ const JobAdCreatePage: NextPage = () => { try { const payload = data.formData; if (payload.id === undefined) { - const resp = await createJobAd(payload); + const resp = await JobAdApi.createJobAd(payload); setStatusMessage("Post created successfully"); setFormData(resp); } else { - const resp = await updateJobAd(payload); + const resp = await JobAdApi.updateJobAd(payload); setStatusMessage("Post updated successfully"); setFormData(resp); } diff --git a/src/pages/admin/jobads/index.tsx b/src/pages/admin/jobads/index.tsx index 356497a..a781aa2 100644 --- a/src/pages/admin/jobads/index.tsx +++ b/src/pages/admin/jobads/index.tsx @@ -5,7 +5,8 @@ import { formatRelative } from "date-fns"; import AdminListCommon from "@views/admin/AdminListCommon"; import { Link } from "@components/index"; import AddLink from "@components/AddLink"; -import { JobAd, getJobAds } from "@models/JobAd"; +import JobAd from "@models/JobAd"; +import JobAdApi from "@api/jobAdApi"; const URL = "/admin/jobads"; @@ -44,7 +45,7 @@ const AdminJobAdPage: NextPage = () => { const [jobAds, setAds] = useState(null); useEffect(() => { - getJobAds({ auth: true }) + JobAdApi.getJobAds({ auth: true }) .then((res) => setAds(res)); }, []); diff --git a/src/pages/admin/signups/[id].tsx b/src/pages/admin/signups/[id].tsx index bb5d895..dd51232 100644 --- a/src/pages/admin/signups/[id].tsx +++ b/src/pages/admin/signups/[id].tsx @@ -3,9 +3,8 @@ import { NextPage } from "next"; import Head from "next/head"; import { useRouter } from "next/router"; import AdminCreateCommon from "@views/admin/AdminCreateCommon"; -import { - SignupForm, createForm, getForm, updateForm, -} from "@models/SignupForm"; +import { SignupForm } from "@models/Signup"; +import SignupApi from "@api/signupApi"; import DatetimeWidget from "@components/Widgets/DatetimeWidget"; import SignupQuestionsWidget from "@components/Widgets/SignupQuestionsWidget/SignupQuestionsWidget"; import MarkdownEditorWidget from "@components/Widgets/MarkdownEditorWidget"; @@ -113,7 +112,7 @@ const SignupCreatePage: NextPage = () => { useEffect(() => { const suId = id && Number(id); if (suId !== undefined) { - getForm(suId, true) + SignupApi.getForm(suId, true) .then((res) => { setFormData({ ...res, @@ -134,14 +133,14 @@ const SignupCreatePage: NextPage = () => { }; if (payload.id === undefined) { - const resp = await createForm(payload); + const resp = await SignupApi.createForm(payload); setStatusMessage("Sign-up created successfully"); setFormData({ ...resp, questions: JSON.stringify(resp.questions) as any, }); } else { - const resp = await updateForm(payload); + const resp = await SignupApi.updateForm(payload); setStatusMessage("Sign-up updated successfully"); setFormData({ ...resp, diff --git a/src/pages/admin/signups/[id]/email.tsx b/src/pages/admin/signups/[id]/email.tsx index d16a1c0..a7f0eaa 100644 --- a/src/pages/admin/signups/[id]/email.tsx +++ b/src/pages/admin/signups/[id]/email.tsx @@ -3,7 +3,8 @@ import { NextPage } from "next"; import { useRouter } from "next/router"; import AdminCreateCommon from "@views/admin/AdminCreateCommon"; import MarkdownEditorWidget from "@components/Widgets/MarkdownEditorWidget"; -import { SignupForm, getForm, signupFormSendEmail } from "@models/SignupForm"; +import { SignupForm } from "@models/Signup"; +import SignupApi from "@api/signupApi"; const widgets = { markdownEditor: MarkdownEditorWidget, @@ -52,7 +53,7 @@ const SignupEmailPage: NextPage = () => { useEffect(() => { const formId = Number(id); if (formId !== undefined) { - getForm(formId, true) + SignupApi.getForm(formId, true) .then((res) => setSignupForm(res)); } }, [id]); @@ -63,7 +64,7 @@ const SignupEmailPage: NextPage = () => { const onSubmit = async (data) => { try { const payload = data.formData; - await signupFormSendEmail(payload, id); + await SignupApi.signupFormSendEmail(payload, id); setStatusMessage("Email sent successfully"); } catch (err) { setError(err); diff --git a/src/pages/admin/signups/[id]/list.tsx b/src/pages/admin/signups/[id]/list.tsx index a9713ff..4ebe5a6 100644 --- a/src/pages/admin/signups/[id]/list.tsx +++ b/src/pages/admin/signups/[id]/list.tsx @@ -4,8 +4,8 @@ import { useRouter } from "next/router"; import styled from "styled-components"; import { CSVLink } from "react-csv"; import AdminListCommon from "@views/admin/AdminListCommon"; -import { SignupForm, getForm, getSignups } from "@models/SignupForm"; -import { Signup, deleteSignup } from "@models/Signup"; +import { Signup, SignupForm } from "@models/Signup"; +import SignupApi from "@api/signupApi"; import { Button } from "@components/index"; import noop from "@utils/noop"; @@ -22,16 +22,16 @@ const SignupEmailPage: NextPage = () => { useEffect(() => { const formId = Number(id); - getForm(formId, true) + SignupApi.getForm(formId, true) .then((res) => setSignupForm(res)); - getSignups(formId).then((res) => setSignups(res)); + SignupApi.getSignups(formId).then((res) => setSignups(res)); }, [id]); const confirmDelete = async (signup: Signup, question: any) => { if (window.confirm(`Delete: ${signup.id}: ${signup.answer[question.id]}; Are you sure?`) === true) { try { - await deleteSignup(signup.id); + await SignupApi.deleteSignup(signup.id); setSignups(signups.filter((s) => s.id !== signup.id)); } catch (err) { window.alert("Delete failed!"); diff --git a/src/pages/admin/signups/index.tsx b/src/pages/admin/signups/index.tsx index 04e72eb..9e4710c 100644 --- a/src/pages/admin/signups/index.tsx +++ b/src/pages/admin/signups/index.tsx @@ -5,7 +5,8 @@ import { formatRelative } from "date-fns"; import AdminListCommon from "@views/admin/AdminListCommon"; import { Link } from "@components/index"; import AddLink from "@components/AddLink"; -import { SignupForm, getForms } from "@models/SignupForm"; +import { SignupForm } from "@models/Signup"; +import SignupApi from "@api/signupApi"; const URL = "/admin/signups"; @@ -44,7 +45,7 @@ const AdminSignupPage: NextPage = () => { const [forms, setForms] = useState(null); useEffect(() => { - getForms(true) + SignupApi.getForms(true) .then((res) => setForms(res)); }, []); diff --git a/src/pages/events/[id].tsx b/src/pages/events/[id].tsx index df50dc9..1391696 100644 --- a/src/pages/events/[id].tsx +++ b/src/pages/events/[id].tsx @@ -2,9 +2,9 @@ import React from "react"; import { NextPage, GetStaticProps, GetStaticPaths } from "next"; import Head from "next/head"; import { useRouter } from "next/router"; -import { - Event, useFetchEvents, eventFetcher, generateFetchParams, -} from "@models/Event"; +import Event from "@models/Event"; +import EventApi from "@api/eventApi"; +import useFetchEvents from "@hooks/useFetchEvents"; import EventPageView from "@views/EventPage/EventPageView"; import PageWrapper from "@views/common/PageWrapper"; import LoadingView from "@views/common/LoadingView"; @@ -35,9 +35,8 @@ const EventPage: NextPage = ({ initialEvent }) => { }; export const getStaticPaths: GetStaticPaths = async () => { - const { url, config } = generateFetchParams(); - const allEvents = await eventFetcher(url, config); - const paths = allEvents.results.map((e: Event) => ({ + const allEvents = await EventApi.getEvents(); + const paths = allEvents.map((e: Event) => ({ params: { id: String(e.id), }, @@ -51,8 +50,7 @@ export const getStaticPaths: GetStaticPaths = async () => { export const getStaticProps: GetStaticProps = async ({ params }) => { const { id } = params; - const { url, config } = generateFetchParams(id as string); - const initialEvent = await eventFetcher(url, config); + const initialEvent = await EventApi.getEvent(Number(id)); return { props: { initialEvent, diff --git a/src/pages/in_english.tsx b/src/pages/in_english.tsx index 653fc92..f5fe3fa 100644 --- a/src/pages/in_english.tsx +++ b/src/pages/in_english.tsx @@ -1,12 +1,12 @@ import React from "react"; import { NextPage, GetStaticProps } from "next"; import Head from "next/head"; -import { - Event, useFetchEvents, eventFetcher, generateFetchParams as eventParams, -} from "@models/Event"; -import { - Post, useFetchFeed, feedFetcher, generateFetchParams as feedParams, -} from "@models/Feed"; +import Event from "@models/Event"; +import EventApi from "@api/eventApi"; +import useFetchEvents from "@hooks/useFetchEvents"; +import Post from "@models/Feed"; +import FeedApi from "@api/feedApi"; +import useFetchFeed from "@hooks/useFetchFeed"; import InEnglishPageView from "@views/InEnglishPage/InEnglishPageView"; import PageWrapper from "@views/common/PageWrapper"; @@ -37,12 +37,8 @@ const InEnglishPage: NextPage = ({ initialEvents, initialFeed }) = }; export const getStaticProps: GetStaticProps = async () => { - let url: string; - let config: any; - ({ url, config } = eventParams("", eventOptions)); - const initialEvents = await eventFetcher(url, config); - ({ url, config } = feedParams("")); - const initialFeed = await feedFetcher(url, config); + const initialEvents = await EventApi.getEvents(eventOptions); + const initialFeed = await FeedApi.getFeed(); return { props: { initialEvents, diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 53b15ed..698ed52 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,12 +1,12 @@ import React from "react"; import { NextPage, GetStaticProps } from "next"; import Head from "next/head"; -import { - Event, useFetchEvents, eventFetcher, generateFetchParams as eventParams, -} from "@models/Event"; -import { - Post, useFetchFeed, feedFetcher, generateFetchParams as feedParams, -} from "@models/Feed"; +import Event from "@models/Event"; +import EventApi from "@api/eventApi"; +import useFetchEvents from "@hooks/useFetchEvents"; +import Post from "@models/Feed"; +import FeedApi from "@api/feedApi"; +import useFetchFeed from "@hooks/useFetchFeed"; import FrontPageView from "@views/FrontPage/FrontPageView"; import PageWrapper from "@views/common/PageWrapper"; @@ -37,12 +37,8 @@ const FrontPage: NextPage = ({ initialEvents, initialFeed }) => { }; export const getStaticProps: GetStaticProps = async () => { - let url: string; - let config: any; - ({ url, config } = eventParams("", eventOptions)); - const initialEvents = await eventFetcher(url, config); - ({ url, config } = feedParams("")); - const initialFeed = await feedFetcher(url, config); + const initialEvents = await EventApi.getEvents(eventOptions); + const initialFeed = await FeedApi.getFeed(); return { props: { initialEvents, diff --git a/src/pages/kilta/toiminta.tsx b/src/pages/kilta/toiminta.tsx index e021fe1..f82aa40 100644 --- a/src/pages/kilta/toiminta.tsx +++ b/src/pages/kilta/toiminta.tsx @@ -1,12 +1,12 @@ import React from "react"; import { NextPage, GetStaticProps } from "next"; import Head from "next/head"; -import { - Event, useFetchEvents, eventFetcher, generateFetchParams as eventParams, -} from "@models/Event"; -import { - Post, useFetchFeed, feedFetcher, generateFetchParams as feedParams, -} from "@models/Feed"; +import Event from "@models/Event"; +import EventApi from "@api/eventApi"; +import useFetchEvents from "@hooks/useFetchEvents"; +import Post from "@models/Feed"; +import FeedApi from "@api/feedApi"; +import useFetchFeed from "@hooks/useFetchFeed"; import ActualPageView from "@views/ActualPage/ActualPageView"; import PageWrapper from "@views/common/PageWrapper"; @@ -36,12 +36,8 @@ const ActualPage: NextPage = ({ initialEvents, initialFeed }) => { }; export const getStaticProps: GetStaticProps = async () => { - let url: string; - let config: any; - ({ url, config } = eventParams("", eventOptions)); - const initialEvents = await eventFetcher(url, config); - ({ url, config } = feedParams("")); - const initialFeed = await feedFetcher(url, config); + const initialEvents = await EventApi.getEvents(eventOptions); + const initialFeed = await FeedApi.getFeed(); return { props: { initialEvents, diff --git a/src/pages/signup/[id].tsx b/src/pages/signup/[id].tsx index 7aa07b6..980d7f5 100644 --- a/src/pages/signup/[id].tsx +++ b/src/pages/signup/[id].tsx @@ -2,8 +2,8 @@ import React, { useState } from "react"; import { NextPage, GetStaticProps, GetStaticPaths } from "next"; import Head from "next/head"; import { useRouter } from "next/router"; -import { getForm, SignupForm, getForms } from "@models/SignupForm"; -import { createSignup, Signup } from "@models/Signup"; +import { Signup, SignupForm } from "@models/Signup"; +import SignupApi from "@api/signupApi"; import SignUpPageView from "@views/SignUpPage/SignUpPageView"; import PageWrapper from "@views/common/PageWrapper"; import LoadingView from "@views/common/LoadingView"; @@ -28,7 +28,7 @@ const SignUpPage: NextPage = ({ form }) => { }; try { - await createSignup(payload); + await SignupApi.createSignup(payload); // TODO: Fetch/update signup list, so user sees the signup in the list setStatus("Sign-up submitted successfully"); } catch (error) { @@ -56,7 +56,7 @@ const SignUpPage: NextPage = ({ form }) => { }; export const getStaticPaths: GetStaticPaths = async () => { - const allForms = await getForms(); + const allForms = await SignupApi.getForms(); const paths = allForms.map((e: SignupForm) => ({ params: { id: String(e.id), @@ -71,7 +71,7 @@ export const getStaticPaths: GetStaticPaths = async () => { export const getStaticProps: GetStaticProps = async ({ params }) => { const { id } = params; - const form = await getForm(Number(id)); + const form = await SignupApi.getForm(Number(id)); return { props: { form, diff --git a/src/pages/signup/edit/[id]/[uuid].tsx b/src/pages/signup/edit/[id]/[uuid].tsx index 319de28..1cf2c1a 100644 --- a/src/pages/signup/edit/[id]/[uuid].tsx +++ b/src/pages/signup/edit/[id]/[uuid].tsx @@ -1,8 +1,8 @@ import React, { useEffect, useState } from "react"; import { NextPage } from "next"; import { useRouter } from "next/router"; -import { getForm, SignupForm } from "@models/SignupForm"; -import { updateSignup, getSignupUUID, Signup } from "@models/Signup"; +import { Signup, SignupForm } from "@models/Signup"; +import SignupApi from "@api/signupApi"; import SignUpPageView from "@views/SignUpPage/SignUpPageView"; import PageWrapper from "@views/common/PageWrapper"; import noop from "@utils/noop"; @@ -30,7 +30,7 @@ const EditSignUpPage: NextPage = () => { useEffect(() => { const fetchSignUpForm = async (id: number): Promise => { - const formPromise = getForm(id); + const formPromise = SignupApi.getForm(id); formPromise.then((form) => { setForm(form); }); @@ -38,7 +38,7 @@ const EditSignUpPage: NextPage = () => { }; const fetchSignUp = async (id: number, uniqueId: string): Promise => { - const signupPromise = getSignupUUID(id, uniqueId); + const signupPromise = SignupApi.getSignupUUID(id, uniqueId); signupPromise.then((signup) => setFormData(signup.answer)); return signupPromise; }; @@ -56,7 +56,7 @@ const EditSignUpPage: NextPage = () => { }; try { - await updateSignup(payload, uuid); + await SignupApi.updateSignup(payload, uuid); // TODO: Update signup list, so user sees possible changes in the list setStatus("Sign-up submission updated successfully"); } catch (error) { diff --git a/src/pages/yritysyhteistyo.tsx b/src/pages/yritysyhteistyo.tsx index d24f747..da5c1bf 100644 --- a/src/pages/yritysyhteistyo.tsx +++ b/src/pages/yritysyhteistyo.tsx @@ -1,9 +1,9 @@ import React from "react"; import { NextPage, GetStaticProps } from "next"; import Head from "next/head"; -import { - JobAd, useFetchJobAds, jobAdFetcher, generateFetchParams, -} from "@models/JobAd"; +import JobAd from "@models/JobAd"; +import JobAdApi from "@api/jobAdApi"; +import useFetchJobAds from "@hooks/useFetchJobAds"; import CorporatePageView from "@views/CorporatePage/CorporatePageView"; import PageWrapper from "@views/common/PageWrapper"; @@ -27,8 +27,7 @@ const CorporatePage: NextPage = ({ initialJobAds }) => { }; export const getStaticProps: GetStaticProps = async () => { - const { url } = generateFetchParams(); - const initialJobAds = await jobAdFetcher(url); + const initialJobAds = await JobAdApi.getJobAds(); return { props: { initialJobAds, diff --git a/src/views/ActualPage/ActualPageView.tsx b/src/views/ActualPage/ActualPageView.tsx index e6cf836..027d461 100644 --- a/src/views/ActualPage/ActualPageView.tsx +++ b/src/views/ActualPage/ActualPageView.tsx @@ -1,8 +1,8 @@ import React from "react"; import styled from "styled-components"; import breakpoints from "@theme/breakpoints"; -import { Event } from "@models/Event"; -import { Post } from "@models/Feed"; +import Event from "@models/Event"; +import Post from "@models/Feed"; import { Divider, CTASection, TextSection, Link, CrossFadeImages, diff --git a/src/views/ActualPage/EventCalendar.tsx b/src/views/ActualPage/EventCalendar.tsx index bb0a61b..8c0b7d7 100644 --- a/src/views/ActualPage/EventCalendar.tsx +++ b/src/views/ActualPage/EventCalendar.tsx @@ -1,5 +1,5 @@ import React, { useState } from "react"; -import { Event } from "@models/Event"; +import Event from "@models/Event"; import Button from "@components/Button"; import { CardSection, Card, FullWidthSection } from "@components/index"; diff --git a/src/views/ActualPage/News.tsx b/src/views/ActualPage/News.tsx index aafad0a..ea7f6f6 100644 --- a/src/views/ActualPage/News.tsx +++ b/src/views/ActualPage/News.tsx @@ -1,5 +1,5 @@ import React, { useState } from "react"; -import { Post } from "@models/Feed"; +import Post from "@models/Feed"; import Button from "@components/Button"; import { CardSection, Card, FullWidthSection } from "@components/index"; diff --git a/src/views/CorporatePage/CorporatePageView.tsx b/src/views/CorporatePage/CorporatePageView.tsx index aa32772..2fe2a33 100644 --- a/src/views/CorporatePage/CorporatePageView.tsx +++ b/src/views/CorporatePage/CorporatePageView.tsx @@ -2,7 +2,7 @@ import React from "react"; import { CTASection, TextSection, PageLink, Link, } from "@components/index"; -import { JobAd } from "@models/JobAd"; +import JobAd from "@models/JobAd"; import CorporatePageHero from "./CorporatePageHero"; import JobAdList from "./JobAdList"; diff --git a/src/views/CorporatePage/JobAdList.tsx b/src/views/CorporatePage/JobAdList.tsx index ad44b09..12338c9 100644 --- a/src/views/CorporatePage/JobAdList.tsx +++ b/src/views/CorporatePage/JobAdList.tsx @@ -1,6 +1,6 @@ import React from "react"; import styled from "styled-components"; -import { JobAd } from "@models/JobAd"; +import JobAd from "@models/JobAd"; import { Accordion } from "@components/index"; import ReactMarkdown from "react-markdown"; diff --git a/src/views/EventPage/EventPageView.tsx b/src/views/EventPage/EventPageView.tsx index 085ed27..343fc06 100644 --- a/src/views/EventPage/EventPageView.tsx +++ b/src/views/EventPage/EventPageView.tsx @@ -2,7 +2,7 @@ import React from "react"; import Image from "next/image"; import styled from "styled-components"; import colors from "@theme/colors"; -import { Event } from "@models/Event"; +import Event from "@models/Event"; import Button from "@components/Button"; import { Link, TextSection } from "@components/index"; import noop from "@utils/noop"; diff --git a/src/views/FrontPage/FrontPageView.tsx b/src/views/FrontPage/FrontPageView.tsx index a4342ae..05d859a 100644 --- a/src/views/FrontPage/FrontPageView.tsx +++ b/src/views/FrontPage/FrontPageView.tsx @@ -9,8 +9,8 @@ import { CTASection, Link, } from "@components/index"; -import { Event } from "@models/Event"; -import { Post } from "@models/Feed"; +import Event from "@models/Event"; +import Post from "@models/Feed"; import { colors } from "@theme/colors"; import FullWidthSection from "@components/Sections/FullWidthSection"; diff --git a/src/views/InEnglishPage/InEnglishPageView.tsx b/src/views/InEnglishPage/InEnglishPageView.tsx index 77ebc36..d61a045 100644 --- a/src/views/InEnglishPage/InEnglishPageView.tsx +++ b/src/views/InEnglishPage/InEnglishPageView.tsx @@ -11,8 +11,8 @@ import { PageLink, TextSection, } from "@components/index"; -import { Event } from "@models/Event"; -import { Post } from "@models/Feed"; +import Event from "@models/Event"; +import Post from "@models/Feed"; import noop from "@utils/noop"; import InEnglishPageHero from "./InEnglishPageHero"; diff --git a/src/views/SignUpPage/FormUtils.tsx b/src/views/SignUpPage/FormUtils.tsx index 71a1d62..22cade2 100644 --- a/src/views/SignUpPage/FormUtils.tsx +++ b/src/views/SignUpPage/FormUtils.tsx @@ -1,5 +1,5 @@ import { Question } from "@components/Widgets/SignupQuestionsWidget/common"; -import { SignupForm } from "@models/SignupForm"; +import { SignupForm } from "@models/Signup"; import { EMAIL_REGEX } from "@utils/regexes"; import escapeRegExp from "lodash/escapeRegExp"; diff --git a/src/views/SignUpPage/SignUpPageView.tsx b/src/views/SignUpPage/SignUpPageView.tsx index 4797a5f..07a90c9 100644 --- a/src/views/SignUpPage/SignUpPageView.tsx +++ b/src/views/SignUpPage/SignUpPageView.tsx @@ -1,7 +1,7 @@ import React from "react"; import styled from "styled-components"; import { IChangeEvent, ISubmitEvent, ErrorSchema } from "react-jsonschema-form"; -import { SignupForm } from "@models/SignupForm"; +import { SignupForm } from "@models/Signup"; import Checkboxes from "@components/Widgets/Checkbox/Checkboxes"; import RadioButtonWidget from "@components/Widgets/RadioButton/RadioButtonWidget"; import { TextSection } from "@components/index"; diff --git a/src/views/admin/AdminCreateCommon.tsx b/src/views/admin/AdminCreateCommon.tsx index 63737f2..7b3284e 100644 --- a/src/views/admin/AdminCreateCommon.tsx +++ b/src/views/admin/AdminCreateCommon.tsx @@ -2,10 +2,10 @@ import React from "react"; import styled from "styled-components"; import { ISubmitEvent, IChangeEvent, ErrorSchema } from "react-jsonschema-form"; import { colors } from "@theme/colors"; -import { Event } from "@models/Event"; -import { Post } from "@models/Feed"; -import { SignupForm } from "@models/SignupForm"; -import { JobAd } from "@models/JobAd"; +import Event from "@models/Event"; +import Post from "@models/Feed"; +import { SignupForm } from "@models/Signup"; +import JobAd from "@models/JobAd"; import FormWrapper from "@views/common/FormWrapper"; import AdminPageWrapper from "@views/common/AdminPageWrapper"; diff --git a/tsconfig.json b/tsconfig.json index e51222d..3a9954a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,6 +21,9 @@ "typeRoots": ["types", "node_modules/@types"], "baseUrl": "./", "paths": { + "@api/*": [ + "src/api/*" + ], "@components/*": [ "src/components/*" ], From a3fc8ae2e9f9eec4eff95da93191e86455536a38 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Mon, 15 Mar 2021 20:08:47 +0200 Subject: [PATCH 2/5] Update Next.js --- package-lock.json | 1164 +++++++-------------------------------------- package.json | 2 +- 2 files changed, 177 insertions(+), 989 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7bd8878..8990988 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "date-fns": "2.18.0", "js-cookie": "2.2.1", "lodash": "4.17.21", - "next": "10.0.7", + "next": "10.0.8", "normalize.css": "8.0.1", "react": "17.0.1", "react-beautiful-dnd": "13.0.0", @@ -3053,19 +3053,19 @@ } }, "node_modules/@next/env": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@next/env/-/env-10.0.7.tgz", - "integrity": "sha512-/vnz2SL/mk3Tei58WfRtVnvz5xHmAqcBmZL5sTBEy1CZG6OtZGNx0qAFCjtVkeJ5m1Bh4Ut+WFh/RF333wx8Sg==" + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@next/env/-/env-10.0.8.tgz", + "integrity": "sha512-vWdxAHD6gJn52tN5bxj1VoRgu5lNtRPc/HyYf7V014k2GZ9eKhqoFQGSSMNGHB7WgdUxLVw75+o9Ek9ClOOAjw==" }, "node_modules/@next/polyfill-module": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-10.0.7.tgz", - "integrity": "sha512-HxqzRpoSgmZP0kRIWwH+e0SgtAXqJ0VkYtwWcsQFED8+xF4Eqn+7Twyp4uE6hutC8gr8IFSFqH+DEYhRtg1ltQ==" + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-10.0.8.tgz", + "integrity": "sha512-JCUGB4/SKQ4LXniv7LKGrpW+W2DGH/CLkrgXgSo/Ze+EJdMDLxC/VFhiuW+TgAaAWLE4gryoswlZBNyHtkPGQA==" }, "node_modules/@next/react-dev-overlay": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-10.0.7.tgz", - "integrity": "sha512-yq71MDHVqN2N+IqOvZDiFsMpQrBcymrdpTx1ShhAADX7cWQvW4dhcIir4BbfrS10vS1LLz/3a8uKZkGdNoJj3w==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-10.0.8.tgz", + "integrity": "sha512-ygVsvkzYTYIuME+dUUSjCxbNjrJ+Up9Y+CrWEmSSk6HuxajUvrB9vN6RT+PeAzEOQ5er1sWxmVHVdPknQPVWyQ==", "dependencies": { "@babel/code-frame": "7.12.11", "anser": "1.4.9", @@ -3078,6 +3078,10 @@ "source-map": "0.8.0-beta.0", "stacktrace-parser": "0.1.10", "strip-ansi": "6.0.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17", + "react-dom": "^16.9.0 || ^17" } }, "node_modules/@next/react-dev-overlay/node_modules/ansi-regex": { @@ -3097,6 +3101,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@next/react-dev-overlay/node_modules/chalk": { @@ -3109,6 +3116,9 @@ }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@next/react-dev-overlay/node_modules/color-convert": { @@ -3135,11 +3145,6 @@ "node": ">=8" } }, - "node_modules/@next/react-dev-overlay/node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, "node_modules/@next/react-dev-overlay/node_modules/source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", @@ -3174,9 +3179,18 @@ } }, "node_modules/@next/react-refresh-utils": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-10.0.7.tgz", - "integrity": "sha512-d/71vtQglv6m7sh4W1O9drc2hYti7UnAdEXfBLZAS354g2S80lvCRGIhbDrMx4w0rpShoxBIZboE2++LihAESg==" + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-10.0.8.tgz", + "integrity": "sha512-ZMO77Xs2ioGV/nZB4GRDHgsNT2jhOp+cZIh6c7wf0xw9o/1KoTWN8nxWzwU/laAtkoSS+E6YdhuR4Mw3Ar3CSg==", + "peerDependencies": { + "react-refresh": "0.8.3", + "webpack": "^4 || ^5" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.3", @@ -3840,7 +3854,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3868,22 +3882,6 @@ "node": ">= 8" } }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "optional": true - }, - "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3933,24 +3931,12 @@ "node": ">=0.10.0" } }, - "node_modules/array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, "node_modules/array-find": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", "dev": true }, - "node_modules/array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", - "optional": true - }, "node_modules/array-includes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", @@ -3979,18 +3965,6 @@ "node": ">= 0.4" } }, - "node_modules/array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "node_modules/array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, "node_modules/array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -4468,37 +4442,6 @@ "node": ">=8" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "optional": true - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -4927,12 +4870,6 @@ "node": ">=8.0" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "optional": true - }, "node_modules/chrome-remote-interface": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.25.7.tgz", @@ -5033,7 +4970,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5064,16 +5001,6 @@ "node": ">=0.10.0" } }, - "node_modules/color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "optional": true, - "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, "node_modules/color-convert": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", @@ -5087,16 +5014,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" }, - "node_modules/color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", - "optional": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "node_modules/colorette": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", @@ -5136,12 +5053,6 @@ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "optional": true - }, "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -5595,18 +5506,6 @@ "node": ">=0.10" } }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "optional": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dedent": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.4.0.tgz", @@ -5625,15 +5524,6 @@ "node": ">=0.12" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "optional": true, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -5746,12 +5636,6 @@ "node": ">=0.10.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "optional": true - }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -5777,18 +5661,6 @@ "minimalistic-assert": "^1.0.0" } }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/device-specs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/device-specs/-/device-specs-1.0.0.tgz", @@ -5979,7 +5851,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "devOptional": true, + "dev": true, "dependencies": { "once": "^1.4.0" } @@ -6967,15 +6839,6 @@ "node": ">=0.10.0" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "optional": true, - "engines": { - "node": ">=6" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -7405,12 +7268,6 @@ "node": ">=0.10.0" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "optional": true - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -7441,22 +7298,6 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "optional": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -7495,6 +7336,14 @@ "node": ">= 0.4" } }, + "node_modules/get-orientation": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-orientation/-/get-orientation-1.1.2.tgz", + "integrity": "sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==", + "dependencies": { + "stream-parser": "^0.3.1" + } + }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -7504,12 +7353,6 @@ "node": ">=0.10.0" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "optional": true - }, "node_modules/glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -7749,12 +7592,6 @@ "node": ">= 0.4" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "optional": true - }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -8129,7 +7966,7 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "devOptional": true + "dev": true }, "node_modules/internal-slot": { "version": "1.0.3", @@ -8711,12 +8548,6 @@ "node": ">=6" } }, - "node_modules/jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, "node_modules/jsx-ast-utils": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", @@ -9400,15 +9231,6 @@ "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "optional": true, - "engines": { - "node": ">=8" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -9505,12 +9327,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "optional": true - }, "node_modules/mkdirp/node_modules/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -9535,8 +9351,7 @@ "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/mustache": { "version": "2.3.2", @@ -9579,12 +9394,6 @@ "node": ">=0.10.0" } }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "optional": true - }, "node_modules/native-url": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.3.4.tgz", @@ -9600,16 +9409,16 @@ "dev": true }, "node_modules/next": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/next/-/next-10.0.7.tgz", - "integrity": "sha512-We0utmwwfkvO12eLyUZd3tX9VLDE3FPpOaHpH3kqKdUTxJzUKt8FLBXCTm0mwsTKW5XColWG8mJvz2OLu3+3QA==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/next/-/next-10.0.8.tgz", + "integrity": "sha512-iDY65ce4Prn/9EnQpJGFMb5QJvtGWzZPk6KQqT7vDNu4D+jkivkk9NaAs/k1hR73pXdJHmhHer1s0YxLSghAKQ==", "dependencies": { "@babel/runtime": "7.12.5", "@hapi/accept": "5.0.1", - "@next/env": "10.0.7", - "@next/polyfill-module": "10.0.7", - "@next/react-dev-overlay": "10.0.7", - "@next/react-refresh-utils": "10.0.7", + "@next/env": "10.0.8", + "@next/polyfill-module": "10.0.8", + "@next/react-dev-overlay": "10.0.8", + "@next/react-refresh-utils": "10.0.8", "@opentelemetry/api": "0.14.0", "ast-types": "0.13.2", "browserslist": "4.16.1", @@ -9621,6 +9430,7 @@ "cssnano-simple": "1.2.2", "etag": "1.8.1", "find-cache-dir": "3.3.1", + "get-orientation": "1.1.2", "jest-worker": "24.9.0", "native-url": "0.3.4", "node-fetch": "2.6.1", @@ -9639,7 +9449,7 @@ "styled-jsx": "3.3.2", "use-subscription": "1.5.1", "vm-browserify": "1.1.2", - "watchpack": "2.0.0-beta.13" + "watchpack": "2.1.1" }, "bin": { "next": "dist/bin/next" @@ -9647,8 +9457,23 @@ "engines": { "node": ">=10.13.0" }, - "optionalDependencies": { - "sharp": "0.26.3" + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0", + "react": "^16.6.0 || ^17", + "react-dom": "^16.6.0 || ^17", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } } }, "node_modules/next/node_modules/browserslist": { @@ -9755,30 +9580,6 @@ "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", "dev": true }, - "node_modules/node-abi": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz", - "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==", - "optional": true, - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-addon-api": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", - "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==", - "optional": true - }, "node_modules/node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", @@ -9868,12 +9669,6 @@ "node": ">=6.0.0" } }, - "node_modules/noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", - "optional": true - }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -9973,18 +9768,6 @@ "semver": "bin/semver" } }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "optional": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, "node_modules/num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -9995,7 +9778,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -10301,7 +10084,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "devOptional": true, + "dev": true, "dependencies": { "wrappy": "1" } @@ -11041,46 +10824,6 @@ "node": ">=6" } }, - "node_modules/prebuild-install": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.0.1.tgz", - "integrity": "sha512-7GOJrLuow8yeiyv75rmvZyeMGzl8mdEX5gY69d6a6bHWmiPevwqFw+tQavhK0EYMaSg3/KD24cWqeQv1EWsqDQ==", - "optional": true, - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prebuild-install/node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "optional": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -11161,7 +10904,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "devOptional": true, + "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -11250,21 +10993,6 @@ "node": ">= 0.8" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "optional": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, "node_modules/react": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", @@ -12075,7 +11803,7 @@ "version": "7.3.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "devOptional": true, + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -12090,7 +11818,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "devOptional": true, + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -12098,12 +11826,6 @@ "node": ">=10" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "optional": true - }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -12158,28 +11880,6 @@ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, - "node_modules/sharp": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.26.3.tgz", - "integrity": "sha512-NdEJ9S6AMr8Px0zgtFo1TJjMK/ROMU92MkDtYn2BBrDjIx3YfH9TUyGdzPC+I/L619GeYQc690Vbaxc5FPCCWg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "array-flatten": "^3.0.0", - "color": "^3.1.3", - "detect-libc": "^1.0.3", - "node-addon-api": "^3.0.2", - "npmlog": "^4.1.2", - "prebuild-install": "^6.0.0", - "semver": "^7.3.2", - "simple-get": "^4.0.0", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -12202,16 +11902,9 @@ } }, "node_modules/shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "dependencies": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" }, "node_modules/shortid": { "version": "2.2.16", @@ -12261,60 +11954,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "devOptional": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "optional": true - }, - "node_modules/simple-get": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz", - "integrity": "sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==", - "optional": true, - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "optional": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/simple-get/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "optional": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "optional": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "optional": true + "dev": true }, "node_modules/sirv": { "version": "1.0.10", @@ -12727,6 +12367,22 @@ "xtend": "^4.0.0" } }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -12744,7 +12400,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "devOptional": true, + "dev": true, "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -12758,7 +12414,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "devOptional": true, + "dev": true, "dependencies": { "number-is-nan": "^1.0.0" }, @@ -13081,7 +12737,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "devOptional": true, + "dev": true, "dependencies": { "ansi-regex": "^2.0.0" }, @@ -13119,15 +12775,6 @@ "node": ">=8" } }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/style-search": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", @@ -14089,48 +13736,6 @@ "node": ">=8" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "optional": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/testcafe": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/testcafe/-/testcafe-1.12.0.tgz", @@ -15227,7 +14832,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "devOptional": true, + "dev": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -15593,9 +15198,9 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, "node_modules/watchpack": { - "version": "2.0.0-beta.13", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.0-beta.13.tgz", - "integrity": "sha512-ZEFq2mx/k5qgQwgi6NOm+2ImICb8ngAkA/rZ6oyXZ7SgPn3pncf+nfhYTCrs3lmHwOxnPtGLTOuFLfpSMh1VMA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", + "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -15752,12 +15357,6 @@ "which": "bin/which" } }, - "node_modules/which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "optional": true - }, "node_modules/which-promise": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-promise/-/which-promise-1.0.0.tgz", @@ -15799,15 +15398,6 @@ "node": ">=0.10.0" } }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -15834,7 +15424,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "devOptional": true + "dev": true }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -15871,7 +15461,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "devOptional": true + "dev": true }, "node_modules/yaml": { "version": "1.10.0", @@ -18736,19 +18326,19 @@ } }, "@next/env": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@next/env/-/env-10.0.7.tgz", - "integrity": "sha512-/vnz2SL/mk3Tei58WfRtVnvz5xHmAqcBmZL5sTBEy1CZG6OtZGNx0qAFCjtVkeJ5m1Bh4Ut+WFh/RF333wx8Sg==" + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@next/env/-/env-10.0.8.tgz", + "integrity": "sha512-vWdxAHD6gJn52tN5bxj1VoRgu5lNtRPc/HyYf7V014k2GZ9eKhqoFQGSSMNGHB7WgdUxLVw75+o9Ek9ClOOAjw==" }, "@next/polyfill-module": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-10.0.7.tgz", - "integrity": "sha512-HxqzRpoSgmZP0kRIWwH+e0SgtAXqJ0VkYtwWcsQFED8+xF4Eqn+7Twyp4uE6hutC8gr8IFSFqH+DEYhRtg1ltQ==" + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-10.0.8.tgz", + "integrity": "sha512-JCUGB4/SKQ4LXniv7LKGrpW+W2DGH/CLkrgXgSo/Ze+EJdMDLxC/VFhiuW+TgAaAWLE4gryoswlZBNyHtkPGQA==" }, "@next/react-dev-overlay": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-10.0.7.tgz", - "integrity": "sha512-yq71MDHVqN2N+IqOvZDiFsMpQrBcymrdpTx1ShhAADX7cWQvW4dhcIir4BbfrS10vS1LLz/3a8uKZkGdNoJj3w==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-10.0.8.tgz", + "integrity": "sha512-ygVsvkzYTYIuME+dUUSjCxbNjrJ+Up9Y+CrWEmSSk6HuxajUvrB9vN6RT+PeAzEOQ5er1sWxmVHVdPknQPVWyQ==", "requires": { "@babel/code-frame": "7.12.11", "anser": "1.4.9", @@ -18803,11 +18393,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, "source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", @@ -18835,9 +18420,10 @@ } }, "@next/react-refresh-utils": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-10.0.7.tgz", - "integrity": "sha512-d/71vtQglv6m7sh4W1O9drc2hYti7UnAdEXfBLZAS354g2S80lvCRGIhbDrMx4w0rpShoxBIZboE2++LihAESg==" + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-10.0.8.tgz", + "integrity": "sha512-ZMO77Xs2ioGV/nZB4GRDHgsNT2jhOp+cZIh6c7wf0xw9o/1KoTWN8nxWzwU/laAtkoSS+E6YdhuR4Mw3Ar3CSg==", + "requires": {} }, "@nodelib/fs.scandir": { "version": "2.1.3", @@ -19354,7 +18940,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "devOptional": true + "dev": true }, "ansi-styles": { "version": "3.2.1", @@ -19373,22 +18959,6 @@ "picomatch": "^2.0.4" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -19426,24 +18996,12 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, "array-find": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", "dev": true }, - "array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", - "optional": true - }, "array-includes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", @@ -19468,18 +19026,6 @@ } } }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -19873,36 +19419,6 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "optional": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "optional": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "optional": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -20278,12 +19794,6 @@ } } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "optional": true - }, "chrome-remote-interface": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.25.7.tgz", @@ -20370,7 +19880,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "devOptional": true + "dev": true }, "coffeescript": { "version": "2.5.1", @@ -20388,16 +19898,6 @@ "object-visit": "^1.0.0" } }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "optional": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, "color-convert": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", @@ -20411,16 +19911,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" }, - "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", - "optional": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "colorette": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", @@ -20460,12 +19950,6 @@ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "optional": true - }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -20854,15 +20338,6 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "optional": true, - "requires": { - "mimic-response": "^2.0.0" - } - }, "dedent": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.4.0.tgz", @@ -20878,12 +20353,6 @@ "type-detect": "^4.0.0" } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "optional": true - }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -20978,12 +20447,6 @@ } } }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "optional": true - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -21003,12 +20466,6 @@ "minimalistic-assert": "^1.0.0" } }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "optional": true - }, "device-specs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/device-specs/-/device-specs-1.0.0.tgz", @@ -21181,7 +20638,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "devOptional": true, + "dev": true, "requires": { "once": "^1.4.0" } @@ -21981,12 +21438,6 @@ } } }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "optional": true - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -22336,12 +21787,6 @@ "map-cache": "^0.2.2" } }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "optional": true - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -22366,22 +21811,6 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -22413,18 +21842,20 @@ } } }, + "get-orientation": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-orientation/-/get-orientation-1.1.2.tgz", + "integrity": "sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==", + "requires": { + "stream-parser": "^0.3.1" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "optional": true - }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -22607,12 +22038,6 @@ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "optional": true - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -22926,7 +22351,7 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "devOptional": true + "dev": true }, "internal-slot": { "version": "1.0.3", @@ -23391,12 +22816,6 @@ "minimist": "^1.2.5" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, "jsx-ast-utils": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", @@ -23979,12 +23398,6 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "optional": true - }, "min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -24072,12 +23485,6 @@ } } }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "optional": true - }, "moment": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", @@ -24093,8 +23500,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mustache": { "version": "2.3.2", @@ -24128,12 +23534,6 @@ "to-regex": "^3.0.1" } }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "optional": true - }, "native-url": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.3.4.tgz", @@ -24149,16 +23549,16 @@ "dev": true }, "next": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/next/-/next-10.0.7.tgz", - "integrity": "sha512-We0utmwwfkvO12eLyUZd3tX9VLDE3FPpOaHpH3kqKdUTxJzUKt8FLBXCTm0mwsTKW5XColWG8mJvz2OLu3+3QA==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/next/-/next-10.0.8.tgz", + "integrity": "sha512-iDY65ce4Prn/9EnQpJGFMb5QJvtGWzZPk6KQqT7vDNu4D+jkivkk9NaAs/k1hR73pXdJHmhHer1s0YxLSghAKQ==", "requires": { "@babel/runtime": "7.12.5", "@hapi/accept": "5.0.1", - "@next/env": "10.0.7", - "@next/polyfill-module": "10.0.7", - "@next/react-dev-overlay": "10.0.7", - "@next/react-refresh-utils": "10.0.7", + "@next/env": "10.0.8", + "@next/polyfill-module": "10.0.8", + "@next/react-dev-overlay": "10.0.8", + "@next/react-refresh-utils": "10.0.8", "@opentelemetry/api": "0.14.0", "ast-types": "0.13.2", "browserslist": "4.16.1", @@ -24170,6 +23570,7 @@ "cssnano-simple": "1.2.2", "etag": "1.8.1", "find-cache-dir": "3.3.1", + "get-orientation": "1.1.2", "jest-worker": "24.9.0", "native-url": "0.3.4", "node-fetch": "2.6.1", @@ -24184,12 +23585,11 @@ "raw-body": "2.4.1", "react-is": "16.13.1", "react-refresh": "0.8.3", - "sharp": "0.26.3", "stream-browserify": "3.0.0", "styled-jsx": "3.3.2", "use-subscription": "1.5.1", "vm-browserify": "1.1.2", - "watchpack": "2.0.0-beta.13" + "watchpack": "2.1.1" }, "dependencies": { "browserslist": { @@ -24274,29 +23674,6 @@ "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", "dev": true }, - "node-abi": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz", - "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==", - "optional": true, - "requires": { - "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "optional": true - } - } - }, - "node-addon-api": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", - "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==", - "optional": true - }, "node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", @@ -24382,12 +23759,6 @@ "integrity": "sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==", "dev": true }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", - "optional": true - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -24468,18 +23839,6 @@ } } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -24490,7 +23849,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "devOptional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -24736,7 +24095,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "devOptional": true, + "dev": true, "requires": { "wrappy": "1" } @@ -25335,42 +24694,6 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, - "prebuild-install": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.0.1.tgz", - "integrity": "sha512-7GOJrLuow8yeiyv75rmvZyeMGzl8mdEX5gY69d6a6bHWmiPevwqFw+tQavhK0EYMaSg3/KD24cWqeQv1EWsqDQ==", - "optional": true, - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "optional": true, - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - } - } - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -25441,7 +24764,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "devOptional": true, + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -25512,18 +24835,6 @@ "unpipe": "1.0.0" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, "react": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", @@ -26223,7 +25534,7 @@ "version": "7.3.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "devOptional": true, + "dev": true, "requires": { "lru-cache": "^6.0.0" }, @@ -26232,19 +25543,13 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "devOptional": true, + "dev": true, "requires": { "yallist": "^4.0.0" } } } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "optional": true - }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -26292,24 +25597,6 @@ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, - "sharp": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.26.3.tgz", - "integrity": "sha512-NdEJ9S6AMr8Px0zgtFo1TJjMK/ROMU92MkDtYn2BBrDjIx3YfH9TUyGdzPC+I/L619GeYQc690Vbaxc5FPCCWg==", - "optional": true, - "requires": { - "array-flatten": "^3.0.0", - "color": "^3.1.3", - "detect-libc": "^1.0.3", - "node-addon-api": "^3.0.2", - "npmlog": "^4.1.2", - "prebuild-install": "^6.0.0", - "semver": "^7.3.2", - "simple-get": "^4.0.0", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - } - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -26326,16 +25613,9 @@ "dev": true }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" }, "shortid": { "version": "2.2.16", @@ -26386,58 +25666,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "devOptional": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "optional": true - }, - "simple-get": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz", - "integrity": "sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==", - "optional": true, - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "optional": true, - "requires": { - "mimic-response": "^3.1.0" - } - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "optional": true - } - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "optional": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "optional": true - } - } + "dev": true }, "sirv": { "version": "1.0.10", @@ -26788,6 +26017,24 @@ "xtend": "^4.0.0" } }, + "stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "requires": { + "debug": "2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -26805,7 +26052,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "devOptional": true, + "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -26816,7 +26063,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "devOptional": true, + "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -27086,7 +26333,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "devOptional": true, + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -27112,12 +26359,6 @@ "min-indent": "^1.0.0" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "optional": true - }, "style-search": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", @@ -27919,44 +27160,6 @@ } } }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "optional": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "optional": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "optional": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "testcafe": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/testcafe/-/testcafe-1.12.0.tgz", @@ -28845,7 +28048,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "devOptional": true, + "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -29160,9 +28363,9 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, "watchpack": { - "version": "2.0.0-beta.13", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.0-beta.13.tgz", - "integrity": "sha512-ZEFq2mx/k5qgQwgi6NOm+2ImICb8ngAkA/rZ6oyXZ7SgPn3pncf+nfhYTCrs3lmHwOxnPtGLTOuFLfpSMh1VMA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", + "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -29281,12 +28484,6 @@ "isexe": "^2.0.0" } }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "optional": true - }, "which-promise": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-promise/-/which-promise-1.0.0.tgz", @@ -29321,15 +28518,6 @@ } } }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -29350,7 +28538,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "devOptional": true + "dev": true }, "write-file-atomic": { "version": "3.0.3", @@ -29384,7 +28572,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "devOptional": true + "dev": true }, "yaml": { "version": "1.10.0", diff --git a/package.json b/package.json index 39f8752..a895588 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "date-fns": "2.18.0", "js-cookie": "2.2.1", "lodash": "4.17.21", - "next": "10.0.7", + "next": "10.0.8", "normalize.css": "8.0.1", "react": "17.0.1", "react-beautiful-dnd": "13.0.0", From 40365a626f2fe4fcea6ea996a2d8abfa7102a9f6 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Mon, 15 Mar 2021 20:38:13 +0200 Subject: [PATCH 3/5] Type few anys --- src/api/eventApi.ts | 4 ++-- src/api/feedApi.ts | 4 ++-- src/api/jobAdApi.ts | 4 ++-- src/api/signupApi.ts | 8 ++++---- src/pages/admin/events/[id].tsx | 4 ++-- src/pages/admin/signups/[id]/email.tsx | 2 +- tsconfig.json | 1 + 7 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/api/eventApi.ts b/src/api/eventApi.ts index 799e772..d2cb0e7 100644 --- a/src/api/eventApi.ts +++ b/src/api/eventApi.ts @@ -43,7 +43,7 @@ class EventApi { } } - static async createEvent(data: any): Promise { + static async createEvent(data: Event): Promise { try { const resp = await axios.post(URL, data, { headers: { @@ -57,7 +57,7 @@ class EventApi { } } - static async updateEvent(data: any): Promise { + static async updateEvent(data: Event): Promise { try { const putUrl = `${URL}${data.id}/`; const resp = await axios.put(putUrl, data, { diff --git a/src/api/feedApi.ts b/src/api/feedApi.ts index 2e2c366..6661c62 100644 --- a/src/api/feedApi.ts +++ b/src/api/feedApi.ts @@ -33,7 +33,7 @@ class FeedApi { } } - static async createPost(data): Promise { + static async createPost(data: Post): Promise { try { const resp = await axios.post(URL, data, { headers: { @@ -47,7 +47,7 @@ class FeedApi { } } - static async updatePost(data): Promise { + static async updatePost(data: Post): Promise { try { const putUrl = `${URL}${data.id}/`; const resp = await axios.put(putUrl, data, { diff --git a/src/api/jobAdApi.ts b/src/api/jobAdApi.ts index 4ed51b7..2398906 100644 --- a/src/api/jobAdApi.ts +++ b/src/api/jobAdApi.ts @@ -43,7 +43,7 @@ class JobAdApi { } } - static async createJobAd(data: any): Promise { + static async createJobAd(data: JobAd): Promise { try { const resp = await axios.post(URL, data, { headers: { @@ -57,7 +57,7 @@ class JobAdApi { } } - static async updateJobAd(data: any): Promise { + static async updateJobAd(data: JobAd): Promise { try { const putUrl = `${URL}${data.id}/`; const resp = await axios.put(putUrl, data, { diff --git a/src/api/signupApi.ts b/src/api/signupApi.ts index d312b89..dda6889 100644 --- a/src/api/signupApi.ts +++ b/src/api/signupApi.ts @@ -105,7 +105,7 @@ class SignupApi { } } - static async createForm(data): Promise { + static async createForm(data: SignupForm): Promise { try { const resp = await axios.post(FORM_URL, data, { headers: { @@ -119,7 +119,7 @@ class SignupApi { } } - static async updateForm(data): Promise { + static async updateForm(data: SignupForm): Promise { try { const putUrl = `${FORM_URL}${data.id}/`; const resp = await axios.put(putUrl, data, { @@ -148,7 +148,7 @@ class SignupApi { } } - static async signupFormSendEmail(data, id): Promise { + static async signupFormSendEmail(data: any, id: number): Promise { try { const resp = await axios.post(`${FORM_URL}${id}/sendemail/`, data, { headers: { @@ -162,7 +162,7 @@ class SignupApi { } } - static async getSignups(id): Promise { + static async getSignups(id: number): Promise { try { const resp = await axios.get(`${FORM_URL}${id}/signups/`, { headers: { diff --git a/src/pages/admin/events/[id].tsx b/src/pages/admin/events/[id].tsx index acc92f8..c29b285 100644 --- a/src/pages/admin/events/[id].tsx +++ b/src/pages/admin/events/[id].tsx @@ -198,7 +198,7 @@ const EventCreatePage: NextPage = () => { } }, [id]); - const onSubmit = async (data) => { + const onSubmit = async (data: any) => { try { const payload = data.formData; payload.signup_id = payload.signupForm; @@ -231,7 +231,7 @@ const EventCreatePage: NextPage = () => { } }; - const onChange = (data) => setFormData(data.formData); + const onChange = (data: any) => setFormData(data.formData); const onFocus = () => setStatusMessage(null); const title = formData?.id ? `Edit Event "${formData.title_fi}"` diff --git a/src/pages/admin/signups/[id]/email.tsx b/src/pages/admin/signups/[id]/email.tsx index a7f0eaa..e578b86 100644 --- a/src/pages/admin/signups/[id]/email.tsx +++ b/src/pages/admin/signups/[id]/email.tsx @@ -64,7 +64,7 @@ const SignupEmailPage: NextPage = () => { const onSubmit = async (data) => { try { const payload = data.formData; - await SignupApi.signupFormSendEmail(payload, id); + await SignupApi.signupFormSendEmail(payload, Number(id)); setStatusMessage("Email sent successfully"); } catch (err) { setError(err); diff --git a/tsconfig.json b/tsconfig.json index 3a9954a..94a500f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,6 +11,7 @@ "moduleResolution": "node", "noEmit": true, "noFallthroughCasesInSwitch": true, + "noImplicitAny": false, // TODO: switch true "noUnusedLocals": false, // TODO: switch true "noUnusedParameters": false, // TODO: switch true "resolveJsonModule": true, From febbdea203bbac4db744ff9715c3a4193217d42a Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Mon, 15 Mar 2021 20:40:06 +0200 Subject: [PATCH 4/5] Simplify index.d.ts --- types/index.d.ts | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index 069dc6a..c75b1a3 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,14 +1,4 @@ -declare module "*.png" { - const value: any; - export = value; -} -declare module "*.jpg" { - const value: any; - export = value; -} -declare module "*.jpeg" { - const value: any; - export = value; -} +declare module "*.png"; +declare module "*.jpg"; declare module "*.gif"; declare module "*.svg"; From 03bc750eea80f0130f8708aca7821528ddcfb3ad Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Mon, 15 Mar 2021 20:54:43 +0200 Subject: [PATCH 5/5] Add some types & ignore console on APIs & tests --- src/api/eventApi.ts | 1 + src/api/feedApi.ts | 1 + src/api/jobAdApi.ts | 1 + src/api/signupApi.ts | 1 + src/api/tagApi.ts | 1 + src/components/Icon.tsx | 2 +- .../Widgets/SignupQuestionsWidget/OptionsWidget.tsx | 10 +++++----- .../Widgets/SignupQuestionsWidget/QuestionList.tsx | 6 +++--- src/pages/admin/signups/[id]/list.tsx | 8 ++++---- tests/testcafe/utils.ts | 1 + 10 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/api/eventApi.ts b/src/api/eventApi.ts index d2cb0e7..86fdaa4 100644 --- a/src/api/eventApi.ts +++ b/src/api/eventApi.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import axios from "axios"; import Event from "@models/Event"; import { getAuthHeader } from "@utils/auth"; diff --git a/src/api/feedApi.ts b/src/api/feedApi.ts index 6661c62..717d5c6 100644 --- a/src/api/feedApi.ts +++ b/src/api/feedApi.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import axios from "axios"; import Post from "@models/Feed"; import { getAuthHeader } from "@utils/auth"; diff --git a/src/api/jobAdApi.ts b/src/api/jobAdApi.ts index 2398906..c28c5a0 100644 --- a/src/api/jobAdApi.ts +++ b/src/api/jobAdApi.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import axios from "axios"; import JobAd from "@models/JobAd"; import { getAuthHeader } from "@utils/auth"; diff --git a/src/api/signupApi.ts b/src/api/signupApi.ts index dda6889..fa57f44 100644 --- a/src/api/signupApi.ts +++ b/src/api/signupApi.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import axios from "axios"; import { Signup, SignupForm } from "@models/Signup"; import { getAuthHeader } from "@utils/auth"; diff --git a/src/api/tagApi.ts b/src/api/tagApi.ts index 6a7e26c..8ec4f4c 100644 --- a/src/api/tagApi.ts +++ b/src/api/tagApi.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import axios from "axios"; import Tag from "@models/Tag"; diff --git a/src/components/Icon.tsx b/src/components/Icon.tsx index 13b972b..1efc431 100644 --- a/src/components/Icon.tsx +++ b/src/components/Icon.tsx @@ -12,7 +12,7 @@ export enum IconType { interface IconProps { name: IconType; link?: string; - onClick?: (event?: any) => void; + onClick?: React.MouseEventHandler; } const nameToIcon = (name: IconType): JSX.Element | string => { diff --git a/src/components/Widgets/SignupQuestionsWidget/OptionsWidget.tsx b/src/components/Widgets/SignupQuestionsWidget/OptionsWidget.tsx index f01bf59..098a5da 100644 --- a/src/components/Widgets/SignupQuestionsWidget/OptionsWidget.tsx +++ b/src/components/Widgets/SignupQuestionsWidget/OptionsWidget.tsx @@ -10,7 +10,7 @@ interface OptionsWidgetProps { } class OptionsWidget extends React.Component { - handleListOptionsChange = (questions: Question[], index: number) => (event) => { + handleListOptionsChange = (questions: Question[], index: number): React.ChangeEventHandler => (event) => { const { onChange } = this.props; const val = event.target.value; const lst = val.split(",").map((p) => p.trimLeft()); @@ -19,15 +19,15 @@ class OptionsWidget extends React.Component { onChange(questions); }; - handleTextOptionsChange = (questions: Question[], index: number) => (event) => { + handleTextOptionsChange = (questions: Question[], index: number): React.ChangeEventHandler => (event) => { const { onChange } = this.props; const val = event.target.value; // eslint-disable-next-line no-param-reassign - questions[index].options = val; + questions[index].options = val as unknown as string[]; // TODO: Check type onChange(questions); }; - handleIntegerOptionsChange = (questions: Question[], index: number) => (event) => { + handleIntegerOptionsChange = (questions: Question[], index: number): React.ChangeEventHandler => (event) => { const { onChange } = this.props; const val = event.target.value; if (val !== "") { @@ -43,7 +43,7 @@ class OptionsWidget extends React.Component { onChange(questions); }; - handleRequiredChange = (questions: Question[], index: number) => (event) => { + handleRequiredChange = (questions: Question[], index: number): React.ChangeEventHandler => (event) => { const { onChange } = this.props; const val: boolean = event.target.checked; console.log(val); diff --git a/src/components/Widgets/SignupQuestionsWidget/QuestionList.tsx b/src/components/Widgets/SignupQuestionsWidget/QuestionList.tsx index 61e8164..2b3dbb2 100644 --- a/src/components/Widgets/SignupQuestionsWidget/QuestionList.tsx +++ b/src/components/Widgets/SignupQuestionsWidget/QuestionList.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { ReactNode } from "react"; import styled from "styled-components"; import { Draggable } from "react-beautiful-dnd"; import { colors } from "@theme/colors"; @@ -17,8 +17,8 @@ const WidgetRow = styled.div` interface QuestionListProps { questions: Question[]; - innerRef: any; - placeholder: any; + innerRef: React.Ref; + placeholder: ReactNode; onChange: (value: Question[]) => void; } diff --git a/src/pages/admin/signups/[id]/list.tsx b/src/pages/admin/signups/[id]/list.tsx index 4ebe5a6..4af8344 100644 --- a/src/pages/admin/signups/[id]/list.tsx +++ b/src/pages/admin/signups/[id]/list.tsx @@ -9,8 +9,8 @@ import SignupApi from "@api/signupApi"; import { Button } from "@components/index"; import noop from "@utils/noop"; -const StyledButton = styled(Button) <{ colorOverride: "red" | "green" }>` - background-color: ${(p: any) => p.colorOverride}; +const StyledButton = styled(Button) <{ $colorOverride: "red" | "green" }>` + background-color: ${(p) => p.$colorOverride}; `; const SignupEmailPage: NextPage = () => { @@ -64,7 +64,7 @@ const SignupEmailPage: NextPage = () => { ))} q.title)} separator=";"> - + Download CSV @@ -81,7 +81,7 @@ const SignupEmailPage: NextPage = () => { ))} - confirmDelete(s, questions[0])}> + confirmDelete(s, questions[0])}> Delete diff --git a/tests/testcafe/utils.ts b/tests/testcafe/utils.ts index 140341b..7653030 100644 --- a/tests/testcafe/utils.ts +++ b/tests/testcafe/utils.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import { Selector, ClientFunction, RequestLogger } from "testcafe"; import axios from "axios";