mirror of
https://github.com/fergalmoran/radio-otherway.git
synced 2025-12-22 09:50:29 +00:00
First auth steps done
This commit is contained in:
7
.env
7
.env
@@ -1,5 +1,12 @@
|
||||
NEXT_PUBLIC_API_URL=https://otherway.dev.fergl.ie:3000
|
||||
|
||||
#auth
|
||||
NEXTAUTH_URL=https://otherway.dev.fergl.ie:3000
|
||||
GOOGLE_CLIENT_ID=47147490249-adhc8cbko4nvigrfoodo17oa3qfsg4pd.apps.googleusercontent.com
|
||||
GOOGLE_CLIENT_SECRET=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
|
||||
|
||||
|
||||
#calendar api
|
||||
GOOGLE_CALENDAR_PROJECT_ID=47147490249
|
||||
GOOGLE_CALENDAR_ID=geh501qel59lf3505v2huebo18@group.calendar.google.com
|
||||
GOOGLE_CALENDAR_API_KEY=AIzaSyAMvrSrwqvz9o4Y8b-0zneU-REWDIzuKR0
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
"eslint": "8.32.0",
|
||||
"eslint-config-next": "13.1.5",
|
||||
"next": "13.1.5",
|
||||
"next-auth": "^4.19.0",
|
||||
"react": "18.2.0",
|
||||
"react-dom": "18.2.0",
|
||||
"react-icons": "^4.7.1",
|
||||
|
||||
BIN
public/logo.png
Normal file
BIN
public/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.3 KiB |
8
src/app/(auth)/login/page.tsx
Normal file
8
src/app/(auth)/login/page.tsx
Normal file
@@ -0,0 +1,8 @@
|
||||
import { LoginPage } from "@/components/auth";
|
||||
import React from "react";
|
||||
|
||||
const Login = async () => {
|
||||
return <LoginPage />;
|
||||
};
|
||||
|
||||
export default Login;
|
||||
@@ -1,6 +1,9 @@
|
||||
"use client";
|
||||
|
||||
import "./globals.css";
|
||||
import { Inter } from "@next/font/google";
|
||||
import { NavBar } from "@/components/layout";
|
||||
import { SessionProvider } from "next-auth/react";
|
||||
|
||||
const inter = Inter({ subsets: ["latin"] });
|
||||
|
||||
@@ -13,10 +16,12 @@ export default function RootLayout({
|
||||
<html lang="en" data-theme="bumblebee">
|
||||
<head />
|
||||
<body className={`${inter.className} h-screen`}>
|
||||
<NavBar />
|
||||
<div className="-mt-[4rem] px-8 grid h-full bg-gradient-to-br from-primary to-secondary pt-20">
|
||||
{children}
|
||||
</div>
|
||||
<SessionProvider>
|
||||
<NavBar />
|
||||
<div className="-mt-[4rem] grid h-full bg-gradient-to-br from-primary to-secondary px-8 pt-20">
|
||||
{children}
|
||||
</div>
|
||||
</SessionProvider>
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
|
||||
@@ -14,7 +14,7 @@ export default async function Home() {
|
||||
) : (
|
||||
<div>
|
||||
<h1 className="text-xl font-extrabold font-title text-primary-content md:text-2xl lg:text-4xl">
|
||||
Upcoming Radio Otherway Shows
|
||||
Upcoming Shows
|
||||
</h1>
|
||||
|
||||
<div className="mt-4 overflow-x-auto">
|
||||
@@ -29,11 +29,7 @@ export default async function Home() {
|
||||
<tbody>
|
||||
{results.events.map((r: any) => (
|
||||
<tr key={r.id}>
|
||||
<td>
|
||||
{new Date(r.start.dateTime).toLocaleString(
|
||||
"en-IE"
|
||||
)}
|
||||
</td>
|
||||
<td>{new Date(r.start.dateTime).toLocaleString("en-IE")}</td>
|
||||
<td>{r.summary}</td>
|
||||
<td>
|
||||
<button className="btn">Remind me</button>
|
||||
|
||||
19
src/components/auth/LoginPage.tsx
Normal file
19
src/components/auth/LoginPage.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
"use client";
|
||||
import React from "react";
|
||||
import { signIn } from "next-auth/react";
|
||||
|
||||
const LoginPage = () => {
|
||||
return (
|
||||
<div className="flex justify-center w-1/2 place-items-center bg-base-200">
|
||||
<div className="px-10 py-24">
|
||||
<h2 className="mb-2 text-2xl font-semibold text-center">Login </h2>
|
||||
|
||||
<div key="{provider.name}">
|
||||
<button onClick={() => signIn("google")}>Sign in with Google</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default LoginPage;
|
||||
3
src/components/auth/index.ts
Normal file
3
src/components/auth/index.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
import LoginPage from "./LoginPage";
|
||||
|
||||
export { LoginPage };
|
||||
@@ -1,15 +1,18 @@
|
||||
"use client";
|
||||
import { signOut, useSession } from "next-auth/react";
|
||||
import React from "react";
|
||||
import { BiLogInCircle } from "react-icons/bi";
|
||||
const Navbar = () => {
|
||||
const { data: session, status } = useSession();
|
||||
return (
|
||||
<div className="sticky top-0 z-30 flex h-16 w-full justify-center bg-base-100 bg-opacity-90 text-base-content shadow-sm backdrop-blur transition-all duration-100">
|
||||
<nav className="navbar w-full">
|
||||
<div className="sticky top-0 z-30 flex justify-center w-full h-16 transition-all duration-100 shadow-sm bg-base-100 bg-opacity-90 text-base-content backdrop-blur">
|
||||
<nav className="w-full navbar">
|
||||
<div className="navbar-start">
|
||||
<div className="dropdown">
|
||||
<label tabIndex={0} className="btn-ghost btn lg:hidden">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className="h-5 w-5"
|
||||
className="w-5 h-5"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
@@ -24,24 +27,24 @@ const Navbar = () => {
|
||||
</label>
|
||||
<ul
|
||||
tabIndex={0}
|
||||
className="dropdown-content menu rounded-box menu-compact mt-3 w-52 bg-base-100 p-2 shadow"
|
||||
className="p-2 mt-3 shadow dropdown-content menu rounded-box menu-compact w-52 bg-base-100"
|
||||
>
|
||||
<li>
|
||||
<a className="btn-ghost drawer-button btn normal-case">
|
||||
<a className="normal-case btn-ghost drawer-button btn">
|
||||
Item 1
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a className="btn-ghost drawer-button btn normal-case">
|
||||
<a className="normal-case btn-ghost drawer-button btn">
|
||||
Item 3
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<a className="btn-ghost btn text-xl normal-case">Radio::Otherway</a>
|
||||
<a className="text-xl normal-case btn-ghost btn">Radio::Otherway</a>
|
||||
</div>
|
||||
<div className="navbar-center hidden lg:flex">
|
||||
<ul className="menu menu-horizontal px-1">
|
||||
<div className="hidden navbar-center lg:flex">
|
||||
<ul className="px-1 menu menu-horizontal">
|
||||
<li>
|
||||
<a>Coming Up</a>
|
||||
</li>
|
||||
@@ -51,10 +54,17 @@ const Navbar = () => {
|
||||
</ul>
|
||||
</div>
|
||||
<div className="navbar-end">
|
||||
<a className="btn gap-4">
|
||||
<BiLogInCircle className="inline-block h-5 w-5 stroke-current md:h-6 md:w-6" />
|
||||
<span>Login</span>
|
||||
</a>
|
||||
{status === "authenticated" ? (
|
||||
<button className="gap-4 btn" onClick={() => signOut()}>
|
||||
<BiLogInCircle className="inline-block w-5 h-5 stroke-current md:h-6 md:w-6" />
|
||||
<span>Logout</span>
|
||||
</button>
|
||||
) : (
|
||||
<a className="gap-4 btn">
|
||||
<BiLogInCircle className="inline-block w-5 h-5 stroke-current md:h-6 md:w-6" />
|
||||
<span>Login</span>
|
||||
</a>
|
||||
)}
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
10
src/components/widgets/ErrorText.tsx
Normal file
10
src/components/widgets/ErrorText.tsx
Normal file
@@ -0,0 +1,10 @@
|
||||
import React from "react";
|
||||
|
||||
interface IErrorTextProps extends React.PropsWithChildren {
|
||||
styleClass: string;
|
||||
}
|
||||
const ErrorText = ({ styleClass, children }: IErrorTextProps) => {
|
||||
return <p className={`text-center text-error ${styleClass}`}>{children}</p>;
|
||||
};
|
||||
|
||||
export default ErrorText;
|
||||
48
src/components/widgets/InputText.tsx
Normal file
48
src/components/widgets/InputText.tsx
Normal file
@@ -0,0 +1,48 @@
|
||||
import React from "react";
|
||||
|
||||
interface IInputTextProps {
|
||||
labelTitle: string;
|
||||
labelStyle?: string;
|
||||
type: string;
|
||||
containerStyle: string;
|
||||
defaultValue: string;
|
||||
placeholder?: string;
|
||||
updateFormValue: (type: string, value: string) => void;
|
||||
updateType: string;
|
||||
}
|
||||
const InputText = ({
|
||||
labelTitle,
|
||||
labelStyle = "",
|
||||
type,
|
||||
containerStyle,
|
||||
defaultValue,
|
||||
placeholder = "",
|
||||
updateFormValue,
|
||||
updateType,
|
||||
}: IInputTextProps) => {
|
||||
const [value, setValue] = React.useState(defaultValue);
|
||||
|
||||
const updateInputValue = (val: string) => {
|
||||
setValue(val);
|
||||
updateFormValue(updateType, val);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={`form-control w-full ${containerStyle}`}>
|
||||
<label className="label">
|
||||
<span className={"label-text text-base-content " + labelStyle}>
|
||||
{labelTitle}
|
||||
</span>
|
||||
</label>
|
||||
<input
|
||||
type={type || "text"}
|
||||
value={value}
|
||||
placeholder={placeholder || ""}
|
||||
onChange={(e) => updateInputValue(e.target.value)}
|
||||
className="w-full input-bordered input "
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default InputText;
|
||||
4
src/components/widgets/index.ts
Normal file
4
src/components/widgets/index.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
import ErrorText from "./ErrorText";
|
||||
import InputText from "./InputText";
|
||||
|
||||
export { ErrorText, InputText };
|
||||
13
src/pages/api/auth/[...nextauth].js
Normal file
13
src/pages/api/auth/[...nextauth].js
Normal file
@@ -0,0 +1,13 @@
|
||||
import NextAuth from "next-auth";
|
||||
import GoogleProvider from "next-auth/providers/google";
|
||||
|
||||
export const authOptions = {
|
||||
providers: [
|
||||
GoogleProvider({
|
||||
clientId: process.env.GOOGLE_CLIENT_ID,
|
||||
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
|
||||
}),
|
||||
],
|
||||
};
|
||||
|
||||
export default NextAuth(authOptions);
|
||||
@@ -1,13 +0,0 @@
|
||||
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
|
||||
import type { NextApiRequest, NextApiResponse } from 'next'
|
||||
|
||||
type Data = {
|
||||
name: string
|
||||
}
|
||||
|
||||
export default function handler(
|
||||
req: NextApiRequest,
|
||||
res: NextApiResponse<Data>
|
||||
) {
|
||||
res.status(200).json({ name: 'John Doe' })
|
||||
}
|
||||
79
yarn.lock
79
yarn.lock
@@ -2,7 +2,7 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@babel/runtime@^7.20.7":
|
||||
"@babel/runtime@^7.16.3", "@babel/runtime@^7.20.7":
|
||||
version "7.20.13"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b"
|
||||
integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==
|
||||
@@ -156,6 +156,11 @@
|
||||
"@nodelib/fs.scandir" "2.1.5"
|
||||
fastq "^1.6.0"
|
||||
|
||||
"@panva/hkdf@^1.0.1":
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.0.2.tgz#bab0f09d09de9fd83628220d496627681bc440d6"
|
||||
integrity sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA==
|
||||
|
||||
"@pkgr/utils@^2.3.1":
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03"
|
||||
@@ -563,6 +568,11 @@ concat-map@0.0.1:
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
|
||||
|
||||
cookie@^0.5.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
|
||||
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
|
||||
|
||||
cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
||||
@@ -1636,6 +1646,11 @@ isexe@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||
|
||||
jose@^4.10.0, jose@^4.9.3:
|
||||
version "4.11.2"
|
||||
resolved "https://registry.yarnpkg.com/jose/-/jose-4.11.2.tgz#d9699307c02e18ff56825843ba90e2fae9f09e23"
|
||||
integrity sha512-njj0VL2TsIxCtgzhO+9RRobBvws4oYyCM8TpvoUQwl/MbIM3NFJRR9+e6x0sS5xXaP1t6OCBkaBME98OV9zU5A==
|
||||
|
||||
js-sdsl@^4.1.4:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711"
|
||||
@@ -1798,6 +1813,21 @@ natural-compare@^1.4.0:
|
||||
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
|
||||
|
||||
next-auth@^4.19.0:
|
||||
version "4.19.0"
|
||||
resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.19.0.tgz#c6b73d546ef2103c9eaa4713c076718ec8c3c4c1"
|
||||
integrity sha512-56Pc/Ni0cxfrVDAz2KeWdj+VXvABbHF1grgFR4+ktXbRmKQOiMU9uyMwhasBQkbL+pRrWujO0Ib/bwkP0oZS4g==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.16.3"
|
||||
"@panva/hkdf" "^1.0.1"
|
||||
cookie "^0.5.0"
|
||||
jose "^4.9.3"
|
||||
oauth "^0.9.15"
|
||||
openid-client "^5.1.0"
|
||||
preact "^10.6.3"
|
||||
preact-render-to-string "^5.1.19"
|
||||
uuid "^8.3.2"
|
||||
|
||||
next@13.1.5:
|
||||
version "13.1.5"
|
||||
resolved "https://registry.yarnpkg.com/next/-/next-13.1.5.tgz#d0c230ccecf18414db78d180537d0474c53fdf73"
|
||||
@@ -1850,11 +1880,21 @@ normalize-range@^0.1.2:
|
||||
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
|
||||
integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
|
||||
|
||||
oauth@^0.9.15:
|
||||
version "0.9.15"
|
||||
resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1"
|
||||
integrity sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==
|
||||
|
||||
object-assign@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
|
||||
|
||||
object-hash@^2.0.1:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5"
|
||||
integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==
|
||||
|
||||
object-hash@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
|
||||
@@ -1923,6 +1963,11 @@ object.values@^1.1.6:
|
||||
define-properties "^1.1.4"
|
||||
es-abstract "^1.20.4"
|
||||
|
||||
oidc-token-hash@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz#ae6beec3ec20f0fd885e5400d175191d6e2f10c6"
|
||||
integrity sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==
|
||||
|
||||
once@^1.3.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
@@ -1947,6 +1992,16 @@ open@^8.4.0:
|
||||
is-docker "^2.1.1"
|
||||
is-wsl "^2.2.0"
|
||||
|
||||
openid-client@^5.1.0:
|
||||
version "5.3.2"
|
||||
resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-5.3.2.tgz#fcc2c16f9681fa5f03ee0581b0935f88fc49f11f"
|
||||
integrity sha512-nXXt+cna0XHOw+WqjMZOmuXw/YZEMwfWD2lD7tCsFtsBjMQGVXA+NZABA3upYBET1suhIsmfd7GnxG4jCAnvYQ==
|
||||
dependencies:
|
||||
jose "^4.10.0"
|
||||
lru-cache "^6.0.0"
|
||||
object-hash "^2.0.1"
|
||||
oidc-token-hash "^5.0.1"
|
||||
|
||||
optionator@^0.9.1:
|
||||
version "0.9.1"
|
||||
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
|
||||
@@ -2082,6 +2137,18 @@ postcss@^8.4.18, postcss@^8.4.21:
|
||||
picocolors "^1.0.0"
|
||||
source-map-js "^1.0.2"
|
||||
|
||||
preact-render-to-string@^5.1.19:
|
||||
version "5.2.6"
|
||||
resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz#0ff0c86cd118d30affb825193f18e92bd59d0604"
|
||||
integrity sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==
|
||||
dependencies:
|
||||
pretty-format "^3.8.0"
|
||||
|
||||
preact@^10.6.3:
|
||||
version "10.11.3"
|
||||
resolved "https://registry.yarnpkg.com/preact/-/preact-10.11.3.tgz#8a7e4ba19d3992c488b0785afcc0f8aa13c78d19"
|
||||
integrity sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
||||
@@ -2097,6 +2164,11 @@ prettier@^2.8.3:
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.3.tgz#ab697b1d3dd46fb4626fbe2f543afe0cc98d8632"
|
||||
integrity sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==
|
||||
|
||||
pretty-format@^3.8.0:
|
||||
version "3.8.0"
|
||||
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385"
|
||||
integrity sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==
|
||||
|
||||
prop-types@^15.8.1:
|
||||
version "15.8.1"
|
||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
|
||||
@@ -2539,6 +2611,11 @@ util-deprecate@^1.0.2:
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
|
||||
|
||||
uuid@^8.3.2:
|
||||
version "8.3.2"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
||||
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
|
||||
|
||||
uuid@^9.0.0:
|
||||
version "9.0.0"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5"
|
||||
|
||||
Reference in New Issue
Block a user